Ready64 Forum
Commodore 64 => Programmazione, Grafica e Musica => Topic aperto da: drn74 - 12 Marzo 2008, 18:03:31
-
Salve a tutti,
sono un nuovo utente che si e' imbattuto quasi casualmente sul vostro interessantissimo sito.
Come potete immaginare anche io sono un vecchio possessore di c64 che guardava con ammirazione i vari demo, intro che trovavo in giro (...in edicola).
La richezza di informazioni ed esempi su ML che si puo' trovare da voi mi ha fatto venire la voglia di impararlo (finalmente!!).
Quindi mi son messo di buona volonta a leggere la reference guide e a seguire un tutorial (questo (http://www.redesign.sk/tnd64/assemble_it.html))...
Ora tutto e' andato liscio finche' non mi sono imbattuto nel seguente pezzo di codice:
(come si puo' intuire e' parte di una routine di scrolling di testo...)
...
scroll1: lda smooth1
sec
sbc #$02
and #$07
sta smooth1
bcs endscr1
ldx #$00
wrap: lda scroll_screen1+1,x
sta scroll_screen1,x
inx
cpx #$28
bne wrap
read1: lda $076f
cmp #$00
bne nowrap1
lda #<message1
ldx #>message1
sta read1+1
stx read1+2
jmp read1
nowrap1:
sta $076f
inc read1+1
lda read1+1
cmp #$00
bne endscr1
inc read1+2
endscr1: rts
...
quello che non capisco e' il funzionamento delle linee STA READ1+1, STX READ1+2, INC READ1+1 ecc...
Cioe' READ1 e' una label e quindi una locazione di memoria dove eventualmete fare un JMP non capisco quale sia il significato delle suddette operazioni ...potete spiegarmelo?
PS:spero di aver posto la domanda nel modo corretto scusate la niubbaggine :lol:
-
read1: lda $076f
Sembra un programma che modifica se' stesso. Cioe', cambiare read1+1 e read1+2 ha l'effetto di trasformare il numero $076f in qualcos'altro, cosi' la stessa LDA (alla locazione read1) legge una parte diversa della memoria.
-
o mamma, i tutorial di Bayliss non sono un gran che' per imparare... stanne alla larga.
-
Sono addormentatissimo, sto per andare a nanna che domani si lavora, quindi è facile che sia erroneo ed approssimativo... :sonno:
Ma ad una prima occhiata, ogni ottava posizione dello smooth scrolling ($D016 mi pare sul C64), lui deve avanzare di un carattere la locazione che inizia a leggere il testo, quindi modificare lowbyte ed eventualmente hibyte di READ1, posti esattamente alla posizione +1 e +2 del comando LDA $xxxx. Quando nel blocco di testo si pesca invece un valore di $00 (cioè "@"), quello è il segnale per tornare all'inizio del blocco del testo, quindi è tempo di rimettere a posto lobyte ed hibyte come da inizio della memoria del messaggio scorrevole (#message1 è l'hi).
Questa semplice routine non fa nient'altro che sottrarre #$02 (è la velocità di scrolling) a $D016, considerarne poi solo i valori utili fino a #$07, spostare eventualmente il puntatore dal quale iniziare a stampare la riga (#$28 caratteri, cioè 40), e verificare se il carattere succhiato al blocco del messaggio segnala la fine dello stesso ed il relativo wrapping.
Per quanto un po' buggate ed alle volte logicamente incorrette o ridondanti, Richard, perché no? ;) Io stesso ho tradotto (ed un po' corretto) la semplice "intro coding" per Plus/4. Un piccolo esercizio...
-
Per quanto un po' buggate ed alle volte logicamente incorrette o ridondanti
Appunto, non c'e' niente di peggio che cercare di imparare da uno che non ha le idee chiare.
-
Grazie ragazzi ora ho capito!
-
una volta anche io ho usato l'artifizio di cambiare il valore di una locazione all'interno di un programma, ma era per mantenere veloce un ciclo di spostamento byte che così in esecuzione era veloce (lento..) come un caricamento da memoria definita, ed in realtà era un accesso alla memoria indicizzato.... (parte alta dell'indirizzo...).
Il tutto se la senilità mi permette dei lucidi ricordi!
comunque la possibilità di poter sfruttare il fatto che il SW è scritto nella RAM accessibile in lettura/scrittura è una peculiarità di questa classe di macchine e, visti gli altri pesanti limiti (1MHz...), ogni PORCATA è buona pur di ottenere, nella maniera meno "sporca" possibile, il risultato cercato.
Certo, questo tipo di "trucco" non è forse opportuno quando si fà didattica, ma in fondo ricordiamoci che se "apriamo" lo schermo del 64 o se moltiplichiamo le sprite, in fondo stiamo usando "bachi" o peculiarità del sistema che abbiamo sotto mano.
Quando le risosrse sono poche allora... del maiale non si butta via niente!
Certo che poi spiegarlo a chi proponi questo SW sarebbe educazione!