mirror of
https://github.com/option8/gp2io.git
synced 2024-08-31 16:29:18 +00:00
29 lines
1.3 KiB
ArmAsm
29 lines
1.3 KiB
ArmAsm
ORG $34A
|
|
ANN2HI EQU $C05D
|
|
ANN2LO EQU $C05C
|
|
BUTT1 EQU $C062
|
|
BYTETRCVD EQU $EF
|
|
BUTT1HILO EQU $EE
|
|
|
|
|
|
READBYTE LDX #$09 ; reading 8 bits requires 9 transitions.
|
|
LDA #$00 ; clear the accumulator
|
|
STA BYTETRCVD ; $EF is staging for received byte, set 0
|
|
STA BUTT1HILO ; $EE is staging for each bit, set 0
|
|
CTS STA ANN2HI ; set ANN2 HIGH, indicate to AVR "Clear to Send"
|
|
LOOPSTART LDY #$FF ; start wait loop
|
|
LOOPCOUNT INY ; Increment Y - rolls over to 0 on first run (loopcount)
|
|
LDA BUTT1 ; check PB1 status hi/low
|
|
AND #$80 ; clear 0-6 bits (just need bit 7, all others float)
|
|
CMP BUTT1HILO ; compare Accumulator 7 bit with $EE, previous PB2 value
|
|
BNE BITCHANGE ; if PB2 has changed state, store in $EE (bitchange)
|
|
BEQ LOOPCOUNT ; bit hasn't changed yet, return to (loopcount)
|
|
BITCHANGE STA BUTT1HILO ; (bitchange)
|
|
CPY #$44 ; if the loop count is more than 68, bit is one. Bit is set in Carry
|
|
ROL BYTETRCVD ; rotate the new bit into $EF, our result byte.
|
|
DEX ; decrement X, our bit count
|
|
BNE LOOPSTART ; if bit count is not yet full, loop back to (loopcount)
|
|
CTSOFF STA ANN2LO ; if bit count is full, set ANN2 LOW, CTS off
|
|
LDA BYTETRCVD ; puts received byte into Accumulator
|
|
RTS ; return with byte in Accumulator
|