started work on integrated head align tool

This commit is contained in:
FeralChild64 committed 2020-06-02 15:27:16 +02:00
1 parent a87d6bd065
commit e06046e82e
20 files changed
+187 -30

No files matched your search

+3 -2
View File
@@ -54,9 +54,9 @@
// #define CONFIG_IEC_BURST_CIA2 // please keep disabled for now // #define CONFIG_IEC_BURST_CIA2 // please keep disabled for now
// #define CONFIG_IEC_BURST_SOFT // please keep disabled for now // #define CONFIG_IEC_BURST_SOFT // please keep disabled for now
#define CONFIG_TAPE_NORMAL // #define CONFIG_TAPE_NORMAL
#define CONFIG_TAPE_TURBO #define CONFIG_TAPE_TURBO
#define CONFIG_TAPE_AUTODETECT // #define CONFIG_TAPE_AUTODETECT
// #define CONFIG_TAPE_NO_KEY_SENSE // #define CONFIG_TAPE_NO_KEY_SENSE
// #define CONFIG_TAPE_NO_MOTOR_CONTROL // #define CONFIG_TAPE_NO_MOTOR_CONTROL
// #define CONFIG_TAPE_NO_ERROR_CORRECTION // #define CONFIG_TAPE_NO_ERROR_CORRECTION
@@ -124,6 +124,7 @@
#define CONFIG_PANIC_SCREEN #define CONFIG_PANIC_SCREEN
#define CONFIG_DOS_WEDGE #define CONFIG_DOS_WEDGE
#define CONFIG_TAPE_WEDGE #define CONFIG_TAPE_WEDGE
#define CONFIG_TAPE_HEAD_ALIGN // XXX work in progress
#define CONFIG_BCD_SAFE_INTERRUPTS #define CONFIG_BCD_SAFE_INTERRUPTS
+1
View File
@@ -117,6 +117,7 @@
// #define CONFIG_PANIC_SCREEN // #define CONFIG_PANIC_SCREEN
// #define CONFIG_DOS_WEDGE // #define CONFIG_DOS_WEDGE
// #define CONFIG_TAPE_WEDGE // #define CONFIG_TAPE_WEDGE
// #define CONFIG_TAPE_HEAD_ALIGN // XXX work in progress
#define CONFIG_BCD_SAFE_INTERRUPTS #define CONFIG_BCD_SAFE_INTERRUPTS
+1
View File
@@ -115,6 +115,7 @@
#define CONFIG_PANIC_SCREEN #define CONFIG_PANIC_SCREEN
#define CONFIG_DOS_WEDGE #define CONFIG_DOS_WEDGE
#define CONFIG_TAPE_WEDGE #define CONFIG_TAPE_WEDGE
// #define CONFIG_TAPE_HEAD_ALIGN // XXX work in progress
#define CONFIG_BCD_SAFE_INTERRUPTS #define CONFIG_BCD_SAFE_INTERRUPTS
+4 -3
View File
@@ -96,11 +96,11 @@
.const CONFIG_KEYCMD_HELP = @"LIST" .const CONFIG_KEYCMD_HELP = @"LIST"
.const CONFIG_KEYCMD_F9 = @"REM F9" .const CONFIG_KEYCMD_F9 = @"BOOT"
.const CONFIG_KEYCMD_F10 = @"REM F10" .const CONFIG_KEYCMD_F10 = @"REM F10"
.const CONFIG_KEYCMD_F11 = @"REM F11" .const CONFIG_KEYCMD_F11 = @"MONITOR"
.const CONFIG_KEYCMD_F12 = @"REM F12" .const CONFIG_KEYCMD_F12 = @"REM F12"
.const CONFIG_KEYCMD_F13 = @"REM F13" .const CONFIG_KEYCMD_F13 = @"\$5FH"
.const CONFIG_KEYCMD_F14 = @"REM F14" .const CONFIG_KEYCMD_F14 = @"REM F14"
@@ -115,6 +115,7 @@
#define CONFIG_PANIC_SCREEN #define CONFIG_PANIC_SCREEN
#define CONFIG_DOS_WEDGE #define CONFIG_DOS_WEDGE
#define CONFIG_TAPE_WEDGE #define CONFIG_TAPE_WEDGE
// #define CONFIG_TAPE_HEAD_ALIGN // XXX work in progress
#define CONFIG_BCD_SAFE_INTERRUPTS #define CONFIG_BCD_SAFE_INTERRUPTS
+1
View File
@@ -115,6 +115,7 @@
#define CONFIG_PANIC_SCREEN #define CONFIG_PANIC_SCREEN
#define CONFIG_DOS_WEDGE #define CONFIG_DOS_WEDGE
#define CONFIG_TAPE_WEDGE #define CONFIG_TAPE_WEDGE
// #define CONFIG_TAPE_HEAD_ALIGN // XXX work in progress
#define CONFIG_BCD_SAFE_INTERRUPTS #define CONFIG_BCD_SAFE_INTERRUPTS
+1
View File
@@ -115,6 +115,7 @@
#define CONFIG_PANIC_SCREEN #define CONFIG_PANIC_SCREEN
#define CONFIG_DOS_WEDGE #define CONFIG_DOS_WEDGE
#define CONFIG_TAPE_WEDGE #define CONFIG_TAPE_WEDGE
// #define CONFIG_TAPE_HEAD_ALIGN // XXX work in progress
#define CONFIG_BCD_SAFE_INTERRUPTS #define CONFIG_BCD_SAFE_INTERRUPTS
+3
View File
@@ -298,6 +298,9 @@
#if CONFIG_TAPE_WEDGE && !CONFIG_TAPE_TURBO #if CONFIG_TAPE_WEDGE && !CONFIG_TAPE_TURBO
.error "CONFIG_TAPE_WEDGE requires CONFIG_TAPE_TURBO" .error "CONFIG_TAPE_WEDGE requires CONFIG_TAPE_TURBO"
#endif #endif
#if !CONFIG_TAPE_WEDGE && CONFIG_TAPE_HEAD_ALIGN
.error "CONFIG_TAPE_HEAD_ALIGN requires CONFIG_TAPE_WEDGE"
#endif
} }
+4
View File
@@ -125,6 +125,10 @@
.label SID_RANDOM = $D41B .label SID_RANDOM = $D41B
.label SID_ENV3 = $D41C .label SID_ENV3 = $D41C
// Color COLOR_RAM
.label COLOR_RAM = $D800
// CIA #1 registers // CIA #1 registers
.label __CIA1_BASE = $DC00 // base address of the chip .label __CIA1_BASE = $DC00 // base address of the chip
+4
View File
@@ -50,3 +50,7 @@
#if CONFIG_SHOW_PAL_NTSC #if CONFIG_SHOW_PAL_NTSC
.label print_pal_ntsc = KERNAL().print_pal_ntsc .label print_pal_ntsc = KERNAL().print_pal_ntsc
#endif #endif
#if CONFIG_TAPE_HEAD_ALIGN
.label tape_head_align = KERNAL().tape_head_align
#endif
+3 -20
View File
@@ -22,25 +22,9 @@ cmd_load:
// Check for the file name // Check for the file name
jsr basic_end_of_statement_check jsr basic_end_of_statement_check
bcc !+ bcc cmd_load_fetch_filename
#if CONFIG_TAPE_NORMAL || CONFIG_TAPE_TURBO // Try to load the first file from disk
// No file name given, just load the first file from tape
ldx #$00
stx SA // secondary address
#if CONFIG_TAPE_NORMAL
inx // 1 - for normal tape format
#else
ldx #$07 // 7 - for turbo tape format
#endif
stx FA // device number
bne cmd_load_got_secondaryaddress // branch always
#else
// Without tape support, try to load the first file from disk
lda #$01 // name length lda #$01 // name length
ldx #<cmd_load_default_filename ldx #<cmd_load_default_filename
@@ -52,9 +36,8 @@ cmd_load_default_filename:
.text "*" .text "*"
#endif cmd_load_fetch_filename:
!:
jsr basic_fetch_and_consume_character jsr basic_fetch_and_consume_character
cmp #$22 cmp #$22
beq !+ beq !+
+22 -1
View File
@@ -17,8 +17,20 @@ wedge_tape:
bne_16 do_SYNTAX_error bne_16 do_SYNTAX_error
lda BUF+1 lda BUF+1
cmp #$4C // 'L' cmp #$4C // 'L'
bne_16 do_SYNTAX_error beq wedge_arrow_L
#if CONFIG_TAPE_HEAD_ALIGN
cmp #$48 // 'H'
beq wedge_arrow_H
#endif
jmp do_SYNTAX_error
wedge_arrow_L:
// Execute 'arrow + L' // Execute 'arrow + L'
@@ -34,5 +46,14 @@ wedge_tape:
jmp cmd_load_got_secondaryaddress jmp cmd_load_got_secondaryaddress
#if CONFIG_TAPE_HEAD_ALIGN
wedge_arrow_H:
jsr tape_head_align
jmp basic_main_loop
#endif
#endif // CONFIG_TAPE_WEDGE #endif // CONFIG_TAPE_WEDGE
@@ -17,6 +17,7 @@
.label VK1__load_tape_normal = $4000 + 2 * 3 .label VK1__load_tape_normal = $4000 + 2 * 3
.label VK1__load_tape_turbo = $4000 + 2 * 4 .label VK1__load_tape_turbo = $4000 + 2 * 4
.label VK1__load_tape_auto = $4000 + 2 * 5 .label VK1__load_tape_auto = $4000 + 2 * 5
.label VK1__tape_head_align = $4000 + 2 * 6
#else #else
@@ -44,5 +45,10 @@
.word $0000 .word $0000
#endif #endif
#if CONFIG_TAPE_HEAD_ALIGN
.word tape_head_align
#else
.word $0000
#endif
#endif #endif
-1
View File
@@ -55,5 +55,4 @@ proxy_K1_print_return:
jsr print_return jsr print_return
jmp map_KERNAL_1 jmp map_KERNAL_1
#endif #endif
@@ -2,7 +2,7 @@
// #LAYOUT# * * #IGNORE // #LAYOUT# * * #IGNORE
// //
// ROM routine call redirect for tape loading // ROM routine call redirect for tape routines
// //
@@ -37,3 +37,14 @@ load_tape_auto:
jmp map_NORMAL jmp map_NORMAL
#endif #endif
#if CONFIG_TAPE_HEAD_ALIGN
tape_head_align:
jsr map_KERNAL_1
jsr_ind VK1__tape_head_align
jmp map_NORMAL
#endif
+1 -1
View File
@@ -68,7 +68,7 @@ screen_scroll_up_delay_done: // entry point for cursor move control codes
sta SAL+1 sta SAL+1
sta EAL+1 sta EAL+1
lda #>$D800 lda #>COLOR_RAM
sta PNT+1 sta PNT+1
sta USER+1 sta USER+1
@@ -50,7 +50,7 @@ screen_calculate_USER:
sec sec
sbc HIBASE sbc HIBASE
clc clc
adc #>$d800 adc #>COLOR_RAM
sta USER+1 sta USER+1
rts rts
+1
View File
@@ -45,6 +45,7 @@ load_tape_normal:
// Start playing // Start playing
jsr tape_common_prepare_cia jsr tape_common_prepare_cia
jsr tape_ask_play jsr tape_ask_play
jsr tape_prepare_reading
// FALLTROUGH // FALLTROUGH
+1
View File
@@ -32,6 +32,7 @@ load_tape_auto:
// Start playing // Start playing
jsr tape_common_prepare_cia jsr tape_common_prepare_cia
jsr tape_ask_play jsr tape_ask_play
jsr tape_prepare_reading
// FALLTROUGH // FALLTROUGH
+9
View File
@@ -104,6 +104,15 @@ tape_wait_first_pulse:
tape_wait_play_done: tape_wait_play_done:
rts
//
// Prepare screen / tape motor for reading
//
tape_prepare_reading:
#if CONFIG_MB_MEGA_65 #if CONFIG_MB_MEGA_65
// Display confirmation // Display confirmation
+109
View File
@@ -0,0 +1,109 @@
// #LAYOUT# STD * #TAKE
// #LAYOUT# M65 KERNAL_1 #TAKE
// #LAYOUT# * * #IGNORE
//
// Tape (normal) helper routine - reading speed calibration
//
// Needs pulse length in .A
//
#if CONFIG_TAPE_HEAD_ALIGN
tape_head_align:
#if (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0)
jsr map_KERNAL_1
jsr_ind VK1__tape_head_align
jmp map_NORMAL
#else
// Start by asking for tape playback
// jsr tape_ask_play
// Disable interrupts
sei
// Set IO to default values
jsr IOINIT
jsr cint_legacy
// Clear color data ($0800)
ldy #$00
!:
lda #($10 + $06) // XXX synchronize colors with setup_vicii
sta $0800, y
sta $0900, y
sta $0A00, y
sta $0B00, y
iny
bne !-
// Clear bitmap data ($2000)
lda #$20
sta SAL+1
tya // put 0 to .A
sta SAL+0
!:
sta (SAL), y
iny
bne !-
inc SAL+1
ldx SAL+1
cpx #$40
bne !-
// Set graphics mode
lda #$28 // graphic memory start at $2000, color at $0800
sta VIC_YMCSB
lda #$3B // set bit 5 to enable graphic mode
sta VIC_SCROLY
// Set tape timing
// XXX
tape_head_align_loop_1:
// XXX waste pulse
tape_head_align_loop_2:
// XXX get pulse
// XXX put pulse
// XXX check time; if not enough passed - next iteration tape_head_align_loop2
// XXX check for STOP key; if pressed, quit
// XXX scroll
jmp tape_head_align_loop_1
tape_head_align_quit:
// Clear screen, restore old display settings
jsr cint_legacy
// XXX restore COLOR, VIC_EXTCOL, VIC_BGCOL0, CIA2_PRA
cli
rts // XXX perform new after quit
#endif // ROM layout
#endif // CONFIG_TAPE_HEAD_ALIGN