VAX8200: Hardware core test (EVKAA) now passing

This commit is contained in:
Matt Burke 2019-05-16 22:12:40 +01:00
parent 650cfd4864
commit 63a39369dc
4 changed files with 25 additions and 21 deletions

Binary file not shown.

View file

@ -60,6 +60,7 @@ else echof "\r\n*** PASSED - %SIM_NAME% Hardware Core Instructi
:DIAG_VAX730 :DIAG_VAX730
:DIAG_VAX750 :DIAG_VAX750
:DIAG_VAX780 :DIAG_VAX780
:DIAG_VAX8200
:DIAG_VAX8600 :DIAG_VAX8600
echo Running Hardware Core Test (EVKAA) echo Running Hardware Core Test (EVKAA)
if not exist evkaa.exe echof "\r\nMISSING - Diagnostic '%~p0evkaa.exe' is missing\n"; exit 1 if not exist evkaa.exe echof "\r\nMISSING - Diagnostic '%~p0evkaa.exe' is missing\n"; exit 1
@ -95,8 +96,16 @@ expect "DS> " send "ATTACH KA780 SBI KA0 yes yes 0 0\r"; go -q
expect "DS> " send "ATTACH DW780 SBI DW0 3 5\r"; go -q expect "DS> " send "ATTACH DW780 SBI DW0 3 5\r"; go -q
goto Common goto Common
:VAX8200
# VAX 8200 Diagnostic Supervisor Setup for EVKAB/C/D/E
#expect "DS> " send "ATTACH KA820 HUB KA0 4096 0\r"; go -q
#expect "DS> " send "ATTACH DWBUA HUB DW0 4 5\r"; go -q
# Extended tests failing so skipped for now
echof "\n*** Diagnostic Supervisor tests SKIPPED ***\n"
exit 0
:VAX8600 :VAX8600
# VAX 11/8600 Diagnostic Supervisor Setup for EVKAB/C/D/E # VAX 8600 Diagnostic Supervisor Setup for EVKAB/C/D/E
expect "DS> " send "ATTACH KA780 ABUS KA0 yes yes 0 0\r"; go -q expect "DS> " send "ATTACH KA780 ABUS KA0 yes yes 0 0\r"; go -q
expect "DS> " send "ATTACH DW780 ABUS DW0 3 5\r"; go -q expect "DS> " send "ATTACH DW780 ABUS DW0 3 5\r"; go -q
goto Common goto Common

View file

@ -518,6 +518,7 @@ for (p = &regtable[0]; p->low != 0; p++) {
if ((pa >= p->low) && (pa < p->high) && p->read) if ((pa >= p->low) && (pa < p->high) && p->read)
return p->read (pa); return p->read (pa);
} }
MACH_CHECK (MCHK_BIERR); /* machine check */
return 0; return 0;
} }
@ -637,6 +638,8 @@ t_stat r;
if (!ptr || !*ptr) if (!ptr || !*ptr)
return SCPE_2FARG; return SCPE_2FARG;
if ((ptr = get_sim_sw (ptr)) == NULL) /* get switches */
return SCPE_INVSW;
regptr = get_glyph (ptr, gbuf, 0); /* get glyph */ regptr = get_glyph (ptr, gbuf, 0); /* get glyph */
if ((slptr = strchr (gbuf, '/'))) { /* found slash? */ if ((slptr = strchr (gbuf, '/'))) { /* found slash? */
regptr = strchr (ptr, '/'); /* locate orig */ regptr = strchr (ptr, '/'); /* locate orig */

View file

@ -258,8 +258,7 @@ if (ofs >= UBAMAP_OF) { /* map? */
if (idx >= UBA_NMAPR) /* valid? */ if (idx >= UBA_NMAPR) /* valid? */
return SCPE_NXM; return SCPE_NXM;
*val = uba_map[idx] & UBAMAP_RD; *val = uba_map[idx] & UBAMAP_RD;
if (DEBUG_PRI (uba_dev, UBA_DEB_MRD)) sim_debug (UBA_DEB_MRD, &uba_dev, "map %d read, value = %X, PC = %X\n", idx, *val, fault_PC);
fprintf (sim_deb, ">>UBA: map %d read, value = %X, PC = %X\n", idx, *val, fault_PC);
return SCPE_OK; return SCPE_OK;
} }
@ -364,8 +363,7 @@ switch (ofs) { /* case on offset */
return SCPE_NXM; return SCPE_NXM;
} }
if (DEBUG_PRI (uba_dev, UBA_DEB_RRD)) sim_debug (UBA_DEB_RRD, &uba_dev, "reg %d read, value = %X, PC = %X\n", ofs, *val, fault_PC);
fprintf (sim_deb, ">>UBA: reg %d read, value = %X\n", ofs, *val);
return SCPE_OK; return SCPE_OK;
} }
@ -384,8 +382,7 @@ if (ofs >= UBAMAP_OF) { /* map? */
if (idx >= UBA_NMAPR) /* valid? */ if (idx >= UBA_NMAPR) /* valid? */
return SCPE_NXM; return SCPE_NXM;
uba_map[idx] = val & UBAMAP_WR; uba_map[idx] = val & UBAMAP_WR;
if (DEBUG_PRI (uba_dev, UBA_DEB_MWR)) sim_debug (UBA_DEB_MWR, &uba_dev, "map %d write, value = %X, PC = %X\n", idx, val, fault_PC);
fprintf (sim_deb, ">>UBA: map %d write, value = %X, PC = %X\n", idx, val, fault_PC);
return SCPE_OK; return SCPE_OK;
} }
@ -452,8 +449,7 @@ switch (ofs) { /* case on offset */
return SCPE_NXM; return SCPE_NXM;
} }
if (DEBUG_PRI (uba_dev, UBA_DEB_RWR)) sim_debug (UBA_DEB_RWR, &uba_dev, "reg %d write, value = %X, PC = %X\n", ofs, val, fault_PC);
fprintf (sim_deb, ">>UBA: reg %d write, value = %X\n", ofs, val);
return SCPE_OK; return SCPE_OK;
} }
@ -616,8 +612,7 @@ for (i = 0; i < bc; i = i + pbc) { /* loop by pages */
pbc = VA_PAGSIZE - VA_GETOFF (ma); /* left in page */ pbc = VA_PAGSIZE - VA_GETOFF (ma); /* left in page */
if (pbc > (bc - i)) /* limit to rem xfr */ if (pbc > (bc - i)) /* limit to rem xfr */
pbc = bc - i; pbc = bc - i;
if (DEBUG_PRI (uba_dev, UBA_DEB_XFR)) sim_debug (UBA_DEB_XFR, &uba_dev, "8b read, ba = %X, ma = %X, bc = %X\n", ba, ma, pbc);
fprintf (sim_deb, ">>UBA: 8b read, ma = %X, bc = %X\n", ma, pbc);
if ((ma | pbc) & 3) { /* aligned LW? */ if ((ma | pbc) & 3) { /* aligned LW? */
for (j = 0; j < pbc; ma++, j++) { /* no, do by bytes */ for (j = 0; j < pbc; ma++, j++) { /* no, do by bytes */
*buf++ = ReadB (ma); *buf++ = ReadB (ma);
@ -649,8 +644,7 @@ for (i = 0; i < bc; i = i + pbc) { /* loop by pages */
pbc = VA_PAGSIZE - VA_GETOFF (ma); /* left in page */ pbc = VA_PAGSIZE - VA_GETOFF (ma); /* left in page */
if (pbc > (bc - i)) /* limit to rem xfr */ if (pbc > (bc - i)) /* limit to rem xfr */
pbc = bc - i; pbc = bc - i;
if (DEBUG_PRI (uba_dev, UBA_DEB_XFR)) sim_debug (UBA_DEB_XFR, &uba_dev, "16b read, ba = %X, ma = %X, bc = %X\n", ba, ma, pbc);
fprintf (sim_deb, ">>UBA: 16b read, ba = %X, ma = %X, bc = %X\n", ba, ma, pbc);
if ((ma | pbc) & 1) { /* aligned word? */ if ((ma | pbc) & 1) { /* aligned word? */
for (j = 0; j < pbc; ma++, j++) { /* no, do by bytes */ for (j = 0; j < pbc; ma++, j++) { /* no, do by bytes */
if ((i + j) & 1) { /* odd byte? */ if ((i + j) & 1) { /* odd byte? */
@ -688,8 +682,7 @@ for (i = 0; i < bc; i = i + pbc) { /* loop by pages */
pbc = VA_PAGSIZE - VA_GETOFF (ma); /* left in page */ pbc = VA_PAGSIZE - VA_GETOFF (ma); /* left in page */
if (pbc > (bc - i)) /* limit to rem xfr */ if (pbc > (bc - i)) /* limit to rem xfr */
pbc = bc - i; pbc = bc - i;
if (DEBUG_PRI (uba_dev, UBA_DEB_XFR)) sim_debug (UBA_DEB_XFR, &uba_dev, "8b write, ba = %X, ma = %X, bc = %X\n", ba, ma, pbc);
fprintf (sim_deb, ">>UBA: 8b write, ma = %X, bc = %X\n", ma, pbc);
if ((ma | pbc) & 3) { /* aligned LW? */ if ((ma | pbc) & 3) { /* aligned LW? */
for (j = 0; j < pbc; ma++, j++) { /* no, do by bytes */ for (j = 0; j < pbc; ma++, j++) { /* no, do by bytes */
WriteB (ma, *buf); WriteB (ma, *buf);
@ -722,8 +715,7 @@ for (i = 0; i < bc; i = i + pbc) { /* loop by pages */
pbc = VA_PAGSIZE - VA_GETOFF (ma); /* left in page */ pbc = VA_PAGSIZE - VA_GETOFF (ma); /* left in page */
if (pbc > (bc - i)) /* limit to rem xfr */ if (pbc > (bc - i)) /* limit to rem xfr */
pbc = bc - i; pbc = bc - i;
if (DEBUG_PRI (uba_dev, UBA_DEB_XFR)) sim_debug (UBA_DEB_XFR, &uba_dev, "16b write, ba = %X, ma = %X, bc = %X\n", ba, ma, pbc);
fprintf (sim_deb, ">>UBA: 16b write, ma = %X, bc = %X\n", ma, pbc);
if ((ma | pbc) & 1) { /* aligned word? */ if ((ma | pbc) & 1) { /* aligned word? */
for (j = 0; j < pbc; ma++, j++) { /* no, bytes */ for (j = 0; j < pbc; ma++, j++) { /* no, bytes */
if ((i + j) & 1) { if ((i + j) & 1) {
@ -818,7 +810,7 @@ if ((uba_csr & UBACSR_TO) == 0) {
uba_adap_set_int (); uba_adap_set_int ();
} }
sim_debug (UBA_DEB_ERR, &uba_dev, sim_debug (UBA_DEB_ERR, &uba_dev,
">>UBA: nxm error, ua = %X, PC = %X\n", ua, fault_PC); "nxm error, ua = %X, PC = %X\n", ua, fault_PC);
return; return;
} }
@ -830,7 +822,7 @@ if ((uba_biic.ber & BIBER_BTO) == 0) {
uba_adap_set_int (); uba_adap_set_int ();
} }
sim_debug (UBA_DEB_ERR, &uba_dev, sim_debug (UBA_DEB_ERR, &uba_dev,
">>UBA: BI nxm error, ba = %X, PC = %X\n", ba, fault_PC); "BI nxm error, ba = %X, PC = %X\n", ba, fault_PC);
return; return;
} }
@ -841,7 +833,7 @@ if ((uba_csr & UBACSR_IMR) == 0) {
uba_adap_set_int (); uba_adap_set_int ();
} }
sim_debug (UBA_DEB_ERR, &uba_dev, sim_debug (UBA_DEB_ERR, &uba_dev,
">>UBA: inv map error, ublk = %X\n", ublk); "inv map error, ublk = %X\n", ublk);
return; return;
} }
@ -886,7 +878,7 @@ void uba_adap_set_int ()
if (uba_csr & UBACSR_EIE) { if (uba_csr & UBACSR_EIE) {
uba_int = 1; uba_int = 1;
sim_debug (UBA_DEB_ERR, &uba_dev, sim_debug (UBA_DEB_ERR, &uba_dev,
">>UBA: adapter int req, csr = %X\n", uba_csr); "adapter int req, csr = %X\n", uba_csr);
} }
return; return;
} }