Port del emulador de PC de Tom Walker (AMSTRAD CPC) a la placa TTGO VGA32 v1.4 con ESP32.
- Portado de x86 PC a ESP32
- Uso de un sólo core
- OSD de bajos recursos
- Creado proyecto compatible con Arduino IDE y Platform IO
- Emulación de AY8912 (libreria fabgl)
versión reducida de dcrespo3d(David Crespo Tascón)versión 1.0.9 - Ajuste de pantalla X
- Menú de velocidad de CPU de emulación (AUTO), sonido, teclado
- Soporte para modo 8 y 64 colores (versión reducida de Ricardo Massaro).
- Soporte DSK de 42 tracks y 11 sectores.
- Carga de archivos DSK desde la tarjeta SD (deben estar en /dsk).
- Carga de ROMs desde la tarjeta SD (deben estar en /rom/[6128|664|464]/ , se necesita OS.rom y BASIC.rom).
- Emula sólo el CRTC 0
- Soporta modo 0, 1 y 2 de video
- VGA 400x300
- VGA 320x200 con o sin bordes
- Emulación CPC 464 y 664
- Emulacion CPC 6128 (inestable)
- Emulación de AMX Mouse (librería reducida de Rob Kent jazzycamel)
- Ya se permite tener el modo de video 400x300 64 colores, el modo 128 KB, así como el ratón y el sonido todo activo.
- Paleta monocromo Verde para simular GT65
Se requiere:
- TTGO VGA32 v1.4
- Arduino IDE 1.8.11 Espressif System 2.0.7
- Librería reducida Arduino fabgl 1.0.9 (incluida en proyecto PLATFORMIO)
- Librería reducida Arduino bitluni 0.3.3 (incluida en proyecto)
Todo el proyecto es compatible con la estructura de Arduino 1.8.11. Tan sólo tenemos que abrir el CPCem.ino del directorio CPCem. 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 activar 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. En el Arduino IDE, debemos elegir la opción Partition Scheme (Huge APP).
Se permiten las siguientes acciones desde el menú (tecla F1):
- Seleccionar Máquina permite elegir CPC 464, 664 o 6128.
- Seleccionar DSK permite elegir el disco.
- Offset X de la pantalla
- Permite saltar un frame
- Cambiar los milisegundos de polling para video, teclado, ratón y sonido
- Cambiar los milisegundos de espera en cada frame
- Sonido Volumen (100%, 75,%, 50%, 25%, 5%)
- Sonido activo o en silencio
- Espera de CPU en modo AUTO (ajuste 20 ms por frame real) o la espera en ms que queramos
- Ratón Detectar, permite volver a inicializar el ratón, si se ha desconectado en caliente
- Ratón ON y OFF, permite inhabilitar la lectura del ratón. De está forma la emulación va más rápida.
El archivo gbConfig.h se seleccionan las opciones:
- use_lib_400x300: Se usa modo de vídeo 400x300.
- use_lib_320x200_video_border: Se usa modo de vídeo 320x200 con bordes, de manera que se reduce el tamaño de la pantalla a la mitad. Este modo consume menos RAM que el 400x300 y es más rápido. El modo con bordes, es más lento que el normal, dado que realiza el ajuste de aspecto.
- use_lib_320x200_video_noborder: Se usa modo de vídeo 320x200 sin bordes. En este modo no se reduce la pantalla a la mitad, pero se pierden los bordes. Este modo consume menos RAM que el 400x300 y es más rápido.
- 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_sound_ay8912: Se utiliza un mezclador de 3 canales en modo dirty, emulando el AY8912. Consume un poco de RAM. Se requiere la librería fabgl 0.9.0 reducida, ya incluida en el proyecto
- use_lib_log_serial: Se envian logs por puerto serie usb
- usb_lib_optimice_checkchange_bankswitch: Sólo conmuta bancos cuando son distintos, ganando velocidad.
- use_lib_128k: Permite usar el modo 128K, incluyendo la rom del 6128 en la compilación, así como 2 bloques de memoria de 64KB. Está en fase de pruebas, y al requerir más RAM, se tiene que usar otras opciones de configuración de bajo consumo de RAM.
- use_lib_cheat_128k: Modo experimental de 128 KB.
- 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.
- gb_frame_crt_skip: Si es 1 se salta un frame.
- gb_delay_emulate_ms: Milisegundos de espera por cada frame completado.
- use_lib_amx_mouse: Se usa un ratón PS/2 como si fuera un AMX mouse (emulado). El uso del ratón consume un poco de CPU y memoria.
- gb_delay_init_ms: Especifica un número de milisegundos inciales de espera en el arranque del ratón, para que lo detecte correctamente.
- use_lib_amx_mouse_lefthanded: Ratón para zurdos (intercambia botones)
- gb_ms_mouse: Muestreo en milisegundos de cada lectura de ratón.
- use_lib_lookup_znptable: Usa tabla precalculada en FLASH para cálculos BCD. Consume 256 bytes.
- use_lib_lookup_znptable16: Usa tabla precalculada en FLASH para cálculos BCD. Consume 64 KBs.
Para poder usar un ratón como si fuera un AMX Mouse, se requiere activar en el fichero de configuración el soporte. Se permite configurar el ratón para zurdos (también desde el OSD), así como los tiempos de muestreo, todo ello en el fichero gbConfig.h.
Cuando queramos cargar otro juego, debemos resetear, o bien seleccionando el menú de Machine o bien Reset.
Si queremos lanzar el juego arkanoid, debemos elegir desde el menú Load or Run ROM, luego Run ROM y por último nos pedirá seleccionar Arkanoid. Al finalizar, seleccionamos High ROM(0..15), en donde ponemos por ejemplo el slot 1, y en un par de segundos, se escribirá |arkanoid.
Si elegimos sólo Load ROM, hará lo mismo que lo anterior, pero sin lanzar el RSX |arkanoid. Este nombre de archivo debe coincidir con el nombre real del juego interno.
Si tenemos juego de varias ROMS, por ejemplo 3weeks.rom y 3weeks2.rom, debemos cargar 3weeks.rom en slot 1 y 3weeks2.rom en slot 2, y por último lanzar el principal, que en este caso sería 3weeks.rom
Más información de ROMS: https://www.cpcwiki.eu/index.php/ROM_List
La Tecla Tilde se saca con la combinación SHIFT + F10.