Peanut-GB เป็นไลบรารีตัวจำลองเกมบอยส่วนหัวของไฟล์เดียวที่ใช้ตัวจำลองเกมบอยนี้ จุดมุ่งหมายคือการสร้างไลบรารีโปรแกรมจำลอง Game Boy (DMG) แบบพกพาความเร็วสูงที่อาจใช้กับแพลตฟอร์มใดๆ ที่มีคอมไพเลอร์ C99
โปรแกรมจำลองนี้ เร็วมาก มากจนสามารถทำงานได้เต็มความเร็วบน Raspberry Pi Pico! ตรวจสอบ BENCHMARK.md เพื่อดูเกณฑ์มาตรฐานของ Peanut-GB
ขณะนี้รองรับเฉพาะ Game Boy ดั้งเดิม (DMG) เท่านั้น แต่งานเบื้องต้นได้เสร็จสิ้นแล้วเพื่อรองรับ Game Boy Color (ดู #50)
โปรแกรมจำลองนี้อยู่ระหว่างดำเนินการและอาจคลาดเคลื่อนได้ (แม้ว่าจะผ่านการทดสอบ CPU และการทดสอบเวลาของคำสั่งของ Blargg ก็ตาม) ด้วยเหตุนี้ เกมบางเกมอาจทำงานไม่ถูกต้องหรือไม่ทำงานเลย โปรดค้นหาโปรแกรมจำลองอื่นหากความแม่นยำเป็นสิ่งสำคัญ
ตัวอย่างการใช้งานหลักมีให้ใน Peanut_sdl.c ซึ่งใช้ SDL2 เพื่อวาดหน้าจอและรับอินพุต เรียกใช้ cmake
หรือ make
ในโฟลเดอร์ ./examples/sdl2/ เพื่อคอมไพล์
เรียกใช้ peanut-sdl
ซึ่งจะสร้างหน้าต่าง ดรอปโซน ที่คุณสามารถลากและวางไฟล์ ROM ลงไปได้ หรือรันในเทอร์มินัลโดยใช้ peanut-sdl game.gb
ซึ่งจะสร้างไฟล์บันทึก game.sav
สำหรับเกมโดยอัตโนมัติหากไม่พบ หรือเรียกใช้ด้วย peanut-sdl game.gb save.sav
เพื่อระบุไฟล์บันทึก
หมายเหตุ: GIF แบบเคลื่อนไหวที่แสดงที่นี่จำกัดไว้ที่ 50fps ในขณะที่การจำลองทำงานที่ ~60fps เนื่องจากตัวถอดรหัส GIF ยอดนิยมจำกัด FPS สูงสุดไว้ที่ 50
การกระทำ | คีย์บอร์ด | จอยแพด |
---|---|---|
ก | z | ก |
บี | x | บี |
เริ่ม | กลับ | เริ่ม |
เลือก | แบ็คสเปซ | กลับ |
ดี-แพด | ปุ่มลูกศร | ดีแพด |
ทำซ้ำ ก | ก | |
ทำซ้ำ B | ส | |
ความเร็วปกติ | 1 | |
เทอร์โบ x2 (กดค้าง) | ช่องว่าง | |
เทอร์โบ X2 (สลับ) | 2 | |
เทอร์โบ X3 (สลับ) | 3 | |
เทอร์โบ X4 (สลับ) | 4 | |
รีเซ็ต | ร | |
เปลี่ยนจานสี | พี | |
รีเซ็ตจานสี | กะ + หน้า | |
เต็มจอ | F11 / ฟ | |
Frameskip (สลับ) | โอ | |
อินเตอร์เลซ (สลับ) | ฉัน | |
ถ่ายโอนข้อมูล BMP (สลับ) | ข |
โหมด Frameskip และ Interlaced จะปิดอยู่ตามค่าเริ่มต้น Frameskip สลับระหว่าง 60 FPS และ 30 FPS
การกด 'b' จะดัมพ์แต่ละเฟรมเป็นไฟล์บิตแมป 24 บิตในโฟลเดอร์ปัจจุบัน ดู /screencaps/README.md สำหรับข้อมูลเพิ่มเติม
โปรเจ็กต์ต่อไปนี้ใช้ Peanut-GB โดยไม่เรียงลำดับใดเป็นพิเศษและแสดงรายการโดยสังเขป
เอกสารประกอบฟังก์ชันต้นแบบสามารถดูได้ที่ด้านล่างของ Peanut_gb.h
การใช้งานส่วนหน้าจะต้องมีฟังก์ชันจำนวนหนึ่งให้กับไลบรารี ฟังก์ชั่นเหล่านี้ถูกตั้งค่าเมื่อเรียก gb_init
ฟังก์ชันเสริมต่อไปนี้อาจถูกกำหนดไว้สำหรับฟังก์ชันการทำงานเพิ่มเติม
ฟังก์ชันนี้จำเป็นสำหรับการวาดภาพบนจอ LCD ตั้งค่าฟังก์ชันนี้โดยใช้ gb_init_lcd และเปิดใช้งานฟังก์ชัน LCD ภายใน Peanut-GB โดยกำหนด ENABLE_LCD เป็น 1 ก่อนที่จะรวมpeanut_gb.h ENABLE_LCD ถูกตั้งค่าเป็น 1 ตามค่าเริ่มต้น หากไม่ได้กำหนดไว้ก่อนหน้านี้ หากไม่ได้เรียก gb_init_lcd หรือ lcd_draw_line ถูกตั้งค่าเป็น NULL แสดงว่าการวาดบน LCD จะถูกปิดใช้งาน
ข้อมูลพิกเซลที่ส่งไปยัง lcd_draw_line มีทั้งข้อมูลเฉดสีและเลเยอร์ บิตที่มีนัยสำคัญน้อยที่สุดสองบิตแรกคือข้อมูลเฉดสี (ดำ มืด สว่าง ขาว) บิต 4 และ 5 เป็นข้อมูลเลเยอร์ (OBJ0, OBJ1, BG) ซึ่งสามารถใช้เพื่อเพิ่มสีสันให้กับเกมได้ในลักษณะเดียวกับที่ Game Boy Color ทำกับเกม Game Boy รุ่นเก่า
ฟังก์ชันเหล่านี้จำเป็นสำหรับการจำลองเสียงและเอาต์พุต Peanut-GB ไม่มีการจำลองเสียง ดังนั้นจึงต้องใช้ไลบรารีภายนอก ต้องกำหนดฟังก์ชันเหล่านี้และต้องเปิดใช้งานเอาต์พุตเสียงโดยกำหนด ENABLE_SOUND เป็น 1 ก่อนที่จะรวม Peanut_gb.h
ฟังก์ชันเหล่านี้จำเป็นสำหรับการสื่อสารแบบอนุกรม ตั้งค่าฟังก์ชันเหล่านี้โดยใช้ gb_init_serial หากไม่ได้ตั้งค่าฟังก์ชันเหล่านี้ การจำลองจะทำงานเหมือนกับไม่ได้เชื่อมต่อสายเคเบิลลิงค์
ฟังก์ชันเหล่านี้จัดทำโดย Peanut-GB
ฟังก์ชันนี้จะรีเซ็ตเกมที่กำลังเล่นอยู่ เหมือนกับว่าคอนโซลปิดและเปิดอยู่ gb_reset ถูกเรียกโดย gb_init เพื่อเริ่มต้นการลงทะเบียน CPU
ฟังก์ชั่นนี้จะคืนค่าขนาดการบันทึกของเกมที่กำลังเล่น ฟังก์ชันนี้จะคืนค่า 0 หากเกมไม่ได้ใช้ข้อมูลบันทึกใดๆ
ฟังก์ชันนี้จะรัน CPU จนกระทั่งแสดงผลแบบเต็มเฟรมไปยัง LCD
ฟังก์ชันนี้จะคำนวณแฮชของชื่อเกม แฮชนี้คำนวณในลักษณะเดียวกับ Game Boy Color เพื่อเพิ่มสีสันให้กับเกม Game Boy
ฟังก์ชันนี้ส่งคืนชื่อของเกม
ตั้งเวลาของนาฬิกาเรียลไทม์ (RTC) เกมบางเกมใช้ข้อมูล RTC นี้
เลิกใช้แล้ว: ห้ามใช้ RTC ถูกทำเครื่องหมายภายใน
ดำเนินการอิมเมจ bootrom เมื่อรีเซ็ต ต้องทำการรีเซ็ตหลังจากเรียก gb_set_bootrom เพื่อให้การเปลี่ยนแปลงเหล่านี้มีผล นี่เป็นเพราะว่า gb_init เรียก gb_reset แต่ gb_set_bootrom จะต้องถูกเรียกหลังจาก gb_init bootrom ต้องเป็น DMG หรือ MGB bootrom
โครงการนี้ได้รับอนุญาตภายใต้ใบอนุญาต MIT