Files
open-roms/src/kernal/tape/tape_normal_get_bit.s
T

76 lines
1.1 KiB
ArmAsm

;; #LAYOUT# STD * #TAKE
;; #LAYOUT# CRT KERNAL_1 #TAKE
;; #LAYOUT# M65 KERNAL_1 #TAKE
;; #LAYOUT# * * #IGNORE
;
; Tape (normal) helper routine - bit reading
;
; Returns bit in Zero flag, Carry set means error, on 0 bit .A is 0 too
;
!ifdef CONFIG_TAPE_NORMAL {
tape_normal_get_bit:
; Fetch the first pulse
jsr tape_common_get_pulse
bcc tape_normal_get_bit_1
; First impulse was short, second should be medium
!ifdef HAS_TAPE_AUTOCALIBRATE {
jsr tape_normal_calibrate_after_S
}
jsr tape_common_get_pulse
bcs tape_normal_get_bit_error
!ifdef HAS_TAPE_AUTOCALIBRATE {
jsr tape_normal_calibrate_after_M
}
; We have a bit '0'
lda #$00
; FALLTROUGH
tape_normal_get_bit_done:
sta VIC_EXTCOL
clc
rts
tape_normal_get_bit_1:
; First impulse was medium, second should be short
!ifdef HAS_TAPE_AUTOCALIBRATE {
jsr tape_normal_calibrate_after_M
}
jsr tape_common_get_pulse
bcc tape_normal_get_bit_error
!ifdef HAS_TAPE_AUTOCALIBRATE {
jsr tape_normal_calibrate_after_S
}
; We have a bit '1'
clc
lda #$06
bne tape_normal_get_bit_done ; branch always
tape_normal_get_bit_error:
sec
rts
} ; CONFIG_TAPE_NORMAL