Autore Topic: Richiesta Di Spiegazioni  (Letto 1612 volte)

drn74

  • Neo-iscritto
  • *
  • Post: 11
  • Gioco Preferito: Driller
Richiesta Di Spiegazioni
« il: 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)...
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...)
Codice: [Seleziona]
...
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:
 

fab

  • Utente
  • **
  • Post: 493
    • http://wav-prg.sourceforge.net/
  • Gioco Preferito: Tetris, Turrican, Impossible Mission
Richiesta Di Spiegazioni
« Risposta #1 il: 12 Marzo 2008, 18:14:22 »
 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.
Un giapponese sa recitare a memoria tutti i numeri di pi greco fino all'83431º decimale. Sa a memoria anche l'unico numero telefonico che è nella sua agendina - Daniele Luttazzi

iAN CooG

  • Utente
  • **
  • Post: 1774
    • http://iancoog.altervista.org
  • Gioco Preferito: Turbo Assembler, ActionReplay Monitor, DiskDemon
Richiesta Di Spiegazioni
« Risposta #2 il: 12 Marzo 2008, 20:44:51 »
 o mamma, i tutorial di Bayliss non sono un gran che' per imparare... stanne alla larga.
-=[]=--- iAN CooG/HVSC^C64Intros ---=[]=-
- http://hvsc.c64.org - http://intros.c64.org -

Luca/FIRE

  • Utente
  • **
  • Post: 136
    • http://fire.plus4.net
  • Gioco Preferito: Wizball
Richiesta Di Spiegazioni
« Risposta #3 il: 15 Marzo 2008, 01:08:16 »
 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...

iAN CooG

  • Utente
  • **
  • Post: 1774
    • http://iancoog.altervista.org
  • Gioco Preferito: Turbo Assembler, ActionReplay Monitor, DiskDemon
Richiesta Di Spiegazioni
« Risposta #4 il: 15 Marzo 2008, 01:15:59 »
Citazione da: "Luca/FIRE"
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.
-=[]=--- iAN CooG/HVSC^C64Intros ---=[]=-
- http://hvsc.c64.org - http://intros.c64.org -

drn74

  • Neo-iscritto
  • *
  • Post: 11
  • Gioco Preferito: Driller
Richiesta Di Spiegazioni
« Risposta #5 il: 16 Marzo 2008, 18:53:39 »
 Grazie ragazzi ora ho capito!
 

mces

  • Utente
  • **
  • Post: 339
  • Gioco Preferito: fort apocalypse
Richiesta Di Spiegazioni
« Risposta #6 il: 21 Marzo 2008, 12:53:22 »
 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!
Non esistono problemi, solo soluzioni.