On Mon, 13 Nov 2000, Antoni Burguera i Burguera wrote:
Otra cosa. Segun el Technical Handbook, para poner screen 4 hay que meter
unos ciertos valores en algunos bits de los registros 0 y 1, dejando
inalterados el resto de bits. Como no tengo claro para que sirven el resto
de bits de estos registros, y para no tener que guardar en memoria los
valores que les meto cada vez, he puesto en los susodichos bits los valores
que tienen en mi TR. Eso me puede dar algun problema de incompatibilidad?
Pues casi que si. Lo que tienes que hacer es consultar la copia de los
registros del VDP que hay en RAM. Me explico: en F3DFh-F3E6h tienes una
copia de los 8 primeros registros del VDP. Y a partir de FFE7h tienes el
resto. Que por que hay una copia de estos registros en RAM? Los registros
del VDP son de solo ESCRITURA, asi que para poder consultar el valor que
tienen en un momento dado, has de guardarlos en algun sitio de la RAM. Y
esto es lo que hace precisamente la BIOS, de forma que cuando empieza tu
programa se te garantiza que esas posiciones de memoria contienen los
valores de los registros del VDP. Y es aconsejable que tu programa tambien
guarde aqui los cambios que vayas haciendo en los registros, sobre todo si
tu programa termina y tienes que volver al BASIC o al MSX-DOS.
Lo que yo hago en mis programas es definir un par de valores:
vdpregs0 equ 0f3dfh ; registros 0-7
vdpregs1 equ 0ffe7h-8 ; registros 8-...
De esta forma, trabajar con los registros es muy facil. Para leer el
contenido de los registros 0-7 solo tengo que hacer algo como:
ld a,(vdpregs0 + registro)
Y para los registros a partir del 8:
ld a,(vdpregs1 + registro)
Por ejemplo, las macros que tengo para activar y desactivar los sprites
son estas:
spriteson macro
ld a,(vdpregs1+8)
and 011111101b
ld (vdpregs1+8),a
vdp 8
endm
spritesoff macro
ld a,(vdpregs1+8)
or 000000010b
ld (vdpregs1+8),a
vdp 8
endm
"vdp" es otra macro que simplemente envia el contenido del acumulador al
registro del VDP que le indiquemos:
vdp macro registro
out (vdpport1),a
ld a,registro or 080h
out (vdpport1),a
endm
y "vdpport1" es el numero del puerto 1 del V99x8 segun lo ve el Z80:
vdpport0 equ 098h ; read/write VRAM
vdpport1 equ 099h ; read/write VDP registers
vdpport2 equ 09ah ; write palette registers
vdpport3 equ 09bh ; write registers (indirect)
Asi que intenta hacerlo de esta forma: lee el valor de los registros de la
RAM, y vuelve a guardar en RAM los valores que modifiques. De esta forma
te aseguraras que tus programas funcionen en cualquier MSX.
Saludos,
--
ag0ny(_en_)ag0ny(_punto_)com - http://www.aamsx.org