Alguien me puede dar unos pequeños apuntes de como trabajar con el
VDP del MSX con assembler,
Me interesaría saber como leer y escribir en el vdp.
Queda todo muy bien explicado (pero en inglés) en el MSX RED BOOK, que
puedes consultar aquí: http://www.robsy.net/tredbook.txt
Ayer estuve haciendo pruebas con el MSX desde el Basic
Y con
out &h99,0
out &h99,33
out &h99,100
out &h98,255
Pude escribir en screen 2
Te sobran OUTs y mejor si pasas los datos en hexadecimal, para aclararte.
Por lo que he leído el primer out sirve para preparar el VDP para
escribir
el segundo y el tercer out para posicionarlo en la zona de memoria
donde se desea escribir
y el cuarto el byte que se desea escribir
Te sobre un byte en todo el proceso.
Primero mandas al puerto de direcciones el byte bajo de la dirección en
memoria.
A continuación mandas el byte alto de la dirección, poniendo en los campos
más altos la máscara que indica escritura (o lectura, según prefieras).
Después, mandas directamente el dato o los datos sucesivamente al otro
puerto.
Ejemplo práctico: ESCRIBIR "A" en la POSICION 0,0 DE LA PANTALLA
En ensamblador, y a lo bestia:
; La tabla de nombres empieza en 1800h para SCREEN 1 y SCREEN 2
; Desactiva interrupciones por precaucion
di
; Escribe el byte bajo de dirección
ld a,00h
out (99h),a
; Escribe el byte alto con la máscara (1bh OR 40h)
ld a,5bh
out (99h),a
; Ahora el VDP apunta a donde debe, pero hay que darle un respiro - estos
comandos solo sirven para perder tiempo
ex af,af'
ex af,af'
; Escribe la A (código ASCII 65 o 41h)
ld a,41h
out (98h),a
; Reactiva interrupciones
ei
Sé que parece muy lioso, pero no lo es tanto. Ten en cuenta, que el registro
de dirección se autoincrementa, es decir, si mandaras otro byte al puerto
98h, lo escribiría en la posición 1,0 de pantalla, o lo que es lo mismo, en
la dirección 1b01h.
Son correctas mis teorías???
Te has acercado bastante, como ves.
Desde assembler creo que con los registro HL se puede especificar la
zona ¿es correcto esto? ¿me podéis pasar un ejemplo?
Se hace utilizando las rutinas de la BIOS, lo que te recomiendo para
empezar, porque hacen que la programación sea mucho más sencilla. Tienes un
montón de rutinas distintas, comentadas en el libro que te he señalado. Como
muestra, un botón:
; La misma rutina, en versión sencilla usando la BIOS
ld hl,1800h
ld a,41h
call WRTVRM
Tienes otras muchas rutinas para trabajar con la VRAM y el VDP: ENASCR,
DISSCR, WRTVRM, RDVRM, FILVRM, LDIRVM, LDIRMV, WRTVDP, etc. Documéntate,
documéntate...
Aparte de easyasemble que otras lecturas en castellano sobre
assembler y msx me podéis recomendar... lo q se hasta ahora es poco
y todo lo he sacado del easyasembler y de un libro de código maquina
para ZX81 y Speccy :P
Poco hay en castellano. Pero no necesitas mucho inglés para ver las
explicaciones de rutinas de la BIOS.
Si tienes más dudas, ya sabes: pregunta. Si hay algo en concreto que no
entiendes, mándame un e-mail privado, aunque imagino que hay bastante gente
por aquí que podría ayudarte.
Edu Robsy
_________________________________________________________________
Acepta el reto MSN Premium: Correos más divertidos con fotos y textos
increíbles en MSN Premium. Descárgalo y pruébalo 2 meses gratis.
http://join.msn.com?XAPID=1697&DI=1055&HL=Footer_mailsenviados_correosmasdivertidos