Mi e' presa la voglia di tornare alle origini e programmare in assembler sul MOS 6502 (o meglio sul MOS 6510 del Commodore 64). Ovviamente il computer fisico e' in qualche discarica (o spero recuperato) e cerco di usare l'emulatore
VICE
In modo, piu' o meno tradizionale, dopo aver avviato l'emulatore, si deve impiegare un assemblatore (nel caso Turbo Assembler per C64...con una curiosa omonimia con TASM Borland per x86) caricando l'immagine di un disco (preventivamente scaricat) con File/Attach Disk Image/Disk 8
con
LOAD"$",8 e successivo
LIST si ottiene il contenuto del disco
Si carica l'assemblatore con
LOAD"*",8,1 ed al READY si digita
SYS36864 entrando nella schermata nera di editing. Questo e' il semplice programma di test che stampa a video una stringa
programma in sintassi TASM
--------------------------------------------------
* = $1000
!basic
ldx #$00
loop
lda message,x
sta $0400,x
inx
cpx #$04
bne loop
rts
message .text "luca"
--------------------------------------------------
Per compilare il programma si deve usare la combinazione BackArrow+3 ma BackArrow non esiste sulla tastiera PC; si tratta del tasto piu' in alto a sinistra al di sotto del tasto di ESC (che nella tastiera italiana e' il backslash o barra rovescia)
s per start e si avvia il programma. Per rientrare nella fase di editing e' sufficiente ridigitare SYS 36864
E' comunque piuttosto noioso procedere nel modo classico ed e' molto piu' comodo usare C64 Studio (una IDE con allegato ACME un cross compiler 6502) e che permette di eseguire il programma lanciando autonomamente VICE
La differenza sostanziale tra i due metodi e' che usando
C64 Studio si deve scrivere un preambolo in Basic che lancia poi il codice Assembler (in pratica una sola linea di codice BASIC che indichi un SYS49152 per passare il controllo al codice assembler...tale preambolo e' ralizzato con le sole righe
*=$0801 ovvero la locazione di memoria dove risiede il compilatore BASIC e
!basic.. non risulta necessario impostare
*=$01000)
programma in sintassi ACME. Da notare come viene dichiarata la stringa
--------------------------------------------------
;set program start address
* = $0801
!basic
ldx #$00
loop
lda message,x
sta $0400,x
inx
cpx #$04
bne loop
rts
message !scr "luca"
fra le altre cose con C64 Studio si puo' utilizzare anche direttamente Basic