2 domande ancora:
1) Lasciando i valori di $dd00 e $d018 a quelli di default, i caratteri rom non dovrebbero essere leggibili anche da $1000? Ho provato ma non sembra funzionare!
2) Con molta fatica ho realizzato il mio primo listato in asm che, bene o male, fa quello che volevo (copiare caratteri dalla rom, specchiare un carattere, cambiare indirizzo della memoria video/charset, scrivere sullo schermo) ma non riesco a capire 2 cose:
a ) Perchè al momento dell'esecuzione non è più possibile utilizzare l'editor basic?
b ) Se provo a modificare nel ciclo della copia dei caratteri rom cpx #$B8 con cpx #$c0 per copiare un carattere in più, al momento del "run" si blocca tutto. E dire che prima di alcuni ritocchi (in altri punti del codice) non riuscivo ad andare oltre il valore #$B8....
Sto sicuramente ignorando qualcosa nell'utilizzo dei registri e dell'accumulatore che in realtà e fondamentale nella stesura corretta di un programma in asm ma non riesco a capire cosa!!
li listato:
processor 6502
app = $02;Variabile di appoggio in zero page???
org $0801
word eop
word 7102
byte $9e,"2061",0;Sys command
eop word 0
org $080D;Inizio del programma
;Copio 23 caratteri caratteri da $D000(rom charset) a $7800
lda $0001;switch in character
and #$FB
sta $0001
ldx #$00
lpCopy lda $D000,x
sta $7800,x
inx
cpx #$B8;23 char di 8*8bytes
bne lpCopy
lda $0001;switch in i/o
ora #$04
sta $0001
;Proviamo a copiare la B invertita nel carattere @
ldx #$00
lpShift1
lda $7810,x;carico A con i dati del carattere
ldy #$00
sty app ;Azzero app
lpShift2
lsr ;shift a destra del byte ed il primo bit finisce nel carry
rol app ;recupero il bit finito nel carry scorrendo a sx app
iny
cpy #$08
bne lpShift2
lda app ;Memorizza app
sta $7800,x
inx
cpx #$08
bne lpShift1
lda #$02 ; Seleziono banco 1 ($4000-$7FFF)
sta $dd00
lda #$0E ; video a $0000 +$4000 charset a $3800 + $4000
sta $d018
;Scrivo 23 caratteri su schermo
ldx #$00
lwWrite txa
sta $4000,x
inx
cpx #$17
bne lwWrite
rts
ps: Grazie per la pazienza con cui mi stai spiegando tutto!