diff --git a/IBM360/ibm360_con.c b/IBM360/ibm360_con.c index b8a2cd0..dc891ad 100644 --- a/IBM360/ibm360_con.c +++ b/IBM360/ibm360_con.c @@ -103,7 +103,7 @@ struct dib con_dib = { 0xFF, 1, NULL, con_startcmd, con_haltio, con_unit, con_in DEVICE con_dev = { "INQ", con_unit, NULL, con_mod, NUM_DEVS_CON, 8, 15, 1, 8, 8, - NULL, NULL, NULL, NULL, NULL, con_detach, + NULL, NULL, NULL, NULL, NULL, &con_detach, &con_dib, DEV_UADDR | DEV_DISABLE | DEV_DEBUG, 0, dev_debug, NULL, NULL, &con_help, NULL, NULL, &con_description }; diff --git a/IBM360/ibm360_cpu.c b/IBM360/ibm360_cpu.c index 96156c7..ef08bb3 100644 --- a/IBM360/ibm360_cpu.c +++ b/IBM360/ibm360_cpu.c @@ -1761,12 +1761,17 @@ set_cc: dest = src1 + src2; if ((((src1 & src2 & ~dest) | (~src1 & ~src2 & dest)) & MSIGN) != 0) { + if ((op & 0x1f) == 0x1b && src1 == MSIGN && src2 == MSIGN) { + dest = 0; + goto set_cc; + } set_cc3: regs[reg1] = dest; per_mod |= 1 << reg1; cc = 3; - if (pmsk & FIXOVR) + if (pmsk & FIXOVR) { storepsw(OPPSW, IRC_FIXOVR); + } break; } goto set_cc; @@ -2185,8 +2190,9 @@ save_dbl: if (cc != 3 && (src1 | src1h) != 0) cc = (src1 & MSIGN) ? 1 : 2; #endif - if (cc == 3 && (pmsk & FIXOVR)) + if (cc == 3 && (pmsk & FIXOVR)) { storepsw(OPPSW, IRC_FIXOVR); + } dest = regs[reg1]; } break; diff --git a/IBM360/ibm360_dasd.c b/IBM360/ibm360_dasd.c index 2c96bfa..4867fc3 100644 --- a/IBM360/ibm360_dasd.c +++ b/IBM360/ibm360_dasd.c @@ -941,7 +941,7 @@ sense_end: if ((uptr->CCH >> 8) == data->cyl) { uptr->LCMD = cmd; uptr->CMD &= ~(0xff); - set_devattn(addr, SNS_CHNEND | SNS_DEVEND); + set_devattn(addr, SNS_DEVEND); sim_debug(DEBUG_DETAIL, dptr, "seek end unit=%d %d %d %x\n", unit, uptr->CCH >> 8, data->cyl, data->state); }