diff --git a/IBM360/ibm360_cdp.c b/IBM360/ibm360_cdp.c index 181e41f..9a34821 100644 --- a/IBM360/ibm360_cdp.c +++ b/IBM360/ibm360_cdp.c @@ -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); } diff --git a/IBM360/ibm360_cdr.c b/IBM360/ibm360_cdr.c index a7a6e02..0210c5d 100644 --- a/IBM360/ibm360_cdr.c +++ b/IBM360/ibm360_cdr.c @@ -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); } diff --git a/IBM360/ibm360_chan.c b/IBM360/ibm360_chan.c index 36915d7..cd9cb69 100644 --- a/IBM360/ibm360_chan.c +++ b/IBM360/ibm360_chan.c @@ -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; diff --git a/IBM360/ibm360_com.c b/IBM360/ibm360_com.c index f268c62..7a41a25 100644 --- a/IBM360/ibm360_com.c +++ b/IBM360/ibm360_com.c @@ -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; diff --git a/IBM360/ibm360_dasd.c b/IBM360/ibm360_dasd.c index fb74203..635b83d 100644 --- a/IBM360/ibm360_dasd.c +++ b/IBM360/ibm360_dasd.c @@ -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) { diff --git a/IBM360/ibm360_defs.h b/IBM360/ibm360_defs.h index efaba0f..10bd5c7 100644 --- a/IBM360/ibm360_defs.h +++ b/IBM360/ibm360_defs.h @@ -296,7 +296,7 @@ typedef struct dib { */ #define MAX_CHAN 3 -#define SUB_CHANS 128 +#define SUB_CHANS 192 void post_extirq(); diff --git a/IBM360/ibm360_lpr.c b/IBM360/ibm360_lpr.c index 302d51b..84d6090 100644 --- a/IBM360/ibm360_lpr.c +++ b/IBM360/ibm360_lpr.c @@ -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; diff --git a/IBM360/ibm360_mt.c b/IBM360/ibm360_mt.c index 665ad84..7c9d601 100644 --- a/IBM360/ibm360_mt.c +++ b/IBM360/ibm360_mt.c @@ -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); }