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

148 lines
2.1 KiB
ArmAsm

// #LAYOUT# STD * #TAKE
// #LAYOUT# M65 KERNAL_1 #TAKE
// #LAYOUT# * * #IGNORE
//
// Tape head alignemnt tool - prints out a help message on screen
//
#if CONFIG_TAPE_HEAD_ALIGN
// Helper variable - reuse BASIC numeric work area on zero page
.label __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
!:
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
!:
// Retrieve and print character
lda tape_head_align_help_text, y
iny
cmp #$FF
beq !--
sty __ha_storage
jsr tape_head_align_print_char
ldy __ha_storage
bne !- // 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
!:
lda (SAL), y
sta (EAL), y
dey
bpl !-
// Prepare EAL for the next character
lda EAL+0
clc
adc #$08
sta EAL+0
bne !+
inc EAL+1
!:
rts
//
// Strings to print
//
.encoding "screencode_upper"
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
.text "COMPUTER HAS TO TELL THE SIGNALS APART"
.byte $FF
.word $2000 + (40 * 8) * 3 + 8 * 6
.text "ALIGN HEAD FOR MINIMUM NOISE"
.byte $FF
.word $2000 + (40 * 8) * 6 + 8 * 2
.text "IF THE DECK HAS A PITCH (TAPE SPEED)"
.byte $FF
.word $2000 + (40 * 8) * 7 + 8 * 1
.text "CONTROL, TWEAK IT SO THAT DOTTED LINES"
.byte $FF
.word $2000 + (40 * 8) * 8 + 8 * 5
.text "ARE HALF A WAY BETWEEN SIGNALS"
.byte $FF
.byte $FF // end of strings
#endif