HispaMSX

Programando VDP a pelo (v9918,v9928)

2002-09-19 13:26:38
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


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