Skip to content

Latest commit

 

History

History
415 lines (367 loc) · 28.8 KB

readmeSpanish.md

File metadata and controls

415 lines (367 loc) · 28.8 KB

Tiny ESP32 ZX Spectrum

Fork (Octubre 2020) del emulador de David Crespo con el soporte de mando de WII Wiimote, basado a su vez, en el emulador de Ramon Martinez y Jorge Fuertes ZX-ESPectrum, con dependencias del autor Pete Todd.

He realizado varias modificaciones:
  • No se usa PSRAM, funcionando en ESP32 de 520 KB de RAM (TTGO VGA32 v1.x)
  • Soporta los modos 128K,+2,+3 y +3e sin falta de PSRAM
  • Eliminado el soporte de mando WII
  • Sustitución del OSD por uno de bajos recursos
  • Creado proyecto compatible con Arduino IDE y Platform IO
  • Proyecto compatible con Web Editor y ArduinoDroid (6.3.1) con tool makeandroid.bat
  • Eliminado el soporte de SPIFFS
  • Recolocación de ROMs, SNA, .SCR, .TAP en Flash progmem
  • Optimización de tamaño en FLASH
  • Optimización de la rutina de video (2200 microsegundos por frame)
  • Soporte para modo con (50 fps 20000 microsegundos) y sin hilos (50 fps 17000 microsegundos)
  • Emulación de ratón Kempston (librería reducida de Rob Kent jazzycamel)
  • Emulación Kempston con teclas cursores (izquierda, derecha, arriba, abajo) y ALT derecho.
  • Emulación de AY8912 con fabgl, versión reducida de dcrespo3d (David Crespo Tascón)
  • Redirección de los pulsos de grabación de cinta al altavoz
  • Opción de resampleo en modo speaker y mezcla con AY8912 (inestable)
  • Posibilidad de elegir modo brillo y modos de 8 colores en compilación.
  • DAC VGA 64 colores (6 bits) y 8 colores (3 bits) (versión reducida de Ricardo Massaro)
  • Remapeo de los cursores en el menú de +2,+3, así como la tecla de borrar
  • Ajuste de pantalla X, Y (consume un poco de CPU)
  • Escala de colores R, G, B, al estilo de las pantallas de fósforo verde
  • Menú de velocidad de video de emulación
  • Menú de velocidad de emulación AUTO (50 fps 20000 microsegundos) así como un delay en microsegundos o sin freno, de 150 fps a 396 fps en el core de Lin Ke-Fong o desde los 95 fps a los 225 fps en el core de José Luis Sánchez.
  • Soporte para leer archivos SCR
  • Soporte para cargar archivos screen dentro de ficheros .TAP
  • Carga de BASIC desde .TAP (intercepción de rutina de cinta). Sólo en el core de Lin Ke-Fong
  • Soporte de core Lin Ke-Fong y de José Luis Sánchez
  • Creado port de Windows bajo SDL (no disponible para descargar)
  • Modos de video 360x200, 320x240, 320x200
  • Soporte de SNA de 128K
  • Soporte carga SCR y SNA por WIFI
  • Versión precompilada (flash download 3.9.2) 320x200 core LKF,JLS y soporte AY8912
  • Opción de eliminar el cálculo de redondeo IEEE (double) de la VGA, para evitar problemas de precisión. Encontrada esta anomalía a partir del fallo encontrado por David Crespo Tascón al no sacar video.
  • Añadidos 2 modos de video 320x200 70Hz y 320x240 con los datos de fabgl
  • Añadido soporte de teclado desde terminal serie usb, monitor VStudio o putty.
  • Añadido soporte de lectura SNA (sólo de 48K) y SCR desde terminal serie usb, monitor VStudio o putty.



Versión precompilada

En la carpeta precompile se encuentran 4 versiones ya compiladas para poder ser grabadas con el flash download tool 3.9.2. Se trata de las permutaciones de 2 cores (LKF y JLS) y sonido AY8912 con resolución 320x200 con los juegos de demostración en FLASH. También se ha añadido la opción de 320x200 sin cálculo IEEE, así como un modo de video de 320x200 70 Hz con los parámetros de fabgl.

https://github.com/rpsubc8/ESP32TinyZXSpectrum/tree/main/esp32/precompile

Debemos de elegir el tipo ESP32:

Posteriormente, seleccionaremos los archivos tal y como la captura adjunta, con los mismos valores de offset, que serán diferentes según las 4 opciones:

Y le daremos a start. Si todo ha sido correcto, sólo tendremos que reiniciar el ESP32.



Requerimientos

Se requiere:
  • TTGO VGA32 v1.x (1.0, 1.1, 1.2, 1.4)
  • Visual Studio 1.66.1 PLATFORMIO 2.4.3 Espressif32 v3.5.0 (python 3.6)
  • Arduino IDE 1.8.11 Espressif System 1.0.6
  • ArduinoDroid (6.3.1)
  • Librería reducida Arduino fabgl 0.9.0 (incluida en proyecto PLATFORMIO)
  • Librería reducida Arduino bitluni 0.3.3 (incluida en proyecto)





ArduinoDroid

Se debe ejecutar, sólo una vez, el script makeandroid.bat, que nos deja toda la estructura de datos del directorio dataFlash en el directorio raiz, así como reemplazando las archivos principales con llamadas de los .h sin usar el directorio de datos dataFlash.
Al finalizar, el propio script, termina borrando el directorio dataFlash.
El script utiliza el fart.exe (find and replace text).
Una vez, se haya ejecutado con éxito, se puede usar con el ArduinoDroid.



Arduino Web Editor

Se debe ejecutar, sólo una vez, el script makeandroid.bat. Una vez finalizado, se sube a la nube como un proyecto cualquiera, ya sea comprimido en zip o por archivos.

PlatformIO

Se debe instalar el PLATFORMIO 2.4.3 desde las extensiones del Visual Studio. Se requiere también Espressif32 v3.5.0 (python 3.6).

Luego se seleccionará el directorio de trabajo TinyZXESPectrumttgovga32. Debemos modificar el fichero platformio.ini la opción upload_port para seleccionar el puerto COM donde tenemos nuestra placa TTGO VGA32.

Luego procederemos a compilar y subir a la placa. No se usa particiones, así que debemos subir todo el binario compilado. Está todo preparado para no tener que instalar las librerias de bitluni ni fabgl.



Arduino IDE

Todo el proyecto es compatible con la estructura de Arduino 1.8.11. Tan sólo tenemos que abrir el ZXESPectrum.ino del directorio ZXESPectrum.

Debemos instalar las extensiones de spressif en el gestor de urls adicionales de tarjetas https://dl.espressif.com/dl/package_esp32_index.json Ya está preparado el proyecto, de forma que no se necesita ninguna librería de bitluni ni fabgl. Debemos desactivar la opción de PSRAM, y en caso de superar 1 MB de binario, seleccionar 4 MB de partición a la hora de subir. Aunque el código no use PSRAM, si la opción está activa y nuestro ESP32 no dispone de ella, se generará una excepción y reinicio del mismo en modo bucle.



Usabilidad

Se permite cargar:
  • ROMS de 48K y 128K
  • SNA de 48K
  • Leer pantallas de ficheros .SCR. El fichero .SCR convertido a hexadecimal, contiene una imagen, la cual se vuelca en la zona de memoria de video. Los ficheros .SCR son muy fáciles de conseguir, si usamos el emulador fuse.
  • Leer pantallas de cintas .TAP. Debemos tener un fichero .TAP convertido en hexadecimal con el formato básico de cargador BASIC, seguido de un bloque de datos de SCREEN. La rutina que he realizado es muy básica, y se encarga de buscar el bloque de pantalla, y volcarlo a memoria de video
  • Seleccionar TAP permite elegir el .TAP y situarse en el bloque 0, para poder leer el BASIC de una cinta. De esta forma, si seleccionamos el Tape loader desde el menú del 128K,o si escribimos el comando load "" desde el BASIC, se procederá a cargar el código de BASIC. Debemos tener un fichero .TAP convertido en hexadecimal con el formato básico de cargador y código BASIC. Sólo está activo para el core de Lin Ke-Fong, y sólo carga el primer bloque de un programa BASIC. Si ese programa BASIC termina lanzando un RUN o un LOAD, no llegará a procesar esa nueva carga de datos, provocando un reinicio o algo aleatorio.
Se dispone de un OSD básico de bajos recursos, es decir, muy simple, que se visualiza pulsando la tecla F1.

Los ficheros deben ser convertidos a .h en hexadecimal. Puede usarse la herramienta online:
http://tomeko.net/online_tools/file_to_hex.php?lang=en



Teclado UART

Se se activa la opción use_lib_keyboard_uart, se permite usar el teclado del PC desde el monitor VStudio o desde el putty (115200 bauds), de manera simple, dado que no es mediante lectura SCANCODE down, up:
  • Tecla TAB o tecla F2: Muestra OSD
  • SHIFT+2 ("): Envia CONTROL + P al ZX48K
  • BackSpace (borrar): Envia SHIFT + 0 al ZX48K
  • ENTER: Envía ENTER en el ZX48K
  • +: Envia ALT_GR
  • -: Envia SHIFT LEFT
  • *: Envia CONTROL
  • Arriba: SHIFT + 7 y Kempston Arriba
  • Abajo: SHIFT + 6 y Kempston Abajo
  • Derecha: Kempston derecha
  • Izquierda: Kempston izquierda
  • A..Z, a..z: a..z
Podemos realizar combinaciones de teclas exactamente al mismo tiempo, como por ejemplo * y P, de manera que sería como pulsar el CONTROL y P del zx48K, lo que equivale a que muestre ". Desde el Arduino IDE, no se permite dicha funcionalidad, dado que el monitor serie requiere el envio del ENTER por cada acción.



SNA y SCR UART

Si se activa la opción use_lib_scr_uart se permitirá leer archivos SCR (6912 bytes) de pantalla por el terminal. Así mismo si se activa la opción use_lib_sna_uart, se permitirá leer snapshots de 48K (49179 bytes), por ahora.
Al tener activa está opción, en el menú del OSD cuando queramos cargar un SCR o un SNA nos preguntará si queremos de UART o de Flash. Al elegir UART, nos aparecerá un mensaje en pantalla de esperando por datos de la UART, que si supera un timeout determinado, dejará de leer. En el momento que le enviemos los datos, empezará a mostrar los bytes cargados.
La forma de enviar los datos, es mediante conversión del archivo binario a formato hexadecimal ASCII, sin 0x, ni comas ni caracteres raros. Un ejemplo para un SCR válido sería:
0000000000003000000038070000E001
C1C03800070E0E0E0E00383800E0E387

02020202020202020202020202020202 02020202020202020202020202020202

Como se puede ver, un byte, contiene 2 nibbles hexadecimales, por ejemplo el valor de un byte 193, sería el C1.
Lo normal es componer cada línea con 16 bytes, es decir, 32 nibbles. Cada línea contendrá un retorno de carro. Esta conversión se puede realizar de manera cómoda con la utilidad:

https://tomeko.net/online_tools/file_to_hex.php?lang=en

Debemos desmarcar la opción de incluir 0x y separador de comas, y podemos dejar la opción de incluir nuevas líneas.

Un SCR (6912) en este formato ocuparía unos 14688 bytes, que se pueden copiar y pegar en el terminal. Un SNA de 48K (49179 bytes) en este formato suele ocupar 104504 bytes.
Si usamos putty, debemos elegir la conexión Serie con 115200 baudios:

Y una vez veamos que todo va bien, es copiar y pegar los datos.



Opciones

El archivo gbConfig.h se seleccionan las opciones:
  • use_lib_mouse_kempston: Se usa un ratón conectado al puerto PS/2 emulando el protocolo kempston. Se utiliza la libreria reducida de Rob Kent. Al usar un modo sin interrupciones, se consume CPU en cada iteración, reduciendo frames de emulación.
  • define use_lib_mouse_kempston Si está activa, permite elegir por defecto el ratón en modo zurdo. En cualquier momento, desde el OSD,se puede también cambiar, así como elegir la inversión de la X e Y, y la velocidad de incremento.
  • gb_delay_init_ms: Permite especificar los milisegundos de espera por la inicialización del ratón.
  • gb_ms_mouse: Permite especificar los milisegundos de polling del ratón.
  • use_lib_sound_ay8912: Se utiliza un mezclador de 3 canales en modo dirty, emulando el AY8912. El speaker utiliza el canal 1 en modo digital, salvo que se active la opción de resampleo. Se requiere la librería fabgl reducida, que ya se encuentra dentro del proyecto
  • use_lib_resample_speaker: La salida del speaker se emula como onda senoidal en el canal 1. Está aún en un estado muy experimental.
  • use_lib_redirect_tapes_speaker: Redirige la salida de tonos de la cinta al altavoz.
  • use_lib_vga8colors: Obliga a usar RGB, sólo 3 pines y sin modo de brillo, 8 colores
  • use_lib_vga64colors: Obliga a usar RRGGBB, 6 pines, sin modo de brillo, es decir con 8 colores
  • use_lib_use_bright: Obliga a usar RRGGBB, 6 pines, con modo brillo, 16 colores
  • use_lib_vga_thread: Utiliza la salida de video en un hilo. Si está comentada, se usará un sólo núcleo.
  • use_lib_screen_offset: Permite mover a la izquierda y arriba la pantalla. Consume un poco de CPU, un par de microsegundos. Si está activo, se puede ajustar desde el OSD. Lo ideal, es no tenerlo activo y hacer los ajustes desde el monitor.
  • use_lib_skip_frame: Permite saltarse frames al emular
  • use_lib_vga360x200x70hz_bitluni: Modo de video normal con los parámetros de bitluni.
  • use_lib_vga320x200x70hz_bitluni: Modo de vídeo 320x200 con los parámetros de bitluni.
  • use_lib_vga320x240x60hz_bitluni: Modo 320x240 con los parámetros de bitluni.
  • use_lib_vga320x200x70hz_fabgl: Modo 320x200 con los parámetros de fabgl.
  • use_lib_vga320x240x60hz_fabgl: Modo 320x240 con los parámetros de fabgl.
  • use_lib_log_serial: Se envian logs por puerto serie usb
  • gb_ms_keyboard: Se debe especificar el número de milisegundos de polling para el teclado.
  • gb_ms_sound: Se debe especificar el número de milisegundos de polling para el sonido AY8912.
  • gb_frame_crt_skip: El número de frames de video que deben saltarse.
  • gb_delay_emulate_ms: Milisegundos de espera por cada frame completado.
  • use_lib_tape_rom_intercept: Controla la rutina 0x056B de leer cintas. Sólo está activo para el core de Lin Ke-Fong, y sólo carga el primer bloque de un programa BASIC. Consume unos ciclos de CPU, al estar chequeando el registro PC.
  • use_lib_ultrafast_speaker: Modo rápido de activación de pin E/S audio.
  • use_lib_stats_time_unified: Permite ver trazas por el puerto serie con los fps, así como microsegundos actuales, mínimos y máximos por frame. Lo mismo para el video.
  • use_lib_delay_tick_cpu_auto: Si vale 1, permite autoajustar la velocidad del frame a 20000 microsegundos, es decir 20 milisegundos, que equivale a 50 fps. Posteriormente desde el OSD se puede cambiar la velocidad de espera de la CPU.
  • use_lib_delay_tick_cpu_micros: Si es 0, no se aplica espera en cada ejecución de intrucción.
  • use_lib_cpu_adjust_mask_instructions: Aplica una mascara de reajuste de tiempo para los 20000 microsegundos de cada frame. Si la mascara es 0x03, se aplica la máscara binaria 00000011, es decir, cada 4 intrucciones.
  • use_lib_core_linkefong: Permite elegir el core de Lin Ke-Fong. Una vez compilado, aparecerá indicado en el OSD.
  • use_lib_core_jsanchezv: Permite elegir el core de José Luis Sánchez. Una vez compilado, aparecerá indicado en el OSD.
  • use_lib_delayContention: Si está activo, permite aplicar la espera de la memoria contenida, sólo en el core de José Luis Sánchez.
  • use_lib_wifi: Soporte de modo WIFI para cargar SCR's y SNA's. (sólo modo 48K)
  • use_lib_only_48k: Sólo soporta el modo 48K, rom0, ram0, ram2 y ram5
  • use_lib_fix_double_precision: No usa el cálculo de frecuencia de video VGA con el propio ESP32, evitando posibles problemas de precisión con la mantisa. Es útil para ESP32's que calculen mal la frecuencia.
  • use_lib_keyboard_uart: Permite usar el teclado del PC desde el PC por terminal monitor VStudio o desde el putty, sin falta de tener teclado. Útil para no tener que usar el teclado físico PS/2 y para desarrollo.
  • use_lib_scr_uart Permite cargar SCR (6912 bytes) por terminal monitor VStudio o desde el putty
  • use_lib_sna_uart Permite cargar SNA 48K (49179 bytes) por terminal monitor VStudio o desde el putty
  • use_optimice_writebyte Mejora la velocidad de lectura y escritura a memoria, logrando un incremento mínimo de 20 fps (LIN KE FONG) o 10 fps (JLS) en la emulación. Esta opción consume 16 KB de SRAM.
  • use_optimice_writebyte_min_sram Mejora la velocidad de lectura y escritura a memoria, logrando un incremento mínimo de 20 fps (LIN KE FONG) o 10 fps (JLS) en la emulación. Esta opción no consume SRAM.



Modo brillo

El modo brillo, se corresponde con 16 colores, por tanto, se tiene que usar la salida del DAC de 6 pines. Este modo es incompatible con el modo de 8 colores, por tanto, si se elige esta opción, se tiene que deshabilitar el use_lib_vga8colors en el gbConfig.h.

Este modo consume más CPU y RAM que el modo normal de 8 colores.



Aplicaciones Test

Al arrancar el ESP32, se realiza en modo ZX 48K, es decir, cargando la rom del ZX 48k con el BASIC. Cada vez que seleccionamos una ROM, se resetea la selección de cinta al bloque 0, así como el sonido. Posteriormente podemos elegir las roms:
  • ROMS de 48K
    • DIAG: utilidad de diagnósticos, para test de teclado, ram, rom, modo 48k, 128k, AY8912, speaker y video.
    • SE: El BASIC de Open SE rom, que permite usar el BASIC sin las teclas de funciones del modo 48K, de forma que cada pulsación de tecla no genera una función.
    • SINCLAIR: El modo 48k
  • ROMS de 128K
    • PLUS2A: El spectrum +2
    • PLUS3: El spectrum +3
    • PLUS3E: El spectrum +3E
    • SINCLAIR: El 128K

Para el caso de los SNA:
  • DIAG: Utilidad de diagnóstico de la ROM y RAM.
  • Fantasy: Juego con soporte de brillo (16 colores). Permite kempston, que junto con el ratón, se puede jugar muy cómodo.
  • Sppong: El pong clásico
  • Fire: Es una versión modificada del Fire, para soportar ratón kempston, por lo que si se juega sin él, dará problemas, pareciendo que se mueve lento. Se puede ir al menú principal pulsando shift y la barra espaciadora. Tiene soporte para AY8912, sin embargo, la salida del speaker al mismo tiempo que el AY8912 aún no es 100% efectivo. Por separado, es correcto.
  • 3DcoolKm: Herramienta de 3D con soporte de ratón kempston
  • AT4openKM: Herramienta de dibujo con soporte de ratón kempston
  • Sipka: Tool para test de ratón kempston. Permite cambiar el icono del ratón al pulsar sobre los botones.
  • MouseTestZXds: Tool para test del protocolo del ratón kempston.
  • FireKey: el mismo juego Fire pero usando el teclado en lugar del ratón. Tiene salida de sonido AY8912 (modo 128K) y altavoz interno (modo 48K).
  • Tritone1: Musicdisk que usa altavoz interno.
  • Z80FULL: El Test de z80 completo. Se debe ejecutar con el comando RUN.

Para la carga de SCR desde TAP:
  • 3D: No carga nada, porque esta cinta sólo tiene el código de BASIC de 3D.
  • 4x4: Carga el coche del juego 4x4

Para los SCR:
  • 4x4: Carga la imagen del juego 4x4.

Para la carga de cintas desde BASIC o Tape Loader:
  • 3D: Carga una simulación de gráficas 3D.



Tool data2h

He creado una herramienta muy básica, para convertir los archivos .rom, .tape, .sna, .scr en .h en modo lista para ser procesados por el emulador. Tan sólo tenemos que dejar los archivos en la carpeta input en cada tipo de carpeta y ejecutar el archivo data.exe, de forma que se generará una salida en el directorio output/dataFlash. Para pruebas, se han dejado varios archivos en cada directorio, que se recomienda borrar en caso de realizar una nueva lista personalizada.También se recomienda borrar los archivos del directorio ESP32TinyZXSpectrum\dataFlash\ para tener un proyecto limpio.

Tool data2h

 input/
  roms/
   48k/
    jupiter/
     0.rom - ROM Jupiter Ace
    sinclair/
     0.rom - ROM ZX48K 
   128k/
    305zx80IF2/
     0.rom - ROM ZX-80 ROM
    308zx81IF2/
     0.rom - ROM ZX-81 ROM
    SINCLAIR128/
     0.rom - ZX-128 ROM
     1.rom
  scr/
   trixs01.scr
   trixs02.scr
   trixs03.scr
  sna/
   48k/
    coloristic.sna
    GDC.sna
   128k/
    nada.txt
El concepto de archivos numéricos de rom (0.rom, 1.rom, 2.rom, 3.rom) sigue la misma base que el emulador del ZX-ESPectrum. El nombre de la carpeta es la que define el título de rom. Es obligatorio dejar la carpeta 48k/sinclair/0.rom, dado que necesita la rom del 48k para arrancar el emulador. Posteriormente debemos copiar el directorio dataFlash en el proyecto ESP32TinyZXSpectrum\ZX-ESPectrum sobreescribiendo la carpeta dataFlash previa. Se recomienda limpiar el proyecto y volver a compilar.
Esta herramienta es muy simple, y no controla los errores, por lo que se recomienda dejarle los archivos con nombres muy simples y lo más sencillo posible.
El proyecto en PLATFORM.IO está preparado para 2 MB de Flash. Si necesitamos los 4MB de flash, tendremos que modificar la entrada del archivo platformio.ini
board_build.partitions = huge_app.csv
En el Arduino IDE, debemos elegir la opción Partition Scheme (Huge APP).



Soporte WIFI

Se ha añadido para TEST un soporte básico de WIFI, para poder cargar los SCR's y SNA's desde un servidor básico HTML, sin necesidad de CORS, por lo que el despliegue es muy rápido. Se puede usar un Servidor Apache, NGINX, etc...
Por defecto, se ha dejado apuntando al servidor de pages de github del proyecto:
https://rpsubc8.github.io/ESP32TinyZXSpectrum/www/zxspectrum/output

Para activar este modo, se debe descomentar la línea use_lib_wifi en el gbConfig.h
Dado el consumo de sram, sólo se permite el modo 48K, cuando se usa la WIFI.
Debemos configurar en el archivo gbWIFIConfig.h los datos:

  #define gb_wifi_ssd "nombreDeNuestraRedWIFIdelRooter"
  #define gb_wifi_pass "passwordDeNuestraRedWIFIdelRooter"

  //#define gb_wifi_url_base_path "http://192.168.0.36/zxspectrum/output"
  #define gb_wifi_url_base_path "https://rpsubc8.github.io/ESP32TinyZXSpectrum/www/zxspectrum/output"

  //millisecons delay stream read
  #define gb_wifi_delay_available 0

  #define use_lib_wifi_debug
 

Por ahora, la configuración está fijada en nuestro gbWIFIConfig.h que tendremos que recompilar, de manera, que sólo se conectará a nuestra red del rooter. Por tanto debemos de cambiar gb_wifi_ssd y gb_wifi_pass.
El gb_wifi_url_base_path es la ruta en donde se encuentran nuestros directorios outlist y outdat, que contienen el listado de archivos, así como los mismos, por lo que dicho path será diferente si usamos un servidor local.

El concepto es simple, se dispone de:

  outlist --> Fichero con la lista de nombres (longitud 8) de SCR o SNA. Límite de 128 ficheros
  outdat  --> Los fichero SCR o SNA.
 

Por ahora, para optimizar el consumo de RAM, se ha dejado una estructura de longitud de nombres 8:3, es decir, 8 caracteres de nombre y 3 de extensión. Dejo unas tools intermedias para preparar y hacer la conversión:

  build.bat --> Lanza todos los bats, procesando input en output
  
  data83.bat --> Convierte todos los archivos input a formato 8:3
  
  list.bat --> Genera los outlist (lista de archivos).
  dsk.exe --> Genera un txt que dentro contiene la lista de archivos con longitud de nombre 8.
  lowerscr.bat --> Convierte las extensiones SCR a .scr
  lowersna.bat --> Lo mismo, pero para SNA.
 

Un ejemplo de outlist, por ejemplo de action.txt, que contiene:

 amc1    batman  goody   robocop ThePunk 
 

Siempre que se añada un fichero, debemos de regenerar la lista con el list.bat o bien llamando a todo el proceso build.bat.

Dentro esta la lista de archivos con longitud máxima de 8 caracteres, que es la que se mostrará en el menu de selección de SCR o SNA en el ESP32. Estos archivos, por ahora están pensados para un máximo de 128 entradas, que equivale a 1024 bytes (128 x 8).
Cada vez que se hace una petición a un tipo, se carga el fichero .TXT con la lista (1024 bytes, 128 nombres). Y cuando se selecciona, se hace la petición al fichero que se encuentra en el outdat.
Cuando se seleccione un archivo, se procederá a cargarlo en outdat con su ruta. Los archivos tienen que tener la extensión en minúsculas.

Si se usa un servidor externo WEB, es posible, que por políticas impida realizar peticiones seguidas, así que es recomendable no hacer peticiones muy seguidas.

Para depurar la WIFI, se debe descomentar use_lib_wifi_debug en el fichero gbWifiConfig.h



Formato SNA

Está soportado el formato SNA de 48K (49179 bytes) y 128K (131103 bytes), compatible con los SNA del emulador FUSE.
El formato SNA de 48K:
 Offset   Size   Description
 ------------------------------------------------------------------------
 0        1      byte   I
 1        8      word   HL',DE',BC',AF'
 9        10     word   HL,DE,BC,IY,IX
 19       1      byte   Interrupt (bit 2 contains IFF2, 1=EI/0=DI)
 20       1      byte   R
 21       4      words  AF,SP
 25       1      byte   IntMode (0=IM0/1=IM1/2=IM2)
 26       1      byte   BorderColor (0..7, not used by Spectrum 1.7)
 27       49152  bytes  RAM dump 16384..65535
 ------------------------------------------------------------------------
 Total: 49179 bytes

El formato SNA de 128K:

 Offset   Size   Description
 ------------------------------------------------------------------------
 0        27     bytes  SNA header (see above)
 27       16Kb   bytes  RAM bank 5 \
 16411    16Kb   bytes  RAM bank 2  } - as standard 48Kb SNA file
 32795    16Kb   bytes  RAM bank n / (currently paged bank)
 49179    2      word   PC
 49181    1      byte   port 0x7ffd setting
 49182    1      byte   TR-DOS rom paged (1) or not (0)
 49183    16Kb   bytes  remaining RAM banks in ascending order
 ...
 ------------------------------------------------------------------------
 Total: 131103 bytes

El id del banco cacheado (bank n) se corresponde con los 3 bits menos significativos del puerto (0x7ffd & 0x07). Después del byte 49183 del SNA, van los 8 bancos de 16384 bytes, eliminando el banco 5, 2 y el actualmente cacheado (banco n).