1 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
3 ; LOADER.SYSTEM - an Apple][ ProDOS 8 loader for cc65 programs (Oliver Schmidt) ;
5 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
19 GET_FILE_INFO_CALL = $C4
23 FILE_NOT_FOUND_ERR = $46
25 ; ------------------------------------------------------------------------
27 .import __CODE_0300_SIZE__, __DATA_0300_SIZE__
28 .import __CODE_0300_LOAD__, __CODE_0300_RUN__
30 ; ------------------------------------------------------------------------
35 .byte $0A ;PARAM_COUNT
36 .addr PATHNAME ;PATHNAME
39 FILE_INFO_ADDR: .word $0000 ;AUX_TYPE
40 .byte $00 ;STORAGE_TYPE
41 .word $0000 ;BLOCKS_USED
44 .word $0000 ;CREATE_DATE
45 .word $0000 ;CREATE_TIME
48 .byte $03 ;PARAM_COUNT
49 .addr PATHNAME ;PATHNAME
50 .addr MLI - 1024 ;IO_BUFFER
51 OPEN_REF: .byte $00 ;REF_NUM
58 .byte " ...", $0D, $0D, $00
60 ; ------------------------------------------------------------------------
65 .byte $04 ;PARAM_COUNT
66 READ_REF: .byte $00 ;REF_NUM
67 READ_ADDR: .addr $0000 ;DATA_BUFFER
68 .word $FFFF ;REQUEST_COUNT
69 .word $0000 ;TRANS_COUNT
72 .byte $01 ;PARAM_COUNT
73 CLOSE_REF: .byte $00 ;REF_NUM
76 .byte $04 ;PARAM_COUNT
83 .asciiz "... File Not Found"
89 .asciiz " - Press Any Key "
91 ; ------------------------------------------------------------------------
105 ; Relocate CODE_0300 and DATA_0300
106 ldx #<(__CODE_0300_SIZE__ + __DATA_0300_SIZE__)
107 : lda __CODE_0300_LOAD__-1,x
108 sta __CODE_0300_RUN__-1,x
112 ; Remove ".SYSTEM" from pathname
115 sbc #.strlen(".SYSTEM")
118 ; Add trailing '\0' to pathname
123 ; Copy ProDOS startup filename and trailing '\0' to stack
126 beq :++ ; Branch always
132 ; Provide some user feedback
144 .byte GET_FILE_INFO_CALL
145 .word GET_FILE_INFO_PARAM
155 ; Copy file reference number
160 ; Get load address from aux-type
166 ; It's high time to leave this place
167 jmp __CODE_0300_RUN__
169 ; ------------------------------------------------------------------------
183 ; Copy REM and startup filename to BASIC input buffer
186 bne :++ ; Branch always
204 cmp #$60 ; lowercase ?
206 and #$5F ; -> uppercase
210 bne :-- ; Branch always
214 cmp #FILE_NOT_FOUND_ERR
219 beq :++ ; Branch always
226 : lda #<PRESS_ANY_KEY