mirror of
https://github.com/simh/simh.git
synced 2026-01-11 23:52:58 +00:00
This emulates the classic LINC. The design was settled in 1965, increasing memory to 2048 words, and adding a Z register, an overflow flag, and an interrupt facility.
136 lines
4.5 KiB
Markdown
136 lines
4.5 KiB
Markdown
# LINC emulator
|
|
|
|
This is an emulator for the classic LINC from 1965.
|
|
|
|
### Devices
|
|
|
|
- CPU - LINC processor. If throttled to 125k, approximately original speed.
|
|
- CRT - CRT display. It can be disabled to run headless.
|
|
- DPY - point-plotting display controller.
|
|
- KBD - keyboard. Input comes from typing in the CRT window.
|
|
- SAM - sampled analog inputs.
|
|
- TAPE - four tape drives.
|
|
- TTY - teletype.
|
|
|
|
### LOAD
|
|
|
|
Software can be loaded into memory using the `LOAD` command. It will
|
|
normally read a file with 16-bit little endian words; the most
|
|
significant four bits of each word should be zero. If the `-O` switch
|
|
is supplied, the input is a text file with octal numbers separated by
|
|
whitespace.
|
|
|
|
To start reading from some particular position in the input file, add
|
|
`OFFSET=` after the file name and supply a number in octal.
|
|
|
|
To specify where in the memory to put the data, add `START=` after the
|
|
file name; the default is 0. To specify how many words to load, use
|
|
`LENGTH=`; the default is to write until the end of memory.
|
|
|
|
A binary input file can be a tape image. A plain image is 512 blocks
|
|
of 256 words each, totalling 262144 bytes. If the `-E` switch is
|
|
used, there is a check for the extended image format that can have
|
|
empty guard blocks at the beginning and the end. The last three words
|
|
in the extended format specify the block size, first forward block
|
|
number, and first reverse block number.
|
|
|
|
To state which tape block to start reading, add `BLOCK=` after the
|
|
file name and supply an octal number in the range 0-777.
|
|
|
|
### DO
|
|
|
|
The SIMH `DO` command has been modified. With arguments, it will
|
|
execute a script file as normal. Without argument, it acts like the
|
|
DO button on the LINC control panel. This executes one instruction
|
|
from the left switches, with the right switches providing a second
|
|
word if needed.
|
|
|
|
### Tape drives
|
|
|
|
To mount a tape image *file* on drive *n*, type `ATTACH TAPE<n>
|
|
<file>`. The plain or extended image format will be detected
|
|
automatically. Tape drives are numbered 0, 1, 4, and 5.
|
|
|
|
The `BOOT TAPEn` command will act like entering a tape read command in
|
|
the switches and starting the computer. The default is to read eight
|
|
blocks starting at 300, and start from location 20. This is the
|
|
conventional way to run LAP6. You can also add `RDC=` or `RCG=` to
|
|
boot some particular blocks. `START=` can be used to specify the
|
|
start address; it defaults to 20.
|
|
|
|
### Keyboard
|
|
|
|
The keys `0-9`, `A-Z`, and `Space` are mapped to their corresponding
|
|
LINC keys. `Enter` is mapped to `EOL`, `Delete` and `Backspace` are
|
|
mapped to `DEL`, and `Shift` is mapped to `CASE`. To type an upper
|
|
case symbol on some key, press `CASE`, release it, and then type the
|
|
key. For convenience, `Alt` is mapped to `META`.
|
|
|
|
The remaining keys are mapped thusly:
|
|
- `F1` is mapped to the `pu` key.
|
|
- `=` is mapped to the `i=` key.
|
|
- `-` and `,` are mapped to the `-,` key.
|
|
- `.` is mapped to the `+. key.
|
|
- `\` is mapped to the `|⊟` key.
|
|
- `[` and `left backslash` are mapped to the `*[` key.
|
|
|
|
The remaining upper case symbols:
|
|
- `CASE A` - `"`.
|
|
- `CASE B` - `„`.
|
|
- `CASE C` - `<`.
|
|
- `CASE D` - `>`.
|
|
- `CASE E` - `]`.
|
|
- `CASE F` - `*`.
|
|
- `CASE G` - `:`.
|
|
- `CASE Space` - `?`.
|
|
|
|
### Teletype
|
|
|
|
The TTY device implmenents a teletype for printing output. When a
|
|
file is attached, it will receive text decoded at 110 baud from relay
|
|
output 0.
|
|
|
|
Some characters are translated by LAP6 from the LINC character to ASCII:
|
|
- `i` to `&`
|
|
- `p` to `'`
|
|
- `|` to `\`
|
|
- `u` to `%`
|
|
- `⊟` to `$`
|
|
- `_` to `@`
|
|
- `"` to `^`
|
|
- `„` to `;`
|
|
|
|
### CPU
|
|
|
|
Registers:
|
|
- P - Instruction location, 10 bits.
|
|
- C - Current instruction, 12 bits.
|
|
- S - Memory address, 12 bits - 11 for address, 1 for halfword select.
|
|
- B - Memory data buffer, 12 bits.
|
|
- A - Accumulator, 12 bits - one's complement.
|
|
- Z - Various, 12 bits.
|
|
- L - Link, 1 bit.
|
|
- OVF - Overflow, 1 bit.
|
|
- IBZ - Tape interblock zone, 1 bit.
|
|
- ENI - Interrupt enabled, 1 bit.
|
|
- PINFF - Pause Interrupt enabled, 1 bit.
|
|
|
|
Switches:
|
|
- LSW - Left switches, 12 bits.
|
|
- RSW - Right switches, 12 bits.
|
|
- SSW - Sense switches, 6 bits.
|
|
|
|
Inputs:
|
|
- INTREQ, Interrupt request, 1 bit.
|
|
- R - Relays, 6 bits.
|
|
- XL - External levels, 12 of 1 bit each.
|
|
- SAM - Sampled analog inputs, 16 of 8 bits each; one's complement.
|
|
|
|
### Documentation
|
|
|
|
Programming:
|
|
https://bitsavers.org/pdf/washingtonUniversity/linc/Programming_the_LINC_Second_Edition_Jan69.pdf
|
|
|
|
Using the LAP6 operating system, text editor, assembler, tape filing system:
|
|
https://bitsavers.org/pdf/washingtonUniversity/linc/LINC_Reference_Manuals/LINC_Vol_16_Section_3_LAP6_Handbook_May67.pdf
|