HispaMSX

Re: [hispamsx] Programando VDP a pelo (v9918,v9928)

2002-09-20 02:40:33
Por cierto, no es un poco triste que después de
decidir usar el VDP porque es más rápido, se tenga que
hacer una espera activa para hacer pasar el tiempo?
Qué triste no? Lástima de VRAM...

Si se hace bien no es necesario para nada eso de los NOP por ahí
intercalados para gastar ciclos de reloj. Pero a veces los errores son muy
puñeteros y aunque realmente sean de otra cosa da la impresion de que son
del acceso al VDP. Pero con poner DI y hacer los accesos como tiene que ser,
que es como ya se ha dicho en varios mensajes anteriores, la cosa funciona,
sin NOPs ni nada.

Por cierto, aprovecho para decirle a Eduardo Robsy que la rutina que tiene
puesta así:

    LD HL,origen
   LD B,128
@@BUCLE:     ; Por ejemplo, rutina que copia 128 bytes de RAM a VRAM
   LD A,[HL]
   INC HL
   OUT $98,A
   DJNZ @@BUCLE

queda mas optimizado usanda el OTIR:

LD HL, ORIGEN
LD B,128
LD C, $98
OTIR

Para optimizar mas en realidad tendrías que poner los dos datos de B y C en
una sola instruccion del tipo LD BC,nn pues LD B,n consume 7 ciclos y LD C,n
tambien pero en cambio LD BC,nn consume 10, así que te ahorras 4 ciclos. O
sea, que quedaria

LD HL, ORIGEN
LD BC, $8098
OTIR

Si quieres transferir mas de 256 bytes tendrás que hacer varios OTIR. Por
ejemplo, si quieres transferir 800 bytes:

LD HL,ORIGEN
LD B,0
LD C,$98
OTIR                   ;256 bytes
OTIR                   ;otros 256 hacen 512
OTIR                   ;y otros 256 hacen 768
LD B,32
OTIR                   ;768+32=800

OTIR incrementa HL y decrementa B hasta que este vale 0. Primero transfiere,
despues decrementa B y despues comprueba si B es 0, por eso al poner 0 de
valor inicial en B resulta que nos transfiere 256 bytes, y de paso al
finalizar ya lo deja preparado para el siguiente OTIR, para hacer otra
transferencia de 256 bytes. Igualmente como va incrementando HL, no es
necesario que lo toquemos, basta con que los 800 bytes estén en posicion
consecutiva a partir de ORIGEN. En este ejemplo tambien podriamos haber pues
to LD BC,$98 en lugar de las dos instrucciones LD B,0 y LD C,$98 solo lo he
puesto así para mayor claridad.

Saludos.

Marcos Vega.


<Anterior en la conversación] Conversación actual [Siguiente en la conversación>