Página 11 de 13

Re: Primeros pasos para pogramar un emulador

Publicado: 02 Oct 2018, 21:13
por Namek
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/

Re: Primeros pasos para pogramar un emulador

Publicado: 02 Oct 2018, 21:14
por ZX-81
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...

Re: Primeros pasos para pogramar un emulador

Publicado: 02 Oct 2018, 21:31
por Namek
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:

Re: Primeros pasos para pogramar un emulador

Publicado: 02 Oct 2018, 21:35
por Bubu
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.

Re: Primeros pasos para pogramar un emulador

Publicado: 02 Oct 2018, 21:38
por Bubu
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

Re: Primeros pasos para pogramar un emulador

Publicado: 02 Oct 2018, 22:06
por ZX-81
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...

Re: Primeros pasos para pogramar un emulador

Publicado: 02 Oct 2018, 22:20
por Namek
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:

Re: Primeros pasos para pogramar un emulador

Publicado: 03 Oct 2018, 18:23
por Bubu
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 2715 veces

Re: Primeros pasos para pogramar un emulador

Publicado: 03 Oct 2018, 20:14
por Bubu
Ea, pos yastá:

specceasy.png
specceasy.png (19.56 KiB) Visto 2704 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...

Re: Primeros pasos para pogramar un emulador

Publicado: 03 Oct 2018, 22:16
por Namek
Mas facil aun: flag_z = (registro < 128) ... :mrgreen: