In /cpu_z80.c fix a bug with jp (hl), jp (ix), jp (iy), makes mbasic.ihx work
authorNick Downing <nick@ndcode.org>
Mon, 1 Dec 2025 12:39:04 +0000 (23:39 +1100)
committerNick Downing <nick@ndcode.org>
Mon, 1 Dec 2025 13:11:43 +0000 (00:11 +1100)
cpu_z80.c
emu_z80.c

index 50b1ebd..e312c74 100644 (file)
--- a/cpu_z80.c
+++ b/cpu_z80.c
@@ -786,7 +786,7 @@ void cpu_z80_execute(struct cpu_z80 *self) {
     cpu_z80_ret(self, self->regs.bit.pvf);
     break;
   case 0xe9:
-    cpu_z80_jp(self, true, cpu_z80_read_word(self, self->regs.word.hl));
+    cpu_z80_jp(self, true, self->regs.word.hl);
     break;
   case 0xea:
     cpu_z80_jp(self, self->regs.bit.pvf, cpu_z80_fetch_word(self));
@@ -2337,7 +2337,7 @@ void cpu_z80_execute_dd(struct cpu_z80 *self) {
     cpu_z80_ret(self, self->regs.bit.pvf);
     break;
   case 0xe9:
-    cpu_z80_jp(self, true, cpu_z80_read_word(self, self->regs.word.ix));
+    cpu_z80_jp(self, true, self->regs.word.ix);
     break;
   case 0xea:
     cpu_z80_jp(self, self->regs.bit.pvf, cpu_z80_fetch_word(self));
@@ -4662,7 +4662,7 @@ void cpu_z80_execute_fd(struct cpu_z80 *self) {
     cpu_z80_ret(self, self->regs.bit.pvf);
     break;
   case 0xe9:
-    cpu_z80_jp(self, true, cpu_z80_read_word(self, self->regs.word.iy));
+    cpu_z80_jp(self, true, self->regs.word.iy);
     break;
   case 0xea:
     cpu_z80_jp(self, self->regs.bit.pvf, cpu_z80_fetch_word(self));
index 95e7fd4..838bd24 100644 (file)
--- a/emu_z80.c
+++ b/emu_z80.c
@@ -188,6 +188,7 @@ int bdos(int a, int c, int de, uint16_t *hl) {
       break;
     }
     break;
+#if 0 // unlike MS-DOS version, the CP/M BASIC-80 uses direct BIOS calls
   case 6:
     // Direct console I/O
     de &= 0xff;
@@ -220,6 +221,7 @@ int bdos(int a, int c, int de, uint16_t *hl) {
       break;
     }
     break;
+#endif
   case 9:
     // Display string
     for (int data; (data = mem[de]) != '$'; de = (de + 1) & 0xffff)