Primeros pasos para pogramar un emulador

Foro dedicado a la emulación de sistemas clásicos en el PC o en otros sistemas.
ZX-81
Amstrad PCW 8256
Amstrad PCW 8256
Mensajes: 128
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: 27 veces
Contactar:

Re: Primeros pasos para pogramar un emulador

Mensajepor ZX-81 » 21 Oct 2018, 00:09

Con los fuentes del emulador Fuse va un programa de test llamado, como no, fusetest. Utiliza un programa muy simple para ir ejecutando las instrucciones una a una y comparar los resultados contra un archivo de idem que también va con el test.

Como no ejecuta ninguna ROM, sino que es externo e independiente del Spectrum, solo tendrías que crearte el programa que use tu core Z80 y hacer que vaya ejecutando test a test. Yo lo usé bastante cuando programé mi primer core Z80 en Java.
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
Bubu
Atari 1040 STf
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

Mensajepor Bubu » 21 Oct 2018, 18:47

Descargado el fuse de aquí (el source, vaya): https://sourceforge.net/projects/fuse-emulator/

y no hay ningún archivo ni carpeta llamada fusetest. Sólo una carpeta test, pero está en C, y creo que es para probar este emulador, no el Z80. ¿Tú me podrías pasar un enlace donde venga el fusetest?
Si algo funciona... ¡¡NO LO TOQUES!! ¡¡NI DE COÑA!!

Avatar de Usuario
PabloMarmol
Amstrad PCW 8256
Amstrad PCW 8256
Mensajes: 171
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: 16 veces
Gracias recibidas: 18 veces

Re: Primeros pasos para pogramar un emulador

Mensajepor PabloMarmol » 21 Oct 2018, 20:06


Avatar de Usuario
Bubu
Atari 1040 STf
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

Mensajepor Bubu » 21 Oct 2018, 20:47

Nada. Al compilar el fusetest.asm da error en el archivo tests.asm pues se define 2 veces la misma etiqueta: _data


Ya podían haber distribuido el fusetest.z80 compilado, y no el fuente pa tener que compilarlo, leñe.
Si algo funciona... ¡¡NO LO TOQUES!! ¡¡NI DE COÑA!!

ZX-81
Amstrad PCW 8256
Amstrad PCW 8256
Mensajes: 128
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: 27 veces
Contactar:

Re: Primeros pasos para pogramar un emulador

Mensajepor ZX-81 » 23 Oct 2018, 23:34

Ains, es lo que pasa por contestar de memoria. Está aquí: https://sourceforge.net/p/fuse-emulator ... /tree/z80/

y se llama coretest.c, y el fichero de pruebas está en el subdirectorio "test" con el nombre "tests.in".

El fusetest.asm forma parte de otros programas de test para el Spectrum, pero el coretest solo evalúa el core Z80, sin Spectrum que valga.

I'm sorry....
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
Bubu
Atari 1040 STf
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

Mensajepor Bubu » 23 Oct 2018, 23:44

Pero, torpedo, el coretest.c está en C, no en Z80. Lo que yo ando buscando es un pograma en lenguaje ensamblador del Z80 (un pograma en .z80, vaya) de tal manera que se lo trague direstamente el emulador que sea, y que en pantalla me diga si está emulando bien las instrucciones z80 o no.
Si algo funciona... ¡¡NO LO TOQUES!! ¡¡NI DE COÑA!!

Avatar de Usuario
chernandezba
Amstrad PCW 8256
Amstrad PCW 8256
Mensajes: 253
Registrado: 11 Mar 2015, 10:42
Sistema Favorito: Spectrum 16Kb/48Kb
primer_sistema: ZX81
consola_favorita: NeoGeo
Primera consola: Atari 2600
Gracias dadas: 12 veces
Gracias recibidas: 132 veces

Re: Primeros pasos para pogramar un emulador

Mensajepor chernandezba » 24 Oct 2018, 09:25

Bubu escribió:Pero, torpedo, el coretest.c está en C, no en Z80. Lo que yo ando buscando es un pograma en lenguaje ensamblador del Z80 (un pograma en .z80, vaya) de tal manera que se lo trague direstamente el emulador que sea, y que en pantalla me diga si está emulando bien las instrucciones z80 o no.



https://github.com/chernandezba/zesarux ... trum/tests
Los que empiezan con el nombre z80*

Mi preferido es el z80tests.tap
https://github.com/chernandezba/zesarux ... 0tests.tap
----

ZEsarUX
ZX Second-Emulator And Released for UniX
https://github.com/chernandezba/zesarux

ZX-81
Amstrad PCW 8256
Amstrad PCW 8256
Mensajes: 128
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: 27 veces
Contactar:

Re: Primeros pasos para pogramar un emulador

Mensajepor ZX-81 » 25 Oct 2018, 20:01

Bubu escribió:Pero, torpedo, el coretest.c está en C, no en Z80. Lo que yo ando buscando es un pograma en lenguaje ensamblador del Z80 (un pograma en .z80, vaya) de tal manera que se lo trague direstamente el emulador que sea, y que en pantalla me diga si está emulando bien las instrucciones z80 o no.


A ver, perlita de Huelva, olvídate del Spectrum de momento. Lo que tú necesitas ahora es algo que te permita probar tu core Z80 con independencia de todo lo demás. Casi todos los test basados en el Spectrum necesitan la ROM del Spectrum y si ni siquiera te arranca la ROM mal lo tienes.

La idea que te daba es que convirtieras el coretest de C a BASIC y que usaras el test.in para comprobar instrucción a instrucción, con independencia total de tu emulación básica del Spectrum, que a saber si está bien o no.

Otra opción es esta: https://github.com/jsanchezv/z80cpp/tree/master/example

Es un núcleo mínimo que permite ejecutar un programa de test escrito para CP/M... sin CP/M. Y con él ejecutas el programa ZEXALL.BIN que es un binario de Z80 tal y como lo necesita CP/M. Tendrías que convertir el programa z80sim.cpp de C++ a BASIC, unirlo a tu core Z80 y ejecutar el ZEXALL.BIN. Eso sí, te advierto que el test de Patrick Rak intenta ser (y es) una mejora sustancial al ZEXALL y su pareja ZEXDOC, siendo más fino y rápido. Pero el z80sim.cpp es muy simple, puedes implementarlo en BASIC en un pis-pas y al menos te dará una idea de en qué bloques de instrucciones tienes problemas. Una vez tengas un core Z80 mínimamente depurado, quizás puedas intentarlo con el test de Patrick.

O aislas las fuentes de los problemas o te volverás loco, avisado estás. :mrgreen:
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
Atari 1040 STf
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

Mensajepor Namek » 25 Oct 2018, 23:57

Para probar todos los posibles resultados de DAA:

org 30000
ld bc,0
ld de,0
loop:
push bc
pop af
daa
ld e,a
djnz loop
ret

Para ver las variantes con los flags C y H habria que cambiar el "ld bc,0" a 1 para C, a 16 para H y a 17 para C y H.

ZX81
MSX Turbo R
MSX Turbo R
Mensajes: 487
Registrado: 20 Abr 2005, 19:18
Gracias dadas: 3 veces

Re: Primeros pasos para pogramar un emulador

Mensajepor ZX81 » 31 Ago 2021, 18:30

Buenas,
Refloto este hilo por si alguien me puede echar un cable. Resulta que estoy intentando hacer un emulador básico, muy básico de Zx Spectrum en java, y estoy a ver si puedo terminar el tema del procesador z80, pero se resisten algunas instrucciones y al pasarle el test z80doc me salen varios errores, y uno de ellos que me trae por el camino de la amargura, que por más que reviso no veo donde está el fallo, es la instrucción Bit(número de bit , registro). Veo que aquí en el foro hay gente competente, que ya ha hecho un emulador de Spectrum y seguramente sepan orientarme que puede fallar.

El método es el siguiente:
// Verifica el bit b del registro r
public void bit(int bit, int registro) {
int reg = 0;
switch (registro) {
case A:
reg = leeA();
break;
case B:
reg = leeB();
break;
case C:
reg = leeC();
break;
case D:
reg = leeD();
break;
case E:
reg = leeE();
break;
case H:
reg = leeH();
break;
case L:
reg = leeL();
break;
case HL:
reg = Memoria.romRam[hl];
break;
case IX_D:
reg = Memoria.romRam[ix + desp];
break;
case IY_D:
reg = Memoria.romRam[iy + desp];
break;
}
flagsXY(reg);
for (int n = 0; n < bit; n++) {
reg = reg >> 1;
}
reg = reg & 1;
if (reg == 0) {
setZFlag();
setPVFlag();//Flag P/V efecto no documentado manual Sean Young
} else {
ceroZFlag();
ceroPVFlag();//Flag P/V efecto no ducumentado manual Sean Young
}
setHFlag();
ceroNFlag();
}



Gracias.
Adjuntos
errorBit.PNG
errorBit.PNG (11.32 KiB) Visto 4113 veces
10 REM ESTA LINEA NO HACE NADA


Volver a “Emuladores”

¿Quién está conectado?

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