diff options
Diffstat (limited to 'notes')
-rw-r--r-- | notes | 75 |
1 files changed, 75 insertions, 0 deletions
@@ -0,0 +1,75 @@ +ops: +15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 +0 | 0 | 0 | 1 | 0 | 0 | opcode | bw | ad | dest | +0 | 0 | 1 | cond | pc-offset | +opcode | source | ad | bw | as | dest | + +bw = 1 for byte ops, 0 for word ops + +oneop +000 RRC 9-bit rotate through carry +001 SWPB - swap 8-bit halves. no byte form +010 RRA(.B) - arithmetic right shift +011 SXT sign extend 8 bits to 16 bits. no byte form +100 PUSH(.B) - push byte still decrements sp by 2 +101 CALL - get operand. push PC, PC = operand. no byte form. hard to do PC-relative call +110 RETI - pop SP then pop PC. opeand field unused. +111 not used + +relative jumps +all PC-relative +000 JNE/JNZ +001 JEQ/JZ +010 JNC/JLO +011 JC/JHS +100 JN +101 JGE +110 JL +111 JMP + +twoop +generally dest = src op dest +mov doesnt fetch dest, cmp/bit dont write dest. all valid in 8 bit and 16 bit + +0100 MOV - dest = src +0101 ADD - dest += src +0110 ADDC - dest += src + C +0111 SUBC - dest = dest - src + c (dest += ~src + C) +1000 SUB - dest -= src +1001 CMP - dest - src (set status only, dest not written) +1010 DADD - dest += src + C, in BCD +1011 BIT - dest & src (set status only) +1100 BIC - dest &= ~src (status not set) +1101 BIS - dest |= src (status not set) +1110 XOR - dest ^= src +1111 AND - dest &= src + +NOP implemented as virtual function, among others - +NOP == MOV r3, r3 +POP dst == MOV @SP+, dst +BR dst == MOV dst, PC +RET == MOV @SP+, PC +CLRC 1 +SETC 1 +CLRZ 2 +SETZ 2 +CLRN 4 +SETN 4 +DINT 8 +EINT 8 + +RLA dst == ADD dst, dst +RLC dst = ADDC dst, dst + +INV dst == XOR #-1, dst +CLR dst == MOV #0, dst +TST dst == CMP #0, dst + +DEC == SUB #1, dst +DECD == SUB #2, dst +INC == ADD #1, dst +INCD == ADD #2, dst + +ADC dst == ADDC #0, dst +DADC dst == DADD #0, dst +SBC dst == SUBC #0, dst |