producción

cpcec-gtk

Descargar cpcec-gtk.deb

Créditos

  • Código — NoRecess
  • Motor — CPCEC, by Cesar Nicolas-Gonzalez

Créditos tal como figuran en la release.

Nota: cpcec-gtk es un proyecto abandonado. Ya no se desarrolla y no lleva ningún soporte. Lo que sigue lo describe tal como quedó, en 2022.

cpcec-gtk es un emulador de Amstrad CPC, Plus y GX-4000 para Linux basado en Debian: Debian, Ubuntu, Pop!_OS y sus parientes. La emulación en sí es CPCEC, el core fiel escrito en C por César «cngsoft» Nicolás-González y publicado bajo la GPL v3; todo lo que lo rodea —la interfaz GTK3, las ventanas de depuración, el empaquetado y la documentación— es mío, escrito entre 2021 y 2022 sobre la versión de enero de 2022 de ese core. El proyecto entero, el core incluido, está en Bitbucket.

Existe por una sola razón: tener, en Linux, un emulador dentro del cual un programador de CPC pueda trabajar, en lugar de trabajar a su lado. Un fichero que cambia en el disco se recarga y se relanza solo, de modo que una toolchain que reconstruye un .dsk pone la nueva versión en pantalla sin pulsar una tecla; los ficheros de símbolos que produce rasm se leen, de modo que el desensamblado se lee con los nombres del código fuente; y todo el debugger se abre en el momento en que la emulación se pausa.

Lo que hace

  • lanza imágenes de disquete .dsk, cartuchos .cpr del Plus y de la GX-4000, y snapshots .sna, y cambia solo a una máquina Plus cuando se inserta un cartucho
  • abre un fichero arrastrándolo, desde el menú, o desde una biblioteca de software que indexa de forma recursiva y filtra por extensión o por unas pocas letras del nombre
  • recarga y relanza un fichero insertado en cuanto su contenido cambia en el disco
  • maneja dos unidades de disco y crea un .dsk vacío desde cero
  • gestiona las ROMs internas, lower y upper 0 a 127, listando los RSX de BASIC que trae cada una y permitiendo reordenarlas
  • lee los ficheros de símbolos que escribe rasm, tanto los label symbols (-sz) como las ROM labels (-er)
  • admite mandos de juego externos, conectados o desconectados mientras funciona, y ofrece un joystick virtual en las flechas para quien no tenga ninguno, con el comportamiento de teclas de un teclado Amstrad real
  • responde a ALT+0..9 para el teclado numérico que un portátil no tiene, y a ALT para la tecla COPY del Amstrad
  • amplía la ventana, mantiene una relación de píxeles 1:1 y sabe mostrar las partes del monitor CRT que un programa intenta ocultar
  • guarda capturas en .png y snapshots en .sna, silencia, pausa y funciona a 1x o 4x
  • guarda la posición de las ventanas, la ruta de la biblioteca, los últimos ficheros y el ajuste de sonido en ~/.config/cpcec-gtk/config.ini

Cada máquina emulada arranca con una expansión de memoria de 512 KB, salvo la GX-4000, que recibe los 64 KB con los que salió.

El debugger

Pausar la emulación abre las ventanas de depuración; esc las cierra todas y continúa, space avanza una instrucción Z80. La ventana Z80 muestra el desensamblado, los registros y la pila, pone breakpoints con B, pone a cero el contador de NOPs con T, desensambla desde cualquier dirección que se le pida y entiende el opcode ED FF como un breakpoint escrito en el propio código. El inspector de memoria muestra la memoria tal como está, alterna entre los valores READ y WRITE, e informa debajo de la configuración de Gate Array y ASIC, con las ROM labels cuando un fichero de símbolos las ha proporcionado.

La ventana de vídeo está hecha para correr detrás del cañón: da el modo actual y la dirección de memoria de vídeo, y sus campos de línea CRTC y de scanline del monitor son interactivos: se escribe un valor, se pulsa la flecha de al lado y la emulación sigue hasta esa línea. En un Plus o una GX-4000, una ventana ASIC lista los registros, con vistas previas de sprites y la descripción de los bits en los tooltips. El visualizador de memoria dibuja un píxel por byte de los 64 KB principales y de los cuatro primeros banks, refrescado en cada VSync, en MODE 0 o 1 y con la paleta del programa o en gris, y un modo last write fading muestra solo las escrituras, con los frames anteriores desvaneciéndose a negro.

Capturas de pantalla

La ventana principal: la pantalla emulada, la barra de herramientas y el menú de la máquina
La ventana principal, con la barra de herramientas y el menú de la máquina.
La ventana de biblioteca, que lista el software encontrado bajo una carpeta elegida con sus filtros
La biblioteca: todo lo encontrado bajo una carpeta, filtrado por extensión o por nombre.
La ventana de configuración de ROMs, que lista las ROMs lower y upper y los RSX que llevan
La configuración de ROMs, con los RSX de BASIC que aporta cada ROM.
El debugger Z80, que muestra el desensamblado, los registros y la pila
El debugger Z80: desensamblado, registros y pila.
El inspector de memoria, que muestra los valores de memoria y la configuración de ROM y RAM actual
El inspector de memoria, y la configuración ROM/RAM debajo.
La ventana de vídeo, que muestra el modo actual, la dirección de memoria de vídeo y los campos de scanline
La ventana de vídeo, para el trabajo hecho contra el cañón.
La ventana ASIC, que lista los registros de un Amstrad Plus
Los registros ASIC, en un Plus o una GX-4000.
El visualizador de memoria, que dibuja el contenido de la memoria a un píxel por byte
El visualizador de memoria: un píxel por byte, refrescado en cada VSync.
El monitor CRT emulado ampliado para mostrar las partes normalmente fuera de la vista
El monitor CRT ampliado más allá de sus 384 por 270 píxeles visibles.

Instalarlo

sudo apt install libsdl2-2.0-0 libgtk-3-0 y luego sudo dpkg -i cpcec-gtk.deb; sudo apt purge cpcec-gtk lo quita. El binario va a /usr/bin, sus recursos —las ROMs de Amstrad, la documentación— a /usr/share/cpcec-gtk/, y no queda nada en ningún otro sitio.