Rom de "La maquina alucinante". La madre del cordero.
Publicado: Mar Mar 13, 2012 12:50 am
Estoy mirando como hacer que la ROM de la maquina alucinante sea mas compatible y con mas funcionalidades.
Y me he encontrado una cosa curiosa, el metodo de carga utilizado en la rutina LOAD, al copiarla desde la direccion original a su posicion final, para poder estudiarla, y hacer un codigo ensamblador, para poder estudiarla mejor, y haber estudiado hace poco la rutina de carga de microsphere he descubierto lo siguiente.
Apartir de la direccion #FA58 hace esactamente las mismas comprobaciones y hay esactamente el mismo codigo, ya en la direccion #FA92 empiezan las diferencias, que son mas bien pocas.
La diferencia estriva en los valores que ciertas variables toman, el tiempo para detectar un bit a 0 o a 1, y sincronismos varios, los valores son mas comedidos que en la rutina original.
El programa graba 7 secuencias:
-. Las 2 primeras el bloque en basic
-. Las 2 siguientes, cargan el programa turbo modificado
-. La siguiente carga es de 9216 bytes con carga "custom", con lo que carga la parte de la pantalla (con los registros para hacer recuperar el punto esacto en el que se quedo)
-. La siguiente es la carga "custom", esta omite los bytes que esten con el valor #00, la rutina "turbo", lee desde la zona de pantalla, los valores calculados con anterioridad, que estan en las direcciones de pantalla.
-. La ultima carga es a velocidad normal y esta aprobecha la rutina LOAD de la ROM original, para sobreescribir la zona de memoria en que se encuentra hubicada la rutina con un JP, al que anteriormente se ha hecho un PUSH HL con HL=#4000, en la que se encuentra la rutina que restaura todos los registros y estados de la CPU.
Ya tenemos un rompecabezas menos en la historia del Spectrum por resolver. El codigo de la rom de "La maquina alucinante" esta extraido de la rutina de carga "Microsphere" a la que se le ha extraido la rutina de proteccion que borra parte de la pila.
Las pulsaciones de 1 a 4, especifican la velocidad de grabacion en la cinta.
Al savar, crea un programa en BASIC con alguna proteccion una linea 0
LINE 0 LOAD "" CODE : RANDOMIZE VAL "64000"
Este codigo esta repetido 4 veces, en las que unicamente varia el valor de VAL, sumando 6 para especificar la velocidad, esto desperdicia bastate memoria, ya que se podia haber copiado a la zona de la pantalla, modificarla y grabarla, como se hace con la rutina de restauracion de registros que se copia en la direccion #4000.
La rutina para detectar que partes se salvan en cinta, se ejecuta antes de entrar en el menu. aunque luego no se realice un salvado, o cualquier otra variacion, por lo que relentiza algo el arranque inicial, pero uno no pulsa NMI y una tecla de manera simultanea
Y me he encontrado una cosa curiosa, el metodo de carga utilizado en la rutina LOAD, al copiarla desde la direccion original a su posicion final, para poder estudiarla, y hacer un codigo ensamblador, para poder estudiarla mejor, y haber estudiado hace poco la rutina de carga de microsphere he descubierto lo siguiente.
Apartir de la direccion #FA58 hace esactamente las mismas comprobaciones y hay esactamente el mismo codigo, ya en la direccion #FA92 empiezan las diferencias, que son mas bien pocas.
La diferencia estriva en los valores que ciertas variables toman, el tiempo para detectar un bit a 0 o a 1, y sincronismos varios, los valores son mas comedidos que en la rutina original.
El programa graba 7 secuencias:
-. Las 2 primeras el bloque en basic
-. Las 2 siguientes, cargan el programa turbo modificado
-. La siguiente carga es de 9216 bytes con carga "custom", con lo que carga la parte de la pantalla (con los registros para hacer recuperar el punto esacto en el que se quedo)
-. La siguiente es la carga "custom", esta omite los bytes que esten con el valor #00, la rutina "turbo", lee desde la zona de pantalla, los valores calculados con anterioridad, que estan en las direcciones de pantalla.
-. La ultima carga es a velocidad normal y esta aprobecha la rutina LOAD de la ROM original, para sobreescribir la zona de memoria en que se encuentra hubicada la rutina con un JP, al que anteriormente se ha hecho un PUSH HL con HL=#4000, en la que se encuentra la rutina que restaura todos los registros y estados de la CPU.
Ya tenemos un rompecabezas menos en la historia del Spectrum por resolver. El codigo de la rom de "La maquina alucinante" esta extraido de la rutina de carga "Microsphere" a la que se le ha extraido la rutina de proteccion que borra parte de la pila.
Las pulsaciones de 1 a 4, especifican la velocidad de grabacion en la cinta.
Al savar, crea un programa en BASIC con alguna proteccion una linea 0
LINE 0 LOAD "" CODE : RANDOMIZE VAL "64000"
Este codigo esta repetido 4 veces, en las que unicamente varia el valor de VAL, sumando 6 para especificar la velocidad, esto desperdicia bastate memoria, ya que se podia haber copiado a la zona de la pantalla, modificarla y grabarla, como se hace con la rutina de restauracion de registros que se copia en la direccion #4000.
La rutina para detectar que partes se salvan en cinta, se ejecuta antes de entrar en el menu. aunque luego no se realice un salvado, o cualquier otra variacion, por lo que relentiza algo el arranque inicial, pero uno no pulsa NMI y una tecla de manera simultanea