[Copyright 1999,2002 Frank Durda IV, All Rights Reserved. Mirroring of any material on this page in any form is expressly prohibited. The official web site for this material is: http://nemesis.lonestar.org Contact this address for use clearances: clearance at nemesis.lonestar.org Comments and queries to this address: web_software_2011 at nemesis.lonestar.org]
MISOSYS EDAS-4.3 04/19/99 21:39:56 DISKCOPY Page 00001 00001 ;DCOPY - Diskcopy for version 6.3 00002 ; 00003 ; 01/07/87 - Corrected source to include patch #001 00005 ; 000D 00006 CR EQU 13 000A 00007 LF EQU 10 0003 00008 ETX EQU 3 0080 00009 BRK EQU 80H 0000 00010 *GET BUILDVER/ASM:3 ;<631> 00011 ; 00012 ; Buildver/asm is a bit of a kludge since not all utilities can load 00013 ; equates from LDOS60 and still compile. LOWCORE and everybody else 00014 ; relies on this setting, and it eventually ends up in LDOS60/EQU 00015 ; for programs that can use that. 00016 ; FFFF 00017 @BLD631 EQU -1 ;<631>Build 631 distribution (LEVEL 1B) 00018 ; These switches activate patches made since the 1B release. 00019 ; It is important that all earlier patches be enabled when a higher 00020 ; patch is enabled. 00021 ; Patches C thru F were published in TMQ IV.iv, page 32 (NOTE: the 00022 ; patch addresses listed for SPOOL in SPOOL1/FIX are 19H high.) FFFF 00023 @BLD631C EQU -1 ;<631>Apply 1C patches (SETKI) FFFF 00024 @BLD631D EQU -1 ;<631>Apply 1D patches (DIR) FFFF 00025 @BLD631E EQU -1 ;<631>Apply 1E patches (DIR & MEMDISK/DCT) FFFF 00026 @BLD631F EQU -1 ;<631>Apply 1F patches (SPOOL) 00027 ; Patches G and H were published in TMQ V.i, pages 10 and 18/19. FFFF 00028 @BLD631G EQU -1 ;<631>Apply 1G patches (//KEYIN,DIR,DO *) FFFF 00029 @BLD631H EQU -1 ;<631>Apply 1H patches (MEMORY) 00030 ; 00031 ;End of BUILDVER/ASM 0000 00032 *GET SVCMAC 00033 ;SVCMAC/ASM - LS-DOS Version VI 00034 *LIST OFF 00426 *LIST ON 00428 ; 2600 00429 ORG 2600H 00430 ; 2600 213128 00431 DSTERR: LD HL,DSTERR$ 2603 DD 00432 DB 0DDH 2604 214A28 00433 SRCERR: LD HL,SRCERR$ 2607 F5 00434 PUSH AF 2608 00435 @@LOGOT 00436 IFEQ 00H,1 00437 LD HL, 00438 ENDIF 2608+3E0C 00439 LD A,12 260A+EF 00440 RST 40 260B F1 00441 POP AF 00442 ; 260C F6C0 00443 IOERR: OR 0C0H ;Short error 260E F5 00444 PUSH AF 260F CD052B 00445 CALL SYSTEM ;Get a system disk in 2612 F1 00446 POP AF 2613 4F 00447 LD C,A 2614 2600 00448 LD H,0 2616 6F 00449 LD L,A 2617 00450 @@ERROR 2617+3E1A 00451 LD A,26 2619+EF 00452 RST 40 261A ED7B2926 00453 LD SP,(SAVSTK) 261E 180E 00454 JR EXIT2 2620 21FFFF 00455 ABORT: LD HL,-1 2623 1803 00456 JR EXIT1 2625 210000 00457 EXIT: LD HL,0 2628 310000 00458 EXIT1 LD SP,$-$ 2629 00459 SAVSTK EQU $-2 262B CD052B 00460 CALL SYSTEM ;Get a system disk 262E 00461 EXIT2: @@CKBRKC 262E+3E6A 00462 LD A,106 2630+EF 00463 RST 40 2631 C9 00464 RET 00465 ; 2632 21ED26 00466 NOMEM: LD HL,NOMEM$ ;"Out of memory 2635 DD 00467 DB 0DDH 2636 210B27 00468 NOTCMD: LD HL,NOTCMD$ ;"Not while doing cmndr... 2639 DD 00469 DB 0DDH 263A 212C27 00470 DRVMIS LD HL,DRVMIS$ ;"Missing drive number... 263D DD 00471 DB 0DDH 263E 214427 00472 DUPDRV LD HL,DUPDRV$ ;"Dest=Source... 2641 DD 00473 DB 0DDH 2642 216227 00474 NOTIN LD HL,NOTIN$ 2645 00475 @@LOGOT 00476 IFEQ 00H,1 00477 LD HL, 00478 ENDIF 2645+3E0C 00479 LD A,12 2647+EF 00480 RST 40 2648 21FFFF 00481 LD HL,-1 264B ED7B2926 00482 LD SP,(SAVSTK) 264F 18DD 00483 JR EXIT2 00484 ; 2651 218727 00485 ILLEG: LD HL,ILLEG$ ;"Illegal drive type... 2654 DD 00486 DB 0DDH 2655 21C027 00487 DRVERR: LD HL,DRVERR$ ;"Drive not ready... 2658 DD 00488 DB 0DDH 2659 21D027 00489 WPERR: LD HL,WPERR$ ;"Dest is WP... 265C DD 00490 DB 0DDH 265D 217427 00491 ABORT1: LD HL,ABORT$ 2660 00492 @@LOGOT 00493 IFEQ 00H,1 00494 LD HL, 00495 ENDIF 2660+3E0C 00496 LD A,12 2662+EF 00497 RST 40 2663 18BB 00498 JR ABORT 00499 ; 00500 ; 2665 44 00501 SIGNON$ DB 'DISKCOPY ' 49 53 4B 43 4F 50 59 20 266E 00502 *GET CLIENT:3 00503 ;CLIENT/ASM - File to establish sign-on headers 00504 ; and version numbers. 00505 ; 00506 ; EACH STRING SHOULD CONTAIN ONLY 63 CHARACTERS !! 00507 ; 00508 IF @BLD631 00509 ; 12345678901234567890123456789012345678901234567890 266E 20 00510 DB ' - 6.3.1 - Copyright 1982/83/84/86/90 by MISOSYS, ';<631> 2D 20 36 2E 33 2E 31 20 2D 20 43 6F 70 79 72 69 67 68 74 20 31 39 38 32 2F 38 33 2F 38 34 2F 38 36 2F 39 30 20 62 79 20 4D 49 53 4F 53 59 53 2C 20 26A0 49 00511 DB 'Inc., ',10 ;<631> 6E 63 2E 2C 20 20 20 20 20 20 20 0A 00512 ELSE 00513 DB ' - 6.3.0 - Copyright 1982/83/84/86 by Logical Syst' 00514 DB 'ems, Inc. ',10 00515 ENDIF 00516 ; 00517 ; DB 'All Rights Reserved. Licensed 1982/83/84 to Tandy ' 00518 ; DB 'Corporation.',10,13 00519 ; 00520 ; DB 'All Rights Reserved. Beta-TEST Level/AD, DO NOT DI' 00521 ; DB 'STRIBUTE !! ',10,13 00522 ; DB 'All Rights reserved by LSI, 8970 N. 55th St. Milwa' 00523 ; DB 'ukee, Wisc. ',10,13 26AD 41 00524 DB 'All Rights Reserved. Unauthorized duplication is p' 6C 6C 20 52 69 67 68 74 73 20 52 65 73 65 72 76 65 64 2E 20 55 6E 61 75 74 68 6F 72 69 7A 65 64 20 64 75 70 6C 69 63 61 74 69 6F 6E 20 69 73 20 70 26DF 72 00525 DB 'rohibited. ',10,13 6F 68 69 62 69 74 65 64 2E 20 20 0A 0D 00526 ; 26ED 4E 00527 NOMEM$ DB 'Not enough memory to Diskcopy',CR 6F 74 20 65 6E 6F 75 67 68 20 6D 65 6D 6F 72 79 20 74 6F 20 44 69 73 6B 63 6F 70 79 0D 270B 44 00528 NOTCMD$ DB 'Diskcopy only valid at DOS level',CR 69 73 6B 63 6F 70 79 20 6F 6E 6C 79 20 76 61 6C 69 64 20 61 74 20 44 4F 53 20 6C 65 76 65 6C 0D 272C 4D 00529 DRVMIS$ DB 'Missing drive number(s)',CR 69 73 73 69 6E 67 20 64 72 69 76 65 20 6E 75 6D 62 65 72 28 73 29 0D 2744 53 00530 DUPDRV$ DB 'Single drive Diskcopy invalid',CR 69 6E 67 6C 65 20 64 72 69 76 65 20 44 69 73 6B 63 6F 70 79 20 69 6E 76 61 6C 69 64 0D 2762 44 00531 NOTIN$ DB 'Drive not enabled',CR 72 69 76 65 20 6E 6F 74 20 65 6E 61 62 6C 65 64 0D 2774 0A 00532 ABORT$ DB LF,LF,'Diskcopy aborted',CR 0A 44 69 73 6B 63 6F 70 79 20 61 62 6F 72 74 65 64 0D 2787 44 00533 ILLEG$ DB 'Diskcopy is for 5 inch, double density floppy disks only',CR 69 73 6B 63 6F 70 79 20 69 73 20 66 6F 72 20 35 20 69 6E 63 68 2C 20 64 6F 75 62 6C 65 20 64 65 6E 73 69 74 79 20 66 6C 6F 70 70 79 20 64 69 73 6B 73 20 6F 6E 6C 79 0D 27C0 44 00534 DRVERR$ DB 'Drive not ready',CR 72 69 76 65 20 6E 6F 74 20 72 65 61 64 79 0D 27D0 44 00535 WPERR$ DB 'Destination drive is write protected',CR 65 73 74 69 6E 61 74 69 6F 6E 20 64 72 69 76 65 20 69 73 20 77 72 69 74 65 20 70 72 6F 74 65 63 74 65 64 0D 27F5 4D 00536 MOUNT$ DB 'Mount source and destination disks, press' 6F 75 6E 74 20 73 6F 75 72 63 65 20 61 6E 64 20 64 65 73 74 69 6E 61 74 69 6F 6E 20 64 69 73 6B 73 2C 20 70 72 65 73 73 281E 20 00537 DB ' ENTER when ready ',CR 45 4E 54 45 52 20 77 68 65 6E 20 72 65 61 64 79 20 0D 2831 0A 00538 DSTERR$ DB LF,LF,'Destination disk error',CR 0A 44 65 73 74 69 6E 61 74 69 6F 6E 20 64 69 73 6B 20 65 72 72 6F 72 0D 284A 0A 00539 SRCERR$ DB LF,LF,'Source disk error',CR 0A 53 6F 75 72 63 65 20 64 69 73 6B 20 65 72 72 6F 72 0D 285E 0A 00540 DONE$ DB LF,LF,'Disk copy complete, copy another (Y/N) ? ',LF,CR 0A 44 69 73 6B 20 63 6F 70 79 20 63 6F 6D 70 6C 65 74 65 2C 20 63 6F 70 79 20 61 6E 6F 74 68 65 72 20 28 59 2F 4E 29 20 3F 20 0A 0D 288B 0A 00541 SYSTEM$ DB LF,'Mount SYSTEM disk, press ENTER when ready ',CR 4D 6F 75 6E 74 20 53 59 53 54 45 4D 20 64 69 73 6B 2C 20 70 72 65 73 73 20 45 4E 54 45 52 20 77 68 65 6E 20 72 65 61 64 79 20 0D 00542 ; 00543 ; 28B7 00544 BEGIN: @@CKBRKC ;No break down 28B7+3E6A 00545 LD A,106 28B9+EF 00546 RST 40 28BA 2804 00547 JR Z,BEGINA 28BC 21FFFF 00548 LD HL,-1 28BF C9 00549 RET 28C0 ED732926 00550 BEGINA: LD (SAVSTK),SP ;Save entry stack 28C4 E5 00551 PUSH HL 28C5 216526 00552 LD HL,SIGNON$ 28C8 00553 @@DSPLY 00554 IFEQ 00H,1 00555 LD HL, 00556 ENDIF 28C8+3E0A 00557 LD A,10 28CA+EF 00558 RST 40 28CB 00559 @@FLAGS ;Get the flag table 28CB+3E65 00560 LD A,101 28CD+EF 00561 RST 40 28CE FD7E02 00562 LD A,(IY+'C'-'A') ;Get C flag 28D1 CB4F 00563 BIT 1,A ;CMNDR? 28D3 C23626 00564 JP NZ,NOTCMD ;Go if it is 28D6 210000 00565 LD HL,0 ;Get high$ 00566 IF @BLD631 28D9 45 00567 LD B,L ;<631>L==0 00568 ELSE 00569 LD B,0 00570 ENDIF 28DA 00571 @@HIGH$ 28DA+3E64 00572 LD A,100 28DC+EF 00573 RST 40 28DD 11007F 00574 LD DE,ENDLOC ;Get mem needed 28E0 B7 00575 OR A 28E1 ED52 00576 SBC HL,DE ;See if enuf 00577 IF @BLD631 28E3 E1 00578 POP HL ;<631>Cmdline ptr 28E4 DA3226 00579 JP C,NOMEM ;<631> 00580 ELSE 00581 JP C,NOMEM 00582 POP HL ;Cmdline ptr 00583 ENDIF 28E7 CD962A 00584 CALL SKPSPC 28EA FE3A 00585 CP ':' ;Got a drive spec? 28EC C23A26 00586 JP NZ,DRVMIS ;Bad if not 28EF 7E 00587 LD A,(HL) ;Get a drive # 28F0 23 00588 INC HL 28F1 D630 00589 SUB 30H ;Make binary and ck 00590 IF @BLD631 00591 ELSE 00592 JP C,DRVMIS ; range 00593 ENDIF 28F3 FE08 00594 CP 8 28F5 D23A26 00595 JP NC,DRVMIS 28F8 32B52A 00596 LD (SRCDRV),A ;Save drive # 28FB 4F 00597 LD C,A 28FC 00598 @@GTDCT 28FC+3E51 00599 LD A,81 28FE+EF 00600 RST 40 28FF FD7E00 00601 LD A,(IY) ;Be sure drive is enabled 2902 FEC9 00602 CP 0C9H 2904 CA4226 00603 JP Z,NOTIN 2907 CD962A 00604 CALL SKPSPC 290A FE3A 00605 CP ':' ;Now get 2nd # 290C C23A26 00606 JP NZ,DRVMIS 290F 7E 00607 LD A,(HL) ;Get drive # 2910 D630 00608 SUB 30H 00609 IF @BLD631 00610 ELSE 00611 JP C,DRVMIS 00612 ENDIF 2912 FE08 00613 CP 8 2914 D23A26 00614 JP NC,DRVMIS 2917 B9 00615 CP C ;Same as source? 2918 CA3E26 00616 JP Z,DUPDRV ;No can do 291B 32BD2A 00617 LD (DSTDRV),A 291E 4F 00618 LD C,A 291F 00619 @@GTDCT 291F+3E51 00620 LD A,81 2921+EF 00621 RST 40 2922 FD7E00 00622 LD A,(IY) 2925 FEC9 00623 CP 0C9H 2927 CA4226 00624 JP Z,NOTIN 292A CD992B 00625 CALL GETSYS2 ;Be sure ckdrv is resident 00626 ; 00627 ; Come here for next disk 00628 ; 292D CDA22A 00629 RESTRT: CALL MOUNT ;Have disks mounted 2930 3AB52A 00630 LD A,(SRCDRV) ;Now ck drive types 2933 4F 00631 LD C,A 2934 00632 @@GTDCT ;Get the DCT 2934+3E51 00633 LD A,81 2936+EF 00634 RST 40 2937 FD220F2D 00635 LD (SRCDCT),IY ;Save source 293B FD7E03 00636 LD A,(IY+3) ;Get dct byte 293E E668 00637 AND 01101000B ;Hard, 8" 2940 EE40 00638 XOR 40H ;Sden 2942 C25126 00639 JP NZ,ILLEG ;Was sden, 8", or hard 2945 FDCB0466 00640 BIT 4,(IY+4) ;Alien? 00641 IF @BLD631 2949 00 00642 NOP ;<631> 294A 00 00643 NOP ;<631> 294B 00 00644 NOP ;<631> 00645 ELSE 00646 JP NZ,ILLEG 00647 ENDIF 294C FDE5 00648 PUSH IY 294E FD7E09 00649 LD A,(IY+9) ;Read in source GAT 2951 57 00650 LD D,A 00651 IF @BLD631 2952 21002F 00652 LD HL,GATBUF ;<631> 2955 5D 00653 LD E,L ;<631>L==0 00654 ELSE 00655 LD E,0 00656 LD HL,GATBUF 00657 ENDIF 2956 00658 @@RDSSC 2956+3E55 00659 LD A,85 2958+EF 00660 RST 40 2959 C20C26 00661 JP NZ,IOERR 295C 3ABD2A 00662 LD A,(DSTDRV) 295F 4F 00663 LD C,A 2960 00664 @@GTDCT 2960+3E51 00665 LD A,81 2962+EF 00666 RST 40 2963 FD22112D 00667 LD (DSTDCT),IY ;Save dest dct 2967 FD7E03 00668 LD A,(IY+3) ;Save step and delay 296A E607 00669 AND 7 296C 47 00670 LD B,A ; in B 296D FD7E04 00671 LD A,(IY+4) ;Save select 2970 E60F 00672 AND 0FH 2972 4F 00673 LD C,A ; in C 2973 FDE5 00674 PUSH IY 2975 D1 00675 POP DE ;Pt DE to dct+3 2976 13 00676 INC DE 2977 13 00677 INC DE 2978 13 00678 INC DE 2979 E1 00679 POP HL ;Source DCT 297A 23 00680 INC HL 297B 23 00681 INC HL 297C 23 00682 INC HL 297D C5 00683 PUSH BC ;Save dest stuff 297E D5 00684 PUSH DE ;Save dst dct 297F 010700 00685 LD BC,7 2982 EDB0 00686 LDIR 2984 D1 00687 POP DE 2985 C1 00688 POP BC 2986 1A 00689 LD A,(DE) ;Merge in DST stuf 2987 E678 00690 AND 078H 2989 B0 00691 OR B 298A 12 00692 LD (DE),A 298B 13 00693 INC DE 298C 1A 00694 LD A,(DE) 00695 IF @BLD631 298D E660 00696 AND 060H ;<631> 00697 ELSE 00698 AND 070H 00699 ENDIF 298F B1 00700 OR C 2990 12 00701 LD (DE),A ;Now, dst matches src 2991 13 00702 INC DE 2992 AF 00703 XOR A ;Always track 0 2993 12 00704 LD (DE),A 00705 ; 00706 ; Set to start 00707 ; 2994 FD2A112D 00708 LD IY,(DSTDCT) 2998 CD9C2B 00709 CALL SETFMT ;Init the format info 299B D9 00710 EXX ;Init alts 299C 21002F 00711 LD HL,GATBUF ;Used info 299F 11602F 00712 LD DE,GATBUF+60H ;Lock out table 29A2 D9 00713 EXX 29A3 3A8E2C 00714 LD A,(SECCYL) 29A6 32DF29 00715 LD (RDCNT),A ;Set up sector count 29A9 320F2A 00716 LD (WRCNT),A 29AC 323F2A 00717 LD (VERCNT),A 29AF 0604 00718 LD B,4 ;Get cursor posn 29B1 00719 @@VDCTL 29B1+3E0F 00720 LD A,15 29B3+EF 00721 RST 40 29B4 22F62C 00722 LD (CURSOR),HL ;Save for dsply 00723 ; 29B7 CD1B2C 00724 MAINLP: CALL BGNFMT ;Format a cyl 29BA D9 00725 EXX ;Alts in 29BB 1A 00726 LD A,(DE) ;Ck for lockout on src 29BC 32132D 00727 LD (WASLOK),A ;Show was locked 29BF 13 00728 INC DE ;Next track 29C0 FEFF 00729 CP 0FFH ;If it is, then 29C2 2005 00730 JR NZ,NOLOCK 29C4 23 00731 INC HL ;Must skip this also 29C5 D9 00732 EXX 29C6 C32F2A 00733 JP DOVER ;Just verify 29C9 BE 00734 NOLOCK: CP (HL) ;See if in use 29CA 23 00735 INC HL 29CB D9 00736 EXX 29CC CA2F2A 00737 JP Z,DOVER ;Go if empty 00738 ; 00739 ; Not empty or locked, dupe it 00740 ; 29CF 21212D 00741 LD HL,RDCYL$ 29D2 CDF42C 00742 CALL MSGOUT 29D5 3AB52A 00743 LD A,(SRCDRV) 29D8 4F 00744 LD C,A ;Drive to C 29D9 FD5605 00745 LD D,(IY+5) ;Cyl to D 29DC 1E00 00746 LD E,0 29DE 0600 00747 LD B,$-$ 29DF 00748 RDCNT EQU $-1 29E0 210030 00749 LD HL,RDBUF ;Where to put it 29E3 FD7E09 00750 LD A,(IY+9) ;Ck for dir trk 29E6 BA 00751 CP D 29E7 280C 00752 JR Z,RDSYS ;Go if dir 29E9 00753 RDREG: @@RDSEC 29E9+3E31 00754 LD A,49 29EB+EF 00755 RST 40 29EC C20426 00756 JP NZ,SRCERR 29EF 24 00757 INC H 29F0 1C 00758 INC E 29F1 10F6 00759 DJNZ RDREG 29F3 180A 00760 JR RDDUN 29F5 00761 RDSYS: @@RDSSC 29F5+3E55 00762 LD A,85 29F7+EF 00763 RST 40 29F8 C20426 00764 JP NZ,SRCERR 29FB 24 00765 INC H 29FC 1C 00766 INC E 29FD 10F6 00767 DJNZ RDSYS 00768 ; 29FF 212E2D 00769 RDDUN: LD HL,WRCYL$ 2A02 CDF42C 00770 CALL MSGOUT 2A05 3ABD2A 00771 LD A,(DSTDRV) 2A08 4F 00772 LD C,A ;Drive to C 2A09 FD5605 00773 LD D,(IY+5) ;Cyl 2A0C 1E00 00774 LD E,0 2A0E 0600 00775 LD B,$-$ ;Sector count 2A0F 00776 WRCNT EQU $-1 2A10 210030 00777 LD HL,RDBUF ;Pt to data 2A13 FD7E09 00778 LD A,(IY+9) ;See if dir. 2A16 BA 00779 CP D 2A17 280C 00780 JR Z,WRDIR ;Go if it is 2A19 00781 WRREG: @@WRSEC 2A19+3E35 00782 LD A,53 2A1B+EF 00783 RST 40 2A1C C20026 00784 JP NZ,DSTERR 2A1F 24 00785 INC H 2A20 1C 00786 INC E 2A21 10F6 00787 DJNZ WRREG 2A23 180A 00788 JR DOVER 2A25 00789 WRDIR: @@WRSSC 2A25+3E36 00790 LD A,54 2A27+EF 00791 RST 40 2A28 C20026 00792 JP NZ,DSTERR 2A2B 24 00793 INC H 2A2C 1C 00794 INC E 2A2D 10F6 00795 DJNZ WRDIR 00796 ; 2A2F 213B2D 00797 DOVER: LD HL,VERCYL$ 2A32 CDF42C 00798 CALL MSGOUT 2A35 3ABD2A 00799 LD A,(DSTDRV) 2A38 4F 00800 LD C,A 2A39 FD5605 00801 LD D,(IY+5) ;Get cyl 2A3C 1E00 00802 LD E,0 2A3E 0600 00803 LD B,$-$ 2A3F 00804 VERCNT EQU $-1 2A40 00805 VERLP: @@VRSEC 2A40+3E32 00806 LD A,50 2A42+EF 00807 RST 40 2A43 2811 00808 JR Z,VER1 ;Go if ok 2A45 FE06 00809 CP 6 ;Sys sec? 2A47 CA562A 00810 JP Z,VER1 ;Is dir, ok 2A4A 5F 00811 LD E,A ;Ok - real error, is src 2A4B 3A132D 00812 LD A,(WASLOK) ; tracked locked? 2A4E FEFF 00813 CP 0FFH 2A50 7B 00814 LD A,E ;Error code back to A 2A51 2806 00815 JR Z,VER2 ;If so, error is ok 2A53 C30026 00816 JP DSTERR ;Else abort 2A56 1C 00817 VER1: INC E ;Next sector 2A57 10E7 00818 DJNZ VERLP 00819 ; 2A59 FD7E06 00820 VER2: LD A,(IY+6) ;See if at end 2A5C FDBE05 00821 CP (IY+5) ;Are we?? 2A5F 2816 00822 JR Z,ALLDUN ;Go if so 2A61 FDCB03A6 00823 RES 4,(IY+3) ;Always start on side 1 2A65 CD482B 00824 CALL STEPIN ;Next track 2A68 CD4C2B 00825 CALL RSELCT ;Wait for FDC 2A6B C20C26 00826 JP NZ,IOERR 2A6E 01C800 00827 LD BC,3000/15 2A71 00828 @@PAUSE 2A71+3E10 00829 LD A,16 2A73+EF 00830 RST 40 2A74 C3B729 00831 JP MAINLP 00832 ; 2A77 CD442B 00833 ALLDUN: CALL RESTOR ;Restore the drive 2A7A 215E28 00834 LD HL,DONE$ ;Show completed 2A7D 00835 @@DSPLY 00836 IFEQ 00H,1 00837 LD HL, 00838 ENDIF 2A7D+3E0A 00839 LD A,10 2A7F+EF 00840 RST 40 2A80 00841 ALLD1: @@KEY ;Get a key 2A80+3E01 00842 LD A,1 2A82+EF 00843 RST 40 2A83 FE80 00844 CP BRK ;If break, done 2A85 CA2526 00845 JP Z,EXIT 2A88 F620 00846 OR 20H 2A8A FE79 00847 CP 'y' ;Do another? 2A8C CA2D29 00848 JP Z,RESTRT 2A8F FE6E 00849 CP 'n' 2A91 20ED 00850 JR NZ,ALLD1 2A93 C32526 00851 JP EXIT 00852 ; 00853 ; 00854 ; 00855 SKPSPC: 2A96 7E 00856 LD A,(HL) ;Get a char 2A97 23 00857 INC HL 2A98 FE0E 00858 CP CR+1 ;End of line? 2A9A DA3A26 00859 JP C,DRVMIS ;Bad if so 2A9D FE20 00860 CP ' ' 2A9F 28F5 00861 JR Z,SKPSPC 2AA1 C9 00862 RET 00863 ; 00864 ; Check and be sure two disks are mounted 00865 ; 2AA2 21F527 00866 MOUNT: LD HL,MOUNT$ ;"Mount disks... 2AA5 00867 @@DSPLY 00868 IFEQ 00H,1 00869 LD HL, 00870 ENDIF 2AA5+3E0A 00871 LD A,10 2AA7+EF 00872 RST 40 2AA8 00873 MNT1: @@KEY ;Get a key 2AA8+3E01 00874 LD A,1 2AAA+EF 00875 RST 40 2AAB FE80 00876 CP 80H 2AAD CA5D26 00877 JP Z,ABORT1 2AB0 FE0D 00878 CP CR 2AB2 20F4 00879 JR NZ,MNT1 2AB4 3E00 00880 LD A,$-$ ;Get source drive 2AB5 00881 SRCDRV EQU $-1 2AB6 4F 00882 LD C,A 2AB7 00883 @@CKDRV 2AB7+3E21 00884 LD A,33 2AB9+EF 00885 RST 40 00886 IF @BLD631 2ABA 20E6 00887 JR NZ,MOUNT ;<631> 00888 ELSE 00889 JP NZ,MOUNT 00890 ENDIF 2ABC 3E00 00891 LD A,$-$ ;Dest. drive # 2ABD 00892 DSTDRV EQU $-1 2ABE 4F 00893 LD C,A 00894 IF @BLD631 2ABF 32682B 00895 LD (SETDRV+1),A ;<631>Save in i/o routine 00896 ELSE 00897 LD (FMTDRV+1),A ;Save in i/o routine 00898 ENDIF 2AC2 00899 @@GTDCT 2AC2+3E51 00900 LD A,81 2AC4+EF 00901 RST 40 2AC5 FD7E00 00902 LD A,(IY) ;Drive enabled? 2AC8 FEC9 00903 CP 0C9H ;Disabled? 2ACA CA5526 00904 JP Z,DRVERR 2ACD FDCB035E 00905 BIT 3,(IY+3) ;Hard? 2AD1 C25126 00906 JP NZ,ILLEG 2AD4 FDCB0466 00907 BIT 4,(IY+4) ;Alien? 2AD8 C25126 00908 JP NZ,ILLEG 2ADB CD442B 00909 CALL RESTOR ;Restore the drive 2ADE C20C26 00910 JP NZ,IOERR 2AE1 CD4C2B 00911 CALL RSELCT ;Reselect drive 2AE4 C20C26 00912 JP NZ,IOERR 2AE7 CB7F 00913 BIT 7,A 2AE9 C25526 00914 JP NZ,DRVERR ;Go if FDC not rdy 2AEC CB57 00915 BIT 2,A 2AEE CA5526 00916 JP Z,DRVERR ;Go if not at trk 0 2AF1 CD6E2B 00917 CALL CKDRV ;Be sure disk mounted 2AF4 20AC 00918 JR NZ,MOUNT ;Disk not mounted 2AF6 07 00919 RLCA 2AF7 FDB603 00920 OR (IY+3) ;Ck for wp 2AFA E680 00921 AND 80H 2AFC C25926 00922 JP NZ,WPERR ;Go if write prot. 2AFF 0E0D 00923 LD C,CR ;Bump down a line 2B01 00924 @@DSP 2B01+3E02 00925 LD A,2 2B03+EF 00926 RST 40 2B04 C9 00927 RET 00928 ; 00929 ; Prompt for a system disk 00930 ; 2B05 E5 00931 SYSTEM: PUSH HL 00932 IF @BLD631 2B06 180D 00933 JR SYS9 ;<631> 00934 ENDIF 2B08 218B28 00935 SYS2: LD HL,SYSTEM$ 2B0B 00936 @@DSPLY ;Show the message 00937 IFEQ 00H,1 00938 LD HL, 00939 ENDIF 2B0B+3E0A 00940 LD A,10 2B0D+EF 00941 RST 40 2B0E 00942 SYS1: @@KEY ;Wait for an answer 2B0E+3E01 00943 LD A,1 2B10+EF 00944 RST 40 2B11 FE0D 00945 CP CR ;Is it a CR? 2B13 20F9 00946 JR NZ,SYS1 ;Redo if not 00947 IF @BLD631 00948 SYS9: ;<631> 00949 ENDIF 2B15 210054 00950 LD HL,BUFF ;Read 0,0 2B18 110000 00951 LD DE,0 00952 IF @BLD631 2B1B 4A 00953 LD C,D ;<631>Drive to C (D==0) 00954 ELSE 00955 LD C,0 ;Drive to C 00956 ENDIF 2B1C 00957 @@CKDRV 2B1C+3E21 00958 LD A,33 2B1E+EF 00959 RST 40 2B1F 20E7 00960 JR NZ,SYS2 2B21 00961 @@RDSEC 2B21+3E31 00962 LD A,49 2B23+EF 00963 RST 40 2B24 20E2 00964 JR NZ,SYS2 00965 IF @BLD631 2B26 3A0254 00966 LD A,(BUFF+2) ;<631>Get dir cyl 00967 ELSE 00968 LD A,(BUFF+3) ;Get dir cyl 00969 ENDIF 2B29 57 00970 LD D,A ;Put in D 2B2A 00971 @@RDSSC ;Read the GAT 2B2A+3E55 00972 LD A,85 2B2C+EF 00973 RST 40 2B2D 20D9 00974 JR NZ,SYS2 ;Redo on error 2B2F 3ACD54 00975 LD A,(BUFF+0CDH) ;Get the type byte 2B32 E680 00976 AND 80H ;Is it system? 2B34 20D2 00977 JR NZ,SYS2 ;Redo if not 2B36 0E0D 00978 LD C,CR 2B38 00979 @@DSP 2B38+3E02 00980 LD A,2 2B3A+EF 00981 RST 40 2B3B E1 00982 POP HL 2B3C C9 00983 RET ; else all ok, quit 00984 ; 00985 ; Disk I/O requests 00986 ; 00987 IF @BLD631 2B3D AF 00988 DRVNOP: XOR A ;<631> 2B3E 1826 00989 JR FMTDRV ;<631> 2B40 3E01 00990 SELECT: LD A,1 ;<631> 2B42 1822 00991 JR FMTDRV ;<631> 2B44 3E04 00992 RESTOR: LD A,4 ;<631> 2B46 181E 00993 JR FMTDRV ;<631> 2B48 3E05 00994 STEPIN: LD A,5 ;<631> 2B4A 181A 00995 JR FMTDRV ;<631> 2B4C 3E07 00996 RSELCT: LD A,7 ;<631> 2B4E 1816 00997 JR FMTDRV ;<631> 2B50 3E0F 00998 WRCYL: LD A,15 ;<631> 2B52 1812 00999 JR FMTDRV ;<631> 2B54 3E0C 01000 FMTHD: LD A,12 ;<631> 2B56 180E 01001 JR FMTDRV ;<631> 2B58 3E0D 01002 WRSEC: LD A,13 ;<631> 2B5A 180A 01003 JR FMTDRV ;<631> 2B5C 3E0E 01004 WRSYS: LD A,14 ;<631> 2B5E 1806 01005 JR FMTDRV ;<631> 2B60 3E09 01006 RDSEC: LD A,9 ;<631> 2B62 1802 01007 JR FMTDRV ;<631> 2B64 3E0A 01008 VERSEC: LD A,10 ;<631> 2B66 C5 01009 FMTDRV: PUSH BC ;<631> 2B67 0EFF 01010 SETDRV: LD C,-1 ;<631>P/u drive # 01011 ELSE 01012 DRVNOP PUSH BC 01013 XOR A 01014 JR FMTDRV 01015 SELECT PUSH BC 01016 LD A,1 01017 JR FMTDRV 01018 RESTOR PUSH BC 01019 LD A,4 01020 JR FMTDRV 01021 STEPIN PUSH BC 01022 LD A,5 01023 JR FMTDRV 01024 RSELCT PUSH BC 01025 LD A,7 01026 JR FMTDRV 01027 WRCYL PUSH BC 01028 LD A,15 01029 JR FMTDRV 01030 FMTHD PUSH BC 01031 LD A,12 01032 JR FMTDRV 01033 WRSEC PUSH BC 01034 LD A,13 01035 JR FMTDRV 01036 WRSYS PUSH BC 01037 LD A,14 01038 JR FMTDRV 01039 RDSEC PUSH BC 01040 LD A,9 01041 JR FMTDRV 01042 VERSEC PUSH BC 01043 LD A,10 01044 FMTDRV LD C,-1 ;P/u drive # 01045 ENDIF 2B69 C628 01046 ADD A,40 ;Adjust SVC # 2B6B EF 01047 RST 40 2B6C C1 01048 POP BC 2B6D C9 01049 RET 01050 ; 01051 ; Brief routine to check a drive for availability 01052 ; 2B6E 210054 01053 CKDRV LD HL,BUFF 2B71 01054 @@TIME ;P/u the timer pointer 2B71+3E13 01055 LD A,19 2B73+EF 01056 RST 40 2B74 EB 01057 EX DE,HL ;TIME$ to HL 2B75 2B 01058 DEC HL ;TIMER$ to HL 2B76 7E 01059 LD A,(HL) ;P/u current timer value 2B77 C60F 01060 ADD A,15 ;Set timeout to 500ms 2B79 57 01061 LD D,A ;Save for test later 01062 ; 01063 ; Test for diskette in drive & rotating 01064 ; 2B7A CD8A2B 01065 CKDR1 CALL CKDR6 ;Test index pulse 2B7D 20FB 01066 JR NZ,CKDR1 ;Jump on index 2B7F CD8A2B 01067 CKDR2 CALL CKDR6 ;Test index pulse 2B82 28FB 01068 JR Z,CKDR2 ;Jump on no index 2B84 CD8A2B 01069 CKDR2A CALL CKDR6 2B87 20FB 01070 JR NZ,CKDR2A ;Jump on index 2B89 C9 01071 RET 2B8A FB 01072 CKDR6 EI ;Make sure they're ON 2B8B 7E 01073 LD A,(HL) ;P/u latest TIMER$ value 2B8C 92 01074 SUB D ;500ms passed? 2B8D 2806 01075 JR Z,CKDR7 2B8F CD4C2B 01076 CALL RSELCT ;Select & wait not busy 2B92 CB4F 01077 BIT 1,A ;Test index 2B94 C9 01078 RET 2B95 D1 01079 CKDR7 POP DE ;Pop the ret address 2B96 F601 01080 OR 1 ;Set "Illegal drive # 2B98 C9 01081 RET ;With NZ 01082 ; 2B99 3E84 01083 GETSYS2: LD A,84H ;Load sys2 2B9B EF 01084 RST 40 01085 ; 01086 ; 01087 ;DCOPY1 01088 ; 2B9C 11902C 01089 SETFMT: LD DE,D5TBL ;P/u table pointer 2B9F 1A 01090 LD A,(DE) ;P/u # of sectors to fmt 2BA0 13 01091 INC DE ;Adj for zero offset 2BA1 328F2C 01092 LD (SECTRK),A 2BA4 47 01093 LD B,A 2BA5 FDCB046E 01094 BIT 5,(IY+4) ;Need twice as many 2BA9 2801 01095 JR Z,$+3 ; if 2-sided drive 2BAB 07 01096 RLCA 2BAC 328E2C 01097 LD (SECCYL),A 2BAF 1A 01098 LD A,(DE) ;P/u track skew 2BB0 13 01099 INC DE 2BB1 32832C 01100 LD (TRKSKEW+1),A 2BB4 ED53222C 01101 LD (SECSKEW+1),DE ;Format sector skew 01102 ; 01103 ; Index past sector info 01104 ; 2BB8 3C 01105 INC A ;Add DE -> begin of sec # 2BB9 80 01106 ADD A,B ;B -> # of sectors/side 2BBA 83 01107 ADD A,E ; A+1 -> a code byte 2BBB 5F 01108 LD E,A 2BBC 8A 01109 ADC A,D 2BBD 93 01110 SUB E 2BBE 57 01111 LD D,A 2BBF 210054 01112 LD HL,BUFF ;Buffer for format data 2BC2 01002E 01113 LD BC,HITBUF ;Tempy ptrs to trk,sect info 01114 ; 01115 ; Create the formatting data without trk,sect info 01116 ; 2BC5 1A 01117 FMTDAT LD A,(DE) ;P/u table format byte 2BC6 13 01118 INC DE ;Bump table ptr 2BC7 FEF1 01119 CP 0F1H ;Start of cylinder? 2BC9 282A 01120 JR Z,CODF1 2BCB FEF2 01121 CP 0F2H ;Start of track trailer? 2BCD 282D 01122 JR Z,CODF2 2BCF FEF3 01123 CP 0F3H ;Start of track ID info? 2BD1 2833 01124 JR Z,CODF3 2BD3 FEF4 01125 CP 0F4H ;End of table parms? 2BD5 2837 01126 JR Z,CODF4 2BD7 FEF5 01127 CP 0F5H ;Start of data? 2BD9 C5 01128 PUSH BC 2BDA 200F 01129 JR NZ,CODE1 ;Go if not 01130 ; 01131 ; Write 2 byte data pattern to format buffer 01132 ; 2BDC 1A 01133 LD A,(DE) ;P/u length to write 2BDD 13 01134 INC DE ;Bump to 1st data byte 2BDE 47 01135 LD B,A ;Xfer length to B 2BDF 1A 01136 LD A,(DE) ;P/u a data byte 2BE0 13 01137 INC DE ;Bump again for 2nd byte 2BE1 4F 01138 LD C,A ;Xfer 1st byte 2BE2 1A 01139 LD A,(DE) ;P/u 2nd byte 2BE3 71 01140 CODF5 LD (HL),C ;Stuff into buf 2BE4 23 01141 INC HL 2BE5 77 01142 LD (HL),A 2BE6 23 01143 INC HL 2BE7 10FA 01144 DJNZ CODF5 ;Loop til xfered 2BE9 1806 01145 JR CODRET 01146 ; 01147 ; Xfer bytes to the format buffer area 01148 ; A => count to move 01149 ; DE=> data byte to duplicate 01150 ; 2BEB 47 01151 CODE1 LD B,A ;Count to B 2BEC 1A 01152 LD A,(DE) ;P/u data byte to move 2BED 77 01153 CODE1A LD (HL),A ;Fill buf with byte 2BEE 23 01154 INC HL 2BEF 10FC 01155 DJNZ CODE1A ;Loop til done 2BF1 C1 01156 CODRET POP BC 2BF2 13 01157 INC DE ;Bump table ptr 2BF3 18D0 01158 JR FMTDAT ;Back for more 01159 ; 01160 ; Save the current table posn and the number of 01161 ; sectors per cylinder on the stack. 01162 ; 2BF5 3A8F2C 01163 CODF1 LD A,(SECTRK) ;P/u # of sectors/side 2BF8 D5 01164 CODF1A PUSH DE ;Save table pointer 2BF9 F5 01165 PUSH AF ;Save value 2BFA 18C9 01166 JR FMTDAT 01167 ; 01168 ; Done with a sector. Are there more on this cyl? 01169 ; 2BFC F1 01170 CODF2 POP AF ;Count down the # of 2BFD 3D 01171 DEC A ; sectors to format 2BFE 2803 01172 JR Z,CODF2A ;Go if last one done 2C00 D1 01173 POP DE ;Recover table ptr 2C01 18F5 01174 JR CODF1A ;Loop for more 01175 ; 2C03 F1 01176 CODF2A POP AF ;Clean the stack 2C04 18BF 01177 JR FMTDAT ; and finish off the cyl 01178 ; 01179 ; Build a table of the location in the format buffer of 01180 ; the track and sector ID bytes, to be filled in during 01181 ; the actual formatting. 01182 ; 2C06 7D 01183 CODF3 LD A,L ;Stuff pointer to where 2C07 02 01184 LD (BC),A ; track & sector info 2C08 03 01185 INC BC ; is to be placed 2C09 7C 01186 LD A,H 2C0A 02 01187 LD (BC),A 2C0B 03 01188 INC BC 2C0C 18B7 01189 JR FMTDAT 01190 ; 01191 ; Finished building format cyl info. Terminate the ID table 01192 ; with an extra 256 bytes in case of overrun. 01193 ; 01194 CODF4: 2C0E AF 01195 XOR A ;Stuff two X'00's to 2C0F 02 01196 LD (BC),A ; indicate the end 2C10 03 01197 INC BC ; of the ID posn table 2C11 02 01198 LD (BC),A 2C12 0600 01199 LD B,0 ;Stuff 256 FF's into the 2C14 3EFF 01200 LD A,0FFH ; format buffer 2C16 77 01201 LD (HL),A 2C17 23 01202 INC HL 2C18 10FC 01203 DJNZ $-2 2C1A C9 01204 RET 01205 ; 01206 ; Begin the formatting 01207 ; 2C1B 21142D 01208 BGNFMT: LD HL,FMTCYL$ ;"Formatting... 2C1E CDF42C 01209 CALL MSGOUT 2C21 010000 01210 SECSKEW LD BC,0 ;Begin of sector table 2C24 21002E 01211 BFMT1 LD HL,HITBUF ;P/u ptr to ID posn table 01212 ; 01213 BFMT2 2C27 01214 @@CKBRKC ;Check for break 2C27+3E6A 01215 LD A,106 2C29+EF 01216 RST 40 2C2A C25D26 01217 JP NZ,ABORT1 ;Go if so 01218 ; 2C2D 5E 01219 LD E,(HL) ;P/u positions having 2C2E 23 01220 INC HL ; sector & cylinder 2C2F 56 01221 LD D,(HL) ; info to be stuffed 2C30 23 01222 INC HL ; into format data 2C31 7A 01223 LD A,D ;Finished? 2C32 B3 01224 OR E 2C33 2820 01225 JR Z,BFMT4 2C35 FD7E05 01226 LD A,(IY+5) ;P/u cylinder # & stuff 2C38 12 01227 LD (DE),A ; into format data 2C39 13 01228 INC DE 2C3A FD7E03 01229 LD A,(IY+3) ;Stuff the side-select 2C3D E610 01230 AND 10H ; bit 2C3F 0F 01231 RRCA 2C40 0F 01232 RRCA 2C41 0F 01233 RRCA 2C42 0F 01234 RRCA 2C43 12 01235 LD (DE),A ; into the format data 2C44 13 01236 INC DE 2C45 0A 01237 LD A,(BC) ;P/u the sector number 2C46 B7 01238 OR A 2C47 F24F2C 01239 JP P,BFMT3 ;Go if a good number 2C4A 81 01240 ADD A,C ; else off the end, 2C4B 4F 01241 LD C,A ; calculate the beginning 2C4C 3801 01242 JR C,BFMT3 ; of the sector table 2C4E 05 01243 DEC B 2C4F 0A 01244 BFMT3 LD A,(BC) ;P/u the next sector # 2C50 12 01245 LD (DE),A ; and stuff in format data 2C51 13 01246 INC DE 2C52 03 01247 INC BC 2C53 18D2 01248 JR BFMT2 ;Loop until cylinder done 01249 ; 2C55 ED43222C 01250 BFMT4 LD (SECSKEW+1),BC ;Save end of sector table 2C59 FD5605 01251 LD D,(IY+5) ;P/u current cylinder 2C5C 210054 01252 LD HL,BUFF ;Pt to format data 2C5F CD402B 01253 CALL SELECT ;Drive select 2C62 C20C26 01254 JP NZ,IOERR ;Go on error 2C65 CD502B 01255 CALL WRCYL ;Cylinder write 2C68 C20C26 01256 JP NZ,IOERR 2C6B FDCB046E 01257 BIT 5,(IY+4) ;Double sided? 2C6F 280D 01258 JR Z,BFMT5 2C71 FDCB0366 01259 BIT 4,(IY+3) ;Flip bit for 2nd side 2C75 2007 01260 JR NZ,BFMT5 ; if not already on it, 2C77 FDCB03E6 01261 SET 4,(IY+3) ; else go to next 2C7B 03 01262 INC BC ;Bump to start side 2 2C7C 18A6 01263 JR BFMT1 ; at different sector # 2C7E FDCB03A6 01264 BFMT5 RES 4,(IY+3) ;Turn off side 2 2C82 3E00 01265 TRKSKEW LD A,0 ;P/u the track skew byte 2C84 81 01266 ADD A,C ;Repoint to beginning 2C85 4F 01267 LD C,A ; of sector table 2C86 88 01268 ADC A,B ;Skew start of next track 2C87 91 01269 SUB C 2C88 47 01270 LD B,A 2C89 ED43222C 01271 LD (SECSKEW+1),BC 2C8D C9 01272 RET 01273 ; 01274 ; 01275 ; Formatting data and tables 01276 ; 2C8E 01277 SECCYL DS 1 ;# of sectors per cyl 2C8F 01278 SECTRK DS 1 ;# of sectors per trk 01279 ; 01280 ; 01281 ; Double density 5" format table 01282 ; 2C90 12 01283 D5TBL DB 18,10 0A 2C92 00 01284 DB 0,9,1,10,2,11,3,12,4 09 01 0A 02 0B 03 0C 04 2C9B 0D 01285 DB 13,5,14,6,15,7,16,8,17 05 0E 06 0F 07 10 08 11 2CA4 EE 01286 DC 11,-18 EE EE EE EE EE EE EE EE EE EE 2CAF 20 01287 DB 32,4EH 4E 2CB1 F1 01288 DB 0F1H,12,0,3,0F5H,1,0FEH 0C 00 03 F5 01 FE 2CB8 F3 01289 DB 0F3H,3,0,1,1,1,0F7H,22,4EH,12,0,3,0F5H 03 00 01 01 01 F7 16 4E 0C 00 03 F5 2CC5 01 01290 DB 1,0FBH,0F5H,128,6DH,0B6H FB F5 80 6D B6 2CCB 01 01291 DB 1,0F7H,1,4EH,23,04EH F7 01 4E 17 4E 2CD1 F2 01292 DB 0F2H,182,4EH,0F4H B6 4E F4 2CD5 00 01293 DB 0,1,2,3,4,5,6,7,8,9 01 02 03 04 05 06 07 08 09 2CDF 0A 01294 DB 10,11,12,13,14,15,16,17 0B 0C 0D 0E 0F 10 11 01295 ; 01296 ; Routine to convert reg A to 2 decimal digits 01297 ; 2CE7 0E30 01298 CVDEC LD C,30H ;Init msd to 0 2CE9 D60A 01299 CVD1 SUB 10 ;Sub 10 until underflow 2CEB 3803 01300 JR C,CVD2 2CED 0C 01301 INC C ;Inc the count 2CEE 18F9 01302 JR CVD1 2CF0 C63A 01303 CVD2 ADD A,3AH ;Add back 10 + '0' 2CF2 47 01304 LD B,A ;Lsd to B 2CF3 C9 01305 RET 01306 ; 01307 ; Show what's happening 01308 ; 2CF4 E5 01309 MSGOUT: PUSH HL ;Save msg 2CF5 210000 01310 LD HL,$-$ ;Set cursor 2CF6 01311 CURSOR EQU $-2 2CF8 0603 01312 LD B,3 2CFA 01313 @@VDCTL 2CFA+3E0F 01314 LD A,15 2CFC+EF 01315 RST 40 2CFD E1 01316 POP HL 2CFE 01317 @@DSPLY 01318 IFEQ 00H,1 01319 LD HL, 01320 ENDIF 2CFE+3E0A 01321 LD A,10 2D00+EF 01322 RST 40 2D01 FD7E05 01323 LD A,(IY+5) ;Get syl # 2D04 CDE72C 01324 CALL CVDEC 2D07 01325 @@DSP ;Show cyl # 2D07+3E02 01326 LD A,2 2D09+EF 01327 RST 40 2D0A 48 01328 LD C,B 2D0B 01329 @@DSP 2D0B+3E02 01330 LD A,2 2D0D+EF 01331 RST 40 2D0E C9 01332 RET 01333 ; 01334 ; 2D0F 0000 01335 SRCDCT DW 0 2D11 0000 01336 DSTDCT DW 0 2D13 00 01337 WASLOK DB 0 01338 ; 2D14 46 01339 FMTCYL$ DB 'Formatting ',3 6F 72 6D 61 74 74 69 6E 67 20 20 03 2D21 52 01340 RDCYL$ DB 'Reading ',3 65 61 64 69 6E 67 20 20 20 20 20 03 2D2E 57 01341 WRCYL$ DB 'Writing ',3 72 69 74 69 6E 67 20 20 20 20 20 03 2D3B 56 01342 VERCYL$ DB 'Verifying ',3 65 72 69 66 79 69 6E 67 20 20 20 03 01343 ; 2E00 01344 ORG $<-8+1<8 2E00 01345 HITBUF DS 256 2F00 01346 GATBUF DS 256 3000 01347 RDBUF DS 36*256 5400 01348 BUFF EQU $ 01349 ; 7F00 01350 ENDLOC EQU $+2B00H ;for free mem check 28B7 01351 END BEGIN 28B7 is the transfer address 00000 Total errors
[Copyright 1999,2002 Frank Durda IV, All Rights Reserved. Mirroring of any material on this page in any form is expressly prohibited. The official web site for this material is: http://nemesis.lonestar.org Contact this address for use clearances: clearance at nemesis.lonestar.org Comments and queries to this address: web_software_2011 at nemesis.lonestar.org]