En mi búsqueda de demos técnicas para ir programando el emulador encontré una llamada ZEXALL (Z80 Exerciser), un programa de prueba para testear los procesadores Z80 adaptada a la Master System.

Viene en dos versiones, una que va mostrando los gráficos por la pantalla de la consola y otra que saca los datos a través de unos puertos de entrada/salida determinados definidos en un estandar llamado SDSC Debug Console.

Como la implementación del VDP (el procesador gráfico de la Master System) me llevará un tiempo y estaba ansioso por probar esta demo me he puesto a implementar la consola de depuración antes mencionada.

Esta demo hace unas pruebas exhaustivas (algunas de las cuales tardan más de una hora en una Master System real), así que me viene de perlas para ver qué instrucciones tengo que revisar para corregir errores.

La primera pasada ha sido relativamente esperanzadora, la verdad es que pensé que no pasaría ninguna prueba.

Os dejo el resultado a día de hoy (todo lo que sale debajo de los guiones lo escribe el programa a través del puerto 0xFD):


SDSC Terminal de depuracion.
----------------------------
Z80 instruction exerciser

ld hl,(nnnn).................OK
ld sp,(nnnn).................OK
ld (nnnn),hl.................OK
ld (nnnn),sp.................OK
ld <bc,de>,(nnnn)............OK
ld <ix,iy>,(nnnn)............OK
ld <ix,iy>,nnnn..............OK
ld (<ix,iy>+1),nn............OK
ld <ixh,ixl,iyh,iyl>,nn......OK
ld a,(nnnn) / ld (nnnn),a....OK
ldd<r> (1)...................OK
ldd<r> (2)...................OK
ldi<r> (1)...................OK
ldi<r> (2)...................OK
ld a,<(bc),(de)>.............OK
ld (nnnn),<ix,iy>............OK
ld <bc,de,hl,sp>,nnnn........OK
ld <b,c,d,e,h,l,(hl),a>,nn...OK
ld (nnnn),<bc,de>............OK
ld (<bc,de>),a...............OK
ld (<ix,iy>+1),a.............OK
ld a,(<ix,iy>+1).............OK
shf/rot (<ix,iy>+1)..........OK
ld <h,l>,(<ix,iy>+1).........OK
ld (<ix,iy>+1),<h,l>.........OK
ld <b,c,d,e>,(<ix,iy>+1).....OK
ld (<ix,iy>+1),<b,c,d,e>.....OK
<inc,dec> c.................. CRC:e70a003c expected:c284554c
<inc,dec> de.................OK
<inc,dec> hl.................OK
<inc,dec> ix.................OK
<inc,dec> iy.................OK
<inc,dec> sp.................OK
<set,res> n,(<ix,iy>+1)......OK
bit n,(<ix,iy>+1)............ CRC:7e74acf0 expected:55c9ea76
<inc,dec> a.................. CRC:336713ec expected:d18815a4
<inc,dec> b.................. CRC:020c0249 expected:5f682264
<inc,dec> bc.................OK
<inc,dec> d.................. CRC:ec6470d5 expected:4523de10
<inc,dec> e.................. CRC:568caa00 expected:e175afcc
<inc,dec> h.................. CRC:60f7bc16 expected:1ced847d
<inc,dec> l.................. CRC:157d25f2 expected:56cd06f3
<inc,dec> (hl)............... CRC:e13645be expected:46761d6b
<inc,dec> ixh................OK
<inc,dec> ixl................OK
<inc,dec> iyh................OK
<inc,dec> iyl................OK
ld <bcdehla>,<bcdehla>.......OK
cpd<r>.......................OK
cpi<r>.......................OK
<inc,dec> (<ix,iy>+1)........ CRC:d38fd00d expected:8897c715
<rlca,rrca,rla,rra>..........OK
shf/rot <b,c,d,e,h,l,(hl),a>.OK
ld <bcdexya>,<bcdexya>.......OK
<rrd,rld>....................OK
<set,res> n,<bcdehl(hl)a>....OK
neg..........................OK
add hl,<bc,de,hl,sp>.........OK
add ix,<bc,de,ix,sp>.........OK
add iy,<bc,de,iy,sp>.........OK
aluop a,nn................... CRC:35dddc1a expected:48799360
<adc,sbc> hl,<bc,de,hl,sp>... CRC:c7790b9c expected:f39089a0
bit n,<b,c,d,e,h,l,(hl),a>... CRC:71aea11b expected:4b37451d
<daa,cpl,scf,ccf>............ CRC:c29d3dbb expected:9b4ba675
aluop a,(<ix,iy>+1).......... CRC:14534fa8 expected:2bc2d52d
aluop a,<ixh,ixl,iyh,iyl>.... CRC:91ed0c17 expected:a4026d5a
aluop a,<b,c,d,e,h,l,(hl),a>. CRC:42f631aa expected:5ddf949b