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
Namek
Amstrad PC 1640
Amstrad PC 1640
Mensajes: 634
Registrado: 11 Jul 2011, 13:13
Gracias dadas: 12 veces
Gracias recibidas: 27 veces

Re: Primeros pasos para pogramar un emulador

Mensajepor Namek » 02 Oct 2018, 21:13

JOPE!!! Pero si ya hay un fulano que hizo un emulador completo en VB6... #-o

http://freestuff.grok.co.uk/vbspec/

https://sourceforge.net/projects/vbspec/

ZX-81
Commodore 128
Commodore 128
Mensajes: 97
Registrado: 04 Ene 2013, 16:43
Sistema Favorito: Spectrum +2
primer_sistema: ZX81
consola_favorita: Nintendo DS/3DS
Primera consola: Sega Genesis/Megadrive
Ubicación: La orilla del mar Mediterráneo
Gracias dadas: 10 veces
Gracias recibidas: 19 veces
Contactar:

Re: Primeros pasos para pogramar un emulador

Mensajepor ZX-81 » 02 Oct 2018, 21:14

Solo te diré una cosa Namek, las tablas son tus amigas... :D

Una tabla que tenga la correspondencia de las direcciones de memoria de pantalla del Spectrum a la posición de los píxeles en tu imagen. Otra que lleve la correspondencia de cada posición de los 6144 bytes de pantalla a la dirección de su atributo. Cuantos menos cálculos hagas, mejor.

Y en un emulador "real" la única manera de refrescar la pantalla 50 veces por segundo es *NO* redibujarla entera cada vez. Muchos juegos usan dos ciclos de trabajo, en uno de ellos controlan los sprites, leen el teclado y el joystick, etc, y en el otro redibujan la pantalla con lo que consiguen 25 Hz de refresco. Así que en uno de cada dos frames no tocan la pantalla. Redibujarla completa en esas condiciones es una perdida de tiempo. Otra parte que no cambia mucho es el borde, así que frecuentemente no hay que redibujarlo. Eso sí, cuando toca, tiene algunas particularidades curiosas. En general, cuanto menos redibujes, mejor que mejor.

En ese aspecto, ZXBaremulator es una notable excepción. Como no hay otra cosa que hacer, sí redibujo el 100 de la pantalla cada vez, con lo que simplifico mucho el código. Y, aún así, uso unas cuantas tablas...
Todo espacio de dimensión finita distinta de cero con producto interno tiene una base ortonormal. Tiene sentido, cuando no piensas sobre ello.
Profesor de Matemáticas U.C. Berkeley

Empieza a jugar sin tener que compilar: JSpeccy
Emulador bare-metal para la Raspberry PI 2/3: ZXBaremulator

Avatar de Usuario
Namek
Amstrad PC 1640
Amstrad PC 1640
Mensajes: 634
Registrado: 11 Jul 2011, 13:13
Gracias dadas: 12 veces
Gracias recibidas: 27 veces

Re: Primeros pasos para pogramar un emulador

Mensajepor Namek » 02 Oct 2018, 21:31

La cuestión es que lo que quiero es hacer un código super simple para que sirva de ejemplo a quien quiera entender como programar un emulador, por eso no quiero usar tablas ni hacer una emulación perfecta con efectos multicolor, vamos que no quiero hacer otro emulador de Spectrum, solo quiero hacer el código mas básico para emular un Spectrum... :mrgreen:

Avatar de Usuario
Bubu
Amstrad PC 1640
Amstrad PC 1640
Mensajes: 517
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: 11 veces
Gracias recibidas: 15 veces

Re: Primeros pasos para pogramar un emulador

Mensajepor Bubu » 02 Oct 2018, 21:35

Por mi parte ya estoy al 90% con la emulación de la ROM del Spectrum: se pone la pantalla en negro, aluego en blanco, y se queda bloqueao. No sale el logo (C) 1982 Sin clair Research Ltd. A continuación pulso F5 para hacer un reset, y al principio sale 1 décima de segundo el logo, y aluego se pone la pantalla en negro, endespués en blanco, y vuelve a quedarse bloqueao.
Algo raro está pasando... Pero lo más curioso es que la (C) de Copyright no sale. Sale sólo "1982 Sinclair Research Ltd". Así que esto es una pista de qué instrucción puedo estar emulando mal. A ver si analizo qué dirección de la ROM se encarga de hacer PRINT.
Si algo funciona... ¡¡NO LO TOQUES!! ¡¡NI DE COÑA!!

Avatar de Usuario
Bubu
Amstrad PC 1640
Amstrad PC 1640
Mensajes: 517
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: 11 veces
Gracias recibidas: 15 veces

Re: Primeros pasos para pogramar un emulador

Mensajepor Bubu » 02 Oct 2018, 21:38

El poblema de VB es que el dibujado es muuuuuy lento, y no hay forma de arreglarlo, que yo sepa. En este aspesto me he quedado alucinando con QB, esto va follaísimo. Y a pantalla completa, como a mí me gusta :D
Si algo funciona... ¡¡NO LO TOQUES!! ¡¡NI DE COÑA!!

ZX-81
Commodore 128
Commodore 128
Mensajes: 97
Registrado: 04 Ene 2013, 16:43
Sistema Favorito: Spectrum +2
primer_sistema: ZX81
consola_favorita: Nintendo DS/3DS
Primera consola: Sega Genesis/Megadrive
Ubicación: La orilla del mar Mediterráneo
Gracias dadas: 10 veces
Gracias recibidas: 19 veces
Contactar:

Re: Primeros pasos para pogramar un emulador

Mensajepor ZX-81 » 02 Oct 2018, 22:06

Namek escribió:La cuestión es que lo que quiero es hacer un código super simple para que sirva de ejemplo a quien quiera entender como programar un emulador, por eso no quiero usar tablas ni hacer una emulación perfecta con efectos multicolor, vamos que no quiero hacer otro emulador de Spectrum, solo quiero hacer el código mas básico para emular un Spectrum... :mrgreen:


Un código que usa tablas suele ser más simple que uno que hace cálculos constantemente. Pero oye, cada uno es cada uno...
Todo espacio de dimensión finita distinta de cero con producto interno tiene una base ortonormal. Tiene sentido, cuando no piensas sobre ello.
Profesor de Matemáticas U.C. Berkeley

Empieza a jugar sin tener que compilar: JSpeccy
Emulador bare-metal para la Raspberry PI 2/3: ZXBaremulator

Avatar de Usuario
Namek
Amstrad PC 1640
Amstrad PC 1640
Mensajes: 634
Registrado: 11 Jul 2011, 13:13
Gracias dadas: 12 veces
Gracias recibidas: 27 veces

Re: Primeros pasos para pogramar un emulador

Mensajepor Namek » 02 Oct 2018, 22:20

ZX-81 escribió:Un código que usa tablas suele ser más simple que uno que hace cálculos constantemente. Pero oye, cada uno es cada uno...
Pero un código que usa tablas necesita esas tablas precalculadas o precalcularlas y entender de donde salen esos datos puede ser mas confuso... :roll:

P.D: El emulador que hice en AMOS y en BLITZ BASIC usaba tablas... :mrgreen:

Avatar de Usuario
Bubu
Amstrad PC 1640
Amstrad PC 1640
Mensajes: 517
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: 11 veces
Gracias recibidas: 15 veces

Re: Primeros pasos para pogramar un emulador

Mensajepor Bubu » 03 Oct 2018, 18:23

Sigo depurando mi emulaor. Ya inicia la ROM, sale el mensaje "1982 Sinclair Research Ltd" pero sin el símbolo del copyright (C). Esto es curiosísimo. ¿Habrá detectado el Sinclair que le estoy "usurpando" la ROM, y entóns por eso no me aparece el símbolor del Copyright?

specceasy.png
specceasy.png (19.64 KiB) Visto 228 veces
Si algo funciona... ¡¡NO LO TOQUES!! ¡¡NI DE COÑA!!

Avatar de Usuario
Bubu
Amstrad PC 1640
Amstrad PC 1640
Mensajes: 517
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: 11 veces
Gracias recibidas: 15 veces

Re: Primeros pasos para pogramar un emulador

Mensajepor Bubu » 03 Oct 2018, 20:14

Ea, pos yastá:

specceasy.png
specceasy.png (19.56 KiB) Visto 217 veces


Resulta que la instrucción "BIT 7, registro" la estaba emulando así:

Código: Seleccionar todo

flag_z = NOT (registro AND 128)


pero me he dado cuén de que debería ser así:

Código: Seleccionar todo

flag_z = NOT((registro AND 128) = 128)


o lo que es más fácil:

Código: Seleccionar todo

flag_z = ((registro AND 128) = 0)


En fins, que por culpa de no calcular bien el flag Z de la instrucción BIT 7 pos se estaba saltando el primer carácter del mensaje (c).


Llevo horas mirando esta pantallita, estoy altamente emocionado. Incluso pulso teclas para ver si sale el cursor y las instrucciones en BASIC a sabiendas de que es imposible pues aún no he emulado el teclado con la instrucción IN.

A ver cómo se me da el tema de los puertos...
Si algo funciona... ¡¡NO LO TOQUES!! ¡¡NI DE COÑA!!

Avatar de Usuario
Namek
Amstrad PC 1640
Amstrad PC 1640
Mensajes: 634
Registrado: 11 Jul 2011, 13:13
Gracias dadas: 12 veces
Gracias recibidas: 27 veces

Re: Primeros pasos para pogramar un emulador

Mensajepor Namek » 03 Oct 2018, 22:16

Mas facil aun: flag_z = (registro < 128) ... :mrgreen:


Volver a “Emuladores”

¿Quién está conectado?

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