Modificación del emulador MCUME zx81 (Jean MarcHarvengt) a la placa TTGO VGA32 v1.0, v1.1, v1.2 y v1.4 con ESP32.
- No se usa PSRAM, funcionando en ESP32 de 520 KB de RAM (TTGO VGA32 v1.x)
- Uso de un sólo core
- OSD de bajos recursos
- Creado proyecto compatible con Arduino IDE y Platform IO
- Se puede usar cualquier pin digital para el video (hardware.h)
- Menú de velocidad de video de emulación, VGA, teclado
- Soporte para modo 64 colores (DAC 6 bits) y 8 colores (DAC 3 bits).
- VGA 320x200 y 360x200 de bitluni, así como 320x200 con parámetros de fabgl
- Opción de eliminar el cálculo de redondeo IEEE (double) de la VGA
- Carga de ficheros pfiles
- No se requiere la libreria de bitluni completa. He reducido a lo mínimo, ahorrando RAM y FLASH, basado en la librería de Ricardo Massaro
- Soporte modo Hi-res y pseudo hi-res
- Soporte CVBS PAL NTSC Blanco y Negro en placa TTGO VGA32 (pin 26 CLK PS/2)
- El modo CVBS por defecto no tiene borde y sale en modo invertido de color, para que se puede ver en el mayor número de TV sin problemas.
- Proyecto compatible con Web Editor y ArduinoDroid (6.3.1) con tool makeandroid.bat
- El OSD se muestra con la tecla F1
- Añadido soporte de teclado desde terminal serie usb, monitor VStudio o putty.
-
Teclado mapeado
//Keyboard Matrix // Port____Line____Bit__0____1____2____3____4__ // FEFEh 0 (A8) SHIFT Z X C V // FDFEh 1 (A9) A S D F G // FBFEh 2 (A10) Q W E R T // F7FEh 3 (A11) 1 2 3 4 5 // EFFEh 4 (A12) 0 9 8 7 6 // DFFEh 5 (A13) P O I U Y // BFFEh 6 (A14) ENTER L K J H // 7FFEh 7 (A15) SPC . M N B
https://github.com/rpsubc8/ESP32TinyMCUMEesp81/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: Y le daremos a start. Si todo ha sido correcto, sólo tendremos que reiniciar el ESP32.
- TTGO VGA32 v1.x (1.0, 1.1, 1.2, 1.4)
- Visual Studio 1.66.1 PLATFORMIO 2.5.0 Espressif32 v3.5.0
- Arduino IDE 1.8.11 Espressif System 1.0.6
- Librería reducida Arduino bitluni 0.3.3 (incluida en proyecto)
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.
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.
- Tecla TAB o tecla F2: Muestra OSD
- Space: Barra espaciadora
- ENTER: Envía ENTER en el ZX81
- +: Envia ALT_GR
- -: Envia SHIFT LEFT
- .: Envia .
- Arriba: SHIFT + 7 y Kempston Arriba
- Abajo: SHIFT + 6 y Kempston Abajo
- Derecha: Kempston derecha
- Izquierda: Kempston izquierda
- A..Z, a..z: a..z
- 0..9: 0..9
- use_lib_vga8colors: Obliga a usar RGB modo de 8 colores (3 pines). Saca 8 colores, frente a los 64 del modo normal (6 pines RRGGBB).
- use_lib_log_serial: Se envian logs por puerto serie usb
- use_lib_keyboard_poll_milis: Se debe especificar el número de milisegundos de polling para el teclado.
- gb_delay_emulate_ms: Milisegundos de espera por cada frame completado.
- use_lib_delay_tick_cpu_auto: Si está a 1, la CPU se autoajusta a 20 ms por frame.
- use_lib_delay_tick_cpu_milis: Si use_lib_delay_tick_cpu_auto está a 0, lo que definamos aqui, será la espera en milisegundos por frame.
- FIX_PERIBOARD_NOT_INITING: Solución realizada por dcrespo3D para la inicialización en algunos teclados.
- use_lib_cvbs_bitluni: Si está activo, no usa código de VGA, ni genera salida VGA. Usa la librería modificada de CVBS Bitluni. Si está comentado, usa todo el código de VGA. En la placa TTGO VGA32 se está usando el pin 26, es decir, el CLK del conector PS/2 del ratón.
- use_lib_cvbs_bitluni_not_backbuffer: No usa el doble buffer en CVBS, ahorrando memoria. Puede ocasionar defectos visuales (flickering).
- use_lib_cvbs_pal: Si está activo junto con use_lib_cvbs_bitluni, la salida de video será en norma PAL, sino NTSC.
- use_lib_cvbs_ttgo_vga32: La placa TTGO VGA32 utiliza una salida de 5 voltios, en lugar de 3v. Por tanto se debe tener descomentada dicha línea si se usa la salida de TV, para poder reducir a 1 voltio la salida del DAC.
- use_lib_cvbs_ttgo_vga32_bright: Si la salida del DAC en la TTGO VGA32 de 5v, es muy bajo, si se activa esta opción se puede incrementar un poco el brillo. Usar con cuidado, dado que la norma CVBS es de 1 voltio.
- use_lib_invert_color_default_value: Permite la inversión de color, es decir, blanco por negro. En el modo CVBS por defecto está invertido. Sus valores son 1 o 0.
- 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_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_debug_i2s Traza con los cálculos del modo de video.
- use_lib_vga360x200x70hz_bitluni Modo de video 360x200 con los parámetros de bitluni.
- use_lib_vga320x200x70hz_bitluni Modo de video 320x200 con los parámetros de bitluni.
- use_lib_vga320x200x70hz_fabgl Modo 320x200 con los parámetros de fabgl.
- use_lib_border_x Desplaza en múltiplos de 4 pixels la pantalla, útil para el modo de video 360x200. No exceder el valor 10, ya que se saldría del buffer.
- 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.
//ESP32 Pin 26 //DAC - Voltaje // 0 - 0.06 // 38 - 0.52 // 77 - 1 //255 - 3.17Los valores máximos al escribir en el buffer de video en una placa ESP32 es de 54, mientras que para TTGO VGA32 v1.x sería de 35.#include <Arduino.h> #include <driver/dac.h>
const int arrayValue[4]={0,38,77,255}; unsigned char cont=0;
void setup() { Serial.begin(115200); dac_output_enable(DAC_CHANNEL_2); }
void loop() { dac_output_voltage(DAC_CHANNEL_2, arrayValue[cont]); Serial.printf("%d\n",arrayValue[cont]); delay(4000); cont++; cont &= 0x03; }
Tool p2h
input/ pfile/ output/ dataFlash/ pfile/Posteriormente debemos copiar el directorio dataFlash en el proyecto TinyMCUMEesp81ttgovga32\MECUMEesp81 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.csvEn el Arduino IDE, debemos elegir la opción Partition Scheme (Huge APP).