mirror of
https://github.com/david-schmidt/tlc-apple2.git
synced 2024-11-29 17:50:44 +00:00
Tighten up timing on bit cells
Signed-off-by: David Schmidt <1110325+david-schmidt@users.noreply.github.com>
This commit is contained in:
parent
6c327f4283
commit
d4efb9f581
@ -22,17 +22,16 @@ PRERR = $FF2D
|
|||||||
PB0 = $C061 ; Paddle 0 PushButton: HIGH/ON if > 127, LOW/OFF if < 128.
|
PB0 = $C061 ; Paddle 0 PushButton: HIGH/ON if > 127, LOW/OFF if < 128.
|
||||||
|
|
||||||
start:
|
start:
|
||||||
lda #$09 ; We'll be watching for 8 bits plus one stop bit
|
|
||||||
sta bits
|
|
||||||
clc
|
|
||||||
jsr pb0_recv ; Pull a byte from PB0
|
jsr pb0_recv ; Pull a byte from PB0
|
||||||
bcs printit ; Carry set means we got a '1' stop bit, so we're good
|
bcs printit ; Carry set means we got a '1' stop bit, so we're good
|
||||||
jsr CROUT
|
jsr CROUT
|
||||||
jsr PRERR ; Else we got a framing error
|
jsr PRERR ; Else we got a framing error
|
||||||
|
jsr CROUT
|
||||||
|
jmp start
|
||||||
|
|
||||||
printit:
|
printit:
|
||||||
ora #$80
|
ora #$80
|
||||||
jsr COUT ; PRBYTE
|
jsr COUT
|
||||||
lda $25
|
lda $25
|
||||||
cmp #$17
|
cmp #$17
|
||||||
bne start
|
bne start
|
||||||
@ -42,20 +41,22 @@ printit:
|
|||||||
done: rts
|
done: rts
|
||||||
|
|
||||||
pb0_recv:
|
pb0_recv:
|
||||||
|
; State is currently unknown
|
||||||
; State is unknown
|
lda #$09 ; We'll be watching for 8 bits plus one stop bit
|
||||||
|
sta bits
|
||||||
|
clc
|
||||||
|
|
||||||
poll_for_1:
|
poll_for_1:
|
||||||
; sample state
|
; Sample PB0's state
|
||||||
lda PB0
|
lda PB0
|
||||||
bpl poll_for_1 ; if not negative, branch to wait_for_1
|
bpl poll_for_1 ; if not negative, branch to poll_for_1
|
||||||
|
|
||||||
; State is now 1
|
; State is now 1
|
||||||
|
|
||||||
poll_for_0:
|
poll_for_0:
|
||||||
; sample state
|
; Sample PB0's state
|
||||||
lda PB0
|
lda PB0
|
||||||
bmi poll_for_0 ; if negative, branch to wait_for_0
|
bmi poll_for_0 ; if negative, branch to poll_for_0
|
||||||
|
|
||||||
; State just became 0 (start bit)
|
; State just became 0 (start bit)
|
||||||
|
|
||||||
@ -64,13 +65,13 @@ poll_for_0:
|
|||||||
; When falling through to here, the above branch was not taken - consuming 2 cycles to get here
|
; When falling through to here, the above branch was not taken - consuming 2 cycles to get here
|
||||||
ldx #$14 ; 2 loop count
|
ldx #$14 ; 2 loop count
|
||||||
: nop ; 2 \
|
: nop ; 2 \
|
||||||
dex ; 2 |-- 7 * loop count
|
dex ; 2 |-- 7 * loop count - 1
|
||||||
bne :- ; 3 / final exit of the loop adds 2, branch not taken
|
bne :- ; 3 / final exit of the loop adds 2, branch not taken
|
||||||
; $90 cycles to get here; need to burn 7 more
|
; $8F cycles to get here
|
||||||
beq :+ ; 3
|
beq :+ ; 3 burn
|
||||||
: nop ; 2
|
: beq :+ ; 3 baby
|
||||||
nop ; 2
|
: nop ; 2 burn
|
||||||
; $97 cycles to get here; save 2 for upcoming clc
|
; $97 cycles to get here; final 2 will be consumed by clc below
|
||||||
pull_byte:
|
pull_byte:
|
||||||
; We now have one bit time (104.2us at 9600 baud) to process this bit
|
; We now have one bit time (104.2us at 9600 baud) to process this bit
|
||||||
; Approximately 106.6 ($6B) CPU cycles
|
; Approximately 106.6 ($6B) CPU cycles
|
||||||
@ -86,23 +87,22 @@ push_bit: ; We now have a bit in the carry
|
|||||||
lda ring ; 4
|
lda ring ; 4
|
||||||
ror ; 2
|
ror ; 2
|
||||||
sta ring ; 4
|
sta ring ; 4
|
||||||
; $1C/$1D cycles to get here (since center of bit time)
|
; $1D cycles to get here (since center of bit time)
|
||||||
; We are now done with processing that bit; we need to cool our heels for the rest ($6B - $1C = $4F) of the
|
; We are now done with processing that bit; we need to cool our heels for the rest ($6B - $1D = $4E) of the
|
||||||
; bit time in order to get into the middle of the next bit
|
; bit time in order to get into the middle of the next bit
|
||||||
ldx #$0A ; 2 loop count
|
ldx #$0A ; 2 loop count
|
||||||
: nop ; 2 \
|
: nop ; 2 \
|
||||||
dex ; 2 |-- 7 * loop count
|
dex ; 2 |-- 7 * loop count - 1
|
||||||
bne :- ; 3 / final exit of the loop adds 2, branch not taken
|
bne :- ; 3 / final exit of the loop adds 2, branch not taken
|
||||||
; $48 cycles to get here
|
; $47 cycles to get here, burn $07 more (includes our jump back to top of loop)
|
||||||
nop ; 2
|
nop ; 2
|
||||||
nop ; 2
|
nop ; 2
|
||||||
jmp pull_byte ; 3 Loop around for another bit - we burned $4F cycles
|
jmp pull_byte ; 3 Loop around for another bit - we burned $4E cycles
|
||||||
; $6B
|
; $6A
|
||||||
byte_complete:
|
byte_complete:
|
||||||
; Carry now holds stop bit (clear/0 indicates framing error, because we end with set/1)
|
; Carry now holds stop bit (clear/0 indicates framing error, because we end with set/1)
|
||||||
lda ring ; Exit with the assembled byte in A
|
lda ring ; Exit with the assembled byte in A
|
||||||
rts
|
rts
|
||||||
|
|
||||||
pb_state: .byte $00
|
|
||||||
ring: .byte $55
|
ring: .byte $55
|
||||||
bits: .byte $00
|
bits: .byte $00
|
||||||
|
Loading…
Reference in New Issue
Block a user