PDP8: Fix Boot doesn't work if IB or saved_DF are previously set wrong (#72). From Bob Supnik

All bootstraps now pass this test case:

d pc 77777
boot <device>
This commit is contained in:
Mark Pizzolato 2013-09-18 11:11:10 -07:00
parent 735c589d07
commit 6d8565dc94
11 changed files with 63 additions and 43 deletions

View file

@ -1,6 +1,6 @@
/* pdp8_cpu.c: PDP-8 CPU simulator /* pdp8_cpu.c: PDP-8 CPU simulator
Copyright (c) 1993-2011, Robert M Supnik Copyright (c) 1993-2013, Robert M Supnik
Permission is hereby granted, free of charge, to any person obtaining a Permission is hereby granted, free of charge, to any person obtaining a
copy of this software and associated documentation files (the "Software"), copy of this software and associated documentation files (the "Software"),
@ -25,6 +25,7 @@
cpu central processor cpu central processor
17-Sep-13 RMS Fixed boot in wrong field problem (Dave Gesswein)
28-Apr-07 RMS Removed clock initialization 28-Apr-07 RMS Removed clock initialization
30-Oct-06 RMS Added idle and infinite loop detection 30-Oct-06 RMS Added idle and infinite loop detection
30-Sep-06 RMS Fixed SC value after DVI overflow (Don North) 30-Sep-06 RMS Fixed SC value after DVI overflow (Don North)
@ -323,7 +324,8 @@ t_stat reason;
/* Restore register state */ /* Restore register state */
if (build_dev_tab ()) return SCPE_STOP; /* build dev_tab */ if (build_dev_tab ()) /* build dev_tab */
return SCPE_STOP;
PC = saved_PC & 007777; /* load local copies */ PC = saved_PC & 007777; /* load local copies */
IF = saved_PC & 070000; IF = saved_PC & 070000;
DF = saved_DF & 070000; DF = saved_DF & 070000;
@ -1366,6 +1368,15 @@ sim_brk_types = sim_brk_dflt = SWMASK ('E');
return SCPE_OK; return SCPE_OK;
} }
/* Set PC for boot (PC<14:12> will typically be 0) */
void cpu_set_bootpc (int32 pc)
{
saved_PC = pc; /* set PC, IF */
saved_DF = IB = pc & 070000; /* set IB, DF */
return;
}
/* Memory examine */ /* Memory examine */
t_stat cpu_ex (t_value *vptr, t_addr addr, UNIT *uptr, int32 sw) t_stat cpu_ex (t_value *vptr, t_addr addr, UNIT *uptr, int32 sw)

View file

@ -1,6 +1,6 @@
/* pdp8_ct.c: PDP-8 cassette tape simulator /* pdp8_ct.c: PDP-8 cassette tape simulator
Copyright (c) 2006-2011, Robert M Supnik Copyright (c) 2006-2013, Robert M Supnik
Permission is hereby granted, free of charge, to any person obtaining a Permission is hereby granted, free of charge, to any person obtaining a
copy of this software and associated documentation files (the "Software"), copy of this software and associated documentation files (the "Software"),
@ -25,9 +25,10 @@
ct TA8E/TU60 cassette tape ct TA8E/TU60 cassette tape
17-Sep-07 RMS Changed to use central set_bootpc routine
13-Aug-07 RMS Fixed handling of BEOT 13-Aug-07 RMS Fixed handling of BEOT
06-Aug-07 RMS Foward op at BOT skips initial file gap 06-Aug-07 RMS Foward op at BOT skips initial file gap
30-May-2007 RMS Fixed typo (Norm Lastovica) 30-May-07 RMS Fixed typo (Norm Lastovica)
Magnetic tapes are represented as a series of variable records Magnetic tapes are represented as a series of variable records
of the form: of the form:
@ -718,13 +719,12 @@ static const uint16 boot_rom[] = {
t_stat ct_boot (int32 unitno, DEVICE *dptr) t_stat ct_boot (int32 unitno, DEVICE *dptr)
{ {
size_t i; size_t i;
extern int32 saved_PC;
extern uint16 M[]; extern uint16 M[];
if ((ct_dib.dev != DEV_CT) || unitno) /* only std devno */ if ((ct_dib.dev != DEV_CT) || unitno) /* only std devno */
return STOP_NOTSTD; return STOP_NOTSTD;
for (i = 0; i < BOOT_LEN; i++) for (i = 0; i < BOOT_LEN; i++)
M[BOOT_START + i] = boot_rom[i]; M[BOOT_START + i] = boot_rom[i];
saved_PC = BOOT_START; cpu_set_bootpc (BOOT_START);
return SCPE_OK; return SCPE_OK;
} }

View file

@ -1,6 +1,6 @@
/* pdp8_defs.h: PDP-8 simulator definitions /* pdp8_defs.h: PDP-8 simulator definitions
Copyright (c) 1993-2012, Robert M Supnik Copyright (c) 1993-2013, Robert M Supnik
Permission is hereby granted, free of charge, to any person obtaining a Permission is hereby granted, free of charge, to any person obtaining a
copy of this software and associated documentation files (the "Software"), copy of this software and associated documentation files (the "Software"),
@ -23,8 +23,9 @@
used in advertising or otherwise to promote the sale, use or other dealings used in advertising or otherwise to promote the sale, use or other dealings
in this Software without prior written authorization from Robert M Supnik. in this Software without prior written authorization from Robert M Supnik.
18-Sep-13 RMS Added set_bootpc prototype
18-Apr-12 RMS Removed separate timer for additional terminals; 18-Apr-12 RMS Removed separate timer for additional terminals;
added clock_cosched prototype Added clock_cosched prototype
22-May-10 RMS Added check for 64b definitions 22-May-10 RMS Added check for 64b definitions
21-Aug-07 RMS Added FPP8 support 21-Aug-07 RMS Added FPP8 support
13-Dec-06 RMS Added TA8E support 13-Dec-06 RMS Added TA8E support
@ -210,4 +211,6 @@ typedef struct {
t_stat set_dev (UNIT *uptr, int32 val, char *cptr, void *desc); t_stat set_dev (UNIT *uptr, int32 val, char *cptr, void *desc);
t_stat show_dev (FILE *st, UNIT *uptr, int32 val, void *desc); t_stat show_dev (FILE *st, UNIT *uptr, int32 val, void *desc);
void cpu_set_bootpc (int32 pc);
#endif #endif

View file

@ -1,6 +1,6 @@
/* pdp8_df.c: DF32 fixed head disk simulator /* pdp8_df.c: DF32 fixed head disk simulator
Copyright (c) 1993-2011, Robert M Supnik Copyright (c) 1993-2013, Robert M Supnik
Permission is hereby granted, free of charge, to any person obtaining a Permission is hereby granted, free of charge, to any person obtaining a
copy of this software and associated documentation files (the "Software"), copy of this software and associated documentation files (the "Software"),
@ -25,6 +25,8 @@
df DF32 fixed head disk df DF32 fixed head disk
17-Sep-13 RMS Changed to use central set_bootpc routine
03-Sep-13 RMS Added explicit void * cast
15-May-06 RMS Fixed bug in autosize attach (Dave Gesswein) 15-May-06 RMS Fixed bug in autosize attach (Dave Gesswein)
07-Jan-06 RMS Fixed unaligned register access bug (Doug Carman) 07-Jan-06 RMS Fixed unaligned register access bug (Doug Carman)
04-Jan-04 RMS Changed sim_fsize calling sequence 04-Jan-04 RMS Changed sim_fsize calling sequence
@ -249,7 +251,7 @@ t_stat df_svc (UNIT *uptr)
{ {
int32 pa, t, mex; int32 pa, t, mex;
uint32 da; uint32 da;
int16 *fbuf = uptr->filebuf; int16 *fbuf = (int16 *) uptr->filebuf;
UPDATE_PCELL; /* update photocell */ UPDATE_PCELL; /* update photocell */
if ((uptr->flags & UNIT_BUF) == 0) { /* not buf? abort */ if ((uptr->flags & UNIT_BUF) == 0) { /* not buf? abort */
@ -335,17 +337,16 @@ static const uint16 dm4_rom[] = {
t_stat df_boot (int32 unitno, DEVICE *dptr) t_stat df_boot (int32 unitno, DEVICE *dptr)
{ {
size_t i; size_t i;
extern int32 saved_PC;
if (sim_switches & SWMASK ('D')) { if (sim_switches & SWMASK ('D')) {
for (i = 0; i < DM4_LEN; i = i + 2) for (i = 0; i < DM4_LEN; i = i + 2)
M[dm4_rom[i]] = dm4_rom[i + 1]; M[dm4_rom[i]] = dm4_rom[i + 1];
saved_PC = DM4_START; cpu_set_bootpc (DM4_START);
} }
else { else {
for (i = 0; i < OS8_LEN; i++) for (i = 0; i < OS8_LEN; i++)
M[OS8_START + i] = os8_rom[i]; M[OS8_START + i] = os8_rom[i];
saved_PC = OS8_START; cpu_set_bootpc (OS8_START);
} }
return SCPE_OK; return SCPE_OK;
} }

View file

@ -1,6 +1,6 @@
/* pdp8_dt.c: PDP-8 DECtape simulator /* pdp8_dt.c: PDP-8 DECtape simulator
Copyright (c) 1993-2011, Robert M Supnik Copyright (c) 1993-2013, Robert M Supnik
Permission is hereby granted, free of charge, to any person obtaining a Permission is hereby granted, free of charge, to any person obtaining a
copy of this software and associated documentation files (the "Software"), copy of this software and associated documentation files (the "Software"),
@ -25,6 +25,7 @@
dt TC08/TU56 DECtape dt TC08/TU56 DECtape
17-Sep-13 RMS Changed to use central set_bootpc routine
23-Jun-06 RMS Fixed switch conflict in ATTACH 23-Jun-06 RMS Fixed switch conflict in ATTACH
07-Jan-06 RMS Fixed unaligned register access bug (Doug Carman) 07-Jan-06 RMS Fixed unaligned register access bug (Doug Carman)
16-Aug-05 RMS Fixed C++ declaration and cast problems 16-Aug-05 RMS Fixed C++ declaration and cast problems
@ -380,7 +381,8 @@ int32 pulse = IR & 07;
int32 old_dtsa = dtsa, fnc; int32 old_dtsa = dtsa, fnc;
UNIT *uptr; UNIT *uptr;
if (pulse & 01) AC = AC | dtsa; /* DTRA */ if (pulse & 01) /* DTRA */
AC = AC | dtsa;
if (pulse & 06) { /* select */ if (pulse & 06) { /* select */
if (pulse & 02) /* DTCA */ if (pulse & 02) /* DTCA */
dtsa = 0; dtsa = 0;
@ -1011,7 +1013,8 @@ return SCPE_OK;
int32 dt_gethdr (UNIT *uptr, int32 blk, int32 relpos, int32 dir) int32 dt_gethdr (UNIT *uptr, int32 blk, int32 relpos, int32 dir)
{ {
if (relpos >= DT_HTLIN) relpos = relpos - (DT_WSIZE * DTU_BSIZE (uptr)); if (relpos >= DT_HTLIN)
relpos = relpos - (DT_WSIZE * DTU_BSIZE (uptr));
if (dir) { /* reverse */ if (dir) { /* reverse */
switch (relpos / DT_WSIZE) { switch (relpos / DT_WSIZE) {
case 6: /* rev csm */ case 6: /* rev csm */
@ -1176,7 +1179,6 @@ static const uint16 boot_rom[] = {
t_stat dt_boot (int32 unitno, DEVICE *dptr) t_stat dt_boot (int32 unitno, DEVICE *dptr)
{ {
size_t i; size_t i;
extern int32 saved_PC;
if (unitno) /* only unit 0 */ if (unitno) /* only unit 0 */
return SCPE_ARG; return SCPE_ARG;
@ -1185,7 +1187,7 @@ if (dt_dib.dev != DEV_DTA) /* only std devno */
dt_unit[unitno].pos = DT_EZLIN; dt_unit[unitno].pos = DT_EZLIN;
for (i = 0; i < BOOT_LEN; i++) for (i = 0; i < BOOT_LEN; i++)
M[BOOT_START + i] = boot_rom[i]; M[BOOT_START + i] = boot_rom[i];
saved_PC = BOOT_START; cpu_set_bootpc (BOOT_START);
return SCPE_OK; return SCPE_OK;
} }

View file

@ -1,6 +1,6 @@
/* pdp8_pt.c: PDP-8 paper tape reader/punch simulator /* pdp8_pt.c: PDP-8 paper tape reader/punch simulator
Copyright (c) 1993-2011, Robert M Supnik Copyright (c) 1993-2013, Robert M Supnik
Permission is hereby granted, free of charge, to any person obtaining a Permission is hereby granted, free of charge, to any person obtaining a
copy of this software and associated documentation files (the "Software"), copy of this software and associated documentation files (the "Software"),
@ -25,6 +25,7 @@
ptr,ptp PC8E paper tape reader/punch ptr,ptp PC8E paper tape reader/punch
17-Mar-13 RMS Modified to use central set_bootpc routine
25-Apr-03 RMS Revised for extended file support 25-Apr-03 RMS Revised for extended file support
04-Oct-02 RMS Added DIBs 04-Oct-02 RMS Added DIBs
30-May-02 RMS Widened POS to 32b 30-May-02 RMS Widened POS to 32b
@ -279,13 +280,12 @@ static const uint16 boot_rom[] = {
t_stat ptr_boot (int32 unitno, DEVICE *dptr) t_stat ptr_boot (int32 unitno, DEVICE *dptr)
{ {
size_t i; size_t i;
extern int32 saved_PC;
extern uint16 M[]; extern uint16 M[];
if (ptr_dib.dev != DEV_PTR) /* only std devno */ if (ptr_dib.dev != DEV_PTR) /* only std devno */
return STOP_NOTSTD; return STOP_NOTSTD;
for (i = 0; i < BOOT_LEN; i++) for (i = 0; i < BOOT_LEN; i++)
M[BOOT_START + i] = boot_rom[i]; M[BOOT_START + i] = boot_rom[i];
saved_PC = BOOT_START; cpu_set_bootpc (BOOT_START);
return SCPE_OK; return SCPE_OK;
} }

View file

@ -1,6 +1,6 @@
/* pdp8_rf.c: RF08 fixed head disk simulator /* pdp8_rf.c: RF08 fixed head disk simulator
Copyright (c) 1993-2011, Robert M Supnik Copyright (c) 1993-2013, Robert M Supnik
Permission is hereby granted, free of charge, to any person obtaining a Permission is hereby granted, free of charge, to any person obtaining a
copy of this software and associated documentation files (the "Software"), copy of this software and associated documentation files (the "Software"),
@ -25,6 +25,8 @@
rf RF08 fixed head disk rf RF08 fixed head disk
17-Sep-13 RMS Changed to use central set_bootpc routine
03-Sep-13 RMS Added explicit void * cast
15-May-06 RMS Fixed bug in autosize attach (Dave Gesswein) 15-May-06 RMS Fixed bug in autosize attach (Dave Gesswein)
07-Jan-06 RMS Fixed unaligned register access bug (Doug Carman) 07-Jan-06 RMS Fixed unaligned register access bug (Doug Carman)
04-Jan-04 RMS Changed sim_fsize calling sequence 04-Jan-04 RMS Changed sim_fsize calling sequence
@ -302,7 +304,7 @@ return AC;
t_stat rf_svc (UNIT *uptr) t_stat rf_svc (UNIT *uptr)
{ {
int32 pa, t, mex; int32 pa, t, mex;
int16 *fbuf = uptr->filebuf; int16 *fbuf = (int16 *) uptr->filebuf;
UPDATE_PCELL; /* update photocell */ UPDATE_PCELL; /* update photocell */
if ((uptr->flags & UNIT_BUF) == 0) { /* not buf? abort */ if ((uptr->flags & UNIT_BUF) == 0) { /* not buf? abort */
@ -399,19 +401,18 @@ static const uint16 dm4_rom[] = {
t_stat rf_boot (int32 unitno, DEVICE *dptr) t_stat rf_boot (int32 unitno, DEVICE *dptr)
{ {
size_t i; size_t i;
extern int32 saved_PC;
if (rf_dib.dev != DEV_RF) /* only std devno */ if (rf_dib.dev != DEV_RF) /* only std devno */
return STOP_NOTSTD; return STOP_NOTSTD;
if (sim_switches & SWMASK ('D')) { if (sim_switches & SWMASK ('D')) {
for (i = 0; i < DM4_LEN; i = i + 2) for (i = 0; i < DM4_LEN; i = i + 2)
M[dm4_rom[i]] = dm4_rom[i + 1]; M[dm4_rom[i]] = dm4_rom[i + 1];
saved_PC = DM4_START; cpu_set_bootpc (DM4_START);
} }
else { else {
for (i = 0; i < OS8_LEN; i++) for (i = 0; i < OS8_LEN; i++)
M[OS8_START + i] = os8_rom[i]; M[OS8_START + i] = os8_rom[i];
saved_PC = OS8_START; cpu_set_bootpc (OS8_START);
} }
return SCPE_OK; return SCPE_OK;
} }

View file

@ -1,6 +1,6 @@
/* pdp8_rk.c: RK8E cartridge disk simulator /* pdp8_rk.c: RK8E cartridge disk simulator
Copyright (c) 1993-2011, Robert M Supnik Copyright (c) 1993-2013, Robert M Supnik
Permission is hereby granted, free of charge, to any person obtaining a Permission is hereby granted, free of charge, to any person obtaining a
copy of this software and associated documentation files (the "Software"), copy of this software and associated documentation files (the "Software"),
@ -25,6 +25,8 @@
rk RK8E/RK05 cartridge disk rk RK8E/RK05 cartridge disk
17-Sep-13 RMS Changed to use central set_bootpc routine
18-Mar-13 RMS Raised RK_MIN so that RKLFMT will work (Mark Pizzolato)
25-Apr-03 RMS Revised for extended file support 25-Apr-03 RMS Revised for extended file support
04-Oct-02 RMS Added DIB, device number support 04-Oct-02 RMS Added DIB, device number support
06-Jan-02 RMS Changed enable/disable support 06-Jan-02 RMS Changed enable/disable support
@ -121,7 +123,7 @@
((rk_cmd & RKC_IE) != 0)) \ ((rk_cmd & RKC_IE) != 0)) \
int_req = int_req | INT_RK; \ int_req = int_req | INT_RK; \
else int_req = int_req & ~INT_RK else int_req = int_req & ~INT_RK
#define RK_MIN 45 #define RK_MIN 50
#define MAX(x,y) (((x) > (y))? (x): (y)) #define MAX(x,y) (((x) > (y))? (x): (y))
extern uint16 M[]; extern uint16 M[];
@ -451,13 +453,12 @@ static const uint16 boot_rom[] = {
t_stat rk_boot (int32 unitno, DEVICE *dptr) t_stat rk_boot (int32 unitno, DEVICE *dptr)
{ {
size_t i; size_t i;
extern int32 saved_PC;
if (rk_dib.dev != DEV_RK) /* only std devno */ if (rk_dib.dev != DEV_RK) /* only std devno */
return STOP_NOTSTD; return STOP_NOTSTD;
for (i = 0; i < BOOT_LEN; i++) for (i = 0; i < BOOT_LEN; i++)
M[BOOT_START + i] = boot_rom[i]; M[BOOT_START + i] = boot_rom[i];
M[BOOT_UNIT] = (unitno & RK_M_NUMDR) << 1; M[BOOT_UNIT] = (unitno & RK_M_NUMDR) << 1;
saved_PC = BOOT_START; cpu_set_bootpc (BOOT_START);
return SCPE_OK; return SCPE_OK;
} }

View file

@ -1,6 +1,6 @@
/* pdp8_rl.c: RL8A cartridge disk simulator /* pdp8_rl.c: RL8A cartridge disk simulator
Copyright (c) 1993-2011, Robert M Supnik Copyright (c) 1993-2013, Robert M Supnik
Permission is hereby granted, free of charge, to any person obtaining a Permission is hereby granted, free of charge, to any person obtaining a
copy of this software and associated documentation files (the "Software"), copy of this software and associated documentation files (the "Software"),
@ -25,6 +25,7 @@
rl RL8A cartridge disk rl RL8A cartridge disk
17-Sep-13 RMS Changed to use central set_bootpc routine
25-Oct-05 RMS Fixed IOT 61 decode bug (David Gesswein) 25-Oct-05 RMS Fixed IOT 61 decode bug (David Gesswein)
16-Aug-05 RMS Fixed C++ declaration and cast problems 16-Aug-05 RMS Fixed C++ declaration and cast problems
04-Jan-04 RMS Changed attach routine to use sim_fsize 04-Jan-04 RMS Changed attach routine to use sim_fsize
@ -690,7 +691,6 @@ static const uint16 boot_rom[] = {
t_stat rl_boot (int32 unitno, DEVICE *dptr) t_stat rl_boot (int32 unitno, DEVICE *dptr)
{ {
size_t i; size_t i;
extern int32 saved_PC;
if (unitno) /* only unit 0 */ if (unitno) /* only unit 0 */
return SCPE_ARG; return SCPE_ARG;
@ -699,6 +699,6 @@ if (rl_dib.dev != DEV_RL) /* only std devno */
rl_unit[unitno].TRK = 0; rl_unit[unitno].TRK = 0;
for (i = 0; i < BOOT_LEN; i++) for (i = 0; i < BOOT_LEN; i++)
M[BOOT_START + i] = boot_rom[i]; M[BOOT_START + i] = boot_rom[i];
saved_PC = BOOT_START; cpu_set_bootpc (BOOT_START);
return SCPE_OK; return SCPE_OK;
} }

View file

@ -25,6 +25,7 @@
rx RX8E/RX01, RX28/RX02 floppy disk rx RX8E/RX01, RX28/RX02 floppy disk
17-Sep-13 RMS Changed to use central set_bootpc routine
03-Sep-13 RMS Added explicit void * cast 03-Sep-13 RMS Added explicit void * cast
15-May-06 RMS Fixed bug in autosize attach (Dave Gesswein) 15-May-06 RMS Fixed bug in autosize attach (Dave Gesswein)
04-Jan-04 RMS Changed sim_fsize calling sequence 04-Jan-04 RMS Changed sim_fsize calling sequence
@ -735,7 +736,6 @@ static const uint16 boot2_rom[] = {
t_stat rx_boot (int32 unitno, DEVICE *dptr) t_stat rx_boot (int32 unitno, DEVICE *dptr)
{ {
size_t i; size_t i;
extern int32 saved_PC;
extern uint16 M[]; extern uint16 M[];
if (rx_dib.dev != DEV_RX) /* only std devno */ if (rx_dib.dev != DEV_RX) /* only std devno */
@ -743,13 +743,13 @@ if (rx_dib.dev != DEV_RX) /* only std devno */
if (rx_28) { if (rx_28) {
for (i = 0; i < BOOT2_LEN; i++) for (i = 0; i < BOOT2_LEN; i++)
M[BOOT2_START + i] = boot2_rom[i]; M[BOOT2_START + i] = boot2_rom[i];
saved_PC = BOOT2_ENTRY; cpu_set_bootpc (BOOT2_ENTRY);
} }
else { else {
for (i = 0; i < BOOT_LEN; i++) for (i = 0; i < BOOT_LEN; i++)
M[BOOT_START + i] = boot_rom[i]; M[BOOT_START + i] = boot_rom[i];
M[BOOT_INST] = unitno? 07024: 07004; M[BOOT_INST] = unitno? 07024: 07004;
saved_PC = BOOT_ENTRY; cpu_set_bootpc (BOOT_ENTRY);
} }
return SCPE_OK; return SCPE_OK;
} }

View file

@ -1,6 +1,6 @@
/* pdp8_td.c: PDP-8 simple DECtape controller (TD8E) simulator /* pdp8_td.c: PDP-8 simple DECtape controller (TD8E) simulator
Copyright (c) 1993-2011, Robert M Supnik Copyright (c) 1993-2013, Robert M Supnik
Permission is hereby granted, free of charge, to any person obtaining a Permission is hereby granted, free of charge, to any person obtaining a
copy of this software and associated documentation files (the "Software"), copy of this software and associated documentation files (the "Software"),
@ -28,6 +28,7 @@
td TD8E/TU56 DECtape td TD8E/TU56 DECtape
17-Sep-13 RMS Changed to use central set_bootpc routine
23-Mar-11 RMS Fixed SDLC to clear AC (from Dave Gesswein) 23-Mar-11 RMS Fixed SDLC to clear AC (from Dave Gesswein)
23-Jun-06 RMS Fixed switch conflict in ATTACH 23-Jun-06 RMS Fixed switch conflict in ATTACH
16-Aug-05 RMS Fixed C++ declaration and cast problems 16-Aug-05 RMS Fixed C++ declaration and cast problems
@ -741,7 +742,6 @@ static const uint16 boot_rom[] = {
t_stat td_boot (int32 unitno, DEVICE *dptr) t_stat td_boot (int32 unitno, DEVICE *dptr)
{ {
size_t i; size_t i;
extern int32 saved_PC;
if (unitno) if (unitno)
return SCPE_ARG; /* only unit 0 */ return SCPE_ARG; /* only unit 0 */
@ -750,7 +750,7 @@ if (td_dib.dev != DEV_TD8E)
td_unit[unitno].pos = DT_EZLIN; td_unit[unitno].pos = DT_EZLIN;
for (i = 0; i < BOOT_LEN; i++) for (i = 0; i < BOOT_LEN; i++)
M[BOOT_START + i] = boot_rom[i]; M[BOOT_START + i] = boot_rom[i];
saved_PC = BOOT_START; cpu_set_bootpc (BOOT_START);
return SCPE_OK; return SCPE_OK;
} }
@ -910,7 +910,8 @@ int32 td_set_mtk (int32 code, int32 u, int32 k)
{ {
int32 i; int32 i;
for (i = 5; i >= 0; i--) tdb_mtk[u][k++] = (code >> i) & 1; for (i = 5; i >= 0; i--)
tdb_mtk[u][k++] = (code >> i) & 1;
return k; return k;
} }