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 7010 simulator was written by Richard Cornwell.
1. Introduction 2. Simulator Files 3. IBM 7010 Features 3.1 CPU 3.2 I/O Channels (CH1..CH4) 3.3 Unit record devices. 3.3.1 Inquiry Station (INQ) 3.3.2 1402 Card Reader (CDR) 3.3.2 1402 Card Punch (CDP) 3.3.4 Stack Device (STKR) 3.3.5 1403 Line Printer (LP) 3.4 Magnetic Tape devices 3.4.1 729 Magnetic Tape (MTA-C) 3.4.2 ChronoClock. 3.5 7909 Devices 3.5.1 1301/1302/2302/7320 Disk devices 3.5.2 7750 Communications Controller (COM and COML) 4 Symbolic Display and Input 5 Character Codes
The IBM 1410 and 7010 were designed as enhancements to the IBM 1401, these were somewhat source compatible, but not binary compatible. The 1410 was introduced on September, 12 1960 and the 7010 in 1962. The 1410 was withdrawn on March 30, 1970. The 7010 featured 4 I/O channels where the 1410 had 2. Also the 7010 could access 100,000 characters of memory as opposed to the 80,000 for the 1410. The 7010 also featured optional decimal floating point instructions. Memory was divided into fields separated by a special flag called a word mark. Instructions end at the first character with the word mark set. They consist of a operation code, followed by 1 or 2 5-digit addresses, and an optional instruction modifier. If the 10's and 100's digit have zone bits set the address is modified by the contents of the five characters at locations 25-100. Each register is 5 characters long and word marks are ignored. The 1410 and 7010 could also be optionally equipped with priority mode to allow for device complete interrupts.
The 7010 or 1410 CPU has no registers. All operations on done from memory.
To compile the IBM 7010:
| Subdirectory | File | Contains |
|---|---|---|
I7000 |
i7000_defs.h |
IBM 7000 simulators general definitions |
i7010_defs.h |
IBM 7010 simulator specific definitions | |
i7000_chan.c |
Generic channel interface | |
i7010_cpu.c |
7010 CPU, channel, interface | |
i7010_chan.c |
7010 channel | |
i7010_sys.c |
7010 system interface | |
i7000_cdr.c |
1402 card reader | |
i7000_cdp.c |
1402 card punch | |
i7000_com.c |
7750 communications controller | |
i7000_con.c |
inquiry console | |
i7000_dsk.c |
1301/2302 disk and 7238 drum controller | |
i7000_ht.c |
7340 hypertape controller | |
i7000_lpr.c |
1403 line printer | |
i7000_mt.c |
729 tape controller | |
i7000_chron.c |
chrono clock |
The IBM 7010 simulator is configured as follows:
| Device Name(s) | Simulates |
|---|---|
CPU |
7010 CPU with 10-60K of memory |
CH1..4 |
7010 channels |
MTA |
729 magnetic tape controller (channel 20) |
MTB |
729 magnetic tape controller (channel 21) |
MTC |
729 magnetic tape controller (channel 22) |
CHRON |
chrono clock |
CDR |
1402 card reader |
CDP |
1402 card punch |
STKR |
1402 card-punch stacker |
LP |
1403 line printer |
DK |
1301/2302/7304 disk |
COM |
7750 communications controller |
COML |
7750 communications lines |
The 7010 simulator implements several unique stop condition:
-
I/O Device not ready.
-
Unknown CPU instruction
-
I/O Check
-
Divide Error
-
No Word Mark
-
Invalid Addresses
-
Invalid Instruction Length
-
Program Check
-
Protection Check
-
invalid message to 7750
-
No buffer storage available for input character on 7750
-
no buffer storage available for output character on 7750
The CPU options include setting memory size and CPU type.
| SET CPU 1401 | Emulate a 1401 |
| SET CPU 7010 | Emulate a 7010 |
| SET CPU 10K | Sets memory to 10K |
| SET CPU 20K | Sets memory to 20K |
| SET CPU 30K | Sets memory to 30K |
| SET CPU 40K | Sets memory to 40K |
| SET CPU 50K | Sets memory to 50K |
| SET CPU 60K | Sets memory to 60K |
| SET CPU 70K | Sets memory to 70K |
| SET CPU 80K | Sets memory to 80K |
| SET CPU 90K | Sets memory to 90K |
| SET CPU 100K | Sets memory to 100K |
| SET CPU NOPRIORITY | No Priority Mode |
| SET CPU PRIORITY | Priority Mode |
| SET CPU NOFLOAT | No Floating Point |
| SET CPU FLOAT | Floating point |
| SET CPU NOPROT | No memory protection |
| SET CPU PROT | Memory Protection |
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 |
|---|---|---|
| IAR | 5 | Instruction Address Register |
| AAR | 5 | A Address Register |
| BAR | 5 | B Address Register |
| CAR | 5 | C Address Register |
| DAR | 5 | D Address Register |
| E | 5 | Channel 0 Address Register |
| F | 5 | Channel 1 Address Register |
| G | 5 | Channel 2 Address Register |
| H | 5 | Channel 3 Address Register |
| ASTRISK | 1 | Asterix Mode |
| SW0..6 | 1 | Sense Switch |
| SW | 6 | 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 |
The history trace shows the Instruction counter, the AAR and BAR before and after the instruction executed. The result of the instruction is displayed followed by the symbolic instruction.
The 7010 supported 4 channels.
| SET CHAN UREC=dev | Sets device to cause interrupts on a channel. |
Channels have the following registers:
| Name | Size(digits) | Comments |
|---|---|---|
| ADDR | 5 | Channel Data Address |
| CMD | 1 | Channel Command. |
| FLAGS | 32 (binary) | Channel Flags |
For meaning of bits in FLAGS see i7000_defs.h.
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 CDRn FORMAT=TEXT | Sets ASCII text mode |
| SET CDRn FORMAT=BINARY | Sets for binary card images. |
| SET CDRn FORMAT=BCD | Sets for BCD records. |
| SET CDRn FORMAT=CBN | Sets for column binary BCD records. |
| SET CDRn FORMAT=AUTO | Automatically determines format. |
or in the ATTACH command:
| Command | Action |
|---|---|
ATTACH CDRn <file> |
attaches a file |
ATTACH CDRn -f <format> <file> |
attaches a file with the given format |
ATTACH CDRn -s <file> |
adds a file onto the current cards to read |
ATTACH CDRn -e <file> |
sets an end-of-file flag after the file is read |
The channel can be changed by the following command:
| SET CDRn CHAN=c | Set this device to channel c. |
The default assignments are:
| CDR0 | Channel 1 |
| CDR1 | Disabled |
The card reader can be booted with the:
| Command | Action |
|---|---|
BOOT CDRn |
reads the first card into address 1 and starts execution at location 1 |
Error handling is as follows:
| Error | Processed As |
|---|---|
| not attached | report error and stop |
| end of file | out of cards |
| OS I/O error | report error and stop |
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 CDPn FORMAT=TEXT | Sets ASCII text mode |
| SET CDPn FORMAT=BINARY | Sets for binary card images. |
| SET CDPn FORMAT=BCD | Sets for BCD records. |
| SET CDPn FORMAT=CBN | Sets for column binary BCD records. |
| SET CDPn FORMAT=AUTO | Automatically determines format. |
or in the ATTACH command:
| Command | Action |
|---|---|
ATTACH CDPn <file> |
attaches a file |
ATTACH CDPn -f <format> <file> |
attaches a file with the given format |
The channel can be changed by the following command:
| SET CDPn CHAN=c | Set this device to channel c. |
The default assignments are:
| CDP0 | Channel 1 |
| CDP1 | Disabled |
Error handling is as follows:
| Error | Processed As |
|---|---|
| not attached | report error and stop |
| OS I/O error | report error and stop |
The stacker device can be enabled, and files can be attached to individual bins of the stacker. The file format follows that of the CDP device. The individual unit reflects the stacker code sent by the computer. If no file is attached the output will go to the file attached to the CDP device.
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.
| Command | Action |
|---|---|
SET LPn NO/ECHO |
sets echoing of line-printer output to the console |
SET LPn CHAN=n |
sets the channel for this device |
SET LPn LINESPERPAGE=lpp |
sets the number of lines per page |
The default assignments are:
| LP0 | Channel 1 |
| LP1 | Disabled |
If the printer supports the following control codes to control spacing.
| Character (Octal) | Action |
|---|---|
060 |
suppress spacing |
020 |
single space after |
040 |
single space before |
063 |
skip to channel 3 (every 5th line) |
062 |
skip to channel 2 (every 8th line) |
061 and 069 |
skip to channel 1 or 9 (top of form) |
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. |
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=1
These devices must be attached to a 7909 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) |
SET DKn CTSS |
sets the disk to use the CTSS bootstrap |
SET DKn IBSYS |
sets the disk to use the IBSYS bootstrap |
Formatting is disabled by default.
All Disk units support bootstrapping with boot command. Bootstrap code is build based on whether CPU is in CTSS mode or not.
| BOOT DKn | Insert custom Loader into lower memory and start. |
Error handling is as follows:
| Error | Processed As |
|---|---|
| not attached | report error and stop |
| OS I/O error | report error and stop |
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 7010 simulator implements symbolic display and input. These are controlled by the following switches to the EXAMINE and DEPOSIT commands:
| -m | Display/Enter Symbolic Machine Code |
| -c | Display/Enter BCD Characters |
| -n | Display 1401 Symbolic Machine Code |
| Display/Enter Octal Characters |
The symbolic input/display supports several instruction-display formats:
<opcode>
<opcode> <character>
<opcode> <character><character><character>
<opcode> <address>
<opcode> <address>,<address>
<opcode> <address>,<character>
<opcode> <address>,<address>,<character>
An address is a decimal number optionally followed by a +Xnn specifying an index register.
| 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 |