[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/



Other related posts: