adapted to Kick Assembler, some documentation update
This commit is contained in:
1 parent
ae23dbae7b
commit
de27124b4f
198 files changed
+4181
-3976
No files matched your search
@@ -1,57 +1,57 @@
|
||||
|
||||
;; 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
|
||||
// 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
|
||||
.alias U64_CONTROL $DF1C ; write
|
||||
.alias U64_STATUS $DF1C ; read
|
||||
.alias U64_COMMAND_DATA $DF1D ; write
|
||||
.alias U64_IDENTIFICATION $DF1D ; read
|
||||
.alias U64_RESPONSE_DATA $DF1E ; read only
|
||||
.alias U64_STATUS_DATA $DF1F ; read only
|
||||
// Command interface registers
|
||||
.label U64_CONTROL = $DF1C // write
|
||||
.label U64_STATUS = $DF1C // read
|
||||
.label U64_COMMAND_DATA = $DF1D // write
|
||||
.label U64_IDENTIFICATION = $DF1D // read
|
||||
.label U64_RESPONSE_DATA = $DF1E // read only
|
||||
.label U64_STATUS_DATA = $DF1F // read only
|
||||
|
||||
;; Constant for U64_IDENTIFICATION register
|
||||
.alias U64_MAGIC_ID $C9
|
||||
// Constant for U64_IDENTIFICATION register
|
||||
.const U64_MAGIC_ID = $C9
|
||||
|
||||
;; Constants for U64_CONTROL register
|
||||
.alias U64_CTRL_BIT_PUSH_CMD $01
|
||||
.alias U64_CTRL_BIT_DATA_ACC $02
|
||||
.alias U64_CTRL_BIT_ABORT $04
|
||||
.alias U64_CTRL_BIT_CLR_ERR $08
|
||||
// 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
|
||||
.alias U64_STAT_BIT_CMD_BUSY $01
|
||||
.alias U64_STAT_BIT_DATA_ACC $02
|
||||
.alias U64_STAT_BIT_ABORT_P $04
|
||||
.alias U64_STAT_BIT_ERROR $08
|
||||
.alias U64_STAT_MASK_STATE $30 ; two bits!
|
||||
.alias U64_STAT_BIT_STAT_AV $40
|
||||
.alias U64_STAT_BIT_DATA_AV $80
|
||||
// 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
|
||||
.alias U64_TARGET_DOS1 $01
|
||||
.alias U64_TARGET_DOS2 $02
|
||||
// Interface targets
|
||||
.const U64_TARGET_DOS1 = $01
|
||||
.const U64_TARGET_DOS2 = $02
|
||||
|
||||
;; DOS command codes
|
||||
.alias U64_DOS_CMD_IDENTIFY $01
|
||||
.alias U64_DOS_CMD_OPEN_FILE $02
|
||||
.alias U64_DOS_CMD_CLOSE_FILE $03
|
||||
.alias U64_DOS_CMD_READ_DATA $04
|
||||
.alias U64_DOS_CMD_WRITE_DATA $05
|
||||
.alias U64_DOS_CMD_FILE_SEEK $06
|
||||
.alias U64_DOS_CMD_FILE_INFO $07
|
||||
.alias U64_DOS_CMD_CHANGE_DIR $11
|
||||
.alias U64_DOS_CMD_GET_PATH $12
|
||||
.alias U64_DOS_CMD_OPEN_DIR $13
|
||||
.alias U64_DOS_CMD_READ_DIR $14
|
||||
.alias U64_DOS_CMD_COPY_UI_PATH $15
|
||||
.alias U64_DOS_CMD_LOAD_REU $21
|
||||
.alias U64_DOS_CMD_SAVE_REU $22
|
||||
.alias U64_DOS_CMD_ECHO $F0
|
||||
// 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
|
||||
.alias U64_FA_READ $01
|
||||
.alias U64_FA_WRITE $02
|
||||
.alias U64_FA_CREATE_NEW $03
|
||||
.alias U64_FA_CREATE_ALWAYS $04
|
||||
// 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
|
||||
@@ -1,9 +1,9 @@
|
||||
|
||||
;; Target-specific hooks
|
||||
// Target-specific hooks
|
||||
|
||||
|
||||
.macro TARGET_HOOK_LOAD
|
||||
;; XXX disabled for now - the current file opening API is not
|
||||
;; really suitable for easy usage from Kernal
|
||||
;; jsr u64_load
|
||||
.macend
|
||||
.macro TARGET_HOOK_LOAD() {
|
||||
// XXX disabled for now - the current file opening API is not
|
||||
// really suitable for easy usage from Kernal
|
||||
// jsr u64_load
|
||||
}
|
||||
@@ -1,52 +1,53 @@
|
||||
|
||||
;;
|
||||
;; LOAD routine hook for fast loading via UltiDOS
|
||||
;;
|
||||
//
|
||||
// LOAD routine hook for fast loading via UltiDOS
|
||||
//
|
||||
|
||||
|
||||
u64_load:
|
||||
|
||||
;; First check whether the command interface is enabled
|
||||
// First check whether the command interface is enabled
|
||||
lda U64_IDENTIFICATION
|
||||
cmp #U64_MAGIC_ID
|
||||
beq +
|
||||
beq !+
|
||||
|
||||
u64_load_skip:
|
||||
rts
|
||||
*
|
||||
;; XXX find out which device number softIEC is mapped to
|
||||
!:
|
||||
// XXX find out which device number softIEC is mapped to
|
||||
lda current_device_number
|
||||
cmp #$20 ; for now use device number 32
|
||||
cmp #$20 // for now use device number 32
|
||||
bne u64_load_skip
|
||||
|
||||
;; Takeover the flow completely
|
||||
|
||||
// Takeover the flow completely
|
||||
pla
|
||||
pla
|
||||
|
||||
;; Display SEARCHING FOR + filename
|
||||
// Display SEARCHING FOR + filename
|
||||
jsr lvs_display_searching_for
|
||||
|
||||
;; Whatever the interface was doing - ask to abort it
|
||||
// Whatever the interface was doing - ask to abort it
|
||||
jsr u64_load_abort
|
||||
|
||||
;; Send a command to open the file
|
||||
|
||||
// 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
|
||||
|
||||
// Check status
|
||||
jsr u64_load_check_status
|
||||
bcs lvs_file_not_found_error
|
||||
|
||||
;; Load first two bytes to determine start address
|
||||
// Load first two bytes to determine start address
|
||||
|
||||
// XXX
|
||||
|
||||
;; XXX
|
||||
|
||||
jsr printf
|
||||
.byte "DBG: NOT IMPLEMENTED",$0D,0
|
||||
.text "DBG: NOT IMPLEMENTED"
|
||||
.byte $0D,0
|
||||
|
||||
jmp lvs_wrap_around_error
|
||||
rts
|
||||
@@ -54,77 +55,77 @@ u64_load_skip:
|
||||
u64_load_abort:
|
||||
lda #U64_CTRL_BIT_ABORT
|
||||
sta U64_CONTROL
|
||||
*
|
||||
!:
|
||||
lda U64_STATUS
|
||||
bne -
|
||||
bne !-
|
||||
rts
|
||||
|
||||
u64_load_send_cmd:
|
||||
|
||||
ldx #U64_TARGET_DOS2
|
||||
stx U64_COMMAND_DATA ; target
|
||||
sta U64_COMMAND_DATA ; command code
|
||||
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+
|
||||
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
|
||||
// Push the command for execution
|
||||
lda #U64_CTRL_BIT_PUSH_CMD
|
||||
sta U64_CONTROL
|
||||
;; Wait till it is complete
|
||||
*
|
||||
// Wait till it is complete
|
||||
!:
|
||||
lda U64_STATUS
|
||||
and #U64_STAT_BIT_CMD_BUSY
|
||||
bne -
|
||||
bne !-
|
||||
rts
|
||||
|
||||
u64_load_check_status:
|
||||
;; Wait till status is available
|
||||
// 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
|
||||
// Status is ready - check the first character
|
||||
lda U64_STATUS_DATA
|
||||
jsr JCHROUT ; XXX for test only
|
||||
cmp #$30 ; '0'
|
||||
jsr JCHROUT // XXX for test only
|
||||
cmp #$30 // '0'
|
||||
bne u64_load_check_status_wrong
|
||||
|
||||
;; Check the second status character
|
||||
// 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'
|
||||
jsr JCHROUT // XXX for test only
|
||||
cmp #$30 // '0'
|
||||
beq u64_load_check_status_ok
|
||||
|
||||
;; FALLTROUGH
|
||||
// FALLTROUGH
|
||||
u64_load_check_status_wrong:
|
||||
sec
|
||||
bcs +
|
||||
bcs !+
|
||||
u64_load_check_status_ok:
|
||||
clc
|
||||
*
|
||||
;; Now empty the status queue
|
||||
!:
|
||||
// Now empty the status queue
|
||||
lda U64_STATUS
|
||||
and #U64_STAT_BIT_STAT_AV
|
||||
beq +
|
||||
beq !+
|
||||
lda U64_STATUS_DATA
|
||||
jsr JCHROUT ; XXX for test only
|
||||
jmp -
|
||||
*
|
||||
jsr JCHROUT // XXX for test only
|
||||
jmp !-
|
||||
!:
|
||||
rts
|
||||
Reference in new issue
Block a user