Arsitektur Game Boy / Color
(copetti.org)- Lini Game Boy menggabungkan DMG-CPU SoC, PPU, APU, boot ROM, dan Game Pak dalam anggaran daya rendah, menyatukan CPU, grafis, audio, kompatibilitas, dan pencegahan penyalinan konsol genggam ke dalam satu sistem
- CPU berbasis core SM83 dari Sharp dan berjalan sekitar 4,19 MHz; CPU CGB pada Game Boy Color tetap mempertahankan keluarga yang sama sambil menaikkan kecepatan hingga sekitar 8,38 MHz dalam mode dual-speed
- Grafisnya menggunakan LCD 160×144 dan PPU berbasis VRAM yang menggabungkan tile, background, sprite, dan window; model Color memperluas kemampuan visual dengan VRAM 16 KB, palet 32.768 warna, dan DMA tambahan
- Audio ditangani oleh APU 4 kanal; Game Pak memakai Memory Bank Controller untuk melampaui ruang alamat dasar 32 KB, serta mendukung komunikasi eksternal melalui kabel Link dan inframerah pada Color
- Boot ROM memeriksa logo Nintendo dan checksum header ROM sebelum menjalankan game, dan persyaratan logo ini berfungsi sebagai mekanisme kontrol distribusi yang memanfaatkan hak cipta dan merek dagang
Cakupan lini Game Boy dan arah desain
- Seri Game Boy dapat dilihat seperti versi portabel NES, tetapi bukan sekadar versi yang diperkecil; ia memiliki struktur dengan fungsi dan arah ekspansinya sendiri
- Merek Game Boy berlanjut selama dua generasi
- Generasi ke-4 mencakup Game Boy hitam-putih serta revisi seperti Game Boy Pocket dan Light
- Generasi berikutnya mencakup Game Boy Color yang dirilis setelah Virtual Boy
- Fokus analisis ini adalah struktur dasar Game Boy hitam-putih dan bagaimana struktur tersebut diperluas pada model Color
Struktur CPU dan memori
- Alih-alih menempatkan beberapa chip serbaguna di motherboard, Nintendo memilih desain chip tunggal yang berisi CPU dan komponen utama
- SoC ini disebut DMG-CPU atau Sharp LR35902
- Diproduksi oleh Sharp Corporation, dan menguntungkan untuk efisiensi daya, pencegahan penyalinan, serta implementasi I/O tambahan sesuai kebutuhan Nintendo
- Karena chip ini tidak tersedia di katalog ritel, pesaing sulit menyalinnya begitu saja
-
Core CPU SM83
- Prosesor utama di dalam DMG-CPU adalah Sharp SM83
- Bentuknya merupakan campuran Zilog Z80 dan Intel 8080, berjalan sekitar 4,19 MHz
- SM83 hanya mempertahankan sebagian fitur Z80 dan 8080
- Tidak ada register
IX,IYmilik Z80 maupun instruksiIN,OUTmilik 8080 - Port I/O tidak dapat digunakan, sehingga komponen harus dipetakan ke memori
- Hanya memiliki set register Intel 8080, sehingga register serbagunanya berjumlah 7
- Dari instruksi ekstensi Z80, hanya sebagian instruksi manipulasi bit yang diimplementasikan
- Tidak ada register
- Sharp juga menambahkan instruksi baru yang tidak ada pada Z80 maupun 8080
LDHdirancang untuk mengakses 256 byte terakhir pada memory map yang dimulai dari$FF00- Ukuran instruksinya lebih kecil 1 byte sehingga dapat berjalan sedikit lebih cepat
-
Perubahan CPU pada Game Boy Color
- Game Boy Color menggunakan SoC baru bernama CPU CGB, tetapi core CPU SM83 secara umum dipertahankan
- Pengecualian terbesarnya adalah clock speed, yang menjadi dua kali lipat hingga sekitar 8,38 MHz
- Dengan mempertahankan core CPU yang sama, developer dapat memakai kembali pengetahuan pemrograman yang sudah ada, serta mengurangi biaya perancangan ulang arsitektur baru dan beban implementasi kompatibilitas mundur
- CPU CGB menyediakan dua mode operasi
- Normal mode: SM83 berjalan sekitar 4,19 MHz
- Dual-speed mode: SM83 berjalan sekitar 8,38 MHz
- Pilihan ini juga menyisakan konsekuensi memakai teknologi yang sudah tua menurut standar akhir 1990-an
-
Ruang alamat dan RAM
- SM83 mempertahankan bus data 8-bit dan bus alamat 16-bit, sehingga dapat mengalamatkan memori hingga 64 KB
- Memory map terdiri dari ruang Game Pak, WRAM, HRAM, VRAM, I/O seperti joypad, audio, grafis, LCD, serta area kontrol interrupt
- Motherboard Game Boy asli dilengkapi WRAM 8 KB sebagai memori serbaguna, empat kali kapasitas NES
- Di dalam SoC juga terdapat HRAM 127 B
- Ini adalah ruang kecil yang dapat diakses lebih cepat dengan instruksi
LDH - Bus HRAM sendiri secara teknis tidak lebih cepat daripada WRAM, tetapi CPU memiliki prioritas
- Hal ini penting saat CPU tidak dapat mengakses memori eksternal selama operasi DMA
- Ini adalah ruang kecil yang dapat diakses lebih cepat dengan instruksi
- Game Boy Color meningkatkan WRAM menjadi 32 KB
- Kemampuan pengalamatan CPU tetap sama, sehingga seluruh memori tidak dapat dihubungkan sekaligus
- Akses ke tambahan WRAM 24 KB menggunakan bank switching
- 4 KB terakhir dari ruang 8 KB yang sudah ada diganti di antara 7 bank
- Register
SVBKdigunakan untuk memilih bank WRAM
Grafis: PPU, LCD, dan komposisi layer
- Grafis Game Boy memiliki struktur di mana CPU melakukan komputasi, sementara PPU terpisah di dalam SoC DMG-CPU merender layar
- LCD bawaan menyediakan resolusi 160×144 piksel
- LCD Game Boy hitam-putih hanya memantulkan 4 tingkat abu-abu: putih, abu-abu muda, abu-abu tua, dan hitam
- Karena LCD bernuansa hijau, layar terlihat agak kehijauan
- Semua Game Boy berjalan dengan 4 baterai AA, berbeda dari konsol rumahan yang bergantung pada frekuensi listrik per wilayah
- Clock CPU dan refresh rate tidak berbeda antarwilayah
- Refresh rate-nya adalah 59,7 Hz
-
VRAM dan rendering berbasis tile
- PPU terhubung secara eksklusif ke VRAM 8 KB dan membaca sebagian besar data yang diperlukan untuk rendering dari sana
- Beberapa data yang membutuhkan akses lebih cepat disimpan di dalam PPU
- Akses CPU ke VRAM diarbitrase oleh PPU, dan game harus mengisi area VRAM dengan data yang benar
- Unit rendering dasarnya adalah tile
- Tile adalah bitmap 8×8 piksel
- Setiap tile memakai 16 byte
- Disimpan di area Tile set atau Tile pattern table pada VRAM
- Warna dipilih dari 4 tingkat abu-abu melalui palet
- Game Boy hitam-putih dapat mendefinisikan hingga 3 palet, tetapi penggunaannya dibatasi sesuai jenis layer yang dirender
-
Background, sprite, dan window
- Frame akhir terdiri dari tiga layer yang saling bertumpuk
- Layer background adalah map 256×256 piksel, yaitu 32×32 tile
- Pada layar nyata hanya 160×144 piksel yang terlihat
- Game memilih area background yang ditampilkan lalu menggesernya untuk menerapkan efek scrolling
- Layer background hanya menggunakan 1 palet
- Sprite adalah tile yang dapat bergerak secara independen
- Dapat saling bertumpuk atau ditempatkan di belakang background
- Prioritas tampilan ditentukan oleh atribut priority
- Karena ditambahkan warna transparan, abu-abu yang benar-benar dapat ditampilkan hanya 3 tingkat
- Dapat memilih salah satu dari 2 palet khusus
- Definisi sprite disimpan di OAM(Object Attribute Memory) di dalam PPU
- Game biasanya memanggil OAM DMA untuk menyalin data dari RAM atau ROM ke OAM
- Selama DMA aktif, CPU tidak dapat mengakses memori eksternal
- Setiap entri OAM berisi indeks tile, posisi X-Y, palet, prioritas, serta flag flip vertikal dan horizontal
- Rendering sprite pada PPU memiliki batasan
- Maksimal 10 per scanline
- Maksimal 40 per frame
- Jika batas terlampaui, sebagian sprite tidak digambar
- Layer window adalah map 160×144 piksel yang dapat menutupi seluruh layar
- Dirender di atas background dan sprite
- Tidak di-scroll
- Hanya satu tile map yang tersisa yang dapat dialokasikan ke layer window
- Berbagi palet yang sama dengan background
- Tidak transparan sehingga sepenuhnya menutupi layer di bawahnya, tetapi dapat digunakan sebagian bersama efek raster berbasis timing
- Game terutama memakai layer window untuk penghitung nyawa, skor, dan informasi tampilan persisten
-
Pembaruan frame dan efek raster
- CPU tidak dapat memodifikasi tabel saat PPU membaca VRAM
- Sistem menyediakan interrupt yang terjadi saat PPU sedang idle
- Horizontal Blank dimulai setelah satu scanline selesai, dan dapat menyesuaikan bagian frame yang belum digambar
- Vertical Blank dimulai setelah semua scanline selesai, dan dapat memperbarui grafis untuk frame berikutnya
- OAM search terjadi pada awal scanline, dan selama PPU menentukan sprite untuk line tersebut, area selain OAM dapat diperbarui
- Berkat layer window dan interrupt tambahan, sebagian frame dapat diubah sebelum seluruh layar selesai digambar
- Dengan menerapkan nilai scroll berbeda pada setiap scanline, dapat dibuat wobble effect di mana setiap baris bergerak dengan kecepatan berbeda
Ekspansi grafis Game Boy Color
- PPU Game Boy Color berperilaku seperti superset dari PPU asli dan menyediakan dua mode operasi untuk kompatibilitas
- CGB mode: menyediakan peningkatan visual untuk judul Game Boy Color
- DMG mode: mode tradisional dengan fitur ekspansi dinonaktifkan
- Motherboard Game Boy Color memiliki VRAM 16 KB
- Kapasitasnya dua kali lipat dari sebelumnya
- Karena batas alamat CPU, VRAM disusun sebagai 2 bank berukuran 8 KB
- Register
VBKdigunakan untuk mengganti bank VRAM
- PPU dapat mengakses kedua bank VRAM secara bersamaan
- Developer mengisi bank VRAM dengan
VBK - Jika tile map menentukan bank tempat tile berada, PPU akan menanganinya
- Developer mengisi bank VRAM dengan
- VRAM tambahan digunakan untuk menyimpan dua kali lebih banyak tile, lebih banyak palet, memperluas metadata tile, serta merujuk palet dan efek tambahan
-
Warna dan DMA tambahan
- PPU baru Game Boy Color dapat mendefinisikan palet dari 32.768 warna
- Developer menyimpan hingga 16 palet warna di Palette Memory
- 8 untuk background/window dan 8 untuk sprite
- Setiap palet mengodekan 4 warna
- Setiap entri adalah nilai 16-bit, tetapi sebenarnya hanya 15 bit yang digunakan
- Palette Memory tidak dapat dialamatkan langsung oleh CPU, dan register baru berfungsi sebagai buffer tulis
- Tile background dan window dapat merujuk salah satu dari 8 palet
- Tile sprite juga dapat merujuk salah satu dari 8 palet, tetapi satu entri tetap dicadangkan sebagai warna transparan sehingga batasan palet 3 warna tetap ada
- Tile set menjadi dua kali lebih besar, sehingga dua kali lebih banyak tile dapat disimpan di VRAM
- Tile map background/window juga diperluas agar dapat memuat lebih banyak metadata
- Tile background dan window dapat di-flip secara vertikal dan horizontal, sehingga mengurangi kebutuhan menyimpan grafik duplikat di VRAM
- CPU CGB memiliki unit DMA tambahan untuk menyalin data ke VRAM
- Dapat menyalin dari Game Pak atau WRAM ke VRAM
- General-purpose DMA dapat mentransfer kapan saja, tetapi selama transfer ia mengambil prioritas akses memori sehingga screen tearing dapat terjadi
- H-Blank DMA hanya mentransfer selama H-Blank untuk menghindari artefak layar, tetapi dibatasi dalam unit 16 byte dan berhenti selama pemindaian LCD
Audio: APU 4 kanal
- Audio ditangani oleh APU(Audio Processing Unit) dan menyediakan total 4 kanal dengan metode Programmable Sound Generator
- APU adalah salah satu komponen yang tidak berubah di seluruh revisi Game Boy
- Tidak dapat dipercepat seperti CPU
- Mengubah kecepatan osilator tidak meningkatkan kualitas suara, melainkan mengubah pitch
- Untuk menambah fitur, rangkaian harus ditambahkan dan biayanya juga meningkat
-
Konfigurasi kanal
- Ada 2 kanal pulse wave, terutama digunakan untuk melodi dan efek suara
- Menyediakan 4 tone dengan mengubah pulse width
- Kanal pertama memiliki sweep control khusus
- Karena jumlah kanal terbatas, melodi dapat terputus saat efek suara muncul selama gameplay
- Kanal ketiga mendukung waveform kustom
- Waveform yang terdiri dari 32 sampel 4-bit disimpan di wavetable
- Volume dan frekuensi dapat dikontrol
- Ada 1 kanal noise
- Kumpulan waveform acak yang terdengar seperti white noise
- Dalam game, terutama digunakan untuk perkusi atau efek lingkungan
- Menyediakan dua tone, clean static dan robotic static, serta frekuensinya juga dapat disetel
- Ada 2 kanal pulse wave, terutama digunakan untuk melodi dan efek suara
-
Mixer dan pin audio ekspansi
- Mixer menyediakan output stereo sehingga kanal dapat ditempatkan di kiri dan kanan
- Karena speaker internal mono, panning hanya terdengar pada output headphone
- Hardware mixer juga terhubung ke pin khusus pada cartridge
- Jika cartridge mengeluarkan suara analog melalui hardware tambahan, ia dapat melakukan streaming kanal tambahan
- Game yang beredar di pasar tidak menggunakan fitur ini
- Fitur ini dihapus pada era Game Boy Advance
Boot ROM dan cara operasi
- Game Boy tidak langsung boot ke game seperti NES/Famicom, melainkan terlebih dahulu boot dari ROM 256 byte internal
- Prosedur boot dasarnya sebagai berikut
- Saat daya dinyalakan, CPU mulai membaca dari alamat
0x0000 - RAM dan APU diinisialisasi
- Grafik logo Nintendo dari ROM cartridge disalin ke Display RAM dan digambar di bagian atas layar
- Jika cartridge tidak ada atau tidak terpasang dengan benar, logo dapat tampak sebagai tile yang rusak
- Logo di-scroll ke bawah dan suara ikonis diputar
- Logo Nintendo milik game dibandingkan dengan logo di dalam ROM konsol
- Checksum cepat dilakukan pada header ROM cartridge
- Jika pemeriksaan gagal, konsol berhenti
- ROM konsol dihapus dari memory map
- CPU mulai menjalankan game
- Saat daya dinyalakan, CPU mulai membaca dari alamat
- Logo Nintendo yang ditampilkan di layar tidak dihapus dari VRAM, sehingga game dapat menerapkan animasi atau efek transisi pada logo ini
-
Perubahan boot pada Game Boy Color
- Ukuran ROM Game Boy Color meningkat menjadi 2 KB
- Urutan boot memeriksa apakah game yang dimasukkan adalah khusus Game Boy atau game Game Boy Color
- Metadata tertentu pada ROM cartridge diperiksa, lalu register aktivasi mode DMG atau CGB diatur sesuai hasilnya
- Jika game DMG dimasukkan, program boot mengisi Palette RAM dengan palet yang dihitung
- Menggunakan algoritme sederhana yang bergantung pada metadata game
- Inilah prinsip yang membuat game hitam-putih tampak diberi warna di Game Boy Color
- Pengguna dapat mengubah palet yang dipilih dengan kombinasi tombol saat boot
- Logo Nintendo juga disalin ke HRAM
- Tahap checksum hanya memeriksa setengah bagian depan logo di HRAM
Game Pak, pembuatan game, dan komunikasi eksternal
- Game yang membutuhkan performa tinggi pada masa itu terutama ditulis dalam bahasa assembly karena kematangan compiler bahasa tingkat tinggi belum memadai
- Game komersial didistribusikan sebagai Game Pak, cartridge Nintendo untuk Game Boy
- Ruang penyimpanan dasar maksimal 32 KB karena batasan ruang alamat
- Dengan menggunakan Memory Bank Controller, atau mapper, game yang lebih besar menjadi mungkin
- Game Pak terbesar yang beredar di pasar memuat ROM 1 MB pada Game Boy asli dan ROM 8 MB pada Game Boy Color
- Sebagian Game Pak mencakup real-time clock, SRAM tambahan, dan baterai eksternal untuk mempertahankan save data
-
Jenis cartridge pada era Color
- Dengan ditambahkannya mode operasi Game Boy Color, game dibagi menjadi tiga jenis
- Game Boy: sepenuhnya kompatibel dengan semua model Game Boy dan selalu berjalan dalam mode DMG
- Game Boy Color enhanced: kompatibel dengan model hitam-putih, dan ditingkatkan secara visual dalam mode CGB pada Game Boy Color
- Game Boy Color exclusive: hanya kompatibel dengan Game Boy Color dan dioptimalkan untuk memanfaatkan hardware tersebut
- Ketiga jenis tersebut memiliki warna resmi untuk membantu pembedaan
- Beberapa game seperti Pokémon dan Donkey Kong menggunakan desain berbeda
- Dengan ditambahkannya mode operasi Game Boy Color, game dibagi menjadi tiga jenis
-
Kabel Link dan inframerah
- Game Boy untuk pertama kalinya dapat berkomunikasi dengan hardware eksternal melalui kabel Game Boy Link, sehingga memungkinkan multiplayer dan penggunaan aksesori
- Kabel Link terhubung ke subkonektor 6-pin pada konsol, dan antarmukanya menggunakan protokol SPI(Serial Peripheral Interface)
- Satu Game Boy bertindak sebagai master yang menggerakkan sinyal clock, sementara yang lain menjadi slave
- Pada setiap transfer, master dan slave bertukar satu paket 8-bit
- Kecepatan transfer Game Boy asli adalah 8 Kbit/s, yaitu 1 KB/s
- Dalam mode high speed, Game Boy Color dapat mencapai hingga 512 Kbit/s, yaitu 64 KB/s
- Nintendo juga merilis 4-Player Adapter agar hingga 4 Game Boy dapat bertukar data secara bersamaan
- SPI dasar tetap dipertahankan
- Adapter bertindak sebagai master dan mengimplementasikan layer komunikasi tambahan yang harus diikuti game
- Game Boy Color dilengkapi transceiver inframerah
- Terdiri dari LED dan phototransistor
- Digunakan untuk pertukaran data nirkabel pada judul seperti Pokémon Gold
- Sistem itu sendiri tidak mengimplementasikan protokol komunikasi
- Satu register
RPmengodekan operasi sensor IR, bit transmisi, dan bit penerimaan terakhir - Nintendo menyediakan implementasi referensi dalam Game Boy Developer Manual resmi
Struktur pencegahan penyalinan
- Konsol tidak langsung menjalankan game, melainkan terlebih dahulu melakukan beberapa pemeriksaan untuk mencegah cartridge yang tidak disetujui berjalan dan memastikan cartridge terpasang dengan benar
- Game harus memuat salinan logo Nintendo dalam bentuk tile di header ROM agar dapat lolos pemeriksaan
- Dengan ini, Nintendo dapat memanfaatkan hukum hak cipta dan merek dagang untuk kontrol distribusi
- Kasus Sega v. Accolade kemudian memutuskan bahwa penggunaan logo berhak cipta untuk memenuhi persyaratan seperti ini merupakan fair use, sehingga memberikan hak kepada perusahaan
- Di dalam game, langkah pencegahan penyalinan tambahan juga dapat diimplementasikan
- Pada bootleg, biasanya ukuran SRAM yang lebih besar diperiksa
- Checksum ROM dilakukan pada waktu acak selama gameplay untuk mendeteksi perubahan kode
1 komentar
Komentar Hacker News
Hal yang benar-benar luar biasa dalam pengembangan Game Boy asli adalah bahwa saat itu tim Gunpei Yokoi berada dalam situasi yang sangat tidak dipercaya
Kira-kira begini: “Mengapa main game di bus atau toilet, pasti tidak nyaman. Lebih baik di rumah, duduk di sofa di depan TV bersama keluarga atau teman, atau kalau mau pengalaman terbaru ya di arkade. Siapa yang mau mengganti baterai dan hanya melihat beberapa tingkat warna abu-abu?”
Visi mereka adalah mengambil teknologi yang sudah layu dan membungkusnya dalam perangkat yang mudah dipakai serta game yang sederhana dan singkat, dan menurut saya tim itu pada dasarnya memulai mobile gaming
Anak-anak tahun 1970-an sudah memainkan game LED portabel Mattel di bus dan toilet, dan saya sendiri punya setidaknya 6, mungkin sekitar 8. Contoh paling awal adalah https://en.m.wikipedia.org/wiki/Mattel_Auto_Race dari 1976
Yang lebih populer adalah game olahraga seperti American football, bisbol, dan basket, dan aturannya jauh lebih rumit daripada Auto Race: https://www.ebay.com/p/2255363696
Pada awal 1980-an juga banyak game LCD portabel seperti Dungeons and Dragons: https://en.m.wikipedia.org/wiki/Dungeons_%26_Dragons_Compute... (1981)
“Mattel stated that the game immediately sold out.” Memang tidak memakai cartridge, tetapi khususnya game LCD itu murah dan kecil, jadi tidak memberatkan untuk punya beberapa
Sekarang orang menyebut benda-benda ini “handhelds” untuk membedakannya dari perangkat portabel generasi Game Boy, tetapi seingat saya dulu tidak disebut begitu. Intinya, pada 1970-an dan awal 1980-an sudah ada pasar yang sukses, dan Nintendo bukan menciptakannya, melainkan menggabungkan dan mengembangkan konsol berbasis cartridge yang sudah sukses dengan pasar game portabel
Saya melihat Game Boy Color sudah ditambahkan, tetapi sepertinya bagian yang mengatakan ukuran cartridge hanya 1MB belum diperbaiki. Beberapa game GBC mencapai 4MB
Selain itu, ada juga game kereta 8MB yang berisi video pendek dan gambar high color
https://www.youtube.com/watch?v=S62dSVmLPU0
Ukuran window pada cartridge pada dasarnya sama-sama 32KB, dan bank switching untuk 4MB maupun 1MB ditangani di sisi cartridge
Game Boy sejauh ini adalah konsol favorit saya dari semua konsol yang pernah ada. Sekarang saya sedang membuat game Game Boy dengan assembly, sebuah pinball dungeon crawler
Perangkat kerasnya mudah dipahami, dan keterbatasannya memaksa kita berkreasi
Florent Gorges menerbitkan buku yang hanya membahas Game Boy, tetapi sayangnya sepertinya tidak ada terjemahan bahasa Inggris. Saya membelinya dalam edisi bahasa Spanyol, dan di dalamnya ada wawancara eksklusif dengan para pembuatnya
https://www.amazon.es/Historia-Nintendo-Vol-4-1989-1999-INCR...
Dengan tingkat demokratisasi hardware saat ini, bisakah kita membuat ulang Game Boy dengan membeli komponen yang tepat dan PCB yang sudah dirangkai jalurnya?
FunnyPlaying baru-baru ini merilis versi berbasis FPGA dengan harga masuk akal: https://funnyplaying.com/products/fpgbc-kit?variant=40858870...
Ada juga mainboard baru untuk Game Boy Advance yang komponennya sudah terpasang, tetapi CPU dan RAM harus dipindahkan ke sana
Kalau yang diinginkan adalah kesetiaan hardware, biaya membuat satu perangkat genggam terintegrasi sepertinya sulit masuk kategori harga yang “terdemokratisasi”
Untuk apa mempelajari arsitektur Game Boy, mau meretas bumi?