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
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, 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
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 » 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
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 » 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
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 » 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: 793
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: 9 veces
Gracias recibidas: 47 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
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 » 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!!


Volver a “Emuladores”

¿Quién está conectado?

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