Summary of I/O commands for the Arpanet IMP¶
- Date:
2013-11-19
- Revision:
$Format:%H$
- Copyright:
See LICENSE.txt for terms of use.
Background¶
This document will describe the I/O addresses, commands and interrupts as currently employed in the IMP 3050 listing from 1973-09-16. This summary is based on an analysis of the listing and other documents related to the structure of the IMP.
The IMP is based on the Honeywell DDP516 processor. In addition to the usual complement of peripherals, the IMP has been augmented with some specifically designed cards. At present, it is believed that the IMP that supports the 3050 IMP listing included at least:
Honeywell DDP516 (or possibly 316) processor
A TTY interface
A light panel – a custom device that indicates the status of the attached lines
Real Time Clock – A custom device that counts 100 usec clock ticks
Certain custom “sense” options related to configuration
Possibly a custom hardware interrupt to handle task dispatching
DMC – a direct memory controller for transferring words from selected I/O devices to memory
I/O instructions in the DDP516 have the following format:
Opcode – Defines the I/O instruction
Function code – Selects a line to pulse (one of 16)
Device code – Address of the device to control
The opcode may be one of:
Opcode |
Value |
Description |
---|---|---|
|
54 |
Input to A-register[1] |
|
14 |
Output control pulse as designated by function code |
|
74 |
Output to device[2] |
|
34 |
Skip if ready line set |
|
74 |
Special Mask - transfer A to interrupt control register |
Where the opcode in the table above is shown as two octal digits, but in a typical listing the opcode is broken across three octal digits.
Device addresses¶
The following device addresses (octal) have been gleaned from the 3050 listing.
Address |
Device |
---|---|
|
TTY |
|
Standard interrupt unit & extension |
|
Watchdog timer and status light box, proc. type |
|
Real time 100 usec clock |
|
Set task interrupt/IMP number |
|
IMP or TIP indicator |
|
Host interface 3 |
|
Host interface 4 |
|
Host interface 2 |
|
Host interface 1 |
|
Modem interface 1 |
|
Modem interface 2 |
|
Modem interface 3 |
|
Modem interface 4 |
|
Modem interface 5 |
Device descriptions¶
Teletype¶
The teletype is device address 04
.
The following are the macros used to access the TTY in the listing.
It appears that there are provisions for two TTY units, but only TTY A is used.
Instruction |
Opcode |
FC |
Dev |
Description |
---|---|---|---|---|
|
|
00 |
04 |
|
|
|
10 |
04 |
|
|
|
00 |
04 |
|
|
|
10 |
04 |
|
|
|
05 |
04 |
|
|
00 |
04 |
|
|
|
02 |
04 |
|
|
|
|
10 |
04 |
|
|
|
12 |
04 |
|
|
|
00 |
04 |
|
|
|
02 |
04 |
|
The TTY chart from the DDP519 Programmers’ Reference Manual (page D-3):
|
|
Enable ASR-33/35 in input mode |
|
|
Enable ASR-33/35 in output mode |
|
|
Skip if ASR-33/35 is ready |
|
|
Skip if ASR-33/35 is not busy |
|
|
Skip if ASR-33/35 is not interrupting |
|
|
Skip if stop code was not read on ASR-33/35 |
|
|
Input in ASCII from ASR-33/35 |
|
|
Input in Binary from ASR-33/35 |
|
|
Clear register A and input in ASCII from ASR-33/35 |
|
|
Clear register A and input in Binary from ASR-33/35 |
|
|
Output in ASCII to ASR-33/35 |
|
|
Output in Binary to ASR-33/35 |
|
|
Set interrupt mask (A11) |
Interrupt unit¶
Device address 20
is used to set interrupt masks per the SMK
instruction.
The function code controls which bank of interrupts is to be set from the A register.
In addition to the standard interrupt level,
the IMP apparently includes the next interrupt level the IMP includes an extension to allow interrupts on lines 1-16.
This probably is where the “task” interrupt enters the system.
Instruction |
Opcode |
FC |
Dev |
Description |
---|---|---|---|---|
|
|
00 |
20 |
|
|
|
00 |
20 |
|
Mnemonic |
Octal code |
Instruction |
Type |
Execution time µs |
Page |
|
---|---|---|---|---|---|---|
Priority interrupt - Model 316/516-25 |
DDP-516 |
H316 |
||||
|
|
Set standard interrupt mask |
IO |
1.92 |
3.2 |
2–36 |
|
|
Set interrupt mask lines 1-16 |
IO |
1.92 |
3.2 |
2–36 |
|
|
Set interrupt mask lines 17-32 |
IO |
1.92 |
3.2 |
2–36 |
|
|
Set interrupt mask lines 33-48 |
IO |
1.92 |
3.2 |
2–36 |
Watch dog timer and status light box¶
Presently, the exact structure of this unit is unknown.
It appears that the watch dog timer (WDT) generates an interrupt if it is not given an OCP pulse at periodic intervals (interval unknown).
The light box appears to be 16 lights controlled by a register and is used to display modem and host status (see listing @3355).
There is an SKS
function at this address, which appears to be a bit that indicates the type of processor.
This function is defined, but is not used in the code.
Instruction |
Opcode |
FC |
Dev |
Description |
---|---|---|---|---|
|
|
00 |
26 |
Reset watch dog timer |
|
|
00 |
26 |
Set status lights |
|
|
00 |
26 |
|
Real time clock¶
This appears to be a custom hardware that counts 100 µsec pulses.
From analysis of the code it appears that the RTC interrupt, CLOKIL
, occurs on the carry of the eighth bit.
This would correspond to 25.600 msec.
It appears that the clock can only be read and that it is initialized to zero on power up.
Not sure whether the clock counts up or down.
Instruction |
Opcode |
FC |
Dev |
Description |
---|---|---|---|---|
|
|
00 |
40 |
|
|
|
10 |
40 |
|
|
|
10 |
40 |
|
Task interrupt/IMP number¶
This appears to be a control pulse that can be used to set an external interrupt to indicate that a task has been posted to the task queue. The IMP number appears to be a hardwired number of the particular IMP.
Instruction |
Opcode |
FC |
Dev |
Description |
---|---|---|---|---|
|
|
00 |
41 |
|
|
|
10 |
41 |
|
The RDIMPN
instruction is a form of the INA instruction.
If the IMP number is not available, the code executes the next instruction.
If the IMP number is available, the next instruction is skipped.
Presumably the IMP number is always available.
Modem/tip configuration flag¶
Allows the code to determine if the machine is an IMP or a TIP (multi-line controller).
Instruction |
Opcode |
FC |
Dev |
Description |
---|---|---|---|---|
|
|
00 |
42 |
|
AMIMLC
probably means “Am I a multi-line controller?”
Host interface¶
As shown above, the host device addresses are not sequential,
probably because there are other important Honeywell devices already assigned to this area.
In the following table, x
is the device number that may vary from 1 to 4.
The actual device address is shown above.
MIDAS macros on page 4 of the listing show the construction of host instructions.
It appears that these controls go to the host interface. Data for the host is transferred through DMC channels.
Instruction |
Opcode |
FC |
Description |
Listing |
---|---|---|---|---|
|
|
00 |
|
17056 |
|
|
01 |
|
13200 |
|
|
02 |
|
16124 |
|
|
03 |
|
— |
|
|
04 |
|
01170 |
|
|
05 |
|
16316 |
|
|
00 |
|
13172 |
|
|
01 |
|
21664 |
|
|
02 |
|
13303 |
|
|
04 |
|
— |
Modem interface¶
The following controls go to the modem (M1
, M2
, M3
, M4
, M5
).
The actual data is transferred through the DMC.
Modem addresses are given in the table above.
Instruction codes are examples for particular modems.
Page 4 of the listing gives the macros used to generate the instructions.
Instruction |
Opcode |
FC |
Description |
Listing |
---|---|---|---|---|
|
|
00 |
|
|
|
|
01 |
|
|
|
|
02 |
|
|
|
|
03 |
|
|
|
|
04 |
|
|
|
|
04 |
|
|
Interrupt entry point addresses¶
It appears that the interrupts vectors for the IMP peripherals have replaced those associated with the generic DDP 516.
The basic interrupt structure of the DDP 516 is that there are 12 groups of four interrupt address,
starting at 000064
and extending upward in block of four (probably this is related to packaging of the circuitry).
There is a group “0” of four interrupts from 000060
to 000063
, which are fixed.
Here is a table from the Programmer’s Reference Manual related to the interrupt groups:
Priority interrupt group |
Dedicated locations (octal codes) |
---|---|
1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 |
|
10 |
|
11 |
|
12 |
|
The IMP uses interrupt groups 1 through 4. As shown below. (these addresses have not all been verified).
Address |
MACRO |
Device |
Description |
Group |
Line |
---|---|---|---|---|---|
|
|
Power fail |
|||
|
|
Watch dog ?? |
|||
|
|
Watch dog ?? |
|||
|
|
Standard interrupt |
|||
|
|
Modem 1 IN |
Modem 1 input ready |
1 |
1 |
|
|
Modem 2 IN |
Modem 2 input ready |
1 |
2 |
|
|
Modem 3 IN |
Modem 3 input ready |
1 |
3 |
|
|
Modem 4 IN |
Modem 4 input ready |
1 |
4 |
|
Host 4 Out (= |
Host 4 output complete |
1 |
4 |
|
|
|
Modem 5 IN |
Modem 5 input ready |
2 |
5 |
|
Host 3 Out (= |
Host 3 output complete |
2 |
5 |
|
|
|
Modem 1 OUT |
Modem 1 output complete |
2 |
6 |
|
|
Modem 2 OUT |
Modem 2 output complete |
2 |
7 |
|
|
Modem 3 OUT |
Modem 3 output complete |
2 |
8 |
|
|
Modem 4 OUT |
Modem 4 output complete |
3 |
9 |
|
Host 4 IN (= |
Host 4 input ready |
3 |
9 |
|
|
|
Modem 5 OUT |
Modem 5 output complete |
3 |
10 |
|
Host 3[4] IN (= |
Host 3 input ready |
3 |
10 |
|
|
|
Host 1 Out |
Host 1 output complete |
3 |
11 |
|
|
Host 2 Out |
Host 2 output complete |
3 |
12 |
|
|
Host 1 IN |
Host 1 input ready |
4 |
13 |
|
|
Host 2 IN |
Host 2 input ready |
4 |
14 |
|
|
Real time clock |
25.600 msec interrupt ?? |
4 |
15 |
|
|
Task ready |
Set dynamically by the program when tasks are added to the task queue |
4 |
16 |
Only certain configurations of host and modem are allowed, so some interrupts overlap.
Masking of the interrupts is as shown in the table below (from the Programmer’s Reference Manual). The IMP makes use only of the interrupt lines 1–16 (shown in the “SMK ‘0120” column below).
A-Register bit no. |
|
|
|
|
---|---|---|---|---|
Interrupt line number |
1 |
1 |
17 |
33 |
2 |
2 |
18 |
34 |
|
3 |
3 |
19 |
35 |
|
4 |
4 |
20 |
36 |
|
5 |
5 |
21 |
37 |
|
6 |
6 |
22 |
38 |
|
7 |
7 |
23 |
39 |
|
8 |
8 |
24 |
40 |
|
9 |
9 |
25 |
41 |
|
10 |
10 |
26 |
42 |
|
11 |
11 |
27 |
43 |
|
12 |
12 |
28 |
44 |
|
13 |
13 |
29 |
45 |
|
14 |
14 |
30 |
46 |
|
15 |
15 |
31 |
47 |
|
16 |
16 |
32 |
48 |
Note that some interrupt locations are assigned to two different devices (e.g., H4OTIL
= M4INIL
).
These are shown in gray shading above.
Certain configurations of host and modems are not allowed,
so these interrupts will go to the particular device configured.
For example, four hosts and four modems do not appear to be an allowed combination.
This allows the interrupt to be shared.
Listing page 43 is probably an enumeration of allowed host/modem configurations.
Dedicated locations¶
The DDP516 has certain low memory locations that area dedicated as shown in the table below.
Octal address |
Assignment |
|
---|---|---|
|
Index register |
|
|
Protected fill program |
|
|
Starting |
Addresses DMC channel 1 |
|
Final |
|
|
DMC channels 2 – 16 |
|
|
Power failure interrupt link |
|
|
Real-time clock |
|
|
Memory lockout violation int. link |
|
|
Standard interrupt link |
|
|
Optional PI No. 1 link |
|
|
Optional PI No. 2 – 48 links |
Interrupt masks¶
Interrupts are organized into four banks. The first bank is standard and the following three banks are optional. The standard bank appears to be devoted to standard Honeywell peripherals. In the IMP, the second bank is used to provide interrupts for the modems, host, program and timer. The table below shows the organization of the interrupt banks in reference to the set mask instructions that control each bank.
Mask bits in the standard interrupt bank are applied according to the following table:
OTB bit no. |
Device |
---|---|
1 |
Mag tape control unit no. 1 |
2 |
Mag tape control unit no. 2 |
3 |
(Unassigned) |
4 |
Moving head disc file |
5 |
I/O channel no. 1 |
6 |
I/O channel no. 2 |
7 |
I/O channel no. 3 |
8 |
Small mass store |
9 |
Paper tape reader |
10 |
Paper tape punch |
11 |
ASR-33/35 |
12 |
Card reader |
13 |
(Unassigned) |
14 |
Line printer |
15 |
Memory parity (DDP-516) |
15 |
Unassigned (H316) |
16 |
Real time clock |
The interrupts for the IMP specific devices are related to their device address as shown in the table of IMP special interrupts.
Interrupts for a particular input are enabled if the bit is set to 0
they are disabled (“masked”) if the corresponding bit is set to 1
.
Address |
Mask bit |
Function |
---|---|---|
|
|
Modem 1 IN |
|
|
Modem 2 IN |
|
|
Modem 3 IN |
|
|
Modem 4 IN or Host 4 OUT |
|
|
Modem 5 IN or Host 3 OUT |
|
|
Modem 1 OUT |
|
|
Modem 2 OUT |
|
|
Modem 3 OUT |
|
|
Modem 4 OUT or Host 4 IN |
|
|
Modem 5 OUT or Host 3 IN |
|
|
Host 1 Out |
|
|
Host 2 Out |
|
|
Host 1 IN |
|
|
Host 2 IN |
|
|
Real time clock |
|
|
Task ready |
Note that certain interrupts and interrupt addresses are shared between modems and hosts. This means that only certain configurations are allowed. Specifically:
5 modems and 2 hosts
4 modems and 3 hosts
3 modems and 4 hosts
Mnemonic |
Octal code |
Instruction |
Type |
Execution time µs |
Page |
|
---|---|---|---|---|---|---|
Priority interrupt - Model 316/516-25 |
DDP-516 |
H316 |
||||
|
|
Set standard interrupt mask |
IO |
1.92 |
3.2 |
2–36 |
|
|
Set interrupt mask lines 1-16 |
IO |
1.92 |
3.2 |
2–36 |
|
|
Set interrupt mask lines 17-32 |
IO |
1.92 |
3.2 |
2–36 |
|
|
Set interrupt mask lines 33-48 |
IO |
1.92 |
3.2 |
2–36 |
DMC channel numbers¶
The DDP516 supports 16 channels assignments according to the following table from the Programmer’s Reference. Normally, these would be allocated to various devices, like the tape, printer and disk. However, the IMP does not include any of these peripherals, so they channel assignments are freed up for use by the host and modems as shown following this table.
Channel number |
Starting address |
Ending address |
---|---|---|
1 |
|
|
2 |
|
|
3 |
|
|
4 |
|
|
5 |
|
|
6 |
|
|
7 |
|
|
8 |
|
|
9 |
|
|
10 |
|
|
11 |
|
|
12 |
|
|
13 |
|
|
14 |
|
|
15 |
|
|
16 |
|
|
DMC pointers occur in pairs.
For each DMC channel there are two consecutive words.
The first word is the starting address for the channel and the second word is the ending address.
For the modems and host attached to the IMP the address word pairs are stored as follows.
For each device there is an input and output pointer designated as xx INBP
and xxOTBP
, respectively.
The pointers for the modem and host DMC channels are defined on listing page 4 using MIDAS macros.
As with the interrupt address the DMC address for certain hosts and modems overlap.
This is possible because the configurations are limited and conflicting host and modem configurations are not allowed.
For example, there cannot be 4 hosts and 5 modems.
Whether a channel represents an input or output channel is determined by the structure of the hardware and by the value of the high bit (bit 1) of the starting address.
A value of 1
indicates the channel is setup for input.
A value of 0
indicates the channel is setup for output.
Name |
Address |
Function |
Channel |
Code Page |
---|---|---|---|---|
|
|
Modem 1 input start address |
1 |
5 |
|
Modem 1 input end address |
1 |
||
|
|
Modem 2 input start address |
2 |
5 |
|
Modem 2 input end address |
2 |
||
|
|
Modem 3 input start address |
3 |
5 |
|
Modem 3 input end address |
3 |
||
|
|
Modem 4 input start address |
4 |
5 |
|
Modem 4 end start address |
4 |
||
|
|
Modem 5 input start address |
5 |
5 |
|
Host 4 output start address |
6 |
||
|
Modem 5 input end address |
5 |
||
Host 4 output end address |
||||
|
|
Modem 1 output start address |
6 |
5 |
|
Modem 1 output end address |
6 |
||
|
|
Modem 2 output start address |
7 |
5 |
|
Modem 2 output end address |
7 |
||
|
|
Modem 3 output start address |
8 |
5 |
|
Modem 3 output end address |
8 |
||
|
|
Modem 4 output start address |
9 |
5 |
|
Modem 4 output end address |
9 |
||
|
|
Modem 5 output start address |
10 |
5 |
|
Host 4 input start address |
6 |
||
|
Modem 5 output end address |
10 |
||
Host 4 input end address |
||||
|
|
Host 1 output start address |
11 |
5 |
|
Host 1 output end address |
11 |
||
|
|
Host 2 output start address |
12 |
5 |
|
Host 2 output end address |
12 |
||
|
|
Host 1 input start address |
13 |
5 |
|
Host 1 input end address |
13 |
||
|
|
Host 2 input start address |
14 |
5 |
|
Host 2 input end address |
14 |
||
|
|
Host 3 output start address |
15 |
6 |
|
Host 3 output end address |
15 |
||
|
|
Host 3 input start address |
16 |
6 |
|
16 |