ref: 764237f1d6ba9f85bff5196b7c5a52945d8eb76e
parent: 8c38c2248ef182ff9a1b8e5dd196eb4371d60848
author: Jean-André Santoni <jean.andre.santoni@gmail.com>
date: Sat Jul 13 13:54:43 EDT 2024
Perform 0xdb on 2 cycles
--- a/mem.c
+++ b/mem.c
@@ -39,7 +39,7 @@
uint8_t
z80read(uint16_t a)
{- // printf("z80read %x\n", a);+ printf("z80read %x\n", a);uint16_t v;
if (a < 0x400)
@@ -63,7 +63,7 @@
void
z80write(uint16_t a, uint8_t v)
{- // printf("z80write %x %x\n", a, v);+ printf("z80write %x %x\n", a, v);if (a < 0x8000)
printf("wrong z80write page 0 or 1 %x %x\n", a, v);else if (a < 0xC000)
@@ -114,7 +114,7 @@
uint8_t
z80in(uint8_t port)
{- // printf("z80in %x\n", port);+ printf("z80in %x\n", port);if (port < 0x40)
return 0xff;
else if (port >= 0x40 && port < 0x80)
@@ -137,8 +137,7 @@
void
z80out(uint8_t port, uint8_t v)
{- // printf("z80out %x %x\n", port, v);-
+ printf("z80out %x %x\n", port, v); if (port < 0x40){ printf(" write to control register\n");if ((port & 0x01) == 0x00)
--- a/z80.c
+++ b/z80.c
@@ -11,6 +11,7 @@
uint16_t ix[2] = {0xFFFF, 0xFFFF};uint16_t pc, curpc, sp;
int halt;
+int inplast;
enum {FLAGC = 0x01,
@@ -664,10 +665,10 @@
}
}
curpc = pc;
- if(0)
+ if(1)
printf("%x AF %.2x%.2x BC %.2x%.2x DE %.2x%.2x HL %.2x%.2x IX %.4x IY %.4x\n", curpc, s[rA], s[rF], s[rB], s[rC], s[rD], s[rE], s[rH], s[rL], ix[0], ix[1]);op = fetch8();
- // printf("op: %x\n", op);+ printf("op: %x\n", op); switch(op >> 6){case 1: return move(op >> 3 & 7, op & 7);
case 2: return alu(op >> 3 & 7, op & 7);
@@ -840,7 +841,9 @@
case 0xea: return jump((s[rF] & FLAGV) != 0);
case 0xfa: return jump((s[rF] & FLAGS) != 0);
case 0xcb: return bits(-1);
- case 0xdb: s[rA] = z80in(fetch8()); return 11;
+ case 0xdb:
+ if(inplast){ s[rA] = z80in(fetch8()); inplast = 0; return 10;+ }else{ pc--; inplast = 1; return 1; }case 0xeb:
v = DE();
s[rD] = s[rH];
--
⑨