Peanut-GB adalah pustaka emulator Game Boy header file tunggal yang didasarkan pada emulator gameboy ini. Tujuannya adalah untuk membuat pustaka emulator Game Boy (DMG) berkecepatan tinggi dan portabel yang dapat digunakan untuk platform apa pun yang memiliki kompiler C99.
Emulator ini sangat cepat . Sedemikian rupa sehingga bisa berjalan dengan kecepatan penuh di Raspberry Pi Pico! Kunjungi BENCHMARK.md untuk mengetahui benchmark Peanut-GB.
Hanya Game Boy (DMG) asli yang didukung saat ini, namun pekerjaan awal telah diselesaikan untuk mendukung Game Boy Color (lihat #50).
Emulator ini masih dalam proses dan mungkin tidak akurat (walaupun emulator ini lolos dari instruksi CPU dan pengujian waktu instruksi Blargg). Oleh karena itu, beberapa game mungkin tidak berjalan dengan benar atau tidak berjalan sama sekali. Silakan mencari emulator alternatif jika keakuratan itu penting.
Contoh implementasi unggulan diberikan di kacang_sdl.c, yang menggunakan SDL2 untuk menggambar layar dan mengambil masukan. Jalankan cmake
atau make
di folder ./examples/sdl2/ untuk mengkompilasinya.
Jalankan peanut-sdl
, yang membuat jendela drop-zone tempat Anda dapat menarik dan melepas file ROM. Alternatifnya, jalankan di terminal menggunakan peanut-sdl game.gb
, yang secara otomatis akan membuat file penyimpanan game.sav
untuk game tersebut jika tidak ditemukan. Atau, jalankan dengan peanut-sdl game.gb save.sav
untuk menentukan file penyimpanan.
Catatan: GIF animasi yang ditampilkan di sini dibatasi hingga 50fps, sementara emulasi berjalan pada kecepatan asli ~60fps. Ini karena dekoder GIF populer membatasi FPS maksimum hingga 50.
Tindakan | papan ketik | papan kegembiraan |
---|---|---|
A | z | A |
B | X | B |
Awal | Kembali | AWAL |
Memilih | Ruang belakang | KEMBALI |
D-Pad | Tombol Panah | DPAD |
Ulangi A | A | |
Ulangi B | S | |
Kecepatan Biasa | 1 | |
Turbo x2 (Tahan) | Ruang angkasa | |
Turbo X2 (Beralih) | 2 | |
Turbo X3 (Beralih) | 3 | |
Turbo X4 (Beralih) | 4 | |
Mengatur ulang | R | |
Ganti Palet | P | |
Atur Ulang Palet | Shift + hal | |
Layar penuh | F11 / f | |
Frameskip (Beralih) | Hai | |
Jalin (Beralih) | Saya | |
Buang BMP (Beralih) | B |
Mode Frameskip dan Interlaced keduanya dinonaktifkan secara default. Frameskip beralih antara 60 FPS dan 30 FPS.
Menekan 'b' akan membuang setiap frame sebagai file bitmap 24-bit di folder saat ini. Lihat /screencaps/README.md untuk informasi lebih lanjut.
Tanpa urutan tertentu, dan daftar yang tidak lengkap, proyek berikut menggunakan Peanut-GB.
Dokumentasi prototipe fungsi dapat ditemukan di bagian bawah Peanut_gb.h.
Implementasi front-end harus menyediakan sejumlah fungsi ke perpustakaan. Fungsi-fungsi ini disetel saat memanggil gb_init.
Fungsi opsional berikut dapat ditentukan untuk fungsionalitas lebih lanjut.
Fungsi ini diperlukan untuk menggambar LCD. Setel fungsi ini menggunakan gb_init_lcd dan aktifkan fungsionalitas LCD dalam Peanut-GB dengan menentukan ENABLE_LCD ke 1 sebelum menyertakan kacang_gb.h. ENABLE_LCD diatur ke 1 secara default jika tidak ditentukan sebelumnya. Jika gb_init_lcd tidak dipanggil atau lcd_draw_line diatur ke NULL, maka gambar LCD dinonaktifkan.
Data piksel yang dikirim ke lcd_draw_line dilengkapi dengan data bayangan dan lapisan. Dua bit paling tidak signifikan pertama adalah data bayangan (hitam, gelap, terang, putih). Bit 4 dan 5 adalah data lapisan (OBJ0, OBJ1, BG), yang dapat digunakan untuk menambahkan lebih banyak warna pada game dengan cara yang sama seperti yang dilakukan Game Boy Color pada game Game Boy lama.
Fungsi-fungsi ini diperlukan untuk emulasi dan output audio. Peanut-GB tidak menyertakan emulasi audio, jadi perpustakaan eksternal harus digunakan. Fungsi-fungsi ini harus ditentukan dan output audio harus diaktifkan dengan mendefinisikan ENABLE_SOUND ke 1 sebelum menyertakan kacang_gb.h.
Fungsi-fungsi ini diperlukan untuk komunikasi serial. Atur fungsi-fungsi ini menggunakan gb_init_serial. Jika fungsi ini tidak diatur, maka emulasi akan bertindak seolah-olah tidak ada kabel penghubung yang tersambung.
Fungsi-fungsi ini disediakan oleh Peanut-GB.
Fungsi ini mengatur ulang game yang sedang dimainkan, seolah-olah konsol telah dimatikan dan dihidupkan. gb_reset dipanggil oleh gb_init untuk menginisialisasi register CPU.
Fungsi ini mengembalikan ukuran penyimpanan game yang sedang dimainkan. Fungsi ini mengembalikan 0 jika game tidak menggunakan data simpanan apa pun.
Fungsi ini menjalankan CPU hingga full frame dirender ke LCD.
Fungsi ini menghitung hash dari judul game. Hash ini dihitung dengan cara yang sama seperti Game Boy Color untuk menambah warna pada game Game Boy.
Fungsi ini mengembalikan nama permainan.
Atur waktu jam waktu nyata (RTC). Beberapa game menggunakan data RTC ini.
Tidak berlaku lagi: jangan gunakan. RTC dicentang secara internal.
Jalankan image bootrom saat reset. Penyetelan ulang harus dilakukan setelah memanggil gb_set_bootrom agar perubahan ini dapat diterapkan. Ini karena gb_init memanggil gb_reset, namun gb_set_bootrom harus dipanggil setelah gb_init. Bootrom harus berupa bootrom DMG atau MGB.
Proyek ini dilisensikan di bawah Lisensi MIT.