avra: add CBI and SBI
This completes instruction support for the Blink tn45 example.
This commit is contained in:
parent
5c43988649
commit
c968995ec0
@ -103,6 +103,9 @@ instrNames:
|
|||||||
.equ I_RCALL 84
|
.equ I_RCALL 84
|
||||||
.db "RCALL", 0
|
.db "RCALL", 0
|
||||||
.db "RJMP", 0
|
.db "RJMP", 0
|
||||||
|
.equ I_CBI 86
|
||||||
|
.db "CBI", 0
|
||||||
|
.db "SBI", 0
|
||||||
.db 0xff
|
.db 0xff
|
||||||
|
|
||||||
; Instruction table
|
; Instruction table
|
||||||
@ -200,6 +203,9 @@ instrTbl:
|
|||||||
; k(12): XXXXkkkk kkkkkkkk
|
; k(12): XXXXkkkk kkkkkkkk
|
||||||
.db 0x08, 0b11010000, 0x00 ; RCALL k
|
.db 0x08, 0b11010000, 0x00 ; RCALL k
|
||||||
.db 0x08, 0b11000000, 0x00 ; RJMP k
|
.db 0x08, 0b11000000, 0x00 ; RJMP k
|
||||||
|
; A(5) + bit: XXXXXXXX AAAAAbbb
|
||||||
|
.db 0x09, 0b10011000, 0x00 ; CBI A, b
|
||||||
|
.db 0x09, 0b10011010, 0x00 ; SBI A, b
|
||||||
|
|
||||||
; Same signature as getInstID in instr.asm
|
; Same signature as getInstID in instr.asm
|
||||||
; Reads string in (HL) and returns the corresponding ID (I_*) in A. Sets Z if
|
; Reads string in (HL) and returns the corresponding ID (I_*) in A. Sets Z if
|
||||||
@ -289,7 +295,14 @@ parseInstruction:
|
|||||||
jr c, .spitRegular
|
jr c, .spitRegular
|
||||||
cp I_RCALL
|
cp I_RCALL
|
||||||
jr c, .spitRdK8
|
jr c, .spitRdK8
|
||||||
jr .spitk12
|
cp I_CBI
|
||||||
|
jr c, .spitk12
|
||||||
|
; spit A(5) + bit
|
||||||
|
ld a, h
|
||||||
|
rla \ rla \ rla
|
||||||
|
or l
|
||||||
|
ld c, a
|
||||||
|
jr .spit
|
||||||
.spitRegular:
|
.spitRegular:
|
||||||
; Regular process which places H and L, ORring it with upcode. Works
|
; Regular process which places H and L, ORring it with upcode. Works
|
||||||
; in most cases.
|
; in most cases.
|
||||||
@ -454,6 +467,7 @@ argSpecs:
|
|||||||
.db 'b', 7 ; bit + k(7)
|
.db 'b', 7 ; bit + k(7)
|
||||||
.db 'R', 'A' ; Rd(5) + A(6)
|
.db 'R', 'A' ; Rd(5) + A(6)
|
||||||
.db 'D', 0 ; K(12)
|
.db 'D', 0 ; K(12)
|
||||||
|
.db 'a', 'b' ; A(5) + bit
|
||||||
|
|
||||||
; Parse arguments from I/O according to specs in HL
|
; Parse arguments from I/O according to specs in HL
|
||||||
; H for first spec, L for second spec
|
; H for first spec, L for second spec
|
||||||
@ -506,6 +520,8 @@ _parseArgs:
|
|||||||
jr z, _readBit
|
jr z, _readBit
|
||||||
cp 'A'
|
cp 'A'
|
||||||
jr z, _readA6
|
jr z, _readA6
|
||||||
|
cp 'a'
|
||||||
|
jr z, _readA5
|
||||||
cp 7
|
cp 7
|
||||||
jr z, _readk7
|
jr z, _readk7
|
||||||
cp 8
|
cp 8
|
||||||
@ -514,31 +530,17 @@ _parseArgs:
|
|||||||
jr z, _readDouble
|
jr z, _readDouble
|
||||||
ret ; something's wrong
|
ret ; something's wrong
|
||||||
|
|
||||||
; Read expr and return success only if result in under number given in A
|
|
||||||
; Z for success
|
|
||||||
_readExpr:
|
|
||||||
push ix
|
|
||||||
push bc
|
|
||||||
ld b, a
|
|
||||||
call parseExpr
|
|
||||||
jr nz, .end
|
|
||||||
ld a, b
|
|
||||||
call _IX2A
|
|
||||||
jr nz, .end
|
|
||||||
or c
|
|
||||||
ld c, a
|
|
||||||
cp a ; ensure Z
|
|
||||||
.end:
|
|
||||||
pop bc
|
|
||||||
pop ix
|
|
||||||
ret
|
|
||||||
|
|
||||||
_readBit:
|
_readBit:
|
||||||
ld a, 7
|
ld a, 7
|
||||||
jr _readExpr
|
jr _readExpr
|
||||||
|
|
||||||
_readA6:
|
_readA6:
|
||||||
ld a, 0x3f
|
ld a, 0x3f
|
||||||
|
jr _readExpr
|
||||||
|
|
||||||
|
_readA5:
|
||||||
|
ld a, 0x1f
|
||||||
|
jr _readExpr
|
||||||
|
|
||||||
_readK8:
|
_readK8:
|
||||||
ld a, 0xff
|
ld a, 0xff
|
||||||
@ -632,4 +634,23 @@ _IX2A:
|
|||||||
; Z set from "or a"
|
; Z set from "or a"
|
||||||
ret
|
ret
|
||||||
|
|
||||||
|
; Read expr and return success only if result in under number given in A
|
||||||
|
; Z for success
|
||||||
|
_readExpr:
|
||||||
|
push ix
|
||||||
|
push bc
|
||||||
|
ld b, a
|
||||||
|
call parseExpr
|
||||||
|
jr nz, .end
|
||||||
|
ld a, b
|
||||||
|
call _IX2A
|
||||||
|
jr nz, .end
|
||||||
|
or c
|
||||||
|
ld c, a
|
||||||
|
cp a ; ensure Z
|
||||||
|
.end:
|
||||||
|
pop bc
|
||||||
|
pop ix
|
||||||
|
ret
|
||||||
|
|
||||||
|
|
||||||
|
@ -14,8 +14,8 @@ main:
|
|||||||
ldi r16, RAMEND}8
|
ldi r16, RAMEND}8
|
||||||
out SPH, r16
|
out SPH, r16
|
||||||
|
|
||||||
;sbi DDRB, 0
|
sbi DDRB, 0
|
||||||
;cbi PORTB, 0
|
cbi PORTB, 0
|
||||||
|
|
||||||
; To have a blinking delay that's visible, we have to prescale a lot.
|
; To have a blinking delay that's visible, we have to prescale a lot.
|
||||||
; The maximum prescaler is 1024, which makes our TCNT0 increase
|
; The maximum prescaler is 1024, which makes our TCNT0 increase
|
||||||
@ -37,7 +37,7 @@ toggle:
|
|||||||
ldi r16, 0b00000010 ; TOV0
|
ldi r16, 0b00000010 ; TOV0
|
||||||
out TIFR, R16
|
out TIFR, R16
|
||||||
inc r1
|
inc r1
|
||||||
;cbi PORTB, 0
|
cbi PORTB, 0
|
||||||
sbrs r1, 1 ; if LED is on
|
sbrs r1, 1 ; if LED is on
|
||||||
;sbi PORTB, 0
|
sbi PORTB, 0
|
||||||
ret
|
ret
|
||||||
|
@ -1 +1 @@
|
|||||||
å
¿à¿·`¿$·ýÐüÏà¿”þ•
|
å
¿à¿¸šÀ˜·`¿$·ýÐüÏà¿”À˜þÀš•
|
Loading…
Reference in New Issue
Block a user