144 lines
2.0 KiB
ArmAsm
144 lines
2.0 KiB
ArmAsm
;; #LAYOUT# STD * #TAKE
|
|
;; #LAYOUT# CRT KERNAL_0 #TAKE
|
|
;; #LAYOUT# M65 KERNAL_1 #TAKE
|
|
;; #LAYOUT# * * #IGNORE
|
|
|
|
;
|
|
; Tape head alignemnt tool - prints out a help message on screen
|
|
;
|
|
|
|
|
|
!ifdef CONFIG_TAPE_HEAD_ALIGN {
|
|
|
|
|
|
; Helper variable - reuse BASIC numeric work area on zero page
|
|
|
|
!addr __ha_storage = TEMPF1; ; 1 byte
|
|
|
|
|
|
tape_head_align_print_help:
|
|
|
|
; Make screen font visible
|
|
|
|
lda CPU_R6510
|
|
pha
|
|
and #%11111011
|
|
sta CPU_R6510
|
|
|
|
; Print help message
|
|
|
|
ldy #$00
|
|
|
|
; Retrieve address
|
|
@1:
|
|
lda tape_head_align_help_text, y
|
|
iny
|
|
cmp #$FF
|
|
beq tape_head_align_print_end
|
|
sta EAL+0
|
|
|
|
lda tape_head_align_help_text, y
|
|
iny
|
|
sta EAL+1
|
|
@2:
|
|
; Retrieve and print character
|
|
|
|
lda tape_head_align_help_text, y
|
|
iny
|
|
cmp #$FF
|
|
beq @1
|
|
|
|
sty __ha_storage
|
|
jsr tape_head_align_print_char
|
|
ldy __ha_storage
|
|
|
|
bne @2 ; branch alwats
|
|
|
|
|
|
tape_head_align_print_end:
|
|
|
|
; Restore normal memory configuration and quit
|
|
|
|
pla
|
|
sta CPU_R6510
|
|
rts
|
|
|
|
tape_head_align_print_string:
|
|
|
|
|
|
|
|
tape_head_align_print_char:
|
|
|
|
; Calculate start address of character in .A
|
|
|
|
sta SAL+0
|
|
lda #$00
|
|
sta SAL+1
|
|
|
|
asl SAL+0
|
|
rol SAL+1
|
|
asl SAL+0
|
|
rol SAL+1
|
|
asl SAL+0
|
|
rol SAL+1
|
|
|
|
clc
|
|
lda SAL+1
|
|
adc #$D0
|
|
sta SAL+1
|
|
|
|
; Print out the character
|
|
|
|
ldy #$07
|
|
@3:
|
|
lda (SAL), y
|
|
sta (EAL), y
|
|
dey
|
|
bpl @3
|
|
|
|
; Prepare EAL for the next character
|
|
|
|
lda EAL+0
|
|
clc
|
|
adc #$08
|
|
sta EAL+0
|
|
bne @4
|
|
inc EAL+1
|
|
@4:
|
|
rts
|
|
|
|
|
|
;
|
|
; Strings to print
|
|
;
|
|
|
|
tape_head_align_help_text:
|
|
|
|
; Each string consists of:
|
|
; - destination (start byte) address
|
|
; - text in screencodes
|
|
; - $FF to mark end
|
|
|
|
!word $2000 + (40 * 8) * 0 + 8 * 1
|
|
!scr "computer has to tell the signals apart"
|
|
!byte $FF
|
|
|
|
!word $2000 + (40 * 8) * 3 + 8 * 6
|
|
!scr "align head for minimum noise"
|
|
!byte $FF
|
|
|
|
!word $2000 + (40 * 8) * 6 + 8 * 2
|
|
!scr "if the deck has a pitch (tape speed)"
|
|
!byte $FF
|
|
|
|
!word $2000 + (40 * 8) * 7 + 8 * 1
|
|
!scr "control, tweak it so that dotted lines"
|
|
!byte $FF
|
|
|
|
!word $2000 + (40 * 8) * 8 + 8 * 5
|
|
!scr "are half a way between signals"
|
|
!byte $FF
|
|
|
|
!byte $FF ; end of strings
|
|
}
|