| To: Users | |
| From: Bob Supnik | |
| Subj: IBM 1620 Simulator Usage | |
| Date: 15-Nov-2004 | |
| COPYRIGHT NOTICE | |
| The following copyright notice applies to both the SIMH source and binary: | |
| Original code published in 1993-2004, written by Robert M Supnik | |
| Copyright (c) 1993-2004, Robert M Supnik | |
| Permission is hereby granted, free of charge, to any person obtaining a | |
| copy of this software and associated documentation files (the "Software"), | |
| to deal in the Software without restriction, including without limitation | |
| the rights to use, copy, modify, merge, publish, distribute, sublicense, | |
| and/or sell copies of the Software, and to permit persons to whom the | |
| Software is furnished to do so, subject to the following conditions: | |
| The above copyright notice and this permission notice shall be included in | |
| all copies or substantial portions of the Software. | |
| THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | |
| IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | |
| FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL | |
| ROBERT M SUPNIK BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER | |
| IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN | |
| CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | |
| Except as contained in this notice, the name of Robert M Supnik shall not | |
| be used in advertising or otherwise to promote the sale, use or other dealings | |
| in this Software without prior written authorization from Robert M Supnik. | |
| This memorandum documents the IBM 1620 simulator. This simulator is based on | |
| Geoff Kuenning's 1620 simulator, which is used by permission. | |
| 1. Simulator Files | |
| sim/ scp.h | |
| sim_console.h | |
| sim_defs.h | |
| sim_fio.h | |
| sim_rev.h | |
| sim_sock.h | |
| sim_timer.h | |
| sim_tmxr.h | |
| scp.c | |
| sim_console.c | |
| sim_fio.c | |
| sim_sock.c | |
| sim_timer.c | |
| sim_tmxr.c | |
| sim/i1620/ i1620_defs.h | |
| i1620_cpu.c | |
| i1620_fp.c | |
| i1620_tty.c | |
| i1620_pt.c | |
| i1620_cd.c | |
| i1620_lp.c | |
| i1620_dp.c | |
| i1620_sys.c | |
| 2. IBM 1620 Features | |
| The IBM 1620 simulator is configured as follows: | |
| device simulates | |
| name(s) | |
| CPU IBM 1620 Model 1 or Model 2 CPU with 20K to 60K of memory | |
| Model 1 options: indirect addressing, automatic divide, | |
| edit instructions, floating point | |
| Model 2 options: indexing, binary capability, floating point | |
| TTY IBM console terminal | |
| PTR IBM 1621 paper tape reader | |
| PTP IBM 1624 paper tape punch | |
| CDR,CDP IBM 1622 card reader/punch | |
| LPT IBM 1443 line printer | |
| DP IBM 1311 disk pack with four drives | |
| The IBM 1620 simulator implements many unique stop conditions. On almost | |
| any kind of error the simulator stops: | |
| unimplemented opcode | |
| reference to non-existent device | |
| invalid digit | |
| invalid alphameric character | |
| invalid P address digit | |
| invalid Q address digit | |
| indirect address limit exceeded | |
| invalid odd address | |
| invalid even address | |
| invalid function | |
| invalid indicator | |
| invalid return address register | |
| skip to unpunched carriage control tape channel | |
| card reader hopper empty | |
| overflow with arithmetic stop switch set | |
| I/O error with I/O stop switch set | |
| invalid disk drive | |
| invalid disk sector address | |
| invalid disk sector count | |
| invalid disk buffer address | |
| disk address compare error | |
| disk cylinder overflow error | |
| disk write check error | |
| field exceeds memory | |
| record exceeds memory | |
| floating point mantissa exceeds maximum length | |
| floating point mantissas not the same length | |
| floating point exponent check with arithmetic stop switch set | |
| floating point exponent missing high flag | |
| The LOAD command is used to load a line printer carriage-control tape. | |
| The DUMP command is not implemented. | |
| 2.1 CPU | |
| The CPU options include the CPU model (Model 1 or Model 2), a number of | |
| special features, and the size of main memory. | |
| SET CPU IA enable indirect addressing | |
| SET CPU NOIA disable indirect addressing | |
| SET CPU EDT enable extra editing instructions | |
| SET CPU NOEDT disable extra editing instructions | |
| SET CPU DIV enable divide instructions | |
| SET CPU NODIV disable divide instructions | |
| SET CPU IDX enable indexing | |
| SET CPU NOIDX disable indexing | |
| SET CPU BIN enable binary instructions | |
| SET CPU NOBIN disable binary instructions | |
| SET CPU FP enable floating point instructions | |
| SET CPU NOFP disable floating point instructions | |
| SET CPU MOD1 set Model 1 | |
| SET CPU MOD2 set Model 2 | |
| SET CPU 20K set memory size = 20K | |
| SET CPU 40K set memory size = 40K | |
| SET CPU 60K set memory size = 60K | |
| Model 1 options include IA, EDT, DIV, and FP; the first three are on by | |
| default. Model 2 options include IDX, BIN, and FP; IA, EDT, and DIV are | |
| standard on the Model 2. | |
| If memory size is being reduced, and the memory being truncated contains | |
| non-zero data, the simulator asks for confirmation. Data in the truncated | |
| portion of memory is lost. Initially, the CPU is a Model 1, memory size is | |
| 20K, and indirect addressing, editing instructions, and divide are enabled. | |
| Memory is implemented as 5 bit BCD digits, as follows: | |
| 4 3 2 1 0 | |
| flag 8 4 2 1 | |
| <-------- digit --------> | |
| In BCD, the decimal digits 0-9 are (hex) values 0x0, 0x1, 0x2, 0x3, 0x4, | |
| 0x5, 0x6, 0x7, 0x8, 0x9, respectively. 0xA is record mark, 0xC non- | |
| punching blank, and 0xF group mark, respectively. | |
| CPU registers include the visible state of the processor. The 1620 has no | |
| interrupt system. | |
| name size comments | |
| IR1 16 instruction storage address register (PC) | |
| IR2 16 return register | |
| PR1 16 processor register 1 | |
| PAR 16 P address register (OR2) | |
| QAR 16 Q address register (OR1) | |
| SS1 1 sense switch 1 | |
| SS2 1 sense switch 2 | |
| SS3 1 sense switch 3 | |
| SS4 1 sense switch 4 | |
| HP 1 high/positive indicator | |
| EZ 1 equal/zero indicator | |
| ARCHK 1 arithmetic check (overflow) indicator | |
| EXPCHK 1 exponent check indicator | |
| RDCHK 1 read check indicator | |
| WRCHK 1 write check indicator | |
| ARSTOP 1 arithmetic check stop switch | |
| IOSTOP 1 I/O check stop switch | |
| IND[0:99] 1 indicator array | |
| IAE 1 indirect address enable (Model 2 only) | |
| IDXE 1 indexing enable (Model 2 only) | |
| IDXB 1 indexing band select (Model 2 only) | |
| IR1Q[0:63] 16 IR1 prior to last branch; | |
| most recent IR1 change first | |
| WRU 8 interrupt character | |
| The CPU can maintain a history of the most recently executed instructions. | |
| This is controlled by the SET CPU HISTORY and SHOW CPU HISTORY commands: | |
| SET CPU HISTORY clear history buffer | |
| SET CPU HISTORY=0 disable history | |
| SET CPU HISTORY=n enable history, length = n | |
| SHOW CPU HISTORY print CPU history | |
| SHOW CPU HISTORY=n print first n entries of CPU history | |
| The maximum length for the history is 65536 entries. | |
| 2.2 Console Typewriter (TTY) | |
| The console typewriter (TTY) is a half-duplex console. The typewriter | |
| registers are: | |
| name size comments | |
| COL 7 current column | |
| TIME 24 polling interval | |
| When the 1620 CPU requests input from the keyboard, a reverse apostrophe | |
| (`) is printed. The CPU hangs waiting for input until the return/enter | |
| key is pressed. The typewriter has no errors. | |
| 2.3 1621 Paper Tape Reader (PTR) | |
| The paper tape reader (PTR) reads data from a disk file. The POS register | |
| specifies the number of the next data item to be read. Thus, by changing | |
| POS, the user can backspace or advance the reader. | |
| The paper tape reader supports the BOOT command. BOOT PTR starts the | |
| standard paper tape boot sequence at location 0. | |
| The paper tape reader implements these registers: | |
| name size comments | |
| POS 32 position in the input file | |
| Error handling is as follows: | |
| error IOCHK processed as | |
| not attached x set RDCHK indicator, report error, stop | |
| end of file x set RDCHK indicator, report error, stop | |
| OS I/O error x set RDCHK indicator, report error, stop | |
| parity error 1 set RDCHK indicator, report error, stop | |
| 0 set RDCHK indicator | |
| 2.4 1624 Paper Tape Punch (PTP) | |
| The paper tape punch (PTP) writes data to a disk file. The POS register | |
| specifies the number of the next data item to be written. Thus, by | |
| changing POS, the user can backspace or advance the punch. | |
| The paper tape punch implements these registers: | |
| name size comments | |
| POS 32 position in the output file | |
| Error handling is as follows: | |
| error IOCHK processed as | |
| not attached x set WRCHK indicator, report error, stop | |
| OS I/O error x set WRCHK indicator, report error, stop | |
| invalid char 1 set WRCHK indicator, report error, stop | |
| 0 set WRCHK indicator | |
| 2.5 1622 Card Reader/Punch (CDR, CDP) | |
| The IBM 1402 card/reader punch is simulated as two independent devices: | |
| the card reader (CDR) and the card punch (CDP). | |
| The card reader supports the BOOT command. BOOT CDR starts the standard | |
| card boot sequence at location 0. | |
| The card reader reads data from a disk file, while the punch writes data | |
| to a disk file. Cards are simulated as ASCII text lines with terminating | |
| newlines. For each unit, the POS register specifies the number of the | |
| next data item to be read or written. Thus, by changing POS, the user | |
| can backspace or advance these devices. | |
| The card reader registers are: | |
| name size comments | |
| LAST 1 last card indicator | |
| POS 32 position | |
| The card punch registes are: | |
| name size comments | |
| POS 32 position | |
| Card reader error handling is as follows: | |
| error IOCHK processed as | |
| end of file x set RDCHK indicator, report error, stop | |
| not attached x set RDCHK indicator, report error, stop | |
| OS I/O error x set RDCHK indicator, report error, stop | |
| invalid char 1 set RDCHK indicator, report error, stop | |
| 0 set RDCHK indicator | |
| Card punch error handling is as follows: | |
| error IOCHK processed as | |
| not attached x set WRCHK indicator, report error, stop | |
| OS I/O error x set WRCHK indicator, report error, stop | |
| invalid char 1 set WRCHK indicator, report error, stop | |
| 0 set WRCHK indicator | |
| 2.6 1443 Line Printer (LPT) | |
| The IBM 1443 line printer (LPT) writes its data, converted to ASCII, to | |
| a disk file. The line printer can be programmed with a carriage control | |
| tape. The LOAD command loads a new carriage control tape: | |
| LOAD <file> load carriage control tape file | |
| The format of a carriage control tape consists of multiple lines. Each | |
| line contains an optional repeat count, enclosed in parentheses, optionally | |
| followed by a series of column numbers separated by commas. Column numbers | |
| must be between 1 and 12; a column number of zero denotes top of form. The | |
| following are all legal carriage control specifications: | |
| <blank line> no punch | |
| (5) 5 lines with no punches | |
| 1,5,7,8 columns 1, 5, 7, 8 punched | |
| (10)2 10 lines with column 2 punched | |
| 1,0 column 1 punched; top of form | |
| The default form is 66 lines long, with column 1 and the top of form mark | |
| on line 1, and the rest blank. | |
| The line printer registers are: | |
| name size comments | |
| LBUF[0:119] 7 line buffer | |
| BPTR 7 buffer pointer | |
| PCTL 8 saved print control directive | |
| PRCHK 1 print check indicator | |
| PRCH9 1 channel 9 indicator | |
| PRCH12 1 channel 12 indicator | |
| POS 32 position | |
| CCT[0:131] 32 carriage control tape array | |
| CCTP 8 carriage control tape pointer | |
| CCTL 8 carriage control tape length (read only) | |
| Error handling is as follows: | |
| error IOCHK processed as | |
| not attached x set PRCHK, WRCHK indicators, report error, stop | |
| OS I/O error x set PRCHK, WRCHK indicators, report error, stop | |
| invalid char 1 set PRCHK, WRCHK indicator, report error, stop | |
| 0 set PRCHK, WRCHK indicator | |
| 2.7 1311 Disk Pack (DP) | |
| The disk pack controller supports 4 drives, numbered 0 through 3. Disk | |
| pack options include the ability to enable address writing (formatting). | |
| SET DPn ADDROFF set unit n address enable off | |
| SET DPn ADDRON set unit n address enable on | |
| Units can also be set ENABLED or DISABLED. | |
| Unlike most simulated disks, the 1311 includes explicit representation | |
| for sector addresses. This is to support non-standard formats, such as | |
| the inclusion of the drive number in the sector address. As a result, | |
| 1311 sectors are 105 digits long: 5 address digits and 100 data digits. | |
| If the 1311 has not been formatted, the addresses are zeroes and are | |
| synthesized, if needed, based on the sector number. | |
| The disk pack controller implements these registers: | |
| name size comments | |
| ADCHK 1 address check (compare error) indicator | |
| WLRC 1 wrong length record check indicator | |
| CYLO 1 cylinder overflow check indicator | |
| ERR 1 disk error indicator | |
| DPSTOP 1 disk check stop | |
| Error handling is as follows: | |
| error DPCHK processed as | |
| not attached x set ERR indicator, report error, stop | |
| 1311 data files are buffered in memory; therefore, end of file and OS | |
| I/O errors cannot occur. | |
| 2.8 Symbolic Display and Input | |
| The IBM 1620 simulator implements symbolic display and input. Display is | |
| controlled by command line switches: | |
| -c display as single character (alphameric | |
| for CPU and DP, ASCII for others) | |
| -s display as flag terminated numeric string | |
| (CPU and DP only) | |
| -m display instruction mnemonics | |
| (CPU and DP only) | |
| -d display 50 characters per line, with word | |
| marks denoted by "_" on the line above | |
| In a CPU string display, word marks are denoted by ~. | |
| Input parsing is controlled by the first character typed in or by command | |
| line switches: | |
| ' or -c character (alphameric for CPU and DP, ASCII | |
| for others) | |
| " or -s numeric string (CPU and DP only) | |
| alphabetic instruction mnemonic (CPU and DP only) | |
| numeric octal number | |
| Instruction input is free format and consists of an opcode and up to | |
| three operands: | |
| op {+/-}ppppp{(idx)},{+-}qqqqq{(idx)},flags | |
| The p address and, if present, the q address, are always decimal. A | |
| plus sign is ignored; a minus sign denotes indirect addressing (or a | |
| negative immediate operand). If indexing is enabled, addresses may | |
| be indexed; index registers are decimal numbers between 1 and 7. The | |
| flags field is used to set extra flags on the instruction. It consists | |
| of digit numbers in ascending order, with no separators. For example, | |
| AM -12345(5),67890,110 | |
| translates into | |
| _ _ ___ _ | |
| 111234567890 | |
| The flag over digits 3 and 5 specify the P index register; the flag | |
| over digit 6 specifies the P indirect address; the flag over digit 7 | |
| marks the end of the immediate Q operand; and the flags over digits | |
| 1 and 10 are specified by the third field. | |
| 2.9 Character Sets | |
| The IBM 1620 uses single digits to represent numbers, and pairs of | |
| digits to represent characters (alphameric coding). Only a small | |
| number of the 256 possible alphameric codings have legitimate values. | |
| Further, the translation between alphameric and devices varied from | |
| device to device. The simulator implements a code called 1620 ASCII, | |
| which allows all 64 possible card codes to be represented by upper | |
| case ASCII characters. In addition, lower case alphabetic characters | |
| are accepted on input as equivalent to upper case. | |
| Card code PT code RA RN LPT WA ASCII representation | |
| <blank> C 0 0 blank blank | |
| 12 XOC 10 0 + + | |
| 11 X 20 F+0 - - | |
| 0 O 70 0 0 0 | |
| 1 1 71 1 1 1 | |
| 2 2 72 2 2 2 | |
| 3 C21 73 3 3 3 | |
| 4 4 74 4 4 4 | |
| 5 C41 75 5 5 5 | |
| 6 C42 76 6 6 6 | |
| 7 421 77 7 7 7 | |
| 8 8 78 8 8 8 | |
| 9 C81 79 9 9 9 | |
| 12 + 1 XO1 41 1 A A | |
| 12 + 2 XO2 42 2 B B | |
| 12 + 3 XOC21 43 3 C C | |
| 12 + 4 XO4 44 4 D D | |
| 12 + 5 XOC41 45 5 E E | |
| 12 + 6 XOC42 46 6 F F | |
| 12 + 7 XO421 47 7 G G | |
| 12 + 8 XO8 48 8 H H | |
| 12 + 9 XOC81 49 9 I I | |
| 11 + 1 XC1 51 F+1 J J | |
| 11 + 2 XC2 52 F+2 K K | |
| 11 + 3 X21 53 F+3 L L | |
| 11 + 4 XC4 54 F+4 M M | |
| 11 + 5 X41 55 F+5 N N | |
| 11 + 6 X42 56 F+6 O O | |
| 11 + 7 XC421 57 F+7 P P | |
| 11 + 8 XC8 58 F+8 Q Q | |
| 11 + 9 X81 59 F+9 R R | |
| 0 + 1 OC1 21 1 / / | |
| 0 + 2 OC2 62 2 S S | |
| 0 + 3 O21 63 3 T T | |
| 0 + 4 OC4 64 4 U U | |
| 0 + 5 O41 65 5 V V | |
| 0 + 6 O42 66 6 W W | |
| 0 + 7 OC421 67 7 X X | |
| 0 + 8 OC8 68 8 Y Y | |
| 0 + 9 O81 69 9 Z Z | |
| 2 + 8 C82 ? 0A A na % | |
| 3 + 8 821 33 B = = | |
| 4 + 8 C84 34 C @ @ | |
| 5 + 8 841 70 0 0 : | |
| 6 + 8 842 ? 0E E na > | |
| 7 + 8 C8421 ? 0F F na ^ | |
| 12 + 2 + 8 XOC82 ? 5A ? F+A na ? | |
| 12 + 3 + 8 XO821 3 ? F+B . . | |
| 12 + 4 + 8 XOC84 4 C ) ) | |
| 12 + 5 + 8 XO841 40 0 na [ | |
| 12 + 6 + 8 XO842 ? 5E ? F+E na < | |
| 12 + 7 + 8 XOC8421 5F F+F na " | |
| 11 + 2 + 8 X82 5A F+A na ! | |
| 11 + 3 + 8 XC821 13 F+B $ $ | |
| 11 + 4 + 8 X84 14 F+C * * | |
| 11 + 5 + 8 XC841 50 F+0 - ] | |
| 11 + 6 + 8 XC842 ? 5E ? F+E na ; | |
| 11 + 7 + 8 X8421 5F F+F na _ | |
| 0 + 2 + 8 O82 0A A na ' | |
| 0 + 3 + 8 OC821 23 B , , | |
| 0 + 4 + 8 O84 24 C ( ( | |
| 0 + 5 + 8 OC841 60 0 na # | |
| 0 + 6 + 8 OC842 0E E na \ | |
| 0 + 7 + 8 O8421 0F F na & | |
| 2 ? | |
| 12 ! | |
| 22 ' | |
| 32 0 | |
| 35 : | |
| 36 blank | |
| 11 + 0 50 - ] |