Página 12 de 13

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

Re: Primeros pasos para pogramar un emulador

Publicado: 19 Oct 2018, 23:49
por Bubu
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.

Re: Primeros pasos para pogramar un emulador

Publicado: 20 Oct 2018, 02:08
por PabloMarmol
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

Re: Primeros pasos para pogramar un emulador

Publicado: 20 Oct 2018, 21:58
por Bubu
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...

Re: Primeros pasos para pogramar un emulador

Publicado: 21 Oct 2018, 00:05
por Bubu
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...