Hola.
Ya tengo todos los cambios implementados, pero el correspondiente a la rutina de formateo de discos optimizada de la ROM 1 no me acaba de ir bien y esperaba que me pudierais echar una mano. Veamos:
Tengo comprobado que haciendo las siguientes sustituciones de la ROM v41 se consigue el efecto deseado:
1) Sustituir
Por:
Con esto se consigue que se llame a una rutina de fill distinta para el formateo de una pista (secuencia de bytes CD0039), localizada en la dirección $3900.
2) Sustituir en la posición $3900 una zona vacía de la ROM (contiene 0s) por la siguiente secuencia, con la nueva rutina:
Código: Seleccionar todo
21 34 ED 06 09 36 02 2B C5 E5 21 1D 39 48 06 00 09 46 E1 70 C1 2B 36 00 2B 72 2B 10 E8 C9
Esto funciona y está probado. Ahora ya solo queda trasladarlo al fichero plus3.asm de los fuentes. Esto en principio es sencillo, pues la llamada a esta rutina la he localizado cerca de la etiqueta m0345, que contiene lo siguiente:
Código: Seleccionar todo
(...)
m0345 ld d,a
call m036f ; fill format buffer
ld e,$e5 ; filler byte
ld b,$07 ; page 7
(...)
Se trata de cambiarlo por esto:
Código: Seleccionar todo
m0345 ld d,a
call newfill ; new fill format buffer for interleave factor 3
ld e,$e5 ; filler byte
ld b,$07 ; page 7
La rutina newfill es la que he puesto más arriba
Código: Seleccionar todo
21 34 ED 06 09 36 02 2B C5 E5 21 1D 39 48 06 00 09 46 E1 70 C1 2B 36 00 2B 72 2B 10 E8 C9
Al desensamblarla tenemos esto:
Código: Seleccionar todo
ld hl,$0ed34 ;3900
ld b,$009 ;3903
ld (hl),$002 ;3905
dec hl ;3907
push bc ;3908
push hl ;3909
ld hl,$0391d ;390a
ld c,b ;390d
ld b,$000 ;390e
add hl,bc ;3910
ld b,(hl) ;3911
pop hl ;3912
ld (hl),b ;3913
pop bc ;3914
dec hl ;3915
ld (hl),$000 ;3916
dec hl ;3918
ld (hl),d ;3919
dec hl ;391a
djnz $-22 ;391b
ret ;391d
Yo la he trasladado en el fichero fuente de esta manera para que sea reubicable:
Código: Seleccionar todo
newfill
ld hl,tmp_buff+$23 ; tmp_buff es una constante con valor es $ed11
ld b,$09
fill_loop:
ld (hl),$02
dec hl
push bc
push hl
ld hl,fill_ret
ld c,b
ld b,$00
add hl,bc
ld b,(hl)
pop hl
ld (hl),b
pop bc
dec hl
ld (hl),$00
dec hl
ld (hl),d
dec hl
djnz fill_loop
fill_ret: ret
Ya solo falta adaptar este código para que compile condicionalmente. He generado las roms y de hecho puedo formatear un disco con la nueva rutina, pero al acceder al disco con CAT obtengo el mensaje de error:
SIN DATOS
Posiblemente sea una tontería que se me ha pasado por alto. ¿Alguien me puede ayudar a terminar con estar tarea?
Gracias.