No me aclaro para programar la VDU de los MSX

Si tienes alguna duda y crees que alguien podría resolverla, ponla aquí. || If you have any doubt about programming, post it here.

Moderador: CEZ

Responder
Avatar de Usuario
mcleod_ideafix
16 bits
16 bits
Mensajes: 85
Registrado: 05 Mar 2008 19:46
Ubicación: Sevilla
Contactar:

No me aclaro para programar la VDU de los MSX

Mensaje por mcleod_ideafix »

Sigo el datasheet del TMS9918A, y, suponiendo que el puerto para escribir en la VDU sea el 99h, y el puerto para acceder a la VRAM sea el 98h, esto debería funcionar, no?

- Cargar byte bajo de la dirección de memoria de la VRAM y escribirlo en el puerto 99h
- Cargar byte alto de la dirección de memoria de la VRAM, subirle el bit 6, y escribirlo en el puerto 99h
- Ahora, cada vez que escriba en el puerto 98h, lo que escriba, va a la VRAM, y además se incrementa automáticamente el contador de direcciones.

¿Es así?

Pues entonces, ¿qué me falla en esta pequeña rutina? POngo la VDU en modo graphics 1, cargo una tabla de caracteres, una tabla de colores, y por último, relleno el frame buffer con el asterisco.

NOTA1: no puedo usar la BIOS del MSX
NOTA2: sí, la VDU está en el puerto 98h y 99h

Código: Seleccionar todo

Demo9918        proc
                di
                ld hl,tablareg
                ld b,8
                ld c,99h
                ld d,80h
cargareg        ld a,(hl)
                out (c),a
                out (c),d
                inc d
                inc hl
                djnz cargareg

                ld hl,Charset
                ld de,800h   ;direccion en VRAM
                ld bc,1024    ;cantidad de patrones a enviar (256 caracteres)
                ld a,e
                out (99h),a
                ld a,d
                and 0011111b
                or 01000000b
                out (99h),a
cargabyte       ld a,(hl)
                out (98h),a
                inc hl
                dec bc
                ld a,b
                or c
                jr nz,cargabyte

                ld de,320h
                ld b,32    ;256/8
                ld a,e
                out (99h),a
                ld a,d
                and 0011111b
                or 01000000b
                out (99h),a
cargacolor      ld a,0f1h   ;blanco sobre negro
                out (98h),a
                djnz cargacolor

                ld de,0
                ld a,e
                out (99h),a
                ld a,d
                and 0011111b
                or 01000000b
                out (99h),a
                ld bc,768
rellenaaster    ld a,'*'
                out (98h),a
                dec bc
                ld a,b
                or c
                jr nz,rellenaaster

                ei
                ret

tablareg        db 00000000b
                db 11000000b
                db 00h       ; name table (768 bytes) en posicion 0
                db 0ch       ; color table (32 bytes) en posicion 320h
                db 01h       ; pattern table (2048 bytes) en posicion 800h
                db 20h       ; sprite table (no usada) en 1000h
                db 03h       ; sprite pattern en 1800h
                db 0f1h      ; blanco sobre negro

                ret
                endp
Gracias por la atención :)
No hay virginidad que aguante tres martinis.
Imagen
Avatar de Usuario
WYZ
Site Admin
Site Admin
Mensajes: 2356
Registrado: 29 Dic 2004 21:17
Ubicación: Cartagena (CT)

Re: No me aclaro para programar la VDU de los MSX

Mensaje por WYZ »

Aqui: http://fms.komkon.org/MSX/Docs/Portar.txt

Tienes todas las respuestas en la seecion PORT.98,98,99,99 VDP (Video Display Processor)

Ah, considera usar la intruccion OTIR para enviar series de datos al VDP.
WYZPlayer

DREAM OVER
INSERT COIN
Avatar de Usuario
mcleod_ideafix
16 bits
16 bits
Mensajes: 85
Registrado: 05 Mar 2008 19:46
Ubicación: Sevilla
Contactar:

Re: No me aclaro para programar la VDU de los MSX

Mensaje por mcleod_ideafix »

Si, lo del OTIR ya me lo figuraba, lo que pasa es que quería empezar con lo básico-básico.
Pues según veo de la documentación que me pasas, que es MUY interesante, por cierto, parece que todo lo que hago en el código está bien hecho... y sin embargo no veo que el VDU envíe señales de escritura a la VRAM. Seguiré investigando...
Muchas gracias!!!
No hay virginidad que aguante tres martinis.
Imagen
Avatar de Usuario
Guillian
32 bits
32 bits
Mensajes: 626
Registrado: 02 Ene 2005 02:40

Re: No me aclaro para programar la VDU de los MSX

Mensaje por Guillian »

He echado un ojo al programa que has puesto y he visto que estás escribiendo la tabla de colores en el lugar incorrecto: 0xc * 0x40 = 0x300
Otro detalle, aunque en este caso no tenga importancia, es que en las operaciones de escritura te falta un bit en el AND; deberia ser 00111111
Con estas modificaciones el programa tiene que funcionar correctamente.

De todas formas dices que no ves que el VDP envíe señales de escritura a la VRAM, por lo que el problema entonces tiene que ser otro. Puede que relacionado con el hardware y como se decodifican las instrucciones OUT.
Avatar de Usuario
mcleod_ideafix
16 bits
16 bits
Mensajes: 85
Registrado: 05 Mar 2008 19:46
Ubicación: Sevilla
Contactar:

Re: No me aclaro para programar la VDU de los MSX

Mensaje por mcleod_ideafix »

Siiiiiiiiii, gracias. Me di cuenta pocas horas después de las dos cosas: la tabla de color y lo del AND. Lo arreglé, y ahora sí que veo pulsos de escritura en VRAM, pero seguía sin ver nada en pantalla.
Después hice otra rutinita que simplemente mete una serie de valores por los 16K de la VRAM, y luego los vuelve a leer. Ahí sí que me he dado cuenta de que algo chungo hay en la decodificación de direcciones de la VRAM, ya que el comportamiento del programa es el mismo tanto si le dejo la VRAM enchufada, como si se la quito.
La moraleja de todo esto es: si a la VDP del MSX le gustan las memorias 4116, NO LE PONGAS OTRA COSA (o se mosqueará).
Así que nada, a empezar de nuevo, pero con memorias de las que le gustan... :D
No hay virginidad que aguante tres martinis.
Imagen
Avatar de Usuario
Guillian
32 bits
32 bits
Mensajes: 626
Registrado: 02 Ene 2005 02:40

Re: No me aclaro para programar la VDU de los MSX

Mensaje por Guillian »

Me imagino que ya habrás probado a cambiar el bit 7 del registro 1. Según el PDF:
0 = Selects 4027 RAM operation
1 = Selects 4108/4116 RAM operation

Aunque no se si te servirá de algo :(
Avatar de Usuario
mcleod_ideafix
16 bits
16 bits
Mensajes: 85
Registrado: 05 Mar 2008 19:46
Ubicación: Sevilla
Contactar:

Re: No me aclaro para programar la VDU de los MSX

Mensaje por mcleod_ideafix »

Sí, sí, eso lo tenía claro. Ese bit siempre está a 1, para indicar que uso 16K de VRAM :)
No hay virginidad que aguante tres martinis.
Imagen
Responder