LOAD for normal (standard system) tapes works, still needs a lot of work
This commit is contained in:
1 parent
dc00b3cc6b
commit
c497e3b03c
18 files changed
+134
-89
No files matched your search
@@ -119,6 +119,12 @@ Adds support for JiffyDOS fast protocol to the IEC bus.
|
|||||||
|
|
||||||
Needs about 430 bytes in KERNAL segment. If unsure - enable.
|
Needs about 430 bytes in KERNAL segment. If unsure - enable.
|
||||||
|
|
||||||
|
### `CONFIG_TAPE_LOAD`
|
||||||
|
|
||||||
|
Adds a minimal normal (standard Commodore format) tape support - just LOAD command.
|
||||||
|
|
||||||
|
Needs some space in KERNAL segment. If unsure - enable.
|
||||||
|
|
||||||
### `CONFIG_TAPE_TURBO`
|
### `CONFIG_TAPE_TURBO`
|
||||||
|
|
||||||
Adds a minimal turbo tape support - just LOAD command (device 7, like on _Action Replay_ and _Final_ cartridges)
|
Adds a minimal turbo tape support - just LOAD command (device 7, like on _Action Replay_ and _Final_ cartridges)
|
||||||
|
|||||||
@@ -52,7 +52,7 @@ The following ROM features are currently missing:
|
|||||||
|
|
||||||
| Driver | Status | Remarks |
|
| Driver | Status | Remarks |
|
||||||
| :-----------: | :------: | :------------------------------------------------: |
|
| :-----------: | :------: | :------------------------------------------------: |
|
||||||
| normal | NOT DONE | |
|
| normal | PARITAL | works, but needs improvements, no error correction |
|
||||||
| turbo | PARTIAL | works, to do: use sync to calibrate read speed |
|
| turbo | PARTIAL | works, to do: use sync to calibrate read speed |
|
||||||
|
|
||||||
## IEC bus (disk drives, etc.)
|
## IEC bus (disk drives, etc.)
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -11,6 +11,7 @@
|
|||||||
// - file contains options to enable unfinished functionalities
|
// - file contains options to enable unfinished functionalities
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Hardware platform and brand
|
// Hardware platform and brand
|
||||||
|
|
||||||
#define CONFIG_PLATFORM_COMMODORE_64
|
#define CONFIG_PLATFORM_COMMODORE_64
|
||||||
@@ -48,7 +49,7 @@
|
|||||||
// #define CONFIG_IEC_DOLPHINDOS // please keep disabled for now
|
// #define CONFIG_IEC_DOLPHINDOS // please keep disabled for now
|
||||||
#define CONFIG_IEC_JIFFYDOS
|
#define CONFIG_IEC_JIFFYDOS
|
||||||
|
|
||||||
#define CONFIG_TAPE_NORMAL // not finished yet!
|
#define CONFIG_TAPE_NORMAL
|
||||||
#define CONFIG_TAPE_TURBO
|
#define CONFIG_TAPE_TURBO
|
||||||
|
|
||||||
// #define CONFIG_RS232_UP2400 // please keep disabled for now
|
// #define CONFIG_RS232_UP2400 // please keep disabled for now
|
||||||
|
|||||||
@@ -11,6 +11,7 @@
|
|||||||
// - do not enable features which are a significant compatibility risk
|
// - do not enable features which are a significant compatibility risk
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Hardware platform and brand
|
// Hardware platform and brand
|
||||||
|
|
||||||
#define CONFIG_PLATFORM_COMMODORE_64
|
#define CONFIG_PLATFORM_COMMODORE_64
|
||||||
@@ -44,6 +45,7 @@
|
|||||||
#define CONFIG_IEC_BLANK_SCREEN
|
#define CONFIG_IEC_BLANK_SCREEN
|
||||||
#define CONFIG_IEC_JIFFYDOS
|
#define CONFIG_IEC_JIFFYDOS
|
||||||
|
|
||||||
|
#define CONFIG_TAPE_NORMAL
|
||||||
#define CONFIG_TAPE_TURBO
|
#define CONFIG_TAPE_TURBO
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -11,6 +11,7 @@
|
|||||||
// - do not enable features which are a significant compatibility risk
|
// - do not enable features which are a significant compatibility risk
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Hardware platform and brand
|
// Hardware platform and brand
|
||||||
|
|
||||||
#define CONFIG_PLATFORM_COMMODORE_64
|
#define CONFIG_PLATFORM_COMMODORE_64
|
||||||
@@ -44,6 +45,7 @@
|
|||||||
#define CONFIG_IEC_BLANK_SCREEN
|
#define CONFIG_IEC_BLANK_SCREEN
|
||||||
#define CONFIG_IEC_JIFFYDOS
|
#define CONFIG_IEC_JIFFYDOS
|
||||||
|
|
||||||
|
// #define CONFIG_TAPE_NORMAL
|
||||||
// #define CONFIG_TAPE_TURBO
|
// #define CONFIG_TAPE_TURBO
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -43,15 +43,11 @@
|
|||||||
|
|
||||||
#define CONFIG_IEC
|
#define CONFIG_IEC
|
||||||
// #define CONFIG_IEC_BLANK_SCREEN
|
// #define CONFIG_IEC_BLANK_SCREEN
|
||||||
// #define CONFIG_IEC_DOLPHINDOS // please keep disabled for now
|
|
||||||
#define CONFIG_IEC_JIFFYDOS
|
#define CONFIG_IEC_JIFFYDOS
|
||||||
|
|
||||||
// #define CONFIG_TAPE_NORMAL // please keep disabled for now
|
// #define CONFIG_TAPE_NORMAL
|
||||||
#define CONFIG_TAPE_TURBO
|
#define CONFIG_TAPE_TURBO
|
||||||
|
|
||||||
// #define CONFIG_RS232_UP2400 // please keep disabled for now
|
|
||||||
// #define CONFIG_RS232_UP9600 // please keep disabled for now
|
|
||||||
|
|
||||||
|
|
||||||
// Multiple SID support
|
// Multiple SID support
|
||||||
|
|
||||||
|
|||||||
@@ -11,6 +11,7 @@
|
|||||||
// - do not enable features which are a significant compatibility risk
|
// - do not enable features which are a significant compatibility risk
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Hardware platform and brand
|
// Hardware platform and brand
|
||||||
|
|
||||||
#define CONFIG_PLATFORM_COMMODORE_64
|
#define CONFIG_PLATFORM_COMMODORE_64
|
||||||
@@ -44,10 +45,10 @@
|
|||||||
#define CONFIG_IEC_BLANK_SCREEN
|
#define CONFIG_IEC_BLANK_SCREEN
|
||||||
#define CONFIG_IEC_JIFFYDOS
|
#define CONFIG_IEC_JIFFYDOS
|
||||||
|
|
||||||
|
#define CONFIG_TAPE_NORMAL
|
||||||
#define CONFIG_TAPE_TURBO
|
#define CONFIG_TAPE_TURBO
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Multiple SID support
|
// Multiple SID support
|
||||||
|
|
||||||
// #define CONFIG_SID_2ND
|
// #define CONFIG_SID_2ND
|
||||||
|
|||||||
@@ -297,13 +297,13 @@
|
|||||||
.var features_str = ""
|
.var features_str = ""
|
||||||
|
|
||||||
#if CONFIG_TAPE_NORMAL && !CONFIG_TAPE_TURBO
|
#if CONFIG_TAPE_NORMAL && !CONFIG_TAPE_TURBO
|
||||||
.eval features_str = ADD_FEATURE(features_str, "TAPE LOAD NORMAL-DEV")
|
.eval features_str = ADD_FEATURE(features_str, "TAPE LOAD NORMAL")
|
||||||
#endif
|
#endif
|
||||||
#if !CONFIG_TAPE_NORMAL && CONFIG_TAPE_TURBO
|
#if !CONFIG_TAPE_NORMAL && CONFIG_TAPE_TURBO
|
||||||
.eval features_str = ADD_FEATURE(features_str, "TAPE LOAD TURBO")
|
.eval features_str = ADD_FEATURE(features_str, "TAPE LOAD TURBO")
|
||||||
#endif
|
#endif
|
||||||
#if CONFIG_TAPE_NORMAL && CONFIG_TAPE_TURBO
|
#if CONFIG_TAPE_NORMAL && CONFIG_TAPE_TURBO
|
||||||
.eval features_str = ADD_FEATURE(features_str, "TAPE LOAD NORMAL-DEV TURBO")
|
.eval features_str = ADD_FEATURE(features_str, "TAPE LOAD NORMAL TURBO")
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
.eval feature_new_line = true
|
.eval feature_new_line = true
|
||||||
|
|||||||
@@ -63,6 +63,31 @@ load_tape_normal:
|
|||||||
|
|
||||||
load_tape_normal_header:
|
load_tape_normal_header:
|
||||||
|
|
||||||
|
/* XXX try to reuse block retrieeval rooutine, like this:
|
||||||
|
|
||||||
|
// Try to load header into tape buffer
|
||||||
|
|
||||||
|
lda TAPE1+1
|
||||||
|
sta MEMUSS+1
|
||||||
|
lda TAPE1+0
|
||||||
|
sta MEMUSS+0
|
||||||
|
|
||||||
|
// Initialize checksum (RIPRTY, see http://sta.c64.org/cbm64mem.html)
|
||||||
|
|
||||||
|
lda #$00
|
||||||
|
sta RIPRTY
|
||||||
|
|
||||||
|
// Retrieve the header XXX limit it to 192 bytes
|
||||||
|
|
||||||
|
jsr tape_normal_get_block
|
||||||
|
bcs load_tape_normal_header // unable to read block, try again
|
||||||
|
|
||||||
|
// Handle the header
|
||||||
|
|
||||||
|
jsr tape_handle_header
|
||||||
|
bcs load_tape_normal_header // if name does not match, look for other header
|
||||||
|
*/
|
||||||
|
|
||||||
// Read pilot and sync of the first header
|
// Read pilot and sync of the first header
|
||||||
|
|
||||||
jsr tape_normal_pilot
|
jsr tape_normal_pilot
|
||||||
@@ -117,9 +142,15 @@ load_tape_normal_header_loop:
|
|||||||
|
|
||||||
load_tape_normal_payload:
|
load_tape_normal_payload:
|
||||||
|
|
||||||
// Retrieve block
|
// Initialize checksum (RIPRTY, see http://sta.c64.org/cbm64mem.html)
|
||||||
|
|
||||||
jsr tape_normal_get_block // XXX handle errors
|
lda #$00
|
||||||
|
sta RIPRTY
|
||||||
|
|
||||||
|
// Retrieve data
|
||||||
|
|
||||||
|
jsr tape_normal_get_data
|
||||||
|
bcs_far tape_load_error
|
||||||
|
|
||||||
// Advance MEMUSS (see Mapping the C64, page 36), check if end
|
// Advance MEMUSS (see Mapping the C64, page 36), check if end
|
||||||
|
|
||||||
@@ -130,9 +161,9 @@ load_tape_normal_payload:
|
|||||||
bcc !+
|
bcc !+
|
||||||
inc MEMUSS+1
|
inc MEMUSS+1
|
||||||
!:
|
!:
|
||||||
|
// XXX check below does not work - why?
|
||||||
jsr lvs_check_EAL
|
// jsr lvs_check_EAL
|
||||||
bne load_tape_normal_payload
|
// bne_far tape_load_error // amount of data read does not match header info
|
||||||
|
|
||||||
jmp tape_load_success
|
jmp tape_load_success
|
||||||
|
|
||||||
|
|||||||
@@ -1,74 +0,0 @@
|
|||||||
|
|
||||||
//
|
|
||||||
// Tape (normal) helper routine - block reading
|
|
||||||
//
|
|
||||||
// Stores data starting from MEMUSS, Carry set means error, on 0 bit .A is 0 too
|
|
||||||
//
|
|
||||||
|
|
||||||
|
|
||||||
// XXX does not detect block end - find out why
|
|
||||||
// XXX improve error handling - do not ignore second copy, handle damaged checksum byte, handle damaged sync part
|
|
||||||
|
|
||||||
|
|
||||||
tape_normal_get_block:
|
|
||||||
|
|
||||||
// Read the pilot and sync of the block
|
|
||||||
|
|
||||||
jsr tape_normal_pilot
|
|
||||||
ldy #$89
|
|
||||||
jsr tape_normal_sync // XXX handle result
|
|
||||||
|
|
||||||
// Initialize byte counter and block checksum (RIPRTY, see http://sta.c64.org/cbm64mem.html)
|
|
||||||
ldy #$00
|
|
||||||
sty RIPRTY
|
|
||||||
|
|
||||||
tape_normal_get_block_loop:
|
|
||||||
|
|
||||||
jsr tape_normal_get_marker
|
|
||||||
bcs tape_normal_get_block_checksum // end of data for the block
|
|
||||||
jsr tape_normal_get_byte
|
|
||||||
|
|
||||||
bcs tape_normal_get_block_done // error reading byte - fatal for now
|
|
||||||
|
|
||||||
// Store byte, calculate checksum
|
|
||||||
sta (MEMUSS), y
|
|
||||||
eor RIPRTY
|
|
||||||
sta RIPRTY
|
|
||||||
|
|
||||||
iny
|
|
||||||
bne tape_normal_get_block_loop
|
|
||||||
|
|
||||||
// FALLTROUGH - if we are here, it means the block is too long
|
|
||||||
|
|
||||||
tape_normal_get_block_done_fail:
|
|
||||||
|
|
||||||
sec
|
|
||||||
rts
|
|
||||||
|
|
||||||
tape_normal_get_block_checksum:
|
|
||||||
.break
|
|
||||||
jsr tape_normal_get_byte
|
|
||||||
bcs tape_normal_get_block_done // cannot get block checksum - fatal for now
|
|
||||||
|
|
||||||
eor RIPRTY
|
|
||||||
cmp #$01
|
|
||||||
bcs tape_normal_get_block_done // checksum error - fatal for now
|
|
||||||
|
|
||||||
// Read trailing pulses
|
|
||||||
|
|
||||||
jsr tape_normal_sync // XXX handle result
|
|
||||||
|
|
||||||
// Read the pilot and sync of the backup block
|
|
||||||
|
|
||||||
jsr tape_normal_pilot
|
|
||||||
ldy #$09
|
|
||||||
jsr tape_normal_sync // XXX handle result
|
|
||||||
|
|
||||||
// For now we ignore the backup block
|
|
||||||
clc
|
|
||||||
|
|
||||||
// FALLTROUGH
|
|
||||||
|
|
||||||
tape_normal_get_block_done:
|
|
||||||
|
|
||||||
rts
|
|
||||||
@@ -0,0 +1,80 @@
|
|||||||
|
|
||||||
|
//
|
||||||
|
// Tape (normal) helper routine - data block reading
|
||||||
|
//
|
||||||
|
// Stores data starting from MEMUSS, Carry set means error, on 0 bit .A is 0 too
|
||||||
|
//
|
||||||
|
|
||||||
|
|
||||||
|
// XXX improve error handling - do not ignore second copy, handle damaged sync part
|
||||||
|
|
||||||
|
|
||||||
|
#if CONFIG_TAPE_NORMAL
|
||||||
|
|
||||||
|
|
||||||
|
tape_normal_get_data:
|
||||||
|
|
||||||
|
// Read the pilot and sync of the block
|
||||||
|
|
||||||
|
jsr tape_normal_pilot
|
||||||
|
ldy #$89
|
||||||
|
jsr tape_normal_sync
|
||||||
|
bcs tape_normal_get_block_done // XXX make it more erroor resistant
|
||||||
|
|
||||||
|
// Initialize byte counter
|
||||||
|
ldy #$00
|
||||||
|
|
||||||
|
tape_normal_get_data_loop:
|
||||||
|
|
||||||
|
jsr tape_normal_get_marker
|
||||||
|
bcs tape_normal_get_data_2nd_copy // end of data for the block
|
||||||
|
jsr tape_normal_get_byte
|
||||||
|
|
||||||
|
bcs tape_normal_get_block_done // error reading byte - fatal for now
|
||||||
|
|
||||||
|
// Store byte, calculate checksum
|
||||||
|
sta (MEMUSS), y
|
||||||
|
eor RIPRTY
|
||||||
|
sta RIPRTY
|
||||||
|
|
||||||
|
iny
|
||||||
|
bne tape_normal_get_data_loop
|
||||||
|
|
||||||
|
// 256 bytes read
|
||||||
|
|
||||||
|
inc MEMUSS+1
|
||||||
|
jmp tape_normal_get_data_loop
|
||||||
|
|
||||||
|
tape_normal_get_data_2nd_copy:
|
||||||
|
|
||||||
|
// Read the pilot and sync of the block
|
||||||
|
|
||||||
|
jsr tape_normal_pilot
|
||||||
|
ldy #$09
|
||||||
|
jsr tape_normal_sync
|
||||||
|
bcs tape_normal_get_block_done // XXX make it more error resistant
|
||||||
|
|
||||||
|
// For now skip the error correction data
|
||||||
|
!:
|
||||||
|
jsr tape_normal_get_marker
|
||||||
|
bcs tape_normal_get_checksum
|
||||||
|
jsr tape_normal_get_byte
|
||||||
|
tay
|
||||||
|
jmp !-
|
||||||
|
|
||||||
|
tape_normal_get_checksum:
|
||||||
|
|
||||||
|
tya
|
||||||
|
eor RIPRTY
|
||||||
|
cmp #$01 // sets Carry if checksum verification failed
|
||||||
|
|
||||||
|
clc // XXX checksum calculation fails - why?
|
||||||
|
|
||||||
|
// FALLTROUGH
|
||||||
|
|
||||||
|
tape_normal_get_block_done:
|
||||||
|
|
||||||
|
rts
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
||||||
Reference in new issue
Block a user