#include "simh/PDP11/pdp11_defs.h"
#include "simh/PDP11/pdp11_cpumod.h"
#undef fprintf
-extern int32 R[8]; /* working registers */
+extern int32 REGFILE[6][2]; /* R0-R5, two sets */
+extern int32 STACKFILE[4]; /* SP, four modes */
+extern int32 saved_PC; /* program counter */
extern int32 PSW; /* PSW */
t_stat cpu_reset (DEVICE *dptr);
#else
#define REG_TRACE 1
#define MEM_TRACE 1
-#define MEM_SIZE 0x8000
+#define MEM_SIZE 0x4000
#if __BYTE_ORDER == __BIG_ENDIAN
#define MEM_SIZE_M1 (MEM_SIZE - 1)
#define MEM_SIZE_M2 (MEM_SIZE - 2)
checksum -= buf[len - 1];
fprintf(
stderr,
- "checksum %02x, should be %02x\n",
+ "checksum %03o, should be %03o\n",
checksum,
buf[len - 1]
);
break;
default:
if (addr < 0 || addr >= MEM_SIZE) {
- fprintf(stderr, "invalid read byte: %04x\n", addr);
+ fprintf(stderr, "invalid read byte: %06o\n", addr);
data = 0xff;
}
else
break;
}
#if MEM_TRACE
- fprintf(stderr, "addr=%04x rd=%02x\n", addr, data);
+ fprintf(stderr, "addr=%06o rd=%03o\n", addr, data);
#endif
return data;
}
int read_word(void *context, int addr) {
int data;
if (addr < 0 || addr >= MEM_SIZE || (addr & 1)) {
- fprintf(stderr, "invalid read word: %04x\n", addr);
+ fprintf(stderr, "invalid read word: %06o\n", addr);
if (addr & 1)
exit(EXIT_FAILURE);
data = 0xffff;
else
data = mem.w[(addr ^ MEM_SIZE_M2) >> 1];
#if MEM_TRACE
- fprintf(stderr, "addr=%04x rd=%04x\n", addr, data);
+ fprintf(stderr, "addr=%06o rd=%06o\n", addr, data);
#endif
return data;
}
void write_byte(void *context, int addr, int data) {
#if MEM_TRACE
- fprintf(stderr, "addr=%04x wr=%02x\n", addr, data);
+ fprintf(stderr, "addr=%06o wr=%03o\n", addr, data);
#endif
switch (addr) {
case 0xf000:
break;
default:
if (addr < 0 || addr >= MEM_SIZE)
- fprintf(stderr, "invalid write byte: %04x\n", addr);
+ fprintf(stderr, "invalid write byte: %06o\n", addr);
else
mem.b[addr ^ MEM_SIZE_M1] = data;
}
void write_word(void *context, int addr, int data) {
#if MEM_TRACE
- fprintf(stderr, "addr=%04x wr=%04x\n", addr, data);
+ fprintf(stderr, "addr=%06o wr=%06o\n", addr, data);
#endif
if (addr < 0 || addr >= MEM_SIZE || (addr & 1)) {
- fprintf(stderr, "invalid write word: %04x\n", addr);
+ fprintf(stderr, "invalid write word: %06o\n", addr);
if (addr & 1)
exit(EXIT_FAILURE);
}
printf("usage: %s image.ihx\n", argv[0]);
exit(EXIT_FAILURE);
}
- load_ihx(argv[1]);
+ int entry_point = load_ihx(argv[1]);
#if 0
// emulate Tutor firmware for TBI68K
#if ALT_BACKEND
cpu_reset(NULL);
+ saved_PC = entry_point;
while (true) {
#if REG_TRACE
fprintf(
stderr,
- "pc=%04x r0=%04x r1=%04x r2=%04x r3=%04x r4=%04x r5=%04x sp=%04x psw=%04x nf=%d zf=%d vf=%d cf=%d\n",
- R[7],
- R[0],
- R[1],
- R[2],
- R[3],
- R[4],
- R[5],
- R[6],
+ "pc=%06o r0=%06o r1=%06o r2=%06o r3=%06o r4=%06o r5=%06o sp=%06o psw=%06o nf=%d zf=%d vf=%d cf=%d\n",
+ saved_PC,
+ REGFILE[0][0],
+ REGFILE[1][0],
+ REGFILE[2][0],
+ REGFILE[3][0],
+ REGFILE[4][0],
+ REGFILE[5][0],
+ STACKFILE[MD_KER],
PSW,
(PSW >> PSW_V_N) & 1,
(PSW >> PSW_V_Z) & 1,
#if REG_TRACE
fprintf(
stderr,
- "pc=%04x a=%02x b=%02x s=%04x x=%04x p=%02x hf=%d if=%d nf=%d zf=%d vf=%d cf=%d\n",
+ "pc=%06o a=%03o b=%03o s=%06o x=%06o p=%03o hf=%d if=%d nf=%d zf=%d vf=%d cf=%d\n",
cpu.regs.word.pc,
cpu.regs.byte.a,
cpu.regs.byte.b,