1 ******************************** 2 * QUICKFILE HANDLER 1.0 3 * FOR MC3 4 * DANIEL TUFVESSON 2013-2014 5 ******************************** 6 0000 7 ******************************** 8 * MONITOR LABLES 9 ******************************** 10 C000 RETURN EQU $C000 RETURN TO PROMPT 11 C003 OUTCHAR EQU $C003 OUTPUT CHAR ON CONSOLE 12 C006 INCHAR EQU $C006 INPUT CHAR FROM CONSOLE AND ECHO 13 C009 PDATA EQU $C009 PRINT TEXT STRING @ X ENDED BY $04 14 C012 OUT2HS EQU $C012 PRINT 2 HEX CHARS @ X 15 C015 OUT4HS EQU $C015 PRINT 4 HEX CHARS @ X 16 C01E BADDR EQU $C01E INPUT ADDRESS TO X. CARRY SET = OK 17 0000 18 7FE5 CONSVEC EQU $7FE5 CONSOLE STATUS VECTOR 19 7FE8 CONOVEC EQU $7FE8 CONSOLE OUTPUT VECTOR 20 7FEB CONIVEC EQU $7FEB CONSOLE INPUT VECTOR 21 0000 22 ******************************** 23 * CF REGS 24 ******************************** 25 8060 CFBASE EQU $8060 26 8060 CFREG0 EQU CFBASE+0 DATA PORT 27 8061 CFREG1 EQU CFBASE+1 READ: ERROR CODE, WRITE: FEATURE 28 8062 CFREG2 EQU CFBASE+2 NUMBER OF SECTORS TO TRANSFER 29 8063 CFREG3 EQU CFBASE+3 SECTOR ADDRESS LBA 0 [0:7] 30 8064 CFREG4 EQU CFBASE+4 SECTOR ADDRESS LBA 1 [8:15] 31 8065 CFREG5 EQU CFBASE+5 SECTOR ADDRESS LBA 2 [16:23] 32 8066 CFREG6 EQU CFBASE+6 SECTOR ADDRESS LBA 3 [24:27 (LSB)] 33 8067 CFREG7 EQU CFBASE+7 READ: STATUS, WRITE: COMMAND 34 0000 35 ******************************** 36 * VARIABLES 37 ******************************** 38 0080 ORG $0080 39 0080 0001 IOPUSR RMB 1 USER IO PAGE 40 0081 0001 CFSIZ3 RMB 1 CARD LBA SIZE 41 0082 0001 CFSIZ2 RMB 1 42 0083 0001 CFSIZ1 RMB 1 43 0084 0001 CFSIZ0 RMB 1 44 0085 0001 CFLBA3 RMB 1 CARD LBA POSITION 45 0086 0001 CFLBA2 RMB 1 46 0087 0001 CFLBA1 RMB 1 47 0088 0001 CFLBA0 RMB 1 48 0089 0018 SFNAME RMB 24 TEMPORARY FILE NAME STORAGE FOR SEARCH 49 * || SAME 50 0018 NAMELE EQU 24 QUICKFILE NAME LENGTH 51 00A1 0002 TEMP RMB 2 GENERAL TEMPORARY STORAGE 52 00A3 0001 RUNFLG RMB 1 RUN FLAG - SET TO EXECUTE AFTER LOAD 53 00A4 54 ******************************** 55 * START OF PROGRAM 56 ******************************** 57 D000 ORG $D000 58 D000 7E D1AC JMP START 59 D003 0D 0A 04 TCRLF FCB $0D,$0A,$04 60 D006 3E 3E 20 TPROMPT FCC ">> " 61 D009 04 FCB $04 62 D00A 51 55 49 54 TQUIT FCC "QUIT" 63 D00E 04 FCB $04 64 D00F 43 41 54 41 TCATALO FCC "CATALOG " D013 4C 4F 47 20 65 D017 04 FCB $04 66 D018 53 41 56 45 TSAVE FCC "SAVE " D01C 20 67 D01D 04 FCB $04 68 D01E 4C 4F 41 44 TLOAD FCC "LOAD " D022 20 69 D023 04 FCB $04 70 D024 52 55 4E 20 TRUN FCC "RUN " 71 D028 04 FCB $04 72 D029 44 45 4C 45 TDELETE FCC "DELETE " D02D 54 45 20 73 D030 04 FCB $04 74 D031 41 54 54 52 TATTR FCC "ATTRIBUTE " D035 49 42 55 54 D039 45 20 75 D03B 04 FCB $04 76 D03C 49 4E 46 4F TINFO FCC "INFO " D040 20 77 D041 04 FCB $04 78 D042 4E 41 4D 45 TNAME FCC "NAME " D046 20 79 D047 04 FCB $04 80 D048 46 4F 52 4D TFORMAT FCC "FORMAT " D04C 41 54 20 81 D04F 04 FCB $04 82 D050 45 52 52 4F TERR FCC "ERROR " D054 52 20 83 D056 04 FCB $04 84 D057 4F 4B TOK FCC "OK" 85 D059 0D 0A 04 FCB $0D,$0A,$04 86 D05C 4E 4F 20 53 TNSL FCC "NO SPACE LEFT" D060 50 41 43 45 D064 20 4C 45 46 D068 54 87 D069 0D 0A 04 FCB $0D,$0A,$04 88 D06C 46 49 4C 45 TFNF FCC "FILE NOT FOUND" D070 20 4E 4F 54 D074 20 46 4F 55 D078 4E 44 89 D07A 0D 0A 04 FCB $0D,$0A,$04 90 D07D 4C 4F 41 44 TLOADIN FCC "LOADING" D081 49 4E 47 91 D084 0D 0A 04 FCB $0D,$0A,$04 92 D087 44 45 4E 49 TDENIED FCC "DENIED" D08B 45 44 93 D08D 0D 0A 04 FCB $0D,$0A,$04 94 D090 20 53 54 41 TSTART FCC " START:" D094 52 54 3A 95 D097 04 FCB $04 96 D098 20 45 4E 44 TEND FCC " END:" D09C 3A 97 D09D 04 FCB $04 98 D09E 4E 41 4D 45 TINHDR FCC "NAME ATTR LOAD SIZE" D0A2 20 20 20 20 D0A6 20 20 20 20 D0AA 20 20 20 20 D0AE 20 20 20 20 D0B2 20 20 20 20 D0B6 41 54 54 52 D0BA 20 20 20 4C D0BE 4F 41 44 20 D0C2 20 20 20 20 D0C6 20 20 53 49 D0CA 5A 45 99 D0CC 0D 0A 04 FCB $0D,$0A,$04 100 D0CF 54 59 50 45 TCONFIR FCC "TYPE 'YES' TO CONFIRM" D0D3 20 27 59 45 D0D7 53 27 20 54 D0DB 4F 20 43 4F D0DF 4E 46 49 52 D0E3 4D 101 D0E4 0D 0A 04 FCB $0D,$0A,$04 102 D0E7 0D 0A TFORMA FCB $0D,$0A 103 D0E9 46 4F 52 4D FCC "FORMATTING" D0ED 41 54 54 49 D0F1 4E 47 104 D0F3 0D 0A 04 FCB $0D,$0A,$04 105 D0F6 48 45 4C 50 THELP FCC "HELP" 106 D0FA 0D 0A FCB $0D,$0A 107 D0FC 20 20 20 20 FCC " QUICKFILE 1.0" D100 51 55 49 43 D104 4B 46 49 4C D108 45 20 31 2E D10C 30 108 D10D 0D 0A FCB $0D,$0A 109 D10F 20 20 20 20 FCC " C - CATALOG" D113 43 20 2D 20 D117 43 41 54 41 D11B 4C 4F 47 110 D11E 0D 0A FCB $0D,$0A 111 D120 20 20 20 20 FCC " S - SAVE" D124 53 20 2D 20 D128 53 41 56 45 112 D12C 0D 0A FCB $0D,$0A 113 D12E 20 20 20 20 FCC " L - LOAD" D132 4C 20 2D 20 D136 4C 4F 41 44 114 D13A 0D 0A FCB $0D,$0A 115 D13C 20 20 20 20 FCC " R - RUN LOAD" D140 52 20 2D 20 D144 52 55 4E 20 D148 4C 4F 41 44 116 D14C 0D 0A FCB $0D,$0A 117 D14E 20 20 20 20 FCC " D - DELETE" D152 44 20 2D 20 D156 44 45 4C 45 D15A 54 45 118 D15C 0D 0A FCB $0D,$0A 119 D15E 20 20 20 20 FCC " N - NAME" D162 4E 20 2D 20 D166 4E 41 4D 45 120 D16A 0D 0A FCB $0D,$0A 121 D16C 20 20 20 20 FCC " A - ATTRIBUTE" D170 41 20 2D 20 D174 41 54 54 52 D178 49 42 55 54 D17C 45 122 D17D 0D 0A FCB $0D,$0A 123 D17F 20 20 20 20 FCC " I - INFO" D183 49 20 2D 20 D187 49 4E 46 4F 124 D18B 0D 0A FCB $0D,$0A 125 D18D 20 20 20 20 FCC " F - FORMAT" D191 46 20 2D 20 D195 46 4F 52 4D D199 41 54 126 D19B 0D 0A FCB $0D,$0A 127 D19D 20 20 20 20 FCC " Q - QUIT" D1A1 51 20 2D 20 D1A5 51 55 49 54 128 D1A9 0D 0A 04 FCB $0D,$0A,$04 129 D1AC 130 D1AC 96 02 START LDAA $0002 131 D1AE 97 80 STAA IOPUSR SAVE USER I/O PAGE 132 D1B0 84 0F ANDA #$0F 133 D1B2 81 00 CMPA #$00 WAS THE USER I/O PAGE 0? 134 D1B4 26 04 BNE SETIO IF NOT. CONTINUE 135 D1B6 86 87 LDAA #$87 136 D1B8 97 80 STAA IOPUSR SET USER I/O PAGE 7 INSTEAD OF 0 137 D1BA 86 80 SETIO LDAA #$80 138 D1BC 97 02 STAA $0002 SELECT I/O PAGE 0 139 D1BE 7F 0085 CLR CFLBA3 140 D1C1 7F 0086 CLR CFLBA2 141 D1C4 7F 0087 CLR CFLBA1 142 D1C7 7F 0088 CLR CFLBA0 143 D1CA BD D955 JSR CFINIT 144 D1CD BD D97A JSR CFCHERR CHECK FOR ERROR 145 D1D0 24 03 BCC *+5 146 D1D2 7E D26A JMP END 147 D1D5 148 * OBTAIN CF SIZE 149 D1D5 86 EC LDAA #$EC DRIVE ID COMMAND 150 D1D7 B7 8067 STAA CFREG7 151 D1DA CE 7C00 LDX #SECSTO 152 D1DD BD D99B JSR CFREDA READ DRIVE ID 153 D1E0 BD D97A JSR CFCHERR 154 D1E3 24 03 BCC *+5 155 D1E5 7E D26A JMP END 156 D1E8 B6 7C7B LDAA SECSTO+123 GET CF LBA SIZE 157 D1EB 97 81 STAA CFSIZ3 158 D1ED B6 7C7A LDAA SECSTO+122 159 D1F0 97 82 STAA CFSIZ2 160 D1F2 B6 7C79 LDAA SECSTO+121 161 D1F5 97 83 STAA CFSIZ1 162 D1F7 B6 7C78 LDAA SECSTO+120 163 D1FA 97 84 STAA CFSIZ0 164 D1FC 165 D1FC CE D003 LDX #TCRLF 166 D1FF BD C009 JSR PDATA 167 D202 7F 00A3 PROMPT CLR RUNFLG 168 D205 CE D006 LDX #TPROMPT 169 D208 BD C009 JSR PDATA 170 D20B BD 7FEB JSR CONIVEC 171 D20E 84 DF ANDA #$DF TO UPPER CASE 172 D210 81 51 CMPA #'Q QUIT 173 D212 26 03 BNE *+5 174 D214 7E D26D JMP QUIT 175 D217 81 43 CMPA #'C CATALOG 176 D219 26 03 BNE *+5 177 D21B 7E D27A JMP CATALOG 178 D21E 81 53 CMPA #'S SAVE 179 D220 26 03 BNE *+5 180 D222 7E D330 JMP SAVE 181 D225 81 4C CMPA #'L LOAD 182 D227 26 03 BNE *+5 183 D229 7E D405 JMP LOAD 184 D22C 81 52 CMPA #'R RUN 185 D22E 26 03 BNE *+5 186 D230 7E D3FC JMP RUN 187 D233 81 44 CMPA #'D DELETE 188 D235 26 03 BNE *+5 189 D237 7E D4AC JMP DELETE 190 D23A 81 41 CMPA #'A ATTRIBUTE 191 D23C 26 03 BNE *+5 192 D23E 7E D51A JMP ATTR 193 D241 81 49 CMPA #'I INFO 194 D243 26 03 BNE *+5 195 D245 7E D5C1 JMP INFO 196 D248 81 4E CMPA #'N NAME 197 D24A 26 03 BNE *+5 198 D24C 7E D640 JMP NAME 199 D24F 81 46 CMPA #'F FORMAT 200 D251 26 03 BNE *+5 201 D253 7E D6C0 JMP FORMAT 202 D256 81 48 CMPA #'H HELP 203 D258 26 03 BNE *+5 204 D25A 7E D77E JMP HELP 205 D25D 86 3F LDAA #'? 206 D25F BD C003 JSR OUTCHAR 207 D262 CE D003 LDX #TCRLF 208 D265 BD C009 JSR PDATA 209 D268 20 98 BRA PROMPT 210 D26A 211 D26A 7E C000 END JMP RETURN 212 D26D 96 80 QUIT LDAA IOPUSR 213 D26F 97 02 STAA $0002 RESTORE USER IO PAGE 214 D271 CE D00A LDX #TQUIT 215 D274 BD C009 JSR PDATA 216 D277 7E C000 JMP RETURN 217 D27A 218 ******************************** 219 * CATALOG ROUTINE 220 ******************************** 221 D27A CE D00F CATALOG LDX #TCATALO 222 D27D BD C009 JSR PDATA 223 D280 BD D787 JSR CLSFNAM 224 D283 CE 0089 LDX #SFNAME 225 D286 BD D7E8 JSR INAME 226 D289 25 03 BCS *+5 227 D28B 7E D327 JMP CATABO ABORT 228 D28E CE D003 LDX #TCRLF 229 D291 BD C009 JSR PDATA 230 D294 7F 0085 CLR CFLBA3 CLEAR LBA POSITION 231 D297 7F 0086 CLR CFLBA2 232 D29A 7F 0087 CLR CFLBA1 233 D29D 7F 0088 CLR CFLBA0 234 D2A0 235 * FILE CATALOG LOOP 236 D2A0 BD 7FE5 CATLOP JSR CONSVEC CHECK FOR KEYSTROKE 237 D2A3 81 00 CMPA #0 238 D2A5 27 03 BEQ *+5 239 D2A7 7E D322 JMP CATSTOP STOP CATALOG LOOP ON KEYSTROKE 240 D2AA BD DA0B JSR CFSLBA SET LBA 241 D2AD 86 01 LDAA #$01 242 D2AF B7 8062 STAA CFREG2 READ ONE SECTOR 243 D2B2 86 20 LDAA #$20 READ SECTOR COMMAND 244 D2B4 B7 8067 STAA CFREG7 245 D2B7 CE 7C00 LDX #SECSTO 246 D2BA BD D99B JSR CFREDA 247 D2BD BD D97A JSR CFCHERR CHECK FOR ERROR 248 D2C0 24 03 BCC *+5 249 D2C2 7E D31F JMP CATEND 250 D2C5 251 * CHECK IF FILE SOULD BE DISPLAYED 252 D2C5 BD D919 JSR VALHDR VALIDATE PARTITION HEADER 253 D2C8 24 3E BCC CATNXT 254 D2CA B6 7C0B LDAA FSPTYPE CHECK PARTITION TYPE 255 D2CD 81 01 CMPA #$01 256 D2CF 26 37 BNE CATNXT 257 D2D1 B6 7C0C LDAA QFTYPE CHECK QUICKFILE TYPE 258 D2D4 81 01 CMPA #$01 259 D2D6 26 30 BNE CATNXT 260 D2D8 96 89 LDAA SFNAME 261 D2DA 81 00 CMPA #$00 CHECK IF NAME FILTER IS PROVIDED 262 D2DC 27 05 BEQ CATNCHK 263 D2DE BD D847 JSR NAMCMP 264 D2E1 24 25 BCC CATNXT 265 D2E3 86 20 CATNCHK LDAA #$20 266 D2E5 BD C003 JSR OUTCHAR 267 D2E8 BD C003 JSR OUTCHAR 268 D2EB BD C003 JSR OUTCHAR 269 D2EE BD C003 JSR OUTCHAR 270 * LDX #CFLBA3 PRINT PARTITION NUMBER 271 * JSR OUT4HS 272 D2F1 CE 7C0F LDX #QFNAME 273 D2F4 BD D7CE JSR PFNAME 274 D2F7 86 20 LDAA #$20 PRINT FILE ATTRIBUTES 275 D2F9 BD C003 JSR OUTCHAR 276 D2FC BD C003 JSR OUTCHAR 277 D2FF BD D793 JSR PRATTR 278 * END OF FILE LINE 279 D302 CE D003 LDX #TCRLF 280 D305 BD C009 JSR PDATA 281 D308 282 * SET NEXT SECTOR ADDRESS 283 D308 DE 85 CATNXT LDX CFLBA3 284 D30A 08 INX 285 D30B DF 85 STX CFLBA3 286 D30D 287 * CHECK IF ALL PARTITIONS HAVE BEEN READ 288 D30D 96 81 LDAA CFSIZ3 289 D30F 91 85 CMPA CFLBA3 290 D311 27 03 BEQ *+5 291 D313 7E D2A0 JMP CATLOP 292 D316 96 82 LDAA CFSIZ2 293 D318 91 86 CMPA CFLBA2 294 D31A 27 03 BEQ *+5 295 D31C 7E D2A0 JMP CATLOP 296 D31F 297 D31F 7E D202 CATEND JMP PROMPT 298 D322 BD 7FEB CATSTOP JSR CONIVEC FLUSH KEYSTROKE 299 D325 20 F8 BRA CATEND 300 D327 CE D003 CATABO LDX #TCRLF REGULAR ABORT 301 D32A BD C009 JSR PDATA 302 D32D 7E D202 JMP PROMPT 303 D330 304 ******************************** 305 * SAVE FILE 306 ******************************** 307 D330 CE D018 SAVE LDX #TSAVE 308 D333 BD C009 JSR PDATA 309 D336 BD D8BF JSR EMPTY LOOK FOR EMPTY SPACE ON DEVICE 310 D339 25 0F BCS SAVHDR EMPTY SPACE FOUND 311 D33B CE D003 LDX #TCRLF 312 D33E BD C009 JSR PDATA 313 D341 CE D05C LDX #TNSL NO SPACE LEFT 314 D344 BD C009 JSR PDATA 315 D347 7E D202 JMP PROMPT 316 D34A 317 * SET FILE HEADER DATA 318 D34A BD D90D SAVHDR JSR CLRQF CLEAR QUICKFILE HEADER 319 D34D CE 7C0F LDX #QFNAME 320 D350 BD D7E8 JSR INAME 321 D353 25 03 BCS *+5 322 D355 7E D3A0 JMP SAVABT ABORT SAVE 323 D358 B6 7C0F LDAA QFNAME 324 D35B 81 00 CMPA #$00 325 D35D 27 41 BEQ SAVABT NO EMPTY FILE NAME 326 D35F 86 01 LDAA #$01 PARTITION TYPE 327 D361 B7 7C0B STAA FSPTYPE 328 D364 86 01 LDAA #$01 QUICKFILE TYPE 329 D366 B7 7C0C STAA QFTYPE 330 D369 86 07 LDAA #%00000111 ATTRIBUTES 331 D36B B7 7C2E STAA QFATTR 332 D36E 333 D36E CE D090 LDX #TSTART START ADDRESS 334 D371 BD C009 JSR PDATA 335 D374 BD C01E JSR BADDR 336 D377 24 27 BCC SAVABT 337 D379 FF 7C2F STX QFLOAD 338 D37C CE D098 LDX #TEND END ADDRESS 339 D37F BD C009 JSR PDATA 340 D382 BD C01E JSR BADDR 341 D385 24 19 BCC SAVABT 342 D387 DF A1 STX TEMP 343 D389 CE D003 LDX #TCRLF 344 D38C BD C009 JSR PDATA 345 D38F 346 * CALCULATE LENGTH OF FILE 347 D38F B6 7C2F LDAA QFLOAD 348 D392 4C SAVLEL INCA 349 D393 4C INCA 350 D394 7C 7C0E INC QFSIZE+1 351 D397 7C 7C32 INC QFPREL+1 352 D39A 91 A1 CMPA TEMP 353 D39C 23 F4 BLS SAVLEL 354 D39E 20 12 BRA SAVBEG 355 D3A0 356 D3A0 CE D003 SAVABT LDX #TCRLF 357 D3A3 BD C009 JSR PDATA 358 D3A6 7E D202 JMP PROMPT 359 D3A9 CE D05C SAVNSL LDX #TNSL NO SPACE LEFT 360 D3AC BD C009 JSR PDATA 361 D3AF 7E D202 JMP PROMPT 362 D3B2 363 * STORE FILE DATA 364 D3B2 CE 0001 SAVBEG LDX #$0001 SET FILE DATA LBA (xxxx0001) 365 D3B5 DF 87 STX CFLBA1 366 D3B7 BD DA0B JSR CFSLBA SET LBA 367 D3BA B6 7C32 LDAA QFPREL+1 368 D3BD B7 8062 STAA CFREG2 NUMBER OF SECTORS TO WRITE 369 D3C0 86 30 LDAA #$30 WRITE SECTOR COMMAND 370 D3C2 B7 8067 STAA CFREG7 371 D3C5 FE 7C2F LDX QFLOAD 372 D3C8 BD D9EE JSR CFWRDAI 373 D3CB BD D970 JSR CFWAIT 374 D3CE BD D97A JSR CFCHERR CHECK FOR ERROR 375 D3D1 25 CD BCS SAVABT 376 D3D3 377 * STORE QUICKFILE HEADER 378 D3D3 CE 0000 LDX #$0000 SET HEADER LBA (xxxx0000) 379 D3D6 DF 87 STX CFLBA1 380 D3D8 BD DA0B JSR CFSLBA SET LBA 381 D3DB 86 01 LDAA #$01 382 D3DD B7 8062 STAA CFREG2 WRITE ONE SECTOR 383 D3E0 86 30 LDAA #$30 WRITE SECTOR COMMAND 384 D3E2 B7 8067 STAA CFREG7 385 D3E5 CE 7C00 LDX #SECSTO 386 D3E8 BD D9D3 JSR CFWRDA 387 D3EB BD D970 JSR CFWAIT 388 D3EE BD D97A JSR CFCHERR CHECK FOR ERROR 389 D3F1 25 AD BCS SAVABT 390 D3F3 391 D3F3 CE D057 SAVEND LDX #TOK 392 D3F6 BD C009 JSR PDATA 393 D3F9 7E D202 JMP PROMPT 394 D3FC 395 ******************************** 396 * RUN FILE 397 ******************************** 398 D3FC CE D024 RUN LDX #TRUN 399 D3FF BD C009 JSR PDATA 400 D402 7C 00A3 INC RUNFLG 401 D405 402 ******************************** 403 * LOAD FILE 404 ******************************** 405 D405 CE D01E LOAD LDX #TLOAD 406 D408 BD C009 JSR PDATA 407 D40B BD D787 JSR CLSFNAM 408 D40E CE 0089 LDX #SFNAME INPUT FILE NAME TO LOAD 409 D411 BD D7E8 JSR INAME 410 D414 24 1A BCC LOADAB ABORT LOAD 411 D416 96 89 LDAA SFNAME 412 D418 81 00 CMPA #$00 413 D41A 27 14 BEQ LOADAB ABORT LOAD 414 D41C CE D003 LDX #TCRLF 415 D41F BD C009 JSR PDATA 416 D422 BD D865 JSR SEARCH SEARCH FOR FILE 417 D425 25 1B BCS LOADBEG 418 D427 CE D06C LDX #TFNF FILE NOT FOUND 419 D42A BD C009 JSR PDATA 420 D42D 7E D202 LOADE JMP PROMPT 421 D430 CE D003 LOADAB LDX #TCRLF LOAD ABORT 422 D433 BD C009 JSR PDATA 423 D436 7E D202 JMP PROMPT 424 D439 CE D087 LOADDEN LDX #TDENIED LOAD DENIED 425 D43C BD C009 JSR PDATA 426 D43F 7E D202 JMP PROMPT 427 D442 428 D442 B6 7C2E LOADBEG LDAA QFATTR 429 D445 84 01 ANDA #$01 CHECK FOR READ FLAG 430 D447 27 F0 BEQ LOADDEN 431 D449 CE D07D LDX #TLOADIN PRINT LOADING 432 D44C BD C009 JSR PDATA 433 D44F 434 * LOAD FILE DATA 435 D44F CE 0001 LDX #$0001 SET FILE DATA LBA (xxxx0001) 436 D452 DF 87 STX CFLBA1 437 D454 BD DA0B JSR CFSLBA SET LBA 438 D457 B6 7C32 LDAA QFPREL+1 439 D45A B7 8062 STAA CFREG2 NUMBER OF SECTORS TO READ 440 D45D 86 20 LDAA #$20 READ SECTOR COMMAND 441 D45F B7 8067 STAA CFREG7 442 D462 FE 7C2F LDX QFLOAD 443 D465 BD D9B6 JSR CFREDAI 444 D468 BD D97A JSR CFCHERR CHECK FOR ERROR 445 D46B 24 03 BCC *+5 446 D46D 7E D430 JMP LOADAB 447 D470 448 * PRINT LOAD ADDRESS RANGE 449 D470 09 DEX 450 D471 DF A1 STX TEMP 451 D473 CE 7C2F LDX #QFLOAD 452 D476 BD C015 JSR OUT4HS 453 D479 86 08 LDAA #$08 454 D47B BD C003 JSR OUTCHAR 455 D47E 86 2D LDAA #'- 456 D480 BD C003 JSR OUTCHAR 457 D483 CE 00A1 LDX #TEMP 458 D486 BD C015 JSR OUT4HS 459 D489 CE D003 LDX #TCRLF 460 D48C BD C009 JSR PDATA 461 D48F 462 D48F 7D 00A3 TST RUNFLG 463 D492 26 09 BNE LOADRUN 464 D494 CE D057 LOADOK LDX #TOK 465 D497 BD C009 JSR PDATA 466 D49A 7E D202 JMP PROMPT 467 D49D 468 D49D B6 7C2E LOADRUN LDAA QFATTR 469 D4A0 84 04 ANDA #$04 CHECK FOR EXECUTE FLAG 470 D4A2 27 95 BEQ LOADDEN 471 D4A4 BD DA24 JSR IOSWAP SELECT USR IO PAGE 472 D4A7 FE 7C2F LDX QFLOAD 473 D4AA 6E 00 JMP ,X 474 D4AC 475 ******************************** 476 * DELETE FILE 477 ******************************** 478 D4AC CE D029 DELETE LDX #TDELETE 479 D4AF BD C009 JSR PDATA 480 D4B2 BD D787 JSR CLSFNAM 481 D4B5 CE 0089 LDX #SFNAME INPUT FILE NAME TO LOAD 482 D4B8 BD D7E8 JSR INAME 483 D4BB 24 1A BCC DELABT ABORT DELETE 484 D4BD 96 89 LDAA SFNAME 485 D4BF 81 00 CMPA #$00 486 D4C1 27 14 BEQ DELABT ABORT DELETE 487 D4C3 CE D003 LDX #TCRLF 488 D4C6 BD C009 JSR PDATA 489 D4C9 BD D865 JSR SEARCH SEARCH FOR FILE 490 D4CC 25 1B BCS DELBEG 491 D4CE 492 D4CE CE D06C DELFNF LDX #TFNF 493 D4D1 BD C009 JSR PDATA 494 D4D4 7E D202 JMP PROMPT 495 D4D7 CE D003 DELABT LDX #TCRLF 496 D4DA BD C009 JSR PDATA 497 D4DD 7E D202 JMP PROMPT 498 D4E0 CE D087 DELDEN LDX #TDENIED DELETE DENIED 499 D4E3 BD C009 JSR PDATA 500 D4E6 7E D202 JMP PROMPT 501 D4E9 502 D4E9 B6 7C2E DELBEG LDAA QFATTR 503 D4EC 84 02 ANDA #$02 CHECK FOR WRITE FLAG 504 D4EE 27 F0 BEQ DELDEN 505 D4F0 506 D4F0 BD D90D JSR CLRQF BEGIN DELETE 507 D4F3 7F 7C0B CLR FSPTYPE MARK PARTITION AS DELETED 508 D4F6 BD DA0B JSR CFSLBA SET LBA 509 D4F9 86 01 LDAA #$01 510 D4FB B7 8062 STAA CFREG2 WRITE ONE SECTOR 511 D4FE 86 30 LDAA #$30 WRITE SECTOR COMMAND 512 D500 B7 8067 STAA CFREG7 513 D503 CE 7C00 LDX #SECSTO 514 D506 BD D9D3 JSR CFWRDA 515 D509 BD D970 JSR CFWAIT 516 D50C BD D97A JSR CFCHERR CHECK FOR ERROR 517 D50F 25 C6 BCS DELABT 518 D511 CE D057 LDX #TOK 519 D514 BD C009 JSR PDATA 520 D517 7E D202 JMP PROMPT 521 D51A 522 ******************************** 523 * CHANGE ATTRIBUTES FOR FILE 524 ******************************** 525 D51A CE D031 ATTR LDX #TATTR 526 D51D BD C009 JSR PDATA 527 D520 BD D787 JSR CLSFNAM 528 D523 CE 0089 LDX #SFNAME INPUT FILE NAME TO LOAD 529 D526 BD D7E8 JSR INAME 530 D529 24 1A BCC ATTRABT ABORT ATTR 531 D52B 96 89 LDAA SFNAME 532 D52D 81 00 CMPA #$00 533 D52F 27 14 BEQ ATTRABT ABORT ATTR 534 D531 CE D003 LDX #TCRLF 535 D534 BD C009 JSR PDATA 536 D537 BD D865 JSR SEARCH SEARCH FOR FILE 537 D53A 25 12 BCS ATTRBEG 538 D53C CE D06C LDX #TFNF FILE NOT FOUND 539 D53F BD C009 JSR PDATA 540 D542 7E D202 JMP PROMPT 541 D545 CE D003 ATTRABT LDX #TCRLF 542 D548 BD C009 JSR PDATA 543 D54B 7E D202 JMP PROMPT 544 D54E 86 0D ATTRBEG LDAA #$0D 545 D550 BD C003 JSR OUTCHAR 546 D553 BD D793 JSR PRATTR PRINT ARRTIBUTES 547 D556 BD 7FEB JSR CONIVEC READ CHARACTER 548 D559 84 DF ANDA #$DF UPPER CASE 549 D55B 81 52 CMPA #'R R = READ 550 D55D 27 15 BEQ ATTRKR 551 D55F 81 57 CMPA #'W R = WRITE 552 D561 27 1B BEQ ATTRKW 553 D563 81 58 CMPA #'X X = EXECUTE 554 D565 27 21 BEQ ATTRKX 555 D567 81 0D CMPA #$0D CR = SAVE 556 D569 27 27 BEQ ATTRSAV 557 D56B CE D003 LDX #TCRLF OTHER KEY = EXIT 558 D56E BD C009 JSR PDATA 559 D571 7E D202 JMP PROMPT 560 D574 561 D574 B6 7C2E ATTRKR LDAA QFATTR TOGGLE R 562 D577 88 01 EORA #$01 563 D579 B7 7C2E STAA QFATTR 564 D57C 20 D0 BRA ATTRBEG 565 D57E B6 7C2E ATTRKW LDAA QFATTR TOGGLE W 566 D581 88 02 EORA #$02 567 D583 B7 7C2E STAA QFATTR 568 D586 20 C6 BRA ATTRBEG 569 D588 B6 7C2E ATTRKX LDAA QFATTR TOGGLE X 570 D58B 88 04 EORA #$04 571 D58D B7 7C2E STAA QFATTR 572 D590 20 BC BRA ATTRBEG 573 D592 574 D592 CE D003 ATTRSAV LDX #TCRLF 575 D595 BD C009 JSR PDATA 576 * STORE QUICKFILE HEADER 577 D598 CE 0000 LDX #$0000 SET HEADER LBA (xxxx0000) 578 D59B DF 87 STX CFLBA1 579 D59D BD DA0B JSR CFSLBA SET LBA 580 D5A0 86 01 LDAA #$01 581 D5A2 B7 8062 STAA CFREG2 WRITE ONE SECTOR 582 D5A5 86 30 LDAA #$30 WRITE SECTOR COMMAND 583 D5A7 B7 8067 STAA CFREG7 584 D5AA CE 7C00 LDX #SECSTO 585 D5AD BD D9D3 JSR CFWRDA 586 D5B0 BD D970 JSR CFWAIT 587 D5B3 BD D97A JSR CFCHERR CHECK FOR ERROR 588 D5B6 25 8D BCS ATTRABT 589 D5B8 CE D057 LDX #TOK 590 D5BB BD C009 JSR PDATA 591 D5BE 7E D202 JMP PROMPT 592 D5C1 593 ******************************** 594 * DISPLAY FILE INFORMATION 595 ******************************** 596 D5C1 CE D03C INFO LDX #TINFO 597 D5C4 BD C009 JSR PDATA 598 D5C7 BD D787 JSR CLSFNAM 599 D5CA CE 0089 LDX #SFNAME INPUT FILE NAME TO LOAD 600 D5CD BD D7E8 JSR INAME 601 D5D0 24 1A BCC INFOABT ABORT INFO 602 D5D2 96 89 LDAA SFNAME 603 D5D4 81 00 CMPA #$00 604 D5D6 27 14 BEQ INFOABT ABORT INFO 605 D5D8 CE D003 LDX #TCRLF 606 D5DB BD C009 JSR PDATA 607 D5DE BD D865 JSR SEARCH SEARCH FOR FILE 608 D5E1 25 12 BCS INFOBEG 609 D5E3 CE D06C LDX #TFNF FILE NOT FOUND 610 D5E6 BD C009 JSR PDATA 611 D5E9 7E D202 JMP PROMPT 612 D5EC CE D003 INFOABT LDX #TCRLF 613 D5EF BD C009 JSR PDATA 614 D5F2 7E D202 JMP PROMPT 615 D5F5 616 D5F5 CE D09E INFOBEG LDX #TINHDR 617 D5F8 BD C009 JSR PDATA 618 D5FB 619 D5FB CE 7C0F LDX #QFNAME 620 D5FE BD D7CE JSR PFNAME 621 D601 622 D601 BD D793 JSR PRATTR 623 D604 86 20 LDAA #$20 624 D606 BD C003 JSR OUTCHAR 625 D609 BD C003 JSR OUTCHAR 626 D60C 627 D60C CE 7C2F LDX #QFLOAD 628 D60F BD C015 JSR OUT4HS 629 D612 86 08 LDAA #$08 630 D614 BD C003 JSR OUTCHAR 631 D617 86 2D LDAA #'- 632 D619 BD C003 JSR OUTCHAR 633 D61C BD D940 JSR CALCEND CALCULATE END ADDRESS 634 D61F DF A1 STX TEMP 635 D621 CE 00A1 LDX #TEMP 636 D624 BD C015 JSR OUT4HS 637 D627 86 20 LDAA #$20 638 D629 BD C003 JSR OUTCHAR 639 D62C 640 D62C CE 7C0D LDX #QFSIZE 641 D62F BD C015 JSR OUT4HS 642 D632 86 20 LDAA #$20 643 D634 BD C003 JSR OUTCHAR 644 D637 645 D637 CE D003 LDX #TCRLF 646 D63A BD C009 JSR PDATA 647 D63D 7E D202 JMP PROMPT 648 D640 649 ******************************** 650 * CHANGE FILE NAME 651 ******************************** 652 D640 CE D042 NAME LDX #TNAME 653 D643 BD C009 JSR PDATA 654 D646 BD D787 JSR CLSFNAM 655 D649 CE 0089 LDX #SFNAME INPUT FILE NAME TO LOAD 656 D64C BD D7E8 JSR INAME 657 D64F 24 1A BCC NAMEABT ABORT NAME 658 D651 96 89 LDAA SFNAME 659 D653 81 00 CMPA #$00 660 D655 27 14 BEQ NAMEABT ABORT NAME 661 D657 CE D003 LDX #TCRLF 662 D65A BD C009 JSR PDATA 663 D65D BD D865 JSR SEARCH SEARCH FOR FILE 664 D660 25 12 BCS NAMEBEG 665 D662 CE D06C LDX #TFNF FILE NOT FOUND 666 D665 BD C009 JSR PDATA 667 D668 7E D202 JMP PROMPT 668 D66B CE D003 NAMEABT LDX #TCRLF 669 D66E BD C009 JSR PDATA 670 D671 7E D202 JMP PROMPT 671 D674 672 D674 86 20 NAMEBEG LDAA #$20 673 D676 BD C003 JSR OUTCHAR 674 D679 BD C003 JSR OUTCHAR 675 D67C BD C003 JSR OUTCHAR 676 D67F BD C003 JSR OUTCHAR 677 D682 BD C003 JSR OUTCHAR 678 D685 BD C003 JSR OUTCHAR 679 D688 BD C003 JSR OUTCHAR 680 D68B BD C003 JSR OUTCHAR 681 D68E CE 7C0F LDX #QFNAME 682 D691 BD D7E8 JSR INAME 683 D694 24 D5 BCC NAMEABT 684 D696 CE D003 LDX #TCRLF 685 D699 BD C009 JSR PDATA 686 D69C 687 * UPDATE QUICKFILE HEADER 688 D69C BD DA0B JSR CFSLBA SET LBA 689 D69F 86 01 LDAA #$01 690 D6A1 B7 8062 STAA CFREG2 WRITE ONE SECTOR 691 D6A4 86 30 LDAA #$30 WRITE SECTOR COMMAND 692 D6A6 B7 8067 STAA CFREG7 693 D6A9 CE 7C00 LDX #SECSTO 694 D6AC BD D9D3 JSR CFWRDA 695 D6AF BD D970 JSR CFWAIT 696 D6B2 BD D97A JSR CFCHERR CHECK FOR ERROR 697 D6B5 25 B4 BCS NAMEABT 698 D6B7 CE D057 LDX #TOK 699 D6BA BD C009 JSR PDATA 700 D6BD 7E D202 JMP PROMPT 701 D6C0 702 ******************************** 703 * FORMAT CF CARD 704 ******************************** 705 D6C0 CE D048 FORMAT LDX #TFORMAT 706 D6C3 BD C009 JSR PDATA 707 D6C6 BD 7FEB JSR CONIVEC 708 D6C9 81 0D CMPA #$0D 709 D6CB 27 03 BEQ *+5 710 D6CD 7E D775 JMP FRMEND 711 D6D0 CE D003 LDX #TCRLF 712 D6D3 BD C009 JSR PDATA 713 D6D6 CE D0CF LDX #TCONFIR CONFIRM FORMAT 714 D6D9 BD C009 JSR PDATA 715 D6DC BD C006 JSR INCHAR 716 D6DF 81 59 CMPA #'Y 717 D6E1 27 03 BEQ *+5 718 D6E3 7E D775 JMP FRMEND 719 D6E6 BD C006 JSR INCHAR 720 D6E9 81 45 CMPA #'E 721 D6EB 27 03 BEQ *+5 722 D6ED 7E D775 JMP FRMEND 723 D6F0 BD C006 JSR INCHAR 724 D6F3 81 53 CMPA #'S 725 D6F5 27 03 BEQ *+5 726 D6F7 7E D775 JMP FRMEND 727 D6FA CE D0E7 LDX #TFORMA FORMAT CONFIRMED 728 D6FD BD C009 JSR PDATA 729 D700 730 D700 7F 0085 CLR CFLBA3 CLEAR START LBA 731 D703 7F 0086 CLR CFLBA2 732 D706 7F 0087 CLR CFLBA1 733 D709 7F 0088 CLR CFLBA0 734 D70C BD DA31 JSR CLRSEC CLEAR SECTOR STORAGE 735 D70F 86 4D LDAA #'M SET FILE SYSTEM ID AND VERSION 736 D711 B7 7C00 STAA FSID+0 737 D714 86 43 LDAA #'C 738 D716 B7 7C01 STAA FSID+1 739 D719 86 46 LDAA #'F 740 D71B B7 7C02 STAA FSID+2 741 D71E 86 53 LDAA #'S 742 D720 B7 7C03 STAA FSID+3 743 D723 86 01 LDAA #$01 744 D725 B7 7C04 STAA FSVER 745 D728 746 * BEGIN WRITING SECTORS 747 D728 CE 0085 FRMLOOP LDX #CFLBA3 PRINT PARTITION START 748 D72B BD C015 JSR OUT4HS 749 D72E DE 85 LDX CFLBA3 SET PARTITION START IN SECTOR 750 D730 FF 7C05 STX FSSTART 751 D733 CE FFFF LDX #$FFFF SET PARTITION SIZE IN SECTOR 752 D736 FF 7C09 STX FSSIZE 753 D739 BD DA0B JSR CFSLBA SET DESTINATION SECTOR 754 D73C 86 01 LDAA #$01 755 D73E B7 8062 STAA CFREG2 WRITE ONE SECTOR 756 D741 BD D970 JSR CFWAIT 757 D744 86 30 LDAA #$30 WRITE SECTOR COMMAND 758 D746 B7 8067 STAA CFREG7 759 D749 CE 7C00 LDX #SECSTO 760 D74C BD D9D3 JSR CFWRDA WRITE SECTOR DATA 761 D74F BD D970 JSR CFWAIT 762 D752 BD D97A JSR CFCHERR 763 D755 25 1E BCS FRMEND 764 D757 DE 85 LDX CFLBA3 765 D759 08 INX 766 D75A DF 85 STX CFLBA3 767 D75C 768 * CHECK IF ALL PARTITIONS WRITTEN 769 D75C 96 81 LDAA CFSIZ3 770 D75E 91 85 CMPA CFLBA3 771 D760 26 06 BNE FRMCONT 772 D762 96 82 LDAA CFSIZ2 773 D764 91 86 CMPA CFLBA2 774 D766 27 07 BEQ FRMOK 775 D768 776 * CONTINUE FORMATTING 777 D768 86 0D FRMCONT LDAA #$0D 778 D76A BD C003 JSR OUTCHAR 779 D76D 20 B9 BRA FRMLOOP 780 D76F 781 D76F CE D057 FRMOK LDX #TOK 782 D772 BD C009 JSR PDATA 783 D775 CE D003 FRMEND LDX #TCRLF 784 D778 BD C009 JSR PDATA 785 D77B 7E D202 JMP PROMPT 786 D77E 787 ******************************** 788 * PRINT HELP TEXT 789 ******************************** 790 D77E CE D0F6 HELP LDX #THELP 791 D781 BD C009 JSR PDATA 792 D784 7E D202 JMP PROMPT 793 D787 794 ******************************** 795 * CLEAR SEARCH FILE NAME 796 ******************************** 797 D787 CE 0089 CLSFNAM LDX #SFNAME 798 D78A 6F 00 CLSNAML CLR ,X 799 D78C 08 INX 800 D78D 8C 00A1 CPX #SFNAME+NAMELE 801 D790 26 F8 BNE CLSNAML 802 D792 39 RTS 803 D793 804 ******************************** 805 * PRINT ATTRIBUTES 806 ******************************** 807 D793 86 2D PRATTR LDAA #'- ATTRIBUTE - READ 808 D795 F6 7C2E LDAB QFATTR PRINT QUICKFILE ATTRIBUTE 809 D798 C4 01 ANDB #$01 CHECK FOR READ FLAG 810 D79A C1 01 CMPB #$01 811 D79C 26 02 BNE *+4 812 D79E 86 52 LDAA #'R 813 D7A0 BD C003 JSR OUTCHAR 814 D7A3 86 20 LDAA #$20 815 D7A5 BD C003 JSR OUTCHAR 816 D7A8 86 2D LDAA #'- ATTRIBUTE - WRITE 817 D7AA F6 7C2E LDAB QFATTR PRINT QUICKFILE ATTRIBUTE 818 D7AD C4 02 ANDB #$02 CHECK FOR WRITE FLAG 819 D7AF C1 02 CMPB #$02 820 D7B1 26 02 BNE *+4 821 D7B3 86 57 LDAA #'W 822 D7B5 BD C003 JSR OUTCHAR 823 D7B8 86 20 LDAA #$20 824 D7BA BD C003 JSR OUTCHAR 825 D7BD 86 2D LDAA #'- ATTRIBUTE - EXECUTE 826 D7BF F6 7C2E LDAB QFATTR PRINT QUICKFILE ATTRIBUTE 827 D7C2 C4 04 ANDB #$04 CHECK FOR EXECUTE FLAG 828 D7C4 C1 04 CMPB #$04 829 D7C6 26 02 BNE *+4 830 D7C8 86 58 LDAA #'X 831 D7CA BD C003 JSR OUTCHAR 832 D7CD 39 RTS 833 D7CE 834 ******************************** 835 * PRINT FILE NAME @ X 836 ******************************** 837 D7CE 36 PFNAME PSHA 838 D7CF 37 PSHB 839 D7D0 5F CLRB 840 D7D1 A6 00 PFNAMEL LDAA ,X 841 D7D3 81 00 CMPA #$00 842 D7D5 26 02 BNE *+4 843 D7D7 86 20 LDAA #$20 844 D7D9 BD C003 JSR OUTCHAR 845 D7DC 08 INX 846 D7DD 5C INCB 847 D7DE C1 18 CMPB #NAMELE 848 D7E0 27 03 BEQ *+5 849 D7E2 7E D7D1 JMP PFNAMEL 850 D7E5 33 PULB 851 D7E6 32 PULA 852 D7E7 39 RTS 853 D7E8 854 ****************************** 855 * EDIT FILENAME POINTED AT BY X 856 * STATUS: OK=SEC, FAIL=CLC 857 ****************************** 858 D7E8 36 INAME PSHA 859 D7E9 37 PSHB 860 D7EA 5F CLRB 861 D7EB A6 00 INAMEPL LDAA ,X PRINT EXIXTING LABLE 862 D7ED 81 00 CMPA #$00 863 D7EF 27 0B BEQ INAMELO FOUND END OF NAME 864 D7F1 BD C003 JSR OUTCHAR 865 D7F4 08 INX 866 D7F5 5C INCB 867 D7F6 C1 18 CMPB #NAMELE 868 D7F8 22 02 BHI *+4 869 D7FA 20 EF BRA INAMEPL 870 D7FC BD 7FEB INAMELO JSR CONIVEC GET CHARACTER FROM ACIA 871 D7FF 81 1B CMPA #$1B IC CHARACTER ESCAPE ($1B) 872 D801 27 40 BEQ INAM_ES EXIT 873 D803 81 7F CMPA #$7F IS CHARACTER DELETE ($7F) OR NON-PRINTABLE? 874 D805 27 F5 BEQ INAMELO READ NEW CHARACTER 875 D807 22 F3 BHI INAMELO READ NEW CHARACTER 876 D809 81 08 CMPA #$08 IS CHARACTER A BACKSPACE ($08)? 877 D80B 27 0B BEQ INAM_BS 878 D80D 81 0D CMPA #$0D IS CHARACTER A CASH RETURN ($0D)? 879 D80F 27 2E BEQ INAM_CR 880 D811 81 1F CMPA #$1F IS CHARACTER NONPRINTABLE? 881 D813 23 E7 BLS INAMELO READ NEW CHARACTER 882 D815 7E D831 JMP INAM_OK IF WE HAVE COME THIS FAR CHARACTER IS OK 883 D818 884 D818 C1 00 INAM_BS CMPB #0 885 D81A 27 E0 BEQ INAMELO IF AT BEGINNING OF NAME SEGMENT DONT DELETE 886 D81C 09 DEX 887 D81D 5A DECB 888 D81E BD C003 JSR OUTCHAR PRINT THE RECIEVED BACKSPACE 889 D821 86 20 LDAA #$20 890 D823 BD C003 JSR OUTCHAR PRINT SPACE 891 D826 86 08 LDAA #$08 892 D828 BD C003 JSR OUTCHAR PRINT BACKSPACE 893 D82B 4F CLRA 894 D82C A7 00 STAA ,X CLEAR CHARACTER FROM NAME SEGMENT (STORE $00 AT ITS PLACE) 895 D82E 7E D7FC JMP INAMELO READ NER CHARACTER 896 D831 897 D831 C1 18 INAM_OK CMPB #NAMELE 898 D833 27 C7 BEQ INAMELO IF AT END OF NAME SEGMENT DONT ENTER NEW CHARACTER 899 D835 BD C003 JSR OUTCHAR ECHO ENTERED CHARACTER 900 D838 A7 00 STAA ,X 901 D83A 08 INX 902 D83B 5C INCB 903 D83C 7E D7FC JMP INAMELO READ NEW CHARACTER 904 D83F 905 D83F 33 INAM_CR PULB IF CASHRETURN CONTINUE 906 D840 32 PULA 907 D841 0D SEC 908 D842 39 RTS 909 D843 910 D843 33 INAM_ES PULB IF CASHRETURN CONTINUE 911 D844 32 PULA 912 D845 0C CLC 913 D846 39 RTS 914 D847 915 ******************************** 916 * COMPARE FILENAME 917 * IF SFNAME == QFNAME 918 * SEC 919 * ELSE 920 * CLC 921 ******************************** 922 D847 5F NAMCMP CLRB 923 D848 C1 18 NAMCMPL CMPB #NAMELE HAVE WE CHECKED ENTIRE NAME? 924 D84A 27 15 BEQ NAMCMPM THEN ALL CHARACTERS MATCH 925 D84C CE 0089 LDX #SFNAME 926 D84F 3A ABX 927 D850 A6 00 LDAA ,X 928 D852 81 2A CMPA #'* 929 D854 27 0B BEQ NAMCMPM WILDCARD. STOP LOOKING 930 D856 CE 7C0F LDX #QFNAME 931 D859 3A ABX 932 D85A A1 00 CMPA ,X 933 D85C 26 05 BNE NAMCMPE THIS NAME DOES NOT MATCH 934 D85E 5C INCB 935 D85F 20 E7 BRA NAMCMPL 936 D861 0D NAMCMPM SEC NAME IS A MATCH 937 D862 39 RTS 938 D863 0C NAMCMPE CLC NAME IS NOT A MATCH 939 D864 39 RTS 940 D865 941 ******************************** 942 * SEARCH FOR FILE 943 * IN: SFNAME 944 * OUT: LBA[0-3], SECSTO 945 * STATUS: OK=SEC, FAIL=CLC 946 ******************************** 947 D865 7F 0085 SEARCH CLR CFLBA3 CLEAR LBA POSITION 948 D868 7F 0086 CLR CFLBA2 949 D86B 7F 0087 CLR CFLBA1 950 D86E 7F 0088 CLR CFLBA0 951 D871 952 * FILE SEARCH LOOP 953 D871 BD DA0B SEALOP JSR CFSLBA SET LBA 954 D874 86 01 LDAA #$01 955 D876 B7 8062 STAA CFREG2 READ ONE SECTOR 956 D879 86 20 LDAA #$20 READ SECTOR COMMAND 957 D87B B7 8067 STAA CFREG7 958 D87E CE 7C00 LDX #SECSTO 959 D881 BD D99B JSR CFREDA 960 D884 BD D97A JSR CFCHERR CHECK FOR ERROR 961 D887 24 03 BCC *+5 962 D889 7E D8BB JMP SEAFAIL 963 D88C 964 * CHECK LOADED FILE HEADER 965 D88C BD D919 JSR VALHDR VALIDATE PARTITION 966 D88F 24 13 BCC SEANXT 967 D891 B6 7C0B LDAA FSPTYPE CHECK PARTITION TYPE 968 D894 81 01 CMPA #$01 969 D896 26 0C BNE SEANXT 970 D898 B6 7C0C LDAA QFTYPE CHECK QUICKFILE TYPE 971 D89B 81 01 CMPA #$01 972 D89D 26 05 BNE SEANXT 973 D89F BD D847 JSR NAMCMP CHECK FILE NAME 974 D8A2 25 19 BCS SEAFOUN 975 D8A4 976 * SET NEXT SECTOR ADDRESS 977 D8A4 DE 85 SEANXT LDX CFLBA3 978 D8A6 08 INX 979 D8A7 DF 85 STX CFLBA3 980 D8A9 981 * CHECK IF ALL PARTITIONS HAVE BEEN READ 982 D8A9 96 81 LDAA CFSIZ3 983 D8AB 91 85 CMPA CFLBA3 984 D8AD 27 03 BEQ *+5 985 D8AF 7E D871 JMP SEALOP 986 D8B2 96 82 LDAA CFSIZ2 987 D8B4 91 86 CMPA CFLBA2 988 D8B6 27 03 BEQ *+5 989 D8B8 7E D871 JMP SEALOP 990 D8BB 991 D8BB 0C SEAFAIL CLC FILE NOT FOUND 992 D8BC 39 RTS 993 D8BD 0D SEAFOUN SEC FILE FOUND 994 D8BE 39 RTS 995 D8BF 996 ******************************** 997 * FIND EMPTY FILE SLOT 998 * OUT: LBA[0-3], SECSTO 999 * STATUS: OK=SEC, FAIL=CLC 1000 ******************************** 1001 D8BF 7F 0085 EMPTY CLR CFLBA3 CLEAR LBA POSITION 1002 D8C2 7F 0086 CLR CFLBA2 1003 D8C5 7F 0087 CLR CFLBA1 1004 D8C8 7F 0088 CLR CFLBA0 1005 D8CB 1006 * SEARCH LOOP 1007 D8CB BD DA0B EMPLOP JSR CFSLBA SET LBA 1008 D8CE 86 01 LDAA #$01 1009 D8D0 B7 8062 STAA CFREG2 READ ONE SECTOR 1010 D8D3 86 20 LDAA #$20 READ SECTOR COMMAND 1011 D8D5 B7 8067 STAA CFREG7 1012 D8D8 CE 7C00 LDX #SECSTO 1013 D8DB BD D99B JSR CFREDA 1014 D8DE BD D97A JSR CFCHERR CHECK FOR ERROR 1015 D8E1 24 03 BCC *+5 1016 D8E3 7E D909 JMP EMPFAIL 1017 D8E6 1018 * CHECK LOADED FILE HEADER 1019 D8E6 BD D919 JSR VALHDR VALIDATE PARTITION 1020 D8E9 24 07 BCC EMPNXT 1021 D8EB B6 7C0B LDAA FSPTYPE CHECK PARTITION TYPE 1022 D8EE 81 00 CMPA #$00 $00 = EMPTY PARTITION 1023 D8F0 27 19 BEQ EMPFOUN 1024 D8F2 1025 * SET NEXT SECTOR ADDRESS 1026 D8F2 DE 85 EMPNXT LDX CFLBA3 1027 D8F4 08 INX 1028 D8F5 DF 85 STX CFLBA3 1029 D8F7 1030 * CHECK IF ALL PARTITIONS HAVE BEEN READ 1031 D8F7 96 81 LDAA CFSIZ3 1032 D8F9 91 85 CMPA CFLBA3 1033 D8FB 27 03 BEQ *+5 1034 D8FD 7E D8CB JMP EMPLOP 1035 D900 96 82 LDAA CFSIZ2 1036 D902 91 86 CMPA CFLBA2 1037 D904 27 03 BEQ *+5 1038 D906 7E D8CB JMP EMPLOP 1039 D909 1040 D909 0C EMPFAIL CLC EMPTY SLOT NOT FOUND 1041 D90A 39 RTS 1042 D90B 0D EMPFOUN SEC EMPTY SLOT FOUND 1043 D90C 39 RTS 1044 D90D 1045 ******************************** 1046 * CLEAR QUICKFILE HEADER 1047 ******************************** 1048 D90D CE 7C0C CLRQF LDX #SECSTO+12 BEGINNIG OF QUICKFILE HEADER 1049 D910 6F 00 CLRQFL CLR ,X 1050 D912 08 INX 1051 D913 8C 7D90 CPX #SECSTO+400 SOULD BE ENOUGH 1052 D916 26 F8 BNE CLRQFL 1053 D918 39 RTS 1054 D919 1055 ******************************** 1056 * VALIDATE PARTITION HEADER 1057 * CARRY SET = HEADER OK 1058 ******************************** 1059 D919 B6 7C00 VALHDR LDAA FSID 1060 D91C 81 4D CMPA #'M 1061 D91E 26 1E BNE VALHDRE 1062 D920 B6 7C01 LDAA FSID+1 1063 D923 81 43 CMPA #'C 1064 D925 26 17 BNE VALHDRE 1065 D927 B6 7C02 LDAA FSID+2 1066 D92A 81 46 CMPA #'F 1067 D92C 26 10 BNE VALHDRE 1068 D92E B6 7C03 LDAA FSID+3 1069 D931 81 53 CMPA #'S 1070 D933 26 09 BNE VALHDRE 1071 D935 B6 7C04 LDAA FSVER 1072 D938 81 01 CMPA #$01 1073 D93A 26 02 BNE VALHDRE 1074 D93C 0D SEC 1075 D93D 39 RTS 1076 D93E 0C VALHDRE CLC 1077 D93F 39 RTS 1078 D940 1079 ******************************** 1080 * CALCULATE FILE END ADDR 1081 * OUT: X = END ADDR 1082 ******************************** 1083 D940 FE 7C2F CALCEND LDX QFLOAD 1084 D943 B6 7C32 LDAA QFPREL+1 1085 D946 C6 FF LDAB #$FF 1086 D948 81 00 CALLOOP CMPA #$00 1087 D94A 27 07 BEQ CALSTOP 1088 D94C 3A ABX 1089 D94D 08 INX 1090 D94E 3A ABX 1091 D94F 08 INX 1092 D950 4A DECA 1093 D951 20 F5 BRA CALLOOP 1094 D953 09 CALSTOP DEX 1095 D954 39 RTS 1096 D955 1097 ******************************** 1098 * INITIALIZE CF 1099 ******************************** 1100 D955 86 04 CFINIT LDAA #$04 RESET COMMAND 1101 D957 B7 8067 STAA CFREG7 1102 D95A BD D970 JSR CFWAIT 1103 D95D 86 E0 LDAA #$E0 LBA3=0, MASTER, MODE=LBA 1104 D95F B7 8066 STAA CFREG6 1105 D962 86 01 LDAA #$01 8-BIT TRANSFERS 1106 D964 B7 8061 STAA CFREG1 1107 D967 86 EF LDAA #$EF SET FEATURE COMMAND 1108 D969 B7 8067 STAA CFREG7 1109 D96C BD D970 JSR CFWAIT 1110 D96F 39 RTS 1111 D970 1112 ******************************** 1113 * WAIT FOR CF READY 1114 ******************************** 1115 D970 B6 8067 CFWAIT LDAA CFREG7 1116 D973 84 80 ANDA #$80 MASK OUT BUSY FLAG 1117 D975 81 00 CMPA #$00 1118 D977 26 F7 BNE CFWAIT 1119 D979 39 CFWAITE RTS 1120 D97A 1121 ******************************** 1122 * CHECK FOR CF ERROR 1123 * OUT: CLS = ERROR 1124 ******************************** 1125 D97A B6 8067 CFCHERR LDAA CFREG7 1126 D97D 84 01 ANDA #$01 MASK OUT ERROR BIT 1127 D97F 81 00 CMPA #0 1128 D981 27 16 BEQ CFNERR 1129 D983 3C PSHX 1130 D984 CE D050 LDX #TERR 1131 D987 BD C009 JSR PDATA 1132 D98A FE 8061 LDX CFREG1 1133 D98D BD C012 JSR OUT2HS 1134 D990 CE D003 LDX #TCRLF 1135 D993 BD C009 JSR PDATA 1136 D996 38 PULX 1137 D997 0D SEC 1138 D998 39 RTS 1139 D999 0C CFNERR CLC 1140 D99A 39 RTS 1141 D99B 1142 ******************************** 1143 * READ DATA FROM CF 1144 ******************************** 1145 D99B BD D970 CFREDA JSR CFWAIT 1146 D99E BD D97A JSR CFCHERR 1147 D9A1 B6 8067 LDAA CFREG7 1148 D9A4 84 08 ANDA #%00001000 FILTER OUT DRQ 1149 D9A6 81 08 CMPA #%00001000 1150 D9A8 26 08 BNE CFREDAE 1151 D9AA B6 8060 LDAA CFREG0 READ DATA BYTE 1152 D9AD A7 00 STAA ,X 1153 D9AF 08 INX 1154 D9B0 20 E9 BRA CFREDA 1155 D9B2 BD D970 CFREDAE JSR CFWAIT 1156 D9B5 39 RTS 1157 D9B6 1158 * READ DATA FROM CF PRESERVING USER IO PAGE 1159 D9B6 BD D970 CFREDAI JSR CFWAIT 1160 D9B9 BD D97A JSR CFCHERR 1161 D9BC B6 8067 LDAA CFREG7 1162 D9BF 84 08 ANDA #%00001000 FILTER OUT DRQ 1163 D9C1 81 08 CMPA #%00001000 1164 D9C3 26 ED BNE CFREDAE 1165 D9C5 B6 8060 LDAA CFREG0 READ DATA BYTE 1166 D9C8 BD DA24 JSR IOSWAP 1167 D9CB A7 00 STAA ,X 1168 D9CD BD DA24 JSR IOSWAP 1169 D9D0 08 INX 1170 D9D1 20 E3 BRA CFREDAI 1171 D9D3 1172 ******************************** 1173 * WRITE DATA TO CF 1174 ******************************** 1175 D9D3 BD D970 CFWRDA JSR CFWAIT 1176 D9D6 BD D97A JSR CFCHERR 1177 D9D9 B6 8067 LDAA CFREG7 1178 D9DC 84 08 ANDA #%00001000 FILTER OUT DRQ 1179 D9DE 81 08 CMPA #%00001000 1180 D9E0 26 08 BNE CFWRDAE 1181 D9E2 A6 00 LDAA ,X 1182 D9E4 B7 8060 STAA CFREG0 READ DATA BYTE 1183 D9E7 08 INX 1184 D9E8 20 E9 BRA CFWRDA 1185 D9EA BD D970 CFWRDAE JSR CFWAIT 1186 D9ED 39 RTS 1187 D9EE 1188 * WRITE DATA TO CF PRESERVING USER IO PAGE 1189 D9EE BD D970 CFWRDAI JSR CFWAIT 1190 D9F1 BD D97A JSR CFCHERR 1191 D9F4 B6 8067 LDAA CFREG7 1192 D9F7 84 08 ANDA #%00001000 FILTER OUT DRQ 1193 D9F9 81 08 CMPA #%00001000 1194 D9FB 26 ED BNE CFWRDAE 1195 D9FD BD DA24 JSR IOSWAP 1196 DA00 A6 00 LDAA ,X 1197 DA02 BD DA24 JSR IOSWAP 1198 DA05 B7 8060 STAA CFREG0 READ DATA BYTE 1199 DA08 08 INX 1200 DA09 20 E3 BRA CFWRDAI 1201 DA0B 1202 ******************************** 1203 * CF SET LBA 1204 ******************************** 1205 DA0B 96 88 CFSLBA LDAA CFLBA0 LBA 0 1206 DA0D B7 8063 STAA CFREG3 1207 DA10 96 87 LDAA CFLBA1 LBA 1 1208 DA12 B7 8064 STAA CFREG4 1209 DA15 96 86 LDAA CFLBA2 LBA 2 1210 DA17 B7 8065 STAA CFREG5 1211 DA1A 96 85 LDAA CFLBA3 LBA 3 1212 DA1C 84 0F ANDA #%00001111 FILTER OUT LBA BITS 1213 DA1E 8A E0 ORAA #%11100000 MODE LBA, MASTER DEV 1214 DA20 B7 8066 STAA CFREG6 1215 DA23 39 RTS 1216 DA24 1217 ******************************** 1218 * SWAP USER AND PROGRAM IO PAGE 1219 ******************************** 1220 DA24 36 IOSWAP PSHA 1221 DA25 37 PSHB 1222 DA26 96 02 LDAA $0002 1223 DA28 D6 80 LDAB IOPUSR 1224 DA2A D7 02 STAB $0002 1225 DA2C 97 80 STAA IOPUSR 1226 DA2E 33 PULB 1227 DA2F 32 PULA 1228 DA30 39 RTS 1229 DA31 1230 ******************************** 1231 * CLEAR SECTOR STORAGE 1232 ******************************** 1233 DA31 CE 7C00 CLRSEC LDX #SECSTO 1234 DA34 6F 00 CLRSECL CLR ,X 1235 DA36 08 INX 1236 DA37 8C 7E00 CPX #SECSTO+512 1237 DA3A 26 F8 BNE CLRSECL 1238 DA3C 39 RTS 1239 DA3D 1240 ******************************** 1241 * STORAGE FOR SECTOR 1242 ******************************** 1243 7C00 ORG $7C00 1244 7C00 0200 SECSTO RMB 512 1245 7E00 1246 * PARTITION SECTOR STRUCTURE (12BYTES) - 1ST SECTOR OF EVERY PARTITION 1247 7C00 ORG SECSTO 1248 7C00 0004 FSID RMB 4 ID FOR PARTITION TYPE - "MCFS" 1249 7C04 0001 FSVER RMB 1 VERSION $01 1250 7C05 0004 FSSTART RMB 4 LBA OF PARTITION START 1251 7C09 0002 FSSIZE RMB 2 LBA OF PARTITION SIZE 1252 7C0B 0001 FSPTYPE RMB 1 PARTITION TYPE - $00=EMPTY/UNUSED, $01=QUICKFILE 1253 7C0C 1254 * QUICKFILE HEADER STRUCTURE - 1ST SECTOR OF EVERY PARTITION 1255 7C0C ORG SECSTO+12 1256 7C0C 0001 QFTYPE RMB 1 QUICKFILE TYPE - $01=STD/VERSION1 1257 7C0D 0002 QFSIZE RMB 2 QUICKFILE SIZE IN BLOCKS/SECTORS 1258 7C0F 0018 QFNAME RMB 24 QUICKFILE NAME 1259 7C27 0007 QFDATE RMB 7 QUICKFILE ISO DATE - BCD: YYYYMMDDHHMMSS 1260 7C2E 0001 QFATTR RMB 1 QUICKFILE ATTRIBUTES - SEE BELOW 1261 7C2F 0002 QFLOAD RMB 2 QUICKFILE LOAD ADDRESS - DEFAULT $0100 1262 7C31 0001 QFPREL RMB 1 QUICKFILE PRELOAD BLOCKS - SEE BELOW 1263 7C32 1264 7C32 1265 ******************************** 1266 * QFATTR - FILE ATTRIBUTES 1267 ******************************** 1268 * BIT 0 - READABLE 1269 * BIT 1 - WRITEABLE 1270 * BIT 2 - EXECUTABLE 1271 * BIT 3 1272 * BIT 4 1273 * BIT 5 1274 * BIT 6 1275 * BIT 7 1276 7C32 1277 ******************************** 1278 * QFPREL - PRELOAD BYTES 1279 ******************************** 1280 * NUMBER OF BYTES TO LOAD 1281 * AT INITIAL LOAD 1282 * 1283 * FOR SMALL FILE = FILE LENGTH 1284 * FOR LARGE FILE = USR DEFINED Total Errors 0