From c1104e0738d5d99d337202d797326c6330b9d5af Mon Sep 17 00:00:00 2001 From: FeralChild64 Date: Sat, 2 Nov 2019 23:32:40 +0100 Subject: [PATCH] tape load now handles secondary address --- STATUS.md | 1 - c64/kernal/tape/load_tape_turbo.s | 1 - c64/kernal/tape/tape_common.s | 36 +++++++++++++++++++++++++++++-- 3 files changed, 34 insertions(+), 4 deletions(-) diff --git a/STATUS.md b/STATUS.md index 73d59193..f849504d 100644 --- a/STATUS.md +++ b/STATUS.md @@ -33,7 +33,6 @@ The following ROM features are currently missing: * BASIC expression parsing * floating point routines * tape (normal mode) support -* tape loading ignores secondary address and has no pattern matching * IEC support for SAVE * RS-232 support * NMI handling is incomplete diff --git a/c64/kernal/tape/load_tape_turbo.s b/c64/kernal/tape/load_tape_turbo.s index 138ce3f1..e1cfe6b7 100644 --- a/c64/kernal/tape/load_tape_turbo.s +++ b/c64/kernal/tape/load_tape_turbo.s @@ -8,7 +8,6 @@ // XXX use calibration bits to improve reading -// XXX handle load address from Kernal API #if CONFIG_TAPE_TURBO diff --git a/c64/kernal/tape/tape_common.s b/c64/kernal/tape/tape_common.s index f9d21c02..2875973a 100644 --- a/c64/kernal/tape/tape_common.s +++ b/c64/kernal/tape/tape_common.s @@ -164,6 +164,38 @@ tape_handle_header: lda (TAPE1), y sta EAL+1 + // Handle the secondary address, 0 means loading to location from MEMUSS + + lda SA + bne !+ + + // EAL = EAL - STAL + + sec + lda EAL+0 + sbc STAL+0 + sta EAL+0 + lda EAL+1 + sbc STAL+1 + sta EAL+1 + + // STAL = MEMUSS + + lda MEMUSS+0 + sta STAL+0 + lda MEMUSS+1 + sta STAL+1 + + // EAL = EAL + STAL + + clc + lda EAL+0 + adc STAL+0 + sta EAL+0 + lda EAL+1 + adc STAL+1 + sta EAL+1 +!: // Print LOADING jsr lvs_display_loading_verifying @@ -269,9 +301,9 @@ tape_load_success: jsr tape_screen_show_motor_off jsr lvs_display_done jsr print_return - +!: cli - jmp lvs_success_end + jmp lvs_return_last_address tape_load_error: