Ready64 Forum
Commodore 64 => Programmazione, Grafica e Musica => Topic aperto da: antoniomauro - 19 Aprile 2010, 17:27:10
-
Pensavo di aver capito il meccanismo di selezione del video bank e dell'indirizzo di partenza della memoria video ma mi sono imbattuto in un vicolo cieco...
Con il codice allegato riesco a scrivere ed a visualizzare le modifiche sullo schermo ma non a leggere i valori:
lda #$15 ; Seleziono banco 2 ($8000-$BFFF)
sta $dd00
lda #$E4 ; Video a $3800 + $8000
sta $d018
lda #$01
sta $8000+$3800+10;Mettiamo una A al carattere 10
lda $8000+$3800+10;Leggo la A al carattere 10 (non funziona!)
sta $8000+$3800 ;La scrivo al carattere 0
In pratica riesco ad inserire un valore assoluto in $8000+$3800 ma non riesco a caricare l'accumulatore con il dato presente a tale indirizzo!!
Aiuto...
-
Ciao Antoniomauro,
prima di tutto un breve estratto da codebase:
L'indirizzo di memoria $0001 controlla se determinati banchi di memoria
devono essere associati a RAM, ROM o I/O. Il suo funzionamento é il
seguente:
$0001=$37 (Valore di default)
A000-BFFF Basic Rom
D000-DFFF I/O
E000-FFFF Kernal Rom
$0001=$36
A000-BFFF RAM
D000-DFFF I/O
E000-FFFF Kernal Rom
$0001=$35
A000-BFFF RAM
D000-DFFF I/O
E000-FFFF RAM
$0001=$34
A000-BFFF RAM
D000-DFFF RAM
E000-FFFF RAM
$0001=$33
A000-BFFF RAM
D000-DFFF Character ROM
E000-FFFF RAM
Detto questo, il tuo codice non é in grado di leggere il valore che hai appena scritto proprio perché di default $0001 é uguale a $37 e perciò nella locazione $B80A ($8000+$3000+10) si trova in realtà la BASIC ROM ($A000-$BFFF). Nota bene però che la scrittura nella locazione $B80A finisce comunque in RAM, tant'é che dovrebbe esserti apparsa la "A" dove l'hai scritta: vale infatti come regola generale che nelle zone nelle quali é "montato" un banco ROM é comunque possibile scrivere in RAM.
Alla luce di questo il tuo codice dovrebbe essere modificato nel modo seguente:
; Setto $01 in modo tale da rendere visibile la
; RAM nella zona A000-BFFF
lda #$36
sta $01
lda #$15 ; Seleziono banco 2 ($8000-$BFFF)
sta $dd00
lda #$E4; Video a $3800 + $8000
sta $d018
lda #$01
sta $8000+$3800+10;Mettiamo una A al carattere 10
lda $8000+$3800+10;Leggo la A al carattere 10 (non funziona!)
sta $8000+$3800;La scrivo al carattere 0
; Rimetto in modalità normale altrimenti quanto ritorno
; in BASIC il 64 va in crash perché manca la sua ROM
lda #$37
sta $01
-
Immaginavo qualcosa del genere ma non avevo pensato alla rom del basic!
Grazie del prezioso approfondimento!
ps: cos'è "codebase"? Un libro? Un tutorial?
-
Hai ragione, davo per scontato che conoscessi codebase, ma visto che sei nuovo é ragionevole tu te lo chieda.
Codebase64 é una raccolta di documenti, articoli e sorgenti riguardanti il commodore 64: a mio avviso é un ottimo punto di partenza per chi si voglia cimentare nella programmazione del biscottone.
La trovi al seguente URL: Codebase64 (http://codebase64.org/doku.php)
Buona navigazione, ho visto anche l'altro programma che hai postato, mi sembra che mastichi piuttosto bene il 6502! ;)
-
Grazie del link!
E' da quando ero bambino che desideravo capire come facessero i giochi del c64 ad essere cosi elaborati rispetto alle schifezze che facevo io in basic!!
Ora a quasi 34 anni ho deciso di colmare questa mia lacuna!!