Revision of 25-Jul-2018
Copyright Notice
The SIMH source code and documentation is made available under a X11-style open source license; the precise terms are available at:
https://github.com/open-simh/simh/blob/master/LICENSE.txt
The IBM 7070 simulator was written by Richard Cornwell.
1. Introduction 2. Simulator Files 3. IBM 7070 Features 3.1 CPU 3.2 I/O Channels (CH0..CH8) 3.3 Unit record devices. 3.3.1 7500 Inquiry Station (INQ) 3.3.2 7500 Card Reader (CDR) 3.3.3 7550 Card Punch (CDP) 3.3.4 7400 Line Printer (LP) 3.4 Magnetic Tape devices 3.4.1 729 Magnetic Tape (MTA-C) 3.4.2 ChronoClock. 3.5 7907 Devices 3.5.1 1301/1302/2302/7320 Disk devices 3.5.2 Hypertape 7340 Tape drive (HTA) 3.5.3 7750 Communications Controller (COM and COML) 4 Symbolic Display and Input 5 Character Codes
The IBM 7070 was introduced in June 1960, as a replacement to the IBM 650. It had core memory up to 10,000 10 digit words. The 7072 was introduced November 1962 and the 7074 on November 1961. The 7074 is a faster version of the 7070 with the addition of memory up to 40,000 10 digit words. The first 100 memory locations can be used as index registers. Most memory reference instructions allow for a field of digits to be selected to operate on and not modify the rest.
The 7070 is a decimal machine with each word consisting of 10 digits plus a sign. The sign can be plus, minus or alpha. Alpha data is stored 5 characters to a word (2 digits per character).
To compile the IBM 7070, you must define USE_INT64 as part of the compilation command line.
| Subdirectory | File | Contains |
I7000 |
i7000_defs.h | IBM 7000 simulators general definitions |
| i7070_defs.h | IBM 7070 simulator specific definitions | |
| i7000_chan.c | Generic channel interface. | |
| i7070_cpu.c | 7070 CPU, Channel, interface | |
| i7070_chan.c | 7070 Channel. | |
| i7070_sys.c | 7070 System interface | |
| i7000_cdr.c | 7500 Card reader | |
| i7000_cdp.c | 7550 Card punch | |
| i7000_com.c | 7750 Communications Controller | |
| i7000_con.c | 7551 Inquiry console. | |
| i7000_dsk.c | 1301/2302 disk and 7238 drum controller. | |
| i7000_ht.c | 7340 Hypertape controller. | |
| i7000_lpr.c | 7400 Line printer | |
| i7000_mt.c | 729 Tape controller. | |
| i7000_chron.c | Chrono Clock. |
The IBM 7070 simulator is configured as follows:
| Device Name(s) | Simulates |
CPU |
7070 CPU with 30KW of memory |
CH0 |
Unit record devices |
CH1..4 |
7504 Tape controller channels |
CH5..7 |
7907 Disk, Hypertape, controller channels |
MTA |
729 Magnetic Tape Controller |
MTB |
729 Magnetic Tape Controller |
MTC |
729 Magnetic Tape Controller |
CHRON |
Chrono Clock |
HTA |
7340 Hypertape, default not included. |
HTB |
7340 Hypertape, default not included. |
CDR |
7500 Card Reader |
CDP |
7550 Card Punch |
LP |
7400 Line Printer |
DK |
1301/2302/7304 disk. |
INQ |
7551 Inquiry console. |
COM |
7750 communications controller. |
COML |
7750 Communications lines. |
If desired individual devices can be removed from the system by editing i7000_defs.h and changing the number of “NUM_DEVS_xxx” entries. The entry “NUM_UNITS_xx” determines the number of individual units for each controller.
The 7070 simulator implements several unique stop conditions:
-
Undefined CPU instruction.
-
I/O device not ready.
-
I/O check error.
-
Divide Error
-
Field Overflow (CPU enabled).
-
Sign Change (CPU enabled).
-
Alpha Index Word.
-
Invalid message to 7750.
-
No buffer storage available for input character on 7750.
-
N buffer storage available for output character on 7750.
The CPU options include setting memory size and CPU type.
| SET CPU 7070 | Sets CPU to emulate 7070. |
| SET CPU 7074 | Sets CPU to emulate 7074. |
| SET CPU 5K | Sets memory to 5K |
| SET CPU 10K | Sets memory to 10K |
| SET CPU 15K | Sets memory to 15K* |
| SET CPU 20K | Sets memory to 20K* |
| SET CPU 25K | Sets memory to 25K* |
| SET CPU 30K | Sets memory to 30K* |
| SET CPU NOFLOAT | Disables floating point. |
| SET CPU FLOAT | Enables floating point. |
| SET CPU NOEXTEND | Disables extended memory support. |
| SET CPU EXTEND | Enables extended memory support. |
| SET CPU TIMER | Enables interval timer and interrupt. |
| SET CPU NOTIMER | Disables interval timer. |
* Memory size is 10KW on a standard CPU, extended option must be enabled to use memory sizes over 10KW.
CPU registers include the visible state of the processor as well as the control registers for the interrupt system.
| Name | Size(digits) | Comments |
|---|---|---|
| IC | 5 | Program Counter |
| AC1 | 10s | Accumulator 1 |
| AC2 | 10s | Accumulator 2 |
| AC3 | 10s | Accumulator 3 |
| IND | 10 | Error indcators |
| SW1..SW4 | 1 | Sense Switches 1..4 |
| SW | 4 | Sense Switches |
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 |
Instruction tracing shows the Instruction counter, the generated effective address, the value of memory before and after execution of the instruction and the decoded instruction in symbolic format.
The 7070 supports up to 8 channels. Channel models include:
| 7604 | standard multiplexer channel |
| 7907 | advanced capabilities channel |
Channels are fixed on the 7070.
Channel 0 is a pseudo channel for unit record devices.
Channels have the following registers:
| Name | Size(digits) | Comments |
|---|---|---|
| ADDR | 6 | Channel data address |
| CMD | 2 | Channel command (octal) |
| LIMIT | 6 | Channel word count |
| ASM | 10s | Channel assembly register |
| LOCATION | 6 | Channel location counter |
| FLAGS | 32 | Channel status flags (binary) |
For meaning of bits in FLAGS see i7000_defs.h.
The command:
| SHOW CH | Print summary of devices on channel |
The inquiry station allows for communications with the operating system. The station is half duplex and will either print or accept input. Whenever the computer sends a message it is prefixed with a ‘R’ character. When the station is ready to receive input it prompts with a ‘I’. Input is buffered until the return character is entered. Backspace will remove the last character typed. An <esc> will send an interrupt to the processor to request it read a record from the console. An <esc> while in input mode will cancel input mode and clear any typed message.
The card reader (CDR) reads data from a disk file. Cards are simulated as ASCII lines with terminating newlines. Card reader files can either be text (one character per column) or column binary (two characters per column). The file type can be specified with a set command:
| SET CDR FORMAT=TEXT | Sets ASCII text mode |
| SET CDR FORMAT=BINARY | Sets for binary card images. |
| SET CDR FORMAT=BCD | Sets for BCD records. |
| SET CDR FORMAT=CBN | Sets for column binary BCD records. |
| SET CDR FORMAT=AUTO | Automatically determines format. |
or in the ATTACH command:
| Command | Action |
|---|---|
ATTACH CDR <file> |
attaches a file |
ATTACH CDR -f <format> <file> |
attaches a file with the given format |
ATTACH CDR -s <file> |
adds a file onto the current cards to read |
ATTACH CDR -e <file> |
sets an end-of-file flag after the file is read |
The card reader can be booted with the:
| BOOT CDR | Start card reader to read one card. |
Boot is currently not working.
The 7500 Card reader supported two modes of operation, alpha mode (default), and load mode in which the card had 5 words that were read into storage. To enable this set LCOL non zero.
| SET CDR LCOL=n | Set load column detection. |
If LCOL is set to a non-zero value, then on every card read is checked to see if there is a 12 punch in the designated column. If so the card is converted to decimal, every 10th column is used to determine the sign. Zone 12 is +, Zone 11 is -, no zone is Alpha.
The Card reader could single ready on one of two attention lines. To set which one receives the ready signal use the following commands:
| SET CDR NOATTEN | Don’t signal when reader done. |
| SET CDR ATTENA | Signal on priority channel A. |
| SET CDR ATTENB | Signal on priority channel B. |
Error handling is as follows:
| Error | Processed As |
|---|---|
| not attached | report error and stop |
| end of file | out of cards |
The card reader (CDP) writes data to a disk file. Cards are simulated as ASCII lines with terminating newlines. Card punch files can either be text (one character per column) or column binary (two characters per column). The file type can be specified with a set command:
| SET CDP FORMAT=TEXT | Sets ASCII text mode |
| SET CDP FORMAT=BINARY | Sets for binary card images. |
| SET CDP FORMAT=BCD | Sets for BCD records. |
| SET CDP FORMAT=CBN | Sets for column binary BCD records. |
| SET CDP FORMAT=AUTO | Automatically determines format. |
or in the ATTACH command:
| ATTACH CDP <file> | Attaches a file |
| ATTACH CDP -f <format> <file> | Attaches a file with the given format. |
The Card punch could single ready on one of two attention lines. To set which one receives the ready signal use the following commands:
| SET CDP NOATTEN | Don’t signal when punch done. |
| SET CDP ATTENA | Signal on priority channel A. |
| SET CDP ATTENB | Signal on priority channel B. |
Error handling is as follows:
error processed as
not attached report error and stop
OS I/O error report error and stop
The line printer (LP) writes data to a disk file as ASCII text with terminating newlines. Currently set to handle standard signals to control paper advance.
| SET LP NO/ECHO | Sets echoing to console of line-printer output. |
| SET LP LINESPERPAGE=lpp | Sets number of lines per page on printer. |
The Line printer could single ready on one of two attention lines. To set which one receives the ready signal use the following commands:
| SET LP NOATTEN | Don’t signal when printing done. |
| SET LP ATTENA | Signal on priority channel A. |
| SET LP ATTENB | Signal on priority channel B. |
Error handling is as follows:
error processed as
not attached report error and stop
OS I/O error report error and stop
These come in groups of 10 units each.
Each individual tape drive support several options: MTA used as an example.
| SET MTAn REWIND | Sets the mag tape to the load point. |
| SET MTAn LOCKED | Sets the mag tape to be read only. |
| SET MTAn WRITEENABLE | Sets the mag tape to be writable. |
| SET MTAn LOW | Sets mag tape to low density. |
| SET MTAn HIGH | Sets mag tape to high density. |
Options: Density LOW/HIGH does not change format of how tapes are written. And is only for informational purposes only.
Tape drives can be booted with:
| BOOT MTxn | Read in record into location 0. |
Channel 1 support the read binary opcode to load binary tapes in octal format.
Disabled by default. This is a special 729 tape drive which returns the current time. It supports the option of setting the channel and drive that it will occupy. Note: You must disable the real 729 drive that is is replacing. The clock responds to Read and Backspace commands. A read results in a 10 character buffer being generated that has the Month, Day, Hour, Minutes, Seconds and Milliseconds. This time is taken from the local computer time.
| SET CHRON CHAN=n | Set channel for chrono clock. |
| SET CHRON UNIT=n | Sets the unit for the chrono clock. |
Example: To set Chronoclock to unit A9 do the following:
SET MTA9 DISABLE
SET CHRON UNIT=9 CHAN=A
These devices must be attached to a 7907 channel to work.
The 7631 file control supports up to ten devices, which can be 7320 drums, 1301 disks, 1302 disks, or 2302 disks. Unit types are specified with the SET command.
| SET DKn TYPE=7320 | Unit n is a drum |
| SET DKn TYPE=7320-2 | Unit n is a drum (two modules). |
| SET DKn TYPE=1301 | Unit n is a 1301 disk |
| SET DKn TYPE=130l-2 | Unit n is a 1301-2 disk (two modules). |
| SET DKn TYPE=1302 | Unit n is a 1302 disk |
| SET DKn TYPE=1302-2 | Unit n is a 1302-2 disk (two modules). |
| SET DKn TYPE=2302 | Unit n is a 2302 disk |
Units can be SET ENABLED or DISABLED. In addition, units can be set to enable or disable formatting:
| Command | Action |
|---|---|
SET DKn FORMAT |
enables formatting |
SET DKn NOFORMAT |
disables formatting |
SET DKn HA2 |
enables writing of home address 2 |
SET DKn NOHA2 |
disables writing of home address 2 |
SET DKn MODULE=n |
sets the modules for the unit; modules can only be even, from 0 to 8 |
SET DKn CHAN=n |
sets the channel for the unit (A-H) |
SET DKn SELECT=n |
sets the select on the channel (0 or 1) |
Formatting is disabled by default.
Error handling is as follows:
| Error | Processed As |
|---|---|
| not attached | report error and stop |
| OS I/O error | report error and stop |
These come in groups of 10 units each. The controller defines which channel the devices will be on. By default these devices are not installed.
| SET HTA CHAN=n | Sets channel for unit (A-H). |
| SET HTA SELECT=n | Sets select on channel (0 or 1). |
Each individual tape drive support several options: HTA used as an example.
| SET HTAn LOCKED | Sets the mag tape to be read only. |
| SET HTAn WRITEENABLE | Sets the mag tape to be writable. |
NOTE: Hypertape drives may not be working correctly since there is very little documentation available on them.
The 7750 is modeled as a terminal multiplexer with 33 lines. It consists of two device: COM is the multiplexer controller, and COML is the individual lines. For the first 32 lines, the 7750 performs input and output through Telnet sessions connected via a user-specified listening port; the 33rd line is permanently attached to the simulator console window. The ATTACH command specifies the port to be used for Telnet sessions:
| ATTACH COM <port> | set up listening port |
where port is a decimal number between 1 and 65535 that is not being used other TCP/IP activities.
Each line (each unit of COML) can be set to one of twp modes: KSR-35 and KSR-37. In KSR-35 mode, lower case input and output characters are converted automatically to upper case, and parity is ignored. In KSR-37 mode, lower case characters are left alone, and even parity is generated on input. KSR-37 is the default.
Once COM is attached and the simulator is running, the 7750 listens for connections on the specified port. It assumes that any incoming connection is a Telnet connections. The connections remain open until disconnected either by the Telnet client, a SET COM DISCONNECT command,or a DETACH COM command.
| SET COM DISCONNECT=n | Disconnect line n |
| SET COM CHAN=n | Set channel for com controller. |
The 7750 implements the following special SHOW commands
| SHOW COM CONNECTIONS | Displays current connections to the 7750 |
| SHOW COM STATISTICS | Displays statistics for active connections |
The 7750 implements the following special SET commands:
| SET COMLn LOG=filename | Log output of line n to filename |
| SET COMLn NOLOG | Disable logging and close log file |
| SET COMLn KSR35 | Set line n to ksr-35 |
| SET COMLn KSR37 | Set line n to ksr-37 |
| SET COMLn 2741 | Set line n to 2741 |
The controller (COM) implements these registers:
| Name | Size | Comments |
|---|---|---|
ENABLE |
1 | enable flag |
STATE |
6 | controller state |
MSGNUM |
12 | input message sequence number |
The IBM 7070 simulator implements symbolic display and input. Display is controlled by command line switches:
| -c | Display/Enter as BCD character |
| -m | Display/Enter instruction mnemonics |
| Display/Enter as decimal numnber. |
Instruction input uses standard 7070 assembler syntax.
<opcode> <*><operand><+X#><(n,m)>
<opcode> <operand><+X#>,f2
<opcode> <opcode2><operand><+X#>
| Commercial | Scientific | ASCII | BCD | Card | Remark |
|---|---|---|---|---|---|
| 00 | Blank | ||||
| 1 | 0 | 01 | 1 | ||
| 2 | 0 | 02 | 2 | ||
| 3 | 0 | 03 | 3 | ||
| 4 | 0 | 04 | 4 | ||
| 5 | 0 | 05 | 5 | ||
| 6 | 0 | 06 | 6 | ||
| 7 | 0 | 07 | 7 | ||
| 8 | 0 | 10 | 8 | ||
| 9 | 0 | 11 | 9 | ||
| 0 | 0 | 12 | 10 | ||
# |
= |
= |
13 | 3-8 | |
| @ | ' | '/@ | 14 | 4-8 | |
| : | : | 15 | 5-8 | ||
> |
> |
16 | 6-8 | ||
| √ | " | 17 | 7-8 | Tape Mark | |
| ƀ | _ |
20 | 2-8 | ||
| / | / | 21 | 10-1 | ||
| S | S | 22 | 10-1 | ||
| T | T | 23 | 10-2 | ||
| U | U | 24 | 10-3 | ||
| V | V | 25 | 10-4 | ||
| W | W | 26 | 10-5 | ||
| X | X | 27 | 10-6 | ||
| Y | Y | 30 | 10-7 | ||
| Z | Z | 31 | 10-8 | ||
# |
# |
32 | 10-2-8 | Word Mark | |
| , | , | 33 | 10-3-8 | ||
| % | ( | %/( | 34 | 10-4-8 | |
` |
` |
35 | 10-5-8 | ||
\ |
\ |
36 | 10-6-8 | ||
| ⧻ | { | 37 | 10-7-8 | Segment Mark |
| Commercial | Scientific | ASCII | BCD | Card | Remark |
|---|---|---|---|---|---|
- |
- |
40 | 11 | also -0 | |
| J | J | 41 | 11-1 | ||
| K | K | 42 | 11-2 | ||
| L | L | 43 | 11-3 | ||
| M | M | 44 | 11-4 | ||
| N | N | 45 | 11-5 | ||
| O | O | 46 | 11-6 | ||
| P | P | 47 | 11-7 | ||
| Q | Q | 50 | 11-8 | ||
| R | R | 51 | 11-9 | ||
| ! | ! | 52 | 11-2-8 | ||
$ |
$ |
53 | 11-3-8 | ||
* |
* |
54 | 11-4-8 | ||
] |
] |
55 | 11-5-8 | ||
| ; | ; | 56 | 11-6-8 | ||
| △ | ^ | 57 | 11-7-8 | ||
& |
+ |
&/+ |
60 | 12 | also +0 |
| A | A | 61 | 12-1 | ||
| B | B | 62 | 12-2 | ||
| C | C | 63 | 12-3 | ||
| D | D | 64 | 12-4 | ||
| E | E | 65 | 12-5 | ||
| F | F | 66 | 12-6 | ||
| G | G | 67 | 12-7 | ||
| H | H | 70 | 12-8 | ||
| I | I | 71 | 12-9 | ||
| ? | ? | 72 | 12-2-8 | ||
| . | . | 73 | 12-3-8 | ||
| ⌑ | ) | ) | 74 | 12-4-8 | Lozenge |
[ |
[ |
75 | 12-5-8 | ||
< |
< |
76 | 12-3-8 | ||
⧻* |
` | ` | 77 | 12-7-8 |