Cara Kerja Kartrid Game Boy Secara Sangat Mendetail Sampai Anda Mungkin Tidak Ingin Tahu
(abc.decontextualize.com)- Untuk membuat kartrid Game Boy sendiri, penulis melalui bertahun-tahun riset dan proses perancangan
- Tulisan ini merangkum secara sistematis informasi teknis utama yang diperlukan untuk membuat kartrid Game Boy kustom dari sudut pandang pemula
- Game Boy adalah platform yang menarik bagi komunitas pengembangan game retro dan peretasan hardware berkat struktur hardwarenya yang sederhana namun sangat dapat diperluas
- Kartrid dapat menanamkan data game dan hardware tambahan (misalnya RTC, sensor, dll.) sehingga memberi Game Boy fungsi baru
- Melalui rangkaian memory bank controller (MBC), dimungkinkan perluasan kapasitas dan akses memori selektif, sehingga game dapat dijalankan dengan berbagai cara
Pendahuluan dan tujuan
- Penulis secara pribadi menetapkan tujuan untuk membuat kartrid Game Boy sepenuhnya dari nol
- Pengetahuan tentang struktur internal dan prinsip kerja kartrid Game Boy dirapikan sebagai sumber terbuka dan dipublikasikan
- Tujuan tulisan ini adalah menyusun ulang informasi teknis yang cukup sulit agar bisa diikuti siapa pun dari sudut pandang pemula
- Penjelasan berfokus pada perilaku (behavior) yang dapat diamati dari luar, bukan prinsip kerja internal hardware
- Penjelasan menggunakan SoC pada DMG (Game Boy model awal) sebagai acuan, dan antarmuka kartrid dasar pada keluarga perangkat Game Boy pada dasarnya serupa
Apa yang membuat platform Game Boy istimewa
- Game Boy mudah dipahami secara mental dari sisi struktur hardware dan software berkat kesederhanaan dan intuitivitas desainnya
- Siapa pun dapat mengembangkan untuk platform ini karena sifatnya yang portabel dan hemat daya, serta tidak memiliki mekanisme proteksi rumit atau penguncian wilayah
- Tersedia banyak dokumentasi teknis, skema hardware, dan materi berbasis komunitas
- Pustaka game resmi/tidak resmi sangat luas, dan toolchain pengembangan open source maupun alat scripting visual dikelola secara aktif
- Telah terbentuk ekosistem yang sangat dapat diperluas, termasuk bukan hanya perangkat penggerak hardware tetapi juga emulator akurat dan implementasi FPGA
Struktur dasar kartrid Game Boy
- Pada konsol lama, batas antara software dan hardware sering tidak jelas
- Game Boy tidak memiliki sistem operasi atau media penyimpanan non-volatile bawaan. Semua kode eksekusi dan hardware tambahan tertanam di kartrid
- Karena itu, kartrid harus berfungsi penuh agar Game Boy bisa boot dan berjalan
- Edge connector 32-pin di bagian bawah kartrid adalah antarmuka utama untuk bertukar sinyal dengan unit utama
- Sinyal antara kartrid dan unit utama dibagi menjadi daya, kontrol (baca/tulis/pemilihan chip), address bus (16-bit), dan data bus (8-bit)
Bus dan prinsip kerja
- Bus adalah struktur tempat beberapa komponen berbagi satu jalur sinyal untuk mengirim data
- CPU Game Boy mengirim alamat yang diinginkan ke address bus, dan data ke data bus
- Karena struktur bus bersifat paralel (parallel), pin fisik benar-benar ada untuk tiap bit
- Ini menguntungkan dari sisi kecepatan, tetapi karena bus dibagi bersama, ada risiko tabrakan/contention (penulisan bersamaan)
- Jika beberapa IC mengeluarkan data secara bersamaan, dapat terjadi short (berisiko panas berlebih dan kerusakan), jadi hanya satu IC yang boleh aktif pada satu waktu
Klasifikasi memori utama pada Game Boy
- Game Boy dapat memiliki hingga 4 jenis IC memori (RAM internal, video RAM, ROM kartrid, RAM kartrid)
- Dalam praktiknya, video RAM menggunakan bus independen sehingga biasanya dikecualikan dari penjelasan umum
- Set RAM internal/RAM kartrid/ROM berbagi address bus dan data bus yang sama
- Harus selalu hanya satu chip yang melakukan operasi baca/tulis pada data bus pada satu waktu
- Dalam istilah praktis, ini juga disebut sebagai RAM internal (WRAM), RAM kartrid (SRAM), video RAM (VRAM), dan high RAM (HRAM)
Chip Select dan konfigurasi rangkaian
- Setiap chip memori memiliki pin chip select signal (CS/CE, Chip Select/Chip Enable)
- Bergantung pada status sinyal chip select, hanya chip tertentu yang dapat mengakses data bus
- Untuk melakukan chip select, Game Boy memanfaatkan kembali 3 bit tertinggi pada address bus (A15, A14, A13) dan pin _CS milik CPU
- Koneksi seperti ini menjamin agar dua chip atau lebih tidak aktif bersamaan
- Misalnya, chip ROM hanya aktif saat A15 bernilai 0, sedangkan RAM diaktifkan dengan logika terpisah
Memory map dan sudut pandang programmer
- Status alamat/pin pada level hardware diabstraksikan, sehingga programmer hanya mengenali memory map logis
- Dalam ruang alamat 16-bit, rentang alamat 0x0000–0x7FFF dipetakan ke ROM kartrid, 0xA000–0xBFFF ke RAM kartrid, dan 0xC000–0xDFFF ke RAM internal
- Saat alamat tertentu diakses, rentang memori yang diinginkan otomatis diaktifkan dan yang lain dinonaktifkan
- Data memory map digunakan sebagai referensi penting dalam dokumentasi Game Boy
Memory Bank Controller (MBC)
- MBC adalah rangkaian inti pada kartrid Game Boy yang memungkinkan kapasitas ROM di atas 32KB serta koneksi RAM/periferal tambahan
- Ada berbagai jenis MBC yang pernah dijual, tetapi di sini penjelasan berfokus pada MBC5 yang relatif sederhana dan serbaguna
- MBC5 mendukung hingga 8MB ROM dan 128KB RAM kartrid melalui teknik switching (banking)
- Kontrol akses RAM serta kontrol hardware terpisah seperti sensor eksternal/RTC juga dimungkinkan
- Dari pin alamat ROM pada kartrid, bit tingkat atas (A22~A14) dikendalikan secara dinamis oleh MBC5, sementara hanya bit bawah yang terhubung langsung ke address bus unit utama
Prinsip ROM banking
- CPU Game Boy memiliki ruang alamat maksimum 64KB, tetapi dalam praktiknya hanya 32KB (16KB+16KB) yang digunakan untuk akses ROM
- MBC5 secara langsung mengendalikan alamat atas ROM (pemilihan bank) untuk memetakan bagian yang diinginkan ke ruang alamat CPU dalam unit 16KB
- Secara hardware, 14 bit bawah pada address bus CPU (A0~A13) terhubung langsung ke chip ROM, sementara sisanya diterima dari MBC5
- Saat software menulis nilai ke alamat memori tertentu selama game berjalan, MBC mendeteksi hal ini dan memperbarui nilai bank yang dipilih secara internal
Protokol dan mekanisme MBC
- MBC5 mendeteksi kombinasi alamat/sinyal kontrol tertentu untuk melakukan tugas seperti pemilihan bank ROM, pemilihan bank RAM, dan aktivasi/nonaktivasi fungsi lain
- Misalnya, saat operasi tulis terjadi pada rentang A15=0, A13=1, A14=0 (0x2000~0x3FFF), nilai pada data bus dicatat sebagai nomor bank ROM
- Dari sudut pandang programmer, proses pergantian bank ini tidak dikodekan sebagai kontrol rangkaian level rendah, melainkan hanya seolah-olah menulis data ke alamat tertentu
- Penggunaan RAM kartrid, sensor, RTC, dan lain-lain juga dikendalikan dengan pola serupa
- Teknik bus reuse (penggunaan ulang) seperti ini mengurangi jumlah komponen dan menurunkan biaya
Kesimpulan dan pemanfaatan komunitas
- Keunikan struktur kartrid Game Boy terletak pada biaya rendah, keandalan tinggi, dan skalabilitas
- Saat membuat kartrid sendiri, pemahaman yang akurat atas struktur dan protokol di atas sangat penting
- Dengan aktif merujuk komunitas dan dokumentasi yang kaya, hambatan masuk untuk proses pengembangan terpadu hardware-software dapat sangat diturunkan
Referensi dan jalur pembelajaran tambahan
- Tulisan Game Boy/Game Boy Color Architecture oleh Rodrigo Copetti
- Dokumentasi teknis di gbdev.io dan Pan Docs
- Berbagai desain kartrid open source dan toolchain (misalnya GBDK, RGBDS, dll.)
- Contoh proyek buatan sendiri: abc.decontextualize.com
(Pada bagian akhir tulisan aslinya juga dibahas elemen yang lebih kompleks seperti variasi desain MBC, memori EEPROM/flash, IC input/output, integrasi periferal, dan lain-lain, tetapi poin-poin di atas merupakan isi inti tentang prinsip kerja kartrid Game Boy.)
1 komentar
Komentar Hacker News
Ingin berbagi pengalaman menggunakan TXB0108 dari TI; berkat fitur deteksi arah otomatis, sekilas terlihat tidak perlu menambahkan logika arah terpisah, tetapi sebenarnya tidak direkomendasikan untuk digunakan. Jika ada noise elektrik, arah bisa berubah sehingga input menjadi output. Setiap kali itu terjadi, perangkat kadang masih bisa bertahan, atau kalau parah muncul fenomena yang biasa disebut "asap ajaib". Jika benar-benar sial, ini bahkan bisa berujung pada kecelakaan di lingkungan industri. Menurut saya komponen seperti ini punya banyak risiko tersembunyi yang hanya dipahami para ahli, jadi seharusnya jangan terlalu dipromosikan. Hanya layak dipakai jika benar-benar paham mode kegagalannya atau tidak ada alternatif lain.
Komponen ini benar-benar tidak bisa diprediksi. Bahkan hanya dengan trace sepanjang satu-dua inci di sisi output, atau sekadar konektor, ringing pada output sering memicu pembalikan arah otomatis. Tingkat kesulitannya sampai rasanya nyaris mustahil dipakai oleh orang nonahli, padahal justru dalam situasi seperti itulah orang cenderung ingin memakainya.
Saya pernah mengalami arah yang terus berubah dengan sangat cepat, menimbulkan noise dan osilasi yang parah. Ada juga cukup banyak batasan terkait pull-down, tetapi kalau kedua sisi ditarik ke arah yang sama, hasilnya masih lumayan baik.
Sambil menunda pekerjaan lain, saya mencatat beberapa hal dari kesan pertama melihat desain abc-pcb.pdf
Saya sempat berpikir betapa bagusnya kalau tulisan ini sudah ada saat dulu saya membuat kartrid kustom.
Di game saya, Cubeat, saya memasang chip OPL3-L ke pin audio-in GB untuk menghadirkan musik FM, dan logika MBC hanya memakai chip logika tunggal seri 7400.
Suatu hari saya benar-benar ingin menyelesaikan dan merilisnya; mencoba trik-trik aneh seperti ini di GB adalah pengalaman yang sangat menyenangkan.
Info Cubeat
Ini persis tingkat detail tentang struktur kartrid Game Boy yang selama ini ingin saya ketahui.
Ide bahwa kartrid Game Boy menyediakan RAM dan ruang disk bersama aplikasinya terasa segar; kalau dipikir-pikir, secara logika juga masuk akal.
Saya jadi membayangkan, andai ponsel juga bekerja seperti ini, mungkin kita bisa membeli kartrid baru setiap beberapa tahun saat teknologi chip membaik untuk menjalankan aplikasi yang lebih bertenaga, atau meng-upgrade dengan memasang antena baru.
Ponsel modular sudah lama diusulkan, tetapi tidak praktis atau tidak cukup berguna. Jika semua komponen dihubungkan lewat soket, latensi antarchip meningkat dan keandalannya menurun, apalagi untuk produk yang terus terguncang di saku sepanjang hari.
Kenyataannya, bukan cuma satu bagian ponsel yang menjadi usang; kamera, layar, CPU, RAM, baterai, dan hampir semua hal biasanya ingin ditingkatkan sekaligus. Kalau begitu, daripada mengganti satu per satu, lebih baik langsung membeli ponsel baru. Keuntungan utamanya paling hanya menghemat biaya casing.
Saya sedang berdiskusi soal sistem hot-patch ROM pada mikrokontroler, dan karena alasan-alasan ini, kelebihan struktur yang memuat seluruh aplikasi langsung di chip lalu bisa segera dijalankan memang terasa jelas. Hanya saja, kebutuhan pengguna terus berubah, jadi semuanya tampak makin rumit.
Ini jelas ide yang bagus, tetapi saya bertanya-tanya apakah batasnya justru akan datang dari performa perangkat keras host.
Kita memang bisa memasang RAM yang lebih cepat di kartrid, tetapi belum tentu papan yang lama bisa memanfaatkannya dengan baik.
Bahkan jika penyimpanan yang lebih cepat bisa ditambahkan, kalau perangkat keras pendukungnya tetap sama, belum jelas seberapa besar dampak nyatanya.
Saya bahkan sempat membayangkan memasang kamera juga.
Soal pernyataan bahwa membuat perangkat lunak kustom Game Boy tidak perlu melewati perlindungan anti-pembajakan atau region lock berbasis perangkat keras, saya bertanya apakah tetap tidak harus lolos pemeriksaan logo.
RGBFIX), ini bisa disisipkan secara otomatis.Dan setelah putusan Sega v. Accolade, secara praktis mekanisme pemeriksaan judul seperti itu juga tidak lagi punya kekuatan pemaksaan hukum, jadi hambatan bypass yang nyata nyaris tidak ada.
Saya sedih situs referensi pengembangan GB yang dulu sering saya kunjungi, devrs.com, sudah tidak aktif lagi. Sebagian besar tautannya memang sudah mati, tetapi dulu itu tempat yang penuh proyek-proyek inspiratif.
Video Ultimate Game Boy Talk (presentasi 33c3) juga layak dijadikan referensi.
Ultimate Game Boy Talk - 33c3
Pokemon Blue milik saya pernah masuk mesin cuci dan bahkan pengering sekitar 20 tahun lalu, dan sampai sekarang masih berfungsi normal. Perangkat keras yang benar-benar tangguh. Saya jadi penasaran apakah kartu SD bisa bertahan menghadapi perlakuan seperti itu.
Bulan ini saya baru mulai belajar KiCad dan desain PCB sebagai hobi. Apakah ada contoh seseorang yang membuat ulang seluruh PCB Game Boy orisinal sendiri lalu merilisnya sebagai open source?
Ada perusahaan bernama FunnyPlaying yang membuat dan menjual PCB GBC dan GBA sendiri, tetapi versi open source-nya sulit ditemukan.
Di GitHub milik nataliethenerd ada proyek reverse engineering CGB, tetapi lisensinya nonkomersial.
Penjelasannya: "Menggunakan papan CGB-CPU-04 untuk dipindai, diamplas, dan ditulis ulang guna merapikan skematik CGB; nilai-nilai dan semacamnya merujuk ke skema asli."
Saya juga penasaran rekomendasi referensi yang bagus untuk desain PCB.