mirror of
https://github.com/rcornwell/sims.git
synced 2026-03-10 12:29:26 +00:00
IBM360: Minor changes to help OS/360 work better.
This commit is contained in:
@@ -207,7 +207,7 @@ cdp_srv(UNIT *uptr) {
|
||||
if (uptr->u3 & CDP_CARD) {
|
||||
uptr->u3 &= ~(CDP_CMDMSK);
|
||||
chan_end(addr, SNS_CHNEND);
|
||||
sim_activate(uptr, 1000);
|
||||
sim_activate(uptr, 10000);
|
||||
} else
|
||||
sim_activate(uptr, 10);
|
||||
}
|
||||
|
||||
@@ -279,6 +279,7 @@ cdr_detach(UNIT * uptr)
|
||||
if (uptr->up7 != 0)
|
||||
free(uptr->up7);
|
||||
uptr->up7 = 0;
|
||||
uptr->u5 = 0;
|
||||
return sim_card_detach(uptr);
|
||||
}
|
||||
|
||||
|
||||
@@ -327,7 +327,7 @@ loop:
|
||||
/* Copy SLI indicator on CD command */
|
||||
if ((ccw_flags[chan] & (FLAG_CD|FLAG_SLI)) == (FLAG_CD|FLAG_SLI))
|
||||
word |= (FLAG_SLI<<16);
|
||||
ccw_flags[chan] = (word >> 16) & 0xffff;
|
||||
ccw_flags[chan] = (word >> 16) & 0xff00;
|
||||
chan_byte[chan] = BUFF_EMPTY;
|
||||
/* Check invalid count */
|
||||
if (ccw_count[chan] == 0) {
|
||||
@@ -1046,14 +1046,14 @@ set_dev_addr(UNIT * uptr, int32 val, CONST char *cptr, void *desc)
|
||||
dev_unit[devaddr] = dibp;
|
||||
uptr->u3 &= ~UNIT_ADDR(0x7ff);
|
||||
uptr->u3 |= UNIT_ADDR(devaddr);
|
||||
fprintf(stderr, "Set dev %x\n\r", GET_UADDR(uptr->u3));
|
||||
fprintf(stderr, "Set dev %s %x\n\r", dptr->name, GET_UADDR(uptr->u3));
|
||||
} else {
|
||||
fprintf(stderr, "Set dev %s0 %x\n\r", dptr->name, GET_UADDR(uptr->u3));
|
||||
for (i = 0; i < dibp->numunits; i++) {
|
||||
dev_unit[devaddr + i] = dibp;
|
||||
uptr = &((dibp->units)[i]);
|
||||
uptr->u3 &= ~UNIT_ADDR(0x7ff);
|
||||
uptr->u3 |= UNIT_ADDR(devaddr + i);
|
||||
fprintf(stderr, "Set dev %x\n\r", GET_UADDR(uptr->u3));
|
||||
}
|
||||
}
|
||||
return r;
|
||||
|
||||
@@ -76,12 +76,12 @@ int32 tmxr_poll = 10000;
|
||||
|
||||
|
||||
MTAB com_mod[] = {
|
||||
{MTAB_XTD | MTAB_VUN | MTAB_VALR, 0, "DEV", "DEV", &set_dev_addr,
|
||||
&show_dev_addr, NULL},
|
||||
{0}
|
||||
};
|
||||
|
||||
MTAB coml_mod[] = {
|
||||
{MTAB_XTD | MTAB_VUN | MTAB_VALR, 0, "DEV", "DEV", &set_dev_addr,
|
||||
&show_dev_addr, NULL},
|
||||
{ TT_MODE, TT_MODE_KSR, "KSR", "KSR", NULL },
|
||||
{ TT_MODE, TT_MODE_7B, "7b", "7B", NULL },
|
||||
{ TT_MODE, TT_MODE_8B, "8b", "8B", NULL },
|
||||
@@ -130,40 +130,41 @@ DEVICE coml_dev = {
|
||||
};
|
||||
|
||||
|
||||
/* Cent = 0xa0 */
|
||||
static const uint8 com_2741_in[128] = {
|
||||
/* SOH STX ETX EOT ENQ ACK BEL */
|
||||
0000, 0000, 0000, 0000, 0x1F, 0000, 0000, 0000, /*0-37*/
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /*0-37*/
|
||||
/* 8 9 A B C D E F */
|
||||
/*BS HT LF VT FF CR SO SI */
|
||||
0x5D, 0x7a, 0x5B, 0000, 0000, 0x1f, 0000, 0000,
|
||||
0xDD, 0xFA, 0xB5, 0x00, 0x00, 0x5b, 0x00, 0x00,
|
||||
/*DLE DC1 DC2 DC3 DC4 NAK SYN ETB */
|
||||
0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/*CAN EM SUB ESC FS GS RS US */
|
||||
0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* sp ! " # $ % & ' */
|
||||
0x81, 0xd7, 0x96, 0x16, 0x57, 0x8b, 0x61, 0x8d, /* 40 - 77 */
|
||||
0x81, 0xD7, 0x00, 0x16, 0x57, 0x8B, 0x61, 0x8D, /* 40 - 77 */
|
||||
/* ( ) * + , - . / */
|
||||
0x93, 0x95, 0x90, 0xe1, 0166, 0x40, 0067, 0x23, /* / = cS x37 */
|
||||
0x93, 0x94, 0x00, 0xE1, 0x37, 0xC0, 0x00, 0x23,
|
||||
/* 0 1 2 3 4 5 6 7 */
|
||||
0x15, 0x02, 0x04, 0x07, 0x08, 0x0b, 0x0d, 0x0e,
|
||||
0x15, 0x02, 0x04, 0x07, 0x08, 0x0B, 0x0D, 0x0E,
|
||||
/* 8 9 : ; < = > ? */
|
||||
0x10, 0x13, 0x88, 0x87, 0x84, 0x82, 0x8e, 0xa3,
|
||||
0x10, 0x13, 0x88, 0x87, 0x00, 0x82, 0x8E, 0xA3,
|
||||
/* @ A B C D E F G */
|
||||
0x20, 0xe2, 0xe4, 0xe7, 0xe8, 0xeb, 0xed, 0xee, /* 100 - 137 */
|
||||
0x20, 0xE2, 0xE4, 0xE7, 0xE8, 0xEB, 0xED, 0xEE, /* 100 - 137 */
|
||||
/* H I J K L M N O */
|
||||
0xf0, 0xf3, 0xc3, 0xc5, 0xc6, 0xc9, 0xca, 0xcc,
|
||||
0xF0, 0xF3, 0xC3, 0xC5, 0xC6, 0xC9, 0xCA, 0xCC,
|
||||
/* P Q R S T U V W */
|
||||
0xcf, 0xd1, 0xd2, 0xa5, 0xa6, 0xa9, 0xaa, 0xac,
|
||||
0xCF, 0xD1, 0xD2, 0xA5, 0xA6, 0xA9, 0xAA, 0xAC,
|
||||
/* X Y Z [ \ ] ^ _ */
|
||||
0xaf, 0xb1, 0xb2, 0000, 0000, 0000, 0000, 0000,
|
||||
0xAF, 0xB1, 0xB2, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* ` a b c d e f g */
|
||||
0000, 0x62, 0x64, 0x67, 0x68, 0x6b, 0x6d, 0x6e, /* 140 - 177 */
|
||||
0x00, 0x62, 0x64, 0x67, 0x68, 0x6B, 0x6D, 0x6E, /* 140 - 177 */
|
||||
/* h i j k l m n o */
|
||||
0x70, 0x73, 0x43, 0x45, 0x46, 0x49, 0x4a, 0x4c,
|
||||
0x70, 0x73, 0x43, 0x45, 0x46, 0x49, 0x4A, 0x4C,
|
||||
/* p q r s t u v w */
|
||||
0x4f, 0x51, 0x52, 0x25, 0x26, 0x29, 0x2a, 0x2c,
|
||||
0x4F, 0x51, 0x52, 0x25, 0x26, 0x29, 0x2A, 0x2C,
|
||||
/* x y z { | } ~ del*/
|
||||
0x2f, 0x31, 0x32, 0000, 0xb7, 0000, 0xf9, 0x7f
|
||||
0x2F, 0x31, 0x32, 0x00, 0xB7, 0x00, 0xF6, 0x00,
|
||||
};
|
||||
|
||||
static const uint8 com_2741_out[256] = {
|
||||
@@ -180,11 +181,11 @@ static const uint8 com_2741_out[256] = {
|
||||
/* 8, 9, A, B, C, D, E, F, */
|
||||
0xff, 'u', 'v', 0xff, 'w', 0xff, 'x', 0xff,
|
||||
/* 0, 1, 2, 3, 4, 5, 6, 7, */
|
||||
0xff, 'y', 'z', 0xff, 0xff, 0xff, 0xff, '/', /* 0x3x */
|
||||
0xff, 'y', 'z', 0xff, 0xff, 0xff, 0xff, ',', /* 0x3x */
|
||||
/* 8, 9, A, B, C, D, E, F, */
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
/* 0, 1, 2, 3, 4, 5, 6, 7, */
|
||||
'-', 0xff, 0xff, 'i', 0xff, 'k', 'l', 0xff, /* 0x4x */
|
||||
'-', 0xff, 0xff, 'j', 0xff, 'k', 'l', 0xff, /* 0x4x */
|
||||
/* 8, 9, A, B, C, D, E, F, */
|
||||
0xff, 'm', 'n', 0xff, 'o', 0xff, 0xff, 'p',
|
||||
/* 0, 1, 2, 3, 4, 5, 6, 7, */
|
||||
@@ -350,7 +351,9 @@ t_stat coml_srv(UNIT * uptr)
|
||||
chan_end(addr, SNS_CHNEND|SNS_DEVEND);
|
||||
return SCPE_OK;
|
||||
}
|
||||
if (ch == 0x1f) {
|
||||
if (ch == 0x5b) {
|
||||
ch = 0x1f;
|
||||
(void)chan_write_byte( addr, &ch);
|
||||
uptr->u3 &= ~0xff;
|
||||
chan_end(addr, SNS_CHNEND|SNS_DEVEND|SNS_UNITEXP);
|
||||
return SCPE_OK;
|
||||
|
||||
@@ -246,6 +246,8 @@ t_stat dasd_detach(UNIT *);
|
||||
t_stat dasd_boot(int32, DEVICE *);
|
||||
t_stat dasd_set_type(UNIT * uptr, int32 val, CONST char *cptr,
|
||||
void *desc);
|
||||
t_stat dasd_setd_type(UNIT * uptr, int32 val, CONST char *cptr,
|
||||
void *desc);
|
||||
t_stat dasd_get_type(FILE * st, UNIT * uptr, int32 v,
|
||||
CONST void *desc);
|
||||
t_stat dasd_help (FILE *st, DEVICE *dptr, UNIT *uptr, int32 flag,
|
||||
@@ -255,7 +257,9 @@ const char *dasd_description (DEVICE *dptr);
|
||||
MTAB dasd_mod[] = {
|
||||
{MTAB_XTD | MTAB_VUN | MTAB_VALR, 0, "TYPE", "TYPE",
|
||||
&dasd_set_type, &dasd_get_type, NULL, "Type of disk"},
|
||||
{MTAB_XTD | MTAB_VUN | MTAB_VALR, 0, "DEV", "DEV", &set_dev_addr,
|
||||
{MTAB_XTD | MTAB_VDV | MTAB_VALR, 0, NULL, "MODEL",
|
||||
&dasd_setd_type, NULL, NULL, "Set all drives to type"},
|
||||
{MTAB_XTD | MTAB_VDV | MTAB_VALR, 0, "DEV", "DEV", &set_dev_addr,
|
||||
&show_dev_addr, NULL},
|
||||
{0}
|
||||
};
|
||||
@@ -1769,7 +1773,7 @@ dasd_boot(int32 unit_num, DEVICE * dptr)
|
||||
t_stat
|
||||
dasd_set_type(UNIT * uptr, int32 val, CONST char *cptr, void *desc)
|
||||
{
|
||||
int i, u;
|
||||
int i;
|
||||
|
||||
if (cptr == NULL)
|
||||
return SCPE_ARG;
|
||||
@@ -1788,6 +1792,31 @@ dasd_set_type(UNIT * uptr, int32 val, CONST char *cptr, void *desc)
|
||||
return SCPE_ARG;
|
||||
}
|
||||
|
||||
t_stat
|
||||
dasd_setd_type(UNIT * uptr, int32 val, CONST char *cptr, void *desc)
|
||||
{
|
||||
int i, u;
|
||||
|
||||
if (cptr == NULL)
|
||||
return SCPE_ARG;
|
||||
if (uptr == NULL)
|
||||
return SCPE_IERR;
|
||||
if (uptr->flags & UNIT_ATT)
|
||||
return SCPE_ALATT;
|
||||
for (i = 0; disk_type[i].name != 0; i++) {
|
||||
if (strcmp(disk_type[i].name, cptr) == 0) {
|
||||
for (u = 0; u < 8; u++) {
|
||||
uptr->flags &= ~UNIT_TYPE;
|
||||
uptr->flags |= SET_TYPE(i);
|
||||
uptr->capac = disk_type[i].bpt * disk_type[i].heads * disk_type[i].cyl;
|
||||
uptr++;
|
||||
}
|
||||
return SCPE_OK;
|
||||
}
|
||||
}
|
||||
return SCPE_ARG;
|
||||
}
|
||||
|
||||
t_stat
|
||||
dasd_get_type(FILE * st, UNIT * uptr, int32 v, CONST void *desc)
|
||||
{
|
||||
|
||||
@@ -296,7 +296,7 @@ typedef struct dib {
|
||||
*/
|
||||
|
||||
#define MAX_CHAN 3
|
||||
#define SUB_CHANS 128
|
||||
#define SUB_CHANS 192
|
||||
|
||||
void post_extirq();
|
||||
|
||||
|
||||
@@ -263,10 +263,10 @@ lpr_srv(UNIT *uptr) {
|
||||
sim_activate(uptr, 20);
|
||||
uptr->u6++;
|
||||
}
|
||||
if (uptr->u3 & LPR_FULL || uptr->u6 >= 132) {
|
||||
if (uptr->u3 & LPR_FULL || uptr->u6 > 132) {
|
||||
uptr->u3 |= LPR_FULL;
|
||||
chan_end(addr, SNS_CHNEND);
|
||||
sim_activate(uptr, 3000);
|
||||
sim_activate(uptr, 5000);
|
||||
}
|
||||
}
|
||||
return SCPE_OK;
|
||||
|
||||
@@ -897,6 +897,8 @@ t_stat
|
||||
mt_detach(UNIT * uptr)
|
||||
{
|
||||
uptr->u3 &= UNIT_ADDR_MASK;
|
||||
uptr->u4 = 0;
|
||||
uptr->u5 = 0;
|
||||
return sim_tape_detach(uptr);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user