adapted to Kick Assembler, some documentation update

This commit is contained in:
FeralChild64 committed 2019-09-07 12:35:21 +02:00
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