Removed (pretty inconsistently used) tab chars from source code base.
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
#################################################################################
|
||||
# #
|
||||
# #
|
||||
# LOADER.SYSTEM - an Apple][ ProDOS 8 loader for cc65 programs (Oliver Schmidt) #
|
||||
# #
|
||||
#################################################################################
|
||||
|
||||
@@ -4,231 +4,231 @@
|
||||
; ;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
A1L := $3C
|
||||
A1H := $3D
|
||||
STACK := $0100
|
||||
BUF := $0200
|
||||
PATHNAME := $0280
|
||||
MLI := $BF00
|
||||
VERSION := $FBB3
|
||||
RDKEY := $FD0C
|
||||
PRBYTE := $FDDA
|
||||
COUT := $FDED
|
||||
A1L := $3C
|
||||
A1H := $3D
|
||||
STACK := $0100
|
||||
BUF := $0200
|
||||
PATHNAME := $0280
|
||||
MLI := $BF00
|
||||
VERSION := $FBB3
|
||||
RDKEY := $FD0C
|
||||
PRBYTE := $FDDA
|
||||
COUT := $FDED
|
||||
|
||||
QUIT_CALL = $65
|
||||
QUIT_CALL = $65
|
||||
GET_FILE_INFO_CALL = $C4
|
||||
OPEN_CALL = $C8
|
||||
READ_CALL = $CA
|
||||
CLOSE_CALL = $CC
|
||||
OPEN_CALL = $C8
|
||||
READ_CALL = $CA
|
||||
CLOSE_CALL = $CC
|
||||
FILE_NOT_FOUND_ERR = $46
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
.import __CODE_0300_SIZE__, __DATA_0300_SIZE__
|
||||
.import __CODE_0300_LOAD__, __CODE_0300_RUN__
|
||||
.import __CODE_0300_SIZE__, __DATA_0300_SIZE__
|
||||
.import __CODE_0300_LOAD__, __CODE_0300_RUN__
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
.segment "DATA_2000"
|
||||
.segment "DATA_2000"
|
||||
|
||||
GET_FILE_INFO_PARAM:
|
||||
.byte $0A ;PARAM_COUNT
|
||||
.addr PATHNAME ;PATHNAME
|
||||
.byte $00 ;ACCESS
|
||||
.byte $00 ;FILE_TYPE
|
||||
FILE_INFO_ADDR: .word $0000 ;AUX_TYPE
|
||||
.byte $00 ;STORAGE_TYPE
|
||||
.word $0000 ;BLOCKS_USED
|
||||
.word $0000 ;MOD_DATE
|
||||
.word $0000 ;MOD_TIME
|
||||
.word $0000 ;CREATE_DATE
|
||||
.word $0000 ;CREATE_TIME
|
||||
.byte $0A ;PARAM_COUNT
|
||||
.addr PATHNAME ;PATHNAME
|
||||
.byte $00 ;ACCESS
|
||||
.byte $00 ;FILE_TYPE
|
||||
FILE_INFO_ADDR: .word $0000 ;AUX_TYPE
|
||||
.byte $00 ;STORAGE_TYPE
|
||||
.word $0000 ;BLOCKS_USED
|
||||
.word $0000 ;MOD_DATE
|
||||
.word $0000 ;MOD_TIME
|
||||
.word $0000 ;CREATE_DATE
|
||||
.word $0000 ;CREATE_TIME
|
||||
|
||||
OPEN_PARAM:
|
||||
.byte $03 ;PARAM_COUNT
|
||||
.addr PATHNAME ;PATHNAME
|
||||
.addr MLI - 1024 ;IO_BUFFER
|
||||
OPEN_REF: .byte $00 ;REF_NUM
|
||||
.byte $03 ;PARAM_COUNT
|
||||
.addr PATHNAME ;PATHNAME
|
||||
.addr MLI - 1024 ;IO_BUFFER
|
||||
OPEN_REF: .byte $00 ;REF_NUM
|
||||
|
||||
LOADING:
|
||||
.byte $0D
|
||||
.asciiz "Loading "
|
||||
.byte $0D
|
||||
.asciiz "Loading "
|
||||
|
||||
ELLIPSES:
|
||||
.byte " ...", $0D, $0D, $00
|
||||
.byte " ...", $0D, $0D, $00
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
.segment "DATA_0300"
|
||||
.segment "DATA_0300"
|
||||
|
||||
READ_PARAM:
|
||||
.byte $04 ;PARAM_COUNT
|
||||
READ_REF: .byte $00 ;REF_NUM
|
||||
READ_ADDR: .addr $0000 ;DATA_BUFFER
|
||||
.word $FFFF ;REQUEST_COUNT
|
||||
.word $0000 ;TRANS_COUNT
|
||||
.byte $04 ;PARAM_COUNT
|
||||
READ_REF: .byte $00 ;REF_NUM
|
||||
READ_ADDR: .addr $0000 ;DATA_BUFFER
|
||||
.word $FFFF ;REQUEST_COUNT
|
||||
.word $0000 ;TRANS_COUNT
|
||||
|
||||
CLOSE_PARAM:
|
||||
.byte $01 ;PARAM_COUNT
|
||||
CLOSE_REF: .byte $00 ;REF_NUM
|
||||
.byte $01 ;PARAM_COUNT
|
||||
CLOSE_REF: .byte $00 ;REF_NUM
|
||||
|
||||
QUIT_PARAM:
|
||||
.byte $04 ;PARAM_COUNT
|
||||
.byte $00 ;QUIT_TYPE
|
||||
.word $0000 ;RESERVED
|
||||
.byte $00 ;RESERVED
|
||||
.word $0000 ;RESERVED
|
||||
.byte $04 ;PARAM_COUNT
|
||||
.byte $00 ;QUIT_TYPE
|
||||
.word $0000 ;RESERVED
|
||||
.byte $00 ;RESERVED
|
||||
.word $0000 ;RESERVED
|
||||
|
||||
FILE_NOT_FOUND:
|
||||
.asciiz "... File Not Found"
|
||||
|
||||
.asciiz "... File Not Found"
|
||||
|
||||
ERROR_NUMBER:
|
||||
.asciiz "... Error $"
|
||||
.asciiz "... Error $"
|
||||
|
||||
PRESS_ANY_KEY:
|
||||
.asciiz " - Press Any Key "
|
||||
.asciiz " - Press Any Key "
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
.segment "CODE_2000"
|
||||
.segment "CODE_2000"
|
||||
|
||||
jmp :+
|
||||
.byte $EE
|
||||
.byte $EE
|
||||
.byte 65
|
||||
STARTUP:.res 65
|
||||
jmp :+
|
||||
.byte $EE
|
||||
.byte $EE
|
||||
.byte 65
|
||||
STARTUP:.res 65
|
||||
|
||||
; Reset stack
|
||||
: ldx #$FF
|
||||
txs
|
||||
; Reset stack
|
||||
: ldx #$FF
|
||||
txs
|
||||
|
||||
; Relocate CODE_0300 and DATA_0300
|
||||
ldx #<(__CODE_0300_SIZE__ + __DATA_0300_SIZE__)
|
||||
: lda __CODE_0300_LOAD__ - 1,x
|
||||
sta __CODE_0300_RUN__ - 1,x
|
||||
dex
|
||||
bne :-
|
||||
; Relocate CODE_0300 and DATA_0300
|
||||
ldx #<(__CODE_0300_SIZE__ + __DATA_0300_SIZE__)
|
||||
: lda __CODE_0300_LOAD__ - 1,x
|
||||
sta __CODE_0300_RUN__ - 1,x
|
||||
dex
|
||||
bne :-
|
||||
|
||||
; Remove ".SYSTEM" from pathname
|
||||
lda PATHNAME
|
||||
sec
|
||||
sbc #.strlen(".SYSTEM")
|
||||
sta PATHNAME
|
||||
; Remove ".SYSTEM" from pathname
|
||||
lda PATHNAME
|
||||
sec
|
||||
sbc #.strlen(".SYSTEM")
|
||||
sta PATHNAME
|
||||
|
||||
; Add trailing '\0' to pathname
|
||||
tax
|
||||
lda #$00
|
||||
sta PATHNAME + 1,x
|
||||
; Add trailing '\0' to pathname
|
||||
tax
|
||||
lda #$00
|
||||
sta PATHNAME + 1,x
|
||||
|
||||
; Copy ProDOS startup filename and trailing '\0' to stack
|
||||
ldx STARTUP
|
||||
lda #$00
|
||||
beq :++ ; bra
|
||||
: lda STARTUP + 1,x
|
||||
: sta STACK,x
|
||||
dex
|
||||
bpl :--
|
||||
; Copy ProDOS startup filename and trailing '\0' to stack
|
||||
ldx STARTUP
|
||||
lda #$00
|
||||
beq :++ ; bra
|
||||
: lda STARTUP + 1,x
|
||||
: sta STACK,x
|
||||
dex
|
||||
bpl :--
|
||||
|
||||
; Provide some user feedback
|
||||
lda #<LOADING
|
||||
ldx #>LOADING
|
||||
jsr PRINT
|
||||
lda #<(PATHNAME + 1)
|
||||
ldx #>(PATHNAME + 1)
|
||||
jsr PRINT
|
||||
lda #<ELLIPSES
|
||||
ldx #>ELLIPSES
|
||||
jsr PRINT
|
||||
; Provide some user feedback
|
||||
lda #<LOADING
|
||||
ldx #>LOADING
|
||||
jsr PRINT
|
||||
lda #<(PATHNAME + 1)
|
||||
ldx #>(PATHNAME + 1)
|
||||
jsr PRINT
|
||||
lda #<ELLIPSES
|
||||
ldx #>ELLIPSES
|
||||
jsr PRINT
|
||||
|
||||
jsr MLI
|
||||
.byte GET_FILE_INFO_CALL
|
||||
.word GET_FILE_INFO_PARAM
|
||||
bcc :+
|
||||
jmp ERROR
|
||||
jsr MLI
|
||||
.byte GET_FILE_INFO_CALL
|
||||
.word GET_FILE_INFO_PARAM
|
||||
bcc :+
|
||||
jmp ERROR
|
||||
|
||||
: jsr MLI
|
||||
.byte OPEN_CALL
|
||||
.word OPEN_PARAM
|
||||
bcc :+
|
||||
jmp ERROR
|
||||
: jsr MLI
|
||||
.byte OPEN_CALL
|
||||
.word OPEN_PARAM
|
||||
bcc :+
|
||||
jmp ERROR
|
||||
|
||||
; Copy file reference number
|
||||
: lda OPEN_REF
|
||||
sta READ_REF
|
||||
sta CLOSE_REF
|
||||
; Copy file reference number
|
||||
: lda OPEN_REF
|
||||
sta READ_REF
|
||||
sta CLOSE_REF
|
||||
|
||||
; Get load address from aux-type
|
||||
lda FILE_INFO_ADDR
|
||||
ldx FILE_INFO_ADDR + 1
|
||||
sta READ_ADDR
|
||||
stx READ_ADDR + 1
|
||||
; Get load address from aux-type
|
||||
lda FILE_INFO_ADDR
|
||||
ldx FILE_INFO_ADDR + 1
|
||||
sta READ_ADDR
|
||||
stx READ_ADDR + 1
|
||||
|
||||
; It's high time to leave this place
|
||||
jmp __CODE_0300_RUN__
|
||||
; It's high time to leave this place
|
||||
jmp __CODE_0300_RUN__
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
.segment "CODE_0300"
|
||||
.segment "CODE_0300"
|
||||
|
||||
jsr MLI
|
||||
.byte READ_CALL
|
||||
.word READ_PARAM
|
||||
bcs ERROR
|
||||
jsr MLI
|
||||
.byte READ_CALL
|
||||
.word READ_PARAM
|
||||
bcs ERROR
|
||||
|
||||
jsr MLI
|
||||
.byte CLOSE_CALL
|
||||
.word CLOSE_PARAM
|
||||
bcs ERROR
|
||||
jsr MLI
|
||||
.byte CLOSE_CALL
|
||||
.word CLOSE_PARAM
|
||||
bcs ERROR
|
||||
|
||||
; Copy REM token and startup filename to BASIC input buffer
|
||||
ldx #$00
|
||||
lda #$B2
|
||||
bne :++ ; bra
|
||||
: inx
|
||||
lda a:STACK - 1,x
|
||||
: sta BUF,x
|
||||
bne :--
|
||||
|
||||
; Go for it ...
|
||||
jmp (READ_ADDR)
|
||||
; Copy REM token and startup filename to BASIC input buffer
|
||||
ldx #$00
|
||||
lda #$B2
|
||||
bne :++ ; bra
|
||||
: inx
|
||||
lda a:STACK - 1,x
|
||||
: sta BUF,x
|
||||
bne :--
|
||||
|
||||
; Go for it ...
|
||||
jmp (READ_ADDR)
|
||||
|
||||
PRINT:
|
||||
sta A1L
|
||||
stx A1H
|
||||
ldx VERSION
|
||||
ldy #$00
|
||||
: lda (A1L),y
|
||||
beq :++
|
||||
cpx #$06 ; //e ?
|
||||
beq :+
|
||||
cmp #$60 ; lowercase ?
|
||||
bcc :+
|
||||
and #$5F ; -> uppercase
|
||||
: ora #$80
|
||||
jsr COUT
|
||||
iny
|
||||
bne :-- ; bra
|
||||
: rts
|
||||
sta A1L
|
||||
stx A1H
|
||||
ldx VERSION
|
||||
ldy #$00
|
||||
: lda (A1L),y
|
||||
beq :++
|
||||
cpx #$06 ; //e ?
|
||||
beq :+
|
||||
cmp #$60 ; lowercase ?
|
||||
bcc :+
|
||||
and #$5F ; -> uppercase
|
||||
: ora #$80
|
||||
jsr COUT
|
||||
iny
|
||||
bne :-- ; bra
|
||||
: rts
|
||||
|
||||
ERROR:
|
||||
cmp #FILE_NOT_FOUND_ERR
|
||||
bne :+
|
||||
lda #<FILE_NOT_FOUND
|
||||
ldx #>FILE_NOT_FOUND
|
||||
jsr PRINT
|
||||
beq :++ ; bra
|
||||
: pha
|
||||
lda #<ERROR_NUMBER
|
||||
ldx #>ERROR_NUMBER
|
||||
jsr PRINT
|
||||
pla
|
||||
jsr PRBYTE
|
||||
: lda #<PRESS_ANY_KEY
|
||||
ldx #>PRESS_ANY_KEY
|
||||
jsr PRINT
|
||||
jsr RDKEY
|
||||
jsr MLI
|
||||
.byte QUIT_CALL
|
||||
.word QUIT_PARAM
|
||||
cmp #FILE_NOT_FOUND_ERR
|
||||
bne :+
|
||||
lda #<FILE_NOT_FOUND
|
||||
ldx #>FILE_NOT_FOUND
|
||||
jsr PRINT
|
||||
beq :++ ; bra
|
||||
: pha
|
||||
lda #<ERROR_NUMBER
|
||||
ldx #>ERROR_NUMBER
|
||||
jsr PRINT
|
||||
pla
|
||||
jsr PRBYTE
|
||||
: lda #<PRESS_ANY_KEY
|
||||
ldx #>PRESS_ANY_KEY
|
||||
jsr PRINT
|
||||
jsr RDKEY
|
||||
jsr MLI
|
||||
.byte QUIT_CALL
|
||||
.word QUIT_PARAM
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
Reference in New Issue
Block a user