Re: Proyecto tontuno... conversor de snapshots a transfer
Publicado: Dom Abr 15, 2018 12:30 pm
Analizando un poco el transfer... a ver si he entendido bien las características principales.
- La rutina en sí solo ocupa 50 bytes.
- Todos los registros (salvo SP y R) se guardan en la pila del programa.
- De la posición SP+18 (siendo SP el valor que se recupera después de cargar el programa), se extrae AF. A se copia a I, pero del supuesto F solo interesa el bit 2 (copia de IFF2).
- La instrucción que establece IM va ubicada en 16386.
- R no se preserva, como tampoco el borde.
Si he entendido bien lo que posteaste, mantransfer era originalmente una utilidad enteramente por software; me pregunto cómo sería de compatible (muchos juegos machacaban toda la memoria al cargar). En caso de que quisieras mejorarla (para poner tu propio transfer en el ZesarUX, aunque teniendo la posibilidad de grabar snapshots es un poco redundante), tengo unas cuantas sugerencias:
- Aunque la rutina de carga solo ocupa 50 bytes (y no usas nada más de la pantalla), te reservas 200 bytes (cargas a partir de 16584). Supongo que podría ajustarse para que la corrupción en pantalla sea menor.
- El transfer usa 24 bytes de la pila en total. Si el tamaño de la pila iba algo justo, puedes sobreescribir partes del programa y hacer que falle. La mayoría de los transfer solo usan 2 bytes de la pila (la dirección de retorno) y meten su propia pila en la pantalla para evitar este problema.
- Si escondes los registros en pantalla, necesitarás un máximo de 80 bytes... de nuevo, se puede mejorar el tema de la corrupción en pantalla.
- No sé hasta cuántos juegos necesitan preservar R... aunque he visto unas cuantas rutinas decodificadoras para las que es imprescindible. En caso de que decidas complicarte la vida y preservarlo, hay que tocar ese JP PO (ya que R avanzará más o menos dependiendo de si se salta o no).
- Si IM x va cargada a martillazos (en una posición fija), lo mismo te quitar el call y meter directamente la instrucción ahí.
La rutina que usas es muy cortita... creo que incluso se podría parchear una ROM de 48k y ponerla como rutina de NMI (al estilo de La Máquina Alucinante). Así tendrías tu propio transfer integrado en un Spectrum real o emulado.
- La rutina en sí solo ocupa 50 bytes.
- Todos los registros (salvo SP y R) se guardan en la pila del programa.
- De la posición SP+18 (siendo SP el valor que se recupera después de cargar el programa), se extrae AF. A se copia a I, pero del supuesto F solo interesa el bit 2 (copia de IFF2).
- La instrucción que establece IM va ubicada en 16386.
- R no se preserva, como tampoco el borde.
Si he entendido bien lo que posteaste, mantransfer era originalmente una utilidad enteramente por software; me pregunto cómo sería de compatible (muchos juegos machacaban toda la memoria al cargar). En caso de que quisieras mejorarla (para poner tu propio transfer en el ZesarUX, aunque teniendo la posibilidad de grabar snapshots es un poco redundante), tengo unas cuantas sugerencias:
- Aunque la rutina de carga solo ocupa 50 bytes (y no usas nada más de la pantalla), te reservas 200 bytes (cargas a partir de 16584). Supongo que podría ajustarse para que la corrupción en pantalla sea menor.
- El transfer usa 24 bytes de la pila en total. Si el tamaño de la pila iba algo justo, puedes sobreescribir partes del programa y hacer que falle. La mayoría de los transfer solo usan 2 bytes de la pila (la dirección de retorno) y meten su propia pila en la pantalla para evitar este problema.
- Si escondes los registros en pantalla, necesitarás un máximo de 80 bytes... de nuevo, se puede mejorar el tema de la corrupción en pantalla.
- No sé hasta cuántos juegos necesitan preservar R... aunque he visto unas cuantas rutinas decodificadoras para las que es imprescindible. En caso de que decidas complicarte la vida y preservarlo, hay que tocar ese JP PO (ya que R avanzará más o menos dependiendo de si se salta o no).
- Si IM x va cargada a martillazos (en una posición fija), lo mismo te quitar el call y meter directamente la instrucción ahí.
La rutina que usas es muy cortita... creo que incluso se podría parchear una ROM de 48k y ponerla como rutina de NMI (al estilo de La Máquina Alucinante). Así tendrías tu propio transfer integrado en un Spectrum real o emulado.