Multiface II (Amstrad). ROM Bug detección RAM parcheado

Aquí solo proyectos que incluyan el código fuente

Moderador: Fundadores

Reglas del Foro
Si no se incluyen los fuentes, se debe usar el foro de proyectos de software generales
Responder
Avatar de Usuario
Rebobinando
Demonio tercer orden
Demonio tercer orden
Mensajes: 994
Registrado: 14 Sep 2018, 23:45
Ubicación: Castelldefels y puntualmente Zaragoza
Has thanked: 339 times
Been thanked: 323 times

Multiface II (Amstrad). ROM Bug detección RAM parcheado

Mensaje por Rebobinando »

Saludos compañeros! :))

Como he comentado en el hilo de la tirada del clon de Multiface II, he pasado algo de tiempo navegando entre el código de la rom de origen del interface.

He podido corregir uno de los bugs que tenía en relación a la rutina que utiliza para verificar si el programa que haya en su momento en memoria está utilizando el 2º banco de memoria o no. En función de esto, el volcado que se genera al disco ocupa más o menos Kbs.

Digo 'uno de los bugs' porque no tengo claro si hay alguno más en la rom de este interface. Estas dos webs disponen de extensa documentación sobre el interface, aunque en francés y en inglés respectivamente: Quasar.cpcscene.net , Grimware.org
Resulta que la rutina de comprobación original deja ‘huella’ en algunos casos; al hacer la verificación, cambia el contenido en el 2º banco para comprobar si hay datos, pero no lo restituye a su valor original! ::? Esto no ocurre siempre; sólo en algunos (pocos) casos. :|

Lo delicado ha sido poder implementar una rutina alternativa en el mismo espacio de bytes… pero creo que se ha conseguido. Por las pruebas que he podido hacer, parece una versión muy estable. Sólo he podido probar la versión CPC (no tengo Plus), pero la versión de Plus debería funcionar de igual manera.

Os dejo la rutina original:
02c5 cdc615    call    15c6h
02c8 210040    ld      hl,4000h
02cb 7e        ld      a,(hl)
02cc f5        push    af
02cd 36aa      ld      (hl),0aah
02cf 01c47f    ld      bc,7fc4h
02d2 ed49      out     (c),c
02d4 7e        ld      a,(hl)
02d5 feaa      cp      0aah
02d7 200a      jr      nz,02e3h
02d9 3655      ld      (hl),55h		Aquí estaría el problema:
02db cdc615    call    15c6h		carga 55h en 4000h, pero
02de 7e        ld      a,(hl)		después de realizar la
02df fe55      cp      55h		comparación, sale de la
02e1 280b      jr      z,02eeh		rutina sin devolverlo a
02e3 cdc615    call    15c6h		su valor inicial
02e6 3e02      ld      a,02h
02e8 32963a    ld      (3a96h),a
02eb f1        pop     af
02ec 77        ld      (hl),a
02ed c9        ret 
Y la rutina modificada aquí (en fondo azul, las zonas modificadas)
02c5 cdc615    call    15c6h
02c8 210040    ld      hl,4000h
02cb 7e        ld      a,(hl)
02cc 01c47f    ld      bc,7fc4h
02cf ed49      out     (c),c
02d1 46        ld      b,(hl)
02d2 b8        cp      b
02d3 200f      jr      nz,02e4h
02d5 3c        inc     a
02d6 77        ld      (hl),a
02d7 cdc615    call    15c6h
02da 46        ld      b,(hl)
02db b8        cp      b
02dc 2810      jr      z,02eeh
02de 01c47f    ld      bc,7fc4h
02e1 ed49      out     (c),c
02e3 35        dec     (hl)
02e4 cdc615    call    15c6h
02e7 3e02      ld      a,02h
02e9 32963a    ld      (3a96h),a
02ec af        xor     a
02ed c9        ret     
Aquí podéis descargar la rom de MF2 modificada: Versión A3_RWD para CPC o Versión 29_RWD para CPC+
Firma, lo que se dice firma, no tengo. Si eso, lo voy pensando... :|, pero si te apetece, esta es mi cuenta de Github por si encuentras algo que te pueda llamar la atención.
Responder

Volver a “Proyectos de software abiertos”