¿qué está mal en este código?
Publicado: 29 Abr 2017, 01:50
La idea es tener un codigo que pueda ejecutarse al arrancar el ZX1 antes que el firmware, pensando en meter algun cambio que luego el firmware no toca (ni las ROM al arrancar). Cosas como enviar algo al PS/2 arduino del UnoGomas y cosas así. Además la idea es poder poner este "prefirmware" facilmente a cualquier firmware que salga, sin tener que recompilar, solo con el fichero firmware.ZX1. Concatenaríamos el output de este programa y el firmware.ZX1 y luego recortamos el fichero a 16K.
En el código lo que pretendo hacer es que al arrancar el ZX-Uno, coja toda la ROM y la copie en $8000. Luego pagino con mastermapper la System ROM 0 en $C000 y copio en $C000 el trozo de ese firmware que es el original, quitando el "preparche" de modo que en $0000 pase a estar el firmware original y en $c000 también, y luego hago un RST 0 para ejecutar el firmware original.
En este código el preparche no hace nada, la zona de hacer cosas está vacía, pero no me va en ZesarUX y no he conseguido nunca que haga debug ZesarUX de la ROM BIOS por lo que ando un poco a ciegas y no sé que puede ser:
En el código lo que pretendo hacer es que al arrancar el ZX-Uno, coja toda la ROM y la copie en $8000. Luego pagino con mastermapper la System ROM 0 en $C000 y copio en $C000 el trozo de ese firmware que es el original, quitando el "preparche" de modo que en $0000 pase a estar el firmware original y en $c000 también, y luego hago un RST 0 para ejecutar el firmware original.
En este código el preparche no hace nada, la zona de hacer cosas está vacía, pero no me va en ZesarUX y no he conseguido nunca que haga debug ZesarUX de la ROM BIOS por lo que ando un poco a ciegas y no sé que puede ser:
Código: Seleccionar todo
output prefirmware.bin
define zona_alta $8000 ; 32768
define zxuno_port $FC3B
define MASTERMAPPER 1
; ********* Copiamos la ROM en RAM *****************
start ld hl, 0
ld de, zona_alta
ld bc, $4000 ; 16K
ldir
jp zona_alta + highStart ; salta a la siguiente instrucción pero en la copia en RAM
; ********* Copiamos la ROM BIOS original sin el preparche en la ROM *****************
highStart
ld bc, zxuno_port ; Mapea System ROM en $C000
ld a, MASTERMAPPER
out (c), a
inc b
ld a, 9 ; RAM slot 9, System ROM 1
out (c), a
ld hl, $8000 + endpf ; Copia toda la ROM restante (todo menos la pre-firmware) que tengo en $8000 en $C000 (que es donde está mapeada la ROM)
ld de, $C000
ld bc, $4000 - endpf
ldir
ld bc, zxuno_port ; MAP again bank 0 at $C000
ld a, MASTERMAPPER
out (c), a
inc b
xor a ; Slot 0
out (c), a
; ******************** Aquí es donde realmente van las rutinas del prefirmware ****************
; ******************** Este prefirmware podría usar las rutinas RST de la ROM de Antonio porque este ya está en su sitio ****************
preFirmware
restart rst 0
endpf ; Aqui empezaría el firmware orginal