
|
[zxspectrum]
||
[Date Prev]
[11-2003 Date Index]
[Date Next]
||
[Thread Prev]
[11-2003 Thread Index]
[Thread Next]
[zxspectrum] Re: un "videogioco" sprovvisto di sprite controller? ;-)
- From: Paolo Ferraris <pieffe8@xxxxxxxxx>
- To: zxspectrum@xxxxxxxxxxxxx
- Date: Wed, 05 Nov 2003 02:42:57 -0600
Roberto Montaruli wrote:
Mica vero.
Lo schermo e' diviso in tre blocchi da 2K.
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#
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.
Penso che uno degli algoritmi piu` corti sia
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
In realta` c'e` un algoritmo piu` veloce di questo, ma la differenza e`
minima, ed e` comodo che
A rimanga D AND 18h per la seconda parte
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.
Forse invece di SRL A intendevi SLA A, e comunque ADD A,A e` piu`
semplice e veloce.
In qualunque caso, questa moltiplicazione puo` essere fatta con soli 3 RRCA:
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 :)
A proposito, la competition e` finita. Io sono abbastanza contento del
mio piazzamento con maziacs1, ma non condivido la (super)valutazione dei
giochi commodore. Penso che in particolare ci abbiano rimesso i giochi per
l'Atari 2600 che erano molto giocabili anche se graficamente non erano
ovviamente molto belli.
http://starbase.globalpc.net/minigame/
|

|