Página 12 de 12

Re: Primeros pasos para pogramar un emulador

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

Re: Primeros pasos para pogramar un emulador

Publicado: 04 Oct 2018, 08:15
por Namek
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:

Re: Primeros pasos para pogramar un emulador

Publicado: 04 Oct 2018, 10:03
por Bubu
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?

Re: Primeros pasos para pogramar un emulador

Publicado: 07 Oct 2018, 19:33
por Bubu
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?

Re: Primeros pasos para pogramar un emulador

Publicado: 07 Oct 2018, 20:00
por dondiego
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.

Re: Primeros pasos para pogramar un emulador

Publicado: 07 Oct 2018, 20:05
por Bubu
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