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 + 1
Opcode Decode
EA = Rea
ALU 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 = EA
Rt = 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 = Opcode
Rt = ALU Out
CC = ALU CCout


LD Rt,#value

Opcode = (PC)
PC = PC + 1
ALU Left = 0
ALU Right = (PC)
ALU CCin = CC
ALU Func = Opcode
PC = PC + 1
Rt = ALU Out
CC = ALU CCout


LD Rt,address

Opcode = (PC)
PC = PC + 1
Opcode Decode
EA = (PC)
PC = PC + 1
ALU Left = 0
ALU Right  = (EA)
ALU CCin = CC
ALU Func = Opcode
Rt = ALU Out
CC = ALU CCout


LD Rt,(address)

Opcode = (PC)
PC = PC + 1
Opcode Decode
EA = (PC)
PC = PC + 1
EA = (EA)
ALU Left = 0
ALU Right = (EA)
ALU CCin = CC
ALU Func = Opcode
Rt = ALU Out
CC = ALU CCout


LD Rt,disp(PC)

Opcode = (PC)
PC = PC + 1
Opcode Decode
EA = (PC)
PC = PC + 1
EA = PC + EA
ALU Left = 0
ALU Right = (EA)
ALU CCin = CC
ALU Func = Opcode
Rt = ALU Out
CC = ALU CCout



Store Instruction

ST Rt,(Rea)+

Opcode = (PC)
PC = PC + 1
ALU 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 + 1
ALU 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 + 1
ALU 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 + 1
ALU 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 + 1
ALU 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 + 1

ALU Left = Rt
ALU Right = Rea
ALU CCin = CC
ALU Func = Opcode
CC = ALU CCout

CMP Rt,(Rea)+

Opcode = (PC)
PC = PC + 1
Opcode Decode
EA = Rea
ALU Left = Rt
ALU Right = (EA)
ALU CCin = CC
ALU Func = Opcode
Rea = EA + 1;
CC = ALU CCout


CMP Rt,-(Rea)

Opcode = (PC)
PC = PC + 1
Opcode Decode
EA = Rea - 1

ALU Left = Rt
ALU Right = (EA)
ALU CCin = CC
ALU Func = Opcode
R1 = EA
CC = ALU CCout


CMP Rt,disp(Rea)

Opcode = (PC)
PC = PC + 1
Opcode Decode
EA = (PC)
PC = PC + 1
EA = Rea + EA
ALU Left = Rt
ALU Right = (EA)
ALU CCin = CC
ALU Func = Opcode
CC = ALU CCout


CMP Rt,#value

Opcode = (PC)
PC = PC + 1
ALU Left = Rt
ALU Right = (PC)
ALU CCin = CC
ALU Func = Opcode
PC = PC + 1
CC = ALU CCout


CMP Rt,address

Opcode = (PC)
PC = PC + 1
Opcode Decode
EA = (PC)
PC = PC + 1
ALU Left = Rt
ALU Right  = (EA)
ALU CCin = CC
ALU Func = Opcode
CC = ALU CCout


CMP Rt,(address)

Opcode = (PC)
PC = PC + 1
Opcode Decode
EA = (PC)
PC = PC + 1
EA = (EA)
ALU Left = Rt
ALU Right = (EA)
ALU CCin = CC
ALU Func = Opcode
CC = ALU CCout


CMP Rt,disp(PC)

Opcode = (PC)
PC = PC + 1
Opcode Decode
EA = (PC)
PC = PC + 1
EA = PC + EA
ALU Left = Rt
ALU Right = (EA)
ALU CCin = CC
ALU Func = Opcode
CC = ALU CCout




Arithmetic and Boolean Operations

ADD, SUB, ADC, SBC, AND, OR, EOR

ADD Rt,Rea

Opcode = (PC)
PC = PC + 1
ALU Left = Rt
ALU Right = Rea
ALU CCin = CC
ALU Func = Opcode
Rt = 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 = EA
Rt = ALU Out
CC = ALU CCout


ADD Rt,disp(Rea)

Opcode = (PC)
PC = PC + 1
EA = (PC )
PC = PC + 1
EA = Rea + EA
ALU Left = Rt
ALU Right = (EA)
ALU CCin = CC
ALU Func = Opcode
Rt = 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 + 1
Rt = ALU Out
CC = ALU CCout


ADD Rt,address

Opcode = (PC)
PC = PC + 1
EA = (PC)
PC = PC + 1
ALU Left = Rt
ALU Right  = (EA)
ALU CCin = CC
ALU Func = Opcode
Rt = ALU Out
CC = ALU CCout


ADD Rt,(address)

Opcode = (PC)
PC = PC + 1
EA =  (PC)
PC = PC + 1
EA = Fetch (EA)
ALU Left = Rt
ALU Right = (EA)
ALU CCin = CC
ALU Func = Opcode
Rt = ALU Out
CC = ALU CCout


ADD Rt,disp(PC)

Opcode = (PC)
PC = PC + 1
EA = (PC)
PC = PC + 1
EA = PC + EA
ALU Left = Rt
ALU Right = (EA)
ALU CCin = CC
ALU Func = Opcode
Rt = 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 + 1
EA = Rea + EA
Rt = EA


LEA Rt,address

Opcode = (PC)
PC = PC + 1
EA = (PC)
PC = PC + 1
Rt = EA


LEA Rt,(address)

Opcode = (PC)
PC = PC + 1
EA = (PC)
PC = PC + 1
EA = (EA)
Rt = EA


LEA Rt,disp(PC)

Opcode = (PC)
PC = PC + 1
EA = (PC)
PC = PC + 1
EA = PC + EA
Rt = EA



Multiply

MUL Rt,Rea

Opcode = (PC)
PC = PC + 1
R0' = 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 + 1

EA = 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 + 1
EA = 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 + 1
EA = (PC )
PC = PC + 1
EA = 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 + 1
R0' = 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 + 1
EA = (PC)
PC = PC + 1
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,(address)

Opcode = (PC)
PC = PC + 1
EA =  (PC)
PC = PC + 1
EA = 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 + 1
EA = (PC)
PC = PC + 1
EA = 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 + 1

ALU Left = 1
ALU Right = Rea
ALU CCin = CC
ALU Func = Opcode
Rea = ALU Out
CC = ALU CCout

NEG (Rea)+

Opcode = (PC)
PC = PC + 1
Opcode Decode
EA = Rea
ALU Left = 1
ALU Right = (EA)
ALU CCin = CC
ALU Func = Opcode
Out = ALU Out
CC = ALU CCout

(EA) =  Out
Rea = EA + 1


NEG -(Rea)

Opcode = (PC)
PC = PC + 1
Opcode Decode
EA = Rea - 1

ALU Left = 1
ALU Right = (EA)
ALU CCin = CC
ALU Func = Opcode
Out = ALU Out
CC = ALU CCout
(EA) = Out
Rea = EA


NEG disp(Rea)

Opcode = (PC)
PC = PC + 1
Opcode Decode
EA = (PC)
PC = PC + 1
EA = EA + Rea
ALU Left = 1
ALU Right = (EA)
ALU CCin = CC
ALU Func = Opcode
Out = ALU Out
CC = ALU CCout

(EA) = Out


NEG address

Opcode = (PC)
PC = PC + 1
Opcode Decode
EA = (PC)
PC = PC + 1
ALU Left = 0
ALU Right  = (EA)
ALU CCin = CC
ALU Func = Opcode
Out = ALU Out
CC = ALU CCout
(EA) = Out


NEG (address)

Opcode = (PC)
PC = PC + 1
Opcode Decode
EA = (PC)
PC = PC + 1
EA = (EA)
ALU Left = 0
ALU Right = (EA)
ALU CCin = CC
ALU Func = Opcode
Out = ALU Out
CC = ALU CCout

(EA) = Out


NEG disp(PC)

Opcode = (PC)
PC = PC + 1
Opcode Decode
EA = (PC)
PC = PC + 1
EA = PC + EA
ALU Left = 0
ALU Right = (EA)
ALU CCin = CC
ALU Func = Opcode
Out = ALU Out
CC = ALU CCout

(EA) = Out


Clear

CLR Rea

Opcode = (PC)
PC = PC + 1

ALU Left = 0
ALU Right = 0
ALU CCin = CC
ALU Func = Opcode
Rea = ALU Out
CC = ALU CCout

CLR (Rea)+

Opcode = (PC)
PC = PC + 1
EA = Rea
ALU Left = 0
ALU Right = 0
ALU CCin = CC
ALU Func = Opcode
Out = ALU Out
CC = ALU CCout

(EA) =  Out
Rea = EA + 1


CLR -(Rea)

Opcode = (PC)
PC = PC + 1
EA = Rea - 1
ALU Left = 0
ALU Right = 0
ALU CCin = CC
ALU Func = Opcode
Out = ALU Out
CC = ALU CCout
(EA) = Out
Rea = EA


CLR disp(Rea)

Opcode = (PC)
PC = PC + 1
Opcode Decode
EA = (PC)
PC = PC + 1
EA = EA + Rea
ALU Left = 0
ALU Right = 0
ALU CCin = CC
ALU Func = Opcode
Out = ALU Out
CC = ALU CCout

(EA) = Out


CLR address

Opcode = (PC)
PC = PC + 1
Opcode Decode
EA = (PC)
PC = PC + 1
ALU Left = 0
ALU Right  = 0
ALU CCin = CC
ALU Func = Opcode
Out = ALU Out
CC = ALU CCout
(EA) = Out


CLR (address)

Opcode = (PC)
PC = PC + 1
Opcode Decode
EA = (PC)
PC = PC + 1
EA = (EA)
ALU Left = 0
ALU Right = 0
ALU CCin = CC
ALU Func = Opcode
Out = ALU Out
CC = ALU CCout
(EA) = Out


CLR disp(PC)

Opcode = (PC)
PC = PC + 1
Opcode Decode
EA = (PC)
PC = PC + 1
EA = PC + EA
ALU Left = 0
ALU Right = 0
ALU CCin = CC
ALU Func = Opcode
Out = 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)