avra: a litte bit of code deduplication
This commit is contained in:
parent
2652c81519
commit
e9c692ed50
@ -36,6 +36,8 @@ instrNames:
|
|||||||
.db "ADC", 0
|
.db "ADC", 0
|
||||||
.db "ADD", 0
|
.db "ADD", 0
|
||||||
.db "AND", 0
|
.db "AND", 0
|
||||||
|
.db "BLD", 0
|
||||||
|
.db "BST", 0
|
||||||
.db "CLR", 0
|
.db "CLR", 0
|
||||||
.db "CP", 0
|
.db "CP", 0
|
||||||
.db "CPC", 0
|
.db "CPC", 0
|
||||||
@ -45,8 +47,10 @@ instrNames:
|
|||||||
.db "MUL", 0
|
.db "MUL", 0
|
||||||
.db "OR", 0
|
.db "OR", 0
|
||||||
.db "SBC", 0
|
.db "SBC", 0
|
||||||
|
.db "SBRC", 0
|
||||||
|
.db "SBRS", 0
|
||||||
.db "SUB", 0
|
.db "SUB", 0
|
||||||
.equ I_ANDI 31
|
.equ I_ANDI 35
|
||||||
.db "ANDI", 0
|
.db "ANDI", 0
|
||||||
.db "CPI", 0
|
.db "CPI", 0
|
||||||
.db "LDI", 0
|
.db "LDI", 0
|
||||||
@ -54,11 +58,6 @@ instrNames:
|
|||||||
.db "SBCI", 0
|
.db "SBCI", 0
|
||||||
.db "SBR", 0
|
.db "SBR", 0
|
||||||
.db "SUBI", 0
|
.db "SUBI", 0
|
||||||
.equ I_BLD 38
|
|
||||||
.db "BLD", 0
|
|
||||||
.db "BST", 0
|
|
||||||
.db "SBRC", 0
|
|
||||||
.db "SBRS", 0
|
|
||||||
.equ I_RCALL 42
|
.equ I_RCALL 42
|
||||||
.db "RCALL", 0
|
.db "RCALL", 0
|
||||||
.db "RJMP", 0
|
.db "RJMP", 0
|
||||||
@ -134,10 +133,12 @@ instrNames:
|
|||||||
|
|
||||||
; In the same order as in instrNames
|
; In the same order as in instrNames
|
||||||
instrTbl:
|
instrTbl:
|
||||||
; Rd(5) + Rd(5): XXXXXXrd ddddrrrr
|
; Rd(5) + Rd(5) (0x02) and Rd(5) + bit (0x05) (same processing)
|
||||||
.db 0x02, 0b00011100, 0x00 ; ADC
|
.db 0x02, 0b00011100, 0x00 ; ADC
|
||||||
.db 0x02, 0b00001100, 0x00 ; ADD
|
.db 0x02, 0b00001100, 0x00 ; ADD
|
||||||
.db 0x02, 0b00100000, 0x00 ; AND
|
.db 0x02, 0b00100000, 0x00 ; AND
|
||||||
|
.db 0x05, 0b11111000, 0x00 ; BLD
|
||||||
|
.db 0x05, 0b11111010, 0x00 ; BST
|
||||||
.db 0x41, 0b00100100, 0x00 ; CLR (Rr copies Rd)
|
.db 0x41, 0b00100100, 0x00 ; CLR (Rr copies Rd)
|
||||||
.db 0x02, 0b00010100, 0x00 ; CP
|
.db 0x02, 0b00010100, 0x00 ; CP
|
||||||
.db 0x02, 0b00000100, 0x00 ; CPC
|
.db 0x02, 0b00000100, 0x00 ; CPC
|
||||||
@ -147,6 +148,8 @@ instrTbl:
|
|||||||
.db 0x02, 0b10011100, 0x00 ; MUL
|
.db 0x02, 0b10011100, 0x00 ; MUL
|
||||||
.db 0x02, 0b00101000, 0x00 ; OR
|
.db 0x02, 0b00101000, 0x00 ; OR
|
||||||
.db 0x02, 0b00001000, 0x00 ; SBC
|
.db 0x02, 0b00001000, 0x00 ; SBC
|
||||||
|
.db 0x05, 0b11111100, 0x00 ; SBRC
|
||||||
|
.db 0x05, 0b11111110, 0x00 ; SBRS
|
||||||
.db 0x02, 0b00011000, 0x00 ; SUB
|
.db 0x02, 0b00011000, 0x00 ; SUB
|
||||||
; Rd(4) + K(8): XXXXKKKK ddddKKKK
|
; Rd(4) + K(8): XXXXKKKK ddddKKKK
|
||||||
.db 0x04, 0b01110000, 0x00 ; ANDI
|
.db 0x04, 0b01110000, 0x00 ; ANDI
|
||||||
@ -156,12 +159,6 @@ instrTbl:
|
|||||||
.db 0x04, 0b01000000, 0x00 ; SBCI
|
.db 0x04, 0b01000000, 0x00 ; SBCI
|
||||||
.db 0x04, 0b01100000, 0x00 ; SBR
|
.db 0x04, 0b01100000, 0x00 ; SBR
|
||||||
.db 0x04, 0b01010000, 0x00 ; SUBI
|
.db 0x04, 0b01010000, 0x00 ; SUBI
|
||||||
; Rd(5) + bit: XXXXXXXd ddddXbbb: lonely bit in LSB is 0 in all cases, so we
|
|
||||||
; ignore it.
|
|
||||||
.db 0x05, 0b11111000, 0x00 ; BLD
|
|
||||||
.db 0x05, 0b11111010, 0x00 ; BST
|
|
||||||
.db 0x05, 0b11111100, 0x00 ; SBRC
|
|
||||||
.db 0x05, 0b11111110, 0x00 ; SBRS
|
|
||||||
; k(12): XXXXkkkk kkkkkkkk
|
; k(12): XXXXkkkk kkkkkkkk
|
||||||
.db 0x00, 0b11010000, 0x00 ; RCALL
|
.db 0x00, 0b11010000, 0x00 ; RCALL
|
||||||
.db 0x00, 0b11000000, 0x00 ; RJMP
|
.db 0x00, 0b11000000, 0x00 ; RJMP
|
||||||
@ -298,10 +295,8 @@ parseInstruction:
|
|||||||
ld a, e ; InstrID
|
ld a, e ; InstrID
|
||||||
cp I_ANDI
|
cp I_ANDI
|
||||||
jr c, .spitRd5Rr5
|
jr c, .spitRd5Rr5
|
||||||
cp I_BLD
|
|
||||||
jr c, .spitRdK8
|
|
||||||
cp I_RCALL
|
cp I_RCALL
|
||||||
jr c, .spitRdBit
|
jr c, .spitRdK8
|
||||||
cp I_IN
|
cp I_IN
|
||||||
jr c, .spitK12
|
jr c, .spitK12
|
||||||
cp I_BREAK
|
cp I_BREAK
|
||||||
@ -313,6 +308,8 @@ parseInstruction:
|
|||||||
call .placeRd
|
call .placeRd
|
||||||
jp .spit
|
jp .spit
|
||||||
.spitRd5Rr5:
|
.spitRd5Rr5:
|
||||||
|
; This is used for both Rd(5) + Rr(5) and Rd(5) + bit because the same
|
||||||
|
; logic works for both cases.
|
||||||
ld a, h
|
ld a, h
|
||||||
call .placeRd
|
call .placeRd
|
||||||
ld a, l
|
ld a, l
|
||||||
@ -345,14 +342,6 @@ parseInstruction:
|
|||||||
ld b, a
|
ld b, a
|
||||||
jp .spitMSB
|
jp .spitMSB
|
||||||
|
|
||||||
.spitRdBit:
|
|
||||||
ld a, h
|
|
||||||
call .placeRd
|
|
||||||
or l
|
|
||||||
; LSB is in A and is ready to go
|
|
||||||
call ioPutB
|
|
||||||
jr .spitMSB
|
|
||||||
|
|
||||||
.spitK12:
|
.spitK12:
|
||||||
; Let's deal with the upcode constant before we destroy IX below
|
; Let's deal with the upcode constant before we destroy IX below
|
||||||
ld b, (ix+1)
|
ld b, (ix+1)
|
||||||
|
Loading…
Reference in New Issue
Block a user