77 lines
1.2 KiB
ArmAsm
77 lines
1.2 KiB
ArmAsm
;; #LAYOUT# STD * #TAKE
|
|
;; #LAYOUT# CRT KERNAL_1 #TAKE
|
|
;; #LAYOUT# M65 KERNAL_1 #TAKE
|
|
;; #LAYOUT# * * #IGNORE
|
|
|
|
;
|
|
; Tape head alignemnt tool - interrupt routine
|
|
;
|
|
|
|
|
|
!ifdef CONFIG_TAPE_HEAD_ALIGN {
|
|
|
|
|
|
tape_head_align_irq:
|
|
|
|
; Acknowledge interrupt
|
|
|
|
asl VIC_IRQ
|
|
|
|
; Ignore 2 first pulses, they can be garbage
|
|
|
|
jsr tape_head_align_get_pulse
|
|
jsr tape_head_align_get_pulse
|
|
|
|
; Now, we can retrieve pulses for the chart
|
|
|
|
ldx #$00
|
|
|
|
; FALLTROUGH
|
|
|
|
tape_head_align_irq_loop:
|
|
|
|
jsr tape_head_align_get_pulse
|
|
|
|
; If we approached badlines again - we cannot use this measurement anymore
|
|
|
|
lda VIC_SCROLY
|
|
bmi @1 ; branch if lower border
|
|
|
|
lda VIC_RASTER
|
|
cmp #$33 ; first line where badline can occur
|
|
bcs tape_head_align_irq_end
|
|
@1:
|
|
; Draw pulse on the screen
|
|
|
|
cpy #$FF
|
|
beq @2
|
|
|
|
; Center the chart horizontaly, with some margin from top
|
|
|
|
!addr __ha_chart = $2000 + 8 * (40 * __ha_start + 4)
|
|
|
|
+phx_trash_a
|
|
|
|
lda __ha_offsets, y
|
|
tax
|
|
lda __ha_masks, y
|
|
ora __ha_chart + 7, x
|
|
sta __ha_chart + 7, x
|
|
|
|
+plx_trash_a
|
|
@2:
|
|
; Next iteration
|
|
|
|
inx
|
|
cpx #$40
|
|
bne tape_head_align_irq_loop
|
|
|
|
; FALLTROUGH
|
|
|
|
tape_head_align_irq_end:
|
|
|
|
jmp return_from_interrupt
|
|
|
|
|
|
} ; CONFIG_TAPE_HEAD_ALIGN
|