Skip to content

SuperH CPU 7291

The CPU7291 is a SuperH3-based CPU used by the Pocket Viewer (PV) S1600, that’s the earliest ancestor of the ClassPad series. Some of its codebase is still used in the ClassPad 400.

FormatAbstractCode
add Rm,RnAdds Rm to Rn and stores result in Rn.0011nnnnmmmm1100
add #imm,RnAdds Rm to Rn and stores result in Rn.0111nnnniiiiiiii
FormatAbstractCode
addc Rm,RnAdds with carry using T as carry-in/out.0011nnnnmmmm1110
FormatAbstractCode
addv Rm,RnAdds with signed overflow detection (T reflects overflow).0011nnnnmmmm1111
FormatAbstractCode
and Rm,RnBitwise AND.0010nnnnmmmm1001
and #imm,R0Bitwise AND.11001001iiiiiiii
FormatAbstractCode
and.b #imm,@(R0,GBR)11001101iiiiiiii
FormatAbstractCode
bf dispIf T==0 then branch to PC+4+(disp*2).10001011dddddddd
FormatAbstractCode
bf/s dispIf T==0 then delayed branch to PC+4+(disp*2).10001111dddddddd
FormatAbstractCode
bra dispUnconditional branch to PC+4+(disp*2).1010iiiidddddddd
FormatAbstractCode
braf RnUnconditional branch via register offset (PC+4+Rm).0000nnnn00100011
FormatAbstractCode
bsr dispBranch to subroutine; PR ← return address.1011iiiidddddddd
FormatAbstractCode
bsrf RnBranch to subroutine via register offset; PR ← return address.0000nnnn00000011
FormatAbstractCode
bt dispIf T==1 then branch to PC+4+(disp*2).10001001dddddddd
FormatAbstractCode
bt/s dispIf T==1 then delayed branch to PC+4+(disp*2).10001101dddddddd
FormatAbstractCode
clrmacClears MAC registers.0000000000101000
FormatAbstractCode
clrsClears S bit.0000000001001000
FormatAbstractCode
clrtClears T bit.0000000000001000
FormatAbstractCode
cmp/eq Rm,RnCompares equality and updates T.0011nnnnmmmm0000
cmp/eq #imm,R0Compares equality and updates T.10001000iiiiiiii
FormatAbstractCode
cmp/ge Rm,RnSigned >= compare, updates T.0011nnnnmmmm0011
FormatAbstractCode
cmp/gt Rm,RnSigned > compare, updates T.0011nnnnmmmm0111
FormatAbstractCode
cmp/hi Rm,RnUnsigned > compare, updates T.0011nnnnmmmm0110
FormatAbstractCode
cmp/hs Rm,RnUnsigned >= compare, updates T.0011nnnnmmmm0010
FormatAbstractCode
cmp/pl RnCompares Rn > 0, updates T.0100nnnn00010101
FormatAbstractCode
cmp/pz RnCompares Rn >= 0, updates T.0100nnnn00010001
FormatAbstractCode
cmp/str Rm,RnByte-wise string compare between registers, updates T.0010nnnnmmmm1100
FormatAbstractCode
div0s Rm,RnInitializes signed divide step state.0010nnnnmmmm0111
FormatAbstractCode
div0uInitializes unsigned divide step state.0000000000011001
FormatAbstractCode
div1 Rm,RnPerforms one iterative divide step.0011nnnnmmmm0100
FormatAbstractCode
dmuls.l Rm,Rn0011nnnnmmmm1101
FormatAbstractCode
dmulu.l Rm,Rn0011nnnnmmmm0101
FormatAbstractCode
dt RnDecrement and test (updates T when result is zero).0100nnnn00010000
FormatAbstractCode
exts.b Rm,RnSign-extends byte to 32-bit.0110nnnnmmmm1110
FormatAbstractCode
exts.w Rm,RnSign-extends word to 32-bit.0110nnnnmmmm1111
FormatAbstractCode
extu.b Rm,RnZero-extends byte to 32-bit.0110nnnnmmmm1100
FormatAbstractCode
extu.w Rm,RnZero-extends word to 32-bit.0110nnnnmmmm1101
FormatAbstractCode
jmp @RnJump to target register address.0100nnnn00101011
FormatAbstractCode
jsr @RnJump to subroutine register target; PR ← return address.0100nnnn00001011
FormatAbstractCode
ldc Rn,SRLoads control register from general register.0100nnnn00001110
ldc Rn,GBRLoads control register from general register.0100nnnn00011110
ldc Rn,VBRLoads control register from general register.0100nnnn00101110
ldc Rn,SSRLoads control register from general register.0100nnnn00111110
ldc Rn,SPCLoads control register from general register.0100nnnn01001110
ldc Rn,Rm_bankLoads control register from general register.0100nnnn1mmm1110
FormatAbstractCode
ldc.l @Rn+,SRLoads control register longword from memory form.0100nnnn00000111
ldc.l @Rn+,GBRLoads control register longword from memory form.0100nnnn00010111
ldc.l @Rn+,VBRLoads control register longword from memory form.0100nnnn00100111
ldc.l @Rn+,SSRLoads control register longword from memory form.0100nnnn00110111
ldc.l @Rn+,SPCLoads control register longword from memory form.0100nnnn01000111
ldc.l @Rn+,Rm_bankLoads control register longword from memory form.0100nnnn1mmm0111
FormatAbstractCode
lds Rn,MACHLoads system register from general register.0100nnnn00001010
lds Rn,MACLLoads system register from general register.0100nnnn00011010
lds Rn,PRLoads system register from general register.0100nnnn00101010
FormatAbstractCode
lds.l @Rn+,MACHLoads system register longword from memory form.0100nnnn00000110
lds.l @Rn+,MACLLoads system register longword from memory form.0100nnnn00010110
lds.l @Rn+,PRLoads system register longword from memory form.0100nnnn00100110
FormatAbstractCode
ldtlbLoads TLB entry using MMU state.0000000000111000
FormatAbstractCode
mac.l @Rm+,@Rn+Multiply-accumulate longword.0000nnnnmmmm1111
FormatAbstractCode
mac.w @Rm+,@Rn+Multiply-accumulate word.0100nnnnmmmm1111
FormatAbstractCode
mov Rm,RnMoves a value between general registers.0110nnnnmmmm0011
mov #imm,RnMoves a value between general registers.1110nnnniiiiiiii
FormatAbstractCode
mov.b Rm,@(R0,Rn)Moves one byte between register/memory forms.0000nnnnmmmm0100
mov.b @(R0,Rm),RnMoves one byte between register/memory forms.0000nnnnmmmm1100
mov.b Rm,@RnMoves one byte between register/memory forms.0010nnnnmmmm0000
mov.b Rm,@-RnMoves one byte between register/memory forms.0010nnnnmmmm0100
mov.b @Rm,RnMoves one byte between register/memory forms.0110nnnnmmmm0000
mov.b @Rm+,RnMoves one byte between register/memory forms.0110nnnnmmmm0100
mov.b R0,@(disp,Rm)Moves one byte between register/memory forms.10000000mmmmdddd
mov.b @(disp,Rm),R0Moves one byte between register/memory forms.10000100mmmmdddd
mov.b R0,@(disp,GBR)Moves one byte between register/memory forms.11000000iiiiiiii
mov.b @(disp,GBR),R0Moves one byte between register/memory forms.11000100iiiiiiii
FormatAbstractCode
mov.l Rm,@(R0,Rn)Moves one longword between register/memory forms.0000nnnnmmmm0110
mov.l @(R0,Rm),RnMoves one longword between register/memory forms.0000nnnnmmmm1110
mov.l Rm,@(disp,Rn)Moves one longword between register/memory forms.0001nnnnmmmmdddd
mov.l Rm,@RnMoves one longword between register/memory forms.0010nnnnmmmm0010
mov.l Rm,@-RnMoves one longword between register/memory forms.0010nnnnmmmm0110
mov.l @(disp,Rm),RnMoves one longword between register/memory forms.0101nnnnmmmmdddd
mov.l @Rm,RnMoves one longword between register/memory forms.0110nnnnmmmm0010
mov.l @Rm+,RnMoves one longword between register/memory forms.0110nnnnmmmm0110
mov.l R0,@(disp,GBR)Moves one longword between register/memory forms.11000010iiiiiiii
mov.l @(disp,GBR),R0Moves one longword between register/memory forms.11000110iiiiiiii
mov.l @(disp,PC),RnMoves one longword between register/memory forms.1101nnnndddddddd
FormatAbstractCode
mov.w Rm,@(R0,Rn)Moves one word between register/memory forms.0000nnnnmmmm0101
mov.w @(R0,Rm),RnMoves one word between register/memory forms.0000nnnnmmmm1101
mov.w Rm,@RnMoves one word between register/memory forms.0010nnnnmmmm0001
mov.w Rm,@-RnMoves one word between register/memory forms.0010nnnnmmmm0101
mov.w @Rm,RnMoves one word between register/memory forms.0110nnnnmmmm0001
mov.w @Rm+,RnMoves one word between register/memory forms.0110nnnnmmmm0101
mov.w R0,@(disp,Rm)Moves one word between register/memory forms.10000001mmmmdddd
mov.w @(disp,Rm),R0Moves one word between register/memory forms.10000101mmmmdddd
mov.w @(disp,PC),RnMoves one word between register/memory forms.1001nnnndddddddd
mov.w R0,@(disp,GBR)Moves one word between register/memory forms.11000001iiiiiiii
mov.w @(disp,GBR),R0Moves one word between register/memory forms.11000101iiiiiiii
FormatAbstractCode
mova @(disp,PC),R0Computes PC-relative address into R0.11000111dddddddd
FormatAbstractCode
movt RnCopies T bit into a general register.0000nnnn00101001
FormatAbstractCode
mul.l Rm,Rn32-bit multiply, low result path.0000nnnnmmmm0111
FormatAbstractCode
muls.w Rm,RnSigned 16x16 multiply.0010nnnnmmmm1111
FormatAbstractCode
mulu.w Rm,RnUnsigned 16x16 multiply.0010nnnnmmmm1110
FormatAbstractCode
neg Rm,Rn0110nnnnmmmm1011
FormatAbstractCode
negc Rm,Rn0110nnnnmmmm1010
FormatAbstractCode
nopNo operation.0000000000001001
FormatAbstractCode
not Rm,RnBitwise NOT.0110nnnnmmmm0111
FormatAbstractCode
or Rm,RnBitwise OR.0010nnnnmmmm1011
or #imm,R0Bitwise OR.11001011iiiiiiii
FormatAbstractCode
or.b #imm,@(R0,GBR)11001111iiiiiiii
FormatAbstractCode
pref @RnPrefetch hint.0000nnnn10000011
FormatAbstractCode
rotcl RnRotate left through carry (T).0100nnnn00100100
FormatAbstractCode
rotl RnRotate left through register.0100nnnn00000100
FormatAbstractCode
rotr RnRotate right through register.0100nnnn00000101
FormatAbstractCode
rotrc RnRotate right through carry (T).0100nnnn00100101
FormatAbstractCode
rteReturn from exception; restores control state and PC.0000000000101011
FormatAbstractCode
rtsReturn from subroutine; PC ← PR.0000000000001011
FormatAbstractCode
setsSets S bit.0000000001011000
FormatAbstractCode
settSets T bit.0000000000011000
FormatAbstractCode
shad Rm,Rn0100nnnnmmmm1100
FormatAbstractCode
shal RnArithmetic shift left by 1.0100nnnn00100000
FormatAbstractCode
shar RnArithmetic shift right by 1.0100nnnn00100001
FormatAbstractCode
shld Rm,Rn0100nnnnmmmm1101
FormatAbstractCode
shll RnLogical shift left by 1.0100nnnn00000000
FormatAbstractCode
shll16 Rn0100nnnn00101000
FormatAbstractCode
shll2 Rn0100nnnn00001000
FormatAbstractCode
shll8 Rn0100nnnn00011000
FormatAbstractCode
shlr RnLogical shift right by 1.0100nnnn00000001
FormatAbstractCode
shlr16 Rn0100nnnn00101001
FormatAbstractCode
shlr2 Rn0100nnnn00001001
FormatAbstractCode
shlr8 Rn0100nnnn00011001
FormatAbstractCode
sleepEnters low-power sleep until interrupt/exception.0000000000011011
FormatAbstractCode
stc SR,RnStores control register to general register/memory form.0000nnnn00000010
stc GBR,RnStores control register to general register/memory form.0000nnnn00010010
stc VBR,RnStores control register to general register/memory form.0000nnnn00100010
stc SSR,RnStores control register to general register/memory form.0000nnnn00110010
stc SPC,RnStores control register to general register/memory form.0000nnnn01000010
stc Rm_bank,RnStores control register to general register/memory form.0000nnnn1mmm0010
FormatAbstractCode
stc.l SR,@-RnStores control register longword with memory form.0100nnnn00000011
stc.l GBR,@-RnStores control register longword with memory form.0100nnnn00010011
stc.l VBR,@-RnStores control register longword with memory form.0100nnnn00100011
stc.l SSR,@-RnStores control register longword with memory form.0100nnnn00110011
stc.l SPC,@-RnStores control register longword with memory form.0100nnnn01000011
stc.l Rm_bank,@-RnStores control register longword with memory form.0100nnnn1mmm0011
FormatAbstractCode
sts MACH,Rn0000nnnn00001010
sts MACL,Rn0000nnnn00011010
sts PR,Rn0000nnnn00101010
FormatAbstractCode
sts.l MACH,@-Rn0100nnnn00000010
sts.l MACL,@-Rn0100nnnn00010010
sts.l PR,@-Rn0100nnnn00100010
FormatAbstractCode
sub Rm,RnSubtracts Rm from Rn and stores result in Rn.0011nnnnmmmm1000
FormatAbstractCode
subc Rm,RnSubtracts with borrow using T as borrow-in/out.0011nnnnmmmm1010
FormatAbstractCode
subv Rm,RnSubtracts with signed overflow detection (T reflects overflow).0011nnnnmmmm1011
FormatAbstractCode
swap.b Rm,Rn0110nnnnmmmm1000
FormatAbstractCode
swap.w Rm,Rn0110nnnnmmmm1001
FormatAbstractCode
tas.b @RnTest-and-set byte; updates T and sets high bit in memory byte.0100nnnn00011011
FormatAbstractCode
trapa #immSoftware trap/exception instruction.11000011iiiiiiii
FormatAbstractCode
tst Rm,RnBitwise test, updates T.0010nnnnmmmm1000
tst #imm,R0Bitwise test, updates T.11001000iiiiiiii
FormatAbstractCode
tst.b #imm,@(R0,GBR)11001100iiiiiiii
FormatAbstractCode
xor Rm,RnBitwise XOR.0010nnnnmmmm1010
xor #imm,R0Bitwise XOR.11001010iiiiiiii
FormatAbstractCode
xor.b #imm,@(R0,GBR)11001110iiiiiiii
FormatAbstractCode
xtrct Rm,Rn0010nnnnmmmm1101