Tras la autorización de Pazos:
Forma de cargar ROM's de 16 kb en la MegaFlash.
* MicroWaver 0.91 (WYZ & Cax) (Necesarios COMCTL32.OCX + COMDLG32.OCX)
* AsMSX
* MegaFlash ROM (Manuel Pazos)
Archivos
________
* ROM
* Código ensamblador
Procedimiento:
_____________
Vamos a cargar bloques de 16kb mediante el MW y utilizaremos en código para
enviarle al cartucho trozos de 8kb en 8kb.
* Definir en el código:
- Nombre del archivo -> filename
- Archivo ROM -> game
- Banco inicial -> SCCBANK
- Flash Slot -> Slot donde estará el cartucho.
* Compilar con AsMSX para generar un archivo filename.bin
* Abrir MW:
Seleccionar CD Mode
Compressed (mas lento menos problemas) / Experimental (Mas rápido..)
Attach built in loader
No patch
Pause=3000 ms
Abrir el BIN y generar el WAV.
* Colocar el cartucho MFR en el Slot indicado FlashSlot y encender el MSX pulsando
el interruptor del cartucho y bypassear el arranque.
* Cargar con Bload"Cas:",r el WAV generado. Una vez cargado apagar unos segundos el MSX
y arrancar de nuevo.
-> si hay problemas de carga probar:
- Eliminar efectos/ ecualizador ...
- media player sin filtros a volumen alto.
- cable blanco del cassette medio metido para que solo toque
los bornes de salida de un solo canal (derecho o izquierdo)
El código AsMSX es el sigueinte:
.FILENAME "VIDIPRO_OPF"
.BASIC
.BIOS
.START BOOT
.ORG $8000
FLASHSLOT EQU $E000 ;DB 1
SCCBANK EQU $E001 ;DB 0
LAST_BANK EQU $E002 ;DB
GAME: .INCBIN "VIDIPROV2.rom"
BOOT: EI
LD A,$00 ;EMPEZAMOS POR EL BANCO 0
LD [SCCBANK],A
;AND A
;JR NZ,LOADING
; LO PRIMERO BORRAMOS TODA LA MEMORIA FLASH.
; OTRA OPCIÓN SERÍA SABER DE ANTEMANO EL TAMAÑO DE LA ROM Y BORRAR SÓLO
; TANTOS SECTORES DE 64K COMO SEAN NECESARIOS [LO QUE HACE EL OPF]
LD A,000000001B ;[FLASHSLOT] ; SLOT DEL MEGAFLASHROM
LD H,$40 ;SLOT 1 =1 SLOT 2=2 ...
CALL ENASLT
ERASEFLASH:
LD A,$AA
LD [$4555],A
LD A,$55
LD [$42AA],A
LD A,$80
LD [$4555],A
LD A,$AA
LD [$4555],A
LD A,$55
LD [$42AA],A
LD A,$10
LD [$4555],A ; COMANDO QUE BORRA TODA LA MEMORIA FLASH
LD A,0FFH
LD DE,4000H
CALL CHECK ; COMPROBAMOS QUE SE HA BORRADO CORRECTAMENTE
JP C,FAIL1 ; ERROR AL BORRAR
; AQUÍ RECUPERAMOS 16K CARGADOS DESDE EL MICROWAVER EN $8000
LOADING: ;[LOADING...]
; GRABAMOS AL CARTUCHO 8K
LD A,[SCCBANK] ;BANCO
LD [$5000],A
LD HL,GAME ;DIRECCIÓN DEL BLOQUE DEL JUEGO
LD DE,$4000
LD BC,$2000
CALL FLASH ;FLASH DE 8 KB
;INCREMENTAMOS EL BANCO
LD A,[SCCBANK]
INC A
LD [SCCBANK],A
; GRABAMOS AL CARTUCHO 8K MAS
LD A,[SCCBANK]
LD [$5000],A
LD HL,GAME+$2000 ;DIRECCIÓN DE LOS 8KB SIGUIENTES
LD DE,$4000
LD BC,$2000
CALL FLASH
XOR A
LD [SCCBANK],A
JP 0 ;RESET
RET
FLASH:
LD A,$AA
LD [$4555],A
LD A,$55
LD [$42AA],A
LD A,$A0
LD [$4555],A ; COMANDO DE ESCRITURA EN FLASH
LD A,[HL] ; DATO A GRABAR
LD [DE],A ; GRABANDO...
LD A,[SCCBANK]
LD [$5000],A
LD A,[HL]
CALL CHECK ; COMPRUEBA SI SE GRABA CORRECTAMENTE
JP C,FAIL2 ; ERROR DE GRABACIÓN
INC HL
INC DE
DEC BC
LD A,B
OR C
JP NZ,FLASH
RET
; ERROR
FAIL1:
LD A,'X'
CALL CHPUT
RET
FAIL2:
LD A,'O'
CALL CHPUT
RET
;
; COMPRUEBA LOS 'TOGGLE BITS' PARA VER SI EL COMANDO SE EJECUTA CORRECTAMENTE
; OUT: CY = ERROR
;
CHECK:
PUSH BC
LD C,A
CHK_L1:
LD A,[DE]
XOR C
JP P,CHK_R1
XOR C
AND $20
JR Z,CHK_L1
LD A,[DE]
XOR C
JP P,CHK_R1
SCF
CHK_R1:
POP BC
RET
Os podeis imaginar como cargar 32 KB o una MegaROM, es bastante sencillo. De todas formas lo explicaré tras ver si todo va bien con las de 16 KB. Y lo definitivo seria hacer una MultiROM O_O!