SpecIde actualizado.

Emuladores y aplicaciones que ayudarán a la perpetuación del Spectrum y su software en el futuro

Moderador: Sir Cilve Sinclair

Responder
TheMartian
rst 0
Mensajes: 25
Registrado: Dom Mar 25, 2018 2:07 pm

SpecIde actualizado.

Mensaje por TheMartian » Vie May 24, 2019 7:37 pm

¡Hola!

Durante estos meses he ido madurando un poco mi emulador, SpecIde, también conocido como el emulador menos eficiente del mundo.

En este momento SpecIde sabe hacer los siguientes trucos:
  • - Emulación pixel-perfect del Spectrum 48K, con todos los avíos. (Issue 2/3, contended memory, floating bus, snow effect...)
    - Emulación pixel-perfect del Spectrum 128K y Plus2. (También con contended memory, floating bus, snow effect...)
    - Emulación pixel-perfect del Spectrum +2A y +3. (Esto es nuevo; está hecha la contended memory, el "floating bus"...)
    - Emulación de joystick Kempston y Sinclair mediante el joystick o el game pad que esté conectado al PC. Se pueden mapear los botones extra a teclas.
    - Emulación del PSG (AY-3-8912 y YM-2149). Soporta mono, estéreo ABC y ACB, turbosound (--turbo, --turboacb, --turboacb) y un modo inspirado en el Spectrum Next que emula cuatro PSGs (--turbonext).
    - Emulación regulera del FDC765 y la disquetera del +3. (De momento es sólo de lectura, pero pilla todas las protecciones de disco que he probado).
    - Funciona en pantalla completa (se adapta a la resolución del monitor) o en una alegre ventanita.
    - Emulación del entrelazado: Puedes desactivarlo (--nodoublescan), pintar las 625 líneas (--scanlines) o bien promediarlas (--average) para que se vean bien los modos Gigascreen.
    - Acepta ficheros TAP, TZX y DSK.
    - Es software libre (GPL3). El código y los binarios de Windows están aquí: https://github.com/MartianGirl/SpecIde (Los binarios de GNU/Linux y de Mac son muy fáciles de compilar, y hay instrucciones en el repositorio...)
Espero que os guste. :)

Avatar de Usuario
chernandezba
Sabreman
Mensajes: 408
Registrado: Mié Oct 17, 2007 5:26 pm

Re: SpecIde actualizado.

Mensaje por chernandezba » Mié Jun 19, 2019 8:31 pm

Enhorabuena por tu progreso
No te preocupes por ser el emulador menos eficiente: en poco tiempo las cpus serán más rápidas y ejecutarán sin problemas tu emulador
Por cierto, como emulas el snow effect? En su momento no encontré información precisa de cómo funcionaba...

Saludos
César
----

ZEsarUX
ZX Second-Emulator And Released for UniX
https://github.com/chernandezba/zesarux

TheMartian
rst 0
Mensajes: 25
Registrado: Dom Mar 25, 2018 2:07 pm

Re: SpecIde actualizado.

Mensaje por TheMartian » Jue Jun 20, 2019 6:44 pm

¡Gracias!

El snow effect he intentado aproximarlo de la siguiente manera:

La ULA hace un ciclo de 16 estados, en los que va leyendo las posiciones de la memoria de vídeo. Entonces, entre otras, yo tengo una tabla tal que así:

Código: Seleccionar todo

bool ULA::snowTable[16] =
{
    false, false, false, false, false, false, false, false,
    false, false, false, false, true, true, false, false
};
Entonces, en el "Spectrum" tengo lo siguiente:

Código: Seleccionar todo

        if (!spectrumPlus2A)
        {
            // Snow effect
            bus = (contendedPage[memArea] && ula.snow && !as_) ?
                map[memArea][(ula.a & 0x3F80) | (z80.a & 0x007f)] :
                scr[ula.a];
        }
O sea, estoy considerando que en esos estados, si no es un Spectrum +2A/+3, si la página no es contended, y MREQ del Z80 está abajo (lo cual sólo ocurre... en los ciclos de refresco, porque la ULA sabe evitarlo), pues fuerzo la dirección de columna del Z80.

No es perfecto, pero se parece mucho a la realidad. La idea, (según el libro de la ULA de Chris Smith) es que, cuando el Z80 fuerza MREQ abajo en un ciclo de refresco, la ULA no sabe evitarlo, y por tanto la dirección de fila se queda fija entre los dos accesos de vídeo. Vamos, que se queda la señal de RAS a nivel bajo durante todo el acceso, y eso distorsiona la imagen. He hecho pruebas poniendo la tabla de los estados en los que permito nieve de esta manera:

Código: Seleccionar todo

bool ULA::snowTable[16] =
{
    false, false, false, false, false, false, false, false,
    false, false, false, false, true, true, true, true
};
Esto tampoco es exacto, pero también es muy parecido, si bien es un poco excesivo y saca nieve en algunas situaciones en las que no la hay. Pero sospecho que mi condición de que el banco de memoria sea contended (así sin más) no es del todo correcta.

:)

(Os he engañado, jaja, no es pixel perfect, el snow effect se puede mejorar) :)

¡Saludos!

Responder

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 5 invitados