pequeña modificación de la rom de un 48k ¿cómo hacerlo?

Sinclair QL, ZX81, +2, +3, 128K ...
Avatar de Usuario
Quest
Atari 1040 STf
Atari 1040 STf
Mensajes: 900
Registrado: 18 Jul 2013, 22:20
Sistema Favorito: Commodore Amiga
primer_sistema: Spectrum 16Kb/48Kb
consola_favorita: Nintendo SNES
Primera consola: Nintendo NES/Clónica
Gracias dadas: 9 veces
Gracias recibidas: 16 veces

pequeña modificación de la rom de un 48k ¿cómo hacerlo?

Mensajepor Quest » 24 Ene 2015, 11:30

Buenas,

Me gustaría saber si se podría hacer y cómo hacerlo, para modificar la rom de un 48k (seria para flashearla y ponérsela a un spectrum real), para una cosita muy concreta.

Lo que quiero simplemente es que al encender el spectrum, el color del papel y del borde, que por defecto arranca siempre en blanco (7) lo hiciera en otro color, y la tinta del texto, que siempre arranca en negro, también. Sólo sería eso.

Gracias!

Avatar de Usuario
antoniovillena
Amiga 1200
Amiga 1200
Mensajes: 2013
Registrado: 16 Abr 2012, 21:22
Gracias recibidas: 8 veces

Re: pequeña modificación de la rom de un 48k ¿cómo hacerlo?

Mensajepor antoniovillena » 24 Ene 2015, 12:27

No estoy seguro porque no lo he probado, pero puede ser cambiando estas dos constantes:

Aquí cambias el borde, $07 es blanco.

Código: Seleccionar todo

L11CB:  LD      B,A             ; Save the flag to control later branching.

        LD      A,$07           ; Select a white border
        OUT     ($FE),A         ; and set it now by writing to a port.


Y aquí la tinta y el fondo, $38 es tinta negra/fondo blanco.

Código: Seleccionar todo

        LD      A,$38           ; the colour system is set to white paper,
                                ; black ink, no flash or bright.
        LD      (ATTR_P),A      ; set ATTR_P permanent colour attributes.
        LD      (ATTR_T),A      ; set ATTR_T temporary colour attributes.
        LD      (BORDCR),A      ; set BORDCR the border colour/lower screen

Avatar de Usuario
Quest
Atari 1040 STf
Atari 1040 STf
Mensajes: 900
Registrado: 18 Jul 2013, 22:20
Sistema Favorito: Commodore Amiga
primer_sistema: Spectrum 16Kb/48Kb
consola_favorita: Nintendo SNES
Primera consola: Nintendo NES/Clónica
Gracias dadas: 9 veces
Gracias recibidas: 16 veces

Re: pequeña modificación de la rom de un 48k ¿cómo hacerlo?

Mensajepor Quest » 24 Ene 2015, 12:43

Gracias Antonio :D

Acabo de probar cambiando las constantes y funciona todo perfectamente, ya he podido cambiar los colores de todo por defecto al arrancar.

He probado la rom parcheada en un emulador y todo perfecto.

Me ha servido de muchísima ayuda!! :jumper:

Avatar de Usuario
zup
Amiga 2500
Amiga 2500
Mensajes: 3013
Registrado: 04 Sep 2009, 20:07
Sistema Favorito: Spectrum 16Kb/48Kb
primer_sistema: Spectrum 16Kb/48Kb
consola_favorita: Nintendo DS/3DS
Primera consola: Nintendo GameBoy
Ubicación: Navarra
Gracias dadas: 86 veces
Gracias recibidas: 360 veces
Contactar:

Re: pequeña modificación de la rom de un 48k ¿cómo hacerlo?

Mensajepor zup » 24 Ene 2015, 14:05

En realidad, la parte del borde está mal. Esa rutina pone el borde blanco para la inicialización, pero no altera la variable BORDCR para reflejarlo. Esto provoca que, aunque el borde se quede del color elegido tras hacer un reset o un NEW, en cuanto pulsas una tecla el Spectrum lee los valores de BODRCR (que son los mismos atributos que utiliza en las dos últimas líneas de pantalla) y actualiza el borde a blanco.

La inicialiación de todos los atributos (incluído borde) está en el segundo cacho del código. La limitación de esta parte del código es que, tal como está escrito, BORDER y PAPER siempre son inicializados al mismo color. Se podría cambiar el código para que ATTR_P y BORDCR fueran diferentes (aunque habría que buscar un hueco en la ROM donde poner el código nuevo, porque ahí no cabe), pero no podemos quitarnos la limitación fuerte: el borde tiene el mismo color que el PAPER de las dos últimas líneas de pantalla (a menos que vayas alterando en la ROM todas las rutinas que hagan cosas con el borde o las dos últimas líneas de pantalla).
I have traveled across the universe and through the years to find Her. Sometimes going all the way is just a start.
Además vendo cosas!

Avatar de Usuario
Quest
Atari 1040 STf
Atari 1040 STf
Mensajes: 900
Registrado: 18 Jul 2013, 22:20
Sistema Favorito: Commodore Amiga
primer_sistema: Spectrum 16Kb/48Kb
consola_favorita: Nintendo SNES
Primera consola: Nintendo NES/Clónica
Gracias dadas: 9 veces
Gracias recibidas: 16 veces

Re: pequeña modificación de la rom de un 48k ¿cómo hacerlo?

Mensajepor Quest » 24 Ene 2015, 14:09

zup escribió:La primera parte del código sobra ya que, aunque el borde se quede del color elegido tras hacer un reset o un NEW, en cuanto pulsas una tecla el Spectrum lee los valores de BODRCR (que son los mismos atributos que utiliza en las dos últimas líneas de pantalla) y actualiza el borde a blanco.


Sí, ya me había dado cuenta. La primera prueba que hice fue sólo con la primera parte, pero al pulsar una tecla volvía a blanco, por lo que comentas. Sólo con cambiar el segundo valor parecía ser suficiente. Aun así he cambiado también el primero porque de no hacerlo, resetea a blanco antes de pulsación de tecla y queda feo. Cambiando ambos valores queda perfectamente estético.

Avatar de Usuario
zup
Amiga 2500
Amiga 2500
Mensajes: 3013
Registrado: 04 Sep 2009, 20:07
Sistema Favorito: Spectrum 16Kb/48Kb
primer_sistema: Spectrum 16Kb/48Kb
consola_favorita: Nintendo DS/3DS
Primera consola: Nintendo GameBoy
Ubicación: Navarra
Gracias dadas: 86 veces
Gracias recibidas: 360 veces
Contactar:

Re: pequeña modificación de la rom de un 48k ¿cómo hacerlo?

Mensajepor zup » 24 Ene 2015, 20:42

No había caído en que el borde que se define en la rutina de reset se queda ahí hasta entonces, pensaba que en algún momento se cambiaba otra vez.

Mirando el otro hilo del Spectrum "Michael Jackson", me he acordado de algo que me pasó con el Three Weeks In Paradise de 128k. El juego cargaba un bloque "extra grande" de 57k, empezando por la dirección 27392 y luego le hacía un checksum. Si el checksum no era correcto, pensaba que había un error de carga y reseteaba el equipo. ¿El problema? Que al hacer el checksum, leía toda la ROM y si el equipo no tenía la ROM de 48k idéntica a la suya (p.ej.: un +2 o un +3 con mensaje de copyright Amstrad) lo consideraba incorrecto.

En realidad el juego solo cargaba bien en un Spectrum 128k inglés.

¿Hubo algún juego más que no funcionara si tenías una ROM modificada? No me refiero a modificaciones tan bestias como la OpenSE (que es más bien una reescritura total), sino a que fallaran incluso si lo único que cambiara fuera algún byte como el color de fondo.
I have traveled across the universe and through the years to find Her. Sometimes going all the way is just a start.
Además vendo cosas!


Volver a “Sinclair/Spectrum”

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 5 invitados