POCKETCARD BY KIAND (un po' di teoria)
La cartridge puo' lavorare in 3 modalita'
8k (0x8000 - 0x9FFF)quando la linea EXROM e' a massa
16k(0x8000 - 0xBFFF)quando la linea EXROM e linea GAME sono a massa
Ultimax ((0x8000 - 0x9FFF + 0xE000-0xFFFF)quando la linea GAME e' a massa
Questo e' possibile grazie al PLA che gestisce la configurazione di memoria che il microprocessore "vede" dalla cartridge
Microprocessore -> PLA-> Cartridge
_NOTA_
Nella modalita' 16k, il BASIC RAM del C64 che risiede in 0xA000-0xBFFF e' condiviso.
La linea LORAM (input del microprocessore) controlla la zona di memoria 0x8000-0x9FFF
LORAM high: il PLA costringe il C64 a vedere la memoria bassa come ROM
LORAM low: il PLA costringe il C64 a vedere la memoria bassa come RAM
Nel caso della modalita' 16k e LORAM e' low non si vedono piu' gli 8k a partire da 0x8000, ma gli 8k a partire da 0xA000 continuano ad essere mappati nella cartridge.
Nella modalita' Ultimax non ho nessuna RAM a parte i 4K iniziali (0x0000-0x0FFF)
Spesso la zona 0x8000 di Ultimax non e' usata
_*PLA*_
Nel caso di aree di memoria che possono essere RAM o ROM (come il basic) il PLA sceglie cosa fare a seconda dello stato delle linee:
EXROM GAME LORAM HIRAM
_
_
se il processore scrive il PLA scegliera' sempre la RAM
se il processore vuole leggere il PLA scegliera' l'area di memoria in base allo stato delle linee.
Questo discorso cambia nel caso dell'area 0xD000-0xDFFF (IO Devices) ;qua il PLA permette al processore di leggere e scrivere sempre.
Nella modalita' 8K se si scrive nella zona a partire da 0x8000 (CARTRIDGE ROM) il processore scrive nella memoria RAM sottostante, stesso discorso per modalita' a 16K
Per ultimax non viene scritto nulla, salvo nella zona dei primi 4k
LORAM, HIRAM e CHAREN sono alti al RESET
Software reset :SYS 64738 (JMP FCE2)
La enable line e' composta dall'insieme di CE ed OE dei segnali che vanno all'eprom
Il PLA monitorizza continuamente i suoi ingressi (GAME EXROM) e in base a questi cambia immediatamente lo stato delle sue uscite ( ROML e ROMH)
Le linee GAME ed EXROM sono connesse direttamente al PLA e non ha interconnessioni col C64
ROML abilita la memoria da 0x8000
ROMH abilita memoria da 0xA000 o da 0xE000
ROML controlla le linee CE e OE della prima eprom e ROMH controlla le linee OE CE della seconda eprom sulla cartridge
ROML e ROMH vengono settate low (attivi bassi) solo su operazioni di lettura!
ROML non viene tenuto basso per l'intero periodo di funzionamento,ma solo nei momenti in cui e' necessario leggere, in modo da evitare possibili conflitti
ROMH dipende dalla modalita:
modalita' 8K ROMH e' disabilitato, puo' stare alto tutto il tempo
modalita' 16K ROMH gestisce l'area di memoria 0xA000-0xBFFF (contenuta nella seconda eprom)
modalita' Max ROMH gestisce l'area di memoria 0xE000-0xFFFF (contenuta nella seconda eprom)
Per ogni lettura in questa area il PLA deve mettere a massa ROMH
IO1 IO2: sono linee usate per il bank switching , sono output del PLA
Il C64 pensa di indirizzare una singola eeprom in realta' ce ne sono 2
Vengono usati per cartridge con piu' dei 16k standard
IO1 e IO2 vengono settate low su operazioni di lettura. IO1 viene settato sia su operazioni di scrittura/lettura nell'area 0xD000-0xDEFF
IO2 viene settato sia su operazioni di scrittura/lettura nell'area 0xDF00-0xDFFF
IO1 e IO2 possono essere gestiti da codice leggendo negli indirizzi indicati e permettendo di switchare in un altra eprom.
*_AUTOSTART_*
3 metodi:
*0xA000*
*
*
E' normalmente usata con cartridge 16k
E' usata quando non interessa usare il basic del C64.
Normalmente il C64 all'avvio inizializza prima il KERNAL e poi il BASIC Questo metodo si basa sul COLD-START Vector del basic che si trova agli indirizzi 0xA000 e 0xA001
Utilizzando 16k e' possibile cambiare i primi 2 byte della seconda eprom (coincide con il BASIC RAM) inserendo lo start del proprio programma
E' possibile usare questo metodo anche con una sola eprom da 8k purche' il
COLD-START risieda tra 0xA000 e 0xBFFF
Nota
Premendo RUN + RESTORE senza leggere un "CBM80" verra' attivato il WARM-START Vector che si trova a 0xA002-0xA003
*CBM80*
E' il piu' usato
Le routine di RESET del KERNAL controllano all'avvio nelle prime locazioni di 0x8000 per cercare la stringa "CBM80"
Se non trova nulla va avanti normalmente,altrimenti il processore si sposta sul COLD-START Vector che si trova nei primi 2 byte a partire da 0x8000, dove deve trovare le routine per inizializzare il KERNAL ed eventualmente il BASIC
Queste routine si possono copiare dalla versione originale del KERNAL nel caso di programmi custom.
Altrimenti sono gia presenti nel gioco o programma della cartridge scaricata.
L' inizializzazione del BASIC ci puo' essere come no.
L' inizializzazione del BASIC non ci deve essere se uso una cartridge da 16K (perche questa sovrascrive il basic Rom)
Normalmente viene visualizzato lo schermo READY con un comando NEW
Sara' possibile tornare alla schermata del basic tramite un Jump a 0xE386 (di solito nei giochi non si usa)
Il terzo e quarto byte a partire da 0x8000 definisce il WARM-START Vector.
Il processore esegue dall'indirizzo puntato dal Warm Vector quando viene premuto il tasto RESTORE.
Solitamente questo vettore punta ad una locazione successiva perche' il kernal e/o il basic sono gia stati inizializzati all'accensione.
Puo' coincidere con il COLD-START Vector (rieseguo inizializzazioni)
Oppure puo' essere disabilitato facendolo puntare a 0xFEBC
*MAX*
E' usato con le cartridge in modalita' UltiMax
Non e' molto usato. Consiste in una prima eprom a 0x8000 (usata per qualche semplice gioco o spesso non usata per niente)
e in una seconda eprom in 0xE000
E' basato sul fatto che al power-up del commodore il processore legge all'indirizzo 0xFFFC-0xFFFD ed esegue a partire dell'indirizzo che trova in queste locazioni. (normalmente sono le KERNAL RESET routines).
Se pero' inserisco una Max cartridge il PLA permette al C64 di leggere a 0xE000 non della ROM ma dalla cartridge, dove ci sara' l'indirizzo in cui andra' ad eseguire.
In questo caso le routine di inizializzazinoe del kernal devono essere tutte nella cartridge.
Ovviamente non ci sara' la routine di controllo del CBM, perche' lei stessa e' una cartridge