Quiero llegar a ese 0.01% de los equipos que no usan los puertos standar del VDP (0x98 y 0x99).
Aunque el acceso a la VRAM no es un tema crítico en el juego que estoy haciendo, he pensado en dejarlo listo para desarrollos posteriores.
Funcionar, funciona (al menos en blueMSX, me falta probarlo en un par de máquinas reales), pero me gustaría que me dierais vuestra opinión, no vaya a ser que por intentar acceder a ese 0.01% (por cierto, ¿alguien sabe que máquinas son?), tenga problemas con un porcentaje más alto dentro del 99,9% restante.
¿Aparte de eso, los tiempos de acceso al VDP se respetan con este código? De momento en las máquinas donde lo he probado, ha funcionado correctamente.
El código es el siguiente:
inicio_rutinas_video_ROM:
vpoke_ROM:
di
ld a,l
vpoke_rom_99_1:
out (0x99),a
ld a,h
or 0x40
vpoke_rom_99_2:
out (0x99),a
ld a,b
vpoke_rom_98_3:
out (0x98),a
ei
ret
vpoke_int_ROM:
ld a,l
vpoke_int_rom_99_1:
out (0x99),a
ld a,h
or 0x40
vpoke_int_rom_99_2:
out (0x99),a
ld a,b
vpoke_int_rom_98_3:
out (0x98),a
ret
direccionvram_ROM:
ld a,l
direccionvram_rom_99_1:
out (0x99),a
ld a,h
and 0x3f
or 0x40
direccionvram_rom_99_2:
out (0x99),a
ret
fin_rutinas_video_ROM:
rutinas_vram:
ld hl,inicio_rutinas_video_ROM
ld de,inicio_rutinas_video_RAM
ld bc,fin_rutinas_video_ROM-inicio_rutinas_video_ROM
ldir
ld a,[7]
ld [inicio_rutinas_video_RAM+(vpoke_rom_99_1-vpoke_ROM)+1],a
ld [inicio_rutinas_video_RAM+(vpoke_rom_99_2-vpoke_ROM)+1],a
ld [inicio_rutinas_video_RAM+(vpoke_int_rom_99_1-vpoke_ROM)+1],a
ld [inicio_rutinas_video_RAM+(vpoke_int_rom_99_2-vpoke_ROM)+1],a
ld [inicio_rutinas_video_RAM+(direccionvram_rom_99_1-vpoke_ROM)+1],a
ld [inicio_rutinas_video_RAM+(direccionvram_rom_99_2-vpoke_ROM)+1],a
ld a,[7]
ld [inicio_rutinas_video_RAM+(vpoke_rom_98_3-vpoke_ROM)+1],a
ld [inicio_rutinas_video_RAM+(vpoke_int_rom_98_3-vpoke_ROM)+1],a
/*Estas llamadas son para probar el funcionamiento de las
ld hl,6144
ld b,100
call vpoke
ld hl,6144
ld b,100
call vpoke_int
call direccionvram*/
ret
//Este código está en RAM
.org 0xdf00
inicio_rutinas_video_RAM:
vpoke equ inicio_rutinas_video_RAM+(vpoke_ROM-inicio_rutinas_video_ROM)
vpoke_int equ inicio_rutinas_video_RAM+(vpoke_int_ROM-inicio_rutinas_video_ROM)
direccionvram equ inicio_rutinas_video_RAM+(direccionvram_ROM-inicio_rutinas_video_ROM)