Tarjeta SD autoarrancable en ZX-Uno

Software para o relacionado con el core ZX Spectrum / Software for or related to the ZX Spectrum core
Responder
Avatar de Usuario
Uto
Mensajes: 1394
Registrado: 17 Dic 2015, 16:39

Tarjeta SD autoarrancable en ZX-Uno

Mensaje por Uto » 17 Oct 2020, 20:41

Vengo aquí a contar que ya es posible, y encima sin actualizar ZX-Unos ni nada. Me explico:

Partiendo del germen de un cambio que hizo Mcleod en el RTC.SYS, Antonio Villena pensó que el RTC.SYS podría ser utilizado como lanzador de juegos. Sin embargo el RTC.SYS no es ejecutado por versiones un poco antiguas de ESXDOS. Andrew Owen sugirió que el ESXDOS.SYS tiene un punto de entrada donde se pulsa la NMI, y que ahí podríamos poner el lanzador. Finalmente, yo mismo haciendo pruebas, descubrí que el betadisk.sys sí que lo ejecutan todas las versiones de ESXDOS, al menos las últimas.

Así en el ZIP adjunto, hay 4 ficheros, uno de los cuales un es un fuente que no hace falta si no queréis cambiar cosas, pero los otros tres, los sueltas en una tarjeta vacia y te arranca el ZX-Uno directamente con el Manic Miner :D

En el siguiente post pongo detalles de como manejarlo, por si queréis hacer un juego para ZX-Uno (o para Spectrum con ESXDOS) y que se autoarranque.
Adjuntos
ZX-Uno-ManicMiner-Autoboot.zip
(13.17 KiB) Descargado 161 veces
Última edición por Uto el 18 Oct 2020, 00:34, editado 1 vez en total.

Avatar de Usuario
Uto
Mensajes: 1394
Registrado: 17 Dic 2015, 16:39

Re: Tarjeta SD autoarrancable en ZX-Uno

Mensaje por Uto » 17 Oct 2020, 20:47

Detalles técnicos:

Si poneis el contenido de la carpeta SYS en una tarjeta SD, al arrancar el ordenador con DivMMC va a intentar cargar un fichero llamado AUTOEXEC.BIN desde el raiz de la tarjeta. Dicho fichero lo cargará en 32768, y luego ejecutará el código en 32768. El fichero solo puede tener 32K claro, porque no hay mas sitio. Antes de cargarlo pone la pila en 32767.

Así, si poneis cualquier AUTOEXEC.BIN que cumpla con eso y funcione, tendréis el juego funcionando.

Si no os gusta que cargue en 32768, o queréis la pila en otro sitio, o lo que sea, ahí tenéis el fichero ASM que venia en el zip del post anterior. Compilandolos con SJASM genera los ficheros ESXDOS.SYS y BETADISK.SYS que hay en la carpeta SYS. Es el BETADISK.SYS el que hace el trabajo, y está profusamente comentado así que espero que sea bastante claro.

Podéis cambiar el nombre del fichero a ejecutar, la direccion donde se carga, el tamaño, y la direccion de entrada. La pila se coloca justo debajo de la direccion de carga, pero si queréis otra, pues la cambiáis también.

Por último, si desde el loader de BETADISK.SYS usáis llamadas ESXDOS tened en cuenta que es como un dot command, por lo que teneis que llamar usando HL para algunos parámetros. Sin embargo, en vuestro fichero AUTOEXEC.BIN ya no lo es, por lo que se usa IX.

Avatar de Usuario
Uto
Mensajes: 1394
Registrado: 17 Dic 2015, 16:39

Re: Tarjeta SD autoarrancable en ZX-Uno

Mensaje por Uto » 18 Oct 2020, 00:37

Update: parece que había un problema con los últimos ESXDOS, he actualizado el fichero del primer post com un fichero que ha hecho Antonio.

Por dejarlo aquí documentado técnicamente: parece que el ESXDOS en sus últimas versiones llama a alguna función que está en el ESXDOS.SYS, sospechamos que a una tal M_AUTOLOAD que estará relacionada con el AUTOXEC.BAS. Como no cargamos el ESXDOS.SYS real fallaba al llamarla. Hemos hecho un fichero lleno de C9, o sea de RETs, de modo que si se llama a esas funciones, retorna.

Responder