more sane directory name, updated binaries
This commit is contained in:
1 parent
d4d32095d1
commit
76aaf298b8
697 files changed
+56
-56
No files matched your search
@@ -0,0 +1,55 @@
|
||||
|
||||
// Registers according to Ultimate 64 Command Interface description,
|
||||
// https://1541u-documentation.readthedocs.io/en/latest/command%20interface.html
|
||||
// and ultimate_dos_v1.0.pdf and command_interface_v1.0.pdf by Gideon Zweijtzer
|
||||
|
||||
// Command interface registers
|
||||
.label U64_CONTROL_STATUS = $DF1C // write = CONTROL, read = STATUS
|
||||
.label U64_COMMAND_DATA_IDENTIFY = $DF1D // write = COMMAND_DATA, read = IDENTIFICATION
|
||||
.label U64_RESPONSE_DATA = $DF1E // read only
|
||||
.label U64_STATUS_DATA = $DF1F // read only
|
||||
|
||||
// Constant for U64_IDENTIFICATION register
|
||||
.const U64_MAGIC_ID = $C9
|
||||
|
||||
// Constants for U64_CONTROL register
|
||||
.const U64_CTRL_BIT_PUSH_CMD = $01
|
||||
.const U64_CTRL_BIT_DATA_ACC = $02
|
||||
.const U64_CTRL_BIT_ABORT = $04
|
||||
.const U64_CTRL_BIT_CLR_ERR = $08
|
||||
|
||||
// Constants for U64_STATUS register
|
||||
.const U64_STAT_BIT_CMD_BUSY = $01
|
||||
.const U64_STAT_BIT_DATA_ACC = $02
|
||||
.const U64_STAT_BIT_ABORT_P = $04
|
||||
.const U64_STAT_BIT_ERROR = $08
|
||||
.const U64_STAT_MASK_STATE = $30 // two bits!
|
||||
.const U64_STAT_BIT_STAT_AV = $40
|
||||
.const U64_STAT_BIT_DATA_AV = $80
|
||||
|
||||
// Interface targets
|
||||
.const U64_TARGET_DOS1 = $01
|
||||
.const U64_TARGET_DOS2 = $02
|
||||
|
||||
// DOS command codes
|
||||
.const U64_DOS_CMD_IDENTIFY = $01
|
||||
.const U64_DOS_CMD_OPEN_FILE = $02
|
||||
.const U64_DOS_CMD_CLOSE_FILE = $03
|
||||
.const U64_DOS_CMD_READ_DATA = $04
|
||||
.const U64_DOS_CMD_WRITE_DATA = $05
|
||||
.const U64_DOS_CMD_FILE_SEEK = $06
|
||||
.const U64_DOS_CMD_FILE_INFO = $07
|
||||
.const U64_DOS_CMD_CHANGE_DIR = $11
|
||||
.const U64_DOS_CMD_GET_PATH = $12
|
||||
.const U64_DOS_CMD_OPEN_DIR = $13
|
||||
.const U64_DOS_CMD_READ_DIR = $14
|
||||
.const U64_DOS_CMD_COPY_UI_PATH = $15
|
||||
.const U64_DOS_CMD_LOAD_REU = $21
|
||||
.const U64_DOS_CMD_SAVE_REU = $22
|
||||
.const U64_DOS_CMD_ECHO = $F0
|
||||
|
||||
// DOS file opening constants
|
||||
.const U64_FA_READ = $01
|
||||
.const U64_FA_WRITE = $02
|
||||
.const U64_FA_CREATE_NEW = $03
|
||||
.const U64_FA_CREATE_ALWAYS = $04
|
||||
@@ -0,0 +1,134 @@
|
||||
// #LAYOUT# STD * #TAKE
|
||||
// #LAYOUT# * KERNAL_0 #TAKE
|
||||
// #LAYOUT# * * #IGNORE
|
||||
|
||||
//
|
||||
// LOAD routine hook for fast loading via UltiDOS
|
||||
//
|
||||
|
||||
|
||||
u64_load:
|
||||
|
||||
// First check whether the command interface is enabled
|
||||
lda U64_IDENTIFICATION
|
||||
cmp #U64_MAGIC_ID
|
||||
beq !+
|
||||
|
||||
u64_load_skip:
|
||||
rts
|
||||
!:
|
||||
// XXX find out which device number softIEC is mapped to
|
||||
lda current_device_number
|
||||
cmp #$20 // for now use device number 32
|
||||
bne u64_load_skip
|
||||
|
||||
// Takeover the flow completely
|
||||
pla
|
||||
pla
|
||||
|
||||
// Display SEARCHING FOR + filename
|
||||
jsr lvs_display_searching_for
|
||||
|
||||
// Whatever the interface was doing - ask to abort it
|
||||
jsr u64_load_abort
|
||||
|
||||
// Send a command to open the file
|
||||
lda #U64_DOS_CMD_OPEN_FILE
|
||||
jsr u64_load_send_cmd
|
||||
lda #U64_FA_READ
|
||||
jsr u64_load_send_cmd
|
||||
jsr u64_load_send_filename
|
||||
jsr u64_load_finalize_cmd
|
||||
|
||||
// Check status
|
||||
jsr u64_load_check_status
|
||||
bcs lvs_file_not_found_error
|
||||
|
||||
// Load first two bytes to determine start address
|
||||
|
||||
// XXX
|
||||
|
||||
jsr printf
|
||||
.text "DBG: NOT IMPLEMENTED"
|
||||
.byte $0D,0
|
||||
|
||||
jmp lvs_wrap_around_error
|
||||
rts
|
||||
|
||||
u64_load_abort:
|
||||
lda #U64_CTRL_BIT_ABORT
|
||||
sta U64_CONTROL
|
||||
!:
|
||||
lda U64_STATUS
|
||||
bne !-
|
||||
rts
|
||||
|
||||
u64_load_send_cmd:
|
||||
|
||||
ldx #U64_TARGET_DOS2
|
||||
stx U64_COMMAND_DATA // target
|
||||
sta U64_COMMAND_DATA // command code
|
||||
rts
|
||||
|
||||
u64_load_send_filename:
|
||||
ldy #0
|
||||
u64_load_send_filename_loop:
|
||||
cpy FNLEN
|
||||
bne !+
|
||||
rts
|
||||
!:
|
||||
ldx #<current_filename_ptr
|
||||
jsr peek_under_roms
|
||||
iny
|
||||
|
||||
sta U64_COMMAND_DATA
|
||||
jmp u64_load_send_filename_loop
|
||||
|
||||
u64_load_finalize_cmd:
|
||||
// Push the command for execution
|
||||
lda #U64_CTRL_BIT_PUSH_CMD
|
||||
sta U64_CONTROL
|
||||
// Wait till it is complete
|
||||
!:
|
||||
lda U64_STATUS
|
||||
and #U64_STAT_BIT_CMD_BUSY
|
||||
bne !-
|
||||
rts
|
||||
|
||||
u64_load_check_status:
|
||||
// Wait till status is available
|
||||
lda U64_STATUS
|
||||
and #U64_STAT_BIT_STAT_AV
|
||||
beq u64_load_check_status
|
||||
|
||||
// Status is ready - check the first character
|
||||
lda U64_STATUS_DATA
|
||||
jsr JCHROUT // XXX for test only
|
||||
cmp #$30 // '0'
|
||||
bne u64_load_check_status_wrong
|
||||
|
||||
// Check the second status character
|
||||
lda U64_STATUS
|
||||
and #U64_STAT_BIT_STAT_AV
|
||||
beq u64_load_check_status_ok
|
||||
lda U64_STATUS_DATA
|
||||
jsr JCHROUT // XXX for test only
|
||||
cmp #$30 // '0'
|
||||
beq u64_load_check_status_ok
|
||||
|
||||
// FALLTROUGH
|
||||
u64_load_check_status_wrong:
|
||||
sec
|
||||
bcs !+
|
||||
u64_load_check_status_ok:
|
||||
clc
|
||||
!:
|
||||
// Now empty the status queue
|
||||
lda U64_STATUS
|
||||
and #U64_STAT_BIT_STAT_AV
|
||||
beq !+
|
||||
lda U64_STATUS_DATA
|
||||
jsr JCHROUT // XXX for test only
|
||||
jmp !-
|
||||
!:
|
||||
rts
|
||||
Reference in new issue
Block a user