Innanzitutto un saluto a tutti voi di questa comunità.
Mi presento come un nostalgico commodoriano e degli anni che furono per il quale , come suggerisce nickname che vedete qui a fianco non è mai troppo tardi nella vita ed è sempre meglio tardi che mai.
Per cui ho deciso di avventurarmi nello studio degli argomenti che sempre hanno catturato la mia attenzione , fascino e curiosità: primo fra tutti il linguaggio assembly del 6510.
Dopo aver selezionato un pò di bibliografia sull'argomento in .pdf o cartaceo che ho deciso di tener d'occhio e a portata di mano per un successivo studio mi sono imbattuto nel tutorial di assembler di Hex Files.
http://www.oldschool-gaming.com/articles_i...w=c64_hex_filesHo avuto modo di studiare la prima e la seconda puntata senza alcun problema ma non appena ho iniziato la terza parte di questo,a mio avviso semplice e pratico tutorial, sono incominciati a venirmi i primi dubbi.
Ragion per cui non sapendo più dove andare a sbattere la testa ho deciso di sottoporre alla attenzione di tutti voi il primo esercizio della terza puntata che mi ha lasciato letteralmente "inchiodato".
*= $0900
MAIN LDX #$00
MOVELOOP LDA $0401,X
STA $0400,X
INX
CPX #$27
BNE MOVELOOP
INC $0427
JMP MAIN
Bene... inizio subito ad esporre a voi quello che mi è parso chiaro e semplice per poi passare in rassegna i miei dubbi e a porvi qualche domanda nella speranza di riuscire a capire il funzionamento e la logica di questo breve listato.
Il programma ha due cicli il primo con la label MAIN il secondo con la label MOVELOOP. Iniziando dalla prima istruzione del primo ciclo il programma per prima cosa azzera il registro X dopodicché inizia il secondo ciclo che al primo giro vede il registro X con valore zero e legge il contenuto della locazione $0401 ( 1025 ) e lo trasferisce nella locazione precedente $0400 ( 1024 ). Fatto ciò il registro X viene incrementato di 1 e il programma salta di nuovo alla label del MOVELOOP e prosegue i vari cicli finquando il valore di X non abbia raggiunto il valore di #$27 ossia di 40 ( che corrisponde alla posizione sullo schermo della prima riga e della colonna 39 ).
In pratica fino a quando il cursore, diciamo ,arriva alla posizione dell'angolo superiore a destra delo schermo del commodore 64.
Fin qui "dovrei" aver afferrato cosa sta succedendo ma i problemi iniziano per me con l'istruzione INC $0427.
Quello che mi è parso di capire e di immaginare ( correggetemi se sbaglio ) è che il programma è come se percorresse da sinistra verso destra lo schermo del commodore 64 dalla prima procedendo a scatti ossia andando a leggere cosa contiene la posizione n+1 e scrivendo il valore nella posizione n fino ad arrivare alla posizione del primo carattere della seconda riga del lato sinistro dello schermo, leggere quindi il suo contenuto per poi scrivere nella posizione immediatamente precedente.
Intanto il programma scrive per ogni ciclo i caratteri ASCII del commodore 64 dal valore 0 al valore 254.
Quello che non riesco ad immaginare è cosa fa effettivamente l'istruzione INC $0427
Serve solo per cambiare carattere ASCII ?
Incrementa ad ogni ciclo il valore dell'accumulatore A?
Ad ogni ciclo ad esempio... se inizio dal primo giro... una volta che arrivo a INC $0427 e il ciclo salta a MAIN cosa ho in LDA $0401,X ? $0401+ 1 ? oppure $0401 + $0427 + 1 ?
E' proprio qui che mi perdo....
Vorrei tenere d'occhio i valori ,sapere cosa cambia ad ogni ciclo ma non riesco.
In ogni caso per capire cosa sta succedendo sullo schermo vi rimando all'esempio di questo tutorial che segue a quello da me esposto sopra il quale per permettere all'occhio di capire cosa avviene perché aggiunge altre tre istruzioni al listato che già conoscete e rallentando il tutto consentono all'occhio di capire cosa viene scritto a schermo di volta in volta.
*= $0900
MAIN LDX #$00
LDA #$FE
RASTER CMP $D012
BNE RASTER
MOVELOOP LDA $0401,X
STA $0400,X
INX
CPX #$27
BNE MOVELOOP
INC $0427
JMP MAIN
Mi aiutate a capire come tener d'occhio i valori che si muovono ad ogni ciclo?
quindi:
a) cosa fa effettivamente INC $0427
b) Una volta che arrivo a INC $0427 e il ciclo salta a MAIN cosa ho in A.
c) che valori vengono caricati ad ogni ciclo nelle locazioni $0401 e $0400 con le istruzioni LDA $0401,X e STA $0400,X ?
( $0401+ 1 ? oppure $0401 + $0427 + 1 ? oppure niente di tutto ciò? )
d) da quale istruzione del listato sono scritti sullo schermoi caratteri ASCII del commodore 64 che vanno dal valore 0 al valore 254.
Grazie per le vostre dritte...