KA10: Fixed bug in I/O instruction assembly

This commit is contained in:
Richard Cornwell 2020-11-19 21:13:44 -05:00
parent 486505741c
commit 9dd46a8b80

View file

@ -232,7 +232,7 @@ DEBTAB dev_debug[] = {
{"DETAIL", DEBUG_DETAIL, "Show details about device"}, {"DETAIL", DEBUG_DETAIL, "Show details about device"},
{"EXP", DEBUG_EXP, "Show exception information"}, {"EXP", DEBUG_EXP, "Show exception information"},
{"CONI", DEBUG_CONI, "Show coni instructions"}, {"CONI", DEBUG_CONI, "Show coni instructions"},
{"CONO", DEBUG_CONO, "Show coni instructions"}, {"CONO", DEBUG_CONO, "Show cono instructions"},
{"DATAIO", DEBUG_DATAIO, "Show datai and datao instructions"}, {"DATAIO", DEBUG_DATAIO, "Show datai and datao instructions"},
{0, 0} {0, 0}
}; };
@ -244,7 +244,7 @@ DEBTAB crd_debug[] = {
{"DETAIL", DEBUG_DETAIL, "Show details about device"}, {"DETAIL", DEBUG_DETAIL, "Show details about device"},
{"EXP", DEBUG_EXP, "Show exception information"}, {"EXP", DEBUG_EXP, "Show exception information"},
{"CONI", DEBUG_CONI, "Show coni instructions"}, {"CONI", DEBUG_CONI, "Show coni instructions"},
{"CONO", DEBUG_CONO, "Show coni instructions"}, {"CONO", DEBUG_CONO, "Show cono instructions"},
{"DATAIO", DEBUG_DATAIO, "Show datai and datao instructions"}, {"DATAIO", DEBUG_DATAIO, "Show datai and datao instructions"},
{"CARD", DEBUG_CARD, "Show Card read/punches"}, {"CARD", DEBUG_CARD, "Show Card read/punches"},
{0, 0} {0, 0}
@ -1177,12 +1177,14 @@ for (i = 0; opc_val[i] >= 0; i++) { /* loop thru ops */
case I_V_IO: /* I/O */ case I_V_IO: /* I/O */
if (dev < NUMDEV) if (dev < NUMDEV)
fprintf (of, "%s,", devnam[dev]); fprintf (of, "%s,", devnam[dev]);
else fprintf (of, "%-o,", dev<<2); else
fprintf (of, "%-o,", dev << 2);
if (inst & INST_IND) if (inst & INST_IND)
fprintf (of, "@"); fprintf (of, "@");
if (xr) if (xr)
fprintf (of, "%-o(%-o)", y, xr); fprintf (of, "%-o(%-o)", y, xr);
else fprintf (of, "%-o", y); else
fprintf (of, "%-o", y);
break; break;
} /* end case */ } /* end case */
return SCPE_OK; return SCPE_OK;
@ -1304,6 +1306,7 @@ switch (j) { /* case on class */
val[0] = val[0] | (ac << INST_V_AC); val[0] = val[0] | (ac << INST_V_AC);
} }
} /* fall through */ } /* fall through */
case I_V_OP: /* operand */ case I_V_OP: /* operand */
cptr = get_glyph (cptr, gbuf, 0); cptr = get_glyph (cptr, gbuf, 0);
val[0] = val[0] | get_opnd (gbuf, &r); val[0] = val[0] | get_opnd (gbuf, &r);
@ -1313,11 +1316,14 @@ switch (j) { /* case on class */
case I_V_IO: /* I/O */ case I_V_IO: /* I/O */
cptr = get_glyph (cptr, gbuf, ','); /* get glyph */ cptr = get_glyph (cptr, gbuf, ','); /* get glyph */
for (dev = 0; (dev < NUMDEV) && (strcmp (devnam[dev], gbuf) != 0); dev++); for (dev = 0;
(dev < NUMDEV) && (strcmp (devnam[dev], gbuf) != 0);
dev++);
if (dev >= NUMDEV) { if (dev >= NUMDEV) {
dev = get_uint (gbuf, 8, INST_M_DEV, &r); dev = get_uint (gbuf, 8, INST_M_DEV << 2, &r);
if (r != SCPE_OK) if (r != SCPE_OK)
return SCPE_ARG; return SCPE_ARG;
dev >>= 2;
} }
val[0] = val[0] | (dev << INST_V_DEV); val[0] = val[0] | (dev << INST_V_DEV);
cptr = get_glyph (cptr, gbuf, 0); cptr = get_glyph (cptr, gbuf, 0);