Adapun SEN (dan SNES kebanyakan), inilah gambaran dasar. Saya tidak menulis game NES tetapi menulis emulator NES (Graybox) dan melakukan cukup banyak rekayasa ulang kereta lama.
Adapun bahasa pemrograman: ya, itu semua perakitan. Memprogram NES berarti bekerja secara langsung dengan interupsi perangkat keras, port DMA, transfer bank, dll. Untungnya, pemrograman 6502 (atau lebih tepatnya, 2A03) cukup mudah [1]:
- ada beberapa register: A, X dan Y terutama, dua yang terakhir hanya dapat digunakan untuk pengindeksan dan iterasi
- set instruksi kecil dan kebanyakan langsung
- tidak banyak memori: RAM utama adalah 2KB, dengan ekstensi 8KB yang didukung baterai opsional. Dari 2KB itu, 256 byte dicadangkan untuk stack dan halaman 0 (256 byte pertama) adalah tempat Anda ingin menyimpan pointer dan nilai yang paling sering digunakan karena beberapa mode pengalamatan khusus
3 hal ini bersama-sama membuat lingkungan yang cukup mudah untuk dihafal saat bekerja dengannya. Ya, Anda mengelola semua memori sendiri, tetapi itu pada dasarnya berarti Anda membuat peta lengkap tentang di mana semuanya berjalan di depan dan peta itu tidak terlalu besar karena Anda hanya perlu khawatir tentang 2K, sehingga Anda dapat merencanakannya pada selembar kertas grafik. Anda harus merencanakan beberapa hal lebih banyak dan secara statis menetapkan variabel dan konstanta untuk lokasi RAM dan ROM (pada kartrid).
Itu menjadi sedikit lebih rumit setelah data kartrij Anda melampaui batas yang dapat dialamatkan dari CPU. Itu 64KB, di mana 32KB lebih rendah diatur dalam batu dan dipetakan ke semua jenis port perangkat keras dan RAM. Di sinilah bank-switching berperan, yang berarti memetakan bagian ROM ke dalam (bagian dari) ruang alamat 32KB yang lebih tinggi.
Ini dapat digunakan sesuai keinginan programmer, tetapi contoh penggunaannya mungkin memiliki permainan dengan 3 level, dengan semua data level, data meta dan kode untuk setiap level dijejalkan ke area memori 8KB yang terpisah pada cartridge. Level tersebut mungkin memiliki callback untuk misalnya inisialisasi, per pembaruan frame, dll. "Memuat" level tersebut akan berarti memetakan 8KB potongan memori pada misalnya 0xC000. Anda kemudian dapat menentukan bahwa rutin init selalu pada 0xC000, rutin pembaruan bingkai pada 0xC200 dan data level dimulai pada 0xC800. Kode utama gim ini bertempat di memori yang lain kemudian mengontrol perubahan level hanya dengan menukar bagian yang benar dan melompat ke alamat absolut 0xC000 dan 0xC200 pada waktu yang tepat.
Wrt data grafis: data ubin NES adalah 2-bit peta 8x8 piksel. Untuk latar belakang mereka dikombinasikan dengan layer 2-bit resolusi 1/4. Nilai-nilai 4-bit ini kemudian diindeks ke dalam palet 16 entri, dengan saya percaya 53 warna unik yang efektif tersedia. Sprite juga menggunakan data piksel 2-bit dan masing-masing sprite menentukan indeks grup 2-bitnya sendiri membentuk indeks sahabat 4-bit. Gambar BG di layar adalah array 32x30 nomor indeks ubin.
Pada dasarnya, dengan memiliki banyak pengulangan dan indeks ke dalam indeks, Anda dapat menyimpan data sangat kecil. Data level sering disimpan sebagai bilah vertikal indeks ubin dan karena bilah vertikal itu juga digunakan kembali, maka indeks itu juga diindeks dan hanya disimpan satu kali pada kartrid. Teknik kompresi data sederhana bekerja dengan cara yang sama. Ini memungkinkan Mario 1 menjadi 32KB data (dengan ruang yang tersisa) dan 8KB data bitmap.
Adapun lingkungan dev, saya telah melihat beberapa foto di mana orang bekerja pada beberapa komputer kuno yang dapat disertifikasi terhubung ke pembakar EEPROM untuk bekerja. Debugging yang dibantu alat tidak benar-benar kemungkinan sampai setelah usia SNES [2]. Ini adalah alasan utama begitu banyak game lama memiliki bug "jelas" di dalamnya dan mengapa hal-hal seperti Gameshark dapat melakukan apa yang mereka lakukan; kesehatan pemain akan selalu berada di mem-lokasi X, sehingga Anda dapat memaksanya menjadi 100 setiap saat.
Jika Anda menemukan hal-hal ini menarik, saya anjurkan Anda untuk melihat misalnya http://wiki.nesdev.com/w/index.php/Nesdev_Wiki
Ada beberapa kursus pemrograman agar NES dapat ditemukan online juga.
Saya harap ikhtisar yang disederhanakan ini memberikan beberapa wawasan tentang pengembangan game era 80-an.
[1] Secara relatif. Juga saya bias ketika saya menulis Graybox sendiri di sekitar 85% perakitan PowerPC. [2] Lihat pembuatan artikel FF6: http://www.edge-online.com/features/the-making-of-final-fantasy-vi/