System 16 Instruction Timing
Dual Operand Instructions
Load Instruction
LD Rt,Rea
Opcode = (PC)
PC = PC + 1
ALU Left = 0
ALU Right = Rea
ALU CCin = CC
ALU Func = Opcode
Rt = ALU Out
CC = ALU CCout
LD Rt,(Rea)+
Opcode = (PC)
PC = PC + 1Opcode Decode
EA = ReaALU Left = 0
ALU Right = (EA)
ALU CCin = CC
ALU Func = Opcode
Rea = EA + 1;Rt = ALU Out
CC = ALU CCout
LD Rt,-(Rea)
Opcode = (PC)
PC = PC + 1
Opcode Decode
EA = Rea - 1
ALU Left = 0
ALU Right = (EA)
ALU CCin = CC
ALU Func = Opcode
Rea = EARt = ALU Out
CC = ALU CCout
LD Rt,disp(Rea)
Opcode = (PC)
PC = PC + 1
Opcode Decode
EA = (PC)
PC = PC + 1
EA = EA + Rea
ALU Left = 0
ALU Right = (EA)
ALU CCin = CC
ALU Func = OpcodeRt = ALU Out
CC = ALU CCout
LD Rt,#value
Opcode = (PC)
PC = PC + 1ALU Left = 0
ALU Right = (PC)
ALU CCin = CC
ALU Func = Opcode
PC = PC + 1Rt = ALU Out
CC = ALU CCout
LD Rt,address
Opcode = (PC)
PC = PC + 1
Opcode Decode
EA = (PC)
PC = PC + 1ALU Left = 0
ALU Right = (EA)
ALU CCin = CC
ALU Func = OpcodeRt = ALU Out
CC = ALU CCout
LD Rt,(address)
Opcode = (PC)
PC = PC + 1
Opcode Decode
EA = (PC)
PC = PC + 1EA = (EA)
ALU Left = 0
ALU Right = (EA)
ALU CCin = CC
ALU Func = OpcodeRt = ALU Out
CC = ALU CCout
LD Rt,disp(PC)
Opcode = (PC)
PC = PC + 1
Opcode Decode
EA = (PC)
PC = PC + 1EA = PC + EA ALU Left = 0
ALU Right = (EA)
ALU CCin = CC
ALU Func = OpcodeRt = ALU Out
CC = ALU CCout
Store Instruction
ST Rt,(Rea)+
Opcode = (PC)
PC = PC + 1ALU Left = Rt
ALU Right = 0
ALU CCin = CC
ALU Func = Opcode
EA = Rea(EA) = ALU Out
CC = ALU CCout
Rea = EA + 1;
ST Rt,-(Rea)
Opcode = (PC)
PC = PC + 1ALU Left = Rt
ALU Right = 0
ALU CCin = CC
ALU Func = Opcode
EA = Rea - 1(EA) = ALU Out
CC = ALU CCout
Rea = EA
ST Rt,disp(Rea)
Opcode = (PC)
PC = PC + 1
EA = (PC)
PC = PC + 1ALU Left = Rt
ALU Right = 0
ALU CCin = CC
ALU Func = Opcode
EA = EA + Rea(EA) = ALU Out
CC = ALU CCout
ST Rt,address
Opcode = (PC)
PC = PC + 1
ALU Left = Rt
ALU Right = 0
ALU CCin = CC
ALU Func = Opcode
EA = (PC)
PC = PC + 1(EA) = ALU Out
CC = ALU CCout
ST Rt,(address)
Opcode = (PC)
PC = PC + 1
EA = (PC)
PC = PC + 1ALU Left = Rt
ALU Right = 0
ALU CCin = CC
ALU Func = Opcode
EA = (EA)(EA) = ALU Out
CC = ALU CCout
ST Rt,disp(PC)
Opcode = (PC)
PC = PC + 1
EA = (PC)
PC = PC + 1ALU Left = Rt
ALU Right = (EA)
ALU CCin = CC
ALU Func = Opcode
EA = PC + EA(EA) = ALU Out
CC = ALU CCout
Compare Arithmetic (CMP) and Boolean (BIT)
CMP Rt,Rea
Opcode = (PC)
PC = PC + 1ALU Left = Rt
ALU Right = Rea
ALU CCin = CC
ALU Func = OpcodeCC = ALU CCout
CMP Rt,(Rea)+
Opcode = (PC)
PC = PC + 1Opcode Decode
EA = ReaALU Left = Rt
ALU Right = (EA)
ALU CCin = CC
ALU Func = Opcode
Rea = EA + 1;CC = ALU CCout
CMP Rt,-(Rea)
Opcode = (PC)
PC = PC + 1Opcode Decode
EA = Rea - 1ALU Left = Rt
ALU Right = (EA)
ALU CCin = CC
ALU Func = Opcode
R1 = EACC = ALU CCout
CMP Rt,disp(Rea)
Opcode = (PC)
PC = PC + 1Opcode Decode
EA = (PC)
PC = PC + 1EA = Rea + EA ALU Left = Rt
ALU Right = (EA)
ALU CCin = CC
ALU Func = OpcodeCC = ALU CCout
CMP Rt,#value
Opcode = (PC)
PC = PC + 1ALU Left = Rt
ALU Right = (PC)
ALU CCin = CC
ALU Func = Opcode
PC = PC + 1CC = ALU CCout
CMP Rt,address
Opcode = (PC)
PC = PC + 1Opcode Decode
EA = (PC)
PC = PC + 1ALU Left = Rt
ALU Right = (EA)
ALU CCin = CC
ALU Func = OpcodeCC = ALU CCout
CMP Rt,(address)
Opcode = (PC)
PC = PC + 1Opcode Decode
EA = (PC)
PC = PC + 1EA = (EA) ALU Left = Rt
ALU Right = (EA)
ALU CCin = CC
ALU Func = OpcodeCC = ALU CCout
CMP Rt,disp(PC)
Opcode = (PC)
PC = PC + 1Opcode Decode
EA = (PC)
PC = PC + 1EA = PC + EA ALU Left = Rt
ALU Right = (EA)
ALU CCin = CC
ALU Func = OpcodeCC = ALU CCout
Arithmetic and Boolean Operations
ADD, SUB, ADC, SBC, AND, OR, EOR
ADD Rt,Rea
Opcode = (PC)
PC = PC + 1ALU Left = Rt
ALU Right = Rea
ALU CCin = CC
ALU Func = OpcodeRt = ALU Out
CC = ALU CCout
ADD Rt,(Rea)+
Opcode = (PC)
PC = PC + 1
EA = Rea
ALU Left = Rt
ALU Right = (EA)
ALU CCin = CC
ALU Func = Opcode
Rea = EA + 1;Rt = ALU Out
CC = ALU CCout
ADD Rt,-(Rea)
Opcode = (PC)
PC = PC + 1
EA = Rea - 1 ALU Left = Rt
ALU Right = (EA)
ALU CCin = CCin
ALU Func = Opcode
Rea = EARt = ALU Out
CC = ALU CCout
ADD Rt,disp(Rea)
Opcode = (PC)
PC = PC + 1
EA = (PC )
PC = PC + 1EA = Rea + EA ALU Left = Rt
ALU Right = (EA)
ALU CCin = CC
ALU Func = OpcodeRt = ALU Out
CC = ALU CCout
ADD Rt,#value
Opcode = (PC)
PC = PC + 1
ALU Left = Rt
ALU Right = (PC)
ALU CCin = CC
ALU Func = Opcode
PC = PC + 1Rt = ALU Out
CC = ALU CCout
ADD Rt,address
Opcode = (PC)
PC = PC + 1
EA = (PC)
PC = PC + 1ALU Left = Rt
ALU Right = (EA)
ALU CCin = CC
ALU Func = OpcodeRt = ALU Out
CC = ALU CCout
ADD Rt,(address)
Opcode = (PC)
PC = PC + 1
EA = (PC)
PC = PC + 1EA = Fetch (EA) ALU Left = Rt
ALU Right = (EA)
ALU CCin = CC
ALU Func = OpcodeRt = ALU Out
CC = ALU CCout
ADD Rt,disp(PC)
Opcode = (PC)
PC = PC + 1
EA = (PC)
PC = PC + 1EA = PC + EA ALU Left = Rt
ALU Right = (EA)
ALU CCin = CC
ALU Func = OpcodeRt = ALU Out
CC = ALU CCout
Load Effectice Address
LEA Rt,(Rea)+
Opcode = (PC)
PC = PC + 1
EA = Rea
Rt = EA
Rea = EA + 1
LEA Rt,-(Rea)
Opcode = (PC)
PC = PC + 1
EA = Rea - 1 Rt = EA
Rea = EA
LEA Rt,disp(Rea)
Opcode = (PC)
PC = PC + 1
EA = (PC )
PC = PC + 1EA = Rea + EA Rt = EA
LEA Rt,address
Opcode = (PC)
PC = PC + 1
EA = (PC)
PC = PC + 1Rt = EA
LEA Rt,(address)
Opcode = (PC)
PC = PC + 1
EA = (PC)
PC = PC + 1EA = (EA) Rt = EA
LEA Rt,disp(PC)
Opcode = (PC)
PC = PC + 1
EA = (PC)
PC = PC + 1EA = PC + EA Rt = EA
Multiply
MUL Rt,Rea
Opcode = (PC)
PC = PC + 1R0' = Rt
R1' = Rea
ALU Left = R0'
ALU Right = 0
ALU CCin = CC
if( LSB( R1' ) )
ALU Func = ADD
else
ALU Func = PASSR
R0' = ShiftL( R0' )
R1' = ShiftR( R1')
<repeat 7 times>
ALU Left = R0'
ALU Right = ALU Out
ALU CCin = ALU CCout
if( LSB( R1' ) )
ALU Func = ADD
else
ALU Func = PASSR
R0' = ShiftL( R0' )
R1' = ShiftR( R1' )
Rt = ALU Out
CC = ALU CCout
MUL Rt,(Rea)+
Opcode = (PC)
PC = PC + 1EA = Rea R0' = Rt
R1' = (EA)
R1 = EA + 1
ALU Left = R0'
ALU Right = 0
ALU CCin = CC
if( LSB( R1' ) )
ALU Func = ADD
else
ALU Func = PASSR
R0' = ShiftL( R0' )
R1' = ShiftR( R1' )<repeat 7 times>
ALU Left = R0'
ALU Right = ALU Out
ALU CCin = ALU CCout
if( LSB( R1' ) )
ALU Func = ADD
else
ALU Func = PASSR
R0' = ShiftL( R0' )
R1' = ShiftR( R1' )
Rt = ALU Out
CC = ALU CCout
MUL Rt,-(Rea)
Opcode = (PC)
PC = PC + 1EA = Rea - 1 R0' = Rt
R1' = (EA)
R1 = EA
ALU Left = R0'
ALU Right = 0
ALU CCin = CC
if( LSB( R1' ) )
ALU Func = ADD
else
ALU Func = PASSR
R0' = ShiftL( R0' )
R1' = ShiftR( R1' )<repeat 7 times>
ALU Left = R0'
ALU Right = ALU Out
ALU CCin = ALU CCout
if( LSB( R1' ) )
ALU Func = ADD
else
ALU Func = PASSR
R0' = ShiftL( R0' )
R1' = ShiftR( R1' )
Rt = ALU Out
CC = ALU CCout
MUL Rt,disp(Rea)
Opcode = (PC)
PC = PC + 1EA = (PC )
PC = PC + 1EA = Rea + EA R0' = Rt
R1' = (EA)
ALU Left = R0'
ALU Right = 0
ALU CCin = CC
if( LSB( R1' ) )
ALU Func = ADD
else
ALU Func = PASSR
R0' = ShiftL( R0' )
R1' = ShiftR( R1' )<repeat 7 times>
ALU Left = R0'
ALU Right = ALU Out
ALU CCin = ALU CCout
if( LSB( R1' ) )
ALU Func = ADD
else
ALU Func = PASSR
R0' = ShiftL( R0' )
R1' = ShiftR( R1' )
Rt = ALU Out
CC = ALU CCout
MUL Rt,#value
Opcode = (PC)
PC = PC + 1R0' = Rt
R1' = (PC)
PC = PC + 1
ALU Left = R0'
ALU Right = 0
ALU CCin = CC
if( LSB( R1' ) )
ALU Func = ADD
else
ALU Func = PASSR
R0' = ShiftL( R0' )
R1' = ShiftR( R1' )<repeat 7 times>
ALU Left = R0'
ALU Right = ALU Out
ALU CCin = ALU CCout
if( LSB( R1' ) )
ALU Func = ADD
else
ALU Func = PASSR
R0' = ShiftL( R0' )
R1' = ShiftR( R1' )
Rt = ALU Out
CC = ALU CCout
MUL Rt,address
Opcode = (PC)
PC = PC + 1EA = (PC)
PC = PC + 1R0' = Rt
R1' = (EA)
ALU Left = R0'
ALU Right = 0
ALU CCin = CC
if( LSB( R1' ) )
ALU Func = ADD
else
ALU Func = PASSR
R0' = ShiftL( R0' )
R1' = ShiftR( R1' )<repeat 7 times>
ALU Left = R0'
ALU Right = ALU Out
ALU CCin = ALU CCout
if( LSB( R1' ) )
ALU Func = ADD
else
ALU Func = PASSR
R0' = ShiftL( R0' )
R1' = ShiftR( R1' )
Rt = ALU Out
CC = ALU CCout
MUL Rt,(address)
Opcode = (PC)
PC = PC + 1EA = (PC)
PC = PC + 1EA = Fetch (EA) R0' = Rt
R1' = (EA)
ALU Left = R0'
ALU Right = 0
ALU CCin = CC
if( LSB( R1' ) )
ALU Func = ADD
else
ALU Func = PASSR
R0' = ShiftL( R0' )
R1' = ShiftR( R1' )<repeat 7 times>
ALU Left = R0'
ALU Right = ALU Out
ALU CCin = ALU CCout
if( LSB( R1' ) )
ALU Func = ADD
else
ALU Func = PASSR
R0' = ShiftL( R0' )
R1' = ShiftR( R1' )
Rt = ALU Out
CC = ALU CCout
MUL Rt,disp(PC)
Opcode = (PC)
PC = PC + 1EA = (PC)
PC = PC + 1EA = PC + EA R0' = Rt
R1' = (EA)
ALU Left = R0'
ALU Right = 0
ALU CCin = CC
if( LSB( R1' ) )
ALU Func = ADD
else
ALU Func = PASSR
R0' = ShiftL( R0' )
R1' = ShiftR( R1' )<repeat 7 times>
ALU Left = R0'
ALU Right = ALU Out
ALU CCin = ALU CCout
if( LSB( R1' ) )
ALU Func = ADD
else
ALU Func = PASSR
R0' = ShiftL( R0' )
R1' = ShiftR( R1' )
Rt = ALU Out
CC = ALU CCout
Branch Conditional
Bcc/LBcc
Opcode = (PC)
PC = PC + 1
EA = Low(Opcode)
Evalute( CC )
Decode( Opcode )if( EA == 0 )
EA = (PC)
PC = PC + 1
if( CC == True)
EA = EA + PC
if ( CC == True)
PC = EA
Single Operand
Negate, Complement, Rotate, Logical Shift, Arithmetic Shift, Increment, Decrement, Swap, Decimal Adjust
NEG Rea
Opcode = (PC)
PC = PC + 1ALU Left = 1
ALU Right = Rea
ALU CCin = CC
ALU Func = OpcodeRea = ALU Out
CC = ALU CCout
NEG (Rea)+
Opcode = (PC)
PC = PC + 1Opcode Decode
EA = ReaALU Left = 1
ALU Right = (EA)
ALU CCin = CC
ALU Func = OpcodeOut = ALU Out
CC = ALU CCout
(EA) = Out
Rea = EA + 1
NEG -(Rea)
Opcode = (PC)
PC = PC + 1Opcode Decode
EA = Rea - 1ALU Left = 1
ALU Right = (EA)
ALU CCin = CC
ALU Func = OpcodeOut = ALU Out
CC = ALU CCout(EA) = Out
Rea = EA
NEG disp(Rea)
Opcode = (PC)
PC = PC + 1Opcode Decode
EA = (PC)
PC = PC + 1EA = EA + Rea ALU Left = 1
ALU Right = (EA)
ALU CCin = CC
ALU Func = OpcodeOut = ALU Out
CC = ALU CCout
(EA) = Out
NEG address
Opcode = (PC)
PC = PC + 1Opcode Decode
EA = (PC)
PC = PC + 1ALU Left = 0
ALU Right = (EA)
ALU CCin = CC
ALU Func = OpcodeOut = ALU Out
CC = ALU CCout(EA) = Out
NEG (address)
Opcode = (PC)
PC = PC + 1Opcode Decode
EA = (PC)
PC = PC + 1EA = (EA) ALU Left = 0
ALU Right = (EA)
ALU CCin = CC
ALU Func = OpcodeOut = ALU Out
CC = ALU CCout
(EA) = Out
NEG disp(PC)
Opcode = (PC)
PC = PC + 1Opcode Decode
EA = (PC)
PC = PC + 1EA = PC + EA ALU Left = 0
ALU Right = (EA)
ALU CCin = CC
ALU Func = OpcodeOut = ALU Out
CC = ALU CCout
(EA) = Out
Clear
CLR Rea
Opcode = (PC)
PC = PC + 1ALU Left = 0
ALU Right = 0
ALU CCin = CC
ALU Func = OpcodeRea = ALU Out
CC = ALU CCout
CLR (Rea)+
Opcode = (PC)
PC = PC + 1EA = Rea
ALU Left = 0
ALU Right = 0
ALU CCin = CC
ALU Func = OpcodeOut = ALU Out
CC = ALU CCout(EA) = Out
Rea = EA + 1
CLR -(Rea)
Opcode = (PC)
PC = PC + 1EA = Rea - 1
ALU Left = 0
ALU Right = 0
ALU CCin = CC
ALU Func = OpcodeOut = ALU Out
CC = ALU CCout(EA) = Out
Rea = EA
CLR disp(Rea)
Opcode = (PC)
PC = PC + 1Opcode Decode
EA = (PC)
PC = PC + 1EA = EA + Rea
ALU Left = 0
ALU Right = 0
ALU CCin = CC
ALU Func = OpcodeOut = ALU Out
CC = ALU CCout
(EA) = Out
CLR address
Opcode = (PC)
PC = PC + 1Opcode Decode
EA = (PC)
PC = PC + 1
ALU Left = 0
ALU Right = 0
ALU CCin = CC
ALU Func = OpcodeOut = ALU Out
CC = ALU CCout(EA) = Out
CLR (address)
Opcode = (PC)
PC = PC + 1Opcode Decode
EA = (PC)
PC = PC + 1EA = (EA)
ALU Left = 0
ALU Right = 0
ALU CCin = CC
ALU Func = OpcodeOut = ALU Out
CC = ALU CCout(EA) = Out
CLR disp(PC)
Opcode = (PC)
PC = PC + 1Opcode Decode
EA = (PC)
PC = PC + 1EA = PC + EA
ALU Left = 0
ALU Right = 0
ALU CCin = CC
ALU Func = OpcodeOut = ALU Out
CC = ALU CCout(EA) = Out
Jump
JMP (Rea)+
JMP -(Rea)
JMP d(Rea)
JMP addr
JMP (addr)
JMP d(PC)
Jump to Subroutine
JSR (Rea)+
JSR -(Rea)
JSR d(Rea)
JSR addr
JSR (addr)
JSR d(PC)