Questo progetto permette di emulare un computer basato sul processore 6502 sulla console portatile 'Game Boy Advance' (GBA), rilasciata da Nintendo negli anni 2000.
Questo progetto ha come intenzione quella di riesplorare questo classico
processore, cercando di mantenere il codice quanto più chiaro e modulare
possibile, spesso a costo dell'efficienza.
L'emulatore non è da considerarsi accurato in quanto alla velocità di
esecuzione, dato che il processore 6502 utilizza istruzioni a numero variabile
di cicli di clock, dettaglio non implementato per semplicità.
Tipo di memoria | Grandezza |
---|---|
RAM | 4 KB |
VRAM | 8 KB |
SRAM | 1 KB |
ROM | 31 KB |
Lo schermo a disposizione è quello del GBA in "Mode 0" e fisso, cioè 30x20
tiles, con ogni tile di dimensione 8x8.
Sono disponibili 64 tile diversi e una palette di 8 colori a scelta.
Il framerate non è ulteriormente limitato, mantenendo quindi i circa 60 Hz
che offre il GBA.
Il GBA ha 10 bottoni, di cui 8 sono a disposizione dell'emulatore: 'L' ed 'R' sono stati rimossi.
La ROM del programma per 6502 viene letta dal file di salvataggio del GBA.
Il primo 1 KB viene utilizzato per la SRAM dell'emulatore.
Oltre all'interesse personale per il mio primo programma interamente in
assembly, l'obiettivo di questo progetto è di essere presentato all'esame di
'Architettura degli Elaboratori'.
Questo emulatore infatti presenta la struttura di base di un elaboratore ed è
interamente realizzato in linguaggio assembly ARM, insegnato durante il corso.
Per far partire l'emulatore, servirà un emulatore per GBA. Se non se ne ha uno, consiglio mGBA.
È scaricabile l'emulatore già compilato, insieme ad un programma 6502 dimostrativo da questo link.
Riguardo il processore 6502:
- 6502-emulator, un mio precedente emulatore scritto in C.
- Questo sito che descrive in dettaglio le istruzioni e le modalità di indirizzamento.
Riguardo il GBA:
- GBATEK, una documentazione dettagliata della console.
- Minicraft per GBA, un mio progetto da cui ho preso alcuni file di configurazione e che ho talvolta usato come riferimento.