Roberto Montaruli wrote:
Mica vero. Lo schermo e' diviso in tre blocchi da 2K.Ahi ahi ahi! Si vede che non programmi lo Z80 da un po' :) L'ultima istruzione non esiste. Puoi al massimo fare ADD A,H, e non viceversa.
Che cominciano agli indirizzi 4000H, 4800H, 5000H
Se metti in DE le coordinate della cella 0 <= E <= 1F# la colonna
0 <= D <= 17# la riga
Per ottenere l'indirizzo del primo byte della cella in HL fai
LD HL, 4000# ; Inizio dell'area schermo
LD A, D ; Prendi la riga
AND 18# ; Cosi' ottieni 0 per il primo terzo di schermo
; 8 per il secondo terzo
; 16 per il terzo.
ADD H, A ; Adesso HL punta a 4000# o 4800# o 5000#
LD A,D AND 18h ; tieni solo il bit 3 e 4 della riga LD H,A ; memorizza il byte piu` alto SET 6,H ; ed aggiungi 16384 ad HL
Forse invece di SRL A intendevi SLA A, e comunque ADD A,A e` piu` semplice e veloce.E la parte alta del puntatore e' sistemata. Ora si tratta di calcolare la parte bassa del puntatore.
LD A, D
AND 7# ; La riga modulo 8
SRL ; x 2
SRL ; x 4
SRL ; x 8
SRL ; x 16
SRL ; x 32
ADD A, E ; Aggiungi la colonna
LD L, A ; E ora in HL c'e' l'indirizzo del primo byte della cella.
XOR D ; A ora contiene la riga modulo 8 RRCA ; RRCA ; ruotando di 3 a destra moltiplico per 32 RRCA ; ADD A,E ; aggiungi la colonna LD L,A ; fatto!
Non mi pare difficile.Mah... tanto immediato non lo trovo. Serve abitudine ed esercizio. Cosa che in questo momento non mi manca avendo appena partecipato alla minigame competition :)