1 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
3 ; Apple][ ProDOS 8 system program for loading binary programs (Oliver Schmidt) ;
5 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
26 GET_FILE_INFO_CALL = $C4
30 FILE_NOT_FOUND_ERR = $46
32 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
34 .import __CODE_0300_SIZE__, __DATA_0300_SIZE__
35 .import __CODE_0300_LOAD__, __CODE_0300_RUN__
37 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
42 .byte $0A ;PARAM_COUNT
43 .addr PATHNAME ;PATHNAME
46 FILE_INFO_ADDR: .word $0000 ;AUX_TYPE
47 .byte $00 ;STORAGE_TYPE
48 .word $0000 ;BLOCKS_USED
51 .word $0000 ;CREATE_DATE
52 .word $0000 ;CREATE_TIME
55 .byte $03 ;PARAM_COUNT
56 .addr PATHNAME ;PATHNAME
57 .addr MLI - 1024 ;IO_BUFFER
58 OPEN_REF: .byte $00 ;REF_NUM
65 .byte " ...", $0D, $0D, $00
67 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
72 .byte $04 ;PARAM_COUNT
73 READ_REF: .byte $00 ;REF_NUM
74 READ_ADDR: .addr $0000 ;DATA_BUFFER
75 .word $FFFF ;REQUEST_COUNT
76 .word $0000 ;TRANS_COUNT
79 .byte $01 ;PARAM_COUNT
80 CLOSE_REF: .byte $00 ;REF_NUM
86 .byte $04 ;PARAM_COUNT
95 .asciiz "... File Not Found"
101 .asciiz " - Press Any Key "
103 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
117 ; Relocate CODE_0300 and DATA_0300
118 ldx #<(__CODE_0300_SIZE__ + __DATA_0300_SIZE__)
119 : lda __CODE_0300_LOAD__ - 1,x
120 sta __CODE_0300_RUN__ - 1,x
126 ; Jump to dispatcher on program exit
137 ; Jump to dispatcher on RESET
146 ; Jump to RESET on program exit
162 ; That's what it's all about !
168 ; Overwrite the whole system bit map
171 ; Set protection for pages $B8 - $BF
176 ; Set protection for pages $08 - $B7
182 ; Set protection for pages $00 - $07
183 lda #%11011111 ; include page $03
186 ; Remove ".SYSTEM" from pathname
189 sbc #.strlen(".SYSTEM")
192 ; Add trailing '\0' to pathname
197 ; Copy ProDOS startup filename and trailing '\0' to stack
206 ; Provide some user feedback
218 .byte GET_FILE_INFO_CALL
219 .word GET_FILE_INFO_PARAM
229 ; Copy file reference number
234 ; Get load address from aux-type
236 ldx FILE_INFO_ADDR + 1
240 ; It's high time to leave this place
241 jmp __CODE_0300_RUN__
243 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
257 ; Copy REM token and startup filename to BASIC input buffer
278 cmp #$60 ; lowercase ?
280 and #$5F ; -> uppercase
288 cmp #FILE_NOT_FOUND_ERR
300 : lda #<PRESS_ANY_KEY
318 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;