- 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



