mirror of
https://github.com/rcornwell/sims.git
synced 2026-02-17 04:57:52 +00:00
IBM360: Adding in 2 more DASD controllers.
This commit is contained in:
@@ -301,6 +301,55 @@ DEVICE ddb_dev = {
|
||||
&ddb_dib, DEV_DISABLE | DEV_DEBUG, 0, dev_debug,
|
||||
NULL, NULL, &dasd_help, NULL, NULL, &dasd_description
|
||||
};
|
||||
|
||||
#if NUM_DEVS_DASD > 2
|
||||
|
||||
UNIT ddc_unit[] = {
|
||||
{UDATA(&dasd_srv, UNIT_DASD, 0), 0, UNIT_ADDR(0x150)}, /* 0 */
|
||||
{UDATA(&dasd_srv, UNIT_DASD, 0), 0, UNIT_ADDR(0x151)}, /* 1 */
|
||||
{UDATA(&dasd_srv, UNIT_DASD, 0), 0, UNIT_ADDR(0x152)}, /* 2 */
|
||||
{UDATA(&dasd_srv, UNIT_DASD, 0), 0, UNIT_ADDR(0x153)}, /* 3 */
|
||||
{UDATA(&dasd_srv, UNIT_DASD, 0), 0, UNIT_ADDR(0x154)}, /* 4 */
|
||||
{UDATA(&dasd_srv, UNIT_DASD, 0), 0, UNIT_ADDR(0x155)}, /* 5 */
|
||||
{UDATA(&dasd_srv, UNIT_DASD, 0), 0, UNIT_ADDR(0x156)}, /* 6 */
|
||||
{UDATA(&dasd_srv, UNIT_DASD, 0), 0, UNIT_ADDR(0x157)}, /* 7 */
|
||||
};
|
||||
|
||||
struct dib ddc_dib = { 0xF8, NUM_UNITS_MT, dasd_startio, dasd_startcmd, NULL,
|
||||
ddc_unit, dasd_ini};
|
||||
|
||||
DEVICE ddc_dev = {
|
||||
"DC", ddc_unit, NULL, dasd_mod,
|
||||
NUM_UNITS_DASD, 8, 15, 1, 8, 8,
|
||||
NULL, NULL, &dasd_reset, &dasd_boot, &dasd_attach, &dasd_detach,
|
||||
&ddc_dib, DEV_DISABLE | DEV_DEBUG, 0, dev_debug,
|
||||
NULL, NULL, &dasd_help, NULL, NULL, &dasd_description
|
||||
};
|
||||
|
||||
#if NUM_DEVS_DASD > 3
|
||||
UNIT ddd_unit[] = {
|
||||
{UDATA(&dasd_srv, UNIT_DASD, 0), 0, UNIT_ADDR(0x250)}, /* 0 */
|
||||
{UDATA(&dasd_srv, UNIT_DASD, 0), 0, UNIT_ADDR(0x251)}, /* 1 */
|
||||
{UDATA(&dasd_srv, UNIT_DASD, 0), 0, UNIT_ADDR(0x252)}, /* 2 */
|
||||
{UDATA(&dasd_srv, UNIT_DASD, 0), 0, UNIT_ADDR(0x253)}, /* 3 */
|
||||
{UDATA(&dasd_srv, UNIT_DASD, 0), 0, UNIT_ADDR(0x254)}, /* 4 */
|
||||
{UDATA(&dasd_srv, UNIT_DASD, 0), 0, UNIT_ADDR(0x255)}, /* 5 */
|
||||
{UDATA(&dasd_srv, UNIT_DASD, 0), 0, UNIT_ADDR(0x256)}, /* 6 */
|
||||
{UDATA(&dasd_srv, UNIT_DASD, 0), 0, UNIT_ADDR(0x257)}, /* 7 */
|
||||
};
|
||||
|
||||
struct dib ddd_dib = { 0xF8, NUM_UNITS_MT, dasd_startio, dasd_startcmd, NULL,
|
||||
ddd_unit, dasd_ini};
|
||||
|
||||
DEVICE ddd_dev = {
|
||||
"DD", ddd_unit, NULL, dasd_mod,
|
||||
NUM_UNITS_DASD, 8, 15, 1, 8, 8,
|
||||
NULL, NULL, &dasd_reset, &dasd_boot, &dasd_attach, &dasd_detach,
|
||||
&ddd_dib, DEV_DISABLE | DEV_DEBUG, 0, dev_debug,
|
||||
NULL, NULL, &dasd_help, NULL, NULL, &dasd_description
|
||||
};
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
|
||||
uint8 dasd_startio(UNIT *uptr, uint16 chan) {
|
||||
@@ -753,7 +802,7 @@ index:
|
||||
if ((uptr->u4 >> 8) == data->cyl) {
|
||||
uptr->u6 = cmd;
|
||||
uptr->u3 &= ~(0xff);
|
||||
set_devattn(addr, SNS_DEVEND);
|
||||
set_devattn(addr, SNS_CHNEND | SNS_DEVEND);
|
||||
sim_debug(DEBUG_DETAIL, dptr, "seek end unit=%d %d %d %x\n", unit,
|
||||
uptr->u4 >> 8, data->cyl, data->state);
|
||||
}
|
||||
@@ -1623,6 +1672,8 @@ dasd_detach(UNIT * uptr)
|
||||
{
|
||||
struct dasd_t *data = (struct dasd_t *)uptr->up7;
|
||||
int type = GET_TYPE(uptr->flags);
|
||||
uint16 addr = GET_UADDR(uptr->u3);
|
||||
int cmd = uptr->u3 & 0x7f;
|
||||
|
||||
if (uptr->u3 & DK_CYL_DIRTY) {
|
||||
(void)sim_fseek(uptr->fileref, data->cpos, SEEK_SET);
|
||||
@@ -1630,10 +1681,11 @@ dasd_detach(UNIT * uptr)
|
||||
data->tsize * disk_type[type].heads, uptr->fileref);
|
||||
uptr->u3 &= ~DK_CYL_DIRTY;
|
||||
}
|
||||
if (data != 0) {
|
||||
free(data->cbuf);
|
||||
free(data);
|
||||
}
|
||||
if (cmd != 0)
|
||||
chan_end(addr, SNS_CHNEND|SNS_DEVEND);
|
||||
sim_cancel(uptr);
|
||||
free(data->cbuf);
|
||||
free(data);
|
||||
uptr->up7 = 0;
|
||||
uptr->u3 &= ~0xffff;
|
||||
return detach_unit(uptr);
|
||||
|
||||
@@ -356,6 +356,8 @@ extern DEVICE mta_dev;
|
||||
extern DEVICE mtb_dev;
|
||||
extern DEVICE dda_dev;
|
||||
extern DEVICE ddb_dev;
|
||||
extern DEVICE ddc_dev;
|
||||
extern DEVICE ddd_dev;
|
||||
extern DEVICE com_dev;
|
||||
extern UNIT cpu_unit;
|
||||
|
||||
@@ -365,7 +367,7 @@ extern UNIT cpu_unit;
|
||||
#define NUM_DEVS_LPR 1
|
||||
#define NUM_DEVS_MT 1
|
||||
#define NUM_UNITS_MT 8
|
||||
#define NUM_DEVS_DASD 2
|
||||
#define NUM_DEVS_DASD 4
|
||||
#define NUM_UNITS_DASD 8
|
||||
#define NUM_DEVS_COM 1
|
||||
#define NUM_UNITS_COM 16
|
||||
|
||||
@@ -232,7 +232,6 @@ uint8 mt_startcmd(UNIT *uptr, uint16 chan, uint8 cmd) {
|
||||
if (mt_busy[GET_DEV_BUF(dptr->flags)] != 0 || (uptr->u3 & MT_CMDMSK) != 0) {
|
||||
sim_debug(DEBUG_CMD, dptr, "CMD busy unit=%d %x\n", unit, cmd);
|
||||
uptr->flags |= MT_BUSY; /* Flag we need to send CUE */
|
||||
// mt_busy[GET_DEV_BUF(dptr->flags)] |= 2;
|
||||
return SNS_BSY;
|
||||
}
|
||||
|
||||
@@ -262,12 +261,8 @@ uint8 mt_startcmd(UNIT *uptr, uint16 chan, uint8 cmd) {
|
||||
uptr->u4 = 0;
|
||||
uptr->u6 = 0;
|
||||
mt_busy[GET_DEV_BUF(dptr->flags)] = 1;
|
||||
if ((cmd & 0x7) == 0x7) { /* Quick end channel on control */
|
||||
// if ((cmd & 0x30) == 0) {
|
||||
// mt_busy[GET_DEV_BUF(dptr->flags)] = 0;
|
||||
// }
|
||||
if ((cmd & 0x7) == 0x7) /* Quick end channel on control */
|
||||
return SNS_CHNEND;
|
||||
}
|
||||
return 0;
|
||||
|
||||
case 0x3: /* Control */
|
||||
@@ -305,9 +300,6 @@ uint8 mt_startcmd(UNIT *uptr, uint16 chan, uint8 cmd) {
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
// if ((cmd & 0xf0) != 0xc0) {
|
||||
// uptr->u5 |= SNS_CMDREJ;
|
||||
// }
|
||||
uptr->u3 &= ~MT_MDEN_MSK;
|
||||
if (cmd & 0x8)
|
||||
uptr->u3 |= MT_MDEN_800;
|
||||
@@ -639,12 +631,10 @@ t_stat mt_srv(UNIT * uptr)
|
||||
uptr->u3 &= ~MT_CMDMSK;
|
||||
mt_busy[GET_DEV_BUF(dptr->flags)] &= ~1;
|
||||
set_devattn(addr, SNS_DEVEND|SNS_UNITCHK);
|
||||
// chan_end(addr, SNS_CHNEND|SNS_DEVEND|SNS_UNITCHK);
|
||||
return SCPE_OK;
|
||||
}
|
||||
uptr->u4 ++;
|
||||
sim_activate(uptr, 500);
|
||||
// chan_end(addr, SNS_CHNEND);
|
||||
} else {
|
||||
sim_debug(DEBUG_DETAIL, dptr, "Write Mark unit=%d\n", unit);
|
||||
uptr->u3 &= ~(MT_CMDMSK);
|
||||
@@ -661,12 +651,10 @@ t_stat mt_srv(UNIT * uptr)
|
||||
uptr->u3 &= ~MT_CMDMSK;
|
||||
mt_busy[GET_DEV_BUF(dptr->flags)] &= ~1;
|
||||
set_devattn(addr, SNS_DEVEND|SNS_UNITCHK);
|
||||
// chan_end(addr, SNS_CHNEND|SNS_DEVEND|SNS_UNITCHK);
|
||||
return SCPE_OK;
|
||||
}
|
||||
uptr->u4 ++;
|
||||
sim_activate(uptr, 500);
|
||||
// chan_end(addr, SNS_CHNEND);
|
||||
break;
|
||||
case 1:
|
||||
uptr->u4++;
|
||||
@@ -702,10 +690,8 @@ t_stat mt_srv(UNIT * uptr)
|
||||
uptr->u3 &= ~MT_CMDMSK;
|
||||
mt_busy[bufnum] &= ~1;
|
||||
set_devattn(addr, SNS_DEVEND|SNS_UNITCHK);
|
||||
// chan_end(addr, SNS_CHNEND|SNS_DEVEND|SNS_UNITCHK);
|
||||
break;
|
||||
}
|
||||
// chan_end(addr, SNS_CHNEND);
|
||||
uptr->u4 ++;
|
||||
sim_activate(uptr, 500);
|
||||
break;
|
||||
@@ -741,7 +727,6 @@ t_stat mt_srv(UNIT * uptr)
|
||||
case 0:
|
||||
uptr->u4 ++;
|
||||
sim_activate(uptr, 500);
|
||||
// chan_end(addr, SNS_CHNEND);
|
||||
break;
|
||||
case 1:
|
||||
uptr->u4++;
|
||||
@@ -782,7 +767,6 @@ t_stat mt_srv(UNIT * uptr)
|
||||
case 0:
|
||||
uptr->u4 ++;
|
||||
sim_activate(uptr, 500);
|
||||
// chan_end(addr, SNS_CHNEND);
|
||||
break;
|
||||
case 1:
|
||||
sim_debug(DEBUG_DETAIL, dptr, "Skip rec unit=%d ", unit);
|
||||
@@ -821,12 +805,10 @@ t_stat mt_srv(UNIT * uptr)
|
||||
uptr->u5 |= SNS_CMDREJ;
|
||||
uptr->u3 &= ~MT_CMDMSK;
|
||||
mt_busy[bufnum] &= ~1;
|
||||
// chan_end(addr, SNS_CHNEND|SNS_DEVEND|SNS_UNITCHK);
|
||||
set_devattn(addr, SNS_DEVEND|SNS_UNITCHK);
|
||||
} else {
|
||||
uptr->u4 ++;
|
||||
sim_activate(uptr, 500);
|
||||
// chan_end(addr, SNS_CHNEND);
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
@@ -846,7 +828,6 @@ t_stat mt_srv(UNIT * uptr)
|
||||
if (uptr->u4 == 0) {
|
||||
uptr->u4 ++;
|
||||
sim_activate(uptr, 30000);
|
||||
// chan_end(addr, SNS_CHNEND);
|
||||
mt_busy[bufnum] &= ~1;
|
||||
} else {
|
||||
sim_debug(DEBUG_DETAIL, dptr, "Rewind unit=%d\n", unit);
|
||||
@@ -861,7 +842,6 @@ t_stat mt_srv(UNIT * uptr)
|
||||
uptr->u4 ++;
|
||||
mt_busy[bufnum] &= ~1;
|
||||
sim_activate(uptr, 30000);
|
||||
// chan_end(addr, SNS_CHNEND);
|
||||
} else {
|
||||
sim_debug(DEBUG_DETAIL, dptr, "Unload unit=%d\n", unit);
|
||||
uptr->u3 &= ~(MT_CMDMSK);
|
||||
@@ -898,6 +878,9 @@ mt_attach(UNIT * uptr, CONST char *file)
|
||||
if ((r = sim_tape_attach_ex(uptr, file, 0, 0)) != SCPE_OK)
|
||||
return r;
|
||||
set_devattn(addr, SNS_DEVEND);
|
||||
uptr->u3 &= ~0xffff;
|
||||
uptr->u4 = 0;
|
||||
uptr->u5 = 0;
|
||||
return SCPE_OK;
|
||||
}
|
||||
|
||||
|
||||
@@ -70,6 +70,12 @@ DEVICE *sim_devices[] = {
|
||||
&dda_dev,
|
||||
#if NUM_DEVS_DASD > 1
|
||||
&ddb_dev,
|
||||
#if NUM_DEVS_DASD > 2
|
||||
&ddc_dev,
|
||||
#if NUM_DEVS_DASD > 3
|
||||
&ddd_dev,
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
#ifdef NUM_DEVS_COM
|
||||
|
||||
Reference in New Issue
Block a user