diff --git a/HP2100/hp2100_bugfixes.txt b/HP2100/hp2100_bugfixes.txt index 117dd525..4902bd00 100644 --- a/HP2100/hp2100_bugfixes.txt +++ b/HP2100/hp2100_bugfixes.txt @@ -1,6 +1,6 @@ HP 2100 SIMULATOR BUG FIX WRITEUPS ================================== - Last update: 2012-05-07 + Last update: 2012-12-17 1. PROBLEM: Booting from magnetic tape reports "HALT instruction, P: 77756 @@ -6305,4 +6305,48 @@ if the seek would fail, and modify "complete_read" (hp2100_di_da.c) to cancel the intersector delay and schedule the completion phase immediately. - STATUS: Patches prepared 2012-05-07. + STATUS: Fixed in version 4.0-0. + + + +248. PROBLEM: Calling a VMA routine from a non-VMA program does not MP abort. + + VERSION: 3.9-0 + + OBSERVATION: If a virtual memory routine, such as .LBP, is called from a + non-VMA program, it should be aborted with a memory protect error. + Instead, a dynamic mapping error occurs instead: + + ASMB,R + NAM MAPPR + EXT EXEC,.LBP + START CLA + CLB + JSB .LBP + NOP + JSB EXEC + DEF *+2 + DEF *+1 + DEC 6 + END START + + DM VIOL = 160377 + DM INST = 105257 + ABE 0 0 0 + XYO 0 0 0 + DM MAPPR 2014 + MAPPR ABORTED + + CAUSE: The page mapping routine, "cpu_vma_mapte", returns TRUE if the page + table is set up and valid and FALSE if not. If a program is not a VMA + program, then it has no page table, but "cpu_vma_mapte" is returning TRUE + erroneously. That results in a DM error when the invalid page entry is + used. + + The microcode explicitly tests for a non-VMA program, i.e., one with no ID + extension, and generates an MP error in this case. + + RESOLUTION: Modify "cpu_vma_mapte" (hp2100_cpu5.c) to return FALSE if + called for a non-VMA program. + + STATUS: Fixed in version 4.0-0. diff --git a/HP2100/hp2100_cpu5.c b/HP2100/hp2100_cpu5.c index 31c381c6..5a72e75a 100644 --- a/HP2100/hp2100_cpu5.c +++ b/HP2100/hp2100_cpu5.c @@ -26,6 +26,7 @@ CPU5 RTE-6/VM and RTE-IV firmware option instructions + 17-Dec-12 JDB Fixed cpu_vma_mapte to return FALSE if not a VMA program 09-May-12 JDB Separated assignments from conditional expressions 23-Mar-12 JDB Added sign extension for dim count in "cpu_ema_resolve" 28-Dec-11 JDB Eliminated unused variable in "cpu_ema_vset" @@ -333,8 +334,13 @@ uint32 dispatch = ReadIO(vswp,UMAP) & 01777; /* get fresh dispatch flag * t_bool swapflag = TRUE; if (dispatch == 0) { /* not yet set */ - idext = ReadIO(idx,UMAP); /* go into IDsegment extent */ - if (idext != 0) { /* is ema/vma program? */ + idext = ReadIO(idx,UMAP); /* go into ID segment extent */ + if (idext == 0) { /* is ema/vma program? */ + swapflag = FALSE; /* no, so mark PTE as invalid */ + *ptepg = (uint32) -1; /* and return an invalid page number */ + } + + else { /* is an EMA/VMA program */ dispatch = ReadWA(idext+1) & 01777; /* get 1st ema page: new vswp */ WriteIO(vswp,dispatch,UMAP); /* move into $VSWP */ idext2 = ReadWA(idext+2); /* get swap bit */ @@ -347,7 +353,7 @@ if (dispatch) { /* some page is defined */ *ptepg = dispatch; /* return PTEPG# for later */ } -return swapflag; /* true for swap bit set */ +return swapflag; /* true for valid PTE */ } /* .LBP diff --git a/HP2100/hp2100_defs.h b/HP2100/hp2100_defs.h index d5126db4..5df86335 100644 --- a/HP2100/hp2100_defs.h +++ b/HP2100/hp2100_defs.h @@ -23,9 +23,8 @@ be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization from Robert M Supnik. + 14-Dec-12 JDB Added "-Wbitwise-op-parentheses" to the suppression pragmas 12-May-12 JDB Added pragmas to suppress logical operator precedence warnings - 12-Feb-12 JDB Added MA device select code assignment - Added ma_boot_ext() declaration 10-Feb-12 JDB Added hp_setsc, hp_showsc functions to support SC modifier 28-Mar-11 JDB Tidied up signal handling 29-Oct-10 JDB DMA channels renamed from 0,1 to 1,2 to match documentation @@ -187,7 +186,6 @@ typedef enum { INITIAL, SERVICE } POLLMODE; /* poll synchronization #define MUXC 042 /* 12920A control */ #define DI_DA 043 /* 12821A Disc Interface with Amigo disc devices */ #define DI_DC 044 /* 12821A Disc Interface with CS/80 disc and tape devices */ -#define DI_MA 045 /* 12821A Disc Interface with Amigo mag tape devices */ #define OPTDEV 002 /* start of optional devices */ #define CRSDEV 006 /* start of devices that receive CRS */ @@ -478,7 +476,6 @@ extern t_stat hp_showdev (FILE *st, UNIT *uptr, int32 val, void *desc); /* Device-specific functions */ -extern int32 sync_poll (POLLMODE poll_mode); -extern t_stat ma_boot_ext (uint32 SR); +extern int32 sync_poll (POLLMODE poll_mode); #endif diff --git a/HP2100/hp2100_dp.c b/HP2100/hp2100_dp.c index 196cbac8..40614207 100644 --- a/HP2100/hp2100_dp.c +++ b/HP2100/hp2100_dp.c @@ -26,6 +26,7 @@ DP 12557A 2871 disk subsystem 13210A 7900 disk subsystem + 18-Dec-12 MP Now calls sim_activate_time to get remaining seek time 09-May-12 JDB Separated assignments from conditional expressions 10-Feb-12 JDB Deprecated DEVNO in favor of SC Added CNTLR_TYPE cast to dp_settype diff --git a/HP2100/hp2100_dq.c b/HP2100/hp2100_dq.c index 816c7bf7..11feafb7 100644 --- a/HP2100/hp2100_dq.c +++ b/HP2100/hp2100_dq.c @@ -26,6 +26,7 @@ DQ 12565A 2883 disk system + 18-Dec-12 MP Now calls sim_activate_time to get remaining seek time 09-May-12 JDB Separated assignments from conditional expressions 10-Feb-12 JDB Deprecated DEVNO in favor of SC 28-Mar-11 JDB Tidied up signal handling diff --git a/HP2100/hp2100_stddev.c b/HP2100/hp2100_stddev.c index 50f42081..856d1a5a 100644 --- a/HP2100/hp2100_stddev.c +++ b/HP2100/hp2100_stddev.c @@ -28,6 +28,7 @@ TTY 12531C buffered teleprinter interface CLK 12539C time base generator + 18-Dec-12 MP Now calls sim_activate_time to get remaining poll time 09-May-12 JDB Separated assignments from conditional expressions 12-Feb-12 JDB Add TBG as a logical name for the CLK device 10-Feb-12 JDB Deprecated DEVNO in favor of SC diff --git a/HP2100/hp_disclib.c b/HP2100/hp_disclib.c index cb3fd649..2a0d3ce2 100644 --- a/HP2100/hp_disclib.c +++ b/HP2100/hp_disclib.c @@ -24,6 +24,7 @@ used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization from the authors. + 20-Dec-12 JDB sim_is_active() now returns t_bool 24-Oct-12 JDB Changed CNTLR_OPCODE to title case to avoid name clash 07-May-12 JDB Corrected end-of-track delay time logic 02-May-12 JDB First release @@ -773,7 +774,7 @@ else if (uptr) { /* otherwise, we have a uptr->wait = cvptr->cmd_time; /* most commands use the command delay */ if (props->unit_access) { /* does the command access the unit? */ - is_seeking = sim_activate_time (uptr) != 0; /* see if the unit is busy */ + is_seeking = sim_is_active (uptr); /* see if the unit is busy */ if (is_seeking) /* if a seek is in progress, */ uptr->wait = 0; /* set for no unit activation */