Información sobre el ZXPAND del ZX81

Dudas, cuestiones, sugerencias y peticiones en general sobre el proyecto / Questions and requests about the project
Avatar de Usuario
jepalza
Mensajes: 613
Registrado: 02 Oct 2015, 18:52

Información sobre el ZXPAND del ZX81

Mensaje por jepalza » 08 Mar 2017, 20:01

¿sabe alguien cómo funciona este dispositivo? (hablo del lector de SD para ZX81 llamado ZXPAND). ¿chernandezba?

He visto en el emulador ZEsarUX como actúa, mirando los fuentes, pero la forma en la que entrega los ficheros FAT32 no es como lo haría el ZXPAND real (cosa lógica).

A mi modo de entender, en el ZEsarUX tenemos un módulo que se encarga de leer los ficheros, y enviarlos al ZX81. Pero en un ZX81 real, el que se encarga es un programa residente en el PIC que lleva la tarjeta expansora.

Para poder implementar cualquiera de los dos métodos (el del ZEsarUX o del PIC del ZXPAND) se necesita crear algo parecido en la FPGA, pero lógicamente, en VHDL o verilog, y eso es muy complejo y gasta muchos recursos. Hay algo parecido a lo que busco en el FPGamstrad del MIST, pero separando todo lo necesario para leer FAT32, ocupa el 35% de los recursos de la FPGA, y eso es mucho para el espacio del que disponemos.

Lo normal sería una ROM al estilo de la del ZXPAND modificada, pero que lleve dentro el código en Z80 encargado de leer desde FAT32. Ejemplos para esto son el DIVIDE del Spectrum, o la ROM del SMS del core de Quest. Son ROMS que arrancar antes que la principal, te muestran un menu, eliges fichero, lo copian a la RAM, y seguido dan el control a la ROM principal.

Para el ZX81 no he encontrado nada de este estilo. La del ZXPAND, si la ejecuto en lugar de la original, no hace nada, salen "@" a punta pala en pantalla y se queda esperando (a falta de hard que le entregue lo que espera)

Avatar de Usuario
chernandezba
Mensajes: 832
Registrado: 02 Oct 2015, 23:35

Re: Información sobre el ZXPAND del ZX81

Mensaje por chernandezba » 08 Mar 2017, 22:48

Hola
Me gusta hablar del zxpand.... antes que nada decir que pude emularlo gracias primero a Jim Bagley, que para aquel entonces había hecho la versión del dragons lair para zxpand, y fue él quien me puso en contacto con Charlie Robson, el autor del zxpand, que muy amablemente me ofreció todo tipo de información detallada del dispositivo... Antes de tener información técnica de mano de Charlie, estuve haciendo bastante ingeniería inversa del zxpand, gracias a que podía analizar la rom modificada del zx81 que se usa para el zxpand. Y al cabo de un tiempo, pude completar con información fiable de Charlie.
De manera simple se compone de:
-Un PIC, que gestiona el acceso a la SD a bajo nivel. Es el encargado de gestionar todos los accesos y gestionar el sistema de archivos FAT. Si buscáis fotos del zxpand, en el chip se ve el modelo de PIC. Aviso que yo no entiendo mucho de PICs pero creo que es cómo una cpu al fin y al cabo. Charlie me llegó a pasar partes del código fuente del firmware del PIC que se encarga de gestionar los accesos que le vienen del zx81
-Una rom del zx81 modificada. Es la misma rom del zx81 pero eliminando algunos comandos (creo recordar que el copy, el llist y similares) y los reemplaza por comandos del zxpand: CAT, CONFIG , y alguno más que no recuerdo. Esa rom viene incluida en el zxpand y se solapa por encima de la del zx81, de tal manera que al activar el zxpand, la rom del zx81 queda inhabilitada y se ve la que tiene modificada en el zxpand
La comunicación entre la rom modificada del zx81 y el pic es mediante un puerto típico IN/OUT, al que se le envían sentencias de comandos de acceso a archivos a "alto nivel", es decir, se le dice algo así como: abre el archivo "mazogs.p" en tal dirección de memoria. Todo mediante out: un valor enviado al puerto le indica el comando de apertura de archivo, luego viene una serie de valores con los caracteres del nombre del archivo a abrir (no en ascii, sino en la codificación de caracteres del zx81) , luego dos valores indicando la direccion de la carga de archivos, etc
Hay otros comandos para escribir archivo, para cambiar el directorio, para activar la RAM adicional y/o los modos hi-res del Zxpand, etc

O sea, al final la rom modificada del zx81 lleva los mínimos cambios para operar con el PIC, que es este último el que hace la mayoría de trabajo.
Por lo que recuerdo, el firmware del PIC se puede descargar libremente. Luego lógicamente si no se tiene ese pic no sirve de mucho, pues es un binario compilado para dicho chip.
Mi parte en ZEsarUX es simular ese PIC: recibo los comandos que llegan por el puerto y abro archivos, borro, grabo, etc.

Decir como curiosidad que Jim Bagley solicitó un modo "acelerado" de lectura de datos de la SD a Charlie, de tal manera que los vídeos del dragons lair se muestran con mucha fluidez. Dicho modo acelerado está soportado en zxpand real, en ZEsarUX también, pero en EightyOne, que es el otro emulador que soporta zxpand, no soporta dicho modo. Por eso si alguien se compra el dragons lair verá que ofrece dos binarios: uno no acelerado, para cualquier dispositivo o emulador, y otro que necesita el dispositivo real o ZEsarUX (pero no va en EightyOne). Yo mismo me lo compré, aunque no tengo zxpand, pero en ZEsarUX va de coña :)

Bueno creo que con esta parrafada me callo ya. Si tienes más dudas me puedes consultar

Saludos
----

ZEsarUX
ZX Second-Emulator And Released for UniX
https://github.com/chernandezba/zesarux

Avatar de Usuario
chernandezba
Mensajes: 832
Registrado: 02 Oct 2015, 23:35

Re: Información sobre el ZXPAND del ZX81

Mensaje por chernandezba » 08 Mar 2017, 23:03

Ah aquí

http://www.rwapsoftware.co.uk/DOC/ZXpand%20Manual.pdf

Tienes la documentación oficial del zxpand. Es bastante simple, sobretodo la parte de programación es muy escueta y deja mucho a la imaginación... Pero me sirvió de base cuando empecé haciendo ingeniería inversa
----

ZEsarUX
ZX Second-Emulator And Released for UniX
https://github.com/chernandezba/zesarux

Avatar de Usuario
jepalza
Mensajes: 613
Registrado: 02 Oct 2015, 18:52

Re: Información sobre el ZXPAND del ZX81

Mensaje por jepalza » 09 Mar 2017, 06:18

Me confirmas lo que imaginaba, que es el pic quien gobierna los accesos fat. Es es malo, MUY malo. Tú lo has visto, has necesitado crear tu propio sistema de archivos fat para enviar órdenes a la rom modificada, igual que lo hace el código del pic (por cierto, los pic son microcontroladores, lo mas parecido a una CPU con todo incluído: rom,ram,cpu,i/o, etc como los que se usaban en la época del canal satélite pirata).
Lo malo de ese método del PIC es que no se puede emular ni implementar en el core del ZX81, lo que significa que se ha de crear uno especial o bien, una rom cargador especial. Ambos métodos son complejos, lentos y fuera de mi alcance y tiempo. (no es que no pueda, es que no tengo tiempo).
Intentaré meter el módulo fat32 del cpc a ver si entra todo junto.

Avatar de Usuario
chernandezba
Mensajes: 832
Registrado: 02 Oct 2015, 23:35

Re: Información sobre el ZXPAND del ZX81

Mensaje por chernandezba » 09 Mar 2017, 08:56

Bueno yo no diría para nada que sea malo, para mi es un cacharrito fantástico, poder cargar juegos desde una SD en un ZX-81 es una gozada. Pero bueno cada uno tiene sus gustos ;)
Yo no he generado mi sistema de archivos fat ni nada por el estilo. Si te fijas, en la emulación del divmmc/divide, ZEsarUX te pide la ruta a un archivo de imagen de una tarjeta SD o de un IDE, y luego es el propio firmware ESXDOS quien gestiona toda la lógica de acceso al sistema fat. En cambio, en zxpand, no pido una ruta a una imagen, sino una ruta a una carpeta raíz de tu filesystem de tu pc. Luego todas las operaciones de acceso a archivos que me llegan desde la rom del zxpand las traslado a simples comandos de "abre archivo", "borra archivo" , etc del filesystem local de mi pc.
ZEsarUX viene con algunos programas de ejemplo de zxpand en la ruta media/zx81/zxpand: un gestor de archivos para zxpand y un reproductor de archivos tipo "tracker" para el chip AY. Puedes configurar esa ruta como el "root" del zxpand en ZEsarUX para testearlo.

-Edito:
Es mas, rompo una lanza en favor de zxpand, pues su autor no tuvo ningún problema en pasarme partes de su código fuente para que lo pudiese emular. Intentad en cambio hacer un acercamiento al autor de la interfaz SD Trinity para Sam Coupé y verás que pasa... :llamarada:

Saludos
César
----

ZEsarUX
ZX Second-Emulator And Released for UniX
https://github.com/chernandezba/zesarux

alberchi
Mensajes: 40
Registrado: 14 Sep 2016, 09:48

Re: Información sobre el ZXPAND del ZX81

Mensaje por alberchi » 09 Mar 2017, 09:48

Hace poco ha salido otra interfaz para zx81: el zxblast. Por si queréis echar un vistazo. No se si será más facil o más dificil de implementar.

skywalky
Mensajes: 95
Registrado: 23 Mar 2016, 19:16

Re: Información sobre el ZXPAND del ZX81

Mensaje por skywalky » 09 Mar 2017, 17:53

Creo que jepalza dice que lo que es malo es su funcionamiento puesto que es muy dificil implementarlo en la FPGA. El cacharrito seguro que está muy bien.

Avatar de Usuario
jepalza
Mensajes: 613
Registrado: 02 Oct 2015, 18:52

Re: Información sobre el ZXPAND del ZX81

Mensaje por jepalza » 09 Mar 2017, 20:19

chernandezba escribió:Bueno yo no diría para nada que sea malo, para mi es un cacharrito fantástico, poder cargar juegos desde una SD en un ZX-81 es una gozada. Pero bueno cada uno tiene sus gustos ;)
skywalky escribió:Creo que jepalza dice que lo que es malo es su funcionamiento puesto que es muy dificil implementarlo en la FPGA. El cacharrito seguro que está muy bien.
Exacto, cuesta decir las cosas sin que se mal-interpreten. Me refiero, como bien dice skywalky, a que lo malo de usar un PIC es que no es "sintetizable", no es un código que se pueda meter en la FPGA. Si sería como el DIVIDE, que es una ROM tal cual, con su propio sistema, sería coser y cantar, solo sería meter el contenido de esa ROM, y hacer que el Z80 de la FPGA lo lea.... (vamos, para que me enrollo, si el ZXUNO lo lleva dentro, no hay nada que contar que no se sepa ya).
alberchi escribió:Hace poco ha salido otra interfaz para zx81: el zxblast. Por si queréis echar un vistazo. No se si será más facil o más dificil de implementar.
No se puede usar, por que no es para SD, sino para USB, y no tenemos USB en el ZXUNO. Y si no me equivoco, aparte de la ROM lleva una FPGA. Y no he visto el contenido de forma libre. Su página web, que ya la he mirado, no ofrece nada por libre, es un sistema cerrado. Si tuviera el contenido tanto de la rom como de la fpga, se podría hacer una prueba.

Avatar de Usuario
carmeloco
Mensajes: 749
Registrado: 25 Dic 2015, 12:02

Re: Información sobre el ZXPAND del ZX81

Mensaje por carmeloco » 09 Mar 2017, 20:40

Un PIC es un micro-controlador. ¿No hay nada hecho para FPGA como el código del Z-80?

Avatar de Usuario
jepalza
Mensajes: 613
Registrado: 02 Oct 2015, 18:52

Re: Información sobre el ZXPAND del ZX81

Mensaje por jepalza » 09 Mar 2017, 22:15

Eso es lo que pregunto, sino hay nada ya hecho. Pero parece que no. Del ZX81 solo hay dos proyectos de lectura "no-cinta", que son el ZXBLAST, que usa un conector USB (llaves usb), y el ZXPAND que usa SD, pero emplea un PIC. Ni uno ni otro son válidos para llevarlos a la fpga directamente. Y códigos que entiendan la FAT32 de una SD hay pocos, yo solo conozco el del CPC del proyecto FPAMSTRAD y es tan grande que se come casi un tercio de la FPGA para poder leer un archivo, no es nada práctico para nuestra LX9.
El MIST por ejemplo, para esas labores emplea un ARM STM32 externo, que muestra un menu superpuesto al inicio, y permite elegir opciones y ficheros antes de arrancar el core, pero en el ZXUNO no tenemos nada de eso.
Una solución sería hacer una ROM extra para el ZX81 que lea de la SD, pero no es una tarea sencilla ni de un día, llevaría mucho tiempo.

Y el código del PIC no sirve para nada, estará en código máquina del PIC, y para que la FPGA lo ejecute habría que hacer un core con un PIC, algo inviable y costoso.

Hay una solución a la que no quisiera llegar, y es la de formatear la SD a un formato propio no-fat y usar la SD como si fueran un montón de casillas, y en cada casilla meter un juego, y luego desde un "bootloader" acceder a cada sección de la SD, de forma conocida. Por ejemplo, dividirla en 1000 espacios de 32k cada espacio, de modo que el primero sería de 0 a 32767, el segundo de 32768 a 65536, etc. Así no estás supeditado al formato FAT, y es mas sencillo crear un core pequeño. Pero eso implica dejar inutilizada la SD para su acceso desde un PC, y tener que hacer una utilidad en el PC que sepa reconocer nuestra SD especial. Un ejemplo de este sistema lo tenemos en el core del XT, que emplea el último sector de la SD para meter la rom, y el primero para meter un HD.

Responder