LS-DOS 6.3.1 - DISKCOPY Utility Assembly Listing (HTML format version)

[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]

Valid HTML 4.01!