Eccoti un semplice programmino esempio; mettere una “A” rossa nella terza colonna della prima riga (con il Vic in configurazione base a 3,5 K).
10 FOR T=0 TO 13:READ A:POKE 5120+T,A:NEXT T
Questa linea è il “loader” della nostra routine LM
1000 DATA24
1010 DATA169,1
1020 DATA141,2,30
1030 DATA169,2
1040 DATA141,2,150
1050 DATA76,9,201
questo è il programmino LM.
Per lanciarlo basta digitare SYS5120
Il programma è totalmente “rilocabile”, quindi puoi metterlo in qualsiasi area di memoria libera e farlo partire da lì…
E veniamo al programma:
La prima istruzione (linea 1000) è “24” che per il 6502 significa “CLC” (CLear Carry) e si usa per tutte le operazioni (tranne la sottrazione) che usano l’accumulatore (registro “A”) del 6502.
Questa è un’istruzione “a un bit”; (istruzione).
La seconda istruzione (linea 1010) è; “169.1”.
“169” per il 6502 significa;”LDA#” (LoaD Accumulator #, cioè carica in Accumulatore il numero seguente (compreso tra 0 e 255). # infatti significa “immediato”). Il numero che segue in questo caso è “1”, che diventa una “A” nella memoria di schermo.
Questa è un’istruzione a due byte (istruzione/dato).
La terza istruzione (linea1020) è “141,2,150”.
“141” per il 6502 significa; “STA” (STore Accumulator) in formato “assoluto”, cioè di copiare il contenuto dell’Accumulatore in una locazione di memoria compresa tra 0 e 65535 (16 bit) espressi come Lo-Byte/Hi-Byte. In questo caso “2”, “30”, cioè “2 (LO-Byte)” + 256×”30 (HI-Byte)”, cioè 7682 (terza colonna della prima riga sul video)
Questa è un’istruzione a tre Byte (istruzione/dato/dato).
La quarta istruzione (linea 1030) è “169,2”. Quindi identica alla seconda linea solo che il “letterale” in questo caso è “2” (corrispondente al rosso nella mappa colori).
La quinta istruzione (linea 1040) è “141,2,150”, identica alla terza, solo che il terzo numero in questo caso è “150”, e “2,150” →(2 + 150×256), cioè 38402 (terza colonna della prima riga nella mappa colori).
L’ultima istruzione (linea 1050) è “76,9,201”.
“76” per il 6502 significa “JMP”, cioè un’istruzione di “salto”, che in questo caso (codice “76”) fa la stessa cosa che in BASIC fai con “SYS”, ma espressa nel solito formato LO-BYTE/HI-BYTE, quindi corrisponde a “SYS51264”.
Quando metti “76,9,201” alla fine di una routine LM torni al programma BASIC, alla linea dopo quella che con “SYS” aveva lanciato il programma LM.
Anche questa è un’istruzione a tre Byte…
Prova a digitare il programma e a modificarlo, ad esempio stampando una “B” verde al posto di una “A” rossa, oppure ad aggiungere linee, in modo da stampare “AB”, oppure “CIAO”…
Imparando queste semplici istruzioni puoi già fare qualcosa…
Vedrai che programmare in Assembler non è poi così difficile…
Luca Angeli
Vedi: