Página 7 de 13

Re: Primeros pasos para pogramar un emulador

Publicado: 16 Sep 2018, 03:33
por Bubu
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?

Re: Primeros pasos para pogramar un emulador

Publicado: 16 Sep 2018, 10:59
por Namek
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:

Re: Primeros pasos para pogramar un emulador

Publicado: 17 Sep 2018, 12:08
por PabloMarmol
(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.

Re: Primeros pasos para pogramar un emulador

Publicado: 17 Sep 2018, 14:57
por Bubu
Ok, así haré. Esta noche me pongo. Gracias muchas!

Re: Primeros pasos para pogramar un emulador

Publicado: 17 Sep 2018, 15:55
por Bubu
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 2235 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.

Re: Primeros pasos para pogramar un emulador

Publicado: 17 Sep 2018, 16:33
por Namek
Yo ya voy por aqui:
Imagen
Y por aqui:
Imagen
Pero poco mas... :mrgreen:

Re: Primeros pasos para pogramar un emulador

Publicado: 17 Sep 2018, 16:56
por Bubu
Ala, pero si ya casi lo tienes... ¿haces FULLSCREEN y todo?

Re: Primeros pasos para pogramar un emulador

Publicado: 17 Sep 2018, 17:01
por Namek
Bubu escribió:Ala, pero si ya casi lo tienes... ¿haces FULLSCREEN y todo?
En Windows XP si, en Win7 y Win10 no... :roll:

Re: Primeros pasos para pogramar un emulador

Publicado: 17 Sep 2018, 17:29
por Bubu
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.

Re: Primeros pasos para pogramar un emulador

Publicado: 18 Sep 2018, 15:42
por Bubu
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?