HispaMSX

Pregunta técnica sobre VDP

2003-06-22 17:32:57
Hola. A alguien se le ocurre una rutina más rápida para copiar datos de la RAM a la VRAM en bloques de 8 bytes en un MSX1 (TMS9918 o así)???
Os pongo mi rutinilla, a ver si le encontráis las cosquillas:

; Parametros:
;   HL: dirección de origen (RAM)
;   DE: dirección de destino (VRAM)
;     B: número de bloques de 8 bytes a copiar
RAM2VRAM:
ld a,e
di
out (99h),a
ld a,d
or a,40h
out (99h),a
ei
ld c,98h
LOOP:
ld d,b
outi
outi
outi
outi
outi
outi
outi
outi
ld b,d
djnz LOOP
ret

Bastante fácil, no? Necesito el máximo de velocidad, pero con cierta flexibilidad. La idea es usar esta rutina cuando se produzca la interrupción de retrazado (V-blank), es decir, por ejemplo, justo después de un HALT. El bucle principal tarda 4x2+16x8+13x1=149 T-states en copiar un bloque de 8 bytes y reiniciar el bloque. La ventana de v-blank es de 4300 microsegundos (a 60 Hz). Entonces, si mis cálculos no son erróneos, y suponiendo 60 Hz de refresco y un reloj de 3,58 MHz, el número máximo de bloques de 8 bytes que puede copiar es 103. Redondeando para ser precavidos, digamos que 100. Eso sólo son 100x8=800 bytes de datos copiados desde VRAM a RAM. Alguna otra idea? Esto basta para copiar una pantalla entera (en realidad, sólo la tabla de nombres) en los modos gráficos I y II (es decir, screen 1 y screen 2). Se aceptan sugerencias...

Perdón por el tostón técnico para los no iniciados...

Un saludo y gracias,

Edu R.

_________________________________________________________________
Dale rienda suelta a tu tiempo libre. Encuentra mil ideas para exprimir tu ocio con MSN Entretenimiento. http://entretenimiento.msn.es/


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