Analisis Bagian Dalam Kartrid Super Nintendo
(fabiensanglard.net)- Kartrid Super Nintendo bukan sekadar media penyimpanan, melainkan perangkat keras yang memperluas kemampuan konsol dengan memuat proteksi anti-salin CIC, SRAM, dan prosesor pendamping
- Kapasitas ROM saat itu dipromosikan dalam satuan bit, dan dari 3.378 judul yang diteliti, Star Ocean dan Tales of Phantasia berukuran 48Mb, sementara Super Mario World 4Mb
- Fitur penyimpanan bergantung pada SRAM yang dipertahankan oleh baterai, dan ada contoh seperti PCB Zelda III yang menyertakan decoder alamat MAD-1 untuk mengatur akses ROM/RAM
- Sebanyak 13 jenis chip pendamping digunakan di 72 game, menangani tugas di sisi kartrid seperti akselerasi CPU, pemrosesan sprite, dekompresi, operasi matematika, dan rasterisasi poligon
- Chip-chip ini sangat memperluas ekspresi visual game pada masanya, tetapi juga meninggalkan beban reverse engineering jangka panjang untuk implementasi emulator, seperti kasus S-DD1 yang membutuhkan paket grafis karena struktur internalnya belum diketahui
Konfigurasi dasar kartrid: CIC, ROM, SRAM
- Kartrid Super Nintendo dapat memuat bukan hanya instruksi dan aset pada chip ROM, tetapi juga chip proteksi anti-salin CIC, SRAM, hingga prosesor pendamping
- CIC bekerja dengan cara chip di sisi konsol dan chip di sisi kartrid berkomunikasi secara lockstep
- Jika CIC konsol mendeteksi kondisi abnormal, semua prosesor akan direset
- Tidak semua kartrid SNES memiliki CIC; game tidak resmi Super 3D Noah's Ark tidak memiliki CIC
- Super 3D Noah's Ark harus dipasang terlebih dahulu ke konsol, lalu kartrid resmi dipasang di atasnya; sisi Noah's meneruskan jalur bus ke CIC milik game resmi
- Kapasitas ROM saat itu ditulis dalam satuan bit, bukan byte
- Zelda III dipromosikan sebagai ROM 8Mb, bukan 1.048.576 byte
- Daftar yang diteliti mencakup 3.378 judul berdasarkan USA/Japan/Europe
- Star Ocean dan Tales of Phantasia termasuk yang terbesar, yaitu 48Mb atau 6.291.456 byte
- Super Mario World menggunakan ROM 4Mb, atau 524.288 byte
- Sebagian judul dengan fitur penyimpanan menggunakan SRAM yang dayanya dipertahankan oleh baterai
- Saat konsol dimatikan, SRAM masuk ke mode daya rendah untuk mengurangi konsumsi listrik
- PCB Zelda III memiliki CIC (D413A) di U4, ROM 0x80000 (524.288 byte) di U1, SRAM LH5268AF-10TLL 64Kbit (8KiB) di U2, dan decoder alamat memori MAD-1 di U3
Cakupan chip pendamping dan SA-1
- Prosesor pendamping paling terkenal adalah Super FX yang digunakan di Star Fox pada 1993, tetapi sebelumnya sudah ada chip EC yang digunakan
- Secara keseluruhan, 13 jenis EC digunakan di 72 game
- Daftar lengkapnya dirangkum di wikipedia dan snescentral.com
- SA-1, atau Super Accelerator 1, adalah chip pendamping representatif yang masuk ke 34 kartrid
- CPU-nya adalah 65C816 yang sama dengan CPU utama SNES, tetapi berjalan 4 kali lebih cepat pada 10,74MHz
- Mencakup SRAM 2KiB dan CIC terintegrasi
- PCB Super Mario RPG tidak memiliki CIC terpisah; SA-1 berada di U3, ROM di U1, dan SRAM dengan decoder terintegrasi di U2
- Tanpa osilator terpisah, SA-1 menerima System Master clock dari port kartrid lalu membaginya dua secara internal, sehingga berjalan pada 21,4772700MHz / 2 = 10,74MHz
- Saat mulai, SA-1 berada dalam status stop, lalu CPU SNES membuat Reset Vector dan melanjutkan SA-1
- Instruction Pointer awal SA-1 diambil dari Reset Vector khusus
- Mode operasinya ada tiga: Accelerator, Parallel Processing, dan Mixed Processing
- Dalam konfigurasi terkuat, CPU SA-1 dan CPU Super NES berjalan bersamaan sehingga performa Super Accelerator System menjadi 5 kali dibanding Super NES biasa
- Peningkatan kemampuan pemrosesan digunakan untuk animasi dan deteksi tabrakan seluruh 128 sprite yang disediakan PPU, serta rotasi dan skala sprite secara real-time sebelum ditulis ke VRAM PPU
- Kartrid demo Nintendo SA-1 menunjukkan peningkatan ini
- Komunitas game retro mengurangi slowdown pada game lama melalui proyek seperti Eliminating slowdown in Super Mario World, Gradius III slowdown removal, dan Contra III slowdown removal
- Mengonversi judul ke SA-1 tampaknya cukup rumit karena terutama membutuhkan remapping akses RAM/ROM, dan hal ini menyisakan pertanyaan karena dokumentasi SA-1 menyatakan bahwa “SNES dan SA-1 menggunakan pemetaan memori yang sama”
- Pada 2019, melalui SA-1 Collection Project, sedang berlangsung upaya untuk secara otomatis melakukan remapping dan menjadikan lebih banyak game SNES berbasis SA-1
Chip pendamping grafis, kompresi, dan matematika
- CX4 adalah chip Capcom yang menjalankan Mega Man X2 dan Mega Man X3
- Dapat menangani rendering wireframe 3D, berbagai operasi matematika, scaling dan rotasi sprite lalu menulisnya ke VRAM
- Contohnya dapat dilihat pada intro dan pertarungan bos di MMX2
- CX4 menyediakan bukan hanya wireframe, tetapi juga sprite functions, propulsion, vector, triangle, trigonometric functions, result tables, dan coordinate transform functions; di MMX2 dan MMX3, chip ini menangani semua sprite
- PCB Mega Man X2 memiliki CIC di U4, ROM 8M di U1, ROM tambahan di U2, CX4 di U3, dan osilator 20MHz di X1
- S-DD1 adalah chip dekompresi sprite yang dapat memasok data langsung ke VRAM PPU
- Digunakan di dua game: Star Ocean dan Street Fighter Alpha 2
- Ada rumor bahwa blank sebelum ronde dimulai di Street Fighter Alpha 2 disebabkan oleh S-DD1, tetapi menurut penjelasan Modern Vintage Gamer, masalah sebenarnya adalah transfer sampel suara ke DSP RAM
- PCB Street Fighter Alpha 2 memiliki ROM 4MiB di U1 dan S-DD1 yang mendekompresi aset secara langsung; CIC terintegrasi ke S-DD1 sehingga tidak ada chip terpisah
- DSP-1 mencakup 16 dari 19 judul yang didukung keluarga DSP, dan digunakan di Super Mario Kart serta Pilotwings
- DSP dalam namanya berarti Digital Signal Processor, tetapi dinilai salah penamaan karena tidak memproses sinyal kontinu seperti DSP pada umumnya
- Menurut manual pengembang, DSP-1 bekerja dalam blocking mode, sehingga CPU Super NES menunggu saat DSP memproses data
- Menyediakan instruksi seperti perkalian 16-bit cepat, reciprocal, sin/cos projection, vector size, dan rotation, yang penting untuk pemrograman HDMA dan pembaruan tampilan 3D Mode 7
- PCB Super Mario Kart memiliki CIC eksternal, ROM, SRAM untuk penyimpanan, decoder alamat MAD-1, baterai, dan osilator untuk operasi 8MHz
- Tiga versi DSP-1, DSP-1a, dan DSP-1b memperkenalkan perbaikan bug dan peningkatan proses, tetapi perilakunya sedikit berbeda sehingga pada demo Pilotwings pesawat menabrak tanah
- Chip kecil lainnya juga digunakan secara terbatas pada game tertentu
- DSP-2 digunakan pada satu game, Dungeon Master, untuk konversi rutin Atari ST, dan tampaknya terutama membantu scaling sprite
- DSP-3 digunakan pada satu game, SD Gundam GX
- DSP-4 digunakan pada dua game, Top Gear 3000 dan The Planet's Champ TG 3000
- OBC-1 digunakan pada satu game, Metal Combat: Falcon's Revenge, dan sempat dikabarkan untuk manipulasi sprite, tetapi ada perdebatan di nesdev.org
- S-RTC adalah chip yang melacak jam real-time pada satu judul, Daikaijuu Monogatari II, dan tidak jelas mengapa pengembang Hudson Soft membutuhkan pelacakan real-time
- SPC7110 dari Epson adalah chip dekompresi data yang digunakan di Tengai Makyou Zero, Momotaro Dentetsu Happy, dan Super Power League 4; Super Power League 4 juga memiliki fungsi jam real-time
- Seri ST dari SETA Corporation kabarnya ditujukan untuk meningkatkan AI game; ST-010 hanya digunakan di Exhaust Heat 2, ST-011 di Hayazashi Nidan: Morita Shougi, dan ST-018 di Hayazashi Nidan Morita Shougi 2
- ST-018 tampaknya adalah CPU ARM dengan instruksi di ROM internal
Seri Super FX dan modifikasi komunitas
- GSU-1 digunakan di lima game: Star Fox, Stunt Race FX, Vortex, Dirt Racer, dan Dirt Trax FX
- Termasuk salah satu chip pendamping yang paling terdokumentasi, dengan materi wiki, tutorial, dan Super Nintendo Developer Manual Book II
- Berjalan pada 10,74MHz, dengan master clock 21,47MHz yang dibagi dua secara internal
- Berkat instruction cache internal 512 byte, chip ini dapat berjalan tanpa membuat CPU SNES kekurangan sumber daya
- Setelah tugas selesai, chip ini dapat memicu interrupt ke C-CPU, yaitu CPU konsol
- Jika PPU1/PPU2 SNES berorientasi pada tilemap dan sprite, Super FX kuat dalam rendering piksel dan rasterisasi poligon
- Biasanya melakukan rendering ke framebuffer yang ada di kartrid
- Isi framebuffer ditransfer ke VRAM selama VSYNC
- PCB Star Fox memiliki GSU-1 di U3, CIC di U5, 74LS139 di U4, ROM di U1, dan SRAM 32KiB tanpa baterai di U2
- SRAM ini bukan untuk savegame, melainkan sebagian digunakan untuk menyimpan framebuffer Super FX
- Komunitas SNES juga mencurahkan waktu pada GSU-1 seperti pada SA-1, dan berusaha meningkatkan judul-judul lama semaksimal mungkin melalui proyek seperti Project Super FX
- GSU-2 adalah GSU-1 yang berjalan pada full-speed 21,47MHz, dan digunakan di tiga game: Super Mario World 2: Yoshi's Island, DOOM, dan Winter Gold
- Ada eksperimen komunitas yang menunjukkan peningkatan performa dengan mengganti GSU-1 pada kartrid Star Fox menjadi GSU-2
- Randy Linden dari DOOM versi SNES melakukan semuanya lewat reverse engineering tanpa dokumentasi chip GSU maupun source code DOOM
- DOOM versi SNES adalah satu-satunya port konsol yang dapat menggunakan level PC, sementara konsol lain harus menyederhanakan geometri
- Yoshi's Island menggunakan GSU-2 terutama untuk scaling dan stretching sprite, lalu menulis kembali sprite yang telah dimanipulasi ke VRAM PPU
- PCB Yoshi's Island memiliki baterai, sehingga SRAM digunakan untuk framebuffer sekaligus status penyimpanan
- DOOM dioverclock ke 32MHz sehingga frame rate meningkat dari 10–11fps menjadi 14–15fps
- MSU-1 bukan chip yang masuk ke kartrid rilis resmi
- Dirancang oleh Near agar SNES dapat melakukan streaming audio kualitas CD, memutar FMV, dan mengakses RAM hingga 4GB
- Sasarannya adalah komunitas modding game, dan hasilnya dapat dilihat pada Enhanced Zelda III: A link to the past dan Enhanced Another World
Beban yang ditinggalkan untuk implementasi emulator
- Chip pendamping sangat meningkatkan pengalaman pemain dan menekan biaya penerbit, tetapi kemudian menjadi tantangan sulit bagi pengembang emulator
- Sebagian game yang bergantung pada EC unik baru dapat diemulasikan dengan benar pada 2012
- Pada awalnya, karena struktur internal S-DD1 belum diketahui, game seperti Street Fighter Alpha 2 “diemulasikan” dengan cara meminta graphic pack sprite yang sudah didekompresi sebelumnya
- Implementasi chip membutuhkan reverse engineering yang cukup besar
- Sebagian chip memiliki fungsi hardcoded sehingga memerlukan de-capping
- Chip yang menyimpan instruksi di ROM internal, seperti chip berbasis ARM, mengharuskan emulator mendapatkan file BIOS
- Bahkan per 2020, emulasi untuk sebagian chip paling langka masih belum selesai
1 komentar
Komentar Hacker News
Saya sangat suka bahwa cartridge konsol lama hampir sama dengan kartu ekspansi PCI di PC
Karena terhubung langsung ke bus, pada dasarnya bisa melakukan apa saja; sayangnya praktik seperti ini berakhir setelah GameBoy Advance, dan mulai Nintendo DS cartridge menjadi lebih mirip perangkat penyimpanan data murni
Jadi sekarang ekstensi modern yang aneh seperti chip ray tracinghttps://www.youtube.com/watch?v=2jee4tlakqo juga dimungkinkan, begitu pula chip ekspansi MSU1 yang sepertinya tidak ada sebagai chip fisik nyata dan hanya ada di emulator perangkat lunak
Secara teori bisa diproduksi, jadi seharusnya cartridge SNES fisik untuk Road Blasterhttps://www.youtube.com/watch?v=BvIXUOr4yxU juga bisa dibuat
Di artikelnya sendiri, dalam daftar “Street Fighter Zero 2” ditulis sebagai ROM USA, padahal Street Fighter Zero adalah nama Street Fighter Alpha di Jepang, jadi Zero 2 seharusnya versi Jepang dari Alpha 2
Di sini, setelah cartridge diganti dengan komputer modern, hal-hal aneh terjadi. Misalnya membuat semacam presentasi PowerPoint tentang humor menggunakan NES
https://www.youtube.com/watch?v=ar9WRwCiSr0
Jadi memang ada kemampuan terbatas untuk menambahkan fungsi, dan meski tidak semenarik CPU tambahan, di GBA pun sebenarnya tidak banyak contoh yang melakukan hal-hal luar biasa seperti itu
Saya ingin tahu apakah itu direncanakan untuk kasus penggunaan tertentu, atau ada kanal terpisah untuk komponen ekspansi cartridge yang terbatas
Detail lain yang terlewat di sini adalah bahwa bahkan cartridge tanpa chip ekspansi pun punya kelas performa yang berbeda
CPU SNES secara nominal berjalan di 3,58MHz, tetapi agar benar-benar berjalan pada kecepatan itu, harus terpasang cartridge “FastROM”. Nintendo juga menyediakan format “SlowROM” yang lebih murah bagi publisher, dan dalam kasus ini CPU turun hingga 2,68MHz
Ada juga komunitas modder yang mengembangkan patch untuk mengubah game SlowROM menjadi game FastROM guna mengurangi lag. Saya pernah membaca bahwa beberapa game SlowROM tampaknya awalnya dikembangkan untuk FastROM, lalu pada menit-menit terakhir diubah menjadi SlowROM karena tuntutan publisher untuk memangkas biaya
Kalau ingatan saya benar, dalam kasus itu mereka mengklaim penggunaan SlowROM bisa menghemat sampai 50 sen per cartridge
Pesaingnya, TurboGrafx-16, biasanya berjalan di 7MHz dan memakai CPU keluarga 6502 yang membutuhkan timing memori serupa, jadi saya selalu bingung kenapa SNES begitu pelit soal kecepatan
Meski begitu, TurboGrafx gagal di dunia Barat sementara SNES sukses secara global, jadi berarti ada sesuatu yang mereka lakukan dengan benar
Pada akhirnya semua cartridge SNES memakai mask ROM
Saya berharap para pengembang terus menulis detail seperti ini di blog dalam bentuk tulisan, bukan menjadikannya vlog YouTube
Banyak detail bisa dimuat dalam beberapa KB saja
“Super Mario World” masih merupakan mahakarya terbaik. Karakter, sprite, dan level yang luar biasa dimasukkan hanya dalam 360KB
Baru ketika dikompresi dalam format ZIP ukurannya menjadi sekitar 360KB
Musik yang keren, kontrol yang presisi, grafis yang menarik—semua aspek platformer dikerjakan dengan benar
Terranigma juga hampir setingkat, dan menurut saya Super Mario World mungkin sekitar peringkat ketiga
Teks bisa di-scrape, beberapa katanya diubah, lalu dipakai ulang di situs iklan SEO
Saya penasaran apa yang bisa dilakukan jika kemampuan memasukkan “chip ekspansi” ke dalam cartridge dimanfaatkan dengan teknologi modern
Disebutkan bahwa SuperFX punya framebuffer sendiri dan menyalin seluruhnya ke VRAM
Kalau begitu, secara teknis mungkinkah memasukkan SoC yang sangat kuat ke dalam cartridge, menggunakannya untuk merender grafis modern pada resolusi SNES, lalu menyalin frame hasilnya ke VRAM SNES?
Saya penasaran di mana batasnya
Bagian yang mengatakan “Randy Linden, pembuat DOOM untuk SNES, tidak punya akses ke dokumentasi chip GSU maupun kode sumber DOOM. Semuanya ia reverse-engineer” memang mengesankan secara teknis, tetapi saya penasaran kenapa harus sampai begitu
Randy Linden, satu-satunya programmer port tersebut, terpikat oleh gimnya dan awalnya mulai mem-porting Doom ke Super NES secara mandiri
Saat itu kode sumber Doom belum dirilis, jadi Linden merujuk ke Unofficial Doom Specs untuk memahami struktur lump gim secara rinci. Resource diekstrak dari IWAD, tetapi sebagian tidak dipakai karena keterbatasan teknis
Menurut wawancara, karena kurangnya sistem pengembangan untuk Super FX, sebelum pengembangan port secara penuh Linden membuat sendiri seperangkat tool assembler, linker, dan debugger bernama ACCESS di Amiga miliknya
Untuk kit hardware, ia memakai cartridge Star Fox yang di-hack dan dua controller Super NES yang dimodifikasi, dicolokkan ke konsol lalu dihubungkan ke port paralel Amiga, serta menggunakan protokol serial untuk menghubungkan dua perangkat tambahan
Setelah membuat prototipe lengkap, ia menunjukkannya kepada pemberi kerjanya, Sculptured Software, dan perusahaan itu membantu menyelesaikan pengembangannya. Linden mengatakan ia berharap bisa memasukkan level-level yang hilang, tetapi gimnya sudah mencapai ukuran maksimum gim Super FX 2, yaitu 16 megabit, sekitar 2MB, dan ruang kosongnya hanya kira-kira 16 byte
Ia juga menambahkan dukungan untuk light gun Super Scope, mouse Super NES, dan modem XBAND untuk multiplayer. Rekan programmer John Coffey, sebagai penggemar seri Doom, memodifikasi level, tetapi sebagian di antaranya ditolak oleh id Software
Selalu ada sejarah keren di sekitar hal-hal seperti ini, dan saya juga menuliskan sedikit lebih banyak tentangnya di sini: https://eludevisibility.org/super-noahs-ark-3d-source-code
Kalau ingatan saya benar, tim Crash Bandicoot juga tidak punya SDK sehingga menjalankan kode mereka sendiri, lalu menemukan bug hardware terkait penyimpanan memory card
Saya penasaran dari mana asal jumlah byte untuk berbagai gim itu
Gim disimpan di chip ROM, dan sebagaimana chip ROM, ukurannya berupa pangkat dua. Misalnya Super Mario World dirilis sebagai ROM 512kb, jadi dari mana angka 346.330 byte itu berasal? Apakah itu ukuran terkompresi?
Sepertinya perlu menulis program yang membuka tiap ZIP dan menghitung padding byte 0 di akhir file
Hari ini sudah terlalu larut; besok akan saya tulis dan perbarui artikelnya
Ada masalah lain juga. Artikel itu menulis seolah-olah MVG yang menemukan bahwa freeze pada SFA2 disebabkan oleh pemuatan data audio, padahal hal itu sudah diketahui jauh sebelum video tersebut: https://forums.nesdev.org/viewtopic.php?p=70474#p70474
Soal RTC juga tampaknya cukup membingungkan. Jelas seperti pada gim Pokemon GBC/GBA bahwa tujuannya adalah agar jam tetap berjalan meskipun konsol dimatikan dan cartridge dilepas, tetapi artikel itu seolah mengatakan mungkin karena drift clock NTSC. Saya sama sekali tidak mengerti maksudnya
Terkait bagian “Super Mario World juga mendapat perlakuan seperti ini. Saya tidak ingat ada slowdown, tetapi saat itu saya baru dua belas tahun”, Yoshi’s Island 4 memang mengalami slowdown dalam kondisi tertentu
Itu terjadi jika mendapatkan Starman saat menunggangi Yoshi lalu menekan P-Switch, dan ada level lain yang saya tidak ingat persis. Tempat di mana banyak Monty Mole bermunculan sekaligus, sepertinya di Chocolate Island
Saya rasa ada kasus ketiga ketika dua Sumo Bros. dan Amazing Flying Hammer Bro. muncul bersama di layar
Saya selalu tidak paham bagaimana ROM untuk emulator didump dari cartridge
Saya paham instruksi dan aset didump lalu dikemas menjadi file data yang bisa diinterpretasikan emulator. Tapi bagaimana emulator memodelkan semua hardware chip ekspansi di dalam cartridge? Bagaimana itu didump dari cartridge asli?
Secara pribadi, menurut saya situasi di NES, pendahulu SNES, sedikit lebih buruk
NES punya cukup banyak chip ekspansi yang disebut mapper. Fungsi umumnya adalah memperluas ruang memori NES, bukan menambahkan prosesor atau kemampuan tambahan, dan tanpa chip ini NES terbatas pada PRG ROM 32KB serta CHR graphics ROM 4KB atau 8KB, sehingga chip ini ada di sebagian besar gim
Sebagian besar gim setelah peluncuran NES menggunakan chip seperti ini
Chip-chip ini juga harus direkayasa balik semuanya, bersama konsolnya sendiri. Untungnya, itu jauh lebih sederhana daripada reverse-engineering CPU atau akselerator tambahan
Ada chip umum yang dipakai di banyak gim seperti MMC1 dan MMC3, dan ada juga chip seperti MMC2 yang pada dasarnya khusus untuk Punch-Out
Jenis chip ekspansi tidak terlalu banyak, jadi bukan sesuatu yang mustahil ditangani
Mekanisme perlindungan salinan SNES mudah diakali dari sisi konsumen. Namun mungkin tidak demikian bagi pembuat atau penerbit game
Saat itu semua orang punya “perangkat backup” untuk SNES. Itu adalah perangkat yang dipasang ke SNES dan dilengkapi floppy drive, lalu game “di-backup” ke floppy 3,5 inci yang sangat murah
Yang dibutuhkan agar sistem berjalan hanyalah satu cartridge asli; ketika cartridge itu dipasang ke alat penyalin, perangkat tersebut menggunakan ulang chip CIC dari cartridge itu
https://en.wikipedia.org/wiki/Game_backup_device
Melihat bagian yang mengatakan, “DSP-1 memiliki tiga versi: DSP-1, DSP-1a, dan DSP-1b. Perbaikan bug dan penyempurnaan proses produksi sedikit mengubah perilaku chip, dan akibatnya pesawat di demo Pilot Wings jatuh ke tanah,” rasanya kalau ada yang bertanya kenapa saya begitu payah, saya harus memakai alasan itu