Primeros pasos para pogramar un emulador

Foro dedicado a la emulación de sistemas clásicos en el PC o en otros sistemas.
Avatar de Usuario
Bubu
Amstrad PC 1640
Amstrad PC 1640
Mensajes: 582
Registrado: 04 Abr 2018, 23:10
Sistema Favorito: Spectrum 16Kb/48Kb
primer_sistema: Spectrum 16Kb/48Kb
consola_favorita: Atari 2600
Primera consola: Nintendo GameBoy
Gracias dadas: 12 veces
Gracias recibidas: 19 veces

Re: Primeros pasos para pogramar un emulador

Mensajepor Bubu » 16 Sep 2018, 03:33

Sus cuento cómo va el tema: tengo emulado muy bien el Z80, al menos lo suficiente como para ejecutar la rutina NEW de la ROM del Spectrum. Resulta que inicializa toda la RAM con el valor 2. Esto en pantalla debería verse como fondo negro y rayas finas verticales de color rojo. Y ahora es donde me tengo que pensar muy bien cómo hacer que se muestre esa pantalla. Nu sé cómo hacerlo.

La cosa es así:

- Leo la ROM
- Ejecuto el código Z80 (modifico los flags y cuento ciclos de reloj)
- Vuelvo a empezar

¿Aonde pongo que pinte la pantalla? Si hago así:

- Leo la ROM
- Ejecuto el código Z80 (modifico los flags y cuento ciclos de reloj)
- Pinto la pantalla
- Vuelvo a empezar

Va a funcionar, pero sería lentísimo, pues en un Spectrum real la pantalla no se pinta cada vez que se ejecuta una instrucción Z80. ¿Sería algo como esto?

- Leo la ROM
- Ejecuto el código Z80 (modifico los flags y cuento ciclos de reloj)
- Si el número de ciclos acumulados es mayor que 100 (p.ej.) pinto la pantalla
- Vuelvo a empezar

¿cuánto debería ser ese número 100? ¿O se hace de otra forma?
Si algo funciona... ¡¡NO LO TOQUES!! ¡¡NI DE COÑA!!

Avatar de Usuario
Namek
Atari 1040 STf
Atari 1040 STf
Mensajes: 648
Registrado: 11 Jul 2011, 13:13
Gracias dadas: 12 veces
Gracias recibidas: 32 veces

Re: Primeros pasos para pogramar un emulador

Mensajepor Namek » 16 Sep 2018, 10:59

Te lo dijo este señor algunos post anteriores...
chernandezba escribió:Tu sabes que un Z80 del spectrum 48k ejecuta 69888 ciclos cada 1/50 segundos?
Por tanto debes lanzar las interrupciones y pintar la pantalla cada 69888 ciclos... :mrgreen:

Avatar de Usuario
PabloMarmol
Amstrad PCW 8256
Amstrad PCW 8256
Mensajes: 144
Registrado: 03 Sep 2012, 17:32
Sistema Favorito: Spectrum 16Kb/48Kb
primer_sistema: Spectrum 16Kb/48Kb
Primera consola: Nintendo NES/Clónica
Ubicación: León, España
Gracias dadas: 6 veces
Gracias recibidas: 6 veces

Re: Primeros pasos para pogramar un emulador

Mensajepor PabloMarmol » 17 Sep 2018, 12:08

(la verdad... es que el z80 del 48k no ejecuta 69888 ciclos en 1/50 de segundo)
Pero si, bubu, tu repinta la pantalla cada 69888.

Avatar de Usuario
Bubu
Amstrad PC 1640
Amstrad PC 1640
Mensajes: 582
Registrado: 04 Abr 2018, 23:10
Sistema Favorito: Spectrum 16Kb/48Kb
primer_sistema: Spectrum 16Kb/48Kb
consola_favorita: Atari 2600
Primera consola: Nintendo GameBoy
Gracias dadas: 12 veces
Gracias recibidas: 19 veces

Re: Primeros pasos para pogramar un emulador

Mensajepor Bubu » 17 Sep 2018, 14:57

Ok, así haré. Esta noche me pongo. Gracias muchas!
Si algo funciona... ¡¡NO LO TOQUES!! ¡¡NI DE COÑA!!

Avatar de Usuario
Bubu
Amstrad PC 1640
Amstrad PC 1640
Mensajes: 582
Registrado: 04 Abr 2018, 23:10
Sistema Favorito: Spectrum 16Kb/48Kb
primer_sistema: Spectrum 16Kb/48Kb
consola_favorita: Atari 2600
Primera consola: Nintendo GameBoy
Gracias dadas: 12 veces
Gracias recibidas: 19 veces

Re: Primeros pasos para pogramar un emulador

Mensajepor Bubu » 17 Sep 2018, 15:55

No he podido esperar, jiji, y mientras esperaba a que se calentara el aceite pa hacer la comida, he pogramado esta subrutina pa mostrar la pantalla:

Código: Seleccionar todo

SUB VRAM
    DIM b AS _UNSIGNED _BYTE
    X = 0: Y = 0
    FOR N = 16384 TO 16384 + 6144
        b = mem(N)
        IF b AND 128 THEN PSET (X + 0, Y)
        IF b AND 64 THEN PSET (X + 1, Y)
        IF b AND 32 THEN PSET (X + 2, Y)
        IF b AND 16 THEN PSET (X + 3, Y)
        IF b AND 8 THEN PSET (X + 4, Y)
        IF b AND 4 THEN PSET (X + 5, Y)
        IF b AND 2 THEN PSET (X + 6, Y)
        IF b AND 1 THEN PSET (X + 7, Y)
        X = X + 8
        IF X = 256 THEN
            X = 0: Y = Y + 1
        END IF

    NEXT

END SUB


Al lanzar la ROM del Spectrum 48KB, resulta que se muestra esto:

SPECCEASY.png
SPECCEASY.png (36.25 KiB) Visto 444 veces


Joooop, casi. Resulta que salen 24 píxeles en diagonal, y me deberían salir rayas verticales... No me va a dar tiempo a más, esta noche lo miro.
Si algo funciona... ¡¡NO LO TOQUES!! ¡¡NI DE COÑA!!

Avatar de Usuario
Namek
Atari 1040 STf
Atari 1040 STf
Mensajes: 648
Registrado: 11 Jul 2011, 13:13
Gracias dadas: 12 veces
Gracias recibidas: 32 veces

Re: Primeros pasos para pogramar un emulador

Mensajepor Namek » 17 Sep 2018, 16:33

Yo ya voy por aqui:
Imagen
Y por aqui:
Imagen
Pero poco mas... :mrgreen:

Avatar de Usuario
Bubu
Amstrad PC 1640
Amstrad PC 1640
Mensajes: 582
Registrado: 04 Abr 2018, 23:10
Sistema Favorito: Spectrum 16Kb/48Kb
primer_sistema: Spectrum 16Kb/48Kb
consola_favorita: Atari 2600
Primera consola: Nintendo GameBoy
Gracias dadas: 12 veces
Gracias recibidas: 19 veces

Re: Primeros pasos para pogramar un emulador

Mensajepor Bubu » 17 Sep 2018, 16:56

Ala, pero si ya casi lo tienes... ¿haces FULLSCREEN y todo?
Si algo funciona... ¡¡NO LO TOQUES!! ¡¡NI DE COÑA!!

Avatar de Usuario
Namek
Atari 1040 STf
Atari 1040 STf
Mensajes: 648
Registrado: 11 Jul 2011, 13:13
Gracias dadas: 12 veces
Gracias recibidas: 32 veces

Re: Primeros pasos para pogramar un emulador

Mensajepor Namek » 17 Sep 2018, 17:01

Bubu escribió:Ala, pero si ya casi lo tienes... ¿haces FULLSCREEN y todo?
En Windows XP si, en Win7 y Win10 no... :roll:

Avatar de Usuario
Bubu
Amstrad PC 1640
Amstrad PC 1640
Mensajes: 582
Registrado: 04 Abr 2018, 23:10
Sistema Favorito: Spectrum 16Kb/48Kb
primer_sistema: Spectrum 16Kb/48Kb
consola_favorita: Atari 2600
Primera consola: Nintendo GameBoy
Gracias dadas: 12 veces
Gracias recibidas: 19 veces

Re: Primeros pasos para pogramar un emulador

Mensajepor Bubu » 17 Sep 2018, 17:29

Vaya, torpedo, qué mala suerte. Es que nu sé por qué las cosas que funcionan en XP no lo hacen en 7, y viceversa. A ver si va a ser lo de los 32-64 bits... Ya que tienes XP, te agradecería si pudieras catar el EXE que puse hace unos días. Está compilado en W7 y se pone a pantalla completa pulsando ALT + ENTER.
Si algo funciona... ¡¡NO LO TOQUES!! ¡¡NI DE COÑA!!

Avatar de Usuario
Bubu
Amstrad PC 1640
Amstrad PC 1640
Mensajes: 582
Registrado: 04 Abr 2018, 23:10
Sistema Favorito: Spectrum 16Kb/48Kb
primer_sistema: Spectrum 16Kb/48Kb
consola_favorita: Atari 2600
Primera consola: Nintendo GameBoy
Gracias dadas: 12 veces
Gracias recibidas: 19 veces

Re: Primeros pasos para pogramar un emulador

Mensajepor Bubu » 18 Sep 2018, 15:42

Bueno, me olvido entonces de lo de XP. A ver si consigo instalarlo en algún ordeñador que tenga por aquí y lo pruebo.

Ahora otra cosa: ¿cómo pinta y colorea la ULA? Me refiero, ¿en qué orden? ¿Primero lee los datos de 16384 a 22527 y pone píxeles, y luego lee los datos de 22528 a 23295 y los re-colorea, o primero colorea y aluego pone los píxeles, o cómo va esto?
Si algo funciona... ¡¡NO LO TOQUES!! ¡¡NI DE COÑA!!


Volver a “Emuladores”

¿Quién está conectado?

Usuarios navegando por este Foro: GXY y 3 invitados