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

69 lines
1017 B
ArmAsm

// #LAYOUT# STD * #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
//
#if 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
jsr tape_normal_calibrate_after_S
jsr tape_common_get_pulse
bcs tape_normal_get_bit_error
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
jsr tape_normal_calibrate_after_M
jsr tape_common_get_pulse
bcc tape_normal_get_bit_error
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
#endif // CONFIG_TAPE_NORMAL