Hola.
En el frustrante mundo de la programación sin llamadas a la BIOS he tenido
algún que otro problema mientras lidiaba con el VDP. Lo que viene a
continuación puede contener código en ensamblador y otras inmoralidades: no
iniciados abstenerse.
NOTA: todo el código siguiente se supone que se está ejecutando con las
interrupciones deshabilitadas (DI)
1.-Estoy tratando de variar un registro del VDP y no lo consigo. Supongamos
que quiero escribir el valor $E2 en el registro 1. En teoría debería hacer
algo así como lo siguiente:
LD A,$E2
OUT $99,A
LD A,$81
OUT $99,A
Pues el caso es que no funciona. ¿Alguna pista?
2.-Sé que hay una forma de hacerlo pero no recuerdo cómo era: ¿cómo puedo
utilizar el modo gráfico (SCREEN 2 para entendernos) con sólo un único banco
de caracteres y colores? Es decir, en lugar de los 3x256=768 bloques
diferentes, poder emplear únicamente 256. Lo he visto hacer, pero ¿cómo?
3.-¿Cuántos ciclos de reloj habría que esperar (siendo prudentes) desde que
se establece una dirección de la VRAM hasta que se puede acceder a ella con
seguridad? Lo estaba haciendo así, pero a veces (muy de vez en cuando)
falla:
LD A,$00 ; Los veteranos emplearíamos aquí XOR A
OUT $99,A
LD A,$60
OUT $99,A ; Así quedaría apuntando a la dirección $2000 de la VRAM
NOP
NOP ; Así hacemos tiempo (4+4 ciclos), es suficiente?
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
Y que nadie me diga, por favor, que la BIOS hace todo esto, etc. etc. En
este caso en concreto no me sirve. Ya sé que LDIRVM lo hace muy fácilmente,
pero no se trata de esto.
Bueno, me ha salido un mail un poco técnico, lo siento. Espero que algún
gurú me pueda echar una mano. Gracias.
Un saludo,
Eduardo R.
_________________________________________________________________
Charle con sus amigos online usando MSN Messenger: http://messenger.msn.com