nd100x

================================================================================

CPU Documentation

================================================================================

πŸ“‘ Table of Contents

πŸ” CPU Information

βš™οΈ Registers

πŸ“š Instruction Classes

🏠 Addressing Modes

πŸ’» Instructions by Category

πŸ“– Instruction Reference

================================================================================

πŸ” CPU Information

================================================================================

ND-100

Word Size: 16 bits Endianness: big

================================================================================

βš™οΈ Registers

================================================================================

Name Description Size Type
STS Status register (user) 16 bits Β 
D Data register 16 bits Β 
P Program counter 16 bits Β 
B Base register for addressing 16 bits Β 
L Link register 16 bits Β 
A Accumulator register 16 bits Β 
T Temporary register 16 bits Β 
X Index register 16 bits Β 

================================================================================

πŸ“š Instruction Classes

================================================================================

memory_transfer

Memory transfer instructions specify memory transfers. These are the only instructions that use the addressing modes in their format.

Format: <opcode> <address mode> <disp> Mask: 1111_1000_0000_0000


jump_on_condition

Jump on condition instructions specify a jump to a specified address if a condition is met. The condition is specified by the condition code bits in the status register.

Format: <opcode> <displacement> Mask: 1111_1111_0000_0000


register_block

Register block instructions specify a register block to be loaded from memory.

Format: <opcode> <level> <type> Mask: 1111_1111_1000_0000


register_src_dst

Class where we can specify a source and destination register

Format: <opcode> <source> <destination> Mask: 1111_1111_1100_0000


register_dst

Class where we can specify a destination register

Format: <opcode> <destination> Mask: 1111_1111_1111_1000


register_arithmetic

Register arithmetic instructions

Format: <opcode> <ADC> <AD1> <CM1> <CM2> <source> <destination> Mask: 1111_1100_0000_0000


register_logical

Register logical instructions

Format: <opcode> <ADC> <AD1> <CM1> <CM2> <source> <destination> Mask: 1111_1100_0000_0000


bit_instructions

Bit instructions

Format: <opcode> <function> <bit_no> <destination> Mask: ``


bit_instructions_with_condition

Bit instructions

Format: <opcode> <condition> <bit_no> <destination> Mask: ``


shift_instructions

Shift instructions

Format: <opcode> <shift_type> <shift_counter> Mask: 1111_1000_0000_0000


================================================================================

🏠 Addressing Modes

================================================================================

These three bits give the addressing mode for the instruction

Bit Structure

The addressing mode is encoded in the instruction word and consists of the following subfields:

Bit Name Description
10 X Index register flag
9 I Indirect addressing flag
8 B Base register flag

Effects when Bits are Set

Syntax Variations

When multiple bits are set, the assembly syntax changes as follows:

Summary of Addressing Modes

Mode Value Format Example Effective Address
prelative 0 <disp> STA *2 (P) + disp
brelative 1 <disp>, B LDA -4,B (B) + disp
indirect_prelative 2 I <disp> LDA I *22 ((P) + disp)
indirect_brelative 3 I <disp> ,B JPL I 3,B ((B) + disp)
xrelative 4 <disp>,X LDA 0,X (X) + disp
brelative_indexed 5 <disp>,B,X LDA 17,B ,X (B) + disp + (X)
indirect_prelative_indexed 6 ,X I <disp> LDA ,X I *4 ((P) + disp) + (X)
indirect_brelative_indexed 7 ,X I ,B <disp> LDA ,X I ,B *4 ((B) + disp) + (X)

See Addressing Modes for more detailed information.


================================================================================

πŸ’» Instructions by Category

================================================================================

Argument Instruction

Instruction Description
AAA Add argument to A
AAB Add argument to B
AAT Add argument to T
AAX Add argument to X
SAA Set argument to A
SAB Set argument to B
SAT Set argument to T
SAX Set argument to X

Description

These instructions operate on registers.

The is sign extended.

8-bit argument numbers are extended to 16-bits using Sign extension.

The 8-bit argument becomes the least significant byte The higher byte is extended with ones or zeros.

Positive arguments have the higher byte extended with zeros Nnegative numbers are extended with ones with the argument in 2’s complement form. ——————————————————————————–

Arithmetic and Logical

Instruction Description
ADD Add to A register
AND Logical AND to A register
MPY Multiply integer
ORA Logical inclusive OR to A register
SUB Subtract from A register

Bit instructions

Instruction Description
BANC ogical AND with bit compl
BAND Logical AND to K
BLDA Load K
BLDC Load K and complement
BORA Logical OR to K
BSET Set specified bit in equal to specified condition
BSKP Skip next location if specified condition is true
BSTA Store and clear K
BSTC Store complement and set K to 1

Description

These instructions manipulate single bits within the working and STS registers.

Instruction structure:

15         7 6     3   0
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”
β”‚ bit op   β”‚  bn   β”‚dr β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”˜

Bit operation: Bits 11-15 are always set to one for a bit operation. Bits 7-10 determine the type of operation as follows:

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚type bits β”‚ mnemonic   β”‚ description                   β”‚ code        β”‚
β”‚10 9 8 7  β”‚            β”‚                               β”‚             β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ 0 0 0 0  β”‚ BSET ZRO   β”‚ bit ⟡ 0                      β”‚ 174000β‚ˆ     β”‚
β”‚ 0 0 0 1  β”‚ BSET ONE   β”‚ bit ⟡ 1                      β”‚ 174200β‚ˆ     β”‚
β”‚ 0 0 1 0  β”‚ BSET BCM   β”‚ bit ⟡ bit                    β”‚ 174400β‚ˆ     β”‚
β”‚ 0 0 1 1  β”‚ BSET BAC   β”‚ bit ⟡ K                      β”‚ 174600β‚ˆ     β”‚
β”‚ 0 1 0 0  β”‚ BSKP ZRO   β”‚ skip if bit = 0               β”‚ 175000β‚ˆ     β”‚
β”‚ 0 1 0 1  β”‚ BSKP ONE   β”‚ skip if bit = 1               β”‚ 175200β‚ˆ     β”‚
β”‚ 0 1 1 0  β”‚ BSKP BCM   β”‚ skip if bit = bit             β”‚ 175400β‚ˆ     β”‚
β”‚ 0 1 1 1  β”‚ BSKP BAC   β”‚ skip if bit = K               β”‚ 175600β‚ˆ     β”‚
β”‚ 1 0 0 0  β”‚ BSTC       β”‚ bit ⟡ K, K ⟡ 1              β”‚ 176000β‚ˆ     β”‚
β”‚ 1 0 0 1  β”‚ BSTA       β”‚ bit ⟡ K, K ⟡ 0              β”‚ 176200β‚ˆ     β”‚
β”‚ 1 0 1 0  β”‚ BLDC       β”‚ K ⟡ bit                      β”‚ 176400β‚ˆ     β”‚
β”‚ 1 0 1 1  β”‚ BLDA       β”‚ K ⟡ bit                      β”‚ 176600β‚ˆ     β”‚
β”‚ 1 1 0 0  β”‚ BANC       β”‚ K ⟡ (bit AND K)              β”‚ 177000β‚ˆ     β”‚
β”‚ 1 1 0 1  β”‚ BAND       β”‚ K ⟡ (bit AND K)              β”‚ 177200β‚ˆ     β”‚
β”‚ 1 1 1 0  β”‚ BORC       β”‚ K ⟡ (bit OR K)               β”‚ 177400β‚ˆ     β”‚
β”‚ 1 1 1 1  β”‚ BORA       β”‚ K ⟡ (bit OR K)               β”‚ 177600β‚ˆ     β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Sub-instructions: Only the BSET and BSKP instructions have the following qualifying sub-instructions: ZRO ONE BCM BAC

bn (bits 3-6): The address of the bit to be manipulated is given by these four bits. Remember that each bit is given its OCTAL address.

dr (bits 0-2): The following registers allow bit operations and are specified as follows:

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ register β”‚ mnemonic β”‚ code   β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ STS      β”‚ †        β”‚ 0β‚ˆ     β”‚
β”‚ D        β”‚ DD       β”‚ 1β‚ˆ     β”‚
β”‚ P        β”‚ DP       β”‚ 2β‚ˆ     β”‚
β”‚ B        β”‚ DB       β”‚ 3β‚ˆ     β”‚
β”‚ L        β”‚ DL       β”‚ 4β‚ˆ     β”‚
β”‚ A        β”‚ DA       β”‚ 5β‚ˆ     β”‚
β”‚ T        β”‚ DT       β”‚ 6β‚ˆ     β”‚
β”‚ X        β”‚ DX       β”‚ 7β‚ˆ     β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”˜

† For STS no mnemonic is required as it is implied by the following table of compound mnemonics:

STS register: There are only eight bits which can be operated on in the STS register. They have special mnemonics and unique octal code values which combine the bn and dr fields.

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ compound       β”‚ STS bit  β”‚ description                 β”‚ octal code  β”‚
β”‚ mnemonic       β”‚          β”‚                             β”‚             β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ SSPTM          β”‚ 0        β”‚ page table flag             β”‚ 00β‚ˆ         β”‚
β”‚ SSTG           β”‚ 1        β”‚ floating point rounding flagβ”‚ 10β‚ˆ         β”‚
β”‚ SSK            β”‚ 2        β”‚ 1 bit accumulator (K)       β”‚ 20β‚ˆ         β”‚
β”‚ SSZ            β”‚ 3        β”‚ error flag (Z)              β”‚ 30β‚ˆ         β”‚
β”‚ SSQ            β”‚ 4        β”‚ dynamic overflow flag (Q)   β”‚ 40β‚ˆ         β”‚
β”‚ SSO            β”‚ 5        β”‚ static overflow flag (O)    β”‚ 50β‚ˆ         β”‚
β”‚ SSC            β”‚ 6        β”‚ carry flag (C)              β”‚ 60β‚ˆ         β”‚
β”‚ SSM            β”‚ 7        β”‚ multi-shift link flag (M)   β”‚ 70β‚ˆ         β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Bit instructions_with_destination

Instruction Description
BORC Logical OR with bit complement

Byte Instructions

Instruction Description
BFILL Byte fill.
LBYT Load byte from memory to A register
MOVB Move byte.
MOVBF Move bytes forward.
SBYT Store byte from A register to memory

Description

These instructions address single bytes within the memory map.

A special addressing mode is used for these instructions, utilizing the T and X registers. The contents of T point to the beginning of a character string, and the contents of X point to a specific byte within that string.


Control Instructions

Instruction Description
CHREENTPAGES Change page tables.
CLEPT Clear page tables.
CLEPU Clear page tables and collect PGU information.
CLNREENT Clear non reentrant pages.
CLPT Clear segment from the page tables.
CNREK Clear non reentrant pages (SINTRAN K only).
ENPT Enter segment in page tables.
INSPL Insert page in page list. (See Appendix B for a software description.)
LACB Load the A register from the core map-table bank (CMBNK).
LASB Load the A register with the contents of the segment-table bank (STBNK).
LBIT Load single bit accumulator (K) with logical memory bit.
LBITP Load single bit accumulator (K) with physical memory bit.
LBYTP Load the A register with a byte from physical memory.
LXCB Load the X register from the core table bank (CMBNK).
LXSB Load the X register from the segment table bank (STBNK).
RDUSP Read a physical memory word without using cache.
REMPL Remove page from page list.
REPT Enter reentrant segment in page tables. (See Appendix B for a software description.)
RGLOB Examine global pointers.
SACB Store the A register in the core map table bank (CMBNK).
SASB Store the A register contents in the segment table bank (STBNK).
SBIT Store the single bit accumulator (K) in a logical memory bit.
SBITP Store the single bit accumulator (K) in a physical memory bit.
SBYTP Store a byte in physical memory.
SETPT Set page tables.
SZCB Store zero in the core map-table bank (CMBNK).
SZSB Store zero in the segment-table bank (STBNK).
TSETP Test and set physical memory word.
WGLOB Initialize global pointers.

Description

SINTRAN III Control Instructions

These instructions are PRIVILEGED and only available to:

These instructions monitor the contents of physical memory


Decimal Instructions

Instruction Description
ADDD Add two decimal operands.
COMD Compare two decimal operands.
PACK Convert to BCD.
SHDE Decimal shift.
SUBD Subtract two decimal operands.
UPACK Convert to ASCII.

Description

These instructions use decimal operands residing in main memory only.

Instruction structure:

D1 (word address)
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚15           ...            0  β”‚
β”‚ word address                  β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

D2 (operand features)
β”Œβ”€β”€β”€β”€β”¬β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚15  β”‚14  β”‚13-11  β”‚10     β”‚  9  -    5   β”‚  4  -    0   β”‚
β”œβ”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚lr  β”‚ β€’  β”‚ASCII  β”‚r      β”‚decimal point | field length β”‚    
β””β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Descriptors (D1 and D2):

Decimal operands:

Decimal overflow:

BCD- Binary Coded Decimal

Decimal digits are represented in binary-coded decimal (BCD), sometimes known as packed decimal.

Four bits are used to represent a decimal digit:

Table 3. BCD notation

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ binary notation       β”‚ decimal equivalent    β”‚
β”‚ msb         lsb       β”‚                       β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ 0  0  0  0            β”‚ 1                     β”‚
β”‚ 0  0  0  1            β”‚ 2                     β”‚
β”‚ 0  0  1  0            β”‚ 3                     β”‚
β”‚ 0  0  1  1            β”‚ 4                     β”‚
β”‚ 0  1  0  0            β”‚ 5                     β”‚
β”‚ 0  1  0  1            β”‚ 6                     β”‚
β”‚ 0  1  1  0            β”‚ 7                     β”‚
β”‚ 0  1  1  1            β”‚ 8                     β”‚
β”‚ 1  0  0  0            β”‚ 9                     β”‚
β”‚ 1  0  0  1            β”‚ 10                    β”‚
β”‚ 1  0  1  0            β”‚ +                     β”‚
β”‚ 1  0  1  1            β”‚ -                     β”‚
β”‚ 1  1  0  0            β”‚ + †                   β”‚
β”‚ 1  1  0  1            β”‚ - †                   β”‚
β”‚ 1  1  1  0            β”‚ +                     β”‚
β”‚ 1  1  1  1            β”‚ (+)                   β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

(+) represents unsigned, it is treated as a plus.

† The ND-110 instruction set uses only the codes 1100 for plus and 1101 for minus.

The maximum length of an operand is 31 decimal digits plus a sign nibble (4 bits), this occupies eight consecutive memory locations (eight 16-bit words).

ASCII coded decimal

ASCII-coded decimal notation uses eight bits to represent a decimal digit.

The format of an ASCII code decimal is:

β”Œβ”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”
β”‚ zone  β”‚ digit β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”˜

Figure 5. ASCII byte structure

Table 4. ASCII notation

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ ASCII Code                    β”‚ Decimal Equivalent    β”‚
β”‚ msb                lsb       β”‚                       β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ 0 0 1 1 0 0 0 0              β”‚ 0                     β”‚
β”‚ 0 0 1 1 0 0 0 1              β”‚ 1                     β”‚
β”‚ 0 0 1 1 0 0 1 0              β”‚ 2                     β”‚
β”‚ 0 0 1 1 0 0 1 1              β”‚ 3                     β”‚
β”‚ 0 0 1 1 0 1 0 0              β”‚ 4                     β”‚
β”‚ 0 0 1 1 0 1 0 1              β”‚ 5                     β”‚
β”‚ 0 0 1 1 0 1 1 0              β”‚ 6                     β”‚
β”‚ 0 0 1 1 0 1 1 1              β”‚ 7                     β”‚
β”‚ 0 0 1 1 1 0 0 0              β”‚ 8                     β”‚
β”‚ 0 0 1 1 1 0 0 1              β”‚ 9                     β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Bit 7 (msb) is the parity bit and is always zero in ASCII code.

Sign representation:

The ASCII notation for sign is as follows:

+   00101011   53β‚ˆ
-   00101101   55β‚ˆ

There are four ways of representing the sign in a decimal operand:

Table 5. ASCII embedded notation

ASCII value

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ decimal       β”‚ Positive sign    β”‚ negative sign     β”‚    
β”‚ operand       β”‚ octal |  binary  |  octal |  binary  β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ 0             β”‚ 173   β”‚ 01111011 β”‚  175   β”‚ 01111001 β”‚
β”‚ 1             β”‚ 101   β”‚ 01000001 β”‚  112   β”‚ 01001010 β”‚
β”‚ 2             β”‚ 102   β”‚ 01000010 β”‚  113   β”‚ 01001011 β”‚
β”‚ 3             β”‚ 103   β”‚ 01000011 β”‚  114   β”‚ 01001100 β”‚
β”‚ 4             β”‚ 104   β”‚ 01000100 β”‚  115   β”‚ 01001101 β”‚
β”‚ 5             β”‚ 105   β”‚ 01000101 β”‚  116   β”‚ 01001110 β”‚
β”‚ 6             β”‚ 106   β”‚ 01000110 β”‚  117   β”‚ 01001111 β”‚
β”‚ 7             β”‚ 107   β”‚ 01000111 β”‚  120   β”‚ 01010000 β”‚
β”‚ 8             β”‚ 110   β”‚ 01001000 β”‚  121   β”‚ 01010001 β”‚
β”‚ 9             β”‚ 111   β”‚ 01001001 β”‚  122   β”‚ 01010010 β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Execute

Instruction Description
EXR Execute instruction found in specified register

Floating Conversion (Standard Format)

Instruction Description
DNZ Denormalise
NLZ Normalize

Input and Output

Instruction Description
IOT NORD-1 INSTRUCTION (DO NOT USE)
IOX Exchange information between I/O system and A register.
IOXT Exchange information between I/O system and A register.

Inter-level Instructions

Instruction Description
IRR Inter Register Read
IRW Inter Register Write

Interrupt Control Instructions

Instruction Description
IDENT Transfer IDENT code of interrupting device with highest priority on the specified level to A register.
IOF Interrupt System OFF
ION Interrupt System ON
OPCOM Operator Communication
POF Memory management OFF
WAIT When interrupt system off: halts the program and enters the operator’s communication.

INTERRUPT CONTROL INSTRUCTIONS

These instructions are PRIVILEGED and only available to:

These instructions control the CPU interrupt system.


General Description

The ND-110 has a priority interrupt system with 16 program levels.

Each program level has its own set of working registers (A, B, D, L, P, STS, T, X).

The program levels have increasing priority, that is, program level 15 has the highest priority and program level 0 the lowest.

The 16 levels are subdivided as follows:

level used for controlled by
15 very fast user interrupts program/ext. device
14 internal hardware status interrupts program/ext. device
13-10 vectored interrupts* program/ext. device
9-0 system and user programs program

*2048 possible sources


Program level selection and control

Program level selection and control is via two 16-bit registers:

PID is affected by program and external interrupts; PIE is controlled by program only. They can only be changed or monitored by the privileged instructions: TRA, TRR, MST, and MCL (see pages 118-120).

Note: When the power is turned on, the power-up sequence resets PIE and PID so that program level 0 is selected.


Interrupt programming is via three registers:


Memory Examine and Test Instructions

Instruction Description
RDUS Read a word without using cache
TSET Test and set

Memory Management Instructions

Instruction Description
PIOF Memory management and interrupt system OFF
PION Memory management and interrupt system ON
PON Memory management ON
REX Reset extended address mode
SEX Set extended address mode

Description

These instructions are PRIVILEGED and only available to:

These instructions control the CPU memory management system.

Memory Transfer - Double word instructions

Instruction Description
LDD Load double word
STD Store double word

Memory Transfer - Load Instruction

Instruction Description
LDA Load A register
LDT Load T register
LDX Load X register

Memory Transfer - Store Instruction

Instruction Description
MIN Memory increment and skip next instruction if zero (EA): = (EA) + 1
STA Store A register to memory location
STT Store T register to memory location
STX Store X register to memory location
STZ Store zero to memory location

Memory Transfer Instructions

Instruction Description
LDATX Load A register
LDBTX Load B register
LDDTX Load double word
LDXTX Load X register
STATX Store A register
STDTX Store double word
STZTX Store zero

SINTRAN III Memory Transfer Instructions

These instructions are PRIVILEGED and only available to:

These instructions read/write from/to physical memory locations independent of whether paging is on or off. If the address is within the page-table range then the page tables are affected.


Instruction format

<physical instruction mnemonic> <displacement>

Instruction structure

 | 15                      6 | 5          3 | 2-0 |
 |---------------------------|--------------|-----|
 | physical memory operation | displacement |type |
instruction mnemonic octal code
LDATX 1433Ξ”0
LDXTX 1433Ξ”1
LDDTX 1433Ξ”2
LDBTX 1433Ξ”3
STATX 1433Ξ”4
STZTX 1433Ξ”5
STDTX 1433Ξ”6

† If you use programs written for ND-100 computers with the microprogram version numbers 015xx A-J (48 bit) or 026xx A-F (32 bit), LDBTX would have been followed by a word containing 177777β‚ˆ.

This is not necessary for later ND-100 versions nor the ND-110. Running these earlier programs may change the status of the K bit in the ND-110 and later ND-100s.


Monitor Calls

Instruction Description
MON The MON instruction is used in special different contexts when running under an operating system.

Physical Memory Control Instructions

Instruction Description
DEPO Deposit
EXAM Examine

Description

These instructions are PRIVILEGED and only available to:

These instructions monitor physical memory location contents.

privileged

Instruction Description
LWCS Writable Control Store Instruction

Register Block Instructions

Instruction Description
LRB Load register block
SRB Store register block

Register Operations

Instruction Description
COPY Copy source to destination
EXIT Return from subroutine
MIX3 Multiply index by 3.
RADD Add source to destination (dr): = (dr) + (sr)
RAND Logical AND to destination
RCLR Register clear
RDCR Register decrement
RDIV Divide double accumulator with source; quotient in A, remainder in D
REXO Logical exclusive OR
RINC Register increment
RMPY Multiply source with destination; result in double accumulator
RORA OR register
RSUB Register subtract
SWAP Register swap

Description

These instructions specify operations between source (sr) and destination (dr) registers.


Register Transfer

Instruction Description
MCL Masked clear
MST Masked set
TRA Transfer to A register
TRR Transfer A to internal register

Sequencing Instructions

Instruction Description
JAF Condtion: Jump if (A) != 0 (jump if A filled)
JAN Condtion: Jump if (A) < 0 (jump if A is negative)
JAP Condtion: Jump if (A) > 0 (jump if A positive)
JAZ Condtion: Jump if (A) == 0 (jump if A is zero)
JMP Jump - Unconditional jump to specified address
JNC Increment X and jump if X is negative
JPC Increment X and jump if X is positive
JPL Jump if Plus - Jump to specified address if the result of the last operation was positive (sign bit is 0)
JXN Condtion: Jump if (X) < 0 (jump if X negative)
JXZ Condtion: Jump if (X) == 0 (jump if X is zero)

Description

FOR ALL JUMP ON CONDITION TRUE INSTRUCTIONS:

range: -128 to +127 locations General description: (P) <- (EA) If condition true, jump to the address of the program counter plus the value of disp. If condition false, continue program execution at (P) + 1. -------------------------------------------------------------------------------- ### Shift Instructions | Instruction | Description | |:------------|:------------| | [`SAD`](#sad) | Shift A and D registers connected | | [`SHA`](#sha) | Shift A register | | [`SHD`](#shd) | Shift D register | | [`SHT`](#sht) | Shift T register | -------------------------------------------------------------------------------- ### Skip Instruction | Instruction | Description | |:------------|:------------| | [`SKP`](#skp) | The next instruction is skipped if a specified condition is true. | -------------------------------------------------------------------------------- ### Stack Operations | Instruction | Description | |:------------|:------------| | [`ELEAV`](#eleav) | Error leave stack. | | [`ENTR`](#entr) | Enter stack. | | [`INIT`](#init) | Initialize stack. | | [`LEAVE`](#leave) | Leave stack. | #### Description These instructions handle stack operations improving the execution time of high-level language-based programs. The **B** register will always point to a "stack-frame" containing: | Stack frame content mnemonic | Pointed to by B= (octal) | Description | |-----------------------------|---------------------------|----------------------------------------| | LINK | -200β‚ˆ | next instruction address † | | PREVB | -177β‚ˆ | previous stack frame address | | STP | -176β‚ˆ | next stack frame address | | SMAX | -175β‚ˆ | top of stack address | | β€” | -174β‚ˆ | reserved for system use | | ERRCODE | -173β‚ˆ | (A) after an ELEAV instruction | † In the case of a `LEAVE` instruction. The stack-handling instructions are page-fault tolerant in the ND-110. -------------------------------------------------------------------------------- ### Standard Floating Instructions | Instruction | Description | |:------------|:------------| | [`FAD`](#fad) | Add to floating point accumulator | | [`FDV`](#fdv) | Divide floating point accumulator | | [`FMU`](#fmu) | Multiply floating point accumulator. | | [`FSB`](#fsb) | Subtract from floating point accumulator. | | [`LDF`](#ldf) | Load floating accumulator (TAD) from memory (FW) | | [`STF`](#stf) | Store floating accumulator (TAD) to memory (ea) | -------------------------------------------------------------------------------- ### System/CPU Information | Instruction | Description | |:------------|:------------| | [`VERSN`](#versn) | ** ND-110/ND-120 ONLY** | -------------------------------------------------------------------------------- ### Undocumented Instructions | Instruction | Description | |:------------|:------------| | [`GECO`](#geco) | GECO is a customer-specifed instruction which appears to be included as part of the standard instruction set from ND-100/CE and later. | -------------------------------------------------------------------------------- ### Word Block Instructions | Instruction | Description | |:------------|:------------| | [`MOVEW`](#movew) | Word block move. | -------------------------------------------------------------------------------- ================================================================================ ## πŸ“– Instruction Reference ================================================================================ ### AAA #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | `AAA ` | | Category | Argument Instruction | | Privilege | User | | Mask | `1111_1111_0000_0000` | #### πŸ“ Description Add argument to A #### πŸ“‹ Format ``` AAA ``` #### Bit Layout ``` β”‚ 15 14 13 12 11 10 9 8 β”‚ 7 6 5 4 3 2 1 0 β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ number β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` #### πŸ”§ Operands | Name | Type | Bits | Description | |:-----|:-----|:-----|:------------| | `opcode` | opcode | 15-8 | The opcode determines what type of operation occurs | | `number` | numeric | 7-0 | 8-bit argument extended to 16 bits using sign extension | #### 🚩 Flags Affected | Flag | Description | |:-----|:------------| | `C` | Carry flag | | `O` | Static overflow flag | #### πŸ“š Examples ##### Add 3 to the contents of the A register. ``` AAA 3 ``` -------------------------------------------------------------------------------- ### AAB #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | `AAB ` | | Category | Argument Instruction | | Privilege | User | | Mask | `1111_1111_0000_0000` | #### πŸ“ Description Add argument to B #### πŸ“‹ Format ``` AAB ``` #### Bit Layout ``` β”‚ 15 14 13 12 11 10 9 8 β”‚ 7 6 5 4 3 2 1 0 β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ number β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` #### πŸ”§ Operands | Name | Type | Bits | Description | |:-----|:-----|:-----|:------------| | `opcode` | opcode | 15-8 | The opcode determines what type of operation occurs | | `number` | numeric | 7-0 | 8-bit argument extended to 16 bits using sign extension | #### 🚩 Flags Affected | Flag | Description | |:-----|:------------| | `C` | Carry flag | | `O` | Static overflow flag | #### πŸ“š Examples ##### Add -26 to the contents of the B register. ``` AAB -26 ``` -------------------------------------------------------------------------------- ### AAT #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | `AAT ` | | Category | Argument Instruction | | Privilege | User | | Mask | `1111_1111_0000_0000` | #### πŸ“ Description Add argument to T #### πŸ“‹ Format ``` AAT ``` #### Bit Layout ``` β”‚ 15 14 13 12 11 10 9 8 β”‚ 7 6 5 4 3 2 1 0 β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ number β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` #### πŸ”§ Operands | Name | Type | Bits | Description | |:-----|:-----|:-----|:------------| | `opcode` | opcode | 15-8 | The opcode determines what type of operation occurs | | `number` | numeric | 7-0 | 8-bit argument extended to 16 bits using sign extension | #### 🚩 Flags Affected | Flag | Description | |:-----|:------------| | `C` | Carry flag | | `O` | Static overflow flag | #### πŸ“š Examples ##### Add 13 to the contents of the T register. ``` AAT 13 ``` -------------------------------------------------------------------------------- ### AAX #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | `AAX ` | | Category | Argument Instruction | | Privilege | User | | Mask | `1111_1111_0000_0000` | #### πŸ“ Description Add argument to X #### πŸ“‹ Format ``` AAX ``` #### Bit Layout ``` β”‚ 15 14 13 12 11 10 9 8 β”‚ 7 6 5 4 3 2 1 0 β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ number β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` #### πŸ”§ Operands | Name | Type | Bits | Description | |:-----|:-----|:-----|:------------| | `opcode` | opcode | 15-8 | The opcode determines what type of operation occurs | | `number` | numeric | 7-0 | 8-bit argument extended to 16 bits using sign extension | #### 🚩 Flags Affected | Flag | Description | |:-----|:------------| | `C` | Carry flag | | `O` | Static overflow flag | #### πŸ“š Examples ##### Add 5 to the contents of the X register. ``` AAX 5 ``` -------------------------------------------------------------------------------- ### ADD #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | `ADD ` | | Category | Arithmetic and Logical | | Privilege | User | | Mask | `1111_1000_0000_0000` | #### πŸ“ Description Add to A register A ⟡ A + (EL) Add the contents of the memory location pointed to by the effective address to the A register, leaving the result in A. #### πŸ“‹ Format ``` ADD ``` #### Bit Layout ``` β”‚ 15 14 13 12 11β”‚ 10 9 8 β”‚ 7 6 5 4 3 2 1 0 β”‚ β”‚ β”‚ X I B β”‚ β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ addressing_mode β”‚ displacement β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` > **Note:** This instruction uses addressing modes. See [Addressing Modes](#addressing-modes) for details. #### πŸ”§ Operands | Name | Type | Bits | Description | |:-----|:-----|:-----|:------------| | `opcode` | opcode | 15-11 | The opcode determines what type of operation occurs | | `addressing_mode` | addressing_modes | 10-8 | These three bits give the addressing mode for the instruction | | `displacement` | displacement | 7-0 | 8-bit signed field gives the memory address displacement (2's complement notation giving a displacement range of -128 to 127 memory locations) | #### 🚩 Flags Affected | Flag | Description | |:-----|:------------| | `C` | Carry flag | | `O` | Static overflow flag | | `Q` | Dynamic overflow flag | -------------------------------------------------------------------------------- ### ADDD #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | `ADDD` | | Category | Decimal Instructions | | Privilege | User | | Mask | `1111_1111_1111_1111` | #### πŸ“ Description Add two decimal operands. (op1) ⟡ (op1) + (op2) Add the second operand to the first operand, leaving the result in the first operand's location. If the first operand field is too short to contain all the significant digits of the result, then decimal overflow occurs. If bit 13 of D2 in the first operand is set, the sign of the result will be 17β‚ˆ (BCD unsigned). Any empty operand, that is with a field length of zero, is treated as a positive zero. **Instruction sequence:** ADDD error handling instruction next instruction after ADDD or after error handling routine Note: Operands should be normalized before this instruction is executed using the SHDE instruction. **Example:** ADDD JMP *12β‚ˆ STX 20β‚ˆ The ADDD instruction causes the program counter to skip the next instruction UNLESS an error has been generated. In this case, the instruction immediately after ADDD will handle the error in some way (in this example a jump is executed on error to ((P) + 12β‚ˆ)). (* is the assembler mnemonic for the P register) #### πŸ“‹ Format ``` ADDD ``` #### Bit Layout ``` β”‚ 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` #### πŸ”§ Operands | Name | Type | Bits | Description | |:-----|:-----|:-----|:------------| | `opcode` | opcode | 15-0 | The opcode determines what type of operation occurs | -------------------------------------------------------------------------------- ### AND #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | `AND ` | | Category | Arithmetic and Logical | | Privilege | User | | Mask | `1111_1000_0000_0000` | #### πŸ“ Description Logical AND to A register A ⟡ A & (EA) Perform a bitwise AND operation between the contents of the A register and the contents of the memory location pointed to by the effective address, leaving the result in A. #### πŸ“‹ Format ``` AND ``` #### Bit Layout ``` β”‚ 15 14 13 12 11β”‚ 10 9 8 β”‚ 7 6 5 4 3 2 1 0 β”‚ β”‚ β”‚ X I B β”‚ β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ addressing_mode β”‚ displacement β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` > **Note:** This instruction uses addressing modes. See [Addressing Modes](#addressing-modes) for details. #### πŸ”§ Operands | Name | Type | Bits | Description | |:-----|:-----|:-----|:------------| | `opcode` | opcode | 15-11 | The opcode determines what type of operation occurs | | `addressing_mode` | addressing_modes | 10-8 | These three bits give the addressing mode for the instruction | | `displacement` | displacement | 7-0 | 8-bit signed field gives the memory address displacement (2's complement notation giving a displacement range of -128 to 127 memory locations) | -------------------------------------------------------------------------------- ### BANC #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | `BANC` | | Category | Bit instructions | | Privilege | User | | Mask | `1111_1111_1000_0000` | #### πŸ“ Description ogical AND with bit compl K ⟡ K & (B)0 Perform a bitwise AND with the contents of the B register and the contents of the K register, leaving the result in K. #### πŸ“‹ Format ``` BANC ``` #### Bit Layout ``` β”‚ 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` #### 🚩 Flags Affected | Flag | Description | |:-----|:------------| | `K` | Accumulator | -------------------------------------------------------------------------------- ### BAND #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | `BAND` | | Category | Bit instructions | | Privilege | User | | Mask | `1111_1111_1000_0000` | #### πŸ“ Description Logical AND to K K ⟡ K & (B) #### πŸ“‹ Format ``` BAND ``` #### Bit Layout ``` β”‚ 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` #### 🚩 Flags Affected | Flag | Description | |:-----|:------------| | `K` | Accumulator | -------------------------------------------------------------------------------- ### BFILL #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | `BFILL` | | Category | Byte Instructions | | Privilege | User | | Mask | `1111_1111_1111_1111` | #### πŸ“ Description Byte fill. Only the destination is used as an operand in this instruction (it is placed in the X and T registers). The lower byte of the A register is then filled with the destination field. After execution, bit 15 of the T register points to the end of the field (after the last byte position) and the field length equals zero. #### πŸ“‹ Format ``` BFILL ``` #### Bit Layout ``` β”‚ 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` #### πŸ”§ Operands | Name | Type | Bits | Description | |:-----|:-----|:-----|:------------| | `opcode` | opcode | 15-0 | The opcode determines what type of operation occurs | -------------------------------------------------------------------------------- ### BLDA #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | `BLDA` | | Category | Bit instructions | | Privilege | User | | Mask | `1111_1111_1000_0000` | #### πŸ“ Description Load K K ⟡ bit #### πŸ“‹ Format ``` BLDA ``` #### Bit Layout ``` β”‚ 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` #### 🚩 Flags Affected | Flag | Description | |:-----|:------------| | `K` | Accumulator | -------------------------------------------------------------------------------- ### BLDC #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | `BLDC` | | Category | Bit instructions | | Privilege | User | | Mask | `1111_1111_1000_0000` | #### πŸ“ Description Load K and complement K ⟡ (B) (complemented) #### πŸ“‹ Format ``` BLDC ``` #### Bit Layout ``` β”‚ 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` #### 🚩 Flags Affected | Flag | Description | |:-----|:------------| | `K` | Accumulator | -------------------------------------------------------------------------------- ### BORA #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | `BORA` | | Category | Bit instructions | | Privilege | User | | Mask | `1111_1111_1000_0000` | #### πŸ“ Description Logical OR to K K ⟡ K | (B) #### πŸ“‹ Format ``` BORA ``` #### Bit Layout ``` β”‚ 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` #### 🚩 Flags Affected | Flag | Description | |:-----|:------------| | `K` | Accumulator | -------------------------------------------------------------------------------- ### BORC #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | `BORC` | | Category | Bit instructions_with_destination | | Privilege | User | | Mask | `1111_1111_1000_0000` | #### πŸ“ Description Logical OR with bit complement K ⟡ K | (B)0 #### πŸ“‹ Format ``` BORC ``` #### Bit Layout ``` β”‚ 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` #### 🚩 Flags Affected | Flag | Description | |:-----|:------------| | `K` | Accumulator | #### πŸ“š Examples ##### Complement bit 6 in the X register, then OR the bit with K, leaving the result in K ``` BORC 60 DX ``` -------------------------------------------------------------------------------- ### BSET #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | `BSET ` | | Category | Bit instructions | | Privilege | User | | Mask | `1111_1111_1000_0000` | #### πŸ“ Description Set specified bit in equal to specified condition #### πŸ“‹ Format ``` BSET ``` #### Bit Layout ``` β”‚ 15 14 13 12 11β”‚ 10 9 8 7 β”‚ 7 6 5 4 3 β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ condition β”‚ bit_no β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` #### πŸ”§ Operands | Name | Type | Bits | Description | |:-----|:-----|:-----|:------------| | `opcode` | opcode | 15-11 | The opcode determines what type of operation occurs | | `condition` | enum | 10-7 | Specify condition for BSKP and BSET

**Values:**
- `ZRO` (`0000`): Specificed bit equals zero
- `ONE` (`0001`): Specified bit equals one
- `BAC` (`0002`): Specified bit equals K
- `BCM` (`0003`): Complement specified bit
| | `bit_no` | numeric | 7-3 | Specify bit number

**Values:**
- `SSTG` (`000010`): Floating rounding flag
- `SSK` (`000020`): 1-bit accumulator (K)
- `SSZ` (`000030`): Error flag (Z)
- `SSQ` (`000040`): Dynamic overflow flag (Q)
- `SSO` (`000050`): Static overflow flag (O)
- `SSC` (`000060`): Page table flag
- `SSM` (`000070`): Page table flag
| #### πŸ“š Examples ##### Reset the static overflow flag ``` BSET ZRO SSO ``` -------------------------------------------------------------------------------- ### BSKP #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | `BSKP ` | | Category | Bit instructions | | Privilege | User | | Mask | `1111_1111_1000_0000` | #### πŸ“ Description Skip next location if specified condition is true P ⟡ P+1 #### πŸ“‹ Format ``` BSKP ``` #### Bit Layout ``` β”‚ 15 14 13 12 11β”‚ 10 9 8 7 β”‚ 7 6 5 4 3 β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ condition β”‚ bit_no β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` #### πŸ”§ Operands | Name | Type | Bits | Description | |:-----|:-----|:-----|:------------| | `opcode` | opcode | 15-11 | The opcode determines what type of operation occurs | | `condition` | enum | 10-7 | Specify condition for BSKP and BSET

**Values:**
- `ZRO` (`0000`): Specificed bit equals zero
- `ONE` (`0001`): Specified bit equals one
- `BAC` (`0002`): Specified bit equals K
- `BCM` (`0003`): Complement specified bit
| | `bit_no` | numeric | 7-3 | Specify bit number

**Values:**
- `SSTG` (`000010`): Floating rounding flag
- `SSK` (`000020`): 1-bit accumulator (K)
- `SSZ` (`000030`): Error flag (Z)
- `SSQ` (`000040`): Dynamic overflow flag (Q)
- `SSO` (`000050`): Static overflow flag (O)
- `SSC` (`000060`): Page table flag
- `SSM` (`000070`): Page table flag
| #### πŸ“š Examples ##### Skip the next location if the cary flag is set ``` BSKP ONE SSC ``` -------------------------------------------------------------------------------- ### BSTA #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | `BSTA` | | Category | Bit instructions | | Privilege | User | | Mask | `1111_1111_1000_0000` | #### πŸ“ Description Store and clear K (B) ⟡ K; K ⟡ 0 #### πŸ“‹ Format ``` BSTA ``` #### Bit Layout ``` β”‚ 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` #### 🚩 Flags Affected | Flag | Description | |:-----|:------------| | `K` | Accumulator | -------------------------------------------------------------------------------- ### BSTC #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | `BSTC` | | Category | Bit instructions | | Privilege | User | | Mask | `1111_1111_1000_0000` | #### πŸ“ Description Store complement and set K to 1 (B) ⟡ K (complemented); K ⟡ 1 #### πŸ“‹ Format ``` BSTC ``` #### Bit Layout ``` β”‚ 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` #### 🚩 Flags Affected | Flag | Description | |:-----|:------------| | `K` | Accumulator | -------------------------------------------------------------------------------- ### CHREENTPAGES #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | `CHREENTPAGES` | | Category | Control Instructions | | Privilege | Privileged | | Mask | `1111_1111_1111_1111` | #### πŸ“ Description Change page tables. The X register is used to address the current (R1) and previous (Rp) scratch registers. If the R1 is zero, the reentrant page has nothing to change so the loop is left, otherwise the contents of the memory location pointed to by the R1 + 2 are loaded into T. T then contains the protect table entry, if the page has not been written to (WIP bit 12 is zero) T and R1 are loaded with Rp. R1 (now containing Rp) is tested again for zero. If the page has been written to, the T register is loaded with the contents of the second scratch register (R2), pointed to by R1, and R2 becomes the address of Rp. X is loaded with R1 as the new pointer to the reentrant pages and Rp is loaded into the D register pointed to by A. #### πŸ“‹ Format ``` CHREENTPAGES ``` #### Bit Layout ``` β”‚ 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` #### πŸ”§ Operands | Name | Type | Bits | Description | |:-----|:-----|:-----|:------------| | `opcode` | opcode | 15-0 | The opcode determines what type of operation occurs | -------------------------------------------------------------------------------- ### CLEPT #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | `CLEPT` | | Category | Control Instructions | | Privilege | Privileged | | Mask | `1111_1111_1111_1111` | #### πŸ“ Description Clear page tables. #### πŸ“š Detailed Information This instruction can replace the following instructions: CLEPT: JXZ * 10β‚ˆ LDBTX 10β‚ˆ LDA ,B JAZ *3β‚ˆ STATX 20β‚ˆ STZ ,B LDXTX 00 JMP *-7β‚ˆ Each time the loop is executed (until X becomes zero) the physical memory location addressed by X is loaded into the B register. The B register contents provide the address of a page table entry, which is loaded into the A register. If the page table entry is zero (unused) the loop is restarted. If the page table entry is not zero (used) it is stored in a physical location addressed by X (8 locations away from its original entry) and the original page table entry cleared by placing zero in the location addressed by the B register. The physical location addressed by X is then loaded into the X register itself and the loop restarted. * is the mnemonic for P relative addressing. #### πŸ“‹ Format ``` CLEPT ``` #### Bit Layout ``` β”‚ 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` #### πŸ”§ Operands | Name | Type | Bits | Description | |:-----|:-----|:-----|:------------| | `opcode` | opcode | 15-0 | The opcode determines what type of operation occurs | -------------------------------------------------------------------------------- ### CLEPU #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | `CLEPU` | | Category | Control Instructions | | Privilege | Privileged | | Mask | `1111_1111_1111_1111` | #### πŸ“ Description Clear page tables and collect PGU information. #### πŸ“š Detailed Information This instruction collects information on the PGU (page used) bit of a page table entry whilst executing CLEPT. The instruction places PGU information in an eight word table called the page map bank. Each bit in the bank represents the status of a page's PGU bit as follows: 15 0 +-------------------------------------------------+ | | | | | | | | Ξ² | <- word 0 +-------------------------------------------------+ | | Ξ΅ | | | | | | | <- word 1 +-------------------------------------------------+ . . . . +-------------------------------------------------+ | Ξ” | | | | | | | | <- word 7 +-------------------------------------------------+ Ξ” denotes page 177β‚ˆ PGU bit Ξ΅ denotes page 32β‚ˆ PGU bit Ξ² denotes page 0β‚ˆ PGU bit The L register contains the address of the map entry. #### πŸ“‹ Format ``` CLEPU ``` #### Bit Layout ``` β”‚ 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` #### πŸ”§ Operands | Name | Type | Bits | Description | |:-----|:-----|:-----|:------------| | `opcode` | opcode | 15-0 | The opcode determines what type of operation occurs | -------------------------------------------------------------------------------- ### CLNREENT #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | `CLNREENT` | | Category | Control Instructions | | Privilege | Privileged | | Mask | `1111_1111_1111_1111` | #### πŸ“ Description Clear non reentrant pages. The contents of the memory address at A + 2 are read to find the page table to be cleared along with the SINTRAN RT bitmap (addressed by the X and T registers). The page table entries corresponding to those bits set in the RT bitmap are then cleared. #### πŸ“‹ Format ``` CLNREENT ``` #### Bit Layout ``` β”‚ 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` #### πŸ”§ Operands | Name | Type | Bits | Description | |:-----|:-----|:-----|:------------| | `opcode` | opcode | 15-0 | The opcode determines what type of operation occurs | -------------------------------------------------------------------------------- ### CLPT #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | `CLPT` | | Category | Control Instructions | | Privilege | Privileged | | Mask | `1111_1111_1111_1111` | #### πŸ“ Description Clear segment from the page tables. #### πŸ“‹ Format ``` CLPT ``` #### Bit Layout ``` β”‚ 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` #### πŸ”§ Operands | Name | Type | Bits | Description | |:-----|:-----|:-----|:------------| | `opcode` | opcode | 15-0 | The opcode determines what type of operation occurs | -------------------------------------------------------------------------------- ### CNREK #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | `CNREK` | | Category | Control Instructions | | Privilege | Privileged | | Mask | `1111_1111_1111_1111` | #### πŸ“ Description Clear non reentrant pages (SINTRAN K only). #### πŸ“‹ Format ``` CNREK ``` #### Bit Layout ``` β”‚ 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` #### πŸ”§ Operands | Name | Type | Bits | Description | |:-----|:-----|:-----|:------------| | `opcode` | opcode | 15-0 | The opcode determines what type of operation occurs | -------------------------------------------------------------------------------- ### COMD #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | `COMD` | | Category | Decimal Instructions | | Privilege | User | | Mask | `1111_1111_1111_1111` | #### πŸ“ Description Compare two decimal operands. (A) ⟡ (op1) compared to (op2) (A) = 0 if (op1) = (op2) (A) = 1 if (op1) > (op2) (A) = -1 if (op1) < (op2) Compare the first operand with the second operand, leaving the result in the A register. If the two operands are unequal in field length, the shorter operand is extended with zeros to allow comparison. The operands are unaffected by the instruction. The positions of the decimal points are not taken into account when the two operands are compared, so the two operands should be normalized using the SHDE instruction first. Any empty operand, that is with a field length of zero, is treated as a positive zero. An unsigned number is treated as positive. Positive and negative zeros are equal. **Instruction sequence:** COMD error handling instruction next instruction after COMD or after error handling routine **Example:** COMD JMP *30β‚ˆ AAA 20β‚ˆ The COMD instruction causes the program counter to skip the next instruction UNLESS an error has been generated. In this case, the instruction immediately after COMD will handle the error in some way (in this example a jump is executed on error to ((P) + 30β‚ˆ)). (* is the assembler mnemonic for the P register) #### πŸ“‹ Format ``` COMD ``` #### Bit Layout ``` β”‚ 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` #### πŸ”§ Operands | Name | Type | Bits | Description | |:-----|:-----|:-----|:------------| | `opcode` | opcode | 15-0 | The opcode determines what type of operation occurs | -------------------------------------------------------------------------------- ### COPY #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | `COPY [sub-instruction(s)] ` | | Category | Register Operations | | Privilege | User | | Mask | `1111_1111_0000_0000` | #### πŸ“ Description Copy source to destination COPY is a compound mnemonic for RADD CLD. Optional subinstructions: The following sub-instructions are allowed: CM1, CM2, ADC, AD1 Note: Using ADC and AD1i in the same instruction generates a no-operation. #### πŸ“‹ Format ``` COPY [sub-instruction(s)] ``` #### Bit Layout ``` β”‚ 15 14 13 12 11 10 9 8 7 6 β”‚ 5 4 3 β”‚ 2 1 0 β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ source β”‚ destination β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` #### πŸ”§ Operands | Name | Type | Bits | Description | |:-----|:-----|:-----|:------------| | `opcode` | opcode | 15-6 | The opcode for register arithmetic | | `source` | enum | 5-3 | Source register (sr)

**Values:**
- `SD` (`000010`): D register as source
- `SP` (`000020`): P register as source
- `SB` (`000030`): B register as source
- `SL` (`000040`): L register as source
- `SA` (`000050`): A register as source
- `ST` (`000060`): T register as source
- `SX` (`000070`): X register as source
- `ZERO` (`000000`): Source value equals zero
| | `destination` | enum | 2-0 | Destination register (dr)

**Values:**
- `DD` (`000001`): D register as destination
- `DP` (`000002`): P register as destination
- `DB` (`000003`): B register as destination
- `DL` (`000004`): L register as destination
- `DA` (`000005`): A register as destination
- `DT` (`000006`): T register as destination
- `DX` (`000007`): X register as destination
| #### 🚩 Flags Affected | Flag | Description | |:-----|:------------| | `C` | Carry flag | | `O` | Static overflow flag | | `Q` | Dynamic overflow flag | #### πŸ“š Examples ##### Copy the contents of the A register to the D register. ``` COPY SA DD ``` ##### 2's complement the A register. (Equivalent to RADD CM1 ADC SA DA ``` COPY CM2 SA DA ``` -------------------------------------------------------------------------------- ### DEPO #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | `DEPO` | | Category | Physical Memory Control Instructions | | Privilege | Privileged | | Mask | `1111_1111_1111_1111` | #### πŸ“ Description Deposit Store the contents of the T register in the physical memory location pointed to by the A and D register contents. #### πŸ“‹ Format ``` DEPO ``` #### Bit Layout ``` β”‚ 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` #### πŸ”§ Operands | Name | Type | Bits | Description | |:-----|:-----|:-----|:------------| | `opcode` | opcode | 15-0 | The opcode determines what type of operation occurs | -------------------------------------------------------------------------------- ### DNZ #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | `DNZ ` | | Category | Floating Conversion (Standard Format) | | Privilege | User | | Mask | `1111_1111_0000_0000` | #### πŸ“ Description Denormalise Convert the floating number in TAD to a fixed point number in A #### πŸ“š Detailed Information The number in the floating point accumulator (A and D registers) is converted to its Single precision fixed point equivalent in the A register using the scaling factor given. When converting to an integer, a scaling factor of -16 should always be used and will give a fixed point number with the same value as the integer part of the floating point number. Other scaling factors will have the same result but the overflow test will be affected. The D register will be cleared after this instruction. If the conversion causes underflow, the A and D registers will be set to zero. If overflow occurs (the resulting integer has an absolute value greater than decimal 32767), the error flag (Z) is set to one. 48-bit: * 48-bit CPUs allow different scaling factors to be used for DNZ operations. However, the overflow test is only failproof for a scaling factor of 16 (decimal) #### πŸ“‹ Format ``` DNZ ``` #### Bit Layout ``` β”‚ 15 14 13 12 11 10 9 8 β”‚ 7 6 5 4 3 2 1 0 β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ scaling_factor β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` #### πŸ”§ Operands | Name | Type | Bits | Description | |:-----|:-----|:-----|:------------| | `opcode` | opcode | 15-8 | The opcode for floating conversion | | `scaling_factor` | numeric | 7-0 | Scaling factor in range -128 to 127 (gives converting range from 10^-39 to 10^39) | #### πŸ“š Examples ##### Convert the number in TAD to a fixed point number in A ``` DNZ ``` ##### Floating to integer conversation. Opcode 152360 ``` DNZ -20 ``` -------------------------------------------------------------------------------- ### ELEAV #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | `ELEAV` | | Category | Stack Operations | | Privilege | User | | Mask | `1111_1111_1111_1111` | #### πŸ“ Description Error leave stack. If an error occurs, leave the stack. This instruction saves the previous stack pointer in LINK and restores the B register to its previous value (PREVB) before leaving the stack. The stack is left by loading the P register (program counter) with the return address (LINK). The A register is loaded with an error code which is saved in the ERRCODE stack entry (pointed to by B = 173β‚ˆ). (B = 200β‚ˆ) ⟡ (B = 200β‚ˆ) - 1 (P) ⟡ (B = 200β‚ˆ) {LINK} (B) ⟡ (B = 177β‚ˆ) {PREVB} (A) ⟡ ERRCODEβ‚ˆ (B = 173β‚ˆ) ⟡ (A) {ERRCODE} Format: ELEAV #### πŸ“‹ Format ``` ELEAV ``` #### Bit Layout ``` β”‚ 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` #### πŸ”§ Operands | Name | Type | Bits | Description | |:-----|:-----|:-----|:------------| | `opcode` | opcode | 15-0 | The opcode determines what type of operation occurs | -------------------------------------------------------------------------------- ### ENPT #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | `ENPT` | | Category | Control Instructions | | Privilege | Privileged | | Mask | `1111_1111_1111_1111` | #### πŸ“ Description Enter segment in page tables. #### πŸ“‹ Format ``` ENPT ``` #### Bit Layout ``` β”‚ 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` #### πŸ”§ Operands | Name | Type | Bits | Description | |:-----|:-----|:-----|:------------| | `opcode` | opcode | 15-0 | The opcode determines what type of operation occurs | -------------------------------------------------------------------------------- ### ENTR #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | `ENTR` | | Category | Stack Operations | | Privilege | User | | Mask | `1111_1111_1111_1111` | #### πŸ“ Description Enter stack. This instruction saves the current stack pointer (B), the return address (LINK), and previous stack pointer (PREVB). It transfers the top of stack address (SMAX) and establishes the new stack demand and pointer. (B = 177β‚ˆ) ⟡ (B) {save current pointer in PREVB} (B = 175β‚ˆ) ⟡ (B = 175β‚ˆ) {SMAX} (B = 200β‚ˆ) ⟡ (L) + 1 {save return address in LINK} (B) ⟡ (B = 176β‚ˆ) + 200β‚ˆ {new pointer} (B = 176β‚ˆ) ⟡ stack demand + (B) Stack overflow causes an error return, that is the program continues at the address following the stack demand value. In all other cases, the program skips this address to find the return address from the stack. Format: ENTR #### πŸ“‹ Format ``` ENTR ``` #### Bit Layout ``` β”‚ 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` #### πŸ”§ Operands | Name | Type | Bits | Description | |:-----|:-----|:-----|:------------| | `opcode` | opcode | 15-0 | The opcode determines what type of operation occurs | #### 🚩 Flags Affected | Flag | Description | |:-----|:------------| | `PTM` | Page Table Flag | -------------------------------------------------------------------------------- ### EXAM #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | `EXAM` | | Category | Physical Memory Control Instructions | | Privilege | Privileged | | Mask | `1111_1111_1111_1111` | #### πŸ“ Description Examine Load the contents of the physical memory location, pointed to by the A and D register contents, into the T register. #### πŸ“‹ Format ``` EXAM ``` #### Bit Layout ``` β”‚ 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` #### πŸ”§ Operands | Name | Type | Bits | Description | |:-----|:-----|:-----|:------------| | `opcode` | opcode | 15-0 | The opcode determines what type of operation occurs | -------------------------------------------------------------------------------- ### EXIT #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | `EXIT` | | Category | Register Operations | | Privilege | User | | Mask | `1111_1111_1111_1111` | #### πŸ“ Description Return from subroutine This compound mnemonic represents the specific COPY instruction: COPY SL DP It causes the return from a subroutine by copying the stored return address into the program counter (P register). #### πŸ“‹ Format ``` EXIT ``` #### Bit Layout ``` β”‚ 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` #### πŸ”§ Operands | Name | Type | Bits | Description | |:-----|:-----|:-----|:------------| | `opcode` | opcode | 15-0 | The opcode determines what type of operation occurs | #### 🚩 Flags Affected | Flag | Description | |:-----|:------------| | `C` | Carry flag | | `O` | Static overflow flag | | `Q` | Dynamic overflow flag | -------------------------------------------------------------------------------- ### EXR #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | `EXR ` | | Category | Execute | | Privilege | User | | Mask | `1111_1111_1100_0000` | #### πŸ“ Description Execute instruction found in specified register The contents of the sr register are executed as the next instruction. If sr contains a memory reference instruction, the address is given as part of the instruction. EXR cannot be used to fetch an register containing another EXR instruction. If you attempt this the error flag (Z) is set. #### πŸ“‹ Format ``` EXR ``` #### Bit Layout ``` β”‚ 15 14 13 12 11 10 9 8 7 6 5 4 3 β”‚ 2 1 0 β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ register β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` #### πŸ”§ Operands | Name | Type | Bits | Description | |:-----|:-----|:-----|:------------| | `opcode` | opcode | 15-3 | The opcode for execute instruction | | `register` | enum | 2-0 | Register containing instruction to execute

**Values:**
- `SD` (`000010`): D register
- `SB` (`000030`): B register
- `SL` (`000040`): L register
- `SA` (`000050`): A register
- `ST` (`000060`): T register
- `SX` (`000070`): X register
| #### πŸ“š Examples ##### [(A) = 014177, STX *177] Execute the instruction held in the A register. Store the K register contents in the memory location pointed to by the program counter plus 177. ``` EXR SA ``` ##### [(B) = 134020, JPL 20] Execute the instruction held in the B register. The instruction is 4a jump to a subroutine at memory location ({P} + 20.). The return address (the address of the instruction after EXR) returned to once the subroutine has been completed is heid in the L register. ``` EXR SB ``` -------------------------------------------------------------------------------- ### FAD #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | `FAD ` | | Category | Standard Floating Instructions | | Privilege | User | | Mask | `1111_1000_0000_0000` | #### πŸ“ Description Add to floating point accumulator (A) ⟡ (ea) + (T) (D) ⟡ (ea + 1) + (A) The contents of two sequential memory locations, pointed to by the effective address, are added to the contents of the floating point accumulator (T and A registers). The result is held in the accumulator. #### πŸ“‹ Format ``` FAD ``` #### Bit Layout ``` β”‚ 15 14 13 12 11β”‚ 10 9 8 β”‚ 7 6 5 4 3 2 1 0 β”‚ β”‚ β”‚ X I B β”‚ β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ addressing_mode β”‚ displacement β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` > **Note:** This instruction uses addressing modes. See [Addressing Modes](#addressing-modes) for details. #### πŸ”§ Operands | Name | Type | Bits | Description | |:-----|:-----|:-----|:------------| | `opcode` | opcode | 15-11 | The opcode determines what type of operation occurs | | `addressing_mode` | addressing_modes | 10-8 | These three bits give the addressing mode for the instruction | | `displacement` | displacement | 7-0 | 8-bit signed field gives the memory address displacement (2's complement notation giving a displacement range of -128 to 127 memory locations) | -------------------------------------------------------------------------------- ### FDV #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | `FDV ` | | Category | Standard Floating Instructions | | Privilege | User | | Mask | `1111_1000_0000_0000` | #### πŸ“ Description Divide floating point accumulator The contents of the floating point accumulator (A and D registers) are divided by the contents of two sequential memory locations, pointed to by the effective address. #### πŸ“š Detailed Information Flags affected: - Division by zero sets the error flag (2). - This can be detected by the BSKP instruction #### πŸ“‹ Format ``` FDV ``` #### Bit Layout ``` β”‚ 15 14 13 12 11β”‚ 10 9 8 β”‚ 7 6 5 4 3 2 1 0 β”‚ β”‚ β”‚ X I B β”‚ β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ addressing_mode β”‚ displacement β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` > **Note:** This instruction uses addressing modes. See [Addressing Modes](#addressing-modes) for details. #### πŸ”§ Operands | Name | Type | Bits | Description | |:-----|:-----|:-----|:------------| | `opcode` | opcode | 15-11 | The opcode determines what type of operation occurs | | `addressing_mode` | addressing_modes | 10-8 | These three bits give the addressing mode for the instruction | | `displacement` | displacement | 7-0 | 8-bit signed field gives the memory address displacement (2's complement notation giving a displacement range of -128 to 127 memory locations) | #### 🚩 Flags Affected | Flag | Description | |:-----|:------------| | `Z` | Error flag | -------------------------------------------------------------------------------- ### FMU #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | `FMU ` | | Category | Standard Floating Instructions | | Privilege | User | | Mask | `1111_1000_0000_0000` | #### πŸ“ Description Multiply floating point accumulator. The contents of the floating point accumulator (A and D registers) are multiplied by the contents of two sequential memory locations, pointed to by the effective address. The result is held in the accumulator. #### πŸ“‹ Format ``` FMU ``` #### Bit Layout ``` β”‚ 15 14 13 12 11β”‚ 10 9 8 β”‚ 7 6 5 4 3 2 1 0 β”‚ β”‚ β”‚ X I B β”‚ β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ addressing_mode β”‚ displacement β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` > **Note:** This instruction uses addressing modes. See [Addressing Modes](#addressing-modes) for details. #### πŸ”§ Operands | Name | Type | Bits | Description | |:-----|:-----|:-----|:------------| | `opcode` | opcode | 15-11 | The opcode determines what type of operation occurs | | `addressing_mode` | addressing_modes | 10-8 | These three bits give the addressing mode for the instruction | | `displacement` | displacement | 7-0 | 8-bit signed field gives the memory address displacement (2's complement notation giving a displacement range of -128 to 127 memory locations) | #### 🚩 Flags Affected | Flag | Description | |:-----|:------------| | `Z` | Error flag | -------------------------------------------------------------------------------- ### FSB #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | `FSB ` | | Category | Standard Floating Instructions | | Privilege | User | | Mask | `1111_1000_0000_0000` | #### πŸ“ Description Subtract from floating point accumulator. The contents of two sequential memory locations, pointed to by the effective address, are subtracted from the contents of the floating point accumulator (A and D registers). The result is held in the accumulator. #### πŸ“‹ Format ``` FSB ``` #### Bit Layout ``` β”‚ 15 14 13 12 11β”‚ 10 9 8 β”‚ 7 6 5 4 3 2 1 0 β”‚ β”‚ β”‚ X I B β”‚ β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ addressing_mode β”‚ displacement β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` > **Note:** This instruction uses addressing modes. See [Addressing Modes](#addressing-modes) for details. #### πŸ”§ Operands | Name | Type | Bits | Description | |:-----|:-----|:-----|:------------| | `opcode` | opcode | 15-11 | The opcode determines what type of operation occurs | | `addressing_mode` | addressing_modes | 10-8 | These three bits give the addressing mode for the instruction | | `displacement` | displacement | 7-0 | 8-bit signed field gives the memory address displacement (2's complement notation giving a displacement range of -128 to 127 memory locations) | #### 🚩 Flags Affected | Flag | Description | |:-----|:------------| | `Z` | Error flag | -------------------------------------------------------------------------------- ### GECO #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | `GECO` | | Category | Undocumented Instructions | | Privilege | User | | Mask | `1111_1111_1111_1111` | #### πŸ“ Description GECO is a customer-specifed instruction which appears to be included as part of the standard instruction set from ND-100/CE and later. The name comes from the customer, GECO (Geophysical Company of Norway) SINTRAN III version L, and probably version K and possibly earlier, tests for GECO as part of the startup. The instruction is found in the ND-110 microcode. #### πŸ“‹ Format ``` GECO ``` #### Bit Layout ``` β”‚ 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` #### πŸ”§ Operands | Name | Type | Bits | Description | |:-----|:-----|:-----|:------------| | `opcode` | opcode | 15-0 | The opcode determines what type of operation occurs | -------------------------------------------------------------------------------- ### IDENT #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | ` IDENT ` | | Category | Interrupt Control Instructions | | Privilege | User | | Mask | `1111_1111_1100_0000` | #### πŸ“ Description Transfer IDENT code of interrupting device with highest priority on the specified level to A register. #### πŸ“‹ Format ``` IDENT ``` #### Bit Layout ``` β”‚ 15 14 13 12 11 10 9 8 7 6 β”‚ 5 4 3 2 1 0 β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ level_code β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` #### πŸ”§ Operands | Name | Type | Bits | Description | |:-----|:-----|:-----|:------------| | `opcode` | opcode | 15-6 | The opcode determines what type of operation occurs | | `level_code` | enum | 5-0 | The interrupt level code

**Values:**
- `PL10` (`000004`): Level 10
- `PL11` (`000011`): Level 11
- `PL12` (`000022`): Level 12
- `PL13` (`000043`): Level 13
| -------------------------------------------------------------------------------- ### INIT #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | `INIT` | | Category | Stack Operations | | Privilege | User | | Mask | `1111_1111_1111_1111` | #### πŸ“ Description Initialize stack. Loads the addresses pointed to by B with the stack frame addresses. Sets up LINK ⟡ L + 1 {stack start} PREVB ⟡ (B) {save current pointer} SMAX ⟡ stack start address + maximum stack size (B) ⟡ (B = 200β‚ˆ) + 200β‚ˆ {establish new pointer} STP ⟡ stack demand + (B) Load the addresses pointed to by **B** with the stack frame addresses. Stack overflow and flag error causes an error return, that is the program continues at the address following the stack demand value. In all other cases, the program skips this address to find the return address from the stack. Format: INIT
#### πŸ“‹ Format ``` INIT ``` #### Bit Layout ``` β”‚ 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` #### πŸ”§ Operands | Name | Type | Bits | Description | |:-----|:-----|:-----|:------------| | `opcode` | opcode | 15-0 | The opcode determines what type of operation occurs | #### 🚩 Flags Affected | Flag | Description | |:-----|:------------| | `PTM` | Page Table Flag | -------------------------------------------------------------------------------- ### INSPL #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | `INSPL` | | Category | Control Instructions | | Privilege | Privileged | | Mask | `1111_1111_1111_1111` | #### πŸ“ Description Insert page in page list. (See Appendix B for a software description.) #### πŸ“‹ Format ``` INSPL ``` #### Bit Layout ``` β”‚ 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` #### πŸ”§ Operands | Name | Type | Bits | Description | |:-----|:-----|:-----|:------------| | `opcode` | opcode | 15-0 | The opcode determines what type of operation occurs | -------------------------------------------------------------------------------- ### IOF #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | `IOF` | | Category | Interrupt Control Instructions | | Privilege | Privileged | | Mask | `1111_1111_1111_1111` | #### πŸ“ Description Interrupt System OFF Disables the interrupt system. On IOF the ND-110 continues operation at the same program level. #### πŸ“‹ Format ``` IOF ``` #### Bit Layout ``` β”‚ 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` #### πŸ”§ Operands | Name | Type | Bits | Description | |:-----|:-----|:-----|:------------| | `opcode` | opcode | 15-0 | The opcode determines what type of operation occurs | -------------------------------------------------------------------------------- ### ION #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | `ION` | | Category | Interrupt Control Instructions | | Privilege | User | | Mask | `1111_1111_1111_1111` | #### πŸ“ Description Interrupt System ON Enables the interrupt system. On ION the ND-i10 resumes operation in the program level with highest priority. #### πŸ“‹ Format ``` ION ``` #### Bit Layout ``` β”‚ 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` #### πŸ”§ Operands | Name | Type | Bits | Description | |:-----|:-----|:-----|:------------| | `opcode` | opcode | 15-0 | The opcode determines what type of operation occurs | -------------------------------------------------------------------------------- ### IOT #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | `IOT ` | | Category | Input and Output | | Privilege | Privileged | | Mask | `1111_1000_0000_0000` | #### πŸ“ Description NORD-1 INSTRUCTION (DO NOT USE) #### πŸ“š Detailed Information ND-110 microcode implements this instruction like this: 1861 000627 % IOT - INSTRUCTION IS PRIVILEGED WHEN RING = 0 OR 1 1862 000627 % AND ILLEGAL WHEN RING = 2 OR 3 1863 000627 1864 000627 IOT1: ALUD,NONE IDBS,ALU T,JMP T,PUSH PVCHK; 1865 000630 ALUD,NONE IDBS,ALU T,JMP T,HOLD ILLIN; #### πŸ“‹ Format ``` IOT ``` #### Bit Layout ``` β”‚ 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` -------------------------------------------------------------------------------- ### IOX #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | `IOX ` | | Category | Input and Output | | Privilege | Privileged | | Mask | `1111_1000_0000_0000` | #### πŸ“ Description Exchange information between I/O system and A register. #### πŸ“š Detailed Information This instruction is PRIVILEGED and only available to: - programs running in system mode (rings 2-3) - programs running without memory protection The instruction controls all transfers between the ND-110 and any external devices. IOX can be used to address a maximum of 2048 device registers for external devices connected to the ND-110 CPU. Data, control, and status between device and CPU can be exchanged. The transfer direction is determined by the least significant bit of the device register address: - If 0: input (from device to CPU) - If 1: output (from CPU to device) Register addresses can hold data, command, or status information for a device. An external device may require more than one register address (e.g., a magnetic tape unit may need several). These should be given successive device-register addresses (odd for input, even for output). Note: The number of external devices that can be controlled by the CPU depends on the configuration of the devices. #### πŸ“‹ Format ``` IOX ``` #### Bit Layout ``` β”‚ 15 14 13 12 11 10β”‚ 10 9 8 7 6 5 4 3 2 1 0 β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ device_register_address β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` #### πŸ”§ Operands | Name | Type | Bits | Description | |:-----|:-----|:-----|:------------| | `opcode` | opcode | 15-10 | The opcode determines what type of operation occurs (fixed code 11101β‚‚) | | `device_register_address` | displacement | 10-0 | 11-bit field limiting the number of external devices that can be addressed by the CPU.
Bit 0 gives the direction of transfer:
- 0: input (from device to CPU)
- 1: output (from CPU to device)
| #### πŸ“š Examples ##### Read status of console device into A register ``` IOX 0306 ``` ##### Write character in A register to console device ``` IOX 0305 ``` -------------------------------------------------------------------------------- ### IOXT #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | `IOXT` | | Category | Input and Output | | Privilege | Privileged | | Mask | `1111_1111_1111_1111` | #### πŸ“ Description Exchange information between I/O system and A register. #### πŸ“š Detailed Information This instruction is PRIVILEGED and only available to: - programs running in system mode (rings 2-3) - programs running without memory protection The instruction controls all transfers between the ND-110 and external devices. IOXT can be used to address a maximum of 65536 device-register addresses for external devices connected to the ND-110 CPU. The 16-bit T register holds the device register address, allowing a much larger address space than IOX. Data, control, and status between device and CPU can be exchanged. The transfer direction is determined by the least significant bit of the device register address: - If 0: input (from device to CPU) - If 1: output (from CPU to device) Instruction format: LDT
IOXT LDT instruction: The IOXT instruction uses the T register contents as the device register address. The 16-bit T register gives a limit of 65536 register addresses. This address MUST be loaded into the T register before IOXT is executed, hence LDT is used. (See Memory Transfer Instructions, LOAD for explanation of LDT.) IOXT instruction: IOXT is used as a single mnemonic. Note: The number of external devices that can be controlled by the CPU depends on the configuration of the devices. #### πŸ“‹ Format ``` IOXT ``` #### Bit Layout ``` β”‚ 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` #### πŸ”§ Operands | Name | Type | Bits | Description | |:-----|:-----|:-----|:------------| | `opcode` | opcode | 15-0 | The opcode determines what type of operation occurs | -------------------------------------------------------------------------------- ### IRR #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | `IRR ` | | Category | Inter-level Instructions | | Privilege | Privileged | | Mask | `1111_1111_1000_0000` | #### πŸ“ Description Inter Register Read A: = specified register on specified level #### πŸ“‹ Format ``` IRR ``` #### Bit Layout ``` β”‚ 15 14 13 12 11 10 9 8 7 β”‚ 6 5 4 3 β”‚ 2 1 0 β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ level β”‚ register β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` #### πŸ”§ Operands | Name | Type | Bits | Description | |:-----|:-----|:-----|:------------| | `opcode` | opcode | 15-7 | The opcode for inter-register read | | `level` | uint4 | 6-3 | Privilege level to access (0-15) | | `register` | enum | 2-0 | Register to read from specified level

**Values:**
- `STS` (`000000`): Status register
- `DD` (`000001`): D register
- `DP` (`000002`): P register
- `DB` (`000003`): B register
- `DL` (`000004`): L register
- `DA` (`000005`): A register
- `DT` (`000006`): T register
- `DX` (`000007`): X register
| #### πŸ“š Examples ##### Copy the program counter on program level 14 into the A register of the current program level. ``` ``` -------------------------------------------------------------------------------- ### IRW #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | `IRW ` | | Category | Inter-level Instructions | | Privilege | Privileged | | Mask | `1111_1111_1000_0000` | #### πŸ“ Description Inter Register Write Write A to specified register on specified level #### πŸ“‹ Format ``` IRW ``` #### Bit Layout ``` β”‚ 15 14 13 12 11 10 9 8 7 β”‚ 6 5 4 3 β”‚ 2 1 0 β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ level β”‚ register β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` #### πŸ”§ Operands | Name | Type | Bits | Description | |:-----|:-----|:-----|:------------| | `opcode` | opcode | 15-7 | The opcode for inter-register read | | `level` | uint4 | 6-3 | Privilege level to access (0-15) | | `register` | enum | 2-0 | Register to read from specified level

**Values:**
- `STS` (`000000`): Status register
- `DD` (`000001`): D register
- `DP` (`000002`): P register
- `DB` (`000003`): B register
- `DL` (`000004`): L register
- `DA` (`000005`): A register
- `DT` (`000006`): T register
- `DX` (`000007`): X register
| #### πŸ“š Examples ##### Copy the A register on the current program level into the B register on program level 8 ``` ``` -------------------------------------------------------------------------------- ### JAF #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | ` JAF ` | | Category | Sequencing Instructions | | Privilege | User | | Mask | `1111_1111_0000_0000` | #### πŸ“ Description Condtion: Jump if (A) != 0 (jump if A filled) #### πŸ“š Detailed Information If condition true, jump to the address of the program counter plus the value of displacement. If condition false, continue program execution at (P) + 1. 'displacement' = The eight displacement (disp) bits give a signed range of -128 to 127 locations to be jumped if the condition is true. #### πŸ“‹ Format ``` JAF ``` #### Bit Layout ``` β”‚ 15 14 13 12 11 10 9 8 β”‚ 7 6 5 4 3 2 1 0 β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ displacement β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` #### πŸ”§ Operands | Name | Type | Bits | Description | |:-----|:-----|:-----|:------------| | `opcode` | opcode | 15-8 | The opcode determines what type of operation occurs | | `displacement` | displacement | 7-0 | 8-bit signed field gives the memory address displacement (2's complement notation giving a displacement range of -128 to 127 memory locations) | -------------------------------------------------------------------------------- ### JAN #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | ` JAN ` | | Category | Sequencing Instructions | | Privilege | User | | Mask | `1111_1111_0000_0000` | #### πŸ“ Description Condtion: Jump if (A) < 0 (jump if A is negative) #### πŸ“š Detailed Information If condition true, jump to the address of the program counter plus the value of displacement. If condition false, continue program execution at (P) + 1. 'displacement' = The eight displacement (disp) bits give a signed range of -128 to 127 locations to be jumped if the condition is true. #### πŸ“‹ Format ``` JAN ``` #### Bit Layout ``` β”‚ 15 14 13 12 11 10 9 8 β”‚ 7 6 5 4 3 2 1 0 β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ displacement β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` #### πŸ”§ Operands | Name | Type | Bits | Description | |:-----|:-----|:-----|:------------| | `opcode` | opcode | 15-8 | The opcode determines what type of operation occurs | | `displacement` | displacement | 7-0 | 8-bit signed field gives the memory address displacement (2's complement notation giving a displacement range of -128 to 127 memory locations) | -------------------------------------------------------------------------------- ### JAP #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | ` JAP ` | | Category | Sequencing Instructions | | Privilege | User | | Mask | `1111_1111_0000_0000` | #### πŸ“ Description Condtion: Jump if (A) > 0 (jump if A positive) #### πŸ“š Detailed Information If condition true, jump to the address of the program counter plus the value of displacement. If condition false, continue program execution at (P) + 1. 'displacement' = The eight displacement (disp) bits give a signed range of -128 to 127 locations to be jumped if the condition is true. #### πŸ“‹ Format ``` JAP ``` #### Bit Layout ``` β”‚ 15 14 13 12 11 10 9 8 β”‚ 7 6 5 4 3 2 1 0 β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ displacement β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` #### πŸ”§ Operands | Name | Type | Bits | Description | |:-----|:-----|:-----|:------------| | `opcode` | opcode | 15-8 | The opcode determines what type of operation occurs | | `displacement` | displacement | 7-0 | 8-bit signed field gives the memory address displacement (2's complement notation giving a displacement range of -128 to 127 memory locations) | -------------------------------------------------------------------------------- ### JAZ #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | ` JAZ ` | | Category | Sequencing Instructions | | Privilege | User | | Mask | `1111_1111_0000_0000` | #### πŸ“ Description Condtion: Jump if (A) == 0 (jump if A is zero) #### πŸ“š Detailed Information If condition true, jump to the address of the program counter plus the value of displacement. If condition false, continue program execution at (P) + 1. 'displacement' = The eight displacement (disp) bits give a signed range of -128 to 127 locations to be jumped if the condition is true. #### πŸ“‹ Format ``` JAZ ``` #### Bit Layout ``` β”‚ 15 14 13 12 11 10 9 8 β”‚ 7 6 5 4 3 2 1 0 β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ displacement β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` #### πŸ”§ Operands | Name | Type | Bits | Description | |:-----|:-----|:-----|:------------| | `opcode` | opcode | 15-8 | The opcode determines what type of operation occurs | | `displacement` | displacement | 7-0 | 8-bit signed field gives the memory address displacement (2's complement notation giving a displacement range of -128 to 127 memory locations) | -------------------------------------------------------------------------------- ### JMP #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | `JMP
` | | Category | Sequencing Instructions | | Privilege | User | #### πŸ“ Description Jump - Unconditional jump to specified address The next instruction is taken from the effective address of the JMP instruction(the effective address is ioaded into the program counter). #### πŸ“‹ Format ``` JMP
``` #### Bit Layout ``` β”‚ 15 14 13 12 11β”‚ 10 9 8 β”‚ 7 6 5 4 3 2 1 0 β”‚ β”‚ β”‚ X I B β”‚ β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ addressing_mode β”‚ displacement β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` > **Note:** This instruction uses addressing modes. See [Addressing Modes](#addressing-modes) for details. #### πŸ”§ Operands | Name | Type | Bits | Description | |:-----|:-----|:-----|:------------| | `opcode` | opcode | 15-11 | The opcode determines what type of operation occurs | | `addressing_mode` | addressing_modes | 10-8 | These three bits give the addressing mode for the instruction | | `displacement` | displacement | 7-0 | 8-bit signed field gives the memory address displacement (2's complement notation giving a displacement range of -128 to 127 memory locations) | -------------------------------------------------------------------------------- ### JNC #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | ` JNC ` | | Category | Sequencing Instructions | | Privilege | User | | Mask | `1111_1111_0000_0000` | #### πŸ“ Description Increment X and jump if X is negative #### πŸ“š Detailed Information X = X + 1 Condtion: Jump if (X) < 0 (jump if X is negative) If condition true, jump to the address of the program counter plus the value of displacement. If condition false, continue program execution at (P) + 1. 'displacement' = The eight displacement (disp) bits give a signed range of -128 to 127 locations to be jumped if the condition is true. #### πŸ“‹ Format ``` JNC ``` #### Bit Layout ``` β”‚ 15 14 13 12 11 10 9 8 β”‚ 7 6 5 4 3 2 1 0 β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ displacement β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` #### πŸ”§ Operands | Name | Type | Bits | Description | |:-----|:-----|:-----|:------------| | `opcode` | opcode | 15-8 | The opcode determines what type of operation occurs | | `displacement` | displacement | 7-0 | 8-bit signed field gives the memory address displacement (2's complement notation giving a displacement range of -128 to 127 memory locations) | -------------------------------------------------------------------------------- ### JPC #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | ` JPC ` | | Category | Sequencing Instructions | | Privilege | User | | Mask | `1111_1111_0000_0000` | #### πŸ“ Description Increment X and jump if X is positive #### πŸ“š Detailed Information X = X + 1 Condtion: Jump if (X) > 0 (jump if X is positive) If condition true, jump to the address of the program counter plus the value of displacement. If condition false, continue program execution at (P) + 1. 'displacement' = The eight displacement (disp) bits give a signed range of -128 to 127 locations to be jumped if the condition is true. #### πŸ“‹ Format ``` JPC ``` #### Bit Layout ``` β”‚ 15 14 13 12 11 10 9 8 β”‚ 7 6 5 4 3 2 1 0 β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ displacement β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` #### πŸ”§ Operands | Name | Type | Bits | Description | |:-----|:-----|:-----|:------------| | `opcode` | opcode | 15-8 | The opcode determines what type of operation occurs | | `displacement` | displacement | 7-0 | 8-bit signed field gives the memory address displacement (2's complement notation giving a displacement range of -128 to 127 memory locations) | -------------------------------------------------------------------------------- ### JPL #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | `JPL
` | | Category | Sequencing Instructions | | Privilege | User | #### πŸ“ Description Jump if Plus - Jump to specified address if the result of the last operation was positive (sign bit is 0) The contents of the program counter are transferred to the L register and the next instruction is taken from the effective address of the JPL instruction. Note that the L register points to the instruction after the jump(the program counter incremented before transfer to the L register). #### πŸ“‹ Format ``` JPL
``` #### Bit Layout ``` β”‚ 15 14 13 12 11β”‚ 10 9 8 β”‚ 7 6 5 4 3 2 1 0 β”‚ β”‚ β”‚ X I B β”‚ β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ addressing_mode β”‚ displacement β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` > **Note:** This instruction uses addressing modes. See [Addressing Modes](#addressing-modes) for details. #### πŸ”§ Operands | Name | Type | Bits | Description | |:-----|:-----|:-----|:------------| | `opcode` | opcode | 15-11 | The opcode determines what type of operation occurs | | `addressing_mode` | addressing_modes | 10-8 | These three bits give the addressing mode for the instruction | | `displacement` | displacement | 7-0 | 8-bit signed field gives the memory address displacement (2's complement notation giving a displacement range of -128 to 127 memory locations) | -------------------------------------------------------------------------------- ### JXN #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | ` JXN ` | | Category | Sequencing Instructions | | Privilege | User | | Mask | `1111_1111_0000_0000` | #### πŸ“ Description Condtion: Jump if (X) < 0 (jump if X negative) #### πŸ“š Detailed Information If condition true, jump to the address of the program counter plus the value of displacement. If condition false, continue program execution at (P) + 1. 'displacement' = The eight displacement (disp) bits give a signed range of -128 to 127 locations to be jumped if the condition is true. #### πŸ“‹ Format ``` JXN ``` #### Bit Layout ``` β”‚ 15 14 13 12 11 10 9 8 β”‚ 7 6 5 4 3 2 1 0 β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ displacement β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` #### πŸ”§ Operands | Name | Type | Bits | Description | |:-----|:-----|:-----|:------------| | `opcode` | opcode | 15-8 | The opcode determines what type of operation occurs | | `displacement` | displacement | 7-0 | 8-bit signed field gives the memory address displacement (2's complement notation giving a displacement range of -128 to 127 memory locations) | -------------------------------------------------------------------------------- ### JXZ #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | ` JXZ ` | | Category | Sequencing Instructions | | Privilege | User | | Mask | `1111_1111_0000_0000` | #### πŸ“ Description Condtion: Jump if (X) == 0 (jump if X is zero) #### πŸ“š Detailed Information If condition true, jump to the address of the program counter plus the value of displacement. If condition false, continue program execution at (P) + 1. 'displacement' = The eight displacement (disp) bits give a signed range of -128 to 127 locations to be jumped if the condition is true. #### πŸ“‹ Format ``` JXZ ``` #### Bit Layout ``` β”‚ 15 14 13 12 11 10 9 8 β”‚ 7 6 5 4 3 2 1 0 β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ displacement β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` #### πŸ”§ Operands | Name | Type | Bits | Description | |:-----|:-----|:-----|:------------| | `opcode` | opcode | 15-8 | The opcode determines what type of operation occurs | | `displacement` | displacement | 7-0 | 8-bit signed field gives the memory address displacement (2's complement notation giving a displacement range of -128 to 127 memory locations) | -------------------------------------------------------------------------------- ### LACB #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | `LACB ` | | Category | Control Instructions | | Privilege | Privileged | | Mask | `1111_1111_1100_0111` | #### πŸ“ Description Load the A register from the core map-table bank (CMBNK). (A) <--- (ea) ea = (B) + Ξ” = CMBNK entry Ξ”: 3-bit displacement added to B included in the instruction opcode (bits 5-3) #### πŸ“‹ Format ``` LACB ``` #### Bit Layout ``` β”‚ 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` -------------------------------------------------------------------------------- ### LASB #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | `LASB ` | | Category | Control Instructions | | Privilege | Privileged | | Mask | `1111_1111_1100_0111` | #### πŸ“ Description Load the A register with the contents of the segment-table bank (STBNK). (A) <--- (ea) ea = (B) + Ξ” = STBNK entry Ξ”: 3-bit displacement added to B included in the instruction opcode (bits 5-3) #### πŸ“‹ Format ``` LASB ``` #### Bit Layout ``` β”‚ 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` -------------------------------------------------------------------------------- ### LBIT #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | `LBIT` | | Category | Control Instructions | | Privilege | Privileged | | Mask | `1111_1111_1111_1111` | #### πŸ“ Description Load single bit accumulator (K) with logical memory bit. (X) points to the start of a bit array (A) points to the bit within the array #### πŸ“‹ Format ``` LBIT ``` #### Bit Layout ``` β”‚ 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` #### πŸ”§ Operands | Name | Type | Bits | Description | |:-----|:-----|:-----|:------------| | `opcode` | opcode | 15-0 | The opcode determines what type of operation occurs | -------------------------------------------------------------------------------- ### LBITP #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | `LBITP` | | Category | Control Instructions | | Privilege | Privileged | | Mask | `1111_1111_1111_1111` | #### πŸ“ Description Load single bit accumulator (K) with physical memory bit. (T) points to the bank number containing the bit array (X) points to the start of a bit array (A) points to the bit within the array #### πŸ“‹ Format ``` LBITP ``` #### Bit Layout ``` β”‚ 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` #### πŸ”§ Operands | Name | Type | Bits | Description | |:-----|:-----|:-----|:------------| | `opcode` | opcode | 15-0 | The opcode determines what type of operation occurs | -------------------------------------------------------------------------------- ### LBYT #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | `LBYT` | | Category | Byte Instructions | | Privilege | User | | Mask | `1111_1111_1111_1111` | #### πŸ“ Description Load byte from memory to A register Addressing: EL = (T) + (X)/2 - If least significant bit of X = 1: Load right byte - If least significant bit of X = 0: Load left byte Load the byte addressed by the contents of the T and X register into the lower byte of the A register. The higher byte of the A register is cleared. The contents of T point to the beginning of a character string and the contents of X to a byte within the string. #### πŸ“‹ Format ``` LBYT ``` #### Bit Layout ``` β”‚ 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` #### πŸ”§ Operands | Name | Type | Bits | Description | |:-----|:-----|:-----|:------------| | `opcode` | opcode | 15-0 | The opcode determines what type of operation occurs | -------------------------------------------------------------------------------- ### LBYTP #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | `LBYTP` | | Category | Control Instructions | | Privilege | Privileged | | Mask | `1111_1111_1111_1111` | #### πŸ“ Description Load the A register with a byte from physical memory. (D) points to the bank number containing the byte array (T) points to the start of a byte array (X) points to the actual byte within the array #### πŸ“‹ Format ``` LBYTP ``` #### Bit Layout ``` β”‚ 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` #### πŸ”§ Operands | Name | Type | Bits | Description | |:-----|:-----|:-----|:------------| | `opcode` | opcode | 15-0 | The opcode determines what type of operation occurs | -------------------------------------------------------------------------------- ### LDA #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | `LDA ` | | Category | Memory Transfer - Load Instruction | | Privilege | User | | Mask | `1111_1000_0000_0000` | #### πŸ“ Description Load A register Load the contents of the memory location pointed to by the effective address into the A register. #### πŸ“‹ Format ``` LDA ``` #### Bit Layout ``` β”‚ 15 14 13 12 11β”‚ 10 9 8 β”‚ 7 6 5 4 3 2 1 0 β”‚ β”‚ β”‚ X I B β”‚ β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ addressing_mode β”‚ displacement β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` > **Note:** This instruction uses addressing modes. See [Addressing Modes](#addressing-modes) for details. #### πŸ”§ Operands | Name | Type | Bits | Description | |:-----|:-----|:-----|:------------| | `opcode` | opcode | 15-11 | The opcode determines what type of operation occurs | | `addressing_mode` | addressing_modes | 10-8 | These three bits give the addressing mode for the instruction | | `displacement` | displacement | 7-0 | 8-bit signed field gives the memory address displacement (2's complement notation giving a displacement range of -128 to 127 memory locations) | -------------------------------------------------------------------------------- ### LDATX #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | `LDATX ` | | Category | Memory Transfer Instructions | | Privilege | Privileged | | Mask | `1111_1111_1100_0111` | #### πŸ“ Description Load A register (A) ⟡ (ea) Load the contents of the physical memory location pointed to by the effective address into the A register. #### πŸ“‹ Format ``` LDATX ``` #### Bit Layout ``` β”‚ 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` -------------------------------------------------------------------------------- ### LDBTX #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | `LDBTX ` | | Category | Memory Transfer Instructions | | Privilege | Privileged | | Mask | `1111_1111_1100_0111` | #### πŸ“ Description Load B register (B) ⟡ 177000β‚ˆ OR (2(ea)) Load the contents of the physical memory location pointed to by twice the effective address contents into the B register, then OR the value with 177000β‚ˆ. See description for usage. #### πŸ“‹ Format ``` LDBTX ``` #### Bit Layout ``` β”‚ 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` -------------------------------------------------------------------------------- ### LDD #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | `LDD ` | | Category | Memory Transfer - Double word instructions | | Privilege | User | | Mask | `1111_1000_0000_0000` | #### πŸ“ Description Load double word A ⟡ (ea) D ⟡ (ea) + 1 Load the contents of the memory location pointed to by the effective address into the A register Load the contents of the memory location pointed to by the effective address plus one into the D register. #### πŸ“‹ Format ``` LDD ``` #### Bit Layout ``` β”‚ 15 14 13 12 11β”‚ 10 9 8 β”‚ 7 6 5 4 3 2 1 0 β”‚ β”‚ β”‚ X I B β”‚ β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ addressing_mode β”‚ displacement β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` > **Note:** This instruction uses addressing modes. See [Addressing Modes](#addressing-modes) for details. #### πŸ”§ Operands | Name | Type | Bits | Description | |:-----|:-----|:-----|:------------| | `opcode` | opcode | 15-11 | The opcode determines what type of operation occurs | | `addressing_mode` | addressing_modes | 10-8 | These three bits give the addressing mode for the instruction | | `displacement` | displacement | 7-0 | 8-bit signed field gives the memory address displacement (2's complement notation giving a displacement range of -128 to 127 memory locations) | -------------------------------------------------------------------------------- ### LDDTX #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | `LDDTX ` | | Category | Memory Transfer Instructions | | Privilege | Privileged | | Mask | `1111_1111_1100_0111` | #### πŸ“ Description Load double word (A) ⟡ (ea) (D) ⟡ (ea + 1) Load the contents of the physical memory location pointed to by the effective address into the A register and the contents of the effective address plus one into the D register. #### πŸ“‹ Format ``` LDDTX ``` #### Bit Layout ``` β”‚ 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` -------------------------------------------------------------------------------- ### LDF #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | `LDF ` | | Category | Standard Floating Instructions | | Privilege | User | | Mask | `1111_1000_0000_0000` | #### πŸ“ Description Load floating accumulator (TAD) from memory (FW) Memory format: (T) ⟡ EL (A) ⟡ EL+1 (D) ⟡ EL+2 Load the contents of the memory location pointed to by the effective address into the T register, the contents of the effective address plus one into the A register and the contents of the effective address plus two into the D register. #### πŸ“‹ Format ``` LDF ``` #### Bit Layout ``` β”‚ 15 14 13 12 11β”‚ 10 9 8 β”‚ 7 6 5 4 3 2 1 0 β”‚ β”‚ β”‚ X I B β”‚ β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ addressing_mode β”‚ displacement β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` > **Note:** This instruction uses addressing modes. See [Addressing Modes](#addressing-modes) for details. #### πŸ”§ Operands | Name | Type | Bits | Description | |:-----|:-----|:-----|:------------| | `opcode` | opcode | 15-11 | The opcode determines what type of operation occurs | | `addressing_mode` | addressing_modes | 10-8 | These three bits give the addressing mode for the instruction | | `displacement` | displacement | 7-0 | 8-bit signed field gives the memory address displacement (2's complement notation giving a displacement range of -128 to 127 memory locations) | -------------------------------------------------------------------------------- ### LDT #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | `LDT ` | | Category | Memory Transfer - Load Instruction | | Privilege | User | | Mask | `1111_1000_0000_0000` | #### πŸ“ Description Load T register (T) ⟡ (ea) Load the contents of the memory location pointed to by the effective address into the T register. #### πŸ“‹ Format ``` LDT ``` #### Bit Layout ``` β”‚ 15 14 13 12 11β”‚ 10 9 8 β”‚ 7 6 5 4 3 2 1 0 β”‚ β”‚ β”‚ X I B β”‚ β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ addressing_mode β”‚ displacement β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` > **Note:** This instruction uses addressing modes. See [Addressing Modes](#addressing-modes) for details. #### πŸ”§ Operands | Name | Type | Bits | Description | |:-----|:-----|:-----|:------------| | `opcode` | opcode | 15-11 | The opcode determines what type of operation occurs | | `addressing_mode` | addressing_modes | 10-8 | These three bits give the addressing mode for the instruction | | `displacement` | displacement | 7-0 | 8-bit signed field gives the memory address displacement (2's complement notation giving a displacement range of -128 to 127 memory locations) | -------------------------------------------------------------------------------- ### LDX #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | `LDX ` | | Category | Memory Transfer - Load Instruction | | Privilege | User | | Mask | `1111_1000_0000_0000` | #### πŸ“ Description Load X register (X) ⟡ (ea) Load the contents of the memory location pointed to by the effective address into the X register. #### πŸ“‹ Format ``` LDX ``` #### Bit Layout ``` β”‚ 15 14 13 12 11β”‚ 10 9 8 β”‚ 7 6 5 4 3 2 1 0 β”‚ β”‚ β”‚ X I B β”‚ β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ addressing_mode β”‚ displacement β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` > **Note:** This instruction uses addressing modes. See [Addressing Modes](#addressing-modes) for details. #### πŸ”§ Operands | Name | Type | Bits | Description | |:-----|:-----|:-----|:------------| | `opcode` | opcode | 15-11 | The opcode determines what type of operation occurs | | `addressing_mode` | addressing_modes | 10-8 | These three bits give the addressing mode for the instruction | | `displacement` | displacement | 7-0 | 8-bit signed field gives the memory address displacement (2's complement notation giving a displacement range of -128 to 127 memory locations) | -------------------------------------------------------------------------------- ### LDXTX #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | `LDXTX ` | | Category | Memory Transfer Instructions | | Privilege | Privileged | | Mask | `1111_1111_1100_0111` | #### πŸ“ Description Load X register (X) ⟡ (ea) Load the contents of the physical memory location pointed to by the effective address into the X register. #### πŸ“‹ Format ``` LDXTX ``` #### Bit Layout ``` β”‚ 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` -------------------------------------------------------------------------------- ### LEAVE #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | `LEAVE` | | Category | Stack Operations | | Privilege | User | | Mask | `1111_1111_1111_1111` | #### πŸ“ Description Leave stack. This instruction saves the previous stack pointer in LINK. The B register is restored to its previous value (PREVB) and the stack is left by loading the P register (program counter) with the return address (LINK). (P) ⟡ (B = 200β‚ˆ) {LINK} (B) ⟡ (B = 177β‚ˆ) {PREVB} Format: LEAVE #### πŸ“‹ Format ``` LEAVE ``` #### Bit Layout ``` β”‚ 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` #### πŸ”§ Operands | Name | Type | Bits | Description | |:-----|:-----|:-----|:------------| | `opcode` | opcode | 15-0 | The opcode determines what type of operation occurs | -------------------------------------------------------------------------------- ### LRB #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | `LRB ` | | Category | Register Block Instructions | | Privilege | Privileged | | Mask | `1111_1111_1100_0000` | #### πŸ“ Description Load register block Load the contents of a memory block pointed to by the X register into the register block of the program level given in the instruction. If the instruction specifies the current program level, the P register (program counter) is not loaded from memory and is unchanged. #### πŸ“š Detailed Information The memory block pointed to by the X register is loaded into the register block for the specified program level. The mapping is as follows: P (level N) ⟡ (ea) X (level N) ⟡ (ea + 1) T (level N) ⟡ (ea + 2) A (level N) ⟡ (ea + 3) D (level N) ⟡ (ea + 4) L (level N) ⟡ (ea + 5) STS (level N) ⟡ (ea + 6) B (level N) ⟡ (ea + 7) Where (ea) is the address in memory pointed to by the X register. If the current program level is specified, the P register is not loaded and remains unchanged. #### πŸ“‹ Format ``` LRB ``` #### Bit Layout ``` β”‚ 15 14 13 12 11β”‚ 6 5 4 3 β”‚ 2 1 0 β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ level β”‚ type β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` #### πŸ”§ Operands | Name | Type | Bits | Description | |:-----|:-----|:-----|:------------| | `opcode` | opcode | 15-11 | The opcode determines what type of operation occurs | | `level` | uint4 | 6-3 | The level to load the register block to | | `type` | enum | 2-0 | The type of register block function

**Values:**
- `SRB` (`0`): Store Register Block
- `LRB` (`2`): Load Register Block
| #### πŸ“š Examples ##### LRB 160β‚ˆ (152760β‚ˆ) Load the memory block pointed to by the X register into the register on program level 14. P (level 14) ⟡ (ea) X (level 14) ⟡ (ea + 1) ↓ ↓ B (level 14) ⟡ (ea + 7) ``` LRB 160 ``` -------------------------------------------------------------------------------- ### LWCS #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | `LWCS` | | Category | privileged | | Privilege | Privileged | | Mask | `1111_1111_1111_1111` | #### πŸ“ Description Writable Control Store Instruction This instruction is PRIVILEGED and only available to: - programs running in system mode (rings 2-3) - programs running without memory protection LWCS is a no-operation in the ND-110. The ND-110 is software compatible but not microcode compatible and writing to the writable control store has no meaning in the ND-110. A no-operation is executed so that programs written for the ND-100 and NORD-10 can continue. Unused areas of the microprogram can be read or written to using the TRR CS or TRA CS instruction. Further information on the LWCS instruction for the ND-100 can be found in the ND-100 Reference Manual (ND-06.014). #### πŸ“‹ Format ``` LWCS ``` #### Bit Layout ``` β”‚ 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` #### πŸ”§ Operands | Name | Type | Bits | Description | |:-----|:-----|:-----|:------------| | `opcode` | opcode | 15-0 | The opcode determines what type of operation occurs | -------------------------------------------------------------------------------- ### LXCB #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | `LXCB ` | | Category | Control Instructions | | Privilege | Privileged | | Mask | `1111_1111_1100_0111` | #### πŸ“ Description Load the X register from the core table bank (CMBNK). (X) <--- (ea) ea = (B) + Ξ” = CMBNK entry Ξ”: 3-bit displacement added to B included in the instruction opcode (bits 5-3) #### πŸ“‹ Format ``` LXCB ``` #### Bit Layout ``` β”‚ 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` -------------------------------------------------------------------------------- ### LXSB #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | `LXSB ` | | Category | Control Instructions | | Privilege | Privileged | | Mask | `1111_1111_1100_0111` | #### πŸ“ Description Load the X register from the segment table bank (STBNK). (X) <--- (ea) ea = (B) + Ξ” = STBNK entry Ξ”: 3-bit displacement added to B included in the instruction opcode (bits 5-3) #### πŸ“‹ Format ``` LXSB ``` #### Bit Layout ``` β”‚ 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` -------------------------------------------------------------------------------- ### MCL #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | `MCL ` | | Category | Register Transfer | | Privilege | Privileged | | Mask | `1111_1111_1111_0000` | #### πŸ“ Description Masked clear The A register is used as a mask to clear bits within the selected internal register. Setting a bit in the A register clears the corresponding bit in the internal register. See table for internal registers that allow MCL. #### πŸ“‹ Format ``` MCL ``` #### Bit Layout ``` β”‚ 15 14 13 12 11 10 9 8 7 6 5 4 β”‚ 3 2 1 0 β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ internal_register β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` #### πŸ”§ Operands | Name | Type | Bits | Description | |:-----|:-----|:-----|:------------| | `opcode` | opcode | 15-4 | The opcode determines what type of operation occurs | | `internal_register` | enum | 3-0 | The CPU internal register

**Values:**
- `STS` (`0001`):
- `PID` (`0006`):
- `PIE` (`0007`):
| #### πŸ“š Examples ##### MCL STS (150201β‚ˆ) [ (A) = 000100β‚ˆ ] Clear the carry flag (bit 6) in the status (STS) register. ``` MCL STS ``` -------------------------------------------------------------------------------- ### MIN #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | `MIN ` | | Category | Memory Transfer - Store Instruction | | Privilege | User | | Mask | `1111_1000_0000_0000` | #### πŸ“ Description Memory increment and skip next instruction if zero (EA): = (EA) + 1 (ea) ⟡ (ea) + 1 (P) ⟡ (P) + 2 IF new (ea) = 0 The contents of the memory location pointed to by the effective address are incremented by one. If the new memory location when incremented becomes zero, the next instruction is skipped. #### πŸ“‹ Format ``` MIN ``` #### Bit Layout ``` β”‚ 15 14 13 12 11β”‚ 10 9 8 β”‚ 7 6 5 4 3 2 1 0 β”‚ β”‚ β”‚ X I B β”‚ β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ addressing_mode β”‚ displacement β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` > **Note:** This instruction uses addressing modes. See [Addressing Modes](#addressing-modes) for details. #### πŸ”§ Operands | Name | Type | Bits | Description | |:-----|:-----|:-----|:------------| | `opcode` | opcode | 15-11 | The opcode determines what type of operation occurs | | `addressing_mode` | addressing_modes | 10-8 | These three bits give the addressing mode for the instruction | | `displacement` | displacement | 7-0 | 8-bit signed field gives the memory address displacement (2's complement notation giving a displacement range of -128 to 127 memory locations) | -------------------------------------------------------------------------------- ### MIX3 #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | `MIX3` | | Category | Register Operations | | Privilege | User | | Mask | `1111_1111_1111_1111` | #### πŸ“ Description Multiply index by 3. (X) ⟡ [(A)-1] * 3 Take the contents of the A register as an operand and subtract one. Multiply the result by three and place it in the X register. #### πŸ“‹ Format ``` MIX3 ``` #### Bit Layout ``` β”‚ 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` #### πŸ”§ Operands | Name | Type | Bits | Description | |:-----|:-----|:-----|:------------| | `opcode` | opcode | 15-0 | The opcode determines what type of operation occurs | -------------------------------------------------------------------------------- ### MON #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | `MON ` | | Category | Monitor Calls | | Privilege | User | | Mask | `1111_1111_0000_0000` | #### πŸ“ Description The MON instruction is used in special different contexts when running under an operating system. It provides system call functionality through different monitor call numbers. #### πŸ“š Detailed Information The unsigned allows 256 monitor calls. This field is loaded into the T register on level 14. The higher byte of the T register is sign exended. #### πŸ“‹ Format ``` MON ``` #### Bit Layout ``` β”‚ 15 14 13 12 11 10 9 8 β”‚ 7 6 5 4 3 2 1 0 β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ monitor_call_number β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` #### πŸ”§ Operands | Name | Type | Bits | Description | |:-----|:-----|:-----|:------------| | `opcode` | opcode | 15-8 | The opcode determines what type of operation occurs | | `monitor_call_number` | numeric | 7-0 | Monitor call number that determines the system function | #### πŸ“š Examples ##### End of program or stop ``` MON 0 ``` ##### Read a character from specified device into the A register ``` MON 1 ``` ##### Output the character contained in the A register on the specified device ``` MON 2 ``` -------------------------------------------------------------------------------- ### MOVB #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | `MOVB` | | Category | Byte Instructions | | Privilege | User | | Mask | `1111_1111_1111_1111` | #### πŸ“ Description Move byte. This instruction moves a block of bytes from the memory location addressed by the source operand to that of the memory location addressed by the destination operand. After execution, bit 15 of the D and T registers point to the end of the field that has been moved. The field length of the D register (source) equals zero and the T register (destination) field length is equal to the number of bytes moved. #### πŸ“‹ Format ``` MOVB ``` #### Bit Layout ``` β”‚ 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` #### πŸ”§ Operands | Name | Type | Bits | Description | |:-----|:-----|:-----|:------------| | `opcode` | opcode | 15-0 | The opcode determines what type of operation occurs | -------------------------------------------------------------------------------- ### MOVBF #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | `MOVBF` | | Category | Byte Instructions | | Privilege | User | | Mask | `1111_1111_1111_1111` | #### πŸ“ Description Move bytes forward. This instruction moves a block of bytes from the memory location addressed by the source operand to that of the memory location addressed by the destination operand. After execution, bit 15 of the D and T registers point to the end of the field that has been moved. The field length of the D register (source) equals zero and the T register (destination) field length is equal to the number of bytes moved. #### πŸ“‹ Format ``` MOVBF ``` #### Bit Layout ``` β”‚ 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` #### πŸ”§ Operands | Name | Type | Bits | Description | |:-----|:-----|:-----|:------------| | `opcode` | opcode | 15-0 | The opcode determines what type of operation occurs | -------------------------------------------------------------------------------- ### MOVEW #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | `MOVEW` | | Category | Word Block Instructions | | Privilege | User | | Mask | `1111_1111_1111_1000` | #### πŸ“ Description Word block move. This instruction moves a block of words from one area of memory to another. The type of transfer is determined by the opcode field ΔΔ, with the base octal code 1431ΔΔ. ``` β”Œβ”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ Ξ”Ξ”β‚ˆ β”‚ move from: β”‚ move to: β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ 00β‚ˆ β”‚ PT β”‚ PT β”‚ β”‚ 01β‚ˆ β”‚ PT β”‚ APT β”‚ β”‚ 02β‚ˆ β”‚ PT β”‚ phy.memory* β”‚ β”‚ 03β‚ˆ β”‚ APT β”‚ PT β”‚ β”‚ 04β‚ˆ β”‚ APT β”‚ APT β”‚ β”‚ 05β‚ˆ β”‚ APT β”‚ phy.memory* β”‚ β”‚ 06β‚ˆ β”‚ phy.memory β”‚ PT* β”‚ β”‚ 07β‚ˆ β”‚ phy.memory β”‚ APT* β”‚ β”‚ 10β‚ˆ β”‚ phy.memory β”‚ phy.memory* β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` * = privileged instruction PT = normal page table APT = alternative page table phy.memory = physical memory The following registers control the transfer: - A and D: source address - X and T: destination address - L: number of words to be moved (maximum 2048 words) For physical memory-block moves, A and/or X are incremented when D and/or T overflow. If the L register contains a value greater than 2048 (L = 4000β‚ˆ), no words are moved and A, D, T, and X remain unchanged. After transfer, the registers contain: - A, D, T, X: addresses after the last moved word - L: zero Special cases: If the memory management system is off (bit PTM of the STS register is zero), bank 0 of physical memory is addressed and the following transfer fields become equivalent: - ΔΔ = 00 = 01 = 03 = 04 - ΔΔ = 02 = 05 - ΔΔ = 06 = 07 MOVEW can be interrupted. L, A, D, X, T, and P registers are then changed to restart execution. #### πŸ“‹ Format ``` MOVEW ``` #### Bit Layout ``` β”‚ 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` -------------------------------------------------------------------------------- ### MPY #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | `MPY ` | | Category | Arithmetic and Logical | | Privilege | User | | Mask | `1111_1000_0000_0000` | #### πŸ“ Description Multiply integer A ⟡ A * (EL) Multiply the contents of the memory location pointed to by the effective address with the contents of the A register, leaving the result in A. #### πŸ“š Detailed Information **Flags affected** O ⟡ 1; Q ⟡ 1 If an overflow occurs, that is if the result has an absolute value greater than decimal 32767 #### πŸ“‹ Format ``` MPY ``` #### Bit Layout ``` β”‚ 15 14 13 12 11β”‚ 10 9 8 β”‚ 7 6 5 4 3 2 1 0 β”‚ β”‚ β”‚ X I B β”‚ β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ addressing_mode β”‚ displacement β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` > **Note:** This instruction uses addressing modes. See [Addressing Modes](#addressing-modes) for details. #### πŸ”§ Operands | Name | Type | Bits | Description | |:-----|:-----|:-----|:------------| | `opcode` | opcode | 15-11 | The opcode determines what type of operation occurs | | `addressing_mode` | addressing_modes | 10-8 | These three bits give the addressing mode for the instruction | | `displacement` | displacement | 7-0 | 8-bit signed field gives the memory address displacement (2's complement notation giving a displacement range of -128 to 127 memory locations) | #### 🚩 Flags Affected | Flag | Description | |:-----|:------------| | `O` | Static overflow flag | | `Q` | Dynamic overflow flag | -------------------------------------------------------------------------------- ### MST #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | `MST ` | | Category | Register Transfer | | Privilege | Privileged | | Mask | `1111_1111_1111_0000` | #### πŸ“ Description Masked set The A register is used as a mask to set bits within the selected internal register. Setting a bit in the A register sets the corresponding bit in the internal register. See table for internal registers that allow MST. #### πŸ“‹ Format ``` MST ``` #### Bit Layout ``` β”‚ 15 14 13 12 11 10 9 8 7 6 5 4 β”‚ 3 2 1 0 β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ internal_register β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` #### πŸ”§ Operands | Name | Type | Bits | Description | |:-----|:-----|:-----|:------------| | `opcode` | opcode | 15-4 | The opcode determines what type of operation occurs | | `internal_register` | enum | 3-0 | The CPU internal register

**Values:**
- `STS` (`0001`):
- `PID` (`0006`):
- `PIE` (`0007`):
| -------------------------------------------------------------------------------- ### NLZ #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | `NLZ ` | | Category | Floating Conversion (Standard Format) | | Privilege | User | | Mask | `1111_1111_0000_0000` | #### πŸ“ Description Normalize Convert the number in A to a floating number in TAD #### πŸ“š Detailed Information The number in the A register is converted to its floating point equivalent in the floating point accumulator (A and D registers), using the scaling factor given, For integers, a scaling factor of +16 will give a floating point number with the same value as the integer. The larger the scaling factor, the larger the Ploating point number. The D register will be cleared when using single precision fixed point numbers. Comments on 48-bit floating point CP For the ND-110, 48-bit floating point CPU option, a further register (T) and memory location fea + 2) are used. In this case, the T register is linked to location ea, A to ea + 1 and D to ea + 2. How to test for a 32-bit or 48-bit floating point CPU: SAT 0 SAA 1 NLZ 20 This tests whether T is changed, if so, the CPU is 48-bit; otherwise it is 32-bit. #### πŸ“‹ Format ``` NLZ ``` #### Bit Layout ``` β”‚ 15 14 13 12 11 10 9 8 β”‚ 7 6 5 4 3 2 1 0 β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ scaling_factor β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` #### πŸ”§ Operands | Name | Type | Bits | Description | |:-----|:-----|:-----|:------------| | `opcode` | opcode | 15-8 | The opcode for floating conversion | | `scaling_factor` | numeric | 7-0 | Scaling factor in range -128 to 127 (gives converting range from 10^-39 to 10^39) | #### πŸ“š Examples ##### Convert the number in A to a floating number in TAD ``` NLZ ``` ##### Integer to floating conversation ``` NLZ +20 ``` -------------------------------------------------------------------------------- ### OPCOM #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | `OPCOM` | | Category | Interrupt Control Instructions | | Privilege | Privileged | | Mask | `1111_1111_1111_1111` | #### πŸ“ Description Operator Communication This instruction is PRIVILEGED and only available to: - programs running in system mode (rings 2-3) - programs running without memory protection This instruction allows the programmer to use a terminal in direct communication with the CPU board. When the CPU is running, MOPC can be used to read input from the console. This is the software equivalent to pressing the OPCOM button on the control panel of the ND-110. #### πŸ“‹ Format ``` OPCOM ``` #### Bit Layout ``` β”‚ 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` #### πŸ”§ Operands | Name | Type | Bits | Description | |:-----|:-----|:-----|:------------| | `opcode` | opcode | 15-0 | The opcode determines what type of operation occurs | -------------------------------------------------------------------------------- ### ORA #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | `ORA ` | | Category | Arithmetic and Logical | | Privilege | User | | Mask | `1111_1000_0000_0000` | #### πŸ“ Description Logical inclusive OR to A register A ⟡ A | (EA) Perform a bitwise OR operation between the contents of the A register and the contents of the memory location pointed to by the effective address, leaving the result in A. #### πŸ“‹ Format ``` ORA ``` #### Bit Layout ``` β”‚ 15 14 13 12 11β”‚ 10 9 8 β”‚ 7 6 5 4 3 2 1 0 β”‚ β”‚ β”‚ X I B β”‚ β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ addressing_mode β”‚ displacement β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` > **Note:** This instruction uses addressing modes. See [Addressing Modes](#addressing-modes) for details. #### πŸ”§ Operands | Name | Type | Bits | Description | |:-----|:-----|:-----|:------------| | `opcode` | opcode | 15-11 | The opcode determines what type of operation occurs | | `addressing_mode` | addressing_modes | 10-8 | These three bits give the addressing mode for the instruction | | `displacement` | displacement | 7-0 | 8-bit signed field gives the memory address displacement (2's complement notation giving a displacement range of -128 to 127 memory locations) | -------------------------------------------------------------------------------- ### PACK #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | `PACK` | | Category | Decimal Instructions | | Privilege | User | | Mask | `1111_1111_1111_1111` | #### πŸ“ Description Convert to BCD. (op2) ⟡ (op1) in BCD format Convert the first operand from its ASCII format to BCD format, placing the result in the second operand location. **Conversion process:** PACK carries out the following steps: 1. Checks the sign and digits of the operand (op1) are encoded as ASCII digits. (Reporting illegal codes as error code 2.) 2. Takes the 4 least significant bits of each ASCII digit as the equivalent BCD digit. 3. Converts the ASCII sign of the operand to BCD: ASCII BCD Sign 53β‚ˆ 14β‚ˆ + 55β‚ˆ 15β‚ˆ - Note: If bit 13 of the descriptor D2 is set, then the code 17β‚ˆ (BCD unsigned) is used. 4. Extends the second operand field (op2) with zeros if the result is too small to fill the field. Reports overflow has occurred (error code 3) if the second operand field length is too short to contain the significant digits of the result (the remaining digits are ignored). **Error code:** An error code is placed in bits 0 to 4 of the D register if an illegal code conversion is attempted or if overflow occurs. The first detected error will be reported. Error code: 2 illegal code† 3 overflow † bit 15 of both the A and D registers point to the byte containing the illegal code. #### πŸ“‹ Format ``` PACK ``` #### Bit Layout ``` β”‚ 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` #### πŸ”§ Operands | Name | Type | Bits | Description | |:-----|:-----|:-----|:------------| | `opcode` | opcode | 15-0 | The opcode determines what type of operation occurs | -------------------------------------------------------------------------------- ### PIOF #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | `PIOF` | | Category | Memory Management Instructions | | Privilege | Privileged | | Mask | `1111_1111_1111_1111` | #### πŸ“ Description Memory management and interrupt system OFF Disables both the memory management and interrupt systems. This combines the functions of the IOF and POF instructions. Before_use: Check conditions of the IOF instruction. #### πŸ“‹ Format ``` PIOF ``` #### Bit Layout ``` β”‚ 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` #### πŸ”§ Operands | Name | Type | Bits | Description | |:-----|:-----|:-----|:------------| | `opcode` | opcode | 15-0 | The opcode determines what type of operation occurs | -------------------------------------------------------------------------------- ### PION #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | `PION` | | Category | Memory Management Instructions | | Privilege | User | | Mask | `1111_1111_1111_1111` | #### πŸ“ Description Memory management and interrupt system ON Enable both the memory management and interrupt systems. This combines the functions of the ION and PON instructions. #### πŸ“‹ Format ``` PION ``` #### Bit Layout ``` β”‚ 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` #### πŸ”§ Operands | Name | Type | Bits | Description | |:-----|:-----|:-----|:------------| | `opcode` | opcode | 15-0 | The opcode determines what type of operation occurs | -------------------------------------------------------------------------------- ### POF #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | `POF` | | Category | Interrupt Control Instructions | | Privilege | Privileged | | Mask | `1111_1111_1111_1111` | #### πŸ“ Description Memory management OFF Disable memory management system. The next instruction will be taken from a physical address given by the address following the POF instruction. Note: The CPU will be in an unrestricted mode without any hardware protection features - all instructions are legal and all memory accessible. #### πŸ“‹ Format ``` POF ``` #### Bit Layout ``` β”‚ 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` #### πŸ”§ Operands | Name | Type | Bits | Description | |:-----|:-----|:-----|:------------| | `opcode` | opcode | 15-0 | The opcode determines what type of operation occurs | -------------------------------------------------------------------------------- ### PON #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | `PON` | | Category | Memory Management Instructions | | Privilege | User | | Mask | `1111_1111_1111_1111` | #### πŸ“ Description Memory management ON Enable memory management system. The next instruction after PON will then use the pageindex table specified by PCR. BEFORE USE ENSURE: - Interrupt system is enabled, - Internal hardware interrupts are enabled, - Page tables and PCR registers are initialized. #### πŸ“‹ Format ``` PON ``` #### Bit Layout ``` β”‚ 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` #### πŸ”§ Operands | Name | Type | Bits | Description | |:-----|:-----|:-----|:------------| | `opcode` | opcode | 15-0 | The opcode determines what type of operation occurs | -------------------------------------------------------------------------------- ### RADD #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | `RADD [sub-instruction(s)] ` | | Category | Register Operations | | Privilege | User | | Mask | `1111_1100_0000_0000` | #### πŸ“ Description Add source to destination (dr): = (dr) + (sr) #### πŸ“š Detailed Information These instructions specify operations between source (sr) and destination (dr) registers. Optional sub-instructions: - **CLD**: CLD=1. Zero is used instead of the destination register as an operand (dr register contents are unchanged). - **CM1**: CM1=1. The 1's complement of the source register is used as an operand (sr register contents are unchanged). - **ADC**: This mnemonic represents C=0 I=1. Add previous carry to destination register. - **AD1**: This mnemonic represents C=1 I=0. Add 1 to destination register. - **CM2**: This compound sub-instruction is equivalent to CM1 ADC. Flags affected: RADD instructions affect the carry (C) and overflow (O and Q) flags as follows: - **C = 1**: If a carry occurs from the signed bit positions of the adder. - **O = 1 ; Q = 1**: If an overflow occurs, that is if the signs of the two operands are equal and the sign of the result is different. - **O = 1 ; Q = 0**: If overflow does not exist, the dynamic overflow flag (O) is reset while the static overflow flag (Q) is left unchanged. --- ### Instruction combinations COPY RADD dr ⟡ dr + sr RADD CLD dr ⟡ sr ≑ COPY RADD CM1 dr ⟡ dr + ~sr RADD CM1 CLD dr ⟡ ~sr RADD AD1 dr ⟡ dr + sr + 1 RADD CLD AD1 dr ⟡ sr + 1 RADD CM1 AD1 dr ⟡ dr - sr ≑ RSUB RADD CM1 CLD AD1 dr ⟡ -sr RADD ADC dr ⟡ dr + sr + c RADD CLD ADC dr ⟡ sr + c RADD CM1 ADC dr ⟡ dr + ~sr + c RADD CM1 CLD ADC dr ⟡ ~sr + c RINC RADD AD1 is equivalent to RINC , increment dr register by one. RDCR RADD CM1 is equivalent to RDCR , decrement dr register by one. RCLR RADD CLD 0 (COPY 0) is equivalent to RCLR , register clear. EXIT RADD CM1 SL DP (COPY SL DP) is equivalent to EXIT, return from subroutine. #### πŸ“‹ Format ``` RADD [sub-instruction(s)] ``` #### Bit Layout ``` β”‚ 15 14 13 12 11β”‚ 10 β”‚ 9 β”‚ 8 β”‚ 8 7 β”‚ 7 β”‚ 6 β”‚ 5 4 3 β”‚ 2 1 0 β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ rad β”‚ ADC β”‚ AD1 β”‚ CM2 β”‚ CM1 β”‚ CLD β”‚ source β”‚ destination β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` #### πŸ”§ Operands | Name | Type | Bits | Description | |:-----|:-----|:-----|:------------| | `opcode` | opcode | 15-11 | The opcode for register inclusive OR | | `rad` | constant | 10 | Arithmetic operation flag | | `ADC` | flag | 9 | Also addd old carry to destination | | `AD1` | flag | 8 | Also add one to destination | | `CM1` | flag | 7 | Use one's complement of source | | `CM2` | flag | 8-7 | Two's complement (CM1 AD1) | | `CLD` | flag | 6 | Clear destination before operation | | `source` | enum | 5-3 | Source register (sr)

**Values:**
- `SD` (`000010`): D register as source
- `SP` (`000020`): P register as source
- `SB` (`000030`): B register as source
- `SL` (`000040`): L register as source
- `SA` (`000050`): A register as source
- `ST` (`000060`): T register as source
- `SX` (`000070`): X register as source
- `ZERO` (`000000`): Source value equals zero
| | `destination` | enum | 2-0 | Destination register (dr)

**Values:**
- `DD` (`000001`): D register as destination
- `DP` (`000002`): P register as destination
- `DB` (`000003`): B register as destination
- `DL` (`000004`): L register as destination
- `DA` (`000005`): A register as destination
- `DT` (`000006`): T register as destination
- `DX` (`000007`): X register as destination
| #### 🚩 Flags Affected | Flag | Description | |:-----|:------------| | `C` | Carry flag | | `O` | Static overflow flag | | `Q` | Dynamic overflow flag | #### πŸ“š Examples ##### Add the contents of the B register to the contents of the A register, leaving the result in the A register. ``` RADD SB DA ``` ##### Add the contents of the A and X registers together and place the result in the X register. (146057β‚ˆ) ``` RADD SA DX ``` ##### Use zero as the destination operand, add the X register contents and leave the result in B. THAT IS copy the contents of the X register into B. (146173β‚ˆ) Equivalent to COPY SX DB. ``` RADD CLD SX DB ``` ##### Copy the negative value of the X register contents into B. (146773β‚ˆ) Equivalent to COPY CLD AD1 or RSUB CM1. ``` RADD CM1 CLD AD1 SX DB ``` -------------------------------------------------------------------------------- ### RAND #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | `RAND [sub-instruction(s)] ` | | Category | Register Operations | | Privilege | User | | Mask | `1111_1111_1100_0000` | #### πŸ“ Description Logical AND to destination (dr): = (dr) & (sr) #### πŸ“š Detailed Information Optional sub-instructions: - **CLD=1**: Zero is used instead of the destination register as an operand (dr register contents are unchanged). - **CM1=1**: The 1's complement of the source register is used as an operand (sr register contents are unchanged). --- ### Instruction combinations RAND dr ⟡ dr AND sr RAND CLD dr ⟡ 0 RAND CM1 dr ⟡ dr AND ~sr RAND CM1 CLD dr ⟡ 0 #### πŸ“‹ Format ``` RAND [sub-instruction(s)] ``` #### Bit Layout ``` β”‚ 15 14 13 12 11β”‚ 10 β”‚ 9 β”‚ 8 β”‚ 8 7 β”‚ 7 β”‚ 6 β”‚ 5 4 3 β”‚ 2 1 0 β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ rad β”‚ ADC β”‚ AD1 β”‚ CM2 β”‚ CM1 β”‚ CLD β”‚ source β”‚ destination β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` #### πŸ”§ Operands | Name | Type | Bits | Description | |:-----|:-----|:-----|:------------| | `opcode` | opcode | 15-11 | The opcode for register inclusive OR | | `rad` | constant | 10 | Logical operation flag | | `ADC` | flag | 9 | Also addd old carry to destination | | `AD1` | flag | 8 | Also add one to destination | | `CM1` | flag | 7 | Use one's complement of source | | `CM2` | flag | 8-7 | Two's complement (CM1 AD1) | | `CLD` | flag | 6 | Clear destination before operation | | `source` | enum | 5-3 | Source register (sr)

**Values:**
- `SD` (`000010`): D register as source
- `SP` (`000020`): P register as source
- `SB` (`000030`): B register as source
- `SL` (`000040`): L register as source
- `SA` (`000050`): A register as source
- `ST` (`000060`): T register as source
- `SX` (`000070`): X register as source
- `ZERO` (`000000`): Source value equals zero
| | `destination` | enum | 2-0 | Destination register (dr)

**Values:**
- `DD` (`000001`): D register as destination
- `DP` (`000002`): P register as destination
- `DB` (`000003`): B register as destination
- `DL` (`000004`): L register as destination
- `DA` (`000005`): A register as destination
- `DT` (`000006`): T register as destination
- `DX` (`000007`): X register as destination
| #### πŸ“š Examples ##### AND the contents of the L and X registers. Store the result in the X register. (144447β‚ˆ) ``` RAND SL DX ``` ##### AND the contents of the T and B registers, taking the 1's complement of the sr as the source operand. (144663β‚ˆ) Result in B. ``` RAND CM1 ST DB ``` -------------------------------------------------------------------------------- ### RCLR #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | `RCLR ` | | Category | Register Operations | | Privilege | User | | Mask | `1111_1111_1111_1000` | #### πŸ“ Description Register clear #### πŸ“š Detailed Information RCLR is a compound mnemonic for "COPY 0" (or RADD CLD 0). #### πŸ“‹ Format ``` RCLR ``` #### Bit Layout ``` β”‚ 15 14 13 12 11 10 9 8 7 6 5 4 β”‚ 2 1 0 β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ destination β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` #### πŸ”§ Operands | Name | Type | Bits | Description | |:-----|:-----|:-----|:------------| | `opcode` | opcode | 15-4 | The opcode for register arithmetic | | `destination` | enum | 2-0 | Destination register (dr)

**Values:**
- `DD` (`000001`): D register as destination
- `DP` (`000002`): P register as destination
- `DB` (`000003`): B register as destination
- `DL` (`000004`): L register as destination
- `DA` (`000005`): A register as destination
- `DT` (`000006`): T register as destination
- `DX` (`000007`): X register as destination
| #### 🚩 Flags Affected | Flag | Description | |:-----|:------------| | `C` | Carry flag | | `O` | Static overflow flag | | `Q` | Dynamic overflow flag | #### πŸ“š Examples ##### Clear the contents of the A register. ``` RCLR DA ``` -------------------------------------------------------------------------------- ### RDCR #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | `RDCR ` | | Category | Register Operations | | Privilege | User | | Mask | `1111_1111_1111_1000` | #### πŸ“ Description Register decrement dr ⟡ dr - 1 RDCR is a compound mnemonic for RADD CM1. #### πŸ“‹ Format ``` RDCR ``` #### Bit Layout ``` β”‚ 15 14 13 12 11 10 9 8 7 6 5 4 β”‚ 2 1 0 β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ destination β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` #### πŸ”§ Operands | Name | Type | Bits | Description | |:-----|:-----|:-----|:------------| | `opcode` | opcode | 15-4 | The opcode for register arithmetic | | `destination` | enum | 2-0 | Destination register (dr)

**Values:**
- `DD` (`000001`): D register as destination
- `DP` (`000002`): P register as destination
- `DB` (`000003`): B register as destination
- `DL` (`000004`): L register as destination
- `DA` (`000005`): A register as destination
- `DT` (`000006`): T register as destination
- `DX` (`000007`): X register as destination
| #### 🚩 Flags Affected | Flag | Description | |:-----|:------------| | `C` | Carry flag | | `O` | Static overflow flag | | `Q` | Dynamic overflow flag | #### πŸ“š Examples ##### Decrement the contents of the B register by one. (146203β‚ˆ) ``` RDCR DB ``` -------------------------------------------------------------------------------- ### RDIV #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | `RDIV ` | | Category | Register Operations | | Privilege | User | | Mask | `1111_1111_1100_0000` | #### πŸ“ Description Divide double accumulator with source; quotient in A, remainder in D A: = AD/(sr) (AD = A * (sr) + D) #### πŸ“š Detailed Information The 32-bit signed integer held in the double accumulator AD is divided by the contents of sr. If division causes overflow, the error flag (Z) is set. The numbers are fixed point integers with the fixed point after the rightmost position. #### πŸ“‹ Format ``` RDIV ``` #### Bit Layout ``` β”‚ 15 14 13 12 11 10 9 8 7 6 β”‚ 5 4 3 β”‚ 2 1 0 β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ source β”‚ destination β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` #### πŸ”§ Operands | Name | Type | Bits | Description | |:-----|:-----|:-----|:------------| | `opcode` | opcode | 15-6 | The opcode for register arithmetic | | `source` | enum | 5-3 | Source register (sr)

**Values:**
- `SD` (`000010`): D register as source
- `SP` (`000020`): P register as source
- `SB` (`000030`): B register as source
- `SL` (`000040`): L register as source
- `SA` (`000050`): A register as source
- `ST` (`000060`): T register as source
- `SX` (`000070`): X register as source
- `ZERO` (`000000`): Source value equals zero
| | `destination` | enum | 2-0 | Destination register (dr)

**Values:**
- `DD` (`000001`): D register as destination
- `DP` (`000002`): P register as destination
- `DB` (`000003`): B register as destination
- `DL` (`000004`): L register as destination
- `DA` (`000005`): A register as destination
- `DT` (`000006`): T register as destination
- `DX` (`000007`): X register as destination
| #### 🚩 Flags Affected | Flag | Description | |:-----|:------------| | `Z` | Error flag | | `C` | Carry flag | | `O` | Static overflow flag | | `Q` | Dynamic overflow flag | -------------------------------------------------------------------------------- ### RDUS #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | `RDUS` | | Category | Memory Examine and Test Instructions | | Privilege | Privileged | | Mask | `1111_1111_1111_1111` | #### πŸ“ Description Read a word without using cache (T) points to the virtual memory word to be accessed (A) ⟡ memory word addressed by T The address given by the T register is a logical memory address. It is normally translated into a physical address using page tables (if the memory management system is on). The contents of the location addressed by T are loaded into the A register. The old content of the memory address is always read from the memory and never from cache. The execution time of this instruction includes two read bus cycles (semaphore cycles – see ND-110 Functional Description Manual ND.06.027). #### πŸ“‹ Format ``` RDUS ``` #### Bit Layout ``` β”‚ 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` #### πŸ”§ Operands | Name | Type | Bits | Description | |:-----|:-----|:-----|:------------| | `opcode` | opcode | 15-0 | The opcode determines what type of operation occurs | -------------------------------------------------------------------------------- ### RDUSP #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | `RDUSP` | | Category | Control Instructions | | Privilege | Privileged | | Mask | `1111_1111_1111_1111` | #### πŸ“ Description Read a physical memory word without using cache. (T) points to the physical memory bank to be accessed (X) points to the address within the bank (A) is loaded with the memory word The old content of the memory address is always read from the memory and never from cache. Note: The execution time of this instruction includes two read-bus cycles (The CPU uses semaphore cycles - see ND-110 Functional Description Manual ND.06.027) #### πŸ“‹ Format ``` RDUSP ``` #### Bit Layout ``` β”‚ 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` #### πŸ”§ Operands | Name | Type | Bits | Description | |:-----|:-----|:-----|:------------| | `opcode` | opcode | 15-0 | The opcode determines what type of operation occurs | -------------------------------------------------------------------------------- ### REMPL #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | `REMPL` | | Category | Control Instructions | | Privilege | Privileged | | Mask | `1111_1111_1111_1111` | #### πŸ“ Description Remove page from page list. #### πŸ“‹ Format ``` REMPL ``` #### Bit Layout ``` β”‚ 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` #### πŸ”§ Operands | Name | Type | Bits | Description | |:-----|:-----|:-----|:------------| | `opcode` | opcode | 15-0 | The opcode determines what type of operation occurs | -------------------------------------------------------------------------------- ### REPT #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | `REPT` | | Category | Control Instructions | | Privilege | Privileged | | Mask | `1111_1111_1111_1111` | #### πŸ“ Description Enter reentrant segment in page tables. (See Appendix B for a software description.) #### πŸ“‹ Format ``` REPT ``` #### Bit Layout ``` β”‚ 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` #### πŸ”§ Operands | Name | Type | Bits | Description | |:-----|:-----|:-----|:------------| | `opcode` | opcode | 15-0 | The opcode determines what type of operation occurs | -------------------------------------------------------------------------------- ### REX #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | `REX` | | Category | Memory Management Instructions | | Privilege | Privileged | | Mask | `1111_1111_1111_1111` | #### πŸ“ Description Reset extended address mode #### πŸ“‹ Format ``` REX ``` #### Bit Layout ``` β”‚ 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` #### πŸ”§ Operands | Name | Type | Bits | Description | |:-----|:-----|:-----|:------------| | `opcode` | opcode | 15-0 | The opcode determines what type of operation occurs | -------------------------------------------------------------------------------- ### REXO #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | `REXO [flags] ` | | Category | Register Operations | | Privilege | User | | Mask | `1111_1111_1100_0000` | #### πŸ“ Description Logical exclusive OR (dr): = (dr) βŠ• (sr) #### πŸ“š Detailed Information Optional sub instructions: CLD=1 Zero is used instead of the destination register as an operand (dr register contents are unchanged). CM1=1 The 1's complement of the source register is used as an operand (sr register contents are unchanged). Instruction combinations: REXO dr ⟡ dr XOR sr REXO CLD dr ⟡ sr REXO CML dr ⟡ dr XOR sr's (1's complement) REXO CML CLD dr ⟡ sr (1's complement) #### πŸ“‹ Format ``` REXO [flags] ``` #### Bit Layout ``` β”‚ 15 14 13 12 11β”‚ 10 β”‚ 9 β”‚ 8 β”‚ 8 7 β”‚ 7 β”‚ 6 β”‚ 5 4 3 β”‚ 2 1 0 β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ rad β”‚ ADC β”‚ AD1 β”‚ CM2 β”‚ CM1 β”‚ CLD β”‚ source β”‚ destination β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` #### πŸ”§ Operands | Name | Type | Bits | Description | |:-----|:-----|:-----|:------------| | `opcode` | opcode | 15-11 | The opcode for register inclusive OR | | `rad` | constant | 10 | Logical operation flag | | `ADC` | flag | 9 | Also addd old carry to destination | | `AD1` | flag | 8 | Also add one to destination | | `CM1` | flag | 7 | Use one's complement of source | | `CM2` | flag | 8-7 | Two's complement (CM1 AD1) | | `CLD` | flag | 6 | Clear destination before operation | | `source` | enum | 5-3 | Source register (sr)

**Values:**
- `SD` (`000010`): D register as source
- `SP` (`000020`): P register as source
- `SB` (`000030`): B register as source
- `SL` (`000040`): L register as source
- `SA` (`000050`): A register as source
- `ST` (`000060`): T register as source
- `SX` (`000070`): X register as source
- `ZERO` (`000000`): Source value equals zero
| | `destination` | enum | 2-0 | Destination register (dr)

**Values:**
- `DD` (`000001`): D register as destination
- `DP` (`000002`): P register as destination
- `DB` (`000003`): B register as destination
- `DL` (`000004`): L register as destination
- `DA` (`000005`): A register as destination
- `DT` (`000006`): T register as destination
- `DX` (`000007`): X register as destination
| #### πŸ“š Examples ##### Exclusive OR the contents of the B and Y registers, leaving the result in B ``` REXO ST DB ``` -------------------------------------------------------------------------------- ### RGLOB #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | `RGLOB` | | Category | Control Instructions | | Privilege | Privileged | | Mask | `1111_1111_1111_1111` | #### πŸ“ Description Examine global pointers. (T) <--- bank number of segment table (STBNK) (A) <--- start address within bank (STSRT) (D) <--- bank number of core map table (CMBNK) #### πŸ“‹ Format ``` RGLOB ``` #### Bit Layout ``` β”‚ 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` #### πŸ”§ Operands | Name | Type | Bits | Description | |:-----|:-----|:-----|:------------| | `opcode` | opcode | 15-0 | The opcode determines what type of operation occurs | -------------------------------------------------------------------------------- ### RINC #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | `RINC ` | | Category | Register Operations | | Privilege | User | | Mask | `1111_1111_1111_1000` | #### πŸ“ Description Register increment dr ⟡ dr + 1 RINC is a compound mnemonic for RADD AD1. #### πŸ“‹ Format ``` RINC ``` #### Bit Layout ``` β”‚ 15 14 13 12 11 10 9 8 7 6 5 4 β”‚ 2 1 0 β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ destination β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` #### πŸ”§ Operands | Name | Type | Bits | Description | |:-----|:-----|:-----|:------------| | `opcode` | opcode | 15-4 | The opcode for register arithmetic | | `destination` | enum | 2-0 | Destination register (dr)

**Values:**
- `DD` (`000001`): D register as destination
- `DP` (`000002`): P register as destination
- `DB` (`000003`): B register as destination
- `DL` (`000004`): L register as destination
- `DA` (`000005`): A register as destination
- `DT` (`000006`): T register as destination
- `DX` (`000007`): X register as destination
| #### 🚩 Flags Affected | Flag | Description | |:-----|:------------| | `C` | Carry flag | | `O` | Static overflow flag | | `Q` | Dynamic overflow flag | #### πŸ“š Examples ##### Increment the contents of the A register by one. ``` RINC DA ``` -------------------------------------------------------------------------------- ### RMPY #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | `RMPY ` | | Category | Register Operations | | Privilege | User | | Mask | `1111_1111_1100_0000` | #### πŸ“ Description Multiply source with destination; result in double accumulator AD ⟡ (sr) * (dr) #### πŸ“š Detailed Information The sr and dr registers hold the two operands to be multiplied together. The result is a 32-bit signed integer held in the A and D register (the A register contains the 16 most significant bits). #### πŸ“‹ Format ``` RMPY ``` #### Bit Layout ``` β”‚ 15 14 13 12 11 10 9 8 7 6 β”‚ 5 4 3 β”‚ 2 1 0 β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ source β”‚ destination β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` #### πŸ”§ Operands | Name | Type | Bits | Description | |:-----|:-----|:-----|:------------| | `opcode` | opcode | 15-6 | The opcode for register arithmetic | | `source` | enum | 5-3 | Source register (sr)

**Values:**
- `SD` (`000010`): D register as source
- `SP` (`000020`): P register as source
- `SB` (`000030`): B register as source
- `SL` (`000040`): L register as source
- `SA` (`000050`): A register as source
- `ST` (`000060`): T register as source
- `SX` (`000070`): X register as source
- `ZERO` (`000000`): Source value equals zero
| | `destination` | enum | 2-0 | Destination register (dr)

**Values:**
- `DD` (`000001`): D register as destination
- `DP` (`000002`): P register as destination
- `DB` (`000003`): B register as destination
- `DL` (`000004`): L register as destination
- `DA` (`000005`): A register as destination
- `DT` (`000006`): T register as destination
- `DX` (`000007`): X register as destination
| #### 🚩 Flags Affected | Flag | Description | |:-----|:------------| | `C` | Carry flag | | `O` | Static overflow flag | | `Q` | Dynamic overflow flag | #### πŸ“š Examples ##### Multiply the contents of the A and X registers together, leaving the result in the A and D registers. ``` RMPY SA DX ``` -------------------------------------------------------------------------------- ### RORA #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | `RORA <sub-instruction(s)> ` | | Category | Register Operations | | Privilege | User | | Mask | `1111_1111_1100_0000` | #### πŸ“ Description OR register dr ⟡ dr OR sr #### πŸ“š Detailed Information Optional sub-instructions: - **CLD=1**: Zero is used instead of the destination register as an operand (dr register contents are unchanged). - **CM1=1**: The 1's complement of the source register is used as an operand (sr register contents are unchanged). --- ### Instruction combinations RORA dr ⟡ dr OR sr RORA CLD dr ⟡ sr RORA CM1 dr ⟡ dr OR ~sr RORA CM1 CLD dr ⟡ ~sr #### πŸ“‹ Format ``` RORA <sub-instruction(s)> ``` #### Bit Layout ``` β”‚ 15 14 13 12 11β”‚ 10 β”‚ 9 β”‚ 8 β”‚ 8 7 β”‚ 7 β”‚ 6 β”‚ 5 4 3 β”‚ 2 1 0 β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ rad β”‚ ADC β”‚ AD1 β”‚ CM2 β”‚ CM1 β”‚ CLD β”‚ source β”‚ destination β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` #### πŸ”§ Operands | Name | Type | Bits | Description | |:-----|:-----|:-----|:------------| | `opcode` | opcode | 15-11 | The opcode for register inclusive OR | | `rad` | constant | 10 | Logical operation flag | | `ADC` | flag | 9 | Also addd old carry to destination | | `AD1` | flag | 8 | Also add one to destination | | `CM1` | flag | 7 | Use one's complement of source | | `CM2` | flag | 8-7 | Two's complement (CM1 AD1) | | `CLD` | flag | 6 | Clear destination before operation | | `source` | enum | 5-3 | Source register (sr)

**Values:**
- `SD` (`000010`): D register as source
- `SP` (`000020`): P register as source
- `SB` (`000030`): B register as source
- `SL` (`000040`): L register as source
- `SA` (`000050`): A register as source
- `ST` (`000060`): T register as source
- `SX` (`000070`): X register as source
- `ZERO` (`000000`): Source value equals zero
| | `destination` | enum | 2-0 | Destination register (dr)

**Values:**
- `DD` (`000001`): D register as destination
- `DP` (`000002`): P register as destination
- `DB` (`000003`): B register as destination
- `DL` (`000004`): L register as destination
- `DA` (`000005`): A register as destination
- `DT` (`000006`): T register as destination
- `DX` (`000007`): X register as destination
| #### 🚩 Flags Affected | Flag | Description | |:-----|:------------| | `C` | Carry flag | | `O` | Static overflow flag | | `Q` | Dynamic overflow flag | #### πŸ“š Examples ##### OR the contents of the B and T registers leaving the result in B. (145463β‚ˆ) ``` RORA ST DB ``` -------------------------------------------------------------------------------- ### RSUB #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | `RSUB ` | | Category | Register Operations | | Privilege | User | | Mask | `1111_1111_1100_0000` | #### πŸ“ Description Register subtract dr ⟡ dr - sr RSUB is a compound mnemonic for RADD AD1 CM1 (or RADD CM2 using the AD1 CM2 compound mnemonic). #### πŸ“š Detailed Information The following sub-instruction is allowed: - **CLD** Note: Sometimes the RADD form will be more readable. #### πŸ“‹ Format ``` RSUB ``` #### Bit Layout ``` β”‚ 15 14 13 12 11β”‚ 10 β”‚ 9 β”‚ 8 β”‚ 8 7 β”‚ 7 β”‚ 6 β”‚ 5 4 3 β”‚ 2 1 0 β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ rad β”‚ ADC β”‚ AD1 β”‚ CM2 β”‚ CM1 β”‚ CLD β”‚ source β”‚ destination β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` #### πŸ”§ Operands | Name | Type | Bits | Description | |:-----|:-----|:-----|:------------| | `opcode` | opcode | 15-11 | The opcode for register inclusive OR | | `rad` | constant | 10 | Arithmetic operation flag | | `ADC` | flag | 9 | Also addd old carry to destination | | `AD1` | flag | 8 | Also add one to destination | | `CM1` | flag | 7 | Use one's complement of source | | `CM2` | flag | 8-7 | Two's complement (CM1 AD1) | | `CLD` | flag | 6 | Clear destination before operation | | `source` | enum | 5-3 | Source register (sr)

**Values:**
- `SD` (`000010`): D register as source
- `SP` (`000020`): P register as source
- `SB` (`000030`): B register as source
- `SL` (`000040`): L register as source
- `SA` (`000050`): A register as source
- `ST` (`000060`): T register as source
- `SX` (`000070`): X register as source
- `ZERO` (`000000`): Source value equals zero
| | `destination` | enum | 2-0 | Destination register (dr)

**Values:**
- `DD` (`000001`): D register as destination
- `DP` (`000002`): P register as destination
- `DB` (`000003`): B register as destination
- `DL` (`000004`): L register as destination
- `DA` (`000005`): A register as destination
- `DT` (`000006`): T register as destination
- `DX` (`000007`): X register as destination
| #### 🚩 Flags Affected | Flag | Description | |:-----|:------------| | `C` | Carry flag | | `O` | Static overflow flag | | `Q` | Dynamic overflow flag | #### πŸ“š Examples ##### Subtract the contents of the T register from the contents of the B register leaving the result in B. ``` RSUB ST DB ``` -------------------------------------------------------------------------------- ### SAA #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | `SAA ` | | Category | Argument Instruction | | Privilege | User | | Mask | `1111_1111_0000_0000` | #### πŸ“ Description Set argument to A #### πŸ“‹ Format ``` SAA ``` #### Bit Layout ``` β”‚ 15 14 13 12 11 10 9 8 β”‚ 7 6 5 4 3 2 1 0 β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ number β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` #### πŸ”§ Operands | Name | Type | Bits | Description | |:-----|:-----|:-----|:------------| | `opcode` | opcode | 15-8 | The opcode determines what type of operation occurs | | `number` | numeric | 7-0 | 8-bit argument extended to 16 bits using sign extension | #### 🚩 Flags Affected | Flag | Description | |:-----|:------------| | `C` | Carry flag | | `O` | Static overflow flag | #### πŸ“š Examples ##### Set the A register to 10. ``` SAA 10 ``` -------------------------------------------------------------------------------- ### SAB #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | `SAB ` | | Category | Argument Instruction | | Privilege | User | | Mask | `1111_1111_0000_0000` | #### πŸ“ Description Set argument to B #### πŸ“‹ Format ``` SAB ``` #### Bit Layout ``` β”‚ 15 14 13 12 11 10 9 8 β”‚ 7 6 5 4 3 2 1 0 β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ number β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` #### πŸ”§ Operands | Name | Type | Bits | Description | |:-----|:-----|:-----|:------------| | `opcode` | opcode | 15-8 | The opcode determines what type of operation occurs | | `number` | numeric | 7-0 | 8-bit argument extended to 16 bits using sign extension | #### 🚩 Flags Affected | Flag | Description | |:-----|:------------| | `C` | Carry flag | | `O` | Static overflow flag | #### πŸ“š Examples ##### The contents of the B register are set to 177752, bits 0-7 have been extended with ones as the argument is negative; bits 0-7 have the argument in its 2's complement form. ``` SAB -26 ``` -------------------------------------------------------------------------------- ### SACB #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | `SACB ` | | Category | Control Instructions | | Privilege | Privileged | | Mask | `1111_1111_1100_0111` | #### πŸ“ Description Store the A register in the core map table bank (CMBNK). (ea) <--- (A) ea = (B) + Ξ” = CMBNK entry Ξ”: 3-bit displacement added to B included in the instruction opcode (bits 5-3) #### πŸ“‹ Format ``` SACB ``` #### Bit Layout ``` β”‚ 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` -------------------------------------------------------------------------------- ### SAD #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | `SAD ` | | Category | Shift Instructions | | Privilege | User | | Mask | `1111_1001_1000_0000` | #### πŸ“ Description Shift A and D registers connected Every shift instruction places the last bit discarded in the multi-shift flag (M). M can be used as an inputfor the next shift instruction. M is bit 8 of the STS Register. #### πŸ“‹ Format ``` SAD ``` #### Bit Layout ``` β”‚ 15 14 13 12 11β”‚ 10 9 β”‚ β”‚ 6 β”‚ 5 4 3 2 1 0 β”‚ 0 β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ shift_type β”‚ register β”‚ mask6 β”‚ shift_counter β”‚ SHR β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` #### πŸ”§ Operands | Name | Type | Bits | Description | |:-----|:-----|:-----|:------------| | `opcode` | opcode | 15-11 | The opcode determines what type of operation occurs | | `shift_type` | enum | 10-9 |

**Values:**
- `Arithmetic` (`00`): Arithmetic shift. During right shift, bit 15 is extended. During left shift, zeros are shifted in from right.
- `ROT` (`01`): Rotational shift. Most and least significant bits are connected.
- `ZIN` (`10`): Zero end input
- `LIN` (`11`): Link end input. The last vacated bit is fed to M after every shift instruction.
| | `register` | enum | 7-8 | The register to shift | | `mask6` | numeric | 6 | Always 0 | | `SHR` | assembler_flag | 0 | This a feature of the assembler. This mnemonic can be used to specify shift right, so that instead of calculating the 2's complement for the number of right shifts required, SHR can be used. | | `shift_counter` | int6 | 5-0 | The number of bits to shift the register.
Bits 0-4 are the number of shifts.
Bit 5=1, then shift right (max 32 times)
Bit 5=0, then shift left (max 31 times)
| #### 🚩 Flags Affected | Flag | Description | |:-----|:------------| | `M` | Multi-shift link flag | -------------------------------------------------------------------------------- ### SASB #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | `SASB ` | | Category | Control Instructions | | Privilege | Privileged | | Mask | `1111_1111_1100_0111` | #### πŸ“ Description Store the A register contents in the segment table bank (STBNK). (ea) <--- (A) ea = (B) + Ξ” = STBNK entry Ξ”: 3-bit displacement added to B included in the instruction opcode (bits 5-3) #### πŸ“‹ Format ``` SASB ``` #### Bit Layout ``` β”‚ 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` -------------------------------------------------------------------------------- ### SAT #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | `SAT ` | | Category | Argument Instruction | | Privilege | User | | Mask | `1111_1111_0000_0000` | #### πŸ“ Description Set argument to T #### πŸ“‹ Format ``` SAT ``` #### Bit Layout ``` β”‚ 15 14 13 12 11 10 9 8 β”‚ 7 6 5 4 3 2 1 0 β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ number β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` #### πŸ”§ Operands | Name | Type | Bits | Description | |:-----|:-----|:-----|:------------| | `opcode` | opcode | 15-8 | The opcode determines what type of operation occurs | | `number` | numeric | 7-0 | 8-bit argument extended to 16 bits using sign extension | #### 🚩 Flags Affected | Flag | Description | |:-----|:------------| | `C` | Carry flag | | `O` | Static overflow flag | #### πŸ“š Examples ##### Set the T register to 20β‚ˆ. ``` SAT 20β‚ˆ ``` -------------------------------------------------------------------------------- ### SAX #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | `SAX ` | | Category | Argument Instruction | | Privilege | User | | Mask | `1111_1111_0000_0000` | #### πŸ“ Description Set argument to X #### πŸ“‹ Format ``` SAX ``` #### Bit Layout ``` β”‚ 15 14 13 12 11 10 9 8 β”‚ 7 6 5 4 3 2 1 0 β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ number β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` #### πŸ”§ Operands | Name | Type | Bits | Description | |:-----|:-----|:-----|:------------| | `opcode` | opcode | 15-8 | The opcode determines what type of operation occurs | | `number` | numeric | 7-0 | 8-bit argument extended to 16 bits using sign extension | #### 🚩 Flags Affected | Flag | Description | |:-----|:------------| | `C` | Carry flag | | `O` | Static overflow flag | #### πŸ“š Examples ##### Set the X register to -5. ``` SAX -5 ``` -------------------------------------------------------------------------------- ### SBIT #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | `SBIT` | | Category | Control Instructions | | Privilege | Privileged | | Mask | `1111_1111_1111_1111` | #### πŸ“ Description Store the single bit accumulator (K) in a logical memory bit. (X) points to the start of a bit array (A) points to the bit within the array #### πŸ“‹ Format ``` SBIT ``` #### Bit Layout ``` β”‚ 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` #### πŸ”§ Operands | Name | Type | Bits | Description | |:-----|:-----|:-----|:------------| | `opcode` | opcode | 15-0 | The opcode determines what type of operation occurs | -------------------------------------------------------------------------------- ### SBITP #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | `SBITP` | | Category | Control Instructions | | Privilege | Privileged | | Mask | `1111_1111_1111_1111` | #### πŸ“ Description Store the single bit accumulator (K) in a physical memory bit. (T) points to the bank number containing the bit array (X) points to the start of a bit array (A) points to the bit within the array #### πŸ“‹ Format ``` SBITP ``` #### Bit Layout ``` β”‚ 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` #### πŸ”§ Operands | Name | Type | Bits | Description | |:-----|:-----|:-----|:------------| | `opcode` | opcode | 15-0 | The opcode determines what type of operation occurs | -------------------------------------------------------------------------------- ### SBYT #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | `SBYT` | | Category | Byte Instructions | | Privilege | User | | Mask | `1111_1111_1111_1111` | #### πŸ“ Description Store byte from A register to memory Addressing: EL = (T) + (X)/2 - If least significant bit of X = 1: Store right byte - If least significant bit of X = 0: Store left byte The contents of T point to the beginning of a character string and the contents of X to a byte within the string. #### πŸ“‹ Format ``` SBYT ``` #### Bit Layout ``` β”‚ 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` #### πŸ”§ Operands | Name | Type | Bits | Description | |:-----|:-----|:-----|:------------| | `opcode` | opcode | 15-0 | The opcode determines what type of operation occurs | -------------------------------------------------------------------------------- ### SBYTP #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | `SBYTP` | | Category | Control Instructions | | Privilege | Privileged | | Mask | `1111_1111_1111_1111` | #### πŸ“ Description Store a byte in physical memory. (D) points to the bank number containing the byte array (T) points to the start of a byte array (X) points to the actual byte within the array #### πŸ“‹ Format ``` SBYTP ``` #### Bit Layout ``` β”‚ 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` #### πŸ”§ Operands | Name | Type | Bits | Description | |:-----|:-----|:-----|:------------| | `opcode` | opcode | 15-0 | The opcode determines what type of operation occurs | -------------------------------------------------------------------------------- ### SETPT #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | `SETPT` | | Category | Control Instructions | | Privilege | Privileged | | Mask | `1111_1111_1111_1111` | #### πŸ“ Description Set page tables. #### πŸ“š Detailed Information This instruction can replace the following instructions: SETPT: JXZ * 7β‚ˆ LDDTX 20β‚ˆ BSET ZRO 130β‚ˆ DA LDBTX 10β‚ˆ STD ,B LDXTX 00 JMP *-6β‚ˆ Each time the loop is executed (until X becomes zero) two consecutive physical memory locations addressed by X are loaded into the A and D registers. The word in A is the protect field of the page table, bit 11 (the PGU bit) is cleared to set the page table. The double word (in A and D) is then stored in two consecutive locations pointed to by the contents of the B register, the page table address. * is the mnemonic for P relative addressing. #### πŸ“‹ Format ``` SETPT ``` #### Bit Layout ``` β”‚ 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` #### πŸ”§ Operands | Name | Type | Bits | Description | |:-----|:-----|:-----|:------------| | `opcode` | opcode | 15-0 | The opcode determines what type of operation occurs | -------------------------------------------------------------------------------- ### SEX #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | `SEX` | | Category | Memory Management Instructions | | Privilege | Privileged | | Mask | `1111_1111_1111_1111` | #### πŸ“ Description Set extended address mode #### πŸ“š Detailed Information Set the paging system to the 24-bit address mode instead of the 19-bit address mode. (Creating a page table for 24-bit addresses) Flags affected: SEXI (bit 13 of the STS register) cleared #### πŸ“‹ Format ``` SEX ``` #### Bit Layout ``` β”‚ 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` #### πŸ”§ Operands | Name | Type | Bits | Description | |:-----|:-----|:-----|:------------| | `opcode` | opcode | 15-0 | The opcode determines what type of operation occurs | #### 🚩 Flags Affected | Flag | Description | |:-----|:------------| | `SEXI` | Memory management is in extended mode (24-bit address used, not 19 bit) | -------------------------------------------------------------------------------- ### SHA #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | `SHA ` | | Category | Shift Instructions | | Privilege | User | | Mask | `1111_1001_1000_0000` | #### πŸ“ Description Shift A register Every shift instruction places the last bit discarded in the multi-shift flag (M). M can be used as an inputfor the next shift instruction. M is bit 8 of the STS Register. #### πŸ“‹ Format ``` SHA ``` #### Bit Layout ``` β”‚ 15 14 13 12 11β”‚ 10 9 β”‚ β”‚ 6 β”‚ 5 4 3 2 1 0 β”‚ 0 β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ shift_type β”‚ register β”‚ mask6 β”‚ shift_counter β”‚ SHR β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` #### πŸ”§ Operands | Name | Type | Bits | Description | |:-----|:-----|:-----|:------------| | `opcode` | opcode | 15-11 | The opcode determines what type of operation occurs | | `shift_type` | enum | 10-9 |

**Values:**
- `Arithmetic` (`00`): Arithmetic shift. During right shift, bit 15 is extended. During left shift, zeros are shifted in from right.
- `ROT` (`01`): Rotational shift. Most and least significant bits are connected.
- `ZIN` (`10`): Zero end input
- `LIN` (`11`): Link end input. The last vacated bit is fed to M after every shift instruction.
| | `register` | enum | 7-8 | The register to shift | | `mask6` | numeric | 6 | Always 0 | | `SHR` | assembler_flag | 0 | This a feature of the assembler. This mnemonic can be used to specify shift right, so that instead of calculating the 2's complement for the number of right shifts required, SHR can be used. | | `shift_counter` | int6 | 5-0 | The number of bits to shift the register.
Bits 0-4 are the number of shifts.
Bit 5=1, then shift right (max 32 times)
Bit 5=0, then shift left (max 31 times)
| #### 🚩 Flags Affected | Flag | Description | |:-----|:------------| | `M` | Multi-shift link flag | -------------------------------------------------------------------------------- ### SHD #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | `SHD ` | | Category | Shift Instructions | | Privilege | User | | Mask | `1111_1001_1000_0000` | #### πŸ“ Description Shift D register Every shift instruction places the last bit discarded in the multi-shift flag (M). M can be used as an inputfor the next shift instruction. M is bit 8 of the STS Register. #### πŸ“‹ Format ``` SHD ``` #### Bit Layout ``` β”‚ 15 14 13 12 11β”‚ 10 9 β”‚ β”‚ 6 β”‚ 5 4 3 2 1 0 β”‚ 0 β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ shift_type β”‚ register β”‚ mask6 β”‚ shift_counter β”‚ SHR β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` #### πŸ”§ Operands | Name | Type | Bits | Description | |:-----|:-----|:-----|:------------| | `opcode` | opcode | 15-11 | The opcode determines what type of operation occurs | | `shift_type` | enum | 10-9 |

**Values:**
- `Arithmetic` (`00`): Arithmetic shift. During right shift, bit 15 is extended. During left shift, zeros are shifted in from right.
- `ROT` (`01`): Rotational shift. Most and least significant bits are connected.
- `ZIN` (`10`): Zero end input
- `LIN` (`11`): Link end input. The last vacated bit is fed to M after every shift instruction.
| | `register` | enum | 7-8 | The register to shift | | `mask6` | numeric | 6 | Always 0 | | `SHR` | assembler_flag | 0 | This a feature of the assembler. This mnemonic can be used to specify shift right, so that instead of calculating the 2's complement for the number of right shifts required, SHR can be used. | | `shift_counter` | int6 | 5-0 | The number of bits to shift the register.
Bits 0-4 are the number of shifts.
Bit 5=1, then shift right (max 32 times)
Bit 5=0, then shift left (max 31 times)
| #### 🚩 Flags Affected | Flag | Description | |:-----|:------------| | `M` | Multi-shift link flag | -------------------------------------------------------------------------------- ### SHDE #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | `SHDE` | | Category | Decimal Instructions | | Privilege | User | | Mask | `1111_1111_1111_1111` | #### πŸ“ Description Decimal shift. (op2) ⟡ (op1) shifted This instruction is used to normalize operands for decimal operations. The shift count determines whether the operand is shifted to the left or right: (op2 - op1) positive then shift op1 to right (op2 - op1) negative then shift op1 to left If significant digits are lost by carrying out a left shift, an error is generated, directing the program counter to the instruction after the SHDE (the error return). If no errors occur this instruction is skipped. The digits of the first operand are shifted and the result is placed in the second operand's memory location. The number of places shifted is given by the difference in decimal position of the two operands. This normalizes the first operand (op1) to the second (op2) for decimal operations such as ADDD. The sign of the normalized operand (op1) is as follows: BCD Sign 14β‚ˆ + 15β‚ˆ - An unsigned operand is converted to a plus unless bit 13 of the descriptor D2 is set, when the BCD equivalent of unsigned (17β‚ˆ) is used. The sign and digits of the first operand are checked before execution and any illegal digit codes reported. If bit 10 of descriptor D2 (op2) is set the result is rounded, that is a 1 is added to the operand if the last digit shifted out of the field is β‰₯ 5. **Instruction sequence:** SHDE error handling instruction next instruction after SHDE or after error handling routine **Example:** SHDE JMP *10β‚ˆ SAD 20β‚ˆ The SHDE instruction causes the program counter to skip the next instruction UNLESS an error has been generated, when the instruction immediately following the SHDE will handle the error in some way (in this example a jump is executed on error to (P) + 10β‚ˆ)). (* is the assembler mnemonic for the P register) #### πŸ“‹ Format ``` SHDE ``` #### Bit Layout ``` β”‚ 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` #### πŸ”§ Operands | Name | Type | Bits | Description | |:-----|:-----|:-----|:------------| | `opcode` | opcode | 15-0 | The opcode determines what type of operation occurs | -------------------------------------------------------------------------------- ### SHT #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | `SHT ` | | Category | Shift Instructions | | Privilege | User | | Mask | `1111_1001_1000_0000` | #### πŸ“ Description Shift T register Every shift instruction places the last bit discarded in the multi-shift flag (M). M can be used as an inputfor the next shift instruction. M is bit 8 of the STS Register. #### πŸ“‹ Format ``` SHT ``` #### Bit Layout ``` β”‚ 15 14 13 12 11β”‚ 10 9 β”‚ β”‚ 6 β”‚ 5 4 3 2 1 0 β”‚ 0 β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ shift_type β”‚ register β”‚ mask6 β”‚ shift_counter β”‚ SHR β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` #### πŸ”§ Operands | Name | Type | Bits | Description | |:-----|:-----|:-----|:------------| | `opcode` | opcode | 15-11 | The opcode determines what type of operation occurs | | `shift_type` | enum | 10-9 |

**Values:**
- `Arithmetic` (`00`): Arithmetic shift. During right shift, bit 15 is extended. During left shift, zeros are shifted in from right.
- `ROT` (`01`): Rotational shift. Most and least significant bits are connected.
- `ZIN` (`10`): Zero end input
- `LIN` (`11`): Link end input. The last vacated bit is fed to M after every shift instruction.
| | `register` | enum | 7-8 | The register to shift | | `mask6` | numeric | 6 | Always 0 | | `SHR` | assembler_flag | 0 | This a feature of the assembler. This mnemonic can be used to specify shift right, so that instead of calculating the 2's complement for the number of right shifts required, SHR can be used. | | `shift_counter` | int6 | 5-0 | The number of bits to shift the register.
Bits 0-4 are the number of shifts.
Bit 5=1, then shift right (max 32 times)
Bit 5=0, then shift left (max 31 times)
| #### 🚩 Flags Affected | Flag | Description | |:-----|:------------| | `M` | Multi-shift link flag | -------------------------------------------------------------------------------- ### SKP #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | `SKP ` | | Category | Skip Instruction | | Privilege | User | | Mask | `1111_1000_1100_0000` | #### πŸ“ Description The next instruction is skipped if a specified condition is true. #### πŸ“š Detailed Information SKP can be qualified by eight different mnemonics which use the flags set by the following expression: (dr) - (sr) Four flags are affected by this calculation: S sign Z zero result (error) C carry O overflow The condition codes are as follows: ``` β”Œβ”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ bits β”‚ mnemonicβ”‚ description β”‚ flag(s) condition β”‚ β”‚10 9 8 β”‚ β”‚ β”‚ if true β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ 0 0 0 β”‚ EQL β”‚ Equal β”‚ Z = 1 β”‚ β”‚ 0 0 1 β”‚ GEQ β”‚ Greater or equal to † β”‚ S = 0 β”‚ β”‚ 0 1 0 β”‚ GRE β”‚ Greater or equal to * † β”‚ S + O = 0 β”‚ β”‚ 0 1 1 β”‚ MGRE β”‚ Magnitude greater or equal * β”‚ C = 1 β”‚ β”‚ 1 0 0 β”‚ UEQ β”‚ Unequal β”‚ Z = 0 β”‚ β”‚ 1 0 1 β”‚ LSS β”‚ Less than † β”‚ S = 1 β”‚ β”‚ 1 1 0 β”‚ LST β”‚ Less than * † β”‚ S + O = 1 β”‚ β”‚ 1 1 1 β”‚ MLST β”‚ Magnitude less than * β”‚ C = 0 β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` * Overflow is taken care of † Contents of sr and dr are treated as signed numbers Note: By swapping the sr and dr fields, these relationships can be tested: > Greater than <= Less than or equal #### πŸ“‹ Format ``` SKP ``` #### Bit Layout ``` β”‚ 15 14 13 12 11β”‚ 10 9 8 β”‚ 7 6 β”‚ 5 4 3 β”‚ 2 1 0 β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ condition β”‚ zeros β”‚ sr β”‚ dr β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` #### πŸ”§ Operands | Name | Type | Bits | Description | |:-----|:-----|:-----|:------------| | `opcode` | opcode | 15-11 | The opcode determines what type of operation occurs | | `condition` | enum | 10-8 | Condition to skip the next instruction

**Values:**
- `EQL` (`0`): Equal
- `GEQ` (`1`): Greater or equal to (signed)
- `GRE` (`2`): Greater or equal to (overflow, signed)
- `MGRE` (`3`): Magnitude greater or equal to (overflow, unsigned)
- `UEQ` (`4`): Unequal
- `LSS` (`5`): Less than (overflow, unsigned)
- `LST` (`6`): Less than (overflow, signed)
- `MLST` (`7`): Magnitude less than (overflow, unsigned)
| | `zeros` | value | 7-6 | Must be 00 | | `sr` | src_register | 5-3 | The source register to be compared with the destination register | | `dr` | dst_register | 2-0 | The destination register to be compared with the source register | #### 🚩 Flags Affected | Flag | Description | |:-----|:------------| | `Z` | Error flag | | `C` | Carry flag | | `O` | Static overflow flag | #### πŸ“š Examples ##### Skip next instruction if the D register contents equal that of the A register. ``` SKP DD EQL SL ``` ##### Skip the next instruction if the contents of the A register are less than the B register contents. OR Skip the next instruction if the contents of the B register are greater than the A register contents. ``` SKP DB LSS SA ``` ##### Skip the next instruction if the contents of the L register do not equal zero. ``` SKP DL UEQ ``` ##### Skip the next instruction if the D register is less than zero. ``` SKP LSS SD ``` -------------------------------------------------------------------------------- ### SRB #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | `SRB ` | | Category | Register Block Instructions | | Privilege | Privileged | | Mask | `1111_1111_1100_0000` | #### πŸ“ Description Store register block Load the register block of the program level given in the instruction into the memory block pointed to by the X register. If the instruction specifies the current program level, the P register points to the instruction following SRB. #### πŸ“š Detailed Information The register block of the specified program level is stored in the memory block pointed to by the X register. The mapping is as follows: (ea) ⟡ P (level N) (ea + 1) ⟡ X (level N) (ea + 2) ⟡ T (level N) (ea + 3) ⟡ A (level N) (ea + 4) ⟡ D (level N) (ea + 5) ⟡ L (level N) (ea + 6) ⟡ STS (level N) (ea + 7) ⟡ B (level N) Where (ea) is the address in memory pointed to by the X register. If the current program level is specified, the P register points to the instruction following SRB. #### πŸ“‹ Format ``` SRB ``` #### Bit Layout ``` β”‚ 15 14 13 12 11β”‚ 6 5 4 3 β”‚ 2 1 0 β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ level β”‚ type β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` #### πŸ”§ Operands | Name | Type | Bits | Description | |:-----|:-----|:-----|:------------| | `opcode` | opcode | 15-11 | The opcode determines what type of operation occurs | | `level` | uint4 | 6-3 | The level to load the register block to | | `type` | enum | 2-0 | The type of register block function

**Values:**
- `SRB` (`0`): Store Register Block
- `LRB` (`2`): Load Register Block
| #### πŸ“š Examples ##### SRB 100β‚ˆ (152702β‚ˆ) Store the register block of program level 8 in the memory block pointed to by X. (ea) ⟡ P (level 8) (ea + 1) ⟡ X (level 8) ↓ ↓ (ea + 7) ⟡ B (level 8) ``` SRB 100 ``` -------------------------------------------------------------------------------- ### STA #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | `STA ` | | Category | Memory Transfer - Store Instruction | | Privilege | User | | Mask | `1111_1000_0000_0000` | #### πŸ“ Description Store A register to memory location (EA) ⟡ (A) Store the contents of the A register in the memory location pointed to by the effective address. #### πŸ“‹ Format ``` STA ``` #### Bit Layout ``` β”‚ 15 14 13 12 11β”‚ 10 9 8 β”‚ 7 6 5 4 3 2 1 0 β”‚ β”‚ β”‚ X I B β”‚ β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ addressing_mode β”‚ displacement β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` > **Note:** This instruction uses addressing modes. See [Addressing Modes](#addressing-modes) for details. #### πŸ”§ Operands | Name | Type | Bits | Description | |:-----|:-----|:-----|:------------| | `opcode` | opcode | 15-11 | The opcode determines what type of operation occurs | | `addressing_mode` | addressing_modes | 10-8 | These three bits give the addressing mode for the instruction | | `displacement` | displacement | 7-0 | 8-bit signed field gives the memory address displacement (2's complement notation giving a displacement range of -128 to 127 memory locations) | -------------------------------------------------------------------------------- ### STATX #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | `STATX ` | | Category | Memory Transfer Instructions | | Privilege | Privileged | | Mask | `1111_1111_1100_0111` | #### πŸ“ Description Store A register (ea) ⟡ (A) Store the contents of the A register in the memory location given by the effective address. #### πŸ“‹ Format ``` STATX ``` #### Bit Layout ``` β”‚ 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` -------------------------------------------------------------------------------- ### STD #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | `STD ` | | Category | Memory Transfer - Double word instructions | | Privilege | User | | Mask | `1111_1000_0000_0000` | #### πŸ“ Description Store double word (ea) ⟡ (A) (ea) + 1 ⟡ (D) Store the contents of the A register in the memory location pointed to by the effective address Store the contents of the D register in the memory location pointed to by the effective address plus one. #### πŸ“‹ Format ``` STD ``` #### Bit Layout ``` β”‚ 15 14 13 12 11β”‚ 10 9 8 β”‚ 7 6 5 4 3 2 1 0 β”‚ β”‚ β”‚ X I B β”‚ β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ addressing_mode β”‚ displacement β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` > **Note:** This instruction uses addressing modes. See [Addressing Modes](#addressing-modes) for details. #### πŸ”§ Operands | Name | Type | Bits | Description | |:-----|:-----|:-----|:------------| | `opcode` | opcode | 15-11 | The opcode determines what type of operation occurs | | `addressing_mode` | addressing_modes | 10-8 | These three bits give the addressing mode for the instruction | | `displacement` | displacement | 7-0 | 8-bit signed field gives the memory address displacement (2's complement notation giving a displacement range of -128 to 127 memory locations) | -------------------------------------------------------------------------------- ### STDTX #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | `STDTX ` | | Category | Memory Transfer Instructions | | Privilege | Privileged | | Mask | `1111_1111_1100_0111` | #### πŸ“ Description Store double word (ea) ⟡ (A) (ea) + 1 ⟡ (D) Store the double word held in the A and D registers in the memory locations given by the effective address and the effective address plus one. #### πŸ“‹ Format ``` STDTX ``` #### Bit Layout ``` β”‚ 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` -------------------------------------------------------------------------------- ### STF #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | `STF ` | | Category | Standard Floating Instructions | | Privilege | User | | Mask | `1111_1000_0000_0000` | #### πŸ“ Description Store floating accumulator (TAD) to memory (ea) Memory format: (ea) ⟡ (T) (ea) + 1 ⟡ (A) (ea) + 2 ⟡ (D) Store the contents of the floating accumulator (T,A and D registers) into the memory location pointed to by the effective address. #### πŸ“‹ Format ``` STF ``` #### Bit Layout ``` β”‚ 15 14 13 12 11β”‚ 10 9 8 β”‚ 7 6 5 4 3 2 1 0 β”‚ β”‚ β”‚ X I B β”‚ β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ addressing_mode β”‚ displacement β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` > **Note:** This instruction uses addressing modes. See [Addressing Modes](#addressing-modes) for details. #### πŸ”§ Operands | Name | Type | Bits | Description | |:-----|:-----|:-----|:------------| | `opcode` | opcode | 15-11 | The opcode determines what type of operation occurs | | `addressing_mode` | addressing_modes | 10-8 | These three bits give the addressing mode for the instruction | | `displacement` | displacement | 7-0 | 8-bit signed field gives the memory address displacement (2's complement notation giving a displacement range of -128 to 127 memory locations) | -------------------------------------------------------------------------------- ### STT #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | `STT ` | | Category | Memory Transfer - Store Instruction | | Privilege | User | | Mask | `1111_1000_0000_0000` | #### πŸ“ Description Store T register to memory location (EA) ⟡ (T) Store the contents of the T register in the memory location pointed to by the effective address. #### πŸ“‹ Format ``` STT ``` #### Bit Layout ``` β”‚ 15 14 13 12 11β”‚ 10 9 8 β”‚ 7 6 5 4 3 2 1 0 β”‚ β”‚ β”‚ X I B β”‚ β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ addressing_mode β”‚ displacement β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` > **Note:** This instruction uses addressing modes. See [Addressing Modes](#addressing-modes) for details. #### πŸ”§ Operands | Name | Type | Bits | Description | |:-----|:-----|:-----|:------------| | `opcode` | opcode | 15-11 | The opcode determines what type of operation occurs | | `addressing_mode` | addressing_modes | 10-8 | These three bits give the addressing mode for the instruction | | `displacement` | displacement | 7-0 | 8-bit signed field gives the memory address displacement (2's complement notation giving a displacement range of -128 to 127 memory locations) | -------------------------------------------------------------------------------- ### STX #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | `STX ` | | Category | Memory Transfer - Store Instruction | | Privilege | User | | Mask | `1111_1000_0000_0000` | #### πŸ“ Description Store X register to memory location (EA) ⟡ (X) Store the contents of the X register in the memory location pointed to by the effective address. #### πŸ“‹ Format ``` STX ``` #### Bit Layout ``` β”‚ 15 14 13 12 11β”‚ 10 9 8 β”‚ 7 6 5 4 3 2 1 0 β”‚ β”‚ β”‚ X I B β”‚ β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ addressing_mode β”‚ displacement β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` > **Note:** This instruction uses addressing modes. See [Addressing Modes](#addressing-modes) for details. #### πŸ”§ Operands | Name | Type | Bits | Description | |:-----|:-----|:-----|:------------| | `opcode` | opcode | 15-11 | The opcode determines what type of operation occurs | | `addressing_mode` | addressing_modes | 10-8 | These three bits give the addressing mode for the instruction | | `displacement` | displacement | 7-0 | 8-bit signed field gives the memory address displacement (2's complement notation giving a displacement range of -128 to 127 memory locations) | -------------------------------------------------------------------------------- ### STZ #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | `STZ ` | | Category | Memory Transfer - Store Instruction | | Privilege | User | | Mask | `1111_1000_0000_0000` | #### πŸ“ Description Store zero to memory location (EA) ⟡ 0 Store the value zero in the memory location pointed to by the effective address. #### πŸ“‹ Format ``` STZ ``` #### Bit Layout ``` β”‚ 15 14 13 12 11β”‚ 10 9 8 β”‚ 7 6 5 4 3 2 1 0 β”‚ β”‚ β”‚ X I B β”‚ β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ addressing_mode β”‚ displacement β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` > **Note:** This instruction uses addressing modes. See [Addressing Modes](#addressing-modes) for details. #### πŸ”§ Operands | Name | Type | Bits | Description | |:-----|:-----|:-----|:------------| | `opcode` | opcode | 15-11 | The opcode determines what type of operation occurs | | `addressing_mode` | addressing_modes | 10-8 | These three bits give the addressing mode for the instruction | | `displacement` | displacement | 7-0 | 8-bit signed field gives the memory address displacement (2's complement notation giving a displacement range of -128 to 127 memory locations) | -------------------------------------------------------------------------------- ### STZTX #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | `STZTX ` | | Category | Memory Transfer Instructions | | Privilege | Privileged | | Mask | `1111_1111_1100_0111` | #### πŸ“ Description Store zero (ea) ⟡ 000000β‚ˆ Store zero in the memory location given by the effective address. #### πŸ“‹ Format ``` STZTX ``` #### Bit Layout ``` β”‚ 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` -------------------------------------------------------------------------------- ### SUB #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | `SUB ` | | Category | Arithmetic and Logical | | Privilege | User | | Mask | `1111_1000_0000_0000` | #### πŸ“ Description Subtract from A register A ⟡ A - (EL) Subtract the contents of the memory location pointed to by the effective address from the A register, leaving the result in A. #### πŸ“š Detailed Information Flags affected: - C=1: If a carry occurs from the signed bit positions of the adder. - O=1, Q=1: If an overflow occurs, that is if the signs of the two operands are equal and the sign of the result is different. - O=1, Q=0: If overflow does not exist, the dynamic overflow flag (O) is reset to 0 while the static overflow flag (Q) is left unchanged. #### πŸ“‹ Format ``` SUB ``` #### Bit Layout ``` β”‚ 15 14 13 12 11β”‚ 10 9 8 β”‚ 7 6 5 4 3 2 1 0 β”‚ β”‚ β”‚ X I B β”‚ β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ addressing_mode β”‚ displacement β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` > **Note:** This instruction uses addressing modes. See [Addressing Modes](#addressing-modes) for details. #### πŸ”§ Operands | Name | Type | Bits | Description | |:-----|:-----|:-----|:------------| | `opcode` | opcode | 15-11 | The opcode determines what type of operation occurs | | `addressing_mode` | addressing_modes | 10-8 | These three bits give the addressing mode for the instruction | | `displacement` | displacement | 7-0 | 8-bit signed field gives the memory address displacement (2's complement notation giving a displacement range of -128 to 127 memory locations) | #### 🚩 Flags Affected | Flag | Description | |:-----|:------------| | `C` | Carry flag | | `Q` | Dynamic overflow flag | -------------------------------------------------------------------------------- ### SUBD #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | `SUBD` | | Category | Decimal Instructions | | Privilege | User | | Mask | `1111_1111_1111_1111` | #### πŸ“ Description Subtract two decimal operands. (op1) ⟡ (op1) - (op2) Subtract the second operand from the first operand, leaving the result in the location of the first operand. If the first operand field is too short to contain all the significant digits of the result then decimal overflow occurs. If bit 13 of D2 in the first operand is set, the sign of the result will be 17β‚ˆ (BCD unsigned). Any empty operand, that is with a field length of zero, is treated as a positive zero. A zero difference can have either a negative or positive sign. **Instruction sequence:** SUBD error handling instruction next instruction after SUBD or after error handling routine **Example:** SUBD JPL *30β‚ˆ ADD *15β‚ˆ The SUBD instruction causes the program counter to skip the next instruction UNLESS an error has been generated, when the instruction immediately following the SUBD will handle the error in some way (in this example, a jump is executed on error to a subroutine at (P) + 15β‚ˆ)). (* is the assembler mnemonic for the P register) #### πŸ“‹ Format ``` SUBD ``` #### Bit Layout ``` β”‚ 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` #### πŸ”§ Operands | Name | Type | Bits | Description | |:-----|:-----|:-----|:------------| | `opcode` | opcode | 15-0 | The opcode determines what type of operation occurs | -------------------------------------------------------------------------------- ### SWAP #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | `SWAP <sub-instruction(s)> ` | | Category | Register Operations | | Privilege | User | | Mask | `1111_1111_1100_0000` | #### πŸ“ Description Register swap dr ⟡ sr #### πŸ“š Detailed Information Optional sub-instructions: - **CLD=1**: Zero is used instead of the destination register as an operand (dr register contents are unchanged). - **CM1=1**: The 1's complement of the source register is used as an operand (sr register contents are unchanged). --- ### Instruction combinations SWAP dr ⟡ sr SWAP CLD dr ⟡ sr; sr ⟡ 0 SWAP CM1 dr ⟡ sr; sr ⟡ dr SWAP CM1 CLD dr ⟡ sr; sr ⟡ 0 #### πŸ“‹ Format ``` SWAP <sub-instruction(s)> ``` #### Bit Layout ``` β”‚ 15 14 13 12 11β”‚ 10 β”‚ 9 β”‚ 8 β”‚ 8 7 β”‚ 7 β”‚ 6 β”‚ 5 4 3 β”‚ 2 1 0 β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ rad β”‚ ADC β”‚ AD1 β”‚ CM2 β”‚ CM1 β”‚ CLD β”‚ source β”‚ destination β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` #### πŸ”§ Operands | Name | Type | Bits | Description | |:-----|:-----|:-----|:------------| | `opcode` | opcode | 15-11 | The opcode for register inclusive OR | | `rad` | constant | 10 | Logical operation flag | | `ADC` | flag | 9 | Also addd old carry to destination | | `AD1` | flag | 8 | Also add one to destination | | `CM1` | flag | 7 | Use one's complement of source | | `CM2` | flag | 8-7 | Two's complement (CM1 AD1) | | `CLD` | flag | 6 | Clear destination before operation | | `source` | enum | 5-3 | Source register (sr)

**Values:**
- `SD` (`000010`): D register as source
- `SP` (`000020`): P register as source
- `SB` (`000030`): B register as source
- `SL` (`000040`): L register as source
- `SA` (`000050`): A register as source
- `ST` (`000060`): T register as source
- `SX` (`000070`): X register as source
- `ZERO` (`000000`): Source value equals zero
| | `destination` | enum | 2-0 | Destination register (dr)

**Values:**
- `DD` (`000001`): D register as destination
- `DP` (`000002`): P register as destination
- `DB` (`000003`): B register as destination
- `DL` (`000004`): L register as destination
- `DA` (`000005`): A register as destination
- `DT` (`000006`): T register as destination
- `DX` (`000007`): X register as destination
| #### 🚩 Flags Affected | Flag | Description | |:-----|:------------| | `C` | Carry flag | | `O` | Static overflow flag | | `Q` | Dynamic overflow flag | #### πŸ“š Examples ##### Exchange A and D register contents. ``` SWAP SA DD ``` ##### Use zero as the destination operand. Exchange the A and X register contents. A register contents are zero, X register contents are the previous contents of A. ``` SWAP CLD SA DX ``` -------------------------------------------------------------------------------- ### SZCB #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | `SZCB ` | | Category | Control Instructions | | Privilege | Privileged | | Mask | `1111_1111_1100_0111` | #### πŸ“ Description Store zero in the core map-table bank (CMBNK). (ea) <--- 0 ea = (B) + Ξ” = CMBNK entry Ξ”: 3-bit displacement added to B included in the instruction opcode (bits 5-3) #### πŸ“‹ Format ``` SZCB ``` #### Bit Layout ``` β”‚ 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` -------------------------------------------------------------------------------- ### SZSB #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | `SZSB ` | | Category | Control Instructions | | Privilege | Privileged | | Mask | `1111_1111_1100_0111` | #### πŸ“ Description Store zero in the segment-table bank (STBNK). (ea) <--- 0 ea = (B) + Ξ” = STBNK entry Ξ”: 3-bit displacement added to B included in the instruction opcode (bits 5-3) #### πŸ“‹ Format ``` SZSB ``` #### Bit Layout ``` β”‚ 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` -------------------------------------------------------------------------------- ### TRA #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | `TRA ` | | Category | Register Transfer | | Privilege | Privileged | | Mask | `1111_1111_1111_0000` | #### πŸ“ Description Transfer to A register The internal register given in the instruction is copied into the A register. #### πŸ“‹ Format ``` TRA ``` #### Bit Layout ``` β”‚ 15 14 13 12 11 10 9 8 7 6 5 4 β”‚ 3 2 1 0 β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ internal_register β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` #### πŸ”§ Operands | Name | Type | Bits | Description | |:-----|:-----|:-----|:------------| | `opcode` | opcode | 15-4 | The opcode determines what type of operation occurs | | `internal_register` | enum | 3-0 | The CPU internal register

**Values:**
- `PANS` (`0000`): Panel status
- `STS` (`0001`): Status register
- `OPR` (`0002`): Operator's panel switch register
- `PSR` (`0003`): Paging status register
- `PVL` (`0004`): Previous level code register
- `IIC` (`0005`): Internal interrupt code register
- `PID` (`0006`): Priority interrupt detect register
- `PIE` (`0007`): Priority enable detect register
- `CSR` (`0010`): Cache status register
- `ACTL` (`0011`): Active level register
- `ALD` (`0012`): Automatic load descriptor
- `PES` (`0013`): Parity error status register
- `PGC` (`0014`): Paging control register
- `PEA` (`0015`): Parity error address register
- `CS` (`0017`): Control store
| -------------------------------------------------------------------------------- ### TRR #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | `TRR ` | | Category | Register Transfer | | Privilege | Privileged | | Mask | `1111_1111_1111_0000` | #### πŸ“ Description Transfer A to internal register The internal register given in the instruction is loaded with the contents of the A register. #### πŸ“‹ Format ``` TRR ``` #### Bit Layout ``` β”‚ 15 14 13 12 11 10 9 8 7 6 5 4 β”‚ 3 2 1 0 β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ internal_register β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` #### πŸ”§ Operands | Name | Type | Bits | Description | |:-----|:-----|:-----|:------------| | `opcode` | opcode | 15-4 | The opcode determines what type of operation occurs | | `internal_register` | enum | 3-0 | The CPU internal register

**Values:**
- `PANC` (`0000`): Panel control
- `STS` (`0001`): Status register
- `LMP` (`0002`): Panel data display buffer register
- `PCR` (`0003`): Paging control register
- `IIE` (`0005`): Internal interrupt enable register
- `PID` (`0006`): Priority interrupt detect register
- `PIE` (`0007`): Priority interrupt enable register
- `CCL` (`0010`): Cache clear register
- `LCIL` (`0011`): Lower cache inhibit limit register
- `UCIL` (`0012`): Upper cache inhibit limit register
- `CILP` (`0013`): Cache inhibit page register
- `ECCR` (`0015`): Error correction control register
- `CS` (`0017`): Control Store
| -------------------------------------------------------------------------------- ### TSET #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | `TSET` | | Category | Memory Examine and Test Instructions | | Privilege | Privileged | | Mask | `1111_1111_1111_1111` | #### πŸ“ Description Test and set (T) points to the virtual memory word to be accessed (A) ⟡ memory word addressed by T The address given by the T register is a logical memory address. It is normally translated into a physical address using page tables (if memory management is on). The contents of the location addressed by T are simultaneously loaded into the A register as the location is written to with all 1s. The memory system is dedicated to this task and no other memory access is allowed during the operation. This can be used for processor synchronization. The old content of the memory address is always read from the memory and never from cache. The all 1s' data word is never written to cache. #### πŸ“‹ Format ``` TSET ``` #### Bit Layout ``` β”‚ 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` #### πŸ”§ Operands | Name | Type | Bits | Description | |:-----|:-----|:-----|:------------| | `opcode` | opcode | 15-0 | The opcode determines what type of operation occurs | -------------------------------------------------------------------------------- ### TSETP #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | `TSETP` | | Category | Control Instructions | | Privilege | Privileged | | Mask | `1111_1111_1111_1111` | #### πŸ“ Description Test and set physical memory word. #### πŸ“š Detailed Information (T) points to the physical memory bank to be accessed (X) points to the address within the bank (A) is loaded with the word The contents of the location addressed by T and X are simultaneously loaded into the A register as the location is written to with all 1s. No other memory access is allowed during this operation. The old content of the memory address is always read from the memory and never from cache. The all 1s' data word is never written to cache. This instruction can be used for processor synchronization. #### πŸ“‹ Format ``` TSETP ``` #### Bit Layout ``` β”‚ 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` #### πŸ”§ Operands | Name | Type | Bits | Description | |:-----|:-----|:-----|:------------| | `opcode` | opcode | 15-0 | The opcode determines what type of operation occurs | -------------------------------------------------------------------------------- ### UPACK #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | `UPACK` | | Category | Decimal Instructions | | Privilege | User | | Mask | `1111_1111_1111_1111` | #### πŸ“ Description Convert to ASCII. (op2) ⟡ (op1) in ASCII format Convert the first operand from its BCD format to ASCII format, placing the result in the second operand location. **Conversion process:** The instruction carries out the following steps: 1. Checks the sign and digits of the operand (op1) are encoded as BCD digits. (Illegal codes generate an error code 2.) 2. Takes each BCD digit as the lower nibble of an equivalent ASCII digit. Sets the upper nibble of the ASCII byte (the zone) to 0011β‚‚. 3. Converts the BCD sign of the operand to ASCII: BCD ASCII Sign 0 53β‚ˆ + 1 55β‚ˆ - Note: If bit 13 of the descriptor D2 is set then the code 17β‚ˆ (BCD unsigned) is used. 4. Extends the second operand field (op2) with ASCII zeros (60β‚ˆ) if the result is too small to fill the field. Reports overflow has occurred (error code 3), if the second operand field length is too short to contain the significant digits of the result (the remaining digits are ignored). **Error code:** An error code is placed in bits 0 to 4 of the D register if an illegal code conversion is attempted or if overflow occurs. The first detected error will be reported. Error code: 2 illegal code† 3 overflow † bit 15 of both the A and D registers point to the byte containing the illegal code. #### πŸ“‹ Format ``` UPACK ``` #### Bit Layout ``` β”‚ 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` #### πŸ”§ Operands | Name | Type | Bits | Description | |:-----|:-----|:-----|:------------| | `opcode` | opcode | 15-0 | The opcode determines what type of operation occurs | -------------------------------------------------------------------------------- ### VERSN #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | `VERSN` | | Category | System/CPU Information | | Privilege | User | | Mask | `1111_1111_1111_1111` | #### πŸ“ Description ** ND-110/ND-120 ONLY** Read ND-110 CPU version and installation number. This instruction is used to read the version of ND-110 CPU installed. Three registers are loaded simultaneously with information in the following format: #### πŸ“š Detailed Information A register 15 3 0 β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β” β”‚ Print version β”‚ALDβ”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”˜ T register 15 0 β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ Microprogram version β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ D register 15 7 0 β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚ Installation num. β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ The installation number of the CPU is 16 bytes long. The VERSN instruction can only load one byte of the installation number into the D register each time it is executed. The A register is used to address the sixteen bytes. To read a byte of the installation number the A register must be loaded with an installation byte address before the VERSN instruction is executed. The address of the byte to be read is given by the value of bits 8-11 in the A register (equivalent to bytes 0-16). To read the complete installation number both the A register bit field must be incremented and the VERSN instruction executed sixteen times. #### πŸ“‹ Format ``` VERSN ``` #### Bit Layout ``` β”‚ 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` #### πŸ”§ Operands | Name | Type | Bits | Description | |:-----|:-----|:-----|:------------| | `opcode` | opcode | 15-0 | The opcode determines what type of operation occurs | -------------------------------------------------------------------------------- ### WAIT #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | `WAIT ` | | Category | Interrupt Control Instructions | | Privilege | User | | Mask | `1111_1111_0000_0000` | #### πŸ“ Description When interrupt system off: halts the program and enters the operator's communication. When interrupt system on: give up priority. If there are no interrupt requests on any level, the program on level zero is entered. #### πŸ“š Detailed Information This operates as follows: **If the interrupt system is OFF:** The ND-110 stops with the program counter (P register) pointing to the instruction after the WAIT and the front panel RUN indicator is turned off. (To restart the system, type `!` on the console terminal.) **If the interrupt system is ON:** The ND-110 exits from the current program level (resetting the corresponding PID bit) and enters the program level with the highest priority, normally a program level lower than the one which executes the WAIT instruction. If there are no interrupt requests awaiting service, then program level 0 is entered. **Note:** A WAIT on program level 0 is ignored. WAIT followed by a number less than 400β‚ˆ can be used to detect which location caused the program stop. #### πŸ“‹ Format ``` WAIT ``` #### Bit Layout ``` β”‚ 15 14 13 12 11 10 9 8 β”‚ 7 6 5 4 3 2 1 0 β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ wait_number β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` #### πŸ”§ Operands | Name | Type | Bits | Description | |:-----|:-----|:-----|:------------| | `opcode` | opcode | 15-8 | The opcode determines what type of operation occurs | | `wait_number` | numeric | 7-0 | Wait number | #### πŸ“š Examples ##### Wait ``` WAIT ``` ##### Wait, but with a comment saying its WAIT #1 ``` WAIT 1 ``` -------------------------------------------------------------------------------- ### WGLOB #### ⚑ Quick Reference | Property | Value | |:---------|:-------| | Format | `WGLOB` | | Category | Control Instructions | | Privilege | Privileged | | Mask | `1111_1111_1111_1111` | #### πŸ“ Description Initialize global pointers. (T) = bank number of segment table (STBNK) (A) = start address within bank (STSRT)* (D) = bank number of core map table (CMBNK) * must be divisible by 8 #### πŸ“‹ Format ``` WGLOB ``` #### Bit Layout ``` β”‚ 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ opcode β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` #### πŸ”§ Operands | Name | Type | Bits | Description | |:-----|:-----|:-----|:------------| | `opcode` | opcode | 15-0 | The opcode determines what type of operation occurs | --------------------------------------------------------------------------------