martedì 10 luglio 2018

C64 Autostart Assembly

Un metodo per lanciare un codice Assembler su C64 senza usare un loader basic (e gli  svariati DATA). Questo codice, a differenza della macro start_at_address vista in questo post, non lancia diretttamente il codice quando finito il caricamento ma non e' necessario digitare nessun comando SYS, basta il comando RUN



Il codice e' il seguente

*=$801
BASIC: !BYTE $0B,$08,$01,$00,$9E,$32,$30,$36,$31,$00,$00,$00
 
             LDA........
             altro codice assembler


il comando precedente si traduce come
1 SYS 2061

ma come si traduce?? I comandi BASIC vengono inseriti in memoria nel C64 come token. Il codice $9E costituisce il token del comando SYS. In seguito $32, $30,$36,$31 sono i valori esadecimali dei caratteri che corrisponde in ASCII CODE al numero 2061

I due byte precedente $01,$00 indicano il numero di riga (byte basso, byte alto). In questo caso il numero di riga e' 1. I primi due byte in assoluto sono il puntatore alla prossima riga BASIC nel solito ordine byte basso/byte alto ... questo caso il puntatore e' a $80D ovvero a dove inizia il codice assembler

il valore 2061 corrisponde all'esadecimale $80D. In pratica la riga in codice BASIC fa puntare l'esecuzione del programma al primo byte dopo la stringa di inizializzione ($801 (2049) e' la base del codice basic in C64 + 12 byte della lunghezza  launcher, ovvero la stringa BASIC,  e' uguale a 2061)

I tre zeri finali corrispondo a : il terz'ultimo zero indica il terminatore di una riga BASIC. Gli ultimi due zeri indicano la fine del programma BASIC.


Nessun commento:

Posta un commento

Alpine Linux 2024 su IBM A31

Ho provato a far resuscitare un IBM A31 destinato alla discarica. La macchina ha processore P4, 256 Mb di RAM, la batteria CMOS morta ed e&#...