JOPE!!! Pero si ya hay un fulano que hizo un emulador completo en VB6...
http://freestuff.grok.co.uk/vbspec/
https://sourceforge.net/projects/vbspec/
Primeros pasos para pogramar un emulador
-
- Amstrad PCW 8256
- Mensajes: 129
- 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: 16 veces
- Gracias recibidas: 35 veces
- Contactar:
Re: Primeros pasos para pogramar un emulador
Solo te diré una cosa Namek, las tablas son tus amigas...
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...
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
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
- Namek
- Atari 1040 STf
- Mensajes: 838
- Registrado: 11 Jul 2011, 13:13
- Gracias dadas: 18 veces
- Gracias recibidas: 63 veces
Re: Primeros pasos para pogramar un emulador
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...
- Bubu
- Atari 1040 STf
- Mensajes: 886
- 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: 20 veces
- Gracias recibidas: 60 veces
Re: Primeros pasos para pogramar un emulador
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.
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!!
- Bubu
- Atari 1040 STf
- Mensajes: 886
- 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: 20 veces
- Gracias recibidas: 60 veces
Re: Primeros pasos para pogramar un emulador
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
Si algo funciona... ¡¡NO LO TOQUES!! ¡¡NI DE COÑA!!
-
- Amstrad PCW 8256
- Mensajes: 129
- 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: 16 veces
- Gracias recibidas: 35 veces
- Contactar:
Re: Primeros pasos para pogramar un emulador
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...
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
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
- Namek
- Atari 1040 STf
- Mensajes: 838
- Registrado: 11 Jul 2011, 13:13
- Gracias dadas: 18 veces
- Gracias recibidas: 63 veces
Re: Primeros pasos para pogramar un emulador
Pero un código que usa tablas necesita esas tablas precalculadas o precalcularlas y entender de donde salen esos datos puede ser mas confuso...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...
P.D: El emulador que hice en AMOS y en BLITZ BASIC usaba tablas...
- Bubu
- Atari 1040 STf
- Mensajes: 886
- 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: 20 veces
- Gracias recibidas: 60 veces
Re: Primeros pasos para pogramar un emulador
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?
Si algo funciona... ¡¡NO LO TOQUES!! ¡¡NI DE COÑA!!
- Bubu
- Atari 1040 STf
- Mensajes: 886
- 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: 20 veces
- Gracias recibidas: 60 veces
Re: Primeros pasos para pogramar un emulador
Ea, pos yastá:
Resulta que la instrucción "BIT 7, registro" la estaba emulando así:
pero me he dado cuén de que debería ser así:
o lo que es más fácil:
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...
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!!
- Namek
- Atari 1040 STf
- Mensajes: 838
- Registrado: 11 Jul 2011, 13:13
- Gracias dadas: 18 veces
- Gracias recibidas: 63 veces
¿Quién está conectado?
Usuarios navegando por este Foro: Bing [Bot] y 4 invitados