From 124ca0ea0fb9167e0a88c106ebb766e925634aae Mon Sep 17 00:00:00 2001 From: Richard Cornwell Date: Sun, 5 Aug 2018 22:45:06 -0400 Subject: [PATCH] I7000: Second release of IBM 7000 simulators. 1) Support for new sim_card interface which supports stacking of input decks. 2) Changes to allow IBM 704 to properly run Fortran II and allow i7090 to be set to IBM 704 correctly. 3) Changes to allow 9IOTA diagnostics to pass. --- I7000/README.md | 2 +- I7000/i7000_cdp.c | 48 ++++++++++------- I7000/i7000_cdr.c | 47 ++++++++++------ I7000/i7000_ht.c | 6 +-- I7000/i7000_mt.c | 36 +++++++------ I7000/i7080_chan.c | 2 +- I7000/i7090_cdp.c | 19 ++++--- I7000/i7090_cdr.c | 34 ++++++------ I7000/i7090_chan.c | 26 ++++----- I7000/i7090_cpu.c | 131 ++++++++++++++++++++++++--------------------- I7000/i7090_drum.c | 2 +- I7000/i7090_sys.c | 2 +- doc/i7010_doc.doc | Bin 193024 -> 193536 bytes doc/i701_doc.doc | Bin 146432 -> 146944 bytes doc/i7070_doc.doc | Bin 190976 -> 192000 bytes doc/i7080_doc.doc | Bin 200704 -> 201728 bytes doc/i7090_doc.doc | Bin 229376 -> 230400 bytes 17 files changed, 198 insertions(+), 157 deletions(-) diff --git a/I7000/README.md b/I7000/README.md index 16a901ff..60841c2a 100644 --- a/I7000/README.md +++ b/I7000/README.md @@ -6,7 +6,7 @@ Latest status for I7000 Cpus: ## i704 * SAP works. - * Fort2 unfinished. + * Fort2 working. ## i7010 * PR155 works. diff --git a/I7000/i7000_cdp.c b/I7000/i7000_cdp.c index e471ccea..b664360e 100644 --- a/I7000/i7000_cdp.c +++ b/I7000/i7000_cdp.c @@ -87,7 +87,7 @@ DEVICE cdp_dev = { "CDP", cdp_unit, NULL, cdp_mod, NUM_DEVS_CDP, 8, 15, 1, 8, 8, NULL, NULL, NULL, NULL, &cdp_attach, &cdp_detach, - &cdp_dib, DEV_DISABLE | DEV_DEBUG, 0, crd_debug, + &cdp_dib, DEV_DISABLE | DEV_DEBUG | DEV_CARD, 0, crd_debug, NULL, NULL, &cdp_help, NULL, NULL, &cdp_description }; @@ -189,6 +189,8 @@ t_stat cdp_srv(UNIT *uptr) { int chan = UNIT_G_CHAN(uptr->flags); int u = (uptr - cdp_unit); + uint16 *image = (uint16 *)(uptr->up7); + /* Waiting for disconnect */ if (uptr->u5 & URCSTA_WDISCO) { if (chan_stat(chan, DEV_DISCO)) { @@ -208,20 +210,22 @@ cdp_srv(UNIT *uptr) { /* Done waiting, punch card */ if (uptr->u5 & URCSTA_FULL) { #ifdef STACK_DEV - switch(sim_punch_card(uptr, - &stack_unit[(u * 10) + ((uptr->u5 >> 16) & 0xf)])) { + UNIT *sptr = &stack_unit[(u * 10) + ((uptr->u5 >> 16) & 0xf)]; + if ((uptr->flags & UNIT_ATT) != 0 || (sptr->flags & UNIT_ATT) == 0) + sptr = uptr; + switch(sim_punch_card(sptr, image)) { #else - switch(sim_punch_card(uptr, NULL)) { + switch(sim_punch_card(uptr, image)) { #endif - case SCPE_EOF: - case SCPE_UNATT: + case CDSE_EOF: + case CDSE_EMPTY: chan_set_eof(chan); break; /* If we get here, something is wrong */ - case SCPE_IOERR: + case CDSE_ERROR: chan_set_error(chan); break; - case SCPE_OK: + case CDSE_OK: break; } uptr->u5 &= ~URCSTA_FULL; @@ -240,11 +244,8 @@ cdp_srv(UNIT *uptr) { /* Copy next column over */ if (uptr->u5 & URCSTA_WRITE && uptr->u4 < 80) { - struct _card_data *data; uint8 ch = 0; - data = (struct _card_data *)uptr->up7; - switch(chan_read_char(chan, &ch, 0)) { case TIME_ERROR: case END_RECORD: @@ -257,7 +258,7 @@ cdp_srv(UNIT *uptr) { else if (ch == 020) ch = 0; sim_debug(DEBUG_DATA, &cdp_dev, "%d: Char < %02o\n", u, ch); - data->image[uptr->u4++] = sim_bcd_to_hol(ch); + image[uptr->u4++] = sim_bcd_to_hol(ch); if (uptr->u4 == 80) { chan_set(chan, DEV_REOR); uptr->u5 |= URCSTA_WDISCO|URCSTA_BUSY|URCSTA_FULL; @@ -278,24 +279,35 @@ cdp_ini(UNIT *uptr, t_bool f) { t_stat cdp_attach(UNIT * uptr, CONST char *file) { - t_stat r; + t_stat r; if ((r = sim_card_attach(uptr, file)) != SCPE_OK) return r; - uptr->u5 = 0; + if (uptr->up7 == 0) { + uptr->up7 = calloc(80, sizeof(uint16)); + uptr->u5 = 0; + } return SCPE_OK; } t_stat cdp_detach(UNIT * uptr) { - if (uptr->u5 & URCSTA_FULL) + uint16 *image = (uint16 *)(uptr->up7); + + if (uptr->u5 & URCSTA_FULL) { #ifdef STACK_DEV - sim_punch_card(uptr, &stack_unit[ - ((uptr - cdp_unit) * 10) + ((uptr->u5 >> 16) & 0xf)]); + UNIT *sptr = &stack_unit[((uptr - cdp_unit) * 10) + ((uptr->u5 >> 16) & 0xf)]; + if ((uptr->flags & UNIT_ATT) != 0 || (sptr->flags & UNIT_ATT) == 0) + sptr = uptr; + sim_punch_card(sptr, image); #else - sim_punch_card(uptr, NULL); + sim_punch_card(uptr, image); #endif + } + if (uptr->up7 == 0) + free(uptr->up7); + uptr->up7 = 0; return sim_card_detach(uptr); } diff --git a/I7000/i7000_cdr.c b/I7000/i7000_cdr.c index a7d5f966..39c355f2 100644 --- a/I7000/i7000_cdr.c +++ b/I7000/i7000_cdr.c @@ -90,8 +90,8 @@ MTAB cdr_mod[] = { DEVICE cdr_dev = { "CDR", cdr_unit, NULL, cdr_mod, NUM_DEVS_CDR, 8, 15, 1, 8, 8, - NULL, NULL, NULL, &cdr_boot, &cdr_attach, &sim_card_detach, - &cdr_dib, DEV_DISABLE | DEV_DEBUG, 0, crd_debug, + NULL, NULL, NULL, &cdr_boot, &cdr_attach, &cdr_detach, + &cdr_dib, DEV_DISABLE | DEV_DEBUG | DEV_CARD, 0, crd_debug, NULL, NULL, &cdr_help, NULL, NULL, &cdr_description }; @@ -168,9 +168,7 @@ t_stat cdr_srv(UNIT *uptr) { int chan = UNIT_G_CHAN(uptr->flags); int u = (uptr - cdr_unit); - struct _card_data *data; - - data = (struct _card_data *)uptr->up7; + uint16 *image = (uint16 *)(uptr->up7); /* Waiting for disconnect */ if (uptr->u5 & URCSTA_WDISCO) { @@ -200,26 +198,26 @@ cdr_srv(UNIT *uptr) { /* Check if new card requested. */ if (uptr->u4 == 0 && uptr->u5 & URCSTA_READ && (uptr->u5 & URCSTA_CARD) == 0) { - switch(sim_read_card(uptr)) { - case SCPE_EOF: + switch(sim_read_card(uptr, image)) { + case CDSE_EOF: sim_debug(DEBUG_DETAIL, &cdr_dev, "%d: EOF\n", u); /* Fall through */ - case SCPE_UNATT: + case CDSE_EMPTY: chan_set_eof(chan); chan_set_attn(chan); chan_clear(chan, DEV_SEL); uptr->u5 |= URCSTA_EOF; uptr->u5 &= ~(URCSTA_BUSY|URCSTA_READ); return SCPE_OK; - case SCPE_IOERR: + case CDSE_ERROR: sim_debug(DEBUG_DETAIL, &cdr_dev, "%d: ERF\n", u); uptr->u5 |= URCSTA_ERR; uptr->u5 &= ~(URCSTA_BUSY|URCSTA_READ); chan_set_attn(chan); chan_clear(chan, DEV_SEL); return SCPE_OK; - case SCPE_OK: + case CDSE_OK: uptr->u5 |= URCSTA_CARD; #ifdef I7010 chan_set_attn_urec(chan, cdr_dib.addr); @@ -228,7 +226,7 @@ cdr_srv(UNIT *uptr) { } #ifdef I7070 /* Check if load card. */ - if (uptr->capac && (data->image[uptr->capac-1] & 0x800)) { + if (uptr->capac && (image[uptr->capac-1] & 0x800)) { uptr->u5 |= URCSTA_LOAD; chan_set_load_mode(chan); } else { @@ -248,7 +246,7 @@ cdr_srv(UNIT *uptr) { #ifdef I7080 /* Detect RSU */ - if (data->image[uptr->u4] == 0x924) { + if (image[uptr->u4] == 0x924) { uptr->u5 &= ~URCSTA_READ; uptr->u5 |= URCSTA_WDISCO; chan_set(chan, DEV_REOR); @@ -257,7 +255,7 @@ cdr_srv(UNIT *uptr) { } #endif - ch = sim_hol_to_bcd(data->image[uptr->u4]); + ch = sim_hol_to_bcd(image[uptr->u4]); /* Handle invalid punch */ if (ch == 0x7f) { @@ -320,14 +318,31 @@ cdr_attach(UNIT * uptr, CONST char *file) if ((r = sim_card_attach(uptr, file)) != SCPE_OK) return r; - uptr->u5 &= URCSTA_BUSY|URCSTA_WDISCO; - uptr->u4 = 0; - uptr->u6 = 0; + if (uptr->up7 == 0) { + uptr->up7 = malloc(sizeof(uint16)*80); + uptr->u5 &= URCSTA_BUSY|URCSTA_WDISCO; + uptr->u4 = 0; + uptr->u6 = 0; + } #ifdef I7010 chan_set_attn_urec(UNIT_G_CHAN(uptr->flags), cdr_dib.addr); #endif return SCPE_OK; } + +t_stat +cdr_detach(UNIT * uptr) +{ + t_stat r; + + if ((r = sim_card_detach(uptr)) != SCPE_OK) + return r; + if (uptr->up7 != 0) + free(uptr->up7); + uptr->up7 = 0; + return SCPE_OK; +} + #ifdef I7070 t_stat cdr_setload(UNIT *uptr, int32 val, CONST char *cptr, void *desc) diff --git a/I7000/i7000_ht.c b/I7000/i7000_ht.c index 69743ed0..7e3cd0cf 100644 --- a/I7000/i7000_ht.c +++ b/I7000/i7000_ht.c @@ -202,7 +202,7 @@ DEVICE hta_dev = { "HTA", hta_unit, NULL, ht_mod, NUM_UNITS_HT + 1, 8, 15, 1, 8, 8, NULL, NULL, &ht_reset, &ht_boot, &ht_attach, &ht_detach, - &ht_dib, DEV_BUF_NUM(0) | DEV_DISABLE | DEV_DEBUG, 0, dev_debug, + &ht_dib, DEV_BUF_NUM(0) | DEV_DISABLE | DEV_DEBUG | DEV_TAPE, 0, dev_debug, NULL, NULL, &ht_help, NULL, NULL, &ht_description }; @@ -211,7 +211,7 @@ DEVICE htb_dev = { "HTB", &hta_unit[NUM_UNITS_HT + 1], NULL, ht_mod, NUM_UNITS_HT + 1, 8, 15, 1, 8, 8, NULL, NULL, &ht_reset, &ht_boot, &ht_attach, &ht_detach, - &ht_dib, DEV_BUF_NUM(1) | DEV_DISABLE | DEV_DEBUG, 0, dev_debug, + &ht_dib, DEV_BUF_NUM(1) | DEV_DISABLE | DEV_DEBUG | DEV_TAPE, 0, dev_debug, NULL, NULL, &ht_help, NULL, NULL, &ht_description }; #endif @@ -959,7 +959,7 @@ ht_attach(UNIT * uptr, CONST char *file) { t_stat r; - if ((r = sim_tape_attach(uptr, file)) != SCPE_OK) + if ((r = sim_tape_attach_ex(uptr, file, 0, 0)) != SCPE_OK) return r; uptr->u5 = HT_BOT /*|HT_ATTN */ ; return SCPE_OK; diff --git a/I7000/i7000_mt.c b/I7000/i7000_mt.c index a9f4244a..d35ca979 100644 --- a/I7000/i7000_mt.c +++ b/I7000/i7000_mt.c @@ -273,7 +273,7 @@ DEVICE mtz_dev = { "MT", &mta_unit[NUM_DEVS_MT * 10], NULL, mt_mod, NUM_UNITS_MT, 8, 15, 1, 8, 8, NULL, NULL, &mt_reset, &mt_boot, &mt_attach, &mt_detach, - &mt_dib, DEV_BUF_NUM(NUM_DEVS_MT) | DEV_DISABLE | DEV_DEBUG, 0, dev_debug, + &mt_dib, DEV_BUF_NUM(NUM_DEVS_MT) | DEV_DISABLE | DEV_DEBUG | DEV_TAPE, 0, dev_debug, NULL, NULL, &mt_help, NULL, NULL, &mt_description }; #endif @@ -283,7 +283,7 @@ DEVICE mta_dev = { "MTA", mta_unit, NULL, mt_mod, NUM_UNITS_MT, 8, 15, 1, 8, 8, NULL, NULL, &mt_reset, &mt_boot, &mt_attach, &mt_detach, - &mt_dib, DEV_BUF_NUM(0) | DEV_DISABLE | DEV_DEBUG, 0, dev_debug, + &mt_dib, DEV_BUF_NUM(0) | DEV_DISABLE | DEV_DEBUG | DEV_TAPE, 0, dev_debug, NULL, NULL, &mt_help, NULL, NULL, &mt_description }; @@ -292,7 +292,7 @@ DEVICE mtb_dev = { "MTB", &mta_unit[10], NULL, mt_mod, NUM_UNITS_MT, 8, 15, 1, 8, 8, NULL, NULL, &mt_reset, &mt_boot, &mt_attach, &mt_detach, - &mt_dib, DEV_BUF_NUM(1) | DEV_DISABLE | DEV_DEBUG, 0, dev_debug, + &mt_dib, DEV_BUF_NUM(1) | DEV_DISABLE | DEV_DEBUG | DEV_TAPE, 0, dev_debug, NULL, NULL, &mt_help, NULL, NULL, &mt_description }; @@ -301,7 +301,7 @@ DEVICE mtc_dev = { "MTC", &mta_unit[20], NULL, mt_mod, NUM_UNITS_MT, 8, 15, 1, 8, 8, NULL, NULL, &mt_reset, &mt_boot, &mt_attach, &mt_detach, - &mt_dib, DEV_BUF_NUM(2) | DEV_DISABLE | DEV_DEBUG, 0, dev_debug, + &mt_dib, DEV_BUF_NUM(2) | DEV_DISABLE | DEV_DEBUG | DEV_TAPE, 0, dev_debug, NULL, NULL, &mt_help, NULL, NULL, &mt_description }; @@ -310,7 +310,7 @@ DEVICE mtd_dev = { "MTD", &mta_unit[30], NULL, mt_mod, NUM_UNITS_MT, 8, 15, 1, 8, 36, NULL, NULL, &mt_reset, &mt_boot, &mt_attach, &mt_detach, - &mt_dib, DEV_BUF_NUM(3) | DEV_DISABLE | DEV_DEBUG, 0, dev_debug, + &mt_dib, DEV_BUF_NUM(3) | DEV_DISABLE | DEV_DEBUG | DEV_TAPE, 0, dev_debug, NULL, NULL, &mt_help, NULL, NULL, &mt_description }; @@ -319,7 +319,7 @@ DEVICE mte_dev = { "MTE", &mta_unit[40], NULL, mt_mod, NUM_UNITS_MT, 8, 15, 1, 8, 8, NULL, NULL, &mt_reset, &mt_boot, &mt_attach, &mt_detach, - &mt_dib, DEV_BUF_NUM(4) | DEV_DIS | DEV_DISABLE | DEV_DEBUG, 0, dev_debug, + &mt_dib, DEV_BUF_NUM(4) | DEV_DIS | DEV_DISABLE | DEV_DEBUG | DEV_TAPE, 0, dev_debug, NULL, NULL, &mt_help, NULL, NULL, &mt_description }; @@ -328,7 +328,7 @@ DEVICE mtf_dev = { "MTF", &mta_unit[50], NULL, mt_mod, NUM_UNITS_MT, 8, 15, 1, 8, 8, NULL, NULL, &mt_reset, &mt_boot, &mt_attach, &mt_detach, - &mt_dib, DEV_BUF_NUM(5) | DEV_DIS | DEV_DISABLE | DEV_DEBUG, 0, dev_debug, + &mt_dib, DEV_BUF_NUM(5) | DEV_DIS | DEV_DISABLE | DEV_DEBUG | DEV_TAPE, 0, dev_debug, NULL, NULL, &mt_help, NULL, NULL, &mt_description }; #endif @@ -510,7 +510,7 @@ uint32 mt_cmd(UNIT * uptr, uint16 cmd, uint16 dev) return SCPE_IOERR; } uptr->u5 |= MT_WEF; -#if I7010 +#if I7010 chan_set_sel(chan, 1); chan_clear_status(chan); mt_chan[chan] = MTC_BSY | MTC_SEL | unit; @@ -743,7 +743,7 @@ t_stat mt_srv(UNIT * uptr) /* Channel has disconnected, abort current read. */ if ((mt_chan[chan] & 037) == (MTC_SEL | unit) && - chan_stat(chan, DEV_DISCO)) { + chan_test(chan, DEV_DISCO)) { uptr->u5 &= ~MT_CMDMSK; reclen = uptr->hwmark; if (cmd == MT_WRS || cmd == MT_WRSB) { @@ -757,16 +757,16 @@ t_stat mt_srv(UNIT * uptr) } } else if (cmd == MT_RDS || cmd == MT_RDSB) { sim_debug(DEBUG_DETAIL, dptr, - "Read flush unit=%d %s Block %d chars\n", - unit, (cmd == MT_RDS) ? "BCD" : "Binary", reclen); + "Read flush unit=%d %s at %d Block %d chars\n", + unit, (cmd == MT_RDS) ? "BCD" : "Binary", uptr->u6, reclen); /* Keep moving until end of block */ - if (uptr->u6 < (int32)uptr->hwmark ) { + if (uptr->u6 < (int32)reclen ) { reclen -= uptr->u6; uptr->u3 += reclen; uptr->u5 |= MT_SKIP|MT_IDLE; uptr->u6 = 0; uptr->hwmark = 0; - chan_clear(chan, DEV_DISCO | DEV_WEOR); + chan_clear(chan, DEV_WEOR ); sim_activate(uptr, reclen * T1_us); return SCPE_OK; } else { @@ -811,7 +811,7 @@ t_stat mt_srv(UNIT * uptr) #else chan_clear(chan, DEV_SEL|STA_TWAIT); #endif - mt_chan[chan] = 0; + mt_chan[chan] = 0; sim_debug(DEBUG_DETAIL, dptr, "Skip unit=%d\n", unit); /* Allow time for tape to be restarted, before stop */ sim_activate(uptr, us_to_ticks(500)); @@ -879,6 +879,7 @@ t_stat mt_srv(UNIT * uptr) chan_set_error(chan); } #else + chan_set(chan, DEV_REOR); chan_set_attn(chan); #endif } @@ -891,7 +892,7 @@ t_stat mt_srv(UNIT * uptr) sim_debug(DEBUG_DETAIL, dptr, "%s Block %d chars\n", (cmd == MT_RDS) ? "BCD" : "Binary", reclen); #ifdef I7010 - if (mode && mt_buffer[bufnum][0] == 017) + if (mode && mt_buffer[bufnum][0] == 017) chan_set_eof(chan); #endif @@ -944,7 +945,7 @@ t_stat mt_srv(UNIT * uptr) sim_activate(uptr, (uptr->hwmark-uptr->u6) * T1_us); uptr->u3 += (uptr->hwmark - uptr->u6); uptr->u6 = uptr->hwmark; /* Force read next record */ - } + } sim_activate(uptr, T1_us); break; @@ -1057,6 +1058,7 @@ t_stat mt_srv(UNIT * uptr) r = MTSE_OK; } else { sim_debug(DEBUG_DETAIL, dptr, "error=%d\n", r); + uptr->u6 = uptr->hwmark; uptr->u5 &= ~MT_CMDMSK; chan_set_attn(chan); chan_clear(chan, DEV_SEL); @@ -1354,7 +1356,7 @@ mt_attach(UNIT * uptr, CONST char *file) { t_stat r; - if ((r = sim_tape_attach(uptr, file)) != SCPE_OK) + if ((r = sim_tape_attach_ex(uptr, file, 0, 0)) != SCPE_OK) return r; uptr->u3 = 0; uptr->u5 |= MT_RDY; diff --git a/I7000/i7080_chan.c b/I7000/i7080_chan.c index 71504542..e60baff1 100644 --- a/I7000/i7080_chan.c +++ b/I7000/i7080_chan.c @@ -57,7 +57,7 @@ extern uint16 iotraps; extern uint8 iocheck; extern UNIT cpu_unit; extern uint16 IC; -extern uint8 AC[5 * 512]; +extern uint8 AC[6 * 512]; extern int chwait; extern uint16 selreg; extern uint16 selreg2; diff --git a/I7000/i7090_cdp.c b/I7000/i7090_cdp.c index 86826723..c0cae9f9 100644 --- a/I7000/i7090_cdp.c +++ b/I7000/i7090_cdp.c @@ -77,7 +77,7 @@ DEVICE cdp_dev = { "CDP", cdp_unit, NULL, cdp_mod, NUM_DEVS_CDP, 8, 15, 1, 8, 36, NULL, NULL, &cdp_reset, NULL, &cdp_attach, &cdp_detach, - &cdp_dib, DEV_DISABLE | DEV_DEBUG, 0, crd_debug, + &cdp_dib, DEV_DISABLE | DEV_DEBUG | DEV_CARD, 0, crd_debug, NULL, NULL, &cdp_help, NULL, NULL, &cdp_description }; @@ -121,19 +121,19 @@ t_stat cdp_srv(UNIT * uptr) { int chan = UNIT_G_CHAN(uptr->flags); int u = (uptr - cdp_unit); + uint16 *image = (uint16 *)(uptr->up7); int pos; t_uint64 wd; int bit; t_uint64 mask; int b; int col; - struct _card_data *data; /* Channel has disconnected, abort current card. */ if (uptr->u5 & URCSTA_CMD && chan_stat(chan, DEV_DISCO)) { if ((uptr->u5 & CDPSTA_POSMASK) != 0) { sim_debug(DEBUG_DETAIL, &cdp_dev, "punch card\n"); - sim_punch_card(uptr, NULL); + sim_punch_card(uptr, image); uptr->u5 &= ~CDPSTA_PUNCH; } uptr->u5 &= ~(URCSTA_WRITE | URCSTA_CMD | CDPSTA_POSMASK); @@ -189,7 +189,7 @@ t_stat cdp_srv(UNIT * uptr) sim_debug(DEBUG_CHAN, &cdp_dev, "unit=%d disconnect\n", u); } sim_debug(DEBUG_DETAIL, &cdp_dev, "punch card full\n"); - sim_punch_card(uptr, NULL); + sim_punch_card(uptr, image); uptr->u5 |= URCSTA_IDLE; uptr->u5 &= ~(URCSTA_WRITE | CDPSTA_POSMASK | CDPSTA_PUNCH); uptr->wait = 85; @@ -201,7 +201,6 @@ t_stat cdp_srv(UNIT * uptr) sim_debug(DEBUG_DATA, &cdp_dev, "unit=%d write column %d ", u, pos); wd = 0; - data = (struct _card_data *)uptr->up7; switch (chan_read(chan, &wd, 0)) { case DATA_OK: sim_debug(DEBUG_DATA, &cdp_dev, " %012llo\n", wd); @@ -212,7 +211,7 @@ t_stat cdp_srv(UNIT * uptr) for (col = 35; col >= 0; mask <<= 1, col--) { if (wd & mask) - data->image[col + b] |= bit; + image[col + b] |= bit; } pos++; uptr->wait = 0; @@ -258,13 +257,19 @@ cdp_attach(UNIT * uptr, CONST char *file) if ((r = sim_card_attach(uptr, file)) != SCPE_OK) return r; - uptr->u5 = CDPSTA_POSMASK; + if (uptr->up7 == 0) { + uptr->up7 = calloc(80, sizeof(uint16)); + uptr->u5 = CDPSTA_POSMASK; + } return SCPE_OK; } t_stat cdp_detach(UNIT * uptr) { + if (uptr->up7 != 0) + free(uptr->up7); + uptr->up7 = 0; return sim_card_detach(uptr); } diff --git a/I7000/i7090_cdr.c b/I7000/i7090_cdr.c index 493b5d83..a72f1506 100644 --- a/I7000/i7090_cdr.c +++ b/I7000/i7090_cdr.c @@ -81,7 +81,7 @@ DEVICE cdr_dev = { "CDR", cdr_unit, NULL, cdr_mod, NUM_DEVS_CDR, 8, 15, 1, 8, 36, NULL, NULL, &cdr_reset, &cdr_boot, &cdr_attach, &cdr_detach, - &cdr_dib, DEV_DISABLE | DEV_DEBUG, 0, crd_debug, + &cdr_dib, DEV_DISABLE | DEV_DEBUG | DEV_CARD, 0, crd_debug, NULL, NULL, &cdr_help, NULL, NULL, &cdr_description }; @@ -118,9 +118,9 @@ t_stat cdr_srv(UNIT * uptr) int chan = UNIT_G_CHAN(uptr->flags); int u = (uptr - cdr_unit); int pos, col, b; + uint16 *image = (uint16 *)(uptr->up7); uint16 bit; t_uint64 mask, wd; - struct _card_data *data; /* Channel has disconnected, abort current read. */ if (uptr->u5 & URCSTA_CMD && chan_stat(chan, DEV_DISCO)) { @@ -163,23 +163,23 @@ t_stat cdr_srv(UNIT * uptr) pos = (uptr->u5 & CDRPOSMASK) >> CDRPOSSHIFT; if (pos == (CDRPOSMASK >> CDRPOSSHIFT)) { - switch (sim_read_card(uptr)) { - case SCPE_UNATT: - case SCPE_IOERR: + switch (sim_read_card(uptr, image)) { + case CDSE_EMPTY: + case CDSE_ERROR: sim_debug(DEBUG_EXP, &cdr_dev, "unit=%d Setting ATTN\n", u); chan_set_error(chan); chan_set_attn(chan); uptr->u5 &= ~URCSTA_READ; sim_activate(uptr, us_to_ticks(1000)); return SCPE_OK; - case SCPE_EOF: + case CDSE_EOF: sim_debug(DEBUG_EXP, &cdr_dev, "unit=%d EOF\n", u); chan_set_eof(chan); chan_set_attn(chan); uptr->u5 &= ~URCSTA_READ; sim_activate(uptr, us_to_ticks(1000)); return SCPE_OK; - case SCPE_OK: + case CDSE_OK: break; } pos = 0; @@ -196,7 +196,6 @@ t_stat cdr_srv(UNIT * uptr) return SCPE_OK; } - data = (struct _card_data *)uptr->up7; /* Bit flip into read buffer */ bit = 1 << (pos / 2); mask = 1; @@ -204,7 +203,7 @@ t_stat cdr_srv(UNIT * uptr) b = (pos & 1)?36:0; for (col = 35; col >= 0; mask <<= 1) { - if (data->image[col-- + b] & bit) + if (image[col-- + b] & bit) wd |= mask; } @@ -246,7 +245,7 @@ cdr_boot(int32 unit_num, DEVICE * dptr) int chan = UNIT_G_CHAN(uptr->flags); t_stat r; int pos; - struct _card_data *data; + uint16 *image = (uint16 *)(uptr->up7); if ((uptr->flags & UNIT_ATT) == 0) return SCPE_UNATT; /* attached? */ @@ -254,12 +253,11 @@ cdr_boot(int32 unit_num, DEVICE * dptr) /* Init for a read */ if (cdr_cmd(uptr, IO_RDS, cdr_dib.addr) != SCPE_OK) return STOP_IONRDY; - r = sim_read_card(uptr); + r = sim_read_card(uptr, image); if (r != SCPE_OK) return r; /* Copy first three records. */ - data = (struct _card_data *)uptr->up7; uptr->u5 &= ~CDRPOSMASK; for(pos = 0; pos <3; pos++) { uint16 bit = 1 << (pos / 2); @@ -271,7 +269,7 @@ cdr_boot(int32 unit_num, DEVICE * dptr) break; M[pos] = 0; for (col = 35; col >= 0; mask <<= 1) { - if (data->image[col-- + b] & bit) + if (image[col-- + b] & bit) M[pos] |= mask; } sim_debug(DEBUG_DATA, &cdr_dev, "boot read row %d %012llo\n", @@ -295,14 +293,20 @@ cdr_attach(UNIT * uptr, CONST char *file) if ((r = sim_card_attach(uptr, file)) != SCPE_OK) return r; - uptr->u5 = 0; - uptr->u4 = 0; + if (uptr->up7 == 0) { + uptr->up7 = malloc(sizeof(uint16)*80); + uptr->u5 = 0; + uptr->u4 = 0; + } return SCPE_OK; } t_stat cdr_detach(UNIT * uptr) { + if (uptr->up7 != 0) + free(uptr->up7); + uptr->up7 = 0; return sim_card_detach(uptr); } diff --git a/I7000/i7090_chan.c b/I7000/i7090_chan.c index 3daf25ea..575188c2 100644 --- a/I7000/i7090_chan.c +++ b/I7000/i7090_chan.c @@ -55,7 +55,7 @@ extern UNIT cpu_unit; extern uint16 IC; extern t_uint64 MQ; extern uint32 drum_addr; -extern uint32 hsdrm_addr; +extern t_uint64 hsdrm_addr; t_stat chan_reset(DEVICE * dptr); void chan_fetch(int chan); @@ -344,10 +344,6 @@ chan_proc() cmask = 0x0100 << chan; switch (CHAN_G_TYPE(chan_unit[chan].flags)) { case CHAN_PIO: - if (chan_flags[chan] & CHS_ATTN) { - chan_flags[chan] &= - ~(CHS_ATTN | STA_START | STA_ACTIVE | STA_WAIT); - } if ((chan_flags[chan] & (DEV_REOR|DEV_SEL|DEV_FULL)) == (DEV_SEL|DEV_REOR)) { sim_debug(DEBUG_DETAIL, &chan_dev, "chan got EOR\n"); @@ -360,10 +356,10 @@ chan_proc() /* On first command, copy it to drum address and load another */ if ((chan_info[chan] & (CHAINF_RUN | CHAINF_START)) == CHAINF_START) { - hsdrm_addr = (int)M[location[chan] - 1]; + hsdrm_addr = M[location[chan] - 1]; chan_info[chan] |= CHAINF_RUN; if (chan_dev.dctrl & cmask) - sim_debug(DEBUG_DETAIL, &chan_dev, "chan %d HDaddr %06o\n", + sim_debug(DEBUG_DETAIL, &chan_dev, "chan %d HDaddr %012llo\n", chan, hsdrm_addr); chan_fetch(chan); continue; @@ -399,7 +395,6 @@ chan_proc() iotraps |= 1 << chan; break; } - iotraps |= 1LL << (chan + 18); if (chan_dev.dctrl & cmask) sim_debug(DEBUG_DETAIL, &chan_dev, "chan %d attn< %o\n", chan, cmd[chan] & 070); @@ -500,9 +495,8 @@ chan_proc() chan_flags[chan] |= DEV_DISCO | DEV_WEOR; chan_flags[chan] &= ~(STA_START | STA_ACTIVE | STA_PEND); - if (CHAN_G_TYPE(chan_unit[chan].flags) == - CHAN_7289) { - iotraps |= 1 << chan; + if (CHAN_G_TYPE(chan_unit[chan].flags) == CHAN_7289) { + iotraps |= 1 << chan; sim_debug(DEBUG_TRAP, &chan_dev, "chan %d Trap\n", chan); } @@ -845,8 +839,8 @@ chan_proc() case SCPE_NODEV: chan9_set_error(chan, SNS_IOCHECK); iotraps |= 1 << chan; - chan_flags[chan] &= - ~(CTL_PREAD|CTL_PWRITE|CTL_SNS|CTL_CNTL|STA_ACTIVE); + chan_flags[chan] &= ~(CTL_PREAD|CTL_PWRITE|CTL_SNS| + CTL_CNTL|STA_ACTIVE); continue; case SCPE_BUSY: /* Device not ready yet, wait */ continue; @@ -1266,8 +1260,10 @@ chan_cmd(uint16 dev, uint16 dcmd) if ((chan_flags[chan] & (DEV_FULL|DEV_WRITE)) == (DEV_FULL|DEV_WRITE)) return SCPE_BUSY; /* Yes, disconnect device and tell it to write a EOR */ - chan_flags[chan] |= DEV_DISCO | DEV_WEOR; - return SCPE_BUSY; + if ((chan_flags[chan] & (DEV_WRITE)) == (DEV_WRITE) || + (chan_flags[chan] & (DEV_FULL)) == (DEV_FULL)) + chan_flags[chan] |= DEV_DISCO | DEV_WEOR; + return SCPE_BUSY; } /* Unit is busy doing something, wait */ if (chan_flags[chan] & (DEV_SEL | DEV_DISCO | STA_TWAIT | STA_WAIT)) diff --git a/I7000/i7090_cpu.c b/I7000/i7090_cpu.c index 615c5ea6..e47547a4 100644 --- a/I7000/i7090_cpu.c +++ b/I7000/i7090_cpu.c @@ -187,7 +187,7 @@ #define HIST_INT 2 /* interrupt cycle */ #define HIST_TRP 3 /* trap cycle */ #define HIST_MIN 64 -#define HIST_MAX 10000 +#define HIST_MAX 1000000 #define HIST_NOEA 0x40000000 #define HIST_PC 0x10000 @@ -299,8 +299,13 @@ extern uint32 drum_addr; */ UNIT cpu_unit = +#ifdef I7090 { UDATA(rtc_srv, UNIT_BINK | MODEL(CPU_7090) | MEMAMOUNT(4), MAXMEMSIZE/2 ), 120 }; +#else + { UDATA(rtc_srv, UNIT_BINK | MODEL(CPU_704) | MEMAMOUNT(4), + MAXMEMSIZE/2 ), 120 }; +#endif REG cpu_reg[] = { {ORDATAD(IC, IC, 15, "Instruction Counter"), REG_FIT}, @@ -724,7 +729,6 @@ sim_instr(void) int xeccnt = 15; int shiftcnt; int stopnext = 0; - int first_rdwr = 0; int instr_count = 0; /* Number of instructions to execute */ if (sim_step != 0) { @@ -734,7 +738,7 @@ sim_instr(void) /* Set cycle time for delays */ switch(CPU_MODEL) { - case CPU_704: + case CPU_704: cycle_time = 50; break; /* Needed to allow SAP to work */ case CPU_709: cycle_time = 120; break; /* 83,333 cycles per second */ default: case CPU_7090: cycle_time = 22; break; /* 454,545 cycles per second */ @@ -758,6 +762,7 @@ sim_instr(void) tbase |= CORE_B; iowait = 0; + ihold = 0; while (reason == 0) { /* loop until halted */ if (exe_KEYS) { @@ -767,9 +772,7 @@ sim_instr(void) goto next_xec; } -#ifdef I7090 /* I704 did not have interrupts */ hltloop: -#endif /* If doing fast I/O don't sit in idle loop */ if (iowait && (cpu_unit.flags & UNIT_FASTIO)) sim_interval = 0; @@ -799,7 +802,6 @@ sim_instr(void) } #endif - if (iowait == 0 && sim_brk_summ && sim_brk_test(((bcore & 2)? CORE_B:0)|IC, SWMASK('E'))) { reason = STOP_IBKPT; @@ -808,7 +810,7 @@ sim_instr(void) /* Check if we need to take any traps */ #ifdef I7090 /* I704 did not have interrupts */ - if (itrap && ihold == 0 && iowait == 0 && ioflags != 0) { + if (CPU_MODEL != CPU_704 && itrap && ihold == 0 && iowait == 0 && ioflags != 0 && instr_count == 0) { t_uint64 mask = 00000001000001LL; MA = 012; @@ -832,9 +834,13 @@ sim_instr(void) /* check if we need to perform a trap */ if (f) { /* HTR/HPR behave like wait if protected */ + if (hltinst) + temp = (((t_uint64) bcore & 3) << 31) | + (((t_uint64) f) << 18) | (fptemp & memmask); + else + temp = (((t_uint64) bcore & 3) << 31) | + (((t_uint64) f) << 18) | (IC & memmask); hltinst = 0; - temp = (((t_uint64) bcore & 3) << 31) | - (((t_uint64) f) << 18) | (IC & memmask); sim_interval = sim_interval - 1; /* count down */ WriteP(MA, temp); if (nmode) { @@ -849,8 +855,8 @@ sim_instr(void) sim_interval = sim_interval - 1; /* count down */ SR = ReadP(MA); sim_debug(DEBUG_TRAP, &cpu_dev, - "Doing trap chan %c %o >%012llo loc %o %012llo\n", - shiftcnt + 'A' - 1, f, temp, MA, SR); + "Doing trap chan %c %o >%012llo loc %o %012llo IC=%06o\n", + shiftcnt + 'A' - 1, f, temp, MA, SR, IC); if (hst_lnt) { /* history enabled? */ hst_p = (hst_p + 1); /* next entry */ if (hst_p >= hst_lnt) @@ -875,9 +881,13 @@ sim_instr(void) /* Interval timer has lower priority then I/O traps */ if (interval_irq && (ioflags & 0400000)) { /* HTR/HPR behave like wait if protected */ + if (hltinst) + temp = (((t_uint64) bcore & 3) << 31) | + (fptemp & memmask) | (relo_mode << 21); + else + temp = (((t_uint64) bcore & 3) << 31) | + (IC & memmask) | (relo_mode << 21); hltinst = 0; - temp = (((t_uint64) bcore & 3) << 31) | (IC & memmask) | - (relo_mode << 21); sim_interval = sim_interval - 1; /* count down */ MA = 6; WriteP(MA, temp); @@ -915,27 +925,20 @@ sim_instr(void) if (hltinst) { t_uint64 mask = 00000001000001LL; - if (CPU_MODEL == CPU_704) { - reason = STOP_HALT; - break; - } /* Hold out until all channels have idled out */ - sim_interval = 0; - (void)sim_process_event(); + sim_interval = sim_interval - 1; /* count down */ chan_proc(); f = chan_active(0); - for (shiftcnt = 1; shiftcnt < NUM_CHAN; shiftcnt++) { - f |= chan_active(shiftcnt); + for (shiftcnt = 1; f == 0 && shiftcnt < NUM_CHAN; shiftcnt++) { + f = chan_active(shiftcnt); /* CRC *//* Trap *//* EOF */ - /* Wait until channel stops to trigger interupts */ - if (ioflags & mask) { - if (mask & AMASK & ioflags) { - if (chan_stat(shiftcnt, CHS_EOF)) - f = 1; /* We have a EOF */ - if (iotraps & (1 << shiftcnt)) - f = 1; /* We have a IOCT/IORT/IOST */ - } - if (mask & DMASK & ioflags && chan_stat(shiftcnt, CHS_ERR)) + /* Wait until channel stops to trigger interrupts */ + if (itrap) { + /* Check for EOF or IOCT/IORT/IOST */ + if (mask & AMASK & ioflags && + (chan_test(shiftcnt, CHS_EOF) || iotraps & (1 << shiftcnt))) + f = 1; + if (mask & DMASK & ioflags && chan_test(shiftcnt, CHS_ERR)) f = 1; /* We have device error */ } } @@ -949,6 +952,10 @@ sim_instr(void) } #else /* Handle halt on 704 */ if (hltinst) { + sim_interval = sim_interval - 1; /* count down */ + chan_proc(); + if (chan_active(0)) + goto hltloop; reason = STOP_HALT; break; } @@ -989,6 +996,8 @@ sim_instr(void) relo_pend = 0; prot_pend = 0; } + + next_xec: opcode = (uint16)(SR >> 24); IR = opcode; @@ -1314,9 +1323,9 @@ prottrap: break; #ifdef I7090 /* Not on 704 */ case OP_RCT: - if (bcore & 4) - goto prottrap; if (CPU_MODEL != CPU_704) { + if (bcore & 4) + goto prottrap; sim_debug(DEBUG_TRAP, &cpu_dev, "RCT %012llo\n", ioflags); if ((bcore & 4) || STM) goto seltrap; @@ -1471,8 +1480,12 @@ prottrap: case OP_HPR: halt: hltinst = 1; - if (opcode == OP_HTR) + ihold = 0; /* Kill any hold on traps now */ + if (opcode == OP_HTR) { + fptemp = IC-1; IC = MA; + } else + fptemp = IC; break; case OP_XEC: opcode = (uint16)(SR >> 24); @@ -3246,10 +3259,9 @@ prottrap: case OP_LDA: if (chan_select(0)) { extern DEVICE drm_dev; - drum_addr = (uint32)(MQ = SR); + drum_addr = (uint32)(SR); sim_debug(DEBUG_DETAIL, &drm_dev, "set address %06o\n", drum_addr); - MQ <<= 1; chan_clear(0, DEV_FULL); /* In case we read something before we got here */ } else @@ -3324,49 +3336,38 @@ prottrap: /* Input/Output Instuctions */ case OP_ENB: ioflags = SR; - itrap = 1; + if (SR) + itrap = 1; + else + itrap = 0; + sim_debug(DEBUG_TRAP, &cpu_dev, "ENB %012llo\n", ioflags); ihold = 1; - /* * IBSYS can't have an trap right after ENB or it will hang * on a TTR * in IBNUC. */ if (CPU_MODEL >= CPU_7090) break; - - /* Don't wait if EOF or Error is pending but hold if trap */ temp = 00000001000001LL; + for (shiftcnt = 1; shiftcnt < NUM_CHAN; shiftcnt++) { - if (chan_active(shiftcnt) == 0) { - if (temp & ioflags & AMASK && - iotraps & 1 << shiftcnt) - break; - if ((temp & ioflags & AMASK && - chan_test(shiftcnt, CHS_EOF)) || - (temp & ioflags & DMASK && - chan_test(shiftcnt, CHS_ERR))) { - ihold = 0; - break; - } - } + if ((temp & ioflags & DMASK) == 0) + chan_clear(shiftcnt, CHS_ERR); + else if (chan_test(shiftcnt,CHS_ERR)) + ihold = 0; + if ((temp & ioflags & AMASK) == 0) + chan_clear(shiftcnt, CHS_EOF); + else if (chan_test(shiftcnt,CHS_EOF)) + ihold = 0; temp <<= 1; } break; #endif case OP_RDS: /* Read select */ - if (CPU_MODEL == CPU_704) - MQ = 0; - else if (first_rdwr == 0) { - iotraps &= ~(1 << ((MA >> 9) & 017)); - first_rdwr = 1; - } opcode = IO_RDS; goto docmd; case OP_WRS: /* Write select */ - if (CPU_MODEL != CPU_704 && first_rdwr == 0) { - first_rdwr = 1; - } opcode = IO_WRS; goto docmd; case OP_WEF: /* Write EOF */ @@ -3395,12 +3396,16 @@ prottrap: iowait = 1; /* Channel is active, hold */ break; case SCPE_OK: + if (((MA >> 9) & 017) == 0) { + if (opcode==IO_RDS) + MQ = 0; + chan_clear(0, CHS_EOF|CHS_EOT|DEV_REOR); + } ihold = 1; /* Hold interupts for one cycle */ - first_rdwr = 0; + iotraps &= ~(1 << ((MA >> 9) & 017)); break; case SCPE_IOERR: iocheck = 1; - first_rdwr = 0; break; case SCPE_NODEV: reason = STOP_IOCHECK; @@ -3426,6 +3431,7 @@ prottrap: #ifdef I7090 /* Not on 704 */ case OP_TRCA: /* Transfer on Redundancy check */ + ihold = 2; if ((1LL << 18) & ioflags) break; f = chan_stat(1, CHS_ERR); @@ -3468,6 +3474,7 @@ prottrap: #endif case OP_TEFA: /* Transfer on channel EOF */ + ihold = 2; if ((1LL << 0) & ioflags) break; f = chan_stat(1, CHS_EOF); diff --git a/I7000/i7090_drum.c b/I7000/i7090_drum.c index a80a972e..3af9d85b 100644 --- a/I7000/i7090_drum.c +++ b/I7000/i7090_drum.c @@ -109,7 +109,7 @@ uint32 drm_cmd(UNIT * uptr, uint16 cmd, uint16 dev) /* Choose which part to use */ uptr->u5 |= u << DRMSTA_UNITSHIFT; drum_addr = 0; /* Set drum address */ - chan_clear(chan, CHS_ATTN); /* Clear attentions */ + chan_clear_status(chan); /* Make sure drum is spinning */ sim_activate(uptr, us_to_ticks(100)); return SCPE_OK; diff --git a/I7000/i7090_sys.c b/I7000/i7090_sys.c index 41a2b07c..76b82078 100644 --- a/I7000/i7090_sys.c +++ b/I7000/i7090_sys.c @@ -110,7 +110,7 @@ DEVICE *sim_devices[] = { /* Device addressing words */ #ifdef NUM_DEVS_DR -DIB drm_dib = { CH_TYP_PIO, 1, 0301, 0740, &drm_cmd, &drm_ini }; +DIB drm_dib = { CH_TYP_PIO, 1, 0301, 0760, &drm_cmd, &drm_ini }; #endif #ifdef NUM_DEVS_CDP DIB cdp_dib = { CH_TYP_PIO|CH_TYP_76XX, 1, 0341, 0777, &cdp_cmd, &cdp_ini }; diff --git a/doc/i7010_doc.doc b/doc/i7010_doc.doc index 00c9c22b7b171bb34c960b591d46392d3ac9dba0..9ab417dcec00886d61318c3d25e40d526feeaead 100644 GIT binary patch delta 15341 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 LLq_f=rlS7`?V~-C delta 15292 zcmb8$4^&jwoxt&XM}kO%pix2yAP_@NwIn+{*>$qNf5?7+3`XZj21d?j z-n=*W&TroTckl07Hgsp%z@1eQy6~;#5Bm7*T&>i@Pb=l3RHH>H^*R4s)Ylq~e4n() zejlYW1C+{NuGIQ8rHZyFHM(1=OVvvG)+lxGO{My3l?tg-YRz7yHq;-T@L8=(1D{i> z7VXK@d0we_>UwQdDk)tl%XgLP&r<5tOG?FTBI5Uy3P%QZVE`+#m8!$`9Hnw|mCAaV zaz9k6;73Zu6)4qIsMO#qOpBEAE>`L!j{StsOQ`!(RjNk$p@9`jCH#^?l}dH}N~!D} zN?k_q>q;f#fK1=ui_pDOsS;MK3^l075gf-Ebf6D|7{>&>*a+TOig3hZHBzcel}hJL zJ_=ERT{wUyw4)P)7=gu9$_){SLK4;^2l*(+4(!JvoI*SLF$Be)a76$@5L?Pi0#cEI z9oU55JfhS* zPK^8U+GBiglu|#y@>r$*^dvuuGixHzXnZiw$tp+Vm)5#2l#^2aS-fmh_3+V=@F!dz zfA^WR_kRDgwD)AGp8TlcPJVa-TS)bD2D_-ARms$TY5&o*#~Lk0go|5K)E)EZN3#Q^ zZbs>nJ;s8BC3AiH&W#@^{NvHb6aJzHT+gD^{>~=lsUi;}&){HT|LVLM!vLO;H5O4SoJgyUs zX9t$(UgKq63yoj!I%fQq*IMIUUSo{^8CddkA1fsn#j9#`^s4$m4XHsjIH-CD|NLj( zs6S3k|8r{k`>E-_O-+wZP5+sx@vXo8i@$u=00uFH#CzF-1HnKYPH-Aju?L*T;f)~M5#*b9P+V5 z1{&T&0s6GDeCWNz>({TceLlWwo4!9a{okqS1tovo{B`p8@9G@~jBS6<2;+DB(fyX+ z!FKx9a5B>0cj_VmFAP1Y=s(KLe zZH@_4p#j6Vg5#-N(r^at2zZ_|9_6S&FZ!@9O)Z+dSB`Ud+`{bUMJwWk-G@iU>))h!)-GbYmkVo*oFjdrR!0LLvYJb$_IH_T-k65qe$dd zn}lrS;T*TvE(B+DNyUZiQqEQ0M1P+k*pK5V`GHbfFoa>O<6gWTt!RS}_hnzyi8`gI6Cf{g5XdbxmC}%0Adws^+W-({Ae$?@;Mb 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 diff --git a/doc/i701_doc.doc b/doc/i701_doc.doc index 0790bd417f095a260c0cc8434881a4680f0955d0..999d15bbfe26f69bdb7eced677121205f7e6719c 100644 GIT binary patch delta 11126 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 QecH4|>+AN7&zNfeAD0#y=Kufz delta 11004 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 delta 14781 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 amUTUb%KNlGSibn!kgaKD=8QiX_WwVUr7cGQ diff --git a/doc/i7080_doc.doc b/doc/i7080_doc.doc index 564e0b61a6f252da729a10f3d4b4c856b18ba488..5f4d309b760e87cbd18097691b7f0895c9c66555 100644 GIT binary patch delta 15660 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 nAP(U$j^HRdA<52N!fx@u`}4K delta 17103 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