Jameco Electronics 3000 ユーザーズマニュアル

ページ / 349
318
Rabbit 3000 Microprocessor
C.1  System/User Mode Opcodes
Seven new opcodes have been added to support the System/User mode, and are listed in 
Table C-2. All but IDET are placed in previously empty opcode table assignments. IDET 
shares the value of 
LD E,E
 in the opcode table, and will perform that operation when the 
System/User mode is disabled, or when it is enabled and in the System mode. In addition, 
if the 
ALTD
 prefix appears before the opcode, 
LD E’,E
 is always executed instead.
The processor keeps a one-byte stack (called the SU register) that is analogous to the IP 
register that keeps track of the interrupt priority. Every time 
SETUSR
 is executed (to enter 
the User mode), or an interrupt occurs, or 
SYSCALL
 or 
RST
 is executed (to enter the Sys-
tem mode), the current mode is pushed onto the SU register. When a 
SURES
 is executed, 
the previous mode is popped off the SU register.
The effects of each opcode are:
The 
SETUSR
 opcode puts the processor into the User mode by pushing the correct value 
into the SU register.
PUSH SU
 and 
POP SU
 push and pop the single-byte SU register on/off the SP stack.
SURES
 pops the current processor mode off the SU register, returning it to the previous 
mode.
IDET
 causes an interrupt if executed in the User mode, and does nothing in the System 
mode.
RDMODE
 returns the current mode in the carry flag (0 for System mode, 1 for User mode).
SYSCALL
 is essentially a new 
RST
 opcode, and was added to allow User mode access to 
the System mode without using one of the existing 
RST
 opcodes. It will put the processor 
into the System mode and execute code in the corresponding interrupt-vector table entry.
Table C-2.  New System/User Mode Opcodes
Instruction
Bytes
clk
A
I
S Z V C
Operation
Priv
?
SETUSR
2
4
-
-
-
-
- SU  =  {SU[5:0],  0x01}
Yes
PUSH SU
2
9
-
-
-
-
- (SP-1)  =  SU;  SP  =  SP  -  1
Yes
POP SU
2
7
-
-
-
-
- SU  =  (SP);  SP  =  SP  +  1
Yes
SURES
2
4
-
-
-
-
- SU  =  {SU[1:0],  SU[7:2]}
Yes
IDET
1
2
-
-
-
-
-
Performs 
LD E,E
, but if 
(EDMF && SU[0]) then the System 
Violation interrupt flag is set; if ALTD 
appears before it always does 
LD E’,E
No
RDMODE
2
4
-
-
-
-
* CF  =  SU[0]
Yes
SYSCALL
2
10
-
-
-
-
-
SP = SP - 2; PC = {R,v} where 
v = SYSCALL offset
No