Nuevo emulador en desarrollo: SpecIde.
Publicado: Dom Mar 25, 2018 3:40 pm
¡Hola!
Pues resulta que el año pasado me arremangué y me puse a escribir mi propio emulador. Supongo que no estaba del todo contenta con los emuladores que ya existían, y también quería poner a prueba mis conocimientos.
El código fuente está aquí: https://github.com/MartianGirl/SpecIde
Probablemente es el emulador que más recursos consume de la historia. El motivo es que me propuse emular todo a nivel de ciclo de reloj, de manera que el código es una especie de traducción (suposición, mejor) de las funciones lógicas de cada componente. Mi idea es, en algún momento, reimplementarlo en una FPGA y ver qué pasa.
¿Qué tengo implementado?
- El emulador compila y funciona en Windows, MacOS y Linux.
- Emula todos los modelos "oficiales" de cinta (48K Issues 2 y 3, 128K, +2 y +2A).
- Soporta los formatos .TAP y .TZX (parcialmente aún). Puede grabar a .TAP.
- Las temporizaciones son bastante exactas (puedo ejecutar la Shock Megademo sin problemas, por ejemplo).
- La CPU emula casi todo lo necesario (registro R, registro WZ... si bien le falta emular correctamente los flags al ejecutar CCF/SCF, y hay un problema con el muestreo de la señal INT).
- El bus flotante está emulado en los 48K y 128K, y *casi* emulado en el +2A (está emulado, pero con un desfase de 3 T-estados).
- Arranca en modo de pantalla completa, detectando bastante bien la resolución del escritorio. Se puede pasar a ventana pulsando F2.
- Emula el altavoz del Spectrum y el AY-8912-3 razonablemente bien.
- Acepta un joystick USB que puede funcionar como Kempston o Sinclair, o mapeando a teclas (de momento estas teclas son fijas)
No sé si me dejo algo.
La interfaz de usuario es inexistente, así que se controla todo mediante opciones de línea de comandos: SpecIde [--48|--issue2|--issue3|--128|--plus2|--plus2a][--kempston|--sinclair] [--pad] [--flashtap] FileName.[tap|tzx]
También hay algunas teclas de función:
F2: Pantalla completa/Ventana
F5: Reset
F8: Grabar de la cinta virtual a un TAP.
F9: Sonido on/off. (Para el sonido de carga, Mays+F9)
F10: Salir
F11: Arrancar/Parar cinta. (Mays+F11 establece una posición en la cinta a la que se puede volver más tarde - Ideal cuando sale lo de "Reset Tape Counter")
F12: Rebobinar al principio de la cinta. (Mays+F12: Rebobinar a la posición guardada)
En fin, eso. Yo lo dejo aquí por si a alguien le gusta. Insisto, es un programa en desarrollo aún, así que tendrá miles de bugs. (Acepto tickets en el repo de GitHub).
Espero que os guste.
Saludetes.
Pues resulta que el año pasado me arremangué y me puse a escribir mi propio emulador. Supongo que no estaba del todo contenta con los emuladores que ya existían, y también quería poner a prueba mis conocimientos.
El código fuente está aquí: https://github.com/MartianGirl/SpecIde
Probablemente es el emulador que más recursos consume de la historia. El motivo es que me propuse emular todo a nivel de ciclo de reloj, de manera que el código es una especie de traducción (suposición, mejor) de las funciones lógicas de cada componente. Mi idea es, en algún momento, reimplementarlo en una FPGA y ver qué pasa.
¿Qué tengo implementado?
- El emulador compila y funciona en Windows, MacOS y Linux.
- Emula todos los modelos "oficiales" de cinta (48K Issues 2 y 3, 128K, +2 y +2A).
- Soporta los formatos .TAP y .TZX (parcialmente aún). Puede grabar a .TAP.
- Las temporizaciones son bastante exactas (puedo ejecutar la Shock Megademo sin problemas, por ejemplo).
- La CPU emula casi todo lo necesario (registro R, registro WZ... si bien le falta emular correctamente los flags al ejecutar CCF/SCF, y hay un problema con el muestreo de la señal INT).
- El bus flotante está emulado en los 48K y 128K, y *casi* emulado en el +2A (está emulado, pero con un desfase de 3 T-estados).
- Arranca en modo de pantalla completa, detectando bastante bien la resolución del escritorio. Se puede pasar a ventana pulsando F2.
- Emula el altavoz del Spectrum y el AY-8912-3 razonablemente bien.
- Acepta un joystick USB que puede funcionar como Kempston o Sinclair, o mapeando a teclas (de momento estas teclas son fijas)
No sé si me dejo algo.
La interfaz de usuario es inexistente, así que se controla todo mediante opciones de línea de comandos: SpecIde [--48|--issue2|--issue3|--128|--plus2|--plus2a][--kempston|--sinclair] [--pad] [--flashtap] FileName.[tap|tzx]
También hay algunas teclas de función:
F2: Pantalla completa/Ventana
F5: Reset
F8: Grabar de la cinta virtual a un TAP.
F9: Sonido on/off. (Para el sonido de carga, Mays+F9)
F10: Salir
F11: Arrancar/Parar cinta. (Mays+F11 establece una posición en la cinta a la que se puede volver más tarde - Ideal cuando sale lo de "Reset Tape Counter")
F12: Rebobinar al principio de la cinta. (Mays+F12: Rebobinar a la posición guardada)
En fin, eso. Yo lo dejo aquí por si a alguien le gusta. Insisto, es un programa en desarrollo aún, así que tendrá miles de bugs. (Acepto tickets en el repo de GitHub).
Espero que os guste.
Saludetes.