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

58 lines
802 B
ArmAsm

//
// 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_normal_get_pulse
bcc tape_normal_get_bit_1
// First impulse was short, second should be medium
jsr tape_normal_get_pulse
bcs tape_normal_get_bit_error
// We have a bit '0'
// Carry flag already clear
lda #$00
// FALLTROUGH
tape_normal_get_bit_done:
sta VIC_EXTCOL
rts
tape_normal_get_bit_1:
// First impulse was medium, second should be short
jsr tape_normal_get_pulse
bcc tape_normal_get_bit_error
// 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