HispaMSX

Re: [hispamsx] Screen 2 y 4

2000-11-13 14:41:34
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


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