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
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 » 03 Oct 2018, 23:41

Jaaaarl, pero eso no se pué generalizar pal resto de BITs, p.ej. con BIT 6 no podrá hacer:

flag_z = (registro < 64)


De la manera corresta es:

Código: Seleccionar todo

flag_z = ((registro AND 64) = 0)


:lol:
Si algo funciona... ¡¡NO LO TOQUES!! ¡¡NI DE COÑA!!

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 » 04 Oct 2018, 08:15

Ya se que no se puede generalizar, pero para el bit 7 te ahorras código... :mrgreen:

Yo tengo el problema de que cuando intento hacer PRINT de un número mayor de 65535 me saca el error "6 Number too big, 0:1". Supongo que sera algun bug en la suma/resta de 16 bits... :roll:

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 » 04 Oct 2018, 10:03

Namek escribió:Ya se que no se puede generalizar, pero para el bit 7 te ahorras código... :mrgreen:


Es que el código que estoy haciendo está muy estructurado y generalizado. P.ej. para lo del BIT hago algo tal que así:

Código: Seleccionar todo

FUNCTION (registro, bit)
mask = (2 EXP bit)
result = registro AND mask
flag_z = (result = 0)
END FUNCTION



Namek escribió:Yo tengo el problema de que cuando intento hacer PRINT de un número mayor de 65535 me saca el error "6 Number too big, 0:1". Supongo que sera algun bug en la suma/resta de 16 bits... :roll:


Oño, qué arte, has creado un BASIC con aritmética de 16 bits :D Pos eso sí que es raro. Si lo resuelves cuenta por aquí porfaplís qué era, por curiosidad...
¿Qué te pasa si pones PRINT 100000-100000?
Si algo funciona... ¡¡NO LO TOQUES!! ¡¡NI DE COÑA!!

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 » 07 Oct 2018, 19:33

Torpedos, tengo una duda con el tratamiento de las interrursiones. Estoy tratando de emular IM1 e IM2. Sé que con DI se inhiben (IFF1=0) y con EI se habilitan (IFF1=1). Sé que cuando se habilita IM1 la ULA, una vez terminada la pantalla, hace saltar al Z80 a 0x0038. Sé que cuando se habilita IM2 la ULA, una vez terminada la pantalla, hace saltar al Z80 a la dirersión apuntada por I*256 (con las paranoias del array de 257 posiciones con el mismo byte, etc, etc).
Sé que RET y RETI retornan de la rutina de interrursión, a la rutina principal que se interrumpió.

Mi duda es: cuando el Z80 tiene las interrursiones habilitadas, esto es, IFF1=1, ¿cómo sabe si está en modo IM1 ó IM2?
Si algo funciona... ¡¡NO LO TOQUES!! ¡¡NI DE COÑA!!

Avatar de Usuario
dondiego
Atari 1040 STf
Atari 1040 STf
Mensajes: 984
Registrado: 30 May 2013, 22:05
Sistema Favorito: PC
primer_sistema: Spectrum 16Kb/48Kb
consola_favorita: Sony PlayStation 2
Primera consola: Atari 2600
Ubicación: Granada
Gracias dadas: 14 veces
Gracias recibidas: 72 veces

Re: Primeros pasos para pogramar un emulador

Mensajepor dondiego » 07 Oct 2018, 20:00

Todo esto me recuerda cuando jugaba al JPP en mi 486, emulador rudimentario y primigenio. Curiosamente no probé el spectrum de pedro gimeno entonces, pirateao por la pcmania y que fue el primero. Herejia.

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 » 07 Oct 2018, 20:05

Bueno, leyendo y releyendo he descubrido que el Z80 contiene un par de flip-flops llamado IMF_a e IMF_b, de tal manera que:

IMF_a=0 IMF_b=0 -> IM0
IMF_a=0 IMF_b=1 -> [no se usa, qué curioso...]
IMF_a=1 IMF_b=0 -> IM1
IMF_a=1 IMF_b=1 -> IM2

Así lo he implementado en el emulador, y ya está, ya tengo las interrursiones carburando :D
Si algo funciona... ¡¡NO LO TOQUES!! ¡¡NI DE COÑA!!

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 » 19 Oct 2018, 23:49

Pues resulta que no consigo emular bien la ROM del Spectrum com mi emulador, así que voy a fabricarme un pograma TEST que ejecute una a una y en orden todas las instrucciones del Z80:


Código: Seleccionar todo


; PROGRAMA PARA PROBAR LAS TOTALIDAD DE LAS INSTRUCCIONES Z80
; Se asumen los siguientes valores:
; AF=0x0123   AF'=0x3210
; BC=0x4567 BC'=0x7654
; DE=0x89AB   DE'=0xBA98
; HL=0xCDEF HL'=0xFEDC

   nop
   ld bc, 0xFEDC
   ld (bc), a
   inc bc
   inc b
   dec b
   ld b, 0xBA
   rlca
   ex af, af'
   add hl, bc
   ld a, (bc)
   dec bc
   inc c
   dec c
   ld c, 0x98
p01:
   rrca
   djnz p01
   ld de, 0x7654
   ld (de), a
   inc de
   inc d
   dec d
   ld d, 0x32
   rla
   jr p02
p02:
   add hl, de
   ld a, (de)
   dec de
   inc e
   dec e
   ld e, 0x10
   rra

etc
etc



Lo lanzaré contra el ZxSpin y a ver con qué valores terminan todos los registros, y los compararé contra mi emulador, jiji.
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 » 20 Oct 2018, 02:08

Ya hay tests creados para comprobar que el z80 "vaya bien".
Por ejemplo los que creó Patrik Rak.
https://www.dropbox.com/s/33he0chzu6v7x ... 0.zip?dl=0

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 » 20 Oct 2018, 21:58

Jop, si es que lo que no esté ya inventao... :D



Acabo de lanzar el test básico z80doc contra el ZxSpin, y ¡¡falla la instrucción DAA!! ¿Cómo es posible que el ZxSpin no emule bien esta instrucción? No pué ser...
Si algo funciona... ¡¡NO LO TOQUES!! ¡¡NI DE COÑA!!

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, 00:05

Esta noche hi estao catando el test del Patrik Rak, pero resulta que usa la ROM del Spectrum a jierro para mostrar mensajes en pantalla, y claro, así cómo voy a catar la emulación si para el test se necesita que funcione la emulación, AjAJJAjAJJA.
Me tengo que buscar otra cosa...
Si algo funciona... ¡¡NO LO TOQUES!! ¡¡NI DE COÑA!!


Volver a “Emuladores”

¿Quién está conectado?

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