logo for David Morrin

EMT 250 Instructions

EMT 250 Instructions

David Morrin

2022-12-18

EMT 250 home
Technical info

These are unofficial instructions. Some of the naming is taken from terms in the schematic, but mostly they were just made up on the spot.

ALU functions

The ALU has two inputs A and B. Input A can be almost any data source other than register B. Input B is always register B.

Mnemonic Bit map (31:24, 23:16, 15:8, 7:0) Function
aX 0------- -------- -------- aa------ Use register A, address X (aa) as input A
(I/O see below) 1------- -------- -----bbb aa------ Use source aa (bbb for I/O) as input A
SH -------- a------- -------- -------- a=1 to shift the bits around (see details in text)
INC ---000-- -1--aa-- -------- -------- Increment B register aa
SUB ---001-- -1--aa-- -------- -------- Subtract: B input aa minus A input
ADD ---010-- -0--aa-- -------- -------- Add: B register aa plus input A
NOT ---011-- -------- -------- -------- Bitwise negation of input A
XOR ---100-- ----aa-- -------- -------- Exclusive OR: B register aa \(\oplus\) input A
TA ---101-- -------- -------- -------- Transfer input A
TB ---000-- -0--aa-- -------- -------- Transfer B register aa
AND ---110-- ----aa-- -------- -------- Logical: B register aa \(\cdot\) input A
DBL ---111-- -0--aa-- -------- -------- Doubles B register: B reg aa plus B reg aa

Memory

Mnemonic Bit map (31:24, 23:16, 15:8, 7:0) Function
LaX -aa----- --1----- -----ccc --bb---- Store source aa (ccc for I/O) to A register bb [SA]
LbX -------- ---1--aa -------- -------- Store ALU output to B register aa [S]
MBR ------10 -------- -------- -------- Load memory buffer register with ALU output
MAR ------11 -------- -------- -------- Load memory address register with ALU output
SP ------01 -------- ----1-10 -------- Store product (write ALU result to multiplier RAM)

Data source selection

Mnemonic Bit map (31:24, 23:16, 15:8, 7:0) Function
IMM -00----- -------- aaaaaaaa aaaaaaaa Immediate
ALU -01----- -------- -------- -------- ALU output
MM -10----- -------- -----000 ------aa Multiplier memory aa
CTL -10----- -------- -----001 -------- Panel controls (3 levers and program buttons)
ROT -10----- -------- -----010 -------- Rotates latch A
NOI -10----- -------- -----011 -------- Scrambles latch A for noise generation
AD1 -10----- -------- -----100 -------- A/D delay line #1
AD2 -10----- -------- -----101 -------- A/D delay line #2
AD3 -10----- -------- -----110 -------- A/D delay line #3
PRD -10----- -------- -----111 -------- Product register
MO -11----- -------- -------- -------- Main memory output

I/O side effects

Mnemonic Bit map (31:24, 23:16, 15:8, 7:0) Function
JMPI ------01 -------- ----1001 -------- Jump on interrupt. Clears interrupt.
JMP ------01 -------- ----1011 -------- Jump to ALU result.
ADC ------01 -------- ----1110 -------- Start A/D
DAC ------01 -------- ----1100 -------- Start D/A (resets D/A counters)
LDDA ------01 -------- ----1000 -------- Load D/A. There are 4; auto increment D/A [S]
MULI ------01 -------- ---00--- aaaaaaaa Multiply ALU result times immediate
MULM ------01 -------- ---10--- ----aaaa Multiply ALU result times multiplier memory address aaaa

Skip functions

Mnemonic Bit map (31:24, 23:16, 15:8, 7:0) Function
(no skip) -------- -------- 000----- -------- No skip, default behavior
SKN -------- -------- 001----- -------- Skip on negative
SKC -------- -------- 010----- -------- Skip on carry
SKP -------- -------- 011----- -------- Skip on positive
SKNO -------- -------- 100----- -------- Skip on not-overflow
SKNON -------- -------- 101----- -------- Skip on not-overflow or negative
SKNOP -------- -------- 110----- -------- Skip on not-overflow or positive
SKA -------- -------- 111----- -------- Skip always

Compound examples

Mnemonic Bit map (31:24, 23:16, 15:8, 7:0) Function
TA A JMP #122 10010101 -------- ----1011 01111010 Jump to ROM address 122.
La3 MO -11----- --1----- -------- --11---- Load memory into register a3
La0 Lb1 MBR ADD b1 a0 00101010 00110101 01100000 00000000 a0 = b1 = memory = b1 + a0