1
0
mirror of https://github.com/rcornwell/sims.git synced 2026-03-10 04:24:44 +00:00

IBM360: Minor changes to help OS/360 work better.

This commit is contained in:
Richard Cornwell
2020-01-29 21:36:25 -05:00
parent 31f0199197
commit c15b9ffa88
8 changed files with 65 additions and 30 deletions

View File

@@ -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);
}

View File

@@ -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);
}

View File

@@ -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;

View File

@@ -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;

View File

@@ -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)
{

View File

@@ -296,7 +296,7 @@ typedef struct dib {
*/
#define MAX_CHAN 3
#define SUB_CHANS 128
#define SUB_CHANS 192
void post_extirq();

View File

@@ -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;

View File

@@ -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);
}