Mercurial > hg > Members > kono > nitros9-code
comparison 3rdparty/roms/dos/SuperDos/superdos-e6-02.asm @ 1985:4037b23c848d
SuperDos rom, assembalable for Dragon Dos, Dragon Alpha or RS-DOS
author | afra |
---|---|
date | Fri, 20 Jan 2006 01:54:33 +0000 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
1984:cbb405567d04 | 1985:4037b23c848d |
---|---|
1 ; | |
2 ; SuperDos E6, Copyright (C) 1986 ???, Compusense. | |
3 ; | |
4 ; Disassembled 2004-11-05, P.Harvey-Smith. | |
5 ; | |
6 ; Fixed for assembly with "mamou" cross-assembler, | |
7 ; from NitrOS9 cocotools. | |
8 ; | |
9 ; Ported to the Dragon Alpha/Professional hardware, | |
10 ; 2004-11-21 P.Harvey-Smith. | |
11 ; | |
12 | |
13 | |
14 ;DragonAlpha EQU 1 ; Define this if compiling for Dragon Alpha. | |
15 | |
16 ifp1 | |
17 use dgndefs.asm | |
18 use romdefs.asm | |
19 use dosdefs.asm | |
20 endc | |
21 | |
22 | |
23 IFNE DragonAlpha | |
24 | |
25 * Dragon Alpha has a third PIA at FF24, this is used for | |
26 * Drive select / motor control, and provides FIRQ from the | |
27 * disk controler. | |
28 | |
29 DPPIADA EQU DPPIA2DA | |
30 DPPIACRA EQU DPPIA2CRA | |
31 DPPIADB EQU DPPIA2DB | |
32 DPPIACRB EQU DPPIA2CRB | |
33 | |
34 PIADA EQU DPPIADA+IO ; Side A Data/DDR | |
35 PIACRA EQU DPPIACRA+IO ; Side A Control. | |
36 PIADB EQU DPPIADB+IO ; Side A Data/DDR | |
37 PIACRB EQU DPPIACRB+IO ; Side A Control. | |
38 | |
39 ;WD2797 Floppy disk controler, used in Alpha Note registers in reverse order ! | |
40 DPCMDREG EQU DPCmdRegA ; command/status | |
41 DPTRKREG EQU DPTrkRegA ; Track register | |
42 DPSECREG EQU DPSecRegA ; Sector register | |
43 DPDATAREG EQU DPDataRegA ; Data register | |
44 | |
45 CMDREG EQU DPCMDREG+IO ; command/status | |
46 TRKREG EQU DPTRKREG+IO ; Track register | |
47 SECREG EQU DPSECREG+IO ; Sector register | |
48 DATAREG EQU DPDATAREG+IO ; Data register | |
49 | |
50 ; Disk IO bitmasks | |
51 | |
52 NMIEn EQU NMIEnA ; Enable/disable NMI | |
53 WPCEn EQU WPCEnA ; Write precomp enable | |
54 SDensEn EQU SDensEnA ; Write precomp enable | |
55 MotorOn EQU MotorOnA ; Motor on enable | |
56 | |
57 Drive0 EQU Drive0A | |
58 Drive1 EQU Drive1A | |
59 Drive2 EQU Drive2A | |
60 Drive3 EQU Drive3A | |
61 | |
62 KnownBits EQU Drive0+Drive1+Drive2+Drive3+MotorOn+WPCEn | |
63 | |
64 ELSE | |
65 | |
66 DPPIADA EQU DPPIA1DA | |
67 DPPIACRA EQU DPPIA1CRA | |
68 DPPIADB EQU DPPIA1DB | |
69 DPPIACRB EQU DPPIA1CRB | |
70 | |
71 PIADA EQU DPPIADA+IO ; Side A Data/DDR | |
72 PIACRA EQU DPPIACRA+IO ; Side A Control. | |
73 PIADB EQU DPPIADB+IO ; Side A Data/DDR | |
74 PIACRB EQU DPPIACRB+IO ; Side A Control. | |
75 | |
76 ;WD2797 Floppy disk controler, used in DragonDos. | |
77 DPCMDREG EQU DPCmdRegD ; command/status | |
78 DPTRKREG EQU DPTrkRegD ; Track register | |
79 DPSECREG EQU DPSecRegD ; Sector register | |
80 DPDATAREG EQU DPDataRegD ; Data register | |
81 | |
82 CMDREG EQU DPCMDREG+IO ; command/status | |
83 TRKREG EQU DPTRKREG+IO ; Track register | |
84 SECREG EQU DPSECREG+IO ; Sector register | |
85 DATAREG EQU DPDATAREG+IO ; Data register | |
86 | |
87 ; Disk IO bitmasks | |
88 | |
89 NMIEn EQU NMIEnD ; Enable/disable NMI | |
90 WPCEn EQU WPCEnD ; Write precomp enable | |
91 SDensEn EQU SDensEnD ; Write precomp enable | |
92 MotorOn EQU MotorOnD ; Motor on enable | |
93 | |
94 ENDC | |
95 | |
96 | |
97 ORG $C000 | |
98 | |
99 ; Disk controler ID, if a cartrage starts with the chars 'DK', then the basic rom routines | |
100 ; will do a JMP to $C002 to init the cartrage. | |
101 | |
102 DC000 FCC /DK/ | |
103 | |
104 LC002 BRA DosInit | |
105 | |
106 ; | |
107 ; Jump table containing the addresses of the various dos routines, these should be called by : | |
108 ; JSR [JumpAddr] rather than jumping directly to the routine. | |
109 ; | |
110 FDB SuperDosLowLevel ; Low Level disk IO routine | |
111 FDB DosHWByte ; Address of data table for low level command | |
112 FDB SuperDosValidFilename ; Validate filename & copy to disk block. | |
113 FDB SuperDosOpenFile ; Open A file. | |
114 FDB SuperDosCreateFile ; Create file (make backup) | |
115 FDB SuperDosGetFLen ; Get file length | |
116 FDB SuperDosCloseAll ; Close all open files | |
117 FDB SuperDosCloseFile ; Close file | |
118 FDB SuperDosFRead ; Read data from file | |
119 FDB SuperDosFWrite ; Write data to file | |
120 FDB SuperDosGetFree ; Get free space on a disk | |
121 FDB SuperDosDeleteFile ; Delete a file | |
122 FDB SuperDosProtect ; Protect/unprotect file | |
123 FDB SuperDosRename ; Rename a file | |
124 FDB SuperDosGetDirEntry ; Get a directory entry | |
125 FDB SuperDosFindAndRead ; Find free buffer and read sector | |
126 FDB SuperDosSyncDir ; Copy updated sectors from track 20 to 16 (sync direcories) | |
127 FDB SuperDosReadAbsSector ; Read absolute sector | |
128 FDB SuperDosWriteAbsSector ; Write absolute sector (no verify) | |
129 | |
130 ; | |
131 ; Init Dos | |
132 ; | |
133 | |
134 DosInit LDX #DosAreaStart ; Point to bottom of dos vars area | |
135 TFR X,Y | |
136 LC02F CLR ,X+ ; Clear a byte, increment X | |
137 LEAY -1,Y ; decrement counter | |
138 BNE LC02F ; loop again if more to do | |
139 | |
140 ; X now points to the top of the dos variable area | |
141 | |
142 TFR X,D | |
143 TFR A,B | |
144 ADDB #$18 | |
145 STB <BasTextPtr ; Setup new begining of basic | |
146 JSR >$AA87 | |
147 LDA <GrfBasePtr ; Adjust graphics ram pages | |
148 ADDA #$06 | |
149 STA <GrfTopPtr | |
150 | |
151 ; | |
152 ; Init various low ram stuff, inturrupt vectors, basic stub etc | |
153 ; | |
154 | |
155 LDX #DDE24 ; Point to rom copy of data to copy | |
156 LC049 LDB ,X+ ; Get byte count byte | |
157 BEQ LC054 ; zero= end of table, exit copy | |
158 LDU ,X++ ; Get destination address | |
159 JSR >UtilCopyBXtoU ; do copy | |
160 BRA LC049 ; do next | |
161 | |
162 LC054 CLR DosHWMaskFF48 ; clear hardware mask | |
163 COM $0608 ; function unknown | |
164 LDX #$0683 ; Adjust usr vector base | |
165 STX <BasUsrBasePtr | |
166 LDU #BasFCError ; Setup the 10 usr vectors to point to BasFCError | |
167 LDB #$0A ; do 10 | |
168 LC064 STU ,X++ ; setup vector | |
169 DECB ; decrement count | |
170 BNE LC064 ; loop again if more to do | |
171 | |
172 INC DosDefDriveNo | |
173 BSR LC09D | |
174 | |
175 LDX #RamHooks ; Point to ram hooks | |
176 LDY #RamHookTable ; Point to ram hook table in rom | |
177 LDD #$137E ; load A with number of vectors B with opcode for JMP | |
178 LC078 STB ,X+ ; setup jump | |
179 LDU ,Y++ ; setup vector | |
180 STU ,X++ | |
181 DECA ; decrement counter | |
182 BNE LC078 ; Loop again if more to do | |
183 | |
184 LDX #ResetVector ; Setup new reset vector | |
185 STX <ResetVecAddr | |
186 ANDCC #$AF ; reenable inturrupts | |
187 | |
188 LDX #BasSignonMess ; Print staandard Basic signon message | |
189 JSR >BasPrintStr | |
190 JSR >DosDoRestore | |
191 | |
192 LDX #DosSignonMess | |
193 JSR >BasPrintStr | |
194 JSR >LDC08 | |
195 JMP >CmdMode ; Jump to normal basic command mode | |
196 | |
197 | |
198 LC09D LDA #WDCmdForceInt ; Force WD2797 to inturrupt & reset | |
199 STA cmdreg | |
200 LDX #DosD0Online ; Clear drive online flags | |
201 LDD <Zero16Bit ; load D with 16 bit zero !!!! | |
202 STD ,X | |
203 STD 2,X | |
204 | |
205 LDX #Drv0Details+5 ; last byte of drive details for each drive | |
206 CLR ,X | |
207 CLR 6,X | |
208 CLR 12,X | |
209 CLR $12,X | |
210 | |
211 CLR <DosIOInProgress ; Flag to check for timeout | |
212 | |
213 LDX #DosDirSecStatus ; Clear Dirctory status, FCBs etc | |
214 LC0BC CLR ,X+ | |
215 CMPX #$07F3 | |
216 BNE LC0BC | |
217 | |
218 | |
219 LDB #$04 ; Count of buffers to process | |
220 LDX #Buff1Details ; Setup disk buffer initial values | |
221 LDU #$0800 ; addr of buffer | |
222 LC0CB CLR 2,X | |
223 STB 4,X | |
224 STU 5,X | |
225 LEAU $0100,U ; Increment addr for next buffer | |
226 LEAX 7,X ; do next buffer | |
227 DECB ; done all ? | |
228 BNE LC0CB ; no : do next | |
229 RTS | |
230 | |
231 FCB $2A | |
232 FCB $20 | |
233 | |
234 LC0DD LDB DosTimeout ; Get timeout | |
235 STA DosTimeout | |
236 TSTB ; Timeout ? | |
237 BNE LC0ED ; no : return | |
238 LDX #SpinUpDelay ; wait some time for drive to spin up | |
239 LC0E9 LEAX -1,X | |
240 BNE LC0E9 | |
241 LC0ED RTS | |
242 | |
243 FCC / / | |
244 | |
245 ; | |
246 ; The following code is quite clever, there are actually multiple code paths. | |
247 ; This involves having a 2 byte instruction encoded as the oprand to a 3 | |
248 ; byte instruction eg :- | |
249 ; | |
250 ; L00FA CMPX #$C605 | |
251 ; | |
252 ; CMPX is one byte long, so a jump to L00DB, will execute the oprand to the | |
253 ; CMPX, which decodes as LDB #$05 this saves a few bytes by not having LDB #xx, | |
254 ; BRA label. | |
255 ; | |
256 ; There are several examples of this in the Dos ROM ! | |
257 ; | |
258 | |
259 LC0F8 LDB #DosFnReadAddr | |
260 | |
261 FCB $8C ; CMPX | |
262 DosDoWriteTrack | |
263 LDB #DosFnWriteTrack | |
264 | |
265 FCB $8C ; CMPX | |
266 DosDoWriteSec2 | |
267 LDB #DosFnWriteSec2 | |
268 | |
269 FCB $8C ; CMPX | |
270 DosDoWriteSec | |
271 LDB #DosFnWriteSec | |
272 | |
273 FCB $8C ; CMPX | |
274 DosDoReadSec | |
275 LDB #DosFnReadSec | |
276 | |
277 DosDoFuncinB | |
278 PSHS A | |
279 LEAS -2,S ; Make room on stack | |
280 CLR $0600 | |
281 LC10D LDA #$03 ; retry count ? | |
282 STD ,S ; save on stack | |
283 | |
284 LC111 BSR DosDoSeek ; Try to seek to track | |
285 BCS LC11D ; Error ? | |
286 LDB 1,S ; No error, get dos op code | |
287 STB <DosHWByte ; Save operation to perform | |
288 BSR SuperDosLowLevel | |
289 BCC LC159 ; No error | |
290 | |
291 LC11D CMPB #$84 | |
292 BEQ LC148 | |
293 | |
294 DEC ,S ; Dec retry count | |
295 BEQ LC13A ; Any retries left ? | |
296 LDB ,S ; get retry count | |
297 LSRB ; gety lsbit | |
298 BCC LC132 ; on even numbered retry, do recal | |
299 | |
300 INC <DskTrackNo ; step out a track | |
301 BSR DosDoSeek | |
302 DEC <DskTrackNo ; step back in when retrying | |
303 BRA LC111 | |
304 | |
305 LC132 LDA <DskTrackNo ; Save Track no whilst doing restore | |
306 BSR DosDoRestore ; Restore & Recalibrate | |
307 STA <DskTrackNo ; Put track no back | |
308 BRA LC111 ; Try again | |
309 | |
310 LC13A CMPB #$80 | |
311 BNE LC156 | |
312 TST $0600 | |
313 BNE LC156 | |
314 COM $0600 | |
315 BRA LC152 | |
316 | |
317 ; Something to do with dir track ? | |
318 LC148 LDA <DskTrackNo ; Get track number | |
319 CMPA #$14 ; Track 20 ? | |
320 BNE LC156 ; no : error | |
321 LDA #$10 ; set track to 16 | |
322 STA <DskTrackNo | |
323 LC152 LDB 1,S ; Get Dos op code | |
324 BRA LC10D ; So same to track 16 | |
325 | |
326 LC156 ORCC #$01 ; Flag error | |
327 FCB $21 ; opcocode for BRN | |
328 LC159 CLRB ; Flag no error | |
329 LEAS 2,S ; Drop bytes from stack | |
330 PULS A,PC ; restore & return | |
331 | |
332 ; | |
333 ; Another LDB, enbeded in CMPX sequence.... | |
334 ; | |
335 | |
336 DosDoReadSec2 | |
337 LDB #DosFnReadSec2 | |
338 | |
339 FCB $8C ; CMPX | |
340 DosDoSeek | |
341 LDB #DosFnSeek | |
342 | |
343 FCB $8C ; CMPX | |
344 DosDoRestore | |
345 LDB #DosFnRestore | |
346 STB <DosHWByte ; save in hardware byte | |
347 | |
348 ; | |
349 ; Low level hardware command, operation is in $00E8 | |
350 ; | |
351 | |
352 SuperDosLowLevel | |
353 PSHS CC,A,DP,X,Y,U | |
354 ORCC #$50 ; Disable inturrupts | |
355 ROR ,S | |
356 CLR <DosDiskError ; Flag no disk error | |
357 LDA <DosHWByte ; get HW byte | |
358 CMPA #$07 ; Valid op | |
359 BLS LC178 ; yes : do it ! | |
360 BRA LC180 ; No: error | |
361 | |
362 LC178 JSR >ResetAndStartDrive | |
363 BCC LC18B ; Error ? | |
364 LDB #$FD ; yes flag error | |
365 | |
366 FCB $8C ; Andothe CMPX saving..... | |
367 | |
368 LC180 LDB #$FC ; Set error code | |
369 ORCC #$01 ; and carry bit | |
370 ROL ,S | |
371 STB <DosDiskError ; Flag disk error | |
372 JMP >LC24D | |
373 | |
374 ; Disable IRQ | |
375 | |
376 LC18B LDX #PIA0CRA ; Point to PIA CR A | |
377 LC18E LDA ,X ; Get old value | |
378 PSHS A ; save on stack | |
379 ANDA #$FC ; Turn off inturrupt | |
380 STA ,X++ ; Save it and point to CR B | |
381 LDA ,X ; Get old CRB value | |
382 PSHS A ; save it on stack | |
383 ANDA #$FC ; Disable Inturrupt | |
384 STA ,X | |
385 LEAX $1E,X ; Point to next PIA | |
386 CMPX #PIA1CRB ; PIA1 ? | |
387 BCS LC18E ; No : do disable | |
388 | |
389 LDA PIACRB ; Enable FIRQ from FDC | |
390 ORA #$37 | |
391 STA PIACRB | |
392 LDA #$03 | |
393 PSHS A | |
394 LDA <DskSectorNo ; Get disk sector no | |
395 CMPA #$12 ; >$12, therefore on second side | |
396 BLS LC1C2 ; no: don't adjust | |
397 | |
398 SUBA #$12 ; Calculate sector number on second side | |
399 LDB #$02 ; Flag as side 2 | |
400 ORB DosHWMaskFF40 | |
401 STB DosHWMaskFF40 | |
402 | |
403 LC1C2 STA secreg ; Save in sector register | |
404 STA <DosSectorSeek ; Save sector we are looking for | |
405 LC1C7 LDY <Zero16Bit | |
406 LDX <DiskBuffPtr ; Point to buffer | |
407 LDB <DosHWByte ; Get hardware byte (function code) | |
408 ASLB ; Calculate offset in table | |
409 LDU #DosFunctionTable ; Point to function dispatch table | |
410 LDA <DosSectorSeek ; Get sector we are seeking to | |
411 CMPA secreg ; Found it yet ? | |
412 BNE LC1C2 | |
413 | |
414 LDA #$FF ; Set DP=$FF, to make IO quicker | |
415 TFR A,DP | |
416 LC1DD JSR [B,U] ; Jump to function handler | |
417 STA <DosDiskError ; Save error code | |
418 BCC LC1E5 ; No error : check verify | |
419 BRA LC213 | |
420 | |
421 LC1E5 ANDA DosErrorMask ; Mask out error bits we are not interested in | |
422 STA <DosDiskError ; save errors for later use | |
423 BEQ LC1FA ; No error : jump ahead | |
424 | |
425 LDA <DosHWByte ; Get operation code | |
426 CMPA #DosFnReadSec2 ; ReadSec2 command ? | |
427 BEQ LC1F6 | |
428 DEC ,S ; Dec retry count | |
429 BNE LC1C7 ; retry | |
430 | |
431 LC1F6 ORCC #$01 ; Flag error | |
432 BRA LC213 | |
433 | |
434 LC1FA TST DosErrorMask ; is this write sector ? | |
435 BPL LC213 ; no : jump ahead | |
436 | |
437 LDA <DskTrackNo ; Get track number | |
438 CMPA #$14 ; Primary Dir track ? | |
439 BEQ LC210 | |
440 | |
441 CMPA #$10 ; Secondary dir track ? | |
442 BEQ LC210 | |
443 | |
444 TST $0608 | |
445 ANDCC #$FE ; re-enable inturrupts | |
446 BPL LC213 | |
447 | |
448 LC210 LBSR DosDoReadSec2 | |
449 LC213 LEAS 1,S | |
450 ROL 4,S | |
451 LDX #DosD0Track-1 ; Point to drive track table | |
452 LDB <LastActiveDrv ; Get last used drive | |
453 ABX ; get pointer to track for current drive | |
454 LDA trkreg ; Get current track number from WD | |
455 CMPA <DskTrackNo ; Same as current track no ? | |
456 BEQ LC235 ; yes : update table | |
457 | |
458 LDB DosErrorMask ; is this a seek ? | |
459 CMPB #$19 | |
460 BNE LC235 | |
461 | |
462 LDB #$FF | |
463 STB <DosDiskError | |
464 ROR 4,S | |
465 ORCC #$01 ; flag error | |
466 ROL 4,S | |
467 | |
468 LC235 STA ,X ; Update current track for current drive | |
469 LDX #PIA1CRB ; Restore state of PIA from stack | |
470 LC23A PULS A | |
471 STA ,X | |
472 PULS A | |
473 STA ,--X | |
474 | |
475 LEAX -$1E,X ; Do PIA0 | |
476 CMPX #PIA0CRA | |
477 BHI LC23A | |
478 | |
479 CLR DosHWMaskFF40 ; Clear hardware mask | |
480 LC24D CLRB ; Flag no error | |
481 PULS CC,A,DP,X,Y,U ; Restore regs | |
482 | |
483 BCC LC289 | |
484 LDB <DosDiskError ; get last error code | |
485 BEQ LC289 ; no error : exit | |
486 | |
487 BPL LC278 | |
488 | |
489 ; | |
490 ; Work out the dragon error code that coresponds to the hardware | |
491 ; error reported by WD. | |
492 ; | |
493 | |
494 CMPB #$FC | |
495 BNE LC260 | |
496 | |
497 LDB #$A4 | |
498 BRA LC287 | |
499 | |
500 LC260 CMPB #$FD | |
501 BNE LC268 | |
502 | |
503 LDB #$28 | |
504 BRA LC287 | |
505 | |
506 LC268 CMPB #$FE | |
507 BNE LC270 | |
508 | |
509 LDB #$80 | |
510 BRA LC287 | |
511 | |
512 LC270 CMPB #$FF | |
513 BNE LC285 | |
514 | |
515 LDB #$82 | |
516 BRA LC287 | |
517 | |
518 LC278 TFR B,A | |
519 LDB #$82 | |
520 ROLA | |
521 LC27D ADDB #$02 | |
522 ROLA | |
523 TSTA | |
524 BCS LC287 | |
525 BNE LC27D | |
526 LC285 LDB #$A6 | |
527 LC287 ORCC #$01 | |
528 LC289 RTS | |
529 | |
530 ; | |
531 ; Reset controler chip, and spin up drive. | |
532 ; | |
533 | |
534 ResetAndStartDrive | |
535 LDA #WDCmdForceInt ; Force inturrupt | |
536 STA cmdreg | |
537 LDA <DosLastDrive ; Get last active drive no | |
538 BMI LC29A ; invalid, flag error & exit | |
539 BEQ StartDrive ; Zero ? : yes branch on | |
540 DECA ; Make drive number 0..3 from 1..4 | |
541 CMPA #$03 ; Drive valid ? | |
542 BLS StartDrive2 ; yes : continue | |
543 | |
544 LC29A ORCC #$01 ; flag error | |
545 DosHookRetDevParam RTS ; return | |
546 | |
547 ; | |
548 ; Select drive, and start motor & load track reg. | |
549 ; | |
550 | |
551 StartDrive | |
552 INC <DosLastDrive ; Flag drive 1 | |
553 StartDrive2 | |
554 ORA #NMIEn+MotorOn ; Mask in nmi enable & Motor on bits | |
555 PSHS A | |
556 LDA DosHWMaskFF48 ; Get HW byte mask | |
557 ANDA #$FC ; Mask out drive bits | |
558 ORA ,S+ ; Mask in drive bits | |
559 | |
560 ifne DragonAlpha | |
561 LBSR AlphaDskCtl ; Write to control reg | |
562 else | |
563 STA DskCtl ; Write to control reg | |
564 endc | |
565 | |
566 STA DosHWMaskFF48 ; Resave hardware mask | |
567 LDX #DosD0Track-1 ; Point to current track table | |
568 LDA <LastActiveDrv ; Get active drive | |
569 LDA A,X ; Get drive current track | |
570 STA trkreg ; Write to controler | |
571 LDA #$D2 | |
572 JSR >LC0DD | |
573 CLRB ; no error ? | |
574 RTS | |
575 ; | |
576 ; Dos function 0 comes here | |
577 ; | |
578 | |
579 DosFunctionRestore | |
580 CLRA | |
581 STA >DskTrackNo ; Save Track number | |
582 BRA LC2D9 | |
583 | |
584 ; | |
585 ; Dos function 1 | |
586 ; | |
587 | |
588 DosFunctionSeek | |
589 LDA >DskTrackNo ; Get current track no | |
590 CMPA dptrkreg ; Are we over it ? | |
591 BNE SeekTrackinA ; no : seek to it | |
592 CLRA | |
593 STA DosErrorMask ; Turn off verify | |
594 TFR A,DP ; Reset DP | |
595 RTS | |
596 | |
597 ; | |
598 ; Seek to a track, routine will exit either with an error, or via NMI. | |
599 ; On entry A contains track to seek to. | |
600 ; | |
601 | |
602 SeekTrackinA | |
603 STA dpdatareg | |
604 LDA #WDCmdSeek ; Seek command | |
605 | |
606 LC2D9 LDB #$19 | |
607 STB DosErrorMask | |
608 LDX #DosD0StepRate-1 ; Point to step rate table | |
609 LDB >LastActiveDrv ; Get active drive | |
610 ORA B,X ; Mask in that drive's step rate | |
611 STA dpcmdreg ; save in command reg | |
612 LC2E8 MUL ; burn up CPU time waiting.... | |
613 MUL ; NMI will exit this loop | |
614 LEAY -1,Y ; decrement timeout counter | |
615 BNE LC2E8 ; count exhausted ? : no keep going | |
616 BRA LC337 ; yes : error | |
617 | |
618 ; | |
619 ; Dos function 6 : Read address mark | |
620 ; | |
621 | |
622 DosFunctionReadAddr LDA #WDCmdReadAddr ; Read address mark | |
623 | |
624 FCB $8C ; CMPX again :) | |
625 ; | |
626 ; Dos function 2 : Read sector | |
627 ; | |
628 | |
629 DosFunctionReadSec | |
630 LDA #WDCmdReadSec ; Read a sector | |
631 LDB #$3F | |
632 STB DosErrorMask | |
633 LDB #$05 ; try 5x$FFFF for timeout | |
634 ORA DosHWMaskFF40 ; Mask in side etc | |
635 STA dpcmdreg | |
636 | |
637 LC301 LDA dppiacrb ; Check for INT from WD | |
638 BMI LC311 ; yes : start reading bytes | |
639 LEAY -1,Y ; decrement timeout count | |
640 BNE LC301 ; check for int again, if no timeout | |
641 LDA dppiadb | |
642 DECB ; decrement retry wait count | |
643 BNE LC301 ; count=0 ?, no continue waiting | |
644 BRA LC337 ; yes : error and exit | |
645 | |
646 ; | |
647 ; Read sector/address mark loop, exits with NMI. | |
648 ; | |
649 | |
650 LC310 SYNC ; Syncronise to FIRQ (INT from WD) | |
651 LC311 LDB dppiadb ; clear iunturrupt | |
652 LDA dpdatareg ; read byte from WD | |
653 STA ,X+ ; save in buffer | |
654 BRA LC310 ; do next byte | |
655 | |
656 ; | |
657 ; Dos function 7 read first two bytes of a sector, used by BOOT command. | |
658 ; | |
659 | |
660 DosFunctionReadSec2 | |
661 LDX #$004F | |
662 LDA #$3F | |
663 STA DosErrorMask | |
664 LDB #$05 ; Wait 5x$FFFF | |
665 LDA #WDCmdReadSec ; Read sector command | |
666 ORA DosHWMaskFF40 ; mask in heads etc | |
667 STA dpcmdreg ; write it to WD | |
668 | |
669 LC32A LDA dppiacrb ; Check for Int from WD | |
670 BMI LC343 ; yes : start reading | |
671 LEAY -1,Y ; decrement timeout | |
672 BNE LC32A ; check again | |
673 LDA dppiadb ; try clearing int | |
674 DECB ; decrement outer count | |
675 BNE LC32A ; keep going ? | |
676 | |
677 LC337 LDA #WDCmdForceInt ; Force the WD to abort | |
678 STA dpcmdreg | |
679 CLRA ; Reset DP to page 0 | |
680 TFR A,DP | |
681 LDA #$FE ; return error | |
682 ORCC #$01 | |
683 RTS | |
684 | |
685 ; Read data from WD, as normal exited with NMI | |
686 | |
687 LC343 LDA dpdatareg ; read byte from WD | |
688 TST dppiadb ; clear inturrupt | |
689 STA ,X+ ; save in memory | |
690 SYNC ; wait for next | |
691 LDA dpdatareg ; get next byte | |
692 TST dppiadb ; clear inturrupt | |
693 STA ,X ; save byte | |
694 LC350 SYNC ; wait for next | |
695 TST dppiadb ; clear inturrupt | |
696 LDA dpdatareg ; read byte | |
697 BRA LC350 ; do next | |
698 | |
699 ; | |
700 ; Dos function 4 | |
701 ; | |
702 | |
703 DosFunctionWriteSec2 | |
704 LDA #$5F | |
705 | |
706 FCB $8C | |
707 | |
708 ; | |
709 ; Dos function 3 | |
710 ; | |
711 | |
712 DosFunctionWriteSec | |
713 LDA #$DF | |
714 STA DosErrorMask | |
715 BSR DosSetPrecomp ; Setup write precomp | |
716 | |
717 LC361 LDA #WDCmdWriteSec ; Write sector | |
718 ORA DosHWMaskFF40 ; Mask in side etc | |
719 STA dpcmdreg ; write to WD | |
720 LDA ,X+ ; fetch first byte to write | |
721 | |
722 LC36A LDB dppiacrb ; Int from WD ? | |
723 BMI LC377 ; yes : start writing | |
724 LEAY -1,Y ; decrement timeout | |
725 BNE LC36A ; if not timed out continue waiting | |
726 BRA LC337 ; timout, abort, and return error | |
727 | |
728 ; Write sector loop, NMI breaks out of here | |
729 | |
730 LC374 LDA ,X+ ; get byte to write | |
731 SYNC ; wait for WD | |
732 LC377 STA dpdatareg ; write byte to WD | |
733 LDA dppiadb ; clear inturrupt | |
734 BRA LC374 ; Do next byte | |
735 | |
736 ; | |
737 ; Dos function 5 : Write (format) track | |
738 ; | |
739 | |
740 DosFunctionWriteTrack | |
741 LDA #$47 | |
742 STA DosErrorMask | |
743 BSR DosSetPrecomp ; Set write precomp | |
744 | |
745 LDA #WDCmdWriteTrack ; Write (format) track | |
746 ORA DosHWMaskFF40 ; Mask in head etc | |
747 STA dpcmdreg | |
748 LC38B LDD ,X++ ; Get bytes to write A=count, B=byte | |
749 LC38D SYNC ; Wait for WD | |
750 CMPA dppiadb ; Clear inturrupt | |
751 STB dpdatareg ; Write a byte on track | |
752 DECA ; decrement byte count | |
753 BNE LC38D ; continue until count=0 | |
754 | |
755 LDA ,X+ ; get next | |
756 SYNC | |
757 CMPA dppiadb ; Clear int | |
758 STA dpdatareg ; write to wd | |
759 BRA LC38B ; do next block | |
760 | |
761 ; | |
762 ; Set write precompensation based on track | |
763 ; | |
764 | |
765 DosSetPrecomp | |
766 LDA dptrkreg ; Get track | |
767 CMPA #TrackPrecomp ; track < 16 | |
768 BLS LC3AB ; no : no write precomp | |
769 | |
770 LDA DosHWMaskFF48 ; Enable precomp | |
771 ORA #WPCEn | |
772 BRA LC3B0 ; Write to controler | |
773 | |
774 LC3AB LDA DosHWMaskFF48 ; Turn off precomp | |
775 ANDA #~WPCEn ;#$EF | |
776 LC3B0 | |
777 ifne DragonAlpha | |
778 LBSR AlphaDskCtl ; Write control reg | |
779 else | |
780 STA DskCtl ; Write control reg | |
781 endc | |
782 | |
783 RTS | |
784 | |
785 ; | |
786 ; Dskinit dispatch routine | |
787 ; | |
788 ; Syntax : | |
789 ; DSKINIT drive,sides,tracks | |
790 ; | |
791 | |
792 CmdDskInit | |
793 BEQ LC3D9 | |
794 JSR >GetDriveNoInB | |
795 STB <$EB | |
796 JSR >GetCommaThen8Bit | |
797 BEQ LC3DE | |
798 DECB | |
799 CMPB #$01 | |
800 BHI LC3D6 | |
801 STB <$F4 | |
802 JSR >GetCommaThen8Bit | |
803 BEQ LC3E0 | |
804 CMPB #$28 | |
805 BEQ LC3E2 | |
806 NEG <$F4 | |
807 CMPB #$50 | |
808 BEQ LC3E2 | |
809 LC3D6 JMP >DosPRError | |
810 | |
811 LC3D9 LDB $060A | |
812 STB <$EB | |
813 LC3DE CLR <$F4 | |
814 LC3E0 LDB #$28 | |
815 LC3E2 STB <$F2 | |
816 JSR >DosHookCloseSingle | |
817 LBNE LC471 | |
818 LDX #$0800 | |
819 STX <$EE | |
820 JSR DosDoRestore | |
821 BNE LC471 | |
822 LDA #$01 | |
823 STA <$ED | |
824 JSR >DosDoReadSec2 | |
825 CMPB #$80 | |
826 BEQ LC471 | |
827 LC400 CLR <$F3 | |
828 CLR <$ED | |
829 JSR >LC509 | |
830 JSR >DosDoWriteTrack | |
831 BCS LC471 | |
832 TST <$F4 | |
833 BEQ LC41F | |
834 LDA #$01 | |
835 STA <$F3 | |
836 NEGA | |
837 STA <$ED | |
838 JSR >LC509 | |
839 JSR >DosDoWriteTrack | |
840 BCS LC471 | |
841 LC41F INC <$EC | |
842 LDA <$EC | |
843 CMPA <$F2 | |
844 BCS LC400 | |
845 JSR >DosDoRestore | |
846 BCS LC471 | |
847 LC42C JSR >DosDoSeek | |
848 BCS LC471 | |
849 CLRA | |
850 JSR >LC4F2 | |
851 INC <$EC | |
852 LDA <$EC | |
853 CMPA <$F2 | |
854 BCS LC42C | |
855 LDX <$EE | |
856 LDD <Zero16Bit | |
857 LC441 STD ,X++ | |
858 CMPX #$0B00 | |
859 BNE LC441 | |
860 LDA #$01 | |
861 STA <$ED | |
862 LDA #$14 | |
863 BSR LC45A | |
864 DEC <$ED | |
865 DEC <$EE | |
866 LDA #$10 | |
867 BSR LC460 | |
868 BRA LC474 | |
869 | |
870 LC45A PSHS A | |
871 BSR LC49B | |
872 PULS A | |
873 LC460 STA <$EC | |
874 JSR >DosDoWriteSec | |
875 BCS LC471 | |
876 INC <$ED | |
877 INC <$EE | |
878 JSR >DosDoWriteSec | |
879 BCS LC471 | |
880 RTS | |
881 | |
882 LC471 JMP >DosHookSysError | |
883 | |
884 LC474 INC <$EE | |
885 LDX <$EE | |
886 LDD #$890A | |
887 LC47B STA ,X | |
888 LEAX $19,X | |
889 DECB | |
890 BNE LC47B | |
891 BSR LC489 | |
892 LDA #$14 | |
893 STA <$EC | |
894 LC489 LDD #$1003 | |
895 STB <$ED | |
896 LC48E JSR >DosDoWriteSec | |
897 BCS LC471 | |
898 INC <$ED | |
899 DECA | |
900 BNE LC48E | |
901 JMP >LC09D | |
902 | |
903 LC49B STA <$EC | |
904 LDA #$12 | |
905 LDB #$5A | |
906 TST <$F4 | |
907 BEQ LC4A7 | |
908 ASLB | |
909 ASLA | |
910 LC4A7 STA $08FD | |
911 COMA | |
912 STA $08FF | |
913 LDA <$F2 | |
914 STA $08FC | |
915 TST <$F4 | |
916 BNE LC4BC | |
917 CMPA #$50 | |
918 BNE LC4BC | |
919 ASLB | |
920 LC4BC COMA | |
921 STA $08FE | |
922 LDX <$EE | |
923 LDU #$0900 | |
924 LDA #$FF | |
925 LC4C7 STA ,X+ | |
926 DECB | |
927 BNE LC4C7 | |
928 LDD #$242D | |
929 TST <$F4 | |
930 BEQ LC4E0 | |
931 BPL LC4DD | |
932 LDD #$B4FF | |
933 LC4D8 STB ,U+ | |
934 DECA | |
935 BNE LC4D8 | |
936 LC4DD LDD #$485A | |
937 LC4E0 LDU <Zero16Bit | |
938 PSHS A | |
939 BSR LC4E8 | |
940 PULS B | |
941 LC4E8 LDX <$EE | |
942 ABX | |
943 LDA #$FC | |
944 STU ,X++ | |
945 STA ,X | |
946 RTS | |
947 | |
948 LC4F2 CLR <$ED | |
949 TST <$F4 | |
950 BEQ LC4FA | |
951 BSR LC4FA | |
952 LC4FA LDA #$12 | |
953 LC4FC INC <$ED | |
954 JSR >DosDoReadSec2 | |
955 LBCS LC471 | |
956 DECA | |
957 BNE LC4FC | |
958 LC508 RTS | |
959 | |
960 LC509 LDU <$EE | |
961 LDX #DDDFD | |
962 LDY #DDDEA | |
963 LDB #$0C | |
964 BSR LC537 | |
965 LC516 LDX #DDE09 | |
966 LDB #$06 | |
967 BSR LC537 | |
968 LDA #$01 | |
969 LDB <$EC | |
970 STD ,U++ | |
971 LDB <$F3 | |
972 STB ,U+ | |
973 LDB ,Y+ | |
974 STD ,U++ | |
975 STA ,U+ | |
976 LDB #$12 | |
977 BSR LC537 | |
978 TST ,Y | |
979 BNE LC516 | |
980 LDB #$03 | |
981 LC537 JMP >UtilCopyBXtoU | |
982 | |
983 ; | |
984 ; GetCommaThen8Bit, scan for comma, error if not found, then fetch 8 bit that follows (or error). | |
985 ; | |
986 | |
987 GetCommaThen8Bit | |
988 JSR <BasChrGetCurr ; Get current basic char | |
989 BEQ LC508 ; Any left no: return | |
990 JSR >VarCKComma ; check for comma | |
991 JMP >Get8BitorError ; go get it | |
992 | |
993 ; | |
994 ; Backup command dispatch routine | |
995 ; | |
996 ; Syntax :- | |
997 ; BACKUP SrcDrive TO Destdrive,heads,tracks | |
998 ; | |
999 ; Stack frame as follows : | |
1000 ; 16 bytes cleared on stack, U points to base of this area as with OS-9. | |
1001 ; | |
1002 ; 0,U Drive number of source ? | |
1003 ; 1,U $00 Source track | |
1004 ; 2,U $01 Source sector | |
1005 ; 3,U $DF5A ??? | |
1006 ; 5,U Source buffer addr | |
1007 ; 7,U Drive number of dest ? | |
1008 ; 8,U $00 Dest track | |
1009 ; 9,U $01 Dest sector ???? | |
1010 ; 10,U $DF6D ??? | |
1011 ; 12,U dest buff addr | |
1012 ; 14,U $12 Sector count per track to copy ? | |
1013 ; 15,U Page number of top of usable RAM | |
1014 | |
1015 | |
1016 CmdBackup | |
1017 LEAS -16,S ; Make tempory space on stack | |
1018 TFR S,U ; Point U at base of tempory space (Like OS-9 !) | |
1019 TFR U,D | |
1020 SUBD #$0040 ; reserve room for working stack | |
1021 SUBD <BasEndInUse ; Check that we have suficient memory available | |
1022 LBMI BasOMError ; NO: report ?OM error | |
1023 | |
1024 CMPA #$01 ; At least 1 sector's worth of ram (256 bytes) available | |
1025 LBLT BasOMError ; NO: report ?OM error | |
1026 STA BupAvailPages,U ; Store memory page count of avaiable RAM | |
1027 LDA #$12 ; Sectors per track, initially 18 for SS disk | |
1028 STA BupSecTrk,U | |
1029 LDD <BasEndInUse ; Get end of RAM in use by basic | |
1030 STD BupSrcBuff,U ; save in buffer pointers for source and dest | |
1031 STD BupDestBuff,U | |
1032 | |
1033 LDD #$DF5A ; Error masks ? | |
1034 STD 3,U | |
1035 LDD #$DF6D | |
1036 STD 10,U | |
1037 | |
1038 LDD #$0001 ; Set source and dest track and sector to 0 & 1 | |
1039 STD BupSrcTrk,U | |
1040 STD BupDestTrk,U | |
1041 LDA DosDefDriveNo ; Get default drive no | |
1042 STA BupSrcDrive,U ; save in source drive | |
1043 STA BupDestDrive,U ; and dest | |
1044 LDY #$02D0 ; sector count 720 sectors=ss40 disk | |
1045 | |
1046 JSR <BasChrGetCurr | |
1047 BEQ DoCmdBackup ; No params backup from default drive to default | |
1048 JSR >Get8BitorError | |
1049 CMPB #$04 ; greater than Max drive (4)? | |
1050 LBHI DosDNError | |
1051 | |
1052 STB BupSrcDrive,U ; Save source drive | |
1053 STB BupDestDrive,U ; and default dest to same drive | |
1054 | |
1055 JSR <BasChrGetCurr ; Get current character from basic | |
1056 BEQ DoCmdBackup ; end of line : yes do backup | |
1057 | |
1058 CMPA #$BC ; is this the "TO" token ? | |
1059 BNE CmdBackupErrorExit ; no : error, exit | |
1060 | |
1061 JSR <BasChrGet ; Get next char, skip over "TO" | |
1062 JSR >Get8BitorError ; Get dest drive in B | |
1063 CMPB #$04 ; Invalid drive no ? | |
1064 LBHI DosDNError ; yes : error, exit | |
1065 STB BupDestDrive,U ; Save in Dest driveno | |
1066 | |
1067 BSR GetCommaThen8Bit ; Skip comma, and get next param | |
1068 BEQ DoCmdBackup ; nothing : do backup | |
1069 CMPB #$02 ; 2 sided disk specified ? | |
1070 BEQ BackupDS ; yes backup double sided | |
1071 CMPB #$01 ; 1 sided disk specified ? | |
1072 BEQ BackupSS ; yes backup single sided | |
1073 | |
1074 CmdBackupErrorExit | |
1075 JMP >BasSNError ; error : exit | |
1076 | |
1077 BackupDS | |
1078 TFR Y,D ; Double sector count if double sided | |
1079 LEAY D,Y | |
1080 ASL BupSecTrk,U ; Set sectors per track for DS disk | |
1081 | |
1082 BackupSS | |
1083 JSR >GetCommaThen8Bit ; Get next param (if any) | |
1084 BEQ DoCmdBackup ; none: continue | |
1085 CMPB #$50 ; Is this an 80 track backup ? | |
1086 BEQ Backup80 | |
1087 CMPB #$28 ; Or a 40 track backup ? | |
1088 BEQ DoCmdBackup | |
1089 BRA CmdBackupErrorExit ; neither error and exit | |
1090 | |
1091 Backup80 | |
1092 TFR Y,D ; Double sector count if 80 track | |
1093 LEAY D,Y | |
1094 | |
1095 DoCmdBackup | |
1096 CLRA | |
1097 | |
1098 BupReadFromSrc | |
1099 LEAY 1,Y ; Get sector count | |
1100 LEAX BupSrcDrive,U ; point to source drive on stack frame | |
1101 BSR LC643 ; read 1 sector | |
1102 LC5D6 LEAY -1,Y ; decrement sector count | |
1103 BNE LC5E0 ; if more sectors, do next | |
1104 BSR BupWriteToDest ; no : write final sectors to destination | |
1105 LEAS $10,U ; Clear stack frame | |
1106 LC5DF RTS ; return to caller | |
1107 | |
1108 LC5E0 CMPA BupAvailPages,U ; Filled all available RAM pages ? | |
1109 BNE LC5F2 ; no : do next sector | |
1110 BSR BupWriteToDest ; Yes : write to destination | |
1111 PSHS D | |
1112 LDD <BasEndInUse ; Get end of basic storage | |
1113 STD BupDestBuff,U ; Save in source and dest buffer pointers | |
1114 STD BupSrcBuff,U | |
1115 PULS D | |
1116 BRA BupReadFromSrc ; Do next sector | |
1117 | |
1118 LC5F2 LDB #$02 | |
1119 BSR LC608 | |
1120 INCA | |
1121 BRA LC5D6 | |
1122 | |
1123 BupWriteToDest | |
1124 TSTA | |
1125 BEQ LC5DF | |
1126 LEAX BupDestDrive,U ; Point to dest drive vars | |
1127 BSR LC643 | |
1128 DC600 LDB #$03 | |
1129 LC602 BSR LC608 | |
1130 DC604 DECA | |
1131 BNE LC602 | |
1132 LC607 RTS | |
1133 | |
1134 LC608 PSHS D | |
1135 LDA BupDrive,X ; Get drive | |
1136 STA <LastActiveDrv ; Set last active drive | |
1137 | |
1138 LDD BupBuff,X | |
1139 STD <DiskBuffPtr ; Setup disk buffer pointer | |
1140 LDD BupTrk,X | |
1141 STD <DskTrackNo ; and disk track no | |
1142 LDB 1,S ; Get function, read or write | |
1143 JSR >DosDoFuncinB | |
1144 BCC LC631 ; no error continue | |
1145 STB $0603 ; Temp storage (error code from dos) | |
1146 | |
1147 LDA 1,S ; Get function, read or write | |
1148 CMPA #DosFnReadSec ; Read ? | |
1149 BRA LC62B | |
1150 | |
1151 PULS D,X | |
1152 ; FCB $35 | |
1153 ; FCB $16 | |
1154 | |
1155 JSR BupWriteToDest | |
1156 | |
1157 ; FCB $BD | |
1158 ; FCB $C5 | |
1159 ; FCB $F9 | |
1160 | |
1161 LC62B LDB $0603 ; Retrieve error code | |
1162 JMP >DosHookSysError | |
1163 | |
1164 LC631 INC 2,X ; Increment sector number | |
1165 LDA 2,X ; check sector number | |
1166 CMPA 14,U ; Done all sectors on track ? | |
1167 BLS LC63F ; No: do next sector | |
1168 | |
1169 LDA #$01 ; Reset sector count to 1 | |
1170 STA 2,X | |
1171 INC 1,X ; Increment track count | |
1172 LC63F INC 5,X ; Move to next page of buffer | |
1173 PULS D,PC ; restore and return | |
1174 | |
1175 LC643 LDB ,U ; get source drive | |
1176 CMPB 7,U ; same as dest drive ? | |
1177 BNE LC607 ; no : continue | |
1178 | |
1179 PSHS A,X,Y,U | |
1180 JSR >TextCls ; clear screen | |
1181 LDX 1,S ; get message pointer | |
1182 LDX 3,X | |
1183 JSR >BasPrintStr ; Print message (insert source/insert dest) | |
1184 LDX #MessPressAnyKey | |
1185 JSR >BasPrintStr ; Print press any key | |
1186 JSR >TextWaitKey ; Wait for a kepress | |
1187 JSR >TextCls | |
1188 PULS A,X,Y,U,PC | |
1189 ; | |
1190 ; Get8BitorError, get non zero 8 bit value in B, or generate error | |
1191 ; | |
1192 Get8BitorError | |
1193 PSHS Y,U | |
1194 JSR >VarGet8Bit ; Get 8 bit value into B | |
1195 TSTB ; B non zero ? | |
1196 BNE LC66E | |
1197 JMP >BasFCError ; No : error | |
1198 | |
1199 LC66E PULS Y,U,PC ; Restore and return | |
1200 | |
1201 LC670 CMPA #$FF | |
1202 LBEQ BasSNError | |
1203 SUBA #$CE | |
1204 BPL LC67D | |
1205 LC67A JMP >BasSNError | |
1206 | |
1207 LC67D CMPA #$1A | |
1208 BCC LC687 | |
1209 LDX #CommandDispatchTable | |
1210 JMP >$84ED | |
1211 | |
1212 LC687 JMP [>$0137] | |
1213 | |
1214 LC68B SUBB #$44 | |
1215 BPL LC691 | |
1216 BRA LC67A | |
1217 | |
1218 LC691 CMPB #$0E | |
1219 BCC LC69D | |
1220 LDX #FunctionDipatchTable | |
1221 JSR [B,X] | |
1222 JMP >$8874 | |
1223 | |
1224 LC69D JMP [>$013C] | |
1225 | |
1226 LC6A1 LDX #$0634 | |
1227 LC6A4 JSR >LD2E2 | |
1228 BNE DosHookSysError | |
1229 CLR 2,X | |
1230 LEAX 7,X | |
1231 CMPX #$0650 | |
1232 BCS LC6A4 | |
1233 LC6B2 RTS | |
1234 | |
1235 ; | |
1236 ; Get drive no in B, returns drive no (from command) in B, | |
1237 ; or causes error if (drive < 0 ) or (drive > 4) | |
1238 ; | |
1239 | |
1240 GetDriveNoInB | |
1241 JSR >VarGet8Bit ; Get 8 bit var | |
1242 TSTB | |
1243 BMI DosDNError ; Minus, invalid drive | |
1244 BNE LC6BC ; greater than 0, check < 4 | |
1245 INCB ; =0 increment so drive 0 = drive 1 | |
1246 LC6BC CMPB #$04 ; Drive in range | |
1247 BLS LC6B2 ; Yes : return it in B | |
1248 | |
1249 DosDNError | |
1250 LDB #$28 | |
1251 | |
1252 FCB $8C ; CMPX | |
1253 DosPRError | |
1254 LDB #$A4 | |
1255 | |
1256 DosHookSysError | |
1257 STB DosErrLast ; save last error code | |
1258 LDX <BasCurrentLine ; Get current line no | |
1259 STX DosErrLineNo ; save for ERR routine | |
1260 JSR >BasResetStack ; reset basic stack | |
1261 CLR <DosIOInProgress ; Flag no IO in progress | |
1262 CLR <BasDeviceNo ; Set device no back to console | |
1263 TST DosErrGotoFlag ; Do we have an error handler ? | |
1264 BPL LC6DF ; Yes, handle errors | |
1265 LDX <BasCurrentLine ; Get current line no | |
1266 LEAX 1,X | |
1267 BNE LC6F9 | |
1268 | |
1269 LC6DF JSR >TextOutCRLF ; Output a return | |
1270 JSR >CasMotorOff ; turn off cassette motor | |
1271 JSR >SndDisable ; disable cassette sound | |
1272 JSR >TextOutQuestion ; output '?' | |
1273 LDX #$82A9 | |
1274 LDB DosErrLast ; Get last error code | |
1275 BPL LC6F6 | |
1276 LDX #DDF2A | |
1277 LC6F6 JMP >$835E | |
1278 | |
1279 LC6F9 LDX #$84DA | |
1280 DC6FC PSHS X | |
1281 LDD $0615 | |
1282 STD <$2B | |
1283 JMP >$85E7 | |
1284 | |
1285 ; | |
1286 ; New reset vector | |
1287 ; | |
1288 | |
1289 ResetVector | |
1290 NOP ; Main ROM checks for reset->NOP | |
1291 CLRA ; Reset DP=0 | |
1292 TFR A,DP | |
1293 JSR >LC09D ; Reset WD, and various Dos vars. | |
1294 CLR DosErrorMask ; reset various flags | |
1295 CLR DosTimeout | |
1296 CLR DosAutoFlag | |
1297 LDA #$35 ; Re-enable NMI | |
1298 STA PIA0CRB | |
1299 JMP >$B44F ; Jump back to Main ROM reset routine | |
1300 | |
1301 ; | |
1302 ; NMI vector, called to break out of read & write loops between 6809 & WD | |
1303 ; This allows the IO routines to handle sectors of all lengths. | |
1304 ; | |
1305 | |
1306 NMISrv | |
1307 LDA dpcmdreg ; Read status register. | |
1308 CLRB ; Reset DP=0 | |
1309 TFR B,DP | |
1310 LEAS 12,S ; Drop registers from stack | |
1311 TSTA ; Setup CC | |
1312 LC726 RTS ; Return to caller | |
1313 | |
1314 ; | |
1315 ; New IRQ vector, used to count down and shut off drives. | |
1316 ; | |
1317 | |
1318 IRQSrv CLRA ; Reset DP=0 | |
1319 TFR A,DP | |
1320 TST <DosIOInProgress ; Doing IO ? | |
1321 BNE LC748 ; Yes: don't time out | |
1322 LDA DosTimeout ; Get timeout byte | |
1323 BEQ LC748 ; Already timed out : exit | |
1324 DECA ; Decrement timeout count | |
1325 STA DosTimeout | |
1326 BNE LC748 ; not zero, don't timeout yet | |
1327 BSR SuperDosSyncDir ; syncronsise directory | |
1328 BNE LC74B ; Error : report it | |
1329 LDA DosHWMaskFF48 ; turn off motor in hw byte | |
1330 ANDA #~MotorOn | |
1331 STA DosHWMaskFF48 | |
1332 | |
1333 ifne DragonAlpha | |
1334 LBSR AlphaDskCtl ; Actually turn off motor | |
1335 else | |
1336 STA DskCtl ; Actually turn off motor | |
1337 endc | |
1338 | |
1339 LC748 JMP >$9D3D ; Jump to BASIC IRQ | |
1340 | |
1341 LC74B JMP >DosHookSysError ; Jump to system error trap | |
1342 | |
1343 LC74E TFR S,D | |
1344 SUBD #$0100 | |
1345 SUBD <$1F | |
1346 BMI LC75B | |
1347 CLRB | |
1348 TSTA | |
1349 BNE LC726 | |
1350 LC75B JMP >$8342 | |
1351 | |
1352 ; | |
1353 ; Copy directory from track 20 to track 16. | |
1354 ; | |
1355 | |
1356 SuperDosSyncDir | |
1357 JSR >LC6A1 | |
1358 LEAS -8,S | |
1359 LEAU ,S | |
1360 LEAY 4,U | |
1361 LDX #$0800 | |
1362 STX <$EE | |
1363 CLR 2,U | |
1364 LDB <$EB | |
1365 STB 1,U | |
1366 LDB #$01 | |
1367 STB ,U | |
1368 CLR <$EB | |
1369 LDX #$06AA | |
1370 LC77B LDB #$12 | |
1371 STB 3,U | |
1372 INC <$EB | |
1373 LC781 LDB 3,U | |
1374 LDA B,X | |
1375 BITA ,U | |
1376 BEQ LC7A7 | |
1377 COMA | |
1378 ANDA B,X | |
1379 STA B,X | |
1380 INC 2,U | |
1381 STB <$ED | |
1382 STB ,Y+ | |
1383 LDB #$14 | |
1384 STB <$EC | |
1385 JSR >DosDoReadSec | |
1386 BNE LC7BE | |
1387 INC <$EE | |
1388 LDB 2,U | |
1389 CMPB #$04 | |
1390 BCS LC7A7 | |
1391 BSR LC7C1 | |
1392 LC7A7 DEC 3,U | |
1393 BNE LC781 | |
1394 TST 2,U | |
1395 BEQ LC7B1 | |
1396 BSR LC7C1 | |
1397 LC7B1 ASL ,U | |
1398 LDA ,U | |
1399 CMPA #$08 | |
1400 BLS LC77B | |
1401 LDA 1,U | |
1402 STA <$EB | |
1403 CLRB | |
1404 LC7BE LEAS 8,U | |
1405 RTS | |
1406 | |
1407 LC7C1 LDA #$10 | |
1408 STA <$EC | |
1409 LC7C5 DEC <$EE | |
1410 LEAY -1,Y | |
1411 LDA ,Y | |
1412 STA <$ED | |
1413 JSR >DosDoWriteSec | |
1414 BEQ LC7D5 | |
1415 LEAS 8,U | |
1416 RTS | |
1417 | |
1418 LC7D5 DEC 2,U | |
1419 BNE LC7C5 | |
1420 RTS | |
1421 | |
1422 FIRQSrv | |
1423 TST PIACRA ; Clear Inturrupt conditions | |
1424 TST PIACRB | |
1425 RTI ; and return | |
1426 | |
1427 LC7E1 BSR SuperDosValidFilename ; Validate filename | |
1428 BNE LC857 ; Error : exit | |
1429 JMP >SuperDosOpenFile ; Open file if valid | |
1430 | |
1431 ; | |
1432 ; Validate filename and copy to current drive block | |
1433 ; | |
1434 | |
1435 SuperDosValidFilename | |
1436 LDA $060A | |
1437 STA $065B | |
1438 CLR $0660 | |
1439 LDU #$0650 | |
1440 LDA #$07 | |
1441 LC7F6 CLR A,U | |
1442 DECA | |
1443 BPL LC7F6 | |
1444 LDA 2,Y | |
1445 STA $065A | |
1446 LDA 1,Y | |
1447 STA $0659 | |
1448 LDA ,Y | |
1449 STA $0658 | |
1450 CMPB #$0E | |
1451 BHI LC855 | |
1452 TSTB | |
1453 BEQ LC855 | |
1454 CMPB #$03 | |
1455 BCS LC83D | |
1456 SUBB #$02 | |
1457 LDA B,X | |
1458 CMPA #$3A | |
1459 BNE LC823 | |
1460 INCB | |
1461 LDA B,X | |
1462 INCB | |
1463 BRA LC82D | |
1464 | |
1465 LC823 ADDB #$02 | |
1466 LDA 1,X | |
1467 CMPA #$3A | |
1468 BNE LC83D | |
1469 LDA ,X++ | |
1470 LC82D SUBA #$30 | |
1471 BLS LC835 | |
1472 CMPA #$04 | |
1473 BLS LC838 | |
1474 LC835 LDB #$1C | |
1475 RTS | |
1476 | |
1477 LC838 STA $065B | |
1478 SUBB #$02 | |
1479 LC83D LDA ,X+ | |
1480 DECB | |
1481 BMI LC8A6 | |
1482 CMPA #$2F | |
1483 BEQ LC84A | |
1484 CMPA #$2E | |
1485 BNE LC866 | |
1486 LC84A CMPU #$0650 | |
1487 BEQ LC855 | |
1488 TST $0660 | |
1489 BEQ LC858 | |
1490 LC855 LDB #$96 | |
1491 LC857 RTS | |
1492 | |
1493 LC858 INC $0660 | |
1494 LDU #$0658 | |
1495 CLR ,U | |
1496 CLR 1,U | |
1497 CLR 2,U | |
1498 BRA LC83D | |
1499 | |
1500 LC866 CMPA #$41 | |
1501 BCS LC87A | |
1502 CMPA #$5A | |
1503 BLS LC886 | |
1504 SUBA #$20 | |
1505 CMPA #$41 | |
1506 BCS LC855 | |
1507 CMPA #$5A | |
1508 BLS LC886 | |
1509 BRA LC855 | |
1510 | |
1511 LC87A CMPA #$2D | |
1512 BEQ LC886 | |
1513 CMPA #$30 | |
1514 BCS LC855 | |
1515 CMPA #$39 | |
1516 BHI LC855 | |
1517 LC886 STA ,U+ | |
1518 CMPU #$065B | |
1519 BNE LC893 | |
1520 TSTB | |
1521 BNE LC855 | |
1522 BRA LC8A6 | |
1523 | |
1524 LC893 CMPU #$0658 | |
1525 BNE LC83D | |
1526 LDA ,X+ | |
1527 DECB | |
1528 BMI LC8A6 | |
1529 CMPA #$2E | |
1530 BEQ LC84A | |
1531 CMPA #$2F | |
1532 BEQ LC84A | |
1533 LC8A6 CLRB | |
1534 RTS | |
1535 | |
1536 ; | |
1537 ; Open a file and copy dir entry into FCB. | |
1538 ; | |
1539 | |
1540 SuperDosOpenFile | |
1541 LDX #$06BD | |
1542 CLR <$F1 | |
1543 LDD $0650 | |
1544 LC8B0 CMPD ,X | |
1545 BNE LC8CB | |
1546 LDU #$0652 | |
1547 LEAY 2,X | |
1548 LDB #$0A | |
1549 LC8BC LDA ,U+ | |
1550 CMPA ,Y+ | |
1551 BNE LC8C8 | |
1552 DECB | |
1553 BNE LC8BC | |
1554 JMP >LC973 | |
1555 | |
1556 LC8C8 LDD $0650 | |
1557 LC8CB LEAX $1F,X | |
1558 INC <$F1 | |
1559 CMPX #$07F3 | |
1560 BCS LC8B0 | |
1561 CLR <$F1 | |
1562 LDX #$06BD | |
1563 LC8DA TST ,X | |
1564 BEQ LC8EB | |
1565 LEAX $1F,X | |
1566 INC <$F1 | |
1567 CMPX #$07F3 | |
1568 BCS LC8DA | |
1569 LDB #$A2 | |
1570 LC8EA RTS | |
1571 | |
1572 LC8EB LDB #$0C | |
1573 TFR X,Y | |
1574 LDU #$0650 | |
1575 LC8F2 LDA ,U+ | |
1576 STA ,Y+ | |
1577 DECB | |
1578 BNE LC8F2 | |
1579 STA <$EB | |
1580 LDU #$0616 | |
1581 LDB #$06 | |
1582 MUL | |
1583 LEAU D,U | |
1584 INC 5,U | |
1585 LDB #$13 | |
1586 LC907 CLR ,Y+ | |
1587 DECB | |
1588 BNE LC907 | |
1589 LDA #$80 | |
1590 STA 15,X | |
1591 CLR $0681 | |
1592 JSR >LD1A3 | |
1593 BNE LC8EA | |
1594 LDY ,X | |
1595 LEAY 2,Y | |
1596 LDA #$10 | |
1597 STA $0660 | |
1598 LC922 STY $065C | |
1599 JSR >SuperDosFindAndRead | |
1600 BNE LC8EA | |
1601 LDX 5,X | |
1602 LEAU $00FA,X | |
1603 STU $065E | |
1604 LC934 LDA ,X | |
1605 BITA #$81 | |
1606 BNE LC954 | |
1607 LDD $0650 | |
1608 CMPD 1,X | |
1609 BNE LC954 | |
1610 LDU #$0652 | |
1611 LEAY 3,X | |
1612 LDB #$09 | |
1613 LC949 LDA ,U+ | |
1614 CMPA ,Y+ | |
1615 BNE LC954 | |
1616 DECB | |
1617 BNE LC949 | |
1618 BRA LC980 | |
1619 | |
1620 LC954 LDA ,X | |
1621 BITA #$08 | |
1622 BNE LC970 | |
1623 INC $0681 | |
1624 LEAX $19,X | |
1625 CMPX $065E | |
1626 BCS LC934 | |
1627 LDY $065C | |
1628 LEAY 1,Y | |
1629 DEC $0660 | |
1630 BNE LC922 | |
1631 LC970 JSR >DosFCBNoToAddr | |
1632 LC973 CLRB | |
1633 TST 15,X | |
1634 BPL LC97A | |
1635 LDB #$A0 | |
1636 LC97A LEAX 12,X | |
1637 LDA <$F1 | |
1638 TSTB | |
1639 RTS | |
1640 | |
1641 LC980 PSHS X | |
1642 JSR >DosFCBNoToAddr | |
1643 PULS Y | |
1644 LDA $0681 | |
1645 STA $1D,X | |
1646 LDA ,Y | |
1647 STA 15,X | |
1648 LDD 12,Y | |
1649 STD $15,X | |
1650 LDA 14,Y | |
1651 STA $17,X | |
1652 STA $19,X | |
1653 CLR $18,X | |
1654 CLR $13,X | |
1655 CLR $14,X | |
1656 LDD 15,Y | |
1657 STD $1A,X | |
1658 LDA $11,Y | |
1659 STA $1C,X | |
1660 LDD #$FFFF | |
1661 STD $10,X | |
1662 STA $12,X | |
1663 BRA LC973 | |
1664 | |
1665 ; | |
1666 ; Read some data from a file into memory | |
1667 ; | |
1668 | |
1669 SuperDosFRead | |
1670 CLR <$F5 | |
1671 STA <$F1 | |
1672 BRA LC9CA | |
1673 | |
1674 LC9C3 LDA #$01 | |
1675 | |
1676 FCB $8C | |
1677 | |
1678 LC9C6 LDA #$FF | |
1679 STA <$F5 | |
1680 LC9CA STY $0661 | |
1681 LBEQ LCAB0 | |
1682 STU $0669 | |
1683 STB $0663 | |
1684 PSHS X | |
1685 JSR >DosFCBNoToAddr | |
1686 LDA 11,X | |
1687 STA <$EB | |
1688 TST <$F5 | |
1689 BNE LC9F0 | |
1690 LDD $0661 | |
1691 ADDD 13,X | |
1692 BCC LC9EE | |
1693 INC 12,X | |
1694 LC9EE STD 13,X | |
1695 LC9F0 PULS X | |
1696 LDB $0663 | |
1697 LC9F5 CLRA | |
1698 NEGB | |
1699 BNE LC9FA | |
1700 INCA | |
1701 LC9FA CMPD $0661 | |
1702 BLS LCA03 | |
1703 LDD $0661 | |
1704 LCA03 PSHS D,X | |
1705 LDU $0669 | |
1706 JSR >LCAB2 | |
1707 BNE LCA1B | |
1708 TFR D,Y | |
1709 LDA 15,X | |
1710 BITA #$02 | |
1711 BEQ LCA1E | |
1712 TST <$F5 | |
1713 BEQ LCA1E | |
1714 LDB #$98 | |
1715 LCA1B LEAS 4,S | |
1716 RTS | |
1717 | |
1718 LCA1E LDX 2,S | |
1719 TST 1,S | |
1720 BNE LCA4E | |
1721 TST <$F5 | |
1722 BEQ LCA2F | |
1723 BPL LCA34 | |
1724 JSR >LD330 | |
1725 BRA LCA37 | |
1726 | |
1727 LCA2F JSR >SuperDosReadAbsSector | |
1728 BRA LCA37 | |
1729 | |
1730 LCA34 JSR >SuperDosWriteAbsSector | |
1731 LCA37 BNE LCA1B | |
1732 INC 2,S | |
1733 LDX $0669 | |
1734 LEAX 1,X | |
1735 STX $0669 | |
1736 DEC $0661 | |
1737 LDD $0661 | |
1738 PULS D,X | |
1739 BNE LC9F5 | |
1740 RTS | |
1741 | |
1742 LCA4E TST <$F5 | |
1743 BMI LCA93 | |
1744 JSR >SuperDosFindAndRead | |
1745 BNE LCA1B | |
1746 STX $0667 | |
1747 LDY 2,S | |
1748 LDB $0663 | |
1749 TST <$F5 | |
1750 BEQ LCA87 | |
1751 LDA #$FF | |
1752 STA 2,X | |
1753 LDX 5,X | |
1754 ABX | |
1755 LDB 1,S | |
1756 LCA6D LDA ,Y+ | |
1757 STA ,X+ | |
1758 DECB | |
1759 BNE LCA6D | |
1760 TFR X,D | |
1761 TSTB | |
1762 BNE LCA93 | |
1763 LDX $0667 | |
1764 PSHS Y | |
1765 JSR >LD2E2 | |
1766 PULS Y | |
1767 BNE LCA1B | |
1768 BRA LCA93 | |
1769 | |
1770 LCA87 LDX 5,X | |
1771 ABX | |
1772 LDB 1,S | |
1773 LCA8C LDA ,X+ | |
1774 STA ,Y+ | |
1775 DECB | |
1776 BNE LCA8C | |
1777 LCA93 LDX $0669 | |
1778 LEAX 1,X | |
1779 STX $0669 | |
1780 TFR Y,X | |
1781 LDD $0661 | |
1782 SUBD ,S++ | |
1783 STD $0661 | |
1784 LEAS 2,S | |
1785 BEQ LCAB0 | |
1786 CLR $0663 | |
1787 CLRB | |
1788 JMP >LC9F5 | |
1789 | |
1790 LCAB0 CLRB | |
1791 RTS | |
1792 | |
1793 LCAB2 JSR >DosFCBNoToAddr | |
1794 LCAB5 TFR U,D | |
1795 SUBD $13,X | |
1796 BCS LCAC9 | |
1797 TSTA | |
1798 BNE LCAC9 | |
1799 CMPB $17,X | |
1800 BCC LCAC9 | |
1801 ADDD $15,X | |
1802 BRA LCADB | |
1803 | |
1804 LCAC9 TFR U,D | |
1805 SUBD $18,X | |
1806 BCS LCADE | |
1807 TSTA | |
1808 BNE LCADE | |
1809 CMPB $1C,X | |
1810 BCC LCADE | |
1811 ADDD $1A,X | |
1812 LCADB ORCC #$04 | |
1813 RTS | |
1814 | |
1815 LCADE PSHS U | |
1816 BSR LCB20 | |
1817 BNE LCAEF | |
1818 LDD $066B | |
1819 CMPD $066D | |
1820 BHI LCAF1 | |
1821 LDB #$9A | |
1822 LCAEF PULS U,PC | |
1823 | |
1824 LCAF1 SUBB 2,Y | |
1825 SBCA #$00 | |
1826 STD $13,X | |
1827 LDA 2,Y | |
1828 STA $17,X | |
1829 LDD ,Y | |
1830 STD $15,X | |
1831 TFR Y,D | |
1832 PSHS U | |
1833 SUBD ,S++ | |
1834 PULS U | |
1835 CMPB #$13 | |
1836 BCC LCB1E | |
1837 LDA 5,Y | |
1838 STA $1C,X | |
1839 LDD 3,Y | |
1840 STD $1A,X | |
1841 LDD $066B | |
1842 STD $18,X | |
1843 LCB1E BRA LCAB5 | |
1844 | |
1845 LCB20 PSHS X | |
1846 CLR $066C | |
1847 CLR $066B | |
1848 STU $066D | |
1849 LDB $1D,X | |
1850 STB $0682 | |
1851 JSR >SuperDosGetDirEntry | |
1852 BNE LCB7C | |
1853 TFR X,U | |
1854 PULS X | |
1855 LEAY 12,U | |
1856 LDB #$04 | |
1857 LCB3E LDA ,U | |
1858 ANDA #$20 | |
1859 BEQ LCB47 | |
1860 LDA $18,U | |
1861 LCB47 PSHS D | |
1862 LCB49 LDD $066B | |
1863 ADDB 2,Y | |
1864 ADCA #$00 | |
1865 STD $066B | |
1866 CMPD $066D | |
1867 BHI LCB7B | |
1868 LEAY 3,Y | |
1869 DEC 1,S | |
1870 BNE LCB49 | |
1871 LDB ,S | |
1872 BEQ LCB79 | |
1873 LEAS 2,S | |
1874 STB $0682 | |
1875 PSHS X | |
1876 JSR >SuperDosGetDirEntry | |
1877 TFR X,U | |
1878 PULS X | |
1879 BNE LCB7E | |
1880 LEAY 1,U | |
1881 LDB #$07 | |
1882 BRA LCB3E | |
1883 | |
1884 LCB79 LEAY -3,Y | |
1885 LCB7B CLRB | |
1886 LCB7C LEAS 2,S | |
1887 LCB7E RTS | |
1888 | |
1889 ; | |
1890 ; Write data from memory to file, verify if verify on. | |
1891 ; | |
1892 | |
1893 SuperDosFWrite | |
1894 STA <$F1 | |
1895 STX $0671 | |
1896 STU $0673 | |
1897 STY $0675 | |
1898 STB $0677 | |
1899 JSR >DosFCBNoToAddr | |
1900 LDB 11,X | |
1901 STB <$EB | |
1902 LCB95 JSR >SuperDosGetFLen | |
1903 BEQ LCBA8 | |
1904 CMPB #$9C | |
1905 BEQ LCB9F | |
1906 RTS | |
1907 | |
1908 LCB9F LDA <$F1 | |
1909 JSR >SuperDosCreateFile | |
1910 BNE LCB7E | |
1911 BRA LCB95 | |
1912 | |
1913 LCBA8 CMPU $0675 | |
1914 BHI LCBB8 | |
1915 BCS LCBB5 | |
1916 CMPA $0677 | |
1917 BCC LCBB8 | |
1918 LCBB5 LDB #$9A | |
1919 LCBB7 RTS | |
1920 | |
1921 LCBB8 PSHS A | |
1922 LDD $0673 | |
1923 ADDB $0677 | |
1924 ADCA $0676 | |
1925 PSHS B | |
1926 TFR A,B | |
1927 LDA $0675 | |
1928 ADCA #$00 | |
1929 PSHS U | |
1930 SUBD ,S++ | |
1931 TFR B,A | |
1932 PULS B | |
1933 BHI LCBDE | |
1934 BCS LCBE6 | |
1935 SUBB ,S | |
1936 BCC LCBE2 | |
1937 BRA LCBE6 | |
1938 | |
1939 LCBDE SUBB ,S | |
1940 SBCA #$00 | |
1941 LCBE2 BSR LCC12 | |
1942 BNE LCC0F | |
1943 LCBE6 LEAS 1,S | |
1944 LDB $0677 | |
1945 LDX $0671 | |
1946 LDY $0673 | |
1947 LDU $0675 | |
1948 JSR >LC9C3 | |
1949 BNE LCBB7 | |
1950 TST $0608 | |
1951 BEQ LCBB7 | |
1952 LDB $0677 | |
1953 LDX $0671 | |
1954 LDY $0673 | |
1955 LDU $0675 | |
1956 JMP >LC9C6 | |
1957 | |
1958 LCC0F LEAS 1,S | |
1959 RTS | |
1960 | |
1961 LCC12 LEAS -12,S | |
1962 STD ,S | |
1963 STD 10,S | |
1964 LDA #$01 | |
1965 STA <$F6 | |
1966 JSR >LD1A3 | |
1967 LBNE LCD08 | |
1968 STX 8,S | |
1969 JSR >DosFCBNoToAddr | |
1970 LDB $1E,X | |
1971 JSR >SuperDosGetDirEntry | |
1972 LBNE LCD08 | |
1973 STX 4,S | |
1974 LDU $067F | |
1975 LDA #$FF | |
1976 STA 2,U | |
1977 CLRA | |
1978 LDB $18,X | |
1979 BNE LCC42 | |
1980 INCA | |
1981 LCC42 ADDD ,S | |
1982 TSTB | |
1983 BNE LCC48 | |
1984 DECA | |
1985 LCC48 STD ,S | |
1986 TSTA | |
1987 LBEQ LCCF0 | |
1988 LDB #$04 | |
1989 LEAY 12,X | |
1990 LDA ,X | |
1991 BITA #$01 | |
1992 BEQ LCC5D | |
1993 LEAY 1,X | |
1994 LDB #$07 | |
1995 LCC5D TST 2,Y | |
1996 BNE LCC75 | |
1997 LDD #$FFFF | |
1998 STD 6,S | |
1999 LEAY -3,Y | |
2000 STY 2,S | |
2001 LDX 8,S | |
2002 TST 2,X | |
2003 LBNE LCD0E | |
2004 BRA LCCB3 | |
2005 | |
2006 LCC75 TST 2,Y | |
2007 BEQ LCC7E | |
2008 LEAY 3,Y | |
2009 DECB | |
2010 BNE LCC75 | |
2011 LCC7E LEAY -3,Y | |
2012 LDD ,Y | |
2013 ADDB 2,Y | |
2014 ADCA #$00 | |
2015 STD 6,S | |
2016 STY 2,S | |
2017 LDX 8,S | |
2018 TST 2,X | |
2019 BEQ LCCB3 | |
2020 LDD 6,S | |
2021 SUBD 3,X | |
2022 BEQ LCCC3 | |
2023 JSR >LCD57 | |
2024 BEQ LCCA2 | |
2025 CMPB #$94 | |
2026 BNE LCD08 | |
2027 BRA LCD0E | |
2028 | |
2029 LCCA2 LDX 8,S | |
2030 PSHS A,U | |
2031 LDB 2,X | |
2032 LDX 3,X | |
2033 JSR >LD03B | |
2034 PULS A,U | |
2035 BNE LCD08 | |
2036 BRA LCCB8 | |
2037 | |
2038 LCCB3 JSR >LCD57 | |
2039 BNE LCD08 | |
2040 LCCB8 LDX 8,S | |
2041 STU 3,X | |
2042 STA 2,X | |
2043 CMPU 6,S | |
2044 BNE LCD0E | |
2045 LCCC3 LDA ,S | |
2046 CMPA 2,X | |
2047 BCS LCCCB | |
2048 LDA 2,X | |
2049 LCCCB LDY 2,S | |
2050 PSHS A | |
2051 ADDA 2,Y | |
2052 BCC LCCD8 | |
2053 PULS A | |
2054 BRA LCD0E | |
2055 | |
2056 LCCD8 STA 2,Y | |
2057 LDA 2,X | |
2058 SUBA ,S | |
2059 STA 2,X | |
2060 LDD 3,X | |
2061 ADDB ,S | |
2062 ADCA #$00 | |
2063 STD 3,X | |
2064 LDA 1,S | |
2065 SUBA ,S+ | |
2066 STA ,S | |
2067 BNE LCCB3 | |
2068 LCCF0 LDX 4,S | |
2069 TFR X,U | |
2070 JSR >DosFCBNoToAddr | |
2071 LDD 10,S | |
2072 ADDD $11,X | |
2073 BCC LCD01 | |
2074 INC $10,X | |
2075 LCD01 STD $11,X | |
2076 STB $18,U | |
2077 CLRB | |
2078 LCD08 LEAS 12,S | |
2079 CLR <$F6 | |
2080 TSTB | |
2081 RTS | |
2082 | |
2083 LCD0E LDD 2,S | |
2084 TFR D,Y | |
2085 SUBD 4,S | |
2086 CMPB #$13 | |
2087 BCC LCD23 | |
2088 LEAY 3,Y | |
2089 STY 2,S | |
2090 LCD1D LDD 3,X | |
2091 STD ,Y | |
2092 BRA LCCC3 | |
2093 | |
2094 LCD23 LDA #$01 | |
2095 JSR >LD123 | |
2096 BNE LCD08 | |
2097 LDY 4,S | |
2098 STA $18,Y | |
2099 LDB ,Y | |
2100 ORB #$20 | |
2101 STB ,Y | |
2102 LDB #$FF | |
2103 STB 2,X | |
2104 LDB #$01 | |
2105 STB ,U | |
2106 STU 4,S | |
2107 JSR >DosFCBNoToAddr | |
2108 STA $1E,X | |
2109 LEAY $19,U | |
2110 LDB #$18 | |
2111 LCD4B CLR ,-Y | |
2112 DECB | |
2113 BNE LCD4B | |
2114 STY 2,S | |
2115 LDX 8,S | |
2116 BRA LCD1D | |
2117 | |
2118 LCD57 STS $0601 | |
2119 LEAS -9,S | |
2120 CLR 4,S | |
2121 JSR >LD1A3 | |
2122 LBNE LCE5A | |
2123 LDY ,X | |
2124 LDU $11,S | |
2125 STU 5,S | |
2126 LEAX 1,U | |
2127 BEQ LCD81 | |
2128 BSR LCDB2 | |
2129 BNE LCDAF | |
2130 CMPU #$05A0 | |
2131 BCS LCD81 | |
2132 LDU #$058E | |
2133 BRA LCDA2 | |
2134 | |
2135 LCD81 LEAU ,Y | |
2136 LCD83 LDA #$FF | |
2137 STA ,S | |
2138 LCD87 LEAU -$12,U | |
2139 STU -2,S | |
2140 BMI LCD9A | |
2141 BSR LCDB2 | |
2142 BEQ LCD83 | |
2143 TST ,S | |
2144 BPL LCDAF | |
2145 STU ,S | |
2146 BRA LCD87 | |
2147 | |
2148 LCD9A LDU ,S | |
2149 STU -2,S | |
2150 BPL LCDAF | |
2151 LEAU ,Y | |
2152 LCDA2 LEAU $12,U | |
2153 CMPU #$0B40 | |
2154 BHI LCDB5 | |
2155 BSR LCDB2 | |
2156 BEQ LCDA2 | |
2157 LCDAF JMP >LCE34 | |
2158 | |
2159 LCDB2 JMP >LCE60 | |
2160 | |
2161 LCDB5 LDA #$FF | |
2162 STA 7,S | |
2163 LDA 4,S | |
2164 LCDBB LDU <Zero16Bit | |
2165 LSRA | |
2166 BCS LCDC3 | |
2167 LDU #$05A0 | |
2168 LCDC3 BSR LCDB2 | |
2169 LDB #$B4 | |
2170 LCDC7 LDA ,X+ | |
2171 BNE LCDD2 | |
2172 LEAU 8,U | |
2173 DECB | |
2174 BNE LCDC7 | |
2175 BRA LCE13 | |
2176 | |
2177 LCDD2 CLRB | |
2178 STB 8,S | |
2179 PSHS U | |
2180 LCDD7 INCB | |
2181 LDA ,X+ | |
2182 INCA | |
2183 BEQ LCDD7 | |
2184 CMPB 10,S | |
2185 BLS LCDE5 | |
2186 STB 10,S | |
2187 STU ,S | |
2188 LCDE5 LEAX -1,X | |
2189 LDA #$08 | |
2190 MUL | |
2191 LEAU D,U | |
2192 LCDEC CLRB | |
2193 LDA ,X+ | |
2194 BNE LCDD7 | |
2195 LEAU 8,U | |
2196 TFR X,D | |
2197 CMPB #$B4 | |
2198 BCS LCDEC | |
2199 PULS U | |
2200 BSR LCE60 | |
2201 LEAU 8,U | |
2202 LDA ,X | |
2203 LDB 8,S | |
2204 CMPB #$01 | |
2205 BHI LCE0C | |
2206 LCE07 LEAU -1,U | |
2207 ASLA | |
2208 BCC LCE07 | |
2209 LCE0C ASLA | |
2210 BCC LCE13 | |
2211 LEAU -1,U | |
2212 BRA LCE0C | |
2213 | |
2214 LCE13 CMPB #$02 | |
2215 BCC LCE34 | |
2216 CMPB 7,S | |
2217 BHI LCE34 | |
2218 LDA 7,S | |
2219 INCA | |
2220 BNE LCE2A | |
2221 STB 7,S | |
2222 STU 5,S | |
2223 LDA 4,S | |
2224 EORA #$03 | |
2225 BRA LCDBB | |
2226 | |
2227 LCE2A LDU 5,S | |
2228 BSR LCE60 | |
2229 BNE LCE34 | |
2230 LDB #$94 | |
2231 BRA LCE5A | |
2232 | |
2233 LCE34 BSR LCE60 | |
2234 CLRB | |
2235 LCE37 INCB | |
2236 BEQ LCE51 | |
2237 PSHS A | |
2238 COMA | |
2239 ANDA ,X | |
2240 STA ,X | |
2241 PULS A | |
2242 ASLA | |
2243 BCC LCE4A | |
2244 LDA #$01 | |
2245 LEAX 1,X | |
2246 LCE4A BITA ,X | |
2247 BNE LCE37 | |
2248 TFR B,A | |
2249 LCE51 EQU *+1 | |
2250 CMPX #$86FF | |
2251 LDX 2,S | |
2252 LDB #$FF | |
2253 STB 2,X | |
2254 CLRB | |
2255 LCE5A LDS $0601 | |
2256 TSTB | |
2257 RTS | |
2258 | |
2259 LCE60 PSHS Y,U | |
2260 LDA #$01 | |
2261 CMPU #$05A0 | |
2262 BCS LCE71 | |
2263 LEAY 1,Y | |
2264 LEAU $FA60,U | |
2265 ASLA | |
2266 LCE71 PSHS U | |
2267 BITA 12,S | |
2268 BNE LCE84 | |
2269 STA 12,S | |
2270 JSR >SuperDosFindAndRead | |
2271 BNE LCE5A | |
2272 STX 10,S | |
2273 LDA #$FF | |
2274 STA 2,X | |
2275 LCE84 LDX 10,S | |
2276 LDX 5,X | |
2277 PULS D | |
2278 LSRA | |
2279 RORB | |
2280 LSRA | |
2281 RORB | |
2282 LSRA | |
2283 RORB | |
2284 LDA 3,S | |
2285 ANDA #$07 | |
2286 LDU #$A672 | |
2287 NEGA | |
2288 LDA A,U | |
2289 ABX | |
2290 BITA ,X | |
2291 PULS Y,U,PC | |
2292 | |
2293 ; | |
2294 ; Get length of a file | |
2295 ; | |
2296 | |
2297 SuperDosGetFLen | |
2298 STA <$F1 | |
2299 BSR DosFCBNoToAddr | |
2300 TST 15,X | |
2301 BPL LCEAA | |
2302 LDB #$9C | |
2303 LCEA9 RTS | |
2304 | |
2305 LCEAA LDA $12,X | |
2306 LDU $10,X | |
2307 LEAY 1,U | |
2308 BNE LCED0 | |
2309 JSR >LCB20 | |
2310 BNE LCEA9 | |
2311 LDB $0682 | |
2312 STB $1E,X | |
2313 LCEBF LDA $18,U | |
2314 STA $12,X | |
2315 LDU $066B | |
2316 TSTA | |
2317 BEQ LCECD | |
2318 LEAU -1,U | |
2319 LCECD STU $10,X | |
2320 LCED0 CLRB | |
2321 RTS | |
2322 | |
2323 ; | |
2324 ; Converts current FCB number in DosCurrCtrlBlk to the FCB's address | |
2325 ; Exits with : | |
2326 ; X=FCB address | |
2327 ; | |
2328 | |
2329 DosFCBNoToAddr | |
2330 PSHS D | |
2331 LDA <DosCurrCtrlBlk ; Get current FCB no | |
2332 LDB #DosFCBLength ; FCB len ? | |
2333 MUL ; Work out offset to FCB | |
2334 TFR D,X | |
2335 LEAX DosFCB0Addr,X ; Get offset of FCB | |
2336 PULS D,PC | |
2337 | |
2338 ; | |
2339 ; Close all open files. | |
2340 ; | |
2341 | |
2342 SuperDosCloseAll | |
2343 LDA #$09 | |
2344 STA <$F1 | |
2345 LCEE5 BSR DosFCBNoToAddr | |
2346 LDA 11,X | |
2347 CMPA <$EB | |
2348 BNE LCEF1 | |
2349 BSR LCEF9 | |
2350 BNE LCEA9 | |
2351 LCEF1 DEC <$F1 | |
2352 BPL LCEE5 | |
2353 LCEF5 CLRB | |
2354 RTS | |
2355 | |
2356 ; | |
2357 ; Close a single file | |
2358 ; | |
2359 | |
2360 SuperDosCloseFile | |
2361 STA <$F1 | |
2362 LCEF9 BSR DosFCBNoToAddr | |
2363 TST ,X | |
2364 BEQ LCEF5 | |
2365 LDA <$EB | |
2366 PSHS A | |
2367 LDA 11,X | |
2368 STA <$EB | |
2369 CLR ,X | |
2370 JSR >LD1A3 | |
2371 BNE LCF34 | |
2372 TST 5,X | |
2373 BEQ LCF19 | |
2374 DEC 5,X | |
2375 BEQ LCF19 | |
2376 CLRB | |
2377 BRA LCF34 | |
2378 | |
2379 LCF19 LDB 2,X | |
2380 BEQ LCF2A | |
2381 PSHS X | |
2382 LDX 3,X | |
2383 JSR >LD03B | |
2384 PULS X | |
2385 BNE LCF34 | |
2386 CLR 2,X | |
2387 LCF2A JSR >SuperDosSyncDir | |
2388 LDU #$0696 | |
2389 LDA <$EB | |
2390 CLR A,U | |
2391 LCF34 PULS A | |
2392 STA <$EB | |
2393 TSTB | |
2394 LCF39 RTS | |
2395 | |
2396 ; | |
2397 ; Create a file, with backup. | |
2398 ; | |
2399 | |
2400 SuperDosCreateFile | |
2401 STA $067D | |
2402 JSR >DosFCBNoToAddr | |
2403 STX $0678 | |
2404 LDB #$0C | |
2405 LDU #$0650 | |
2406 LCF48 LDA ,X+ | |
2407 STA ,U+ | |
2408 DECB | |
2409 BNE LCF48 | |
2410 LDD -4,U | |
2411 STD $067A | |
2412 LDA -2,U | |
2413 STA $067C | |
2414 LDD #$4241 | |
2415 STD -4,U | |
2416 LDA #$4B | |
2417 STA -2,U | |
2418 TST 3,X | |
2419 BMI LCF92 | |
2420 JSR >SuperDosOpenFile | |
2421 CMPB #$A0 | |
2422 BEQ LCF74 | |
2423 TSTB | |
2424 BNE LCF39 | |
2425 BSR SuperDosDeleteFile | |
2426 BNE LCF39 | |
2427 LCF74 JSR >LCEF9 | |
2428 NOP | |
2429 LDA $067D | |
2430 TST [$0678] | |
2431 BEQ LCF92 | |
2432 JSR >SuperDosRename | |
2433 BEQ LCF8A | |
2434 CMPB #$9C | |
2435 BNE LCF39 | |
2436 LCF8A LDA $067D | |
2437 JSR >SuperDosCloseFile | |
2438 BNE LCF39 | |
2439 LCF92 LDD $067A | |
2440 STD $0658 | |
2441 LDA $067C | |
2442 STA $065A | |
2443 JSR >SuperDosOpenFile | |
2444 BEQ LCFA7 | |
2445 CMPB #$A0 | |
2446 BNE LCF39 | |
2447 LCFA7 STA <$F1 | |
2448 JSR >DosFCBNoToAddr | |
2449 TST 15,X | |
2450 BMI LCFB3 | |
2451 LDB #$9E | |
2452 LCFB2 RTS | |
2453 | |
2454 LCFB3 CLRA | |
2455 JSR >LD123 | |
2456 BNE LCFB2 | |
2457 JSR >DosFCBNoToAddr | |
2458 STA $1D,X | |
2459 STA $1E,X | |
2460 LDB #$1C | |
2461 LCFC4 CLR B,X | |
2462 DECB | |
2463 CMPB #$0C | |
2464 BCC LCFC4 | |
2465 LDB #$18 | |
2466 LCFCD CLR B,U | |
2467 DECB | |
2468 BPL LCFCD | |
2469 LEAU 1,U | |
2470 LDB #$0B | |
2471 LCFD6 LDA ,X+ | |
2472 STA ,U+ | |
2473 DECB | |
2474 BNE LCFD6 | |
2475 CLRB | |
2476 RTS | |
2477 | |
2478 ; | |
2479 ; Delete a file from disk. | |
2480 ; | |
2481 | |
2482 SuperDosDeleteFile | |
2483 JSR >LD0E4 | |
2484 BNE LCFB2 | |
2485 PSHS X | |
2486 LDB $1D,X | |
2487 JSR >LD237 | |
2488 BNE LD035 | |
2489 TFR X,U | |
2490 PULS X | |
2491 LEAY 12,U | |
2492 LDB #$04 | |
2493 LCFF6 LDA ,U | |
2494 ANDA #$20 | |
2495 BEQ LCFFF | |
2496 LDA $18,U | |
2497 LCFFF PSHS D | |
2498 LDB #$81 | |
2499 STB ,U | |
2500 PSHS X | |
2501 LD007 LDX ,Y++ | |
2502 LDB ,Y+ | |
2503 BEQ LD017 | |
2504 PSHS Y | |
2505 BSR LD03B | |
2506 PULS Y | |
2507 LBNE LCA1B | |
2508 LD017 DEC 3,S | |
2509 BNE LD007 | |
2510 PULS X | |
2511 LDB ,S | |
2512 BEQ LD034 | |
2513 LEAS 2,S | |
2514 PSHS X | |
2515 JSR >LD237 | |
2516 TFR X,U | |
2517 PULS X | |
2518 BNE LCFB2 | |
2519 LEAY 1,U | |
2520 LDB #$07 | |
2521 BRA LCFF6 | |
2522 | |
2523 LD034 CLRB | |
2524 LD035 CLR <$F6 | |
2525 LEAS 2,S | |
2526 TSTB | |
2527 RTS | |
2528 | |
2529 LD03B CLRA | |
2530 PSHS A | |
2531 PSHS D,X | |
2532 JSR >LD1A3 | |
2533 BNE LD0C2 | |
2534 LDY ,X | |
2535 LDD 2,S | |
2536 SUBD #$05A0 | |
2537 BCS LD05A | |
2538 LEAY 1,Y | |
2539 STD 2,S | |
2540 ADDD ,S | |
2541 SUBD #$05A0 | |
2542 BCC LD0C0 | |
2543 LD05A LDD 2,S | |
2544 ADDD ,S | |
2545 SUBD #$05A0 | |
2546 BCS LD06A | |
2547 STB 4,S | |
2548 NEGB | |
2549 ADDB 1,S | |
2550 STB 1,S | |
2551 LD06A JSR >SuperDosFindAndRead | |
2552 BNE LD0C2 | |
2553 LDA #$FF | |
2554 STA 2,X | |
2555 LDD 2,S | |
2556 LSRA | |
2557 RORB | |
2558 ROR ,S | |
2559 LSRA | |
2560 RORB | |
2561 ROR ,S | |
2562 LSRA | |
2563 RORB | |
2564 ROR ,S | |
2565 LDX 5,X | |
2566 ABX | |
2567 LDB #$01 | |
2568 LDA ,S | |
2569 BEQ LD08F | |
2570 LD08A ASLB | |
2571 SUBA #$20 | |
2572 BNE LD08A | |
2573 LD08F STB ,S | |
2574 LDB 1,S | |
2575 LD093 LDA ,S | |
2576 ORA ,X | |
2577 STA ,X | |
2578 DECB | |
2579 BEQ LD0B4 | |
2580 ASL ,S | |
2581 BCC LD093 | |
2582 LDA #$01 | |
2583 STA ,S | |
2584 LEAX 1,X | |
2585 LD0A6 CMPB #$10 | |
2586 BCS LD093 | |
2587 LDA #$FF | |
2588 STA ,X+ | |
2589 STA ,X+ | |
2590 SUBB #$10 | |
2591 BNE LD0A6 | |
2592 LD0B4 LDX #$05A0 | |
2593 LEAS 4,S | |
2594 LDB ,S+ | |
2595 BEQ LD0C4 | |
2596 JMP >LD03B | |
2597 | |
2598 LD0C0 LDB #$90 | |
2599 LD0C2 LEAS 5,S | |
2600 LD0C4 RTS | |
2601 | |
2602 ; | |
2603 ; Protect/unprotect a file. | |
2604 ; | |
2605 | |
2606 SuperDosProtect | |
2607 STA <$F1 | |
2608 JSR >DosFCBNoToAddr | |
2609 LDA 15,X | |
2610 BMI LD0F4 | |
2611 TSTB | |
2612 BEQ LD0D4 | |
2613 ORA #$02 | |
2614 LD0D4 EQU *+1 | |
2615 CMPX #$84FD | |
2616 STA 15,X | |
2617 LDB $1D,X | |
2618 JSR >LD237 | |
2619 BNE LD0C4 | |
2620 STA ,X | |
2621 CLRB | |
2622 RTS | |
2623 | |
2624 LD0E4 STA <$F1 | |
2625 JSR >DosFCBNoToAddr | |
2626 LDA 15,X | |
2627 BMI LD0F4 | |
2628 BITA #$02 | |
2629 BEQ LD122 | |
2630 LDB #$98 | |
2631 RTS | |
2632 | |
2633 LD0F4 LDB #$9C | |
2634 RTS | |
2635 | |
2636 ; | |
2637 ; Rename a file. | |
2638 ; | |
2639 | |
2640 SuperDosRename | |
2641 BSR LD0E4 | |
2642 BNE LD122 | |
2643 LDB #$0B | |
2644 LDU #$0650 | |
2645 LD100 LDA ,U+ | |
2646 STA ,X+ | |
2647 DECB | |
2648 BNE LD100 | |
2649 LEAX -11,X | |
2650 LDB $1D,X | |
2651 JSR >LD237 | |
2652 BNE LD122 | |
2653 LDU #$0650 | |
2654 LDB #$0B | |
2655 LEAX 1,X | |
2656 LD118 LDA ,U+ | |
2657 STA ,X+ | |
2658 DECB | |
2659 BNE LD118 | |
2660 CLR <$F6 | |
2661 CLRB | |
2662 LD122 RTS | |
2663 | |
2664 LD123 CLRB | |
2665 STD $067D | |
2666 BSR LD1A3 | |
2667 BNE LD122 | |
2668 LDX ,X | |
2669 PSHS X | |
2670 LEAX 2,X | |
2671 LD131 STX $066F | |
2672 TFR X,Y | |
2673 JSR >SuperDosFindAndRead | |
2674 BNE LD170 | |
2675 LDU 5,X | |
2676 LDB #$0A | |
2677 TST $067D | |
2678 BEQ LD149 | |
2679 CLR $067D | |
2680 BRA LD14D | |
2681 | |
2682 LD149 LDA ,U | |
2683 BMI LD168 | |
2684 LD14D INC $067E | |
2685 LEAU $19,U | |
2686 DECB | |
2687 BNE LD149 | |
2688 JSR >LDFF3 | |
2689 LEAX 1,X | |
2690 TFR X,D | |
2691 SUBD ,S | |
2692 CMPB #$12 | |
2693 BCS LD131 | |
2694 LEAS 2,S | |
2695 LDB #$92 | |
2696 RTS | |
2697 | |
2698 LD168 LDA #$FF | |
2699 STA 2,X | |
2700 LDA $067E | |
2701 CLRB | |
2702 LD170 LEAS 2,S | |
2703 RTS | |
2704 | |
2705 ; | |
2706 ; Get free space on disk | |
2707 ; | |
2708 | |
2709 SuperDosGetFree | |
2710 BSR LD1A3 | |
2711 BNE LD187 | |
2712 LDY ,X | |
2713 LDX <Zero16Bit | |
2714 BSR LD188 | |
2715 BNE LD187 | |
2716 LEAY 1,Y | |
2717 BSR LD188 | |
2718 BNE LD187 | |
2719 CLRB | |
2720 LD187 RTS | |
2721 | |
2722 LD188 PSHS X | |
2723 JSR >SuperDosFindAndRead | |
2724 BNE LD170 | |
2725 LDU 5,X | |
2726 PULS X | |
2727 LDB #$B4 | |
2728 LD195 LDA ,U+ | |
2729 LD197 LSRA | |
2730 BCC LD19C | |
2731 LEAX 1,X | |
2732 LD19C TSTA | |
2733 BNE LD197 | |
2734 DECB | |
2735 BNE LD195 | |
2736 RTS | |
2737 | |
2738 LD1A3 LDX #$061C | |
2739 LDU #$0696 | |
2740 LDB #$06 | |
2741 LDA <$EB | |
2742 LEAU A,U | |
2743 DECA | |
2744 MUL | |
2745 LEAX D,X | |
2746 TST ,U | |
2747 BNE LD1FF | |
2748 LDY #$0168 | |
2749 LDA #$12 | |
2750 STA $10,U | |
2751 TST 12,U | |
2752 BNE LD1CA | |
2753 JSR >DosDoRestore | |
2754 BCC LD1CA | |
2755 RTS | |
2756 | |
2757 LD1CA PSHS X | |
2758 JSR >SuperDosFindAndRead | |
2759 BNE LD170 | |
2760 CLR 2,X | |
2761 LDX 5,X | |
2762 LDD $00FE,X | |
2763 COMA | |
2764 COMB | |
2765 CMPD $00FC,X | |
2766 PULS X | |
2767 BNE LD201 | |
2768 STB $10,U | |
2769 STA 12,U | |
2770 DEC ,U | |
2771 CMPB #$12 | |
2772 BEQ LD1F0 | |
2773 CLRB | |
2774 LD1F0 PSHS B | |
2775 CLR 2,X | |
2776 LDD #$0168 | |
2777 TST ,S+ | |
2778 BNE LD1FD | |
2779 ASLB | |
2780 ROLA | |
2781 LD1FD STD ,X | |
2782 LD1FF CLRB | |
2783 RTS | |
2784 | |
2785 LD201 LDB #$90 | |
2786 RTS | |
2787 | |
2788 ; | |
2789 ; Get directory entry. | |
2790 ; | |
2791 | |
2792 SuperDosGetDirEntry | |
2793 LDA #$FF | |
2794 LD206 INCA | |
2795 SUBB #$0A | |
2796 BCC LD206 | |
2797 ADDB #$0A | |
2798 PSHS D | |
2799 BSR LD1A3 | |
2800 LBNE LCB7C | |
2801 LDD ,X | |
2802 ADDD #$0002 | |
2803 ADDB ,S+ | |
2804 ADCA #$00 | |
2805 STD $066F | |
2806 TFR D,Y | |
2807 BSR SuperDosFindAndRead | |
2808 PULS A | |
2809 BNE LD236 | |
2810 TFR X,U | |
2811 LDB #$19 | |
2812 MUL | |
2813 STX $067F | |
2814 LDX 5,X | |
2815 LEAX D,X | |
2816 CLRB | |
2817 LD236 RTS | |
2818 | |
2819 LD237 PSHS D | |
2820 BSR SuperDosGetDirEntry | |
2821 LBNE LCB7C | |
2822 LDY $067F | |
2823 LDA #$FE | |
2824 STA 2,Y | |
2825 CLRB | |
2826 PULS D,PC | |
2827 | |
2828 LD24A LDX #$0634 | |
2829 LDU <Zero16Bit | |
2830 LDB #$04 | |
2831 LD251 LDA 2,X | |
2832 BEQ LD26C | |
2833 CMPA #$55 | |
2834 BEQ LD26E | |
2835 CMPY ,X | |
2836 BNE LD268 | |
2837 LDA <$EB | |
2838 CMPA 3,X | |
2839 BNE LD268 | |
2840 BSR LD2CB | |
2841 CLRB | |
2842 RTS | |
2843 | |
2844 LD268 TST 2,X | |
2845 BNE LD26E | |
2846 LD26C TFR X,U | |
2847 LD26E LEAX 7,X | |
2848 DECB | |
2849 BNE LD251 | |
2850 LDB #$FF | |
2851 RTS | |
2852 | |
2853 ; | |
2854 ; Find a free buffer and read sector. | |
2855 ; | |
2856 | |
2857 SuperDosFindAndRead | |
2858 PSHS U | |
2859 BSR LD24A | |
2860 LBEQ LCB7C | |
2861 LEAX ,U | |
2862 PULS U | |
2863 BNE LD288 | |
2864 BSR LD2A2 | |
2865 BNE LD2A1 | |
2866 LD288 CLR 2,X | |
2867 STY ,X | |
2868 LDA <$EB | |
2869 STA 3,X | |
2870 PSHS X | |
2871 LDX 5,X | |
2872 JSR >SuperDosReadAbsSector | |
2873 PULS X | |
2874 BNE LD2A1 | |
2875 LDA #$01 | |
2876 STA 2,X | |
2877 CLRB | |
2878 LD2A1 RTS | |
2879 | |
2880 LD2A2 PSHS D,Y,U | |
2881 LD2A4 LDX #$0634 | |
2882 LDB #$04 | |
2883 LD2A9 LDA 4,X | |
2884 CMPA #$01 | |
2885 BEQ LD2B4 | |
2886 LEAX 7,X | |
2887 DECB | |
2888 BNE LD2A9 | |
2889 LD2B4 BSR LD2CB | |
2890 LDA 2,X | |
2891 CMPA #$55 | |
2892 BEQ LD2A4 | |
2893 INCA | |
2894 BNE LD2C3 | |
2895 DEC 2,X | |
2896 BRA LD2A4 | |
2897 | |
2898 LD2C3 BSR LD2E2 | |
2899 BEQ LD2C9 | |
2900 STB 1,S | |
2901 LD2C9 PULS D,Y,U,PC | |
2902 | |
2903 LD2CB LDB #$04 | |
2904 LDA 4,X | |
2905 LDU #$0634 | |
2906 LD2D2 CMPA 4,U | |
2907 BHI LD2D8 | |
2908 DEC 4,U | |
2909 LD2D8 LEAU 7,U | |
2910 DECB | |
2911 BNE LD2D2 | |
2912 LDA #$04 | |
2913 STA 4,X | |
2914 RTS | |
2915 | |
2916 LD2E2 TST 2,X | |
2917 BMI LD2E8 | |
2918 CLRB | |
2919 RTS | |
2920 | |
2921 LD2E8 LDA <$EB | |
2922 PSHS A | |
2923 PSHS X | |
2924 LDA #$FF | |
2925 STA <$F6 | |
2926 CLR 2,X | |
2927 LDA 3,X | |
2928 STA <$EB | |
2929 LDY ,X | |
2930 LDX 5,X | |
2931 BSR SuperDosWriteAbsSector | |
2932 PULS X | |
2933 BNE LD31F | |
2934 LDA <$EC | |
2935 CMPA #$14 | |
2936 BNE LD31A | |
2937 LDU #$A673 | |
2938 LDA <$EB | |
2939 NEGA | |
2940 LDA A,U | |
2941 LDU #$06AA | |
2942 LDB <$ED | |
2943 ORA B,U | |
2944 STA B,U | |
2945 LD31A LDA #$01 | |
2946 STA 2,X | |
2947 CLRB | |
2948 LD31F PULS A | |
2949 STA <$EB | |
2950 CLR <$F6 | |
2951 TSTB | |
2952 RTS | |
2953 | |
2954 ; | |
2955 ; Write absolute sector. | |
2956 ; | |
2957 | |
2958 SuperDosWriteAbsSector | |
2959 BSR LD33E | |
2960 JSR >DosDoWriteSec2 | |
2961 LD32C LDX <$EE | |
2962 TSTB | |
2963 RTS | |
2964 | |
2965 LD330 BSR LD33E | |
2966 JSR >DosDoReadSec2 | |
2967 BRA LD32C | |
2968 | |
2969 ; | |
2970 ; Read absolute sector. | |
2971 ; | |
2972 | |
2973 SuperDosReadAbsSector | |
2974 BSR LD33E | |
2975 JSR >DosDoReadSec | |
2976 BRA LD32C | |
2977 | |
2978 LD33E STX <$EE | |
2979 LDX #$06A6 | |
2980 LDB <$EB | |
2981 LDB B,X | |
2982 CLRA | |
2983 PSHS D | |
2984 CLR ,-S | |
2985 TFR Y,D | |
2986 LD34E INC ,S | |
2987 SUBD 1,S | |
2988 BPL LD34E | |
2989 ADDB 2,S | |
2990 LDA ,S | |
2991 DECA | |
2992 INCB | |
2993 LEAS 3,S | |
2994 STD <$EC | |
2995 RTS | |
2996 | |
2997 ; | |
2998 ; Copy command dispatch routine | |
2999 ; | |
3000 ; Syntax : | |
3001 ; COPY filespec TO filespec | |
3002 ; | |
3003 ; Stack setup as follows | |
3004 ; | |
3005 ; offset size purpose | |
3006 ; 0 1 Source FCB number | |
3007 ; 1 1 Destination FCB number | |
3008 ; 2 2 Buffer pointer ? | |
3009 ; 4 3 File pointer pos | |
3010 ; | |
3011 | |
3012 CmdCopy | |
3013 JSR >SuperDosCloseAll ; Close all files & devices | |
3014 BNE LD39F ; Error : exit | |
3015 LEAS -7,S ; Make room on stack | |
3016 | |
3017 ; | |
3018 ; Make a buffer for copying the file. | |
3019 ; | |
3020 | |
3021 TFR S,D ; move to D | |
3022 SUBD #$0100 ; Make room for 1 sector | |
3023 SUBD <BasEndInUse ; Will we overwrite basic ? | |
3024 LBMI BasOMError ; yes : error, exit | |
3025 | |
3026 CLRB | |
3027 TSTA ; overwrite zero page ? | |
3028 LBEQ BasOMError ; yes : error, exit | |
3029 STD 2,S ; IO buffer pointer | |
3030 JSR >DosGetFilenameAndOpen ; Get source filename FCB number in A | |
3031 BNE LD39F ; Error : exit | |
3032 STA ,S ; save FCB no of source | |
3033 | |
3034 JSR >SuperDosGetFLen ; Get file length | |
3035 BNE LD39F ; Error : exit | |
3036 JSR <BasChrGetCurr ; scan current char from params | |
3037 CMPA #$BC ; "TO" token | |
3038 LBNE BasSNError ; no : Error | |
3039 | |
3040 JSR <BasChrGet ; Get next character | |
3041 JSR >DosGetFilenameAndOpen ; Get dest filename FCB number in A | |
3042 BEQ LD398 ; No error : continue | |
3043 CMPB #$A0 | |
3044 BNE LD39F ; Error : exit | |
3045 LD398 STA 1,S ; Save destination FCB number | |
3046 JSR >SuperDosCreateFile ; re-write destination file | |
3047 BEQ LD3A2 ; no error : continue | |
3048 LD39F JMP >DosHookSysError ; Error : exit | |
3049 | |
3050 LD3A2 LDA ,S ; Get source FCB no | |
3051 STA <DosCurrCtrlBlk ; Save current FCB | |
3052 JSR >DosFCBNoToAddr ; Get FCB address | |
3053 | |
3054 ; Compare file pointer position with file length for source file | |
3055 | |
3056 LDD 12,X | |
3057 CMPD $10,X | |
3058 BCS LD3B8 | |
3059 LDA 14,X | |
3060 CMPA $12,X | |
3061 BEQ LD408 | |
3062 | |
3063 LD3B8 LDU 12,X | |
3064 LDA 14,X | |
3065 STA 6,S | |
3066 STU 4,S | |
3067 LDD 2,S | |
3068 ADDD 5,S | |
3069 STD 5,S | |
3070 BCC LD3CA | |
3071 INC 4,S | |
3072 LD3CA LDA 4,S | |
3073 SUBA $10,X | |
3074 BCS LD3DF | |
3075 LDD 5,S | |
3076 SUBD $11,X | |
3077 BLS LD3DF | |
3078 LDD $11,X | |
3079 SUBD 13,X | |
3080 STD 2,S | |
3081 | |
3082 LD3DF LDA ,S ; Get source FCB no | |
3083 LDU 12,X ; Get number of bytes to read | |
3084 LDB 14,X ; Y:B=position to read from | |
3085 LDY 2,S | |
3086 LDX <BasEndInUse ; Point to end of basic memory | |
3087 JSR >SuperDosFRead ; Read from source file | |
3088 BNE LD39F ; error : exit | |
3089 | |
3090 LDA 1,S ; Get destination FCB No | |
3091 STA <DosCurrCtrlBlk ; Save in current ctrl block no | |
3092 JSR >DosFCBNoToAddr ; Get addres of Dest FCB | |
3093 | |
3094 LDY $10,X | |
3095 LDB $12,X | |
3096 LDU 2,S | |
3097 LDX <BasEndInUse ; Point to end of basic memory | |
3098 JSR >SuperDosFWrite ; Write to destination | |
3099 BNE LD39F ; Error : exit | |
3100 BRA LD3A2 ; continue copying | |
3101 | |
3102 LD408 JSR >SuperDosCloseAll ; Close all files, finished copy | |
3103 BNE LD39F ; Error ! | |
3104 LEAS 7,S ; drop stack frame | |
3105 RTS | |
3106 ; | |
3107 ; Merge command dispatch routine. | |
3108 ; | |
3109 ; Syntax : | |
3110 ; MERGE filespec | |
3111 ; | |
3112 | |
3113 CmdMerge | |
3114 JSR >LD6CB | |
3115 BNE LD39F | |
3116 BSR LD494 | |
3117 BNE LD39F | |
3118 CMPA #$01 | |
3119 BNE LD45B | |
3120 LDU <$1B | |
3121 LDY <$19 | |
3122 PSHS Y,U | |
3123 LEAU 1,U | |
3124 STU <$19 | |
3125 JSR >LD507 | |
3126 PULS X,U | |
3127 STU <$1B | |
3128 STX <$19 | |
3129 LEAU 1,U | |
3130 LD433 LDD ,U++ | |
3131 BEQ LD455 | |
3132 LDD ,U++ | |
3133 STD $02DA | |
3134 STD <$2B | |
3135 CLRB | |
3136 LDX #$02DC | |
3137 LD442 INCB | |
3138 LDA ,U+ | |
3139 STA ,X+ | |
3140 BNE LD442 | |
3141 ADDB #$04 | |
3142 STB <$03 | |
3143 PSHS U | |
3144 BSR LD45E | |
3145 PULS U | |
3146 BRA LD433 | |
3147 | |
3148 LD455 CLR $0611 | |
3149 JMP >LD4E4 | |
3150 | |
3151 LD45B JMP >$B848 | |
3152 | |
3153 LD45E JSR >$83FF | |
3154 BCS LD475 | |
3155 LDD <$47 | |
3156 SUBD ,X | |
3157 ADDD <$1B | |
3158 STD <$1B | |
3159 LDU ,X | |
3160 LD46D LDA ,U+ | |
3161 STA ,X+ | |
3162 CMPX <$1B | |
3163 BNE LD46D | |
3164 LD475 LDD <$1B | |
3165 STD <$43 | |
3166 ADDB <$03 | |
3167 ADCA #$00 | |
3168 STD <$41 | |
3169 JSR >$831C | |
3170 LDU #$02D8 | |
3171 LD485 LDA ,U+ | |
3172 STA ,X+ | |
3173 CMPX <$45 | |
3174 BNE LD485 | |
3175 LDX <$41 | |
3176 STX <$1B | |
3177 JMP >$83ED | |
3178 | |
3179 LD494 LDX #$0650 | |
3180 LDY #$0009 | |
3181 LDU <Zero16Bit | |
3182 CLRB | |
3183 LDA <$F1 | |
3184 JSR >SuperDosFRead | |
3185 BNE LD4B6 | |
3186 LDA #$55 | |
3187 LDX #$0650 | |
3188 CMPA ,X | |
3189 BNE LD45B | |
3190 COMA | |
3191 CMPA 8,X | |
3192 BNE LD45B | |
3193 LDA 1,X | |
3194 CLRB | |
3195 LD4B6 RTS | |
3196 | |
3197 DosHookRun CLR $0614 | |
3198 CLR $0619 | |
3199 CLR $0617 | |
3200 CLR $0618 | |
3201 CMPA #$22 | |
3202 BEQ LD4C9 | |
3203 TSTA | |
3204 RTS | |
3205 | |
3206 LD4C9 LEAS 2,S | |
3207 LDB #$01 | |
3208 | |
3209 FCB $21 | |
3210 | |
3211 ; | |
3212 ; Load command dispatch routine | |
3213 ; | |
3214 ; Syntax : | |
3215 ; LOAD filespec | |
3216 ; LOAD filespec,offset | |
3217 ; | |
3218 | |
3219 CmdLoad | |
3220 CLRB | |
3221 STB $0611 | |
3222 JSR >LD6CB | |
3223 BNE LD4DB | |
3224 BSR LD494 | |
3225 BEQ LD4DE | |
3226 LD4DB JMP >DosHookSysError | |
3227 | |
3228 LD4DE CMPA #$01 | |
3229 BNE LD529 | |
3230 BSR LD507 | |
3231 LD4E4 CLR <$F6 | |
3232 LDX <$19 | |
3233 JSR >$85EE | |
3234 LDX <$27 | |
3235 STX <$23 | |
3236 LDX <$1B | |
3237 STX <$1D | |
3238 STX <$1F | |
3239 LD4F5 JSR >$8514 | |
3240 JSR >$8434 | |
3241 TST $0611 | |
3242 BEQ LD503 | |
3243 JMP >$849F | |
3244 | |
3245 LD503 CLRA | |
3246 JMP >$8371 | |
3247 | |
3248 LD507 LDD 4,X | |
3249 TFR D,Y | |
3250 ADDD <$19 | |
3251 STD <$1F | |
3252 LDB #$40 | |
3253 JSR >$8331 | |
3254 LD514 LDA <$F1 | |
3255 LDB #$09 | |
3256 LDX <$19 | |
3257 LDU <Zero16Bit | |
3258 JSR >SuperDosFRead | |
3259 BNE LD4DB | |
3260 JSR >$83ED | |
3261 LEAX 2,X | |
3262 STX <$1B | |
3263 RTS | |
3264 | |
3265 LD529 CMPA #$02 | |
3266 DD52E EQU *+3 | |
3267 LBNE LD45B | |
3268 LDU 6,X | |
3269 STU <$9D | |
3270 JSR <$A5 | |
3271 BEQ LD549 | |
3272 PSHS X | |
3273 BSR LD5AA | |
3274 TFR X,U | |
3275 PULS X | |
3276 LDD 6,X | |
3277 SUBD 2,X | |
3278 STU 2,X | |
3279 ADDD 2,X | |
3280 STD <$9D | |
3281 LD549 LDY 4,X | |
3282 LDA <$F1 | |
3283 LDB #$09 | |
3284 LDU <Zero16Bit | |
3285 LDX 2,X | |
3286 JSR >SuperDosFRead | |
3287 BNE LD5A1 | |
3288 TST $0611 | |
3289 BEQ LD5A9 | |
3290 JMP [>$009D] | |
3291 | |
3292 ; | |
3293 ; Save command dispatch routine. | |
3294 ; | |
3295 ; Syntax : | |
3296 ; SAVE filespec | |
3297 ; SAVE filespec,start_addr,end_addr,entry_addr | |
3298 ; | |
3299 | |
3300 CmdSave | |
3301 JSR >$8887 | |
3302 JSR >$8877 | |
3303 JSR <$A5 | |
3304 BEQ LD5B0 | |
3305 LDY #DosExtBin | |
3306 BSR LD598 | |
3307 BSR LD5AA | |
3308 STX $0652 | |
3309 BSR LD5AA | |
3310 TFR X,D | |
3311 CMPX $0652 | |
3312 LBCS DosPRError | |
3313 SUBD $0652 | |
3314 LBMI BasFCError | |
3315 ADDD #$0001 | |
3316 STD $0654 | |
3317 BSR LD5AA | |
3318 STX $0656 | |
3319 LDB #$02 | |
3320 BRA LD5CA | |
3321 | |
3322 LD598 JSR >LD6DF | |
3323 BEQ LD5A4 | |
3324 CMPB #$A0 | |
3325 BEQ LD5A4 | |
3326 LD5A1 JMP >DosHookSysError | |
3327 | |
3328 LD5A4 JSR >SuperDosCreateFile | |
3329 BNE LD5A1 | |
3330 LD5A9 RTS | |
3331 | |
3332 LD5AA JSR >$89AA | |
3333 JMP >$8E83 | |
3334 | |
3335 LD5B0 LDY #DosExtBas | |
3336 BSR LD598 | |
3337 LDX <$19 | |
3338 STX $0652 | |
3339 LDD <$1B | |
3340 SUBD <$19 | |
3341 STD $0654 | |
3342 LDX #BasFCError | |
3343 STX $0656 | |
3344 LDB #$01 | |
3345 LD5CA LDX #$0650 | |
3346 LDA #$55 | |
3347 STA ,X | |
3348 COMA | |
3349 STA 8,X | |
3350 STB 1,X | |
3351 LDA <$F1 | |
3352 CLRB | |
3353 LDY <Zero16Bit | |
3354 LDU #$0009 | |
3355 JSR >SuperDosFWrite | |
3356 BNE LD5A1 | |
3357 LDA <$F1 | |
3358 LDB #$09 | |
3359 LDX $0652 | |
3360 LDU $0654 | |
3361 LDY <Zero16Bit | |
3362 JSR >SuperDosFWrite | |
3363 BNE LD5A1 | |
3364 CLR <$F6 | |
3365 RTS | |
3366 | |
3367 ; | |
3368 ; Chain command dispatch routine. | |
3369 ; | |
3370 ; Syntax : | |
3371 ; CHAIN filespec | |
3372 ; | |
3373 | |
3374 CmdChain | |
3375 BSR LD670 | |
3376 JSR >LD6CB | |
3377 BNE LD5A1 | |
3378 JSR >LD494 | |
3379 BNE LD5A1 | |
3380 CMPA #$01 | |
3381 LBNE LD45B | |
3382 JSR <$A5 | |
3383 BEQ LD61E | |
3384 JSR >$89AA | |
3385 JSR >$869A | |
3386 BSR LD629 | |
3387 LDD <$2B | |
3388 JSR >$85E7 | |
3389 BRA LD626 | |
3390 | |
3391 LD61E BSR LD629 | |
3392 LDU <$19 | |
3393 LEAU -1,U | |
3394 STU <$A6 | |
3395 LD626 JMP >LD4F5 | |
3396 | |
3397 LD629 LDD $0654 | |
3398 TFR D,Y | |
3399 ADDD <$19 | |
3400 SUBD <$1B | |
3401 PSHS D | |
3402 ADDD <$1F | |
3403 STD <$1F | |
3404 LDB #$40 | |
3405 STB $0611 | |
3406 JSR >$8331 | |
3407 LDD ,S | |
3408 BPL LD653 | |
3409 LDX <$1B | |
3410 LEAU D,X | |
3411 LD648 LDA ,X+ | |
3412 STA ,U+ | |
3413 CMPU <$1F | |
3414 BLS LD648 | |
3415 BRA LD661 | |
3416 | |
3417 LD653 LDX <$1F | |
3418 LEAX 1,X | |
3419 LEAU D,X | |
3420 LD659 LDA ,-X | |
3421 STA ,-U | |
3422 CMPX <$1B | |
3423 BCC LD659 | |
3424 LD661 LDD ,S | |
3425 ADDD <$1B | |
3426 STD <$1B | |
3427 PULS D | |
3428 ADDD <$1D | |
3429 STD <$1D | |
3430 JMP >LD514 | |
3431 | |
3432 LD670 LDX <BasVarsPtr ; Get pointer to start of vars | |
3433 LEAX 2,X | |
3434 LD674 CMPX <BasArrayPtr ; More than 2 bytes of vars ? | |
3435 BCC LD682 | |
3436 | |
3437 TST -1,X | |
3438 BPL LD67E | |
3439 BSR LD6AA | |
3440 LD67E LEAX 7,X | |
3441 BRA LD674 | |
3442 | |
3443 LD682 LDU <BasArrayPtr ; Array pointer | |
3444 LD684 CMPU <BasEndInUse ; any arrays in use ? | |
3445 BCC LD6A7 | |
3446 LDD 2,U | |
3447 LEAX D,U | |
3448 PSHS X | |
3449 TST 1,U | |
3450 BPL LD6A3 | |
3451 LDB 4,U | |
3452 CLRA | |
3453 ASLB | |
3454 LEAX D,U | |
3455 LEAX 5,X | |
3456 LD69B BSR LD6AA | |
3457 LEAX 5,X | |
3458 CMPX ,S | |
3459 BCS LD69B | |
3460 LD6A3 PULS U | |
3461 BRA LD684 | |
3462 | |
3463 LD6A7 JMP >$8CD7 | |
3464 | |
3465 LD6AA PSHS X,U | |
3466 CMPX <$21 | |
3467 BCC LD6C3 | |
3468 LDB ,X | |
3469 BEQ LD6C3 | |
3470 JSR >$8CB3 | |
3471 TFR X,U | |
3472 LDY ,S | |
3473 LDX 2,Y | |
3474 STU 2,Y | |
3475 JSR >UtilCopyBXtoU | |
3476 LD6C3 PULS X,U,PC | |
3477 | |
3478 LD6C5 LDY #DosExtDat | |
3479 BRA LD6D5 | |
3480 | |
3481 LD6CB LDY #DosExtBas | |
3482 BRA LD6D5 | |
3483 | |
3484 ; | |
3485 ; Get a filename from Dos and open it | |
3486 ; Takes a string supplied on command name, fetches it and | |
3487 ; tries to open the file of that name. | |
3488 ; | |
3489 ; | |
3490 ; Exits with :- | |
3491 ; A=FCB number for opened file | |
3492 ; B= Error code ? | |
3493 ; Y=ptr to error code table ! | |
3494 ; | |
3495 | |
3496 | |
3497 DosGetFilenameAndOpen | |
3498 LDY #DosErrorCodeTable ; Point to error messages | |
3499 LD6D5 PSHS Y | |
3500 JSR >VarGetStr ; get string into temp variable | |
3501 JSR >VarGetExpr ; Get address of string in FAC | |
3502 PULS Y | |
3503 LD6DF LDX <BasStrAddr ; Get string address | |
3504 PSHS X | |
3505 LDB ,X ; Get string length | |
3506 LDX 2,X ; Get pointer to actual string data | |
3507 JSR >LC7E1 ; Validate & open file (if valid) | |
3508 PULS X | |
3509 PSHS D | |
3510 JSR >VarDelVar ; Delete tempory variable | |
3511 PULS D | |
3512 TSTB ; Get error? | |
3513 RTS | |
3514 | |
3515 DosHookCloseSingle | |
3516 LDA #$09 | |
3517 STA <$F1 | |
3518 LD6F9 JSR >LCEF9 | |
3519 BNE LD717 | |
3520 DEC <$F1 | |
3521 BPL LD6F9 | |
3522 LD702 CLR <$F6 | |
3523 CMPX #$39FD | |
3524 LD707 CLRA | |
3525 CLRB | |
3526 STD $0697 | |
3527 STD $0699 | |
3528 RTS | |
3529 | |
3530 LD710 BSR LD707 | |
3531 JMP >$BA77 | |
3532 | |
3533 LD715 BEQ LD702 | |
3534 LD717 JMP >DosHookSysError | |
3535 | |
3536 LD71A JSR >LCEF9 | |
3537 BRA LD715 | |
3538 | |
3539 ; | |
3540 ; Create command dispatch routine. | |
3541 ; | |
3542 ; Syntax : | |
3543 ; CREATE filespec,length | |
3544 ; | |
3545 | |
3546 CmdCreate | |
3547 BSR LD6C5 | |
3548 BEQ LD72B | |
3549 CMPB #$9E | |
3550 BEQ LD72B | |
3551 CMPB #$A0 | |
3552 BNE LD717 | |
3553 LD72B LDA <$F1 | |
3554 JSR >SuperDosCreateFile | |
3555 BNE LD717 | |
3556 JSR <$A5 | |
3557 BEQ LD76C | |
3558 JSR >$89AA | |
3559 JSR >$8887 | |
3560 JSR >LD879 | |
3561 LD73F TST <$51 | |
3562 BEQ LD755 | |
3563 LDD #$FF00 | |
3564 BSR LD767 | |
3565 LDD <$52 | |
3566 SUBD #$FF00 | |
3567 STD <$52 | |
3568 BCC LD73F | |
3569 DEC <$51 | |
3570 BNE LD73F | |
3571 LD755 LDD <$52 | |
3572 BEQ LD76C | |
3573 CMPD #$FF00 | |
3574 BLS LD767 | |
3575 SUBD #$FF00 | |
3576 BSR LD767 | |
3577 LDD #$FF00 | |
3578 LD767 JSR >LCC12 | |
3579 BNE LD717 | |
3580 LD76C RTS | |
3581 | |
3582 ; | |
3583 ; Kill command dispatch routine | |
3584 ; | |
3585 ; Syntax : | |
3586 ; KILL filespec | |
3587 ; | |
3588 | |
3589 CmdKill | |
3590 JSR >DosGetFilenameAndOpen | |
3591 BNE LD777 | |
3592 JSR >SuperDosDeleteFile | |
3593 LD775 BEQ LD71A | |
3594 LD777 JMP >DosHookSysError | |
3595 | |
3596 ; | |
3597 ; Protect command dispatch routine. | |
3598 ; | |
3599 ; Syntax : | |
3600 ; PROTECT ON filespec | |
3601 ; PROTECT OFF filespec | |
3602 ; | |
3603 | |
3604 CmdProtect | |
3605 TSTA | |
3606 BPL LD787 | |
3607 CMPA #$C2 | |
3608 BEQ LD798 | |
3609 CMPA #$88 | |
3610 LBNE BasSNError | |
3611 LD787 BSR LD790 | |
3612 LDB #$01 | |
3613 LD78B JSR >SuperDosProtect | |
3614 BRA LD775 | |
3615 | |
3616 LD790 JSR <$9F | |
3617 JSR >DosGetFilenameAndOpen | |
3618 BNE LD7BB | |
3619 RTS | |
3620 | |
3621 LD798 BSR LD790 | |
3622 CLRB | |
3623 BRA LD78B | |
3624 | |
3625 ; | |
3626 ; Rename command dispatch routine | |
3627 ; | |
3628 ; Syntax : | |
3629 ; RENAME filespec TO filespec | |
3630 ; | |
3631 | |
3632 CmdRename | |
3633 JSR >DosGetFilenameAndOpen | |
3634 BNE LD7BB | |
3635 PSHS A | |
3636 LDB #$BC | |
3637 JSR >$89AC | |
3638 JSR >DosGetFilenameAndOpen | |
3639 BEQ LD7B9 | |
3640 CMPB #$A0 | |
3641 BNE LD7BB | |
3642 PULS A | |
3643 JSR >SuperDosRename | |
3644 BRA LD775 | |
3645 | |
3646 LD7B9 LDB #$9E | |
3647 LD7BB JMP >DosHookSysError | |
3648 | |
3649 ; | |
3650 ; FLread command dispatch routine | |
3651 ; | |
3652 ; Syntax : | |
3653 ; FLREAD filespec;string | |
3654 ; FLREAD filespec, FROM first_byte,FOR count;string | |
3655 ; | |
3656 | |
3657 CmdFLRead | |
3658 BSR LD7CD | |
3659 LDA #$FF | |
3660 STA $0612 | |
3661 JSR >LD95D | |
3662 BSR LD7F8 | |
3663 JMP >$9DD9 | |
3664 | |
3665 LD7CD JSR >LD6C5 | |
3666 BNE LD822 | |
3667 BSR LD825 | |
3668 JSR >DosFCBNoToAddr | |
3669 TST $067E | |
3670 BEQ LD7E6 | |
3671 LDU $0664 | |
3672 LDB $0666 | |
3673 STU 12,X | |
3674 STB 14,X | |
3675 LD7E6 JSR >LD9CF | |
3676 LDX #$02DC | |
3677 CLR ,X | |
3678 JMP <$9F | |
3679 | |
3680 ; | |
3681 ; Fread command dispatch routine | |
3682 ; | |
3683 ; Syntax : | |
3684 ; FREAD filespec;variable list | |
3685 ; FREAD filespec,FROM startpos,FOR numbytes;variable list | |
3686 ; | |
3687 | |
3688 CmdFRead | |
3689 BSR LD7CD | |
3690 CLR $0612 | |
3691 JSR >$877A | |
3692 LD7F8 JSR >DosFCBNoToAddr | |
3693 LDB $0604 | |
3694 BEQ LD80E | |
3695 CLR $0603 | |
3696 LDD 13,X | |
3697 SUBD $0603 | |
3698 STD 13,X | |
3699 BCC LD80E | |
3700 DEC 12,X | |
3701 LD80E TST <$F4 | |
3702 BEQ LD81F | |
3703 LDB <$F3 | |
3704 BEQ LD81F | |
3705 CLRA | |
3706 ADDD 13,X | |
3707 STD 13,X | |
3708 BCC LD81F | |
3709 INC 12,X | |
3710 LD81F CLR <$6F | |
3711 RTS | |
3712 | |
3713 LD822 JMP >DosHookSysError | |
3714 | |
3715 LD825 JSR >$9C76 | |
3716 LDA <$F1 | |
3717 JSR >SuperDosGetFLen | |
3718 BNE LD822 | |
3719 STU $0664 | |
3720 STA $0666 | |
3721 CLR <$F4 | |
3722 CLR $067E | |
3723 LDA #$01 | |
3724 STA <$6F | |
3725 LD83E JSR <$A5 | |
3726 CMPA #$3B | |
3727 BEQ LD896 | |
3728 JSR >$89AA | |
3729 CMPA #$E5 | |
3730 BNE LD85F | |
3731 JSR <$9F | |
3732 JSR >$8887 | |
3733 BSR LD879 | |
3734 STU $0664 | |
3735 STA $0666 | |
3736 LDA #$FF | |
3737 STA $067E | |
3738 BRA LD83E | |
3739 | |
3740 LD85F CMPA #$80 | |
3741 BNE LD870 | |
3742 JSR <$9F | |
3743 JSR >Get8BitorError | |
3744 STB <$F3 | |
3745 LDB #$FF | |
3746 STB <$F4 | |
3747 BRA LD83E | |
3748 | |
3749 LD870 JMP >BasSNError | |
3750 | |
3751 LD873 JMP >BasFCError | |
3752 | |
3753 LD876 JMP >$8882 | |
3754 | |
3755 LD879 TST <$54 | |
3756 BMI LD873 | |
3757 TST <$06 | |
3758 BNE LD876 | |
3759 LDA #$A0 | |
3760 SUBA <$4F | |
3761 BEQ LD892 | |
3762 LD887 LSR <$50 | |
3763 ROR <$51 | |
3764 ROR <$52 | |
3765 ROR <$53 | |
3766 DECA | |
3767 BNE LD887 | |
3768 LD892 LDU <$51 | |
3769 LDA <$53 | |
3770 LD896 RTS | |
3771 | |
3772 ; | |
3773 ; FWrite command dispatch routine. | |
3774 ; | |
3775 ; Syntax : | |
3776 ; FWRITE filespec;variable list | |
3777 ; FWRITE filespec,FROM startpos,FOR numbytes;variable list | |
3778 ; | |
3779 | |
3780 CmdFWrite | |
3781 JSR >LD6C5 | |
3782 BEQ LD8A5 | |
3783 CMPB #$A0 | |
3784 BNE LD908 | |
3785 JSR >SuperDosCreateFile | |
3786 BNE LD908 | |
3787 LD8A5 JSR >LD825 | |
3788 JSR >LD2A2 | |
3789 BNE LD908 | |
3790 STX $060B | |
3791 LDA #$55 | |
3792 STA 2,X | |
3793 CLR <$F2 | |
3794 JSR <$9F | |
3795 JSR >$903D | |
3796 TST <$F4 | |
3797 BEQ LD8CA | |
3798 LDB <$F3 | |
3799 BEQ LD8CA | |
3800 LDA #$20 | |
3801 LD8C5 BSR LD911 | |
3802 DECB | |
3803 BNE LD8C5 | |
3804 LD8CA TST <$F2 | |
3805 BEQ LD8E6 | |
3806 LDX $060B | |
3807 LDX 5,X | |
3808 CLRA | |
3809 LDB <$F2 | |
3810 TFR D,U | |
3811 LDA <$F1 | |
3812 LDY $0664 | |
3813 LDB $0666 | |
3814 JSR >SuperDosFWrite | |
3815 BNE LD908 | |
3816 LD8E6 LDX $060B | |
3817 CLR 2,X | |
3818 LD8EB RTS | |
3819 | |
3820 DosHookCheckIONum BLE LD8EB | |
3821 CMPB #$04 | |
3822 BHI LD906 | |
3823 PULS X,PC | |
3824 | |
3825 DosHookOpenDev LEAS 2,S | |
3826 JSR >$8887 | |
3827 JSR >$8DEA | |
3828 PSHS B | |
3829 JSR >$B7D4 | |
3830 TSTB | |
3831 LBLE $B835 | |
3832 LD906 LDB #$28 | |
3833 LD908 JMP >DosHookSysError | |
3834 | |
3835 DosHookCharOut TST <$6F | |
3836 BLE LD8EB | |
3837 LEAS 2,S | |
3838 LD911 PSHS D,X,Y,U | |
3839 LDB <$F4 | |
3840 BEQ LD91B | |
3841 LDB <$F3 | |
3842 BEQ LD952 | |
3843 LD91B LDX $060B | |
3844 LDX 5,X | |
3845 LDB <$F2 | |
3846 ABX | |
3847 STA ,X | |
3848 DEC <$F3 | |
3849 INC <$F2 | |
3850 BNE LD952 | |
3851 LDA <$F1 | |
3852 LDX $060B | |
3853 LDX 5,X | |
3854 LDU #$0100 | |
3855 LDY $0664 | |
3856 LDB $0666 | |
3857 JSR >SuperDosFWrite | |
3858 BEQ LD944 | |
3859 JMP >DosHookSysError | |
3860 | |
3861 LD944 LDD $0665 | |
3862 ADDD #$0100 | |
3863 BCC LD94F | |
3864 INC $0664 | |
3865 LD94F STD $0665 | |
3866 LD952 PULS D,X,Y,U,PC | |
3867 | |
3868 DosHookDiskItem TST <$6F | |
3869 BLE LD9BB | |
3870 LDX #$879A | |
3871 STX ,S | |
3872 LD95D LDA <$F4 | |
3873 BEQ LD965 | |
3874 LDA <$F3 | |
3875 BEQ LD9B2 | |
3876 LD965 LDX #$02DD | |
3877 LDB <$F2 | |
3878 STB $0603 | |
3879 ABX | |
3880 LDB $0604 | |
3881 STB $0611 | |
3882 CLRB | |
3883 STB -1,X | |
3884 STB <$00 | |
3885 LD979 DEC <$F3 | |
3886 DEC $0604 | |
3887 INC <$F2 | |
3888 LDA ,X+ | |
3889 BEQ LD9B2 | |
3890 CMPA #$0D | |
3891 BEQ LD9B2 | |
3892 TST $0612 | |
3893 BNE LD995 | |
3894 CMPA #$2C | |
3895 BEQ LD9B2 | |
3896 CMPA #$3A | |
3897 BEQ LD9B2 | |
3898 LD995 LDA <$F4 | |
3899 BEQ LD99D | |
3900 LDA <$F3 | |
3901 BEQ LD9B2 | |
3902 LD99D INCB | |
3903 CMPB #$FF | |
3904 BEQ LD9B0 | |
3905 LDA $0604 | |
3906 BNE LD979 | |
3907 LDB <$00 | |
3908 BNE LD9B0 | |
3909 BSR LD9BC | |
3910 CLRB | |
3911 BRA LD979 | |
3912 | |
3913 LD9B0 LEAX 1,X | |
3914 LD9B2 LDB $0603 | |
3915 CLR -1,X | |
3916 LDX #$02DC | |
3917 ABX | |
3918 LD9BB RTS | |
3919 | |
3920 LD9BC JSR >DosFCBNoToAddr | |
3921 CLRA | |
3922 LDB $0611 | |
3923 PSHS D | |
3924 LDD 13,X | |
3925 SUBD ,S++ | |
3926 STD 13,X | |
3927 BCC LD9CF | |
3928 DEC 12,X | |
3929 LD9CF PSHS Y,U | |
3930 LDU #$00FF | |
3931 BSR LD9EF | |
3932 LDU #$02DD | |
3933 CLR D,U | |
3934 LDA <$F1 | |
3935 LDB 14,X | |
3936 LDX 12,X | |
3937 EXG X,U | |
3938 JSR >SuperDosFRead | |
3939 BNE LDA25 | |
3940 LDX #$02DD | |
3941 CLR -1,X | |
3942 PULS Y,U,PC | |
3943 | |
3944 LD9EF PSHS U | |
3945 LDD 13,X | |
3946 ADDD ,S | |
3947 PSHS D | |
3948 LDA 12,X | |
3949 ADCA #$00 | |
3950 SUBA $10,X | |
3951 PULS D | |
3952 BCS LDA14 | |
3953 BHI LDA23 | |
3954 SUBD $11,X | |
3955 BLS LDA14 | |
3956 LDD $11,X | |
3957 SUBD 13,X | |
3958 BEQ LDA23 | |
3959 STD ,S | |
3960 COM <$00 | |
3961 LDA14 LDD ,S | |
3962 STB $0604 | |
3963 STB $0611 | |
3964 CLR $0603 | |
3965 CLR <$F2 | |
3966 PULS Y,PC | |
3967 | |
3968 LDA23 LDB #$9A | |
3969 LDA25 JMP >DosHookSysError | |
3970 | |
3971 ; | |
3972 ; Dir command dispatch routine | |
3973 ; | |
3974 ; Syntax : | |
3975 ; DIR drivenum | |
3976 ; | |
3977 | |
3978 CmdDir | |
3979 BEQ LDA2F | |
3980 JSR >GetDriveNoInB | |
3981 BRA LDA32 | |
3982 | |
3983 LDA2F LDB $060A | |
3984 LDA32 STB <$EB | |
3985 CLR ,-S | |
3986 JSR >LD710 | |
3987 CLRB | |
3988 LDA3A JSR >$851B | |
3989 JSR >SuperDosGetDirEntry | |
3990 BNE LDA25 | |
3991 LDA ,X | |
3992 BITA #$08 | |
3993 BNE LDAA2 | |
3994 BITA #$81 | |
3995 BNE LDA9A | |
3996 LEAX 1,X | |
3997 LDB #$08 | |
3998 BSR LDAB2 | |
3999 LDB #$04 | |
4000 LDA #$2E | |
4001 BSR LDAB8 | |
4002 LDA -12,X | |
4003 BITA #$02 | |
4004 BEQ LDA61 | |
4005 LDA #$70 | |
4006 LDA61 EQU *+1 | |
4007 CMPX #$8620 | |
4008 JSR >$B54A | |
4009 JSR >$90F5 | |
4010 LDU #$FFFF | |
4011 LDX #$06BD | |
4012 LDB ,S | |
4013 STB $1D,X | |
4014 JSR >LCB20 | |
4015 BNE LDA25 | |
4016 JSR >LCEBF | |
4017 BSR LDABF | |
4018 LDD <$88 | |
4019 CMPD #$05A0 | |
4020 BLS LDA97 | |
4021 PSHS D,X,Y,U | |
4022 LDX #DDFE0 | |
4023 JSR >BasPrintStr | |
4024 JSR >$852B | |
4025 JSR >$BA77 | |
4026 PULS D,X,Y,U | |
4027 LDA97 EQU *+1 | |
4028 LDA #$BD | |
4029 SUBA <$A1 | |
4030 LDA9A INC ,S | |
4031 LDB ,S | |
4032 CMPB #$A0 | |
4033 BCS LDA3A | |
4034 LDAA2 PULS A | |
4035 JSR >SuperDosGetFree | |
4036 CLRA | |
4037 TFR X,U | |
4038 BSR LDABF | |
4039 LDX #DDAD4 | |
4040 JMP >BasPrintStr | |
4041 | |
4042 LDAB2 LDA ,X+ | |
4043 BNE LDAB8 | |
4044 LDA #$20 | |
4045 LDAB8 JSR >$B54A | |
4046 DECB | |
4047 BNE LDAB2 | |
4048 RTS | |
4049 | |
4050 LDABF JSR >LDD9B | |
4051 JMP >$9582 | |
4052 | |
4053 DosHookReadInput PSHS D,X,U | |
4054 LDX #$837D | |
4055 CMPX 8,S | |
4056 BNE LDAD3 | |
4057 JSR >DosHookCloseSingle | |
4058 BRA LDB2D | |
4059 | |
4060 DDAD4 EQU *+1 | |
4061 LDAD3 PULS D,X,U,PC | |
4062 | |
4063 FCC / BYTES FREE/ | |
4064 FCB $0D | |
4065 FCB $00 | |
4066 FCB $00 | |
4067 FCB $00 | |
4068 FCB $00 | |
4069 | |
4070 ; | |
4071 ; Auto command dispatch routine | |
4072 ; | |
4073 ; Syntax : | |
4074 ; | |
4075 ; AUTO startline,increment | |
4076 ; | |
4077 | |
4078 | |
4079 CmdAuto | |
4080 LDX <BasCurrentLine ; Get current line number | |
4081 LEAX 1,X ; Increment it | |
4082 LBNE BasFCError ; to big : ?FC error | |
4083 LDX #$000A ; Default line no increment 10 | |
4084 TFR X,D | |
4085 PSHS D,X ; make room on stack & setup default start and increment | |
4086 JSR <BasChrGetCurr ; Fetch current char pointed to by basic | |
4087 BEQ CmdAutoDoAuto ; Last char : yes proceed | |
4088 JSR >VarGet16Bit ; get start line no | |
4089 LDD <$52 ; check for error | |
4090 STD 2,S | |
4091 JSR <BasChrGetCurr ; Fetch current char pointed to by basic | |
4092 BEQ CmdAutoDoAuto ; Last char : yes proceed | |
4093 JSR >VarCKComma ; check for comma | |
4094 JSR >VarGet16Bit ; Get Line increment | |
4095 LDD <$52 | |
4096 BEQ CmdAutoErrorExit | |
4097 STD ,S | |
4098 JSR <BasChrGetCurr ; Fetch current char pointed to by basic | |
4099 BEQ CmdAutoDoAuto ; Last char : yes proceed | |
4100 CmdAutoErrorExit | |
4101 JMP >BasSNError ; More chars left, SN? error | |
4102 | |
4103 CmdAutoDoAuto | |
4104 ORCC #$50 ; Disable inturrupts ??? | |
4105 LDD ,S++ ; Get Increment off stack | |
4106 STD DosAutoInc | |
4107 LDD ,S++ ; Get start line off stack | |
4108 SUBD $060F ; Subtrack increment | |
4109 STD DosAutoCurrent ; Save in current | |
4110 LDA #AutoFlag ; Flag in AUTO mode | |
4111 STA DosAutoFlag | |
4112 RTS | |
4113 | |
4114 FCB $34 | |
4115 FCB $56 | |
4116 | |
4117 LDB2D TST $0613 | |
4118 BNE LDB34 | |
4119 LDB32 PULS D,X,U,PC | |
4120 | |
4121 LDB34 LDD $060D | |
4122 ADDD $060F | |
4123 CMPD #$F9FF | |
4124 BHI LDB32 | |
4125 STD ,S | |
4126 JSR >$957A | |
4127 LDA #$20 | |
4128 JSR >$B54A | |
4129 LDU #$03DA | |
4130 LDD ,S | |
4131 STD $060D | |
4132 LDX #$02DD | |
4133 CLRB | |
4134 LDB56 LDA ,U+ | |
4135 BEQ LDB5F | |
4136 STA ,X+ | |
4137 INCB | |
4138 BRA LDB56 | |
4139 | |
4140 LDB5F LDA #$20 | |
4141 STA ,X+ | |
4142 INCB | |
4143 LDB64 JSR >$B505 | |
4144 CMPA #$0D | |
4145 BEQ LDB6F | |
4146 CMPA #$03 | |
4147 BNE LDB85 | |
4148 LDB6F CLR $0613 | |
4149 LDA #$0D | |
4150 JSR >$B54A | |
4151 LEAS 8,S | |
4152 CLR <$85 | |
4153 LDX #$02DD | |
4154 LDA #$0D | |
4155 LDB #$01 | |
4156 JMP >$B5D3 | |
4157 | |
4158 LDB85 CMPA #$20 | |
4159 BCS LDB64 | |
4160 CMPA #$7B | |
4161 BCC LDB64 | |
4162 LEAS 8,S | |
4163 CLR <$85 | |
4164 JMP >$B5D3 | |
4165 | |
4166 LDB94 CLRA ; A=0 | |
4167 LDX #$0008 ; Repeat 8 times | |
4168 LDB98 JSR >CasByteOut ; Output A to cassette | |
4169 LEAX -1,X ; Decrement count | |
4170 BNE LDB98 ; Loop again if all not done | |
4171 RTS | |
4172 | |
4173 ; | |
4174 ; Beep command dispatch routine | |
4175 ; | |
4176 ; Syntax : | |
4177 ; BEEP nobeeps | |
4178 ; | |
4179 | |
4180 CmdBeep | |
4181 BEQ LDBA6 ; if no params, default to 1 beep | |
4182 JSR >Get8BitorError ; get beep count | |
4183 LDBA6 EQU *+1 | |
4184 CMPX #$C601 ; LDB #$01 (default beep count) | |
4185 PSHS B ; save count on stack | |
4186 CLRB | |
4187 JSR >SndDTOAOn ; switch dound to D to A | |
4188 LDBAE BSR LDB94 | |
4189 JSR >$851B | |
4190 DEC ,S ; decrement beep count | |
4191 BEQ LDBC1 ; done all : restore and exit | |
4192 LDY #$6000 ; wait a short while | |
4193 LDBBB LEAY -1,Y | |
4194 BEQ LDBAE ; loop back and do next beep | |
4195 BRA LDBBB | |
4196 | |
4197 LDBC1 PULS B,PC ; restore and return | |
4198 | |
4199 ; | |
4200 ; Wait command dispatch routine. | |
4201 ; | |
4202 ; Syntax : | |
4203 ; WAIT miliseconds | |
4204 ; | |
4205 | |
4206 CmdWait | |
4207 BEQ LDBD6 | |
4208 JSR >$8E83 | |
4209 LDX <$52 | |
4210 LDBCA JSR >$851B | |
4211 LDB #$A0 | |
4212 LDBCF DECB | |
4213 BNE LDBCF | |
4214 LEAX -1,X | |
4215 BNE LDBCA | |
4216 LDBD6 RTS | |
4217 | |
4218 ; | |
4219 ; Swap command dispatch routine. | |
4220 ; | |
4221 ; Syntax : | |
4222 ; SWAP var1,var2 | |
4223 ; | |
4224 | |
4225 CmdSwap | |
4226 JSR >$8A94 | |
4227 LDX <$39 | |
4228 LDA <$06 | |
4229 PSHS A,X | |
4230 JSR >$89AA | |
4231 JSR >$8A94 | |
4232 PULS A,Y | |
4233 CMPA <$06 | |
4234 LBNE $8882 | |
4235 LDU <$39 | |
4236 LDX #$0005 | |
4237 LDBF3 LDA ,U | |
4238 LDB ,Y | |
4239 STB ,U+ | |
4240 STA ,Y+ | |
4241 LEAX -1,X | |
4242 BNE LDBF3 | |
4243 RTS | |
4244 | |
4245 LDC00 LDB #$8E | |
4246 LDC02 TST <$71 | |
4247 NOP | |
4248 LBRA DosHookSysError | |
4249 | |
4250 LDC08 LDA #$55 | |
4251 STA <$71 | |
4252 RTS | |
4253 | |
4254 ; | |
4255 ; If assembling for the DragonDos cartrage, this is the dispatch for | |
4256 ; the boot command, if assembling for the dragon Alpha, I have used | |
4257 ; the space occupied by the boot command to store the code used to | |
4258 ; activate the Alpha's drive selects and motor on, this is reasonable | |
4259 ; because the Alpha has a graphical boot menu, which allows it to boot | |
4260 ; from disk, so this routine seemed expendable. | |
4261 ; | |
4262 | |
4263 ifne DragonAlpha | |
4264 | |
4265 ; Translate DragonDos Drive select mechinisim to work on Alpha | |
4266 ; Takes byte that would be output to $FF48, reformats it and | |
4267 ; outputs to Alpha AY-8912's IO port, which is connected to | |
4268 ; Drive selects, motor on and enable precomp. | |
4269 ; We do not need to preserve the ROM select bit as this code | |
4270 ; operates in RAM only mode. | |
4271 | |
4272 | |
4273 AlphaDskCtl | |
4274 PSHS x,A,B,CC,DP | |
4275 | |
4276 pshs a ; Convert drives | |
4277 anda #%00000011 ; mask out drive number | |
4278 leax ADriveTab,pcr ; point at table | |
4279 lda a,x ; get bitmap | |
4280 ldb ,s | |
4281 andb #%11111100 ; mask out drive number | |
4282 stb ,s | |
4283 ora ,s ; recombine | |
4284 | |
4285 bita #MotorOn ; test motor on ? | |
4286 bne MotorRunning | |
4287 | |
4288 clra ; No, turn off other bits. | |
4289 MotorRunning | |
4290 anda #KnownBits ; Mask out bits we do not know the function of | |
4291 sta ,s | |
4292 | |
4293 lda #AYIOREG ; AY-8912 IO register | |
4294 sta PIA2DB ; Output to PIA | |
4295 ldb #AYREGLatch ; Latch register to modify | |
4296 stb PIA2DA | |
4297 | |
4298 clr PIA2DA ; Idle AY | |
4299 | |
4300 lda ,s+ ; Fetch saved Drive Selects | |
4301 sta PIA2DB ; output to PIA | |
4302 ldb #AYWriteReg ; Write value to latched register | |
4303 stb PIA2DA ; Set register | |
4304 | |
4305 clr PIA2DA ; Idle AY | |
4306 | |
4307 PULS dp,x,A,B,CC,pc | |
4308 | |
4309 else | |
4310 ; | |
4311 ; Boot command dispatch routine (DragonDos only). | |
4312 ; | |
4313 ; Syntax : | |
4314 ; BOOT drivenum | |
4315 ; | |
4316 | |
4317 CmdBoot | |
4318 BEQ LDC14 ; No drive supplied, use default | |
4319 JSR >GetDriveNoInB ; Get drive number | |
4320 BRA LDC17 | |
4321 | |
4322 LDC14 LDB DosDefDriveNo ; use default drive no | |
4323 LDC17 LDA #BootFirstSector; Read boot sector | |
4324 STA <DskSectorNo | |
4325 STB <LastActiveDrv ; Set drive number | |
4326 JSR >DosDoRestore ; Restore to track 0 | |
4327 BCS LDC02 ; Error : exit | |
4328 | |
4329 JSR >DosDoReadSec2 ; Read first 2 chars of boot sec | |
4330 BCS LDC02 ; error : exit | |
4331 | |
4332 LDD #BootSignature ; Boot signature found ? | |
4333 CMPD <$4F | |
4334 BNE LDC00 ; no : error | |
4335 | |
4336 LDD #BootLoadAddr ; start at boot load address | |
4337 STD <DiskBuffPtr ; Set disk buffer to point there | |
4338 LDC34 JSR >DosDoReadSec ; Read a sector | |
4339 BCS LDC02 ; Error : exit | |
4340 | |
4341 INC <DiskBuffPtr ; increment page of buffer pointer | |
4342 INC <DskSectorNo ; increment sector number | |
4343 LDA <DskSectorNo ; get sector number | |
4344 CMPA #BootLastSector ; Read the whole boot area ? | |
4345 BLS LDC34 ; no : read next sector | |
4346 | |
4347 JMP >BootEntryAddr ; jump to loaded boot code | |
4348 | |
4349 endc | |
4350 | |
4351 org $DC46 | |
4352 | |
4353 ; | |
4354 ;Drive command dispatch routine. | |
4355 ; | |
4356 ; Syntax : | |
4357 ; DRIVE drivenum | |
4358 ; | |
4359 | |
4360 CmdDrive | |
4361 BEQ LDC4F | |
4362 JSR >GetDriveNoInB | |
4363 STB $060A | |
4364 RTS | |
4365 | |
4366 LDC4F JMP >BasSNError | |
4367 | |
4368 ; | |
4369 ; Error command dispatch routine. | |
4370 ; | |
4371 ; Syntax : | |
4372 ; ERROR GOTO lineno | |
4373 ; | |
4374 | |
4375 CmdError2 | |
4376 CMPA #$81 | |
4377 BNE LDC4F | |
4378 JSR <$9F | |
4379 CMPA #$BC | |
4380 BNE LDC4F | |
4381 JSR <$9F | |
4382 JSR >$869A | |
4383 LDX <$2B | |
4384 CMPX #$F9FF | |
4385 LBHI BasFCError | |
4386 STX $0615 | |
4387 BEQ LDC75 | |
4388 LDA #$FF | |
4389 STA $0614 | |
4390 RTS | |
4391 | |
4392 LDC75 CLR $0614 | |
4393 RTS | |
4394 | |
4395 LDC79 JSR >$89AA | |
4396 JSR >$8A94 | |
4397 JMP >$8877 | |
4398 | |
4399 ; | |
4400 ;Sread command dispatch routine. | |
4401 ; | |
4402 ; Syntax : | |
4403 ; SREAD driveno,trackno,secno,part1$,part2$ | |
4404 ; | |
4405 | |
4406 CmdSread | |
4407 JSR >LDD21 | |
4408 BSR LDC79 | |
4409 PSHS X | |
4410 BSR LDC79 | |
4411 PSHS X | |
4412 LDB #$FF | |
4413 STB <$F6 | |
4414 JSR >LD2A2 | |
4415 BNE LDCBA | |
4416 CLR 2,X | |
4417 LDX 5,X | |
4418 STX <$EE | |
4419 JSR >DosDoReadSec | |
4420 STB $0603 | |
4421 LDU <$EE | |
4422 LEAU $0080,U | |
4423 PULS X | |
4424 BSR LDCBD | |
4425 LDU <$EE | |
4426 PULS X | |
4427 BSR LDCBD | |
4428 CLR <$F6 | |
4429 LDB $0603 | |
4430 BNE LDCBA | |
4431 RTS | |
4432 | |
4433 LDCBA JMP >DosHookSysError | |
4434 | |
4435 LDCBD PSHS X,U | |
4436 LDB #$80 | |
4437 JSR >$8C52 | |
4438 LEAU ,X | |
4439 PULS X | |
4440 STB ,X | |
4441 STU 2,X | |
4442 PULS X | |
4443 JMP >UtilCopyBXtoU | |
4444 | |
4445 ; | |
4446 ; Swrite command dispatch routine. | |
4447 ; | |
4448 ; Syntax : | |
4449 ; SWRITE driveno,side,sector,part1$,part2$ | |
4450 ; | |
4451 | |
4452 CmdSwrite | |
4453 BSR LDD21 | |
4454 BSR LDD1B | |
4455 JSR >$8877 | |
4456 LDX <$52 | |
4457 PSHS X | |
4458 BSR LDD1B | |
4459 JSR >$8D9A | |
4460 PSHS B,X | |
4461 LDB #$FF | |
4462 STB <$F6 | |
4463 JSR >LD2A2 | |
4464 BNE LDCBA | |
4465 CLR 2,X | |
4466 LDX 5,X | |
4467 STX <$EE | |
4468 CLRB | |
4469 LDCF3 CLR ,X+ | |
4470 DECB | |
4471 BNE LDCF3 | |
4472 PULS B,X | |
4473 LDU <$EE | |
4474 LEAU $0080,U | |
4475 TSTB | |
4476 BEQ LDD06 | |
4477 JSR >UtilCopyBXtoU | |
4478 LDD06 PULS X | |
4479 JSR >$8D9F | |
4480 LDU <$EE | |
4481 TSTB | |
4482 BEQ LDD13 | |
4483 JSR UtilCopyBXtoU | |
4484 LDD13 JSR >DosDoWriteSec | |
4485 BCS LDCBA | |
4486 CLR <$F6 | |
4487 RTS | |
4488 | |
4489 LDD1B JSR $89AA | |
4490 JMP >$8887 | |
4491 | |
4492 LDD21 BNE LDD26 | |
4493 JMP >BasSNError | |
4494 | |
4495 LDD26 JSR GetDriveNoInB | |
4496 STB <$EB | |
4497 JSR $8E7E | |
4498 CMPB #$4F | |
4499 BHI LDD3A | |
4500 STB <$EC | |
4501 JSR $8E7E | |
4502 STB <$ED | |
4503 LDD39 RTS | |
4504 | |
4505 LDD3A JMP >BasFCError | |
4506 | |
4507 ; | |
4508 ; Verify command dispatch routine. | |
4509 ; | |
4510 ; Syntax : | |
4511 ; VERIFY ON | |
4512 ; VERIFY OFF | |
4513 ; | |
4514 | |
4515 CmdVerify | |
4516 BEQ LDD4D | |
4517 CMPA #$C2 | |
4518 BNE LDD46 | |
4519 CLRB | |
4520 BRA LDD4F | |
4521 | |
4522 LDD46 CMPA #$88 | |
4523 BEQ LDD4D | |
4524 JMP >BasSNError | |
4525 | |
4526 LDD4D LDB #$FF | |
4527 LDD4F STB $0608 | |
4528 JMP <$9F | |
4529 | |
4530 DosHookEOF TST <$06 | |
4531 BEQ LDD39 | |
4532 CLR <$06 | |
4533 LEAS 2,S | |
4534 LDY #DosExtDat | |
4535 JSR LD6DF | |
4536 BNE LDD7E | |
4537 JSR SuperDosGetFLen | |
4538 BNE LDD7E | |
4539 JSR DosFCBNoToAddr | |
4540 CMPU 12,X | |
4541 BHI LDD76 | |
4542 CMPA 14,X | |
4543 BLS LDD78 | |
4544 LDD76 CLRA | |
4545 LDD78 EQU *+1 | |
4546 CMPX #$8601 | |
4547 LDU <Zero16Bit | |
4548 BRA LDD99 | |
4549 | |
4550 LDD7E JMP >DosHookSysError | |
4551 | |
4552 FuncLoc | |
4553 JSR LD6C5 | |
4554 BNE LDD7E | |
4555 JSR DosFCBNoToAddr | |
4556 LDU 12,X | |
4557 LDA 14,X | |
4558 BRA LDD99 | |
4559 | |
4560 FuncLof | |
4561 JSR LD6C5 | |
4562 BNE LDD7E | |
4563 JSR SuperDosGetFLen | |
4564 BNE LDD7E | |
4565 LDD99 CLR <$06 | |
4566 LDD9B CLRB | |
4567 STU <$51 | |
4568 STD <$53 | |
4569 CLR <$63 | |
4570 LDA #$A0 | |
4571 STD <$4F | |
4572 JMP >$9165 | |
4573 | |
4574 FuncFree | |
4575 JSR <$A5 | |
4576 BEQ LDDB2 | |
4577 JSR GetDriveNoInB | |
4578 BRA LDDB5 | |
4579 | |
4580 LDDB2 LDB $060A | |
4581 LDDB5 STB <$EB | |
4582 JSR SuperDosGetFree | |
4583 BNE LDD7E | |
4584 TFR X,U | |
4585 CLRA | |
4586 BRA LDD99 | |
4587 | |
4588 FuncErl | |
4589 LDD $0617 | |
4590 LDDC4 JMP >$8C37 | |
4591 | |
4592 FuncErr | |
4593 CLRA | |
4594 LDB $0619 | |
4595 BRA LDDC4 | |
4596 | |
4597 FuncHimem | |
4598 LDD <$27 | |
4599 BRA LDDC4 | |
4600 | |
4601 FuncFres | |
4602 JSR $8CD7 | |
4603 LDD <$23 | |
4604 SUBD <$21 | |
4605 BRA LDDC4 | |
4606 | |
4607 ; | |
4608 ; The actual core disk IO routine, accepts a function code $00..$07 | |
4609 ; these are dispatched through this table | |
4610 ; | |
4611 | |
4612 DosFunctionTable | |
4613 FDB DosFunctionRestore ; Restore to track 0 | |
4614 FDB DosFunctionSeek ; Seek to a track | |
4615 FDB DosFunctionReadSec ; Read a sector | |
4616 FDB DosFunctionWriteSec ; Write a sector | |
4617 FDB DosFunctionWriteSec2 | |
4618 FDB DosFunctionWriteTrack ; Write (format) track | |
4619 FDB DosFunctionReadAddr ; Read address mark | |
4620 FDB DosFunctionReadSec2 ; Read first two bytes of a sector | |
4621 | |
4622 ; | |
4623 ; Data table for Format ? | |
4624 ; | |
4625 | |
4626 DDDEA FCB $01 | |
4627 FCB $0A | |
4628 FCB $02 | |
4629 FCB $0B | |
4630 FCB $03 | |
4631 FCB $0C | |
4632 FCB $04 | |
4633 FCB $0D | |
4634 FCB $05 | |
4635 FCB $0E | |
4636 FCB $06 | |
4637 FCB $0F | |
4638 FCB $07 | |
4639 FCB $10 | |
4640 FCB $08 | |
4641 FCB $11 | |
4642 FCB $09 | |
4643 FCB $12 | |
4644 FCB $00 | |
4645 DDDFD FCC /5NN/ | |
4646 FCB $08 | |
4647 FCB $00 | |
4648 FCB $00 | |
4649 FCB $03 | |
4650 FCB $F6 | |
4651 FCB $FC | |
4652 FCB $1F | |
4653 FCB $4E | |
4654 FCB $4E | |
4655 DDE09 FCB $07 | |
4656 FCB $00 | |
4657 FCB $00 | |
4658 FCB $03 | |
4659 FCB $F5 | |
4660 FCB $FE | |
4661 FCB $01 | |
4662 FCB $F7 | |
4663 FCB $4E | |
4664 FCB $14 | |
4665 FCB $4E | |
4666 FCB $4E | |
4667 FCB $0B | |
4668 FCB $00 | |
4669 FCB $00 | |
4670 FCB $03 | |
4671 FCB $F5 | |
4672 FCB $FB | |
4673 FCB $00 | |
4674 FCB $E5 | |
4675 FCB $F7 | |
4676 FCB $17 | |
4677 FCB $4E | |
4678 FCB $4E | |
4679 FCB $00 | |
4680 FCB $4E | |
4681 FCB $4E | |
4682 | |
4683 ; | |
4684 ; Data copied into low ram at init, inturrupt vectors etc | |
4685 ; | |
4686 | |
4687 DDE24 FCB $09 ; No bytes | |
4688 FDB $0109 ; address to copy | |
4689 | |
4690 ; Inturrupt vectors | |
4691 | |
4692 LDE27 JMP >NMISrv | |
4693 | |
4694 LDE2A JMP >IRQSrv | |
4695 | |
4696 LDE2D JMP >FIRQSrv | |
4697 | |
4698 ; Dos vars, step rates for drives ? | |
4699 | |
4700 FCB $04 ; No bytes | |
4701 FDB $069F ; address to copy | |
4702 FCB $02 | |
4703 FCB $02 | |
4704 FCB $02 | |
4705 FCB $02 | |
4706 | |
4707 ; New basic dispatch stub | |
4708 | |
4709 FCB $1E ; No bytes | |
4710 FDB $012A ; address to copy | |
4711 FCB $1A | |
4712 FDB DDEDA | |
4713 FDB LC670 | |
4714 FCB $07 | |
4715 FDB DDEC1 | |
4716 FDB LC68B | |
4717 FCB $00 | |
4718 FDB $0000 | |
4719 FDB BasSNError | |
4720 FCB $00 | |
4721 FDB $0000 | |
4722 FDB BasSNError | |
4723 FCB $00 | |
4724 FCB $00 | |
4725 FCB $00 | |
4726 FCB $00 | |
4727 FCB $00 | |
4728 FCB $00 | |
4729 FCB $00 | |
4730 FCB $00 | |
4731 FCB $00 | |
4732 | |
4733 FCB $00 ; No bytes : terminate | |
4734 FCB $00 | |
4735 | |
4736 CommandDispatchTable | |
4737 FDB CmdAuto ; Commented | |
4738 FDB CmdBackup | |
4739 FDB CmdBeep | |
4740 | |
4741 ifne DragonAlpha | |
4742 FDB BasSNError ; If assembling for Alpha, just redirect to ?SN error | |
4743 else | |
4744 FDB CmdBoot ; Else, if dragondos, boot command | |
4745 endc | |
4746 | |
4747 FDB CmdChain | |
4748 FDB CmdCopy | |
4749 FDB CmdCreate | |
4750 FDB CmdDir | |
4751 FDB CmdDrive | |
4752 FDB CmdDskInit | |
4753 FDB CmdFRead | |
4754 FDB CmdFWrite | |
4755 FDB CmdError2 | |
4756 FDB CmdKill | |
4757 FDB CmdLoad | |
4758 FDB CmdMerge | |
4759 FDB CmdProtect | |
4760 FDB CmdWait | |
4761 FDB CmdRename | |
4762 FDB CmdSave | |
4763 FDB CmdSread | |
4764 FDB CmdSwrite | |
4765 FDB CmdVerify | |
4766 FDB BasSNError | |
4767 FDB CmdFLRead | |
4768 FDB CmdSwap | |
4769 | |
4770 FunctionDipatchTable | |
4771 FDB FuncLof | |
4772 FDB FuncFree | |
4773 FDB FuncErl | |
4774 FDB FuncErr | |
4775 FDB FuncHimem | |
4776 FDB FuncLoc | |
4777 FDB FuncFres | |
4778 | |
4779 ; | |
4780 ; New ram hook table copied into low ram | |
4781 ; | |
4782 | |
4783 RamHookTable | |
4784 FDB DosHookOpenDev ; open dev/file | |
4785 FDB DosHookCheckIONum ; check io num | |
4786 FDB DosHookRetDevParam ; return dev parameters | |
4787 FDB DosHookCharOut ; char output | |
4788 FDB DosHookRetDevParam ; char input | |
4789 FDB DosHookRetDevParam ; check dev open for input | |
4790 FDB DosHookRetDevParam ; check dev open for output | |
4791 FDB DosHookRetDevParam ; close all devs and files | |
4792 FDB DosHookCloseSingle ; close single dev/file | |
4793 FDB DosHookRetDevParam ; first char of new statement | |
4794 FDB DosHookDiskItem ; Disk file item scanner | |
4795 FDB DosHookRetDevParam ; poll for break | |
4796 FDB DosHookReadInput ; read line of input | |
4797 FDB DosHookRetDevParam ; finish loading ASCII program | |
4798 FDB DosHookEOF ; EOF function | |
4799 FDB DosHookRetDevParam ; Eval expression | |
4800 FDB DosHookRetDevParam ; User error trap | |
4801 FDB DosHookSysError ; System error trap | |
4802 FDB DosHookRun ; run statement | |
4803 | |
4804 DDEC1 FCC /LO/ | |
4805 FCB $C6 | |
4806 FCC /FRE/ | |
4807 FCB $C5 | |
4808 FCC /ER/ | |
4809 FCB $CC | |
4810 FCC /ER/ | |
4811 FCB $D2 | |
4812 FCC /HIME/ | |
4813 FCB $CD | |
4814 FCC /LO/ | |
4815 FCB $C3 | |
4816 FCC /FRE/ | |
4817 FCB $A4 | |
4818 DDEDA FCC /AUT/ | |
4819 FCB $CF | |
4820 FCC /BACKU/ | |
4821 FCB $D0 | |
4822 FCC /BEE/ | |
4823 FCB $D0 | |
4824 FCC /BOO/ | |
4825 FCB $D4 | |
4826 FCC /CHAI/ | |
4827 FCB $CE | |
4828 FCC /COP/ | |
4829 FCB $D9 | |
4830 FCC /CREAT/ | |
4831 FCB $C5 | |
4832 FCC /DI/ | |
4833 FCB $D2 | |
4834 FCC /DRIV/ | |
4835 FCB $C5 | |
4836 FCC /DSKINI/ | |
4837 FCB $D4 | |
4838 FCC /FREA/ | |
4839 FCB $C4 | |
4840 FCC /FWRIT/ | |
4841 FCB $C5 | |
4842 FCC /ERRO/ | |
4843 FCB $D2 | |
4844 FCC /KIL/ | |
4845 FCB $CC | |
4846 FCC /LOA/ | |
4847 FCB $C4 | |
4848 FCC /MERG/ | |
4849 FCB $C5 | |
4850 DDF2A EQU *+3 | |
4851 FCC /PROTEC/ | |
4852 FCB $D4 | |
4853 FCC /WAI/ | |
4854 FCB $D4 | |
4855 FCC /RENAM/ | |
4856 FCB $C5 | |
4857 FCC /SAV/ | |
4858 FCB $C5 | |
4859 FCC /SREA/ | |
4860 FCB $C4 | |
4861 FCC /SWRIT/ | |
4862 FCB $C5 | |
4863 FCC /VERIF/ | |
4864 FCB $D9 | |
4865 FCC /FRO/ | |
4866 FCB $CD | |
4867 FCC /FLREA/ | |
4868 FCB $C4 | |
4869 FCC /SWA/ | |
4870 FCB $D0 | |
4871 FCC /INSERT SOURCE / | |
4872 FCB $0D | |
4873 FCB $00 | |
4874 FCC /INSERT DESTINATION / | |
4875 FCB $0D | |
4876 MessPressAnyKey | |
4877 FCB $00 | |
4878 FCC /PRESS ANY KEY / | |
4879 FCB $0D | |
4880 FCB $00 | |
4881 DosExtBas | |
4882 FCC /BAS/ | |
4883 DosExtDat | |
4884 FCC /DAT/ | |
4885 DosExtBin | |
4886 FCC /BIN/ | |
4887 | |
4888 DosErrorCodeTable | |
4889 FCC / NRSKWPRTRFCCLDBTIVFDDFFSPTPEF/ | |
4890 FCC /FFENETFPR?/ | |
4891 | |
4892 DosSignonMess | |
4893 ifne DragonAlpha | |
4894 FCC /?SUPERDOS E7a/ | |
4895 else | |
4896 FCC /?SUPERDOS E6 / | |
4897 endc | |
4898 | |
4899 FCB $0D | |
4900 FCB $00 | |
4901 DDFE0 FCB $00 | |
4902 FCC / MORE:/ | |
4903 FCB $00 | |
4904 FCB $00 | |
4905 | |
4906 ifne DragonAlpha | |
4907 FCC / / | |
4908 ADriveTab | |
4909 FCB Drive0,Drive1,Drive2,Drive3 | |
4910 else | |
4911 FCC / / | |
4912 endc | |
4913 | |
4914 LDFF3 LDA 2,X | |
4915 DECA | |
4916 BNE LDFFA | |
4917 STA 2,X | |
4918 LDFFA LDX $066F | |
4919 RTS | |
4920 | |
4921 FCB $61 | |
4922 FCB $34 | |
4923 | |
4924 ;DE000 END |