From d37736ddd2ca67b7dc1a978df62039d52bf6fe50 Mon Sep 17 00:00:00 2001 From: Nick Downing Date: Thu, 4 Dec 2025 21:08:52 +1100 Subject: [PATCH] Add /msbasic.ihx.patch which comments out a particular call to direct console I/O in order to defeat Ctrl-C checking (makes the new msbasic_test script work), also fix incorrect checksum error report in all emu_*.c for *.ihx, *.s19 (the new way prints what the last byte of the line should be, to aid manual patching) --- .gitignore | 1 + Makefile | 4 +++- emu_65c02.c | 5 ++--- emu_6800.c | 5 ++--- emu_68000.c | 5 ++--- emu_6809.c | 5 ++--- emu_8080.c | 5 ++--- emu_8086.c | 9 +++------ emu_mips.c | 5 ++--- emu_pdp11.c | 7 +++---- emu_z80.c | 5 ++--- msbasic.ihx.patch | 11 +++++++++++ 12 files changed, 35 insertions(+), 32 deletions(-) create mode 100644 msbasic.ihx.patch diff --git a/.gitignore b/.gitignore index fa5bbaa..ca2aabc 100644 --- a/.gitignore +++ b/.gitignore @@ -24,3 +24,4 @@ /emu_pdp11_alt /emu_z80 /emu_z80_alt +/msbasic.ihx.orig diff --git a/Makefile b/Makefile index f8c5409..7d7b3f9 100644 --- a/Makefile +++ b/Makefile @@ -201,10 +201,12 @@ emu_8086_alt.o: emu_8086.c virtualxt/lib/vxt/cpu.h vxt_cpu.o: virtualxt/lib/vxt/cpu.c virtualxt/lib/vxt/cpu.h ${CC} ${CFLAGS} ${ALT_8086_CFLAGS} -o $@ -c $< -msbasic.ihx: msbasic.com +msbasic.ihx: msbasic.com msbasic.ihx.patch ${BIN2HEX} --offset=0x600 $< __temp__.ihx ./entry_point.py 0x50:0x100 __temp__.ihx $@ rm __temp__.ihx + cp $@ $@.orig + patch $@ <$@.patch # MIPS emu_mips: emu_mips.o cpu_mips.o diff --git a/emu_65c02.c b/emu_65c02.c index c9134e2..555e2b0 100644 --- a/emu_65c02.c +++ b/emu_65c02.c @@ -73,12 +73,11 @@ int load_ihx(char *name) { for (int i = 0; i < len; ++i) checksum += buf[i]; if (checksum) { - checksum -= buf[len - 1]; fprintf( stderr, "checksum %02x, should be %02x\n", - checksum, - buf[len - 1] + buf[len - 1], + (buf[len - 1] - checksum) & 0xff ); exit(EXIT_FAILURE); } diff --git a/emu_6800.c b/emu_6800.c index 09bb150..20d7064 100644 --- a/emu_6800.c +++ b/emu_6800.c @@ -67,12 +67,11 @@ void load_s19(char *name) { for (int i = 0; i < len; ++i) checksum += buf[i]; if (checksum != 0xff) { - checksum -= 0xff + buf[len - 1]; fprintf( stderr, "checksum %02x, should be %02x\n", - checksum, - buf[len - 1] + buf[len - 1], + (buf[len - 1] + 0xff - checksum) & 0xff ); exit(EXIT_FAILURE); } diff --git a/emu_68000.c b/emu_68000.c index f4f2108..ff78f84 100644 --- a/emu_68000.c +++ b/emu_68000.c @@ -81,12 +81,11 @@ void load_s19(char *name) { for (int i = 0; i < len; ++i) checksum += buf[i]; if (checksum != 0xff) { - checksum -= 0xff + buf[len - 1]; fprintf( stderr, "checksum %02x, should be %02x\n", - checksum, - buf[len - 1] + buf[len - 1], + (buf[len - 1] + 0xff - checksum) & 0xff ); exit(EXIT_FAILURE); } diff --git a/emu_6809.c b/emu_6809.c index 9ff627f..def3d62 100644 --- a/emu_6809.c +++ b/emu_6809.c @@ -74,12 +74,11 @@ int load_ihx(char *name) { for (int i = 0; i < len; ++i) checksum += buf[i]; if (checksum) { - checksum -= buf[len - 1]; fprintf( stderr, "checksum %02x, should be %02x\n", - checksum, - buf[len - 1] + buf[len - 1], + (buf[len - 1] - checksum) & 0xff ); exit(EXIT_FAILURE); } diff --git a/emu_8080.c b/emu_8080.c index 27c6b50..c220af6 100644 --- a/emu_8080.c +++ b/emu_8080.c @@ -115,12 +115,11 @@ int load_ihx(char *name) { for (int i = 0; i < len; ++i) checksum += buf[i]; if (checksum) { - checksum -= buf[len - 1]; fprintf( stderr, "checksum %02x, should be %02x\n", - checksum, - buf[len - 1] + buf[len - 1], + (buf[len - 1] - checksum) & 0xff ); exit(EXIT_FAILURE); } diff --git a/emu_8086.c b/emu_8086.c index b7e31ca..c130fe5 100644 --- a/emu_8086.c +++ b/emu_8086.c @@ -79,12 +79,11 @@ int load_ihx(char *name) { for (int i = 0; i < len; ++i) checksum += buf[i]; if (checksum) { - checksum -= buf[len - 1]; fprintf( stderr, "checksum %02x, should be %02x\n", - checksum, - buf[len - 1] + buf[len - 1], + (buf[len - 1] - checksum) & 0xff ); exit(EXIT_FAILURE); } @@ -397,10 +396,8 @@ int main(int argc, char **argv) { if ( (cpu.regs.ip == 0 && cpu.regs.cs == code_segment) || (cpu.regs.ip == 0 && cpu.regs.cs == 0x40) - ) { - putchar('\n'); + ) break; - } if (cpu.regs.ip == 5 && cpu.regs.cs == code_segment) { bool zf = (cpu.regs.flags >> 6) & 1; cpu.regs.ax = msdos(cpu.regs.cl << 8, cpu.regs.dx, cpu.regs.ds, &zf); diff --git a/emu_mips.c b/emu_mips.c index ff55124..19deb72 100644 --- a/emu_mips.c +++ b/emu_mips.c @@ -91,12 +91,11 @@ int load_ihx(char *name) { for (int i = 0; i < len; ++i) checksum += buf[i]; if (checksum) { - checksum -= buf[len - 1]; fprintf( stderr, "checksum %02x, should be %02x\n", - checksum, - buf[len - 1] + buf[len - 1], + (buf[len - 1] - checksum) & 0xff ); exit(EXIT_FAILURE); } diff --git a/emu_pdp11.c b/emu_pdp11.c index d6f956d..e21a55a 100644 --- a/emu_pdp11.c +++ b/emu_pdp11.c @@ -94,12 +94,11 @@ int load_ihx(char *name) { for (int i = 0; i < len; ++i) checksum += buf[i]; if (checksum) { - checksum -= buf[len - 1]; fprintf( stderr, - "checksum %03o, should be %03o\n", - checksum, - buf[len - 1] + "checksum %02x, should be %02x\n", + buf[len - 1], + (buf[len - 1] - checksum) & 0xff ); exit(EXIT_FAILURE); } diff --git a/emu_z80.c b/emu_z80.c index bb8ae1c..67c8058 100644 --- a/emu_z80.c +++ b/emu_z80.c @@ -115,12 +115,11 @@ int load_ihx(char *name) { for (int i = 0; i < len; ++i) checksum += buf[i]; if (checksum) { - checksum -= buf[len - 1]; fprintf( stderr, "checksum %02x, should be %02x\n", - checksum, - buf[len - 1] + buf[len - 1], + (buf[len - 1] - checksum) & 0xff ); exit(EXIT_FAILURE); } diff --git a/msbasic.ihx.patch b/msbasic.ihx.patch new file mode 100644 index 0000000..254d1da --- /dev/null +++ b/msbasic.ihx.patch @@ -0,0 +1,11 @@ +--- msbasic.ihx.orig 2025-12-04 20:58:52.992416885 +1100 ++++ msbasic.ihx 2025-12-04 20:58:47.592416599 +1100 +@@ -1077,7 +1077,7 @@ + :10493000FF263C0150535152F6063201FF7407C660 + :1049400006320100EB58FE0E0501753FC606050153 + :1049500005EB1050535152A03201C6063201000A35 +-:10496000C07516E87B3574233C03740D3C13740C3E ++:10496000C07516909090EB233C03740D3C13740CAF + :1049700050E8FCE9587414EB08E83700E81100EB44 + :104980000A56BE7601E874005EEBD85A595B58C3EC + :104990003C137503E825353C037542E832ECE840EA -- 2.34.1