LS-DOS 6.3.1 - FORMAT 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:44:32 FORMAT - LS-DOS 6.3          Page 00001 

              00001 ;FORMAT1/ASM - Format Program
              00004 ;
42E0          00005 PASSWORD        EQU     42E0H
0063          00006 RLS     EQU     63H
000A          00007 LF      EQU     10
000D          00008 CR      EQU     13
3C00          00009 CRT3    EQU     3C00H
F800          00010 CRT4    EQU     0F800H
              00011 ;
0000          00012 *GET    SVCMAC:3                ;SVC Macro equivalents
              00013 ;SVCMAC/ASM - LS-DOS Version VI
              00014 *LIST   OFF
              00406 *LIST   ON
0000          00408 *GET    COPYCOM:3               ;Copyright message
              00409 ; COPYCOM - File for Copyright COMment block
              00410 ;
0000          00411 *GET BUILDVER/ASM:3
              00412 ;
              00413 ;       Buildver/asm is a bit of a kludge since not all utilities can load
              00414 ;       equates from LDOS60 and still compile.  LOWCORE and everybody else
              00415 ;       relies on this setting, and it eventually ends up in LDOS60/EQU
              00416 ;       for programs that can use that.
              00417 ;
FFFF          00418 @BLD631         EQU     -1      ;<631>Build 631 distribution (LEVEL 1B)
              00419 ;       These switches activate patches made since the 1B release.
              00420 ;       It is important that all earlier patches be enabled when a higher
              00421 ;       patch is enabled.
              00422 ;       Patches C thru F were published in TMQ IV.iv, page 32 (NOTE: the
              00423 ;       patch addresses listed for SPOOL in SPOOL1/FIX are 19H high.)
FFFF          00424 @BLD631C        EQU     -1      ;<631>Apply 1C patches (SETKI)
FFFF          00425 @BLD631D        EQU     -1      ;<631>Apply 1D patches (DIR)
FFFF          00426 @BLD631E        EQU     -1      ;<631>Apply 1E patches (DIR & MEMDISK/DCT)
FFFF          00427 @BLD631F        EQU     -1      ;<631>Apply 1F patches (SPOOL)
              00428 ;       Patches G and H were published in TMQ V.i, pages 10 and 18/19.
FFFF          00429 @BLD631G        EQU     -1      ;<631>Apply 1G patches (//KEYIN,DIR,DO *)
FFFF          00430 @BLD631H        EQU     -1      ;<631>Apply 1H patches (MEMORY)
              00431 ;
              00432 ;End of BUILDVER/ASM
              00433         IF      @BLD631
              00435         ELSE
              00436         COM     '<*(C) 1982,3,4,6 by LSI*>'
              00437         ENDIF
              00438 *LIST   ON
              00439 ;
2600          00440         ORG     2600H
              00441 ;
              00442         IF      @MOD4
2600 9D       00443 BOOTST$ DB      9DH             ;Boot step rate offset
              00444         ENDIF
              00445         IF      @MOD2
              00446 BOOTST$ DB      03H
              00447         ENDIF
              00448 ;
2601 FDCB0466 00449 GOFMT   BIT     4,(IY+4)        ;Jump if alien controller
2605 C2C127   00450         JP      NZ,HRDRV
2608 110000   00451 FMTTBL  LD      DE,0            ;P/u table pointer
260B 1A       00452         LD      A,(DE)          ;P/u # of sectors to fmt
260C 13       00453         INC     DE              ;Adj for zero offset
260D 32E52A   00454         LD      (SECTRK),A
2610 47       00455         LD      B,A
2611 FDCB046E 00456         BIT     5,(IY+4)        ;Need twice as many
2615 2801     00457         JR      Z,$+3           ;  if 2-sided drive
2617 07       00458         RLCA
2618 32E42A   00459         LD      (SECCYL),A
261B 210000   00460 SYSPRM  LD      HL,0            ;P/u system info parm
261E 7C       00461         LD      A,H             ;Don't format if system
261F B5       00462         OR      L               ;  info only is req
2620 C29427   00463         JP      NZ,MOVFREE
2623 1A       00464         LD      A,(DE)          ;P/u track skew
2624 13       00465         INC     DE
2625 320327   00466         LD      (TRKSKEW+1),A
2628 ED53A226 00467         LD      (SECSKEW+1),DE  ;Format sector skew
              00468 ;
              00469 ;       Index past sector info
              00470 ;
262C 3C       00471         INC     A               ;Add DE -> begin of sec #
262D 80       00472         ADD     A,B             ;B -> # of sectors/side
262E 83       00473         ADD     A,E             ; A+1 -> a code byte
262F 5F       00474         LD      E,A
2630 8A       00475         ADC     A,D
2631 93       00476         SUB     E
2632 57       00477         LD      D,A
2633 210031   00478         LD      HL,FORMAT       ;Buffer for format data
2636 010030   00479         LD      BC,HITBUF       ;Tempy ptrs to trk,sect info
              00480 ;
              00481 ;       Create the formatting data without trk,sect info
              00482 ;
2639 1A       00483 FMTDAT  LD      A,(DE)          ;P/u table format byte
263A 13       00484         INC     DE              ;Bump table ptr
263B FEF1     00485         CP      0F1H            ;Start of cylinder?
263D 282A     00486         JR      Z,CODF1
263F FEF2     00487         CP      0F2H            ;Start of track trailer?
2641 282D     00488         JR      Z,CODF2
2643 FEF3     00489         CP      0F3H            ;Start of track ID info?
2645 2833     00490         JR      Z,CODF3
2647 FEF4     00491         CP      0F4H            ;End of table parms?
2649 2837     00492         JR      Z,CODF4
264B FEF5     00493         CP      0F5H            ;Start of data?
264D C5       00494         PUSH    BC
264E 200F     00495         JR      NZ,CODE1        ;Go if not
              00496 ;
              00497 ;       Write 2 byte data pattern to format buffer
              00498 ;
2650 1A       00499         LD      A,(DE)          ;P/u length to write
2651 13       00500         INC     DE              ;Bump to 1st data byte
2652 47       00501         LD      B,A             ;Xfer length to B
2653 1A       00502         LD      A,(DE)          ;P/u a data byte
2654 13       00503         INC     DE              ;Bump again for 2nd byte
2655 4F       00504         LD      C,A             ;Xfer 1st byte
2656 1A       00505         LD      A,(DE)          ;P/u 2nd byte
2657 71       00506 CODF5   LD      (HL),C          ;Stuff into buf
2658 23       00507         INC     HL
2659 77       00508         LD      (HL),A
265A 23       00509         INC     HL
265B 10FA     00510         DJNZ    CODF5           ;Loop til xfered
265D 1806     00511         JR      CODRET
              00512 ;
              00513 ;       Xfer bytes to the format buffer area
              00514 ;       A => count to move
              00515 ;       DE=> data byte to duplicate
              00516 ;
265F 47       00517 CODE1   LD      B,A             ;Count to B
2660 1A       00518         LD      A,(DE)          ;P/u data byte to move
2661 77       00519 CODE1A  LD      (HL),A          ;Fill buf with byte
2662 23       00520         INC     HL
2663 10FC     00521         DJNZ    CODE1A          ;Loop til done
2665 C1       00522 CODRET  POP     BC
2666 13       00523         INC     DE              ;Bump table ptr
2667 18D0     00524         JR      FMTDAT          ;Back for more
              00525 ;
              00526 ;       Save the current table posn and the number of
              00527 ;       sectors per cylinder on the stack.
              00528 ;
2669 3AE52A   00529 CODF1   LD      A,(SECTRK)      ;P/u # of sectors/side
266C D5       00530 CODF1A  PUSH    DE              ;Save table pointer
266D F5       00531         PUSH    AF              ;Save value
266E 18C9     00532         JR      FMTDAT
              00533 ;
              00534 ;       Done with a sector. Are there more on this cyl?
              00535 ;
2670 F1       00536 CODF2   POP     AF              ;Count down the # of
2671 3D       00537         DEC     A               ;  sectors to format
2672 2803     00538         JR      Z,CODF2A        ;Go if last one done
2674 D1       00539         POP     DE              ;Recover table ptr
2675 18F5     00540         JR      CODF1A          ;Loop for more
              00541 ;
2677 F1       00542 CODF2A  POP     AF              ;Clean the stack
2678 18BF     00543         JR      FMTDAT          ;  and finish off the cyl
              00544 ;
              00545 ;       Build a table of the location in the format buffer of
              00546 ;       the track and sector ID bytes, to be filled in during
              00547 ;       the actual formatting.
              00548 ;
267A 7D       00549 CODF3   LD      A,L             ;Stuff pointer to where
267B 02       00550         LD      (BC),A          ;  track & sector info
267C 03       00551         INC     BC              ;  is to be placed
267D 7C       00552         LD      A,H
267E 02       00553         LD      (BC),A
267F 03       00554         INC     BC
2680 18B7     00555         JR      FMTDAT
              00556 ;
              00557 ;       Finished building format cyl info. Terminate the ID table
              00558 ;       with an extra 256 bytes in case of overrun.
              00559 ;
2682 ED536527 00560 CODF4   LD      (VERSKEW+1),DE  ;Table posn of verify order
2686 AF       00561         XOR     A               ;Stuff two X'00's to
2687 02       00562         LD      (BC),A          ;  indicate the end
2688 03       00563         INC     BC              ;  of the ID posn table
2689 02       00564         LD      (BC),A
268A 0600     00565         LD      B,0             ;Stuff 256 FF's into the
268C 3EFF     00566         LD      A,0FFH          ;  format buffer
268E 77       00567         LD      (HL),A
268F 23       00568         INC     HL
2690 10FC     00569         DJNZ    $-2
              00570 ;
              00571 ;       Begin the formatting
              00572 ;
2692          00573         @@DSPLY FMTCYL$         ;"formatting clinder...
              00574         IFEQ    01H,1
2692+21352C   00575         LD      HL,FMTCYL$
              00576         ENDIF
2695+3E0A     00577         LD      A,10
2697+EF       00578         RST     40
2698 FD7E05   00579 BGNFMT  LD      A,(IY+5)        ;P/u cylinder position
269B CD4C2A   00580         CALL    CVDEC           ;Cvrt to decimal
269E CD852A   00581         CALL    DSPCYL
26A1 010000   00582 SECSKEW LD      BC,0            ;Begin of sector table
26A4 210030   00583 BFMT1   LD      HL,HITBUF       ;P/u ptr to ID posn table
              00584 ;
              00585 BFMT2
26A7          00586         @@CKBRKC                ;Check for break
26A7+3E6A     00587         LD      A,106
26A9+EF       00588         RST     40
26AA C2BC29   00589         JP      NZ,BREAK        ;Go if so
              00590 ;
26AD 5E       00591         LD      E,(HL)          ;P/u positions having
26AE 23       00592         INC     HL              ;  sector & cylinder
26AF 56       00593         LD      D,(HL)          ;  info to be stuffed
26B0 23       00594         INC     HL              ;  into format data
26B1 7A       00595         LD      A,D             ;Finished?
26B2 B3       00596         OR      E
26B3 2820     00597         JR      Z,BFMT4
26B5 FD7E05   00598         LD      A,(IY+5)        ;P/u cylinder # & stuff
26B8 12       00599         LD      (DE),A          ;  into format data
26B9 13       00600         INC     DE
26BA FD7E03   00601         LD      A,(IY+3)        ;Stuff the side-select
26BD E610     00602         AND     10H             ;  bit
26BF 0F       00603         RRCA
26C0 0F       00604         RRCA
26C1 0F       00605         RRCA
26C2 0F       00606         RRCA
26C3 12       00607         LD      (DE),A          ;  into the format data
26C4 13       00608         INC     DE
26C5 0A       00609         LD      A,(BC)          ;P/u the sector number
26C6 B7       00610         OR      A
26C7 F2CF26   00611         JP      P,BFMT3         ;Go if a good number
26CA 81       00612         ADD     A,C             ;  else off the end,
26CB 4F       00613         LD      C,A             ;  calculate the beginning
26CC 3801     00614         JR      C,BFMT3         ;  of the sector table
26CE 05       00615         DEC     B
26CF 0A       00616 BFMT3   LD      A,(BC)          ;P/u the next sector #
26D0 12       00617         LD      (DE),A          ;  and stuff in format data
26D1 13       00618         INC     DE
26D2 03       00619         INC     BC
26D3 18D2     00620         JR      BFMT2           ;Loop until cylinder done
              00621 ;
26D5 ED43A226 00622 BFMT4   LD      (SECSKEW+1),BC  ;Save end of sector table
26D9 FD5605   00623         LD      D,(IY+5)        ;P/u current cylinder
26DC 210031   00624         LD      HL,FORMAT       ;Pt to format data
26DF CDFF29   00625         CALL    SELECT          ;Drive select
26E2 C2A829   00626         JP      NZ,IOERR        ;Go on error
26E5 CD0F2A   00627         CALL    WRCYL           ;Cylinder write
26E8 C2A829   00628         JP      NZ,IOERR
26EB FDCB046E 00629         BIT     5,(IY+4)        ;Double sided?
26EF 280D     00630         JR      Z,BFMT5
26F1 FDCB0366 00631         BIT     4,(IY+3)        ;Flip bit for 2nd side
26F5 2007     00632         JR      NZ,BFMT5        ;  if not already on it,
26F7 FDCB03E6 00633         SET     4,(IY+3)        ;  else go to next
26FB 03       00634         INC     BC              ;Bump to start side 2
26FC 18A6     00635         JR      BFMT1           ;  at different sector #
26FE FDCB03A6 00636 BFMT5   RES     4,(IY+3)        ;Turn off side 2
2702 3E00     00637 TRKSKEW LD      A,0             ;P/u the track skew byte
2704 81       00638         ADD     A,C             ;Repoint to beginning
2705 4F       00639         LD      C,A             ;  of sector table
2706 88       00640         ADC     A,B             ;Skew start of next track
2707 91       00641         SUB     C
2708 47       00642         LD      B,A
2709 ED43A226 00643         LD      (SECSKEW+1),BC
270D FD7E05   00644         LD      A,(IY+5)        ;Finished?
2710 FDBE06   00645         CP      (IY+6)
2713 2820     00646         JR      Z,BGNVER        ;Begin verify if so
2715 014200   00647         LD      BC,1000/15      ;Approx 1 ms pause
2718          00648         @@PAUSE                 ;  before STEPIN
2718+3E10     00649         LD      A,16
271A+EF       00650         RST     40
271B CD072A   00651         CALL    STEPIN          ;Step in
271E C2A829   00652         JP      NZ,IOERR        ;Go on error
2721 019826   00653         LD      BC,BGNFMT       ;Place RET addr on stack
2724 CD0B2A   00654 CKWAIT  CALL    RSELCT          ;Wait for idle FDC
2727 C2A829   00655         JP      NZ,IOERR        ;Go on error
272A C5       00656         PUSH    BC              ;Save RET addr
              00657 ;
              00658 ;       WAIT parameter for time delay after STEPIN
              00659 ;
272B 01C800   00660 WAITPRM LD      BC,3000/15      ;Approx 3 ms delay
272E 78       00661         LD      A,B             ;  after STEPIN
272F B1       00662         OR      C
2730 C8       00663         RET     Z               ;Do next track if no wait
2731          00664         @@PAUSE                 ;  else wait for count
2731+3E10     00665         LD      A,16
2733+EF       00666         RST     40
2734 C9       00667         RET
              00668 ;
              00669 ;       Begin the verification process
              00670 ;
2735 0E0D     00671 BGNVER  LD      C,CR            ;Posn to next dsply line
2737          00672         @@DSP
2737+3E02     00673         LD      A,2
2739+EF       00674         RST     40
273A CD032A   00675         CALL    RESTOR          ;Restore to cyl 0
273D 206A     00676         JR      NZ,BVER9        ;Go on error
273F          00677         @@DSPLY VERCYL$         ;"verifying cylinder...
              00678         IFEQ    01H,1
273F+214D2C   00679         LD      HL,VERCYL$
              00680         ENDIF
2742+3E0A     00681         LD      A,10
2744+EF       00682         RST     40
2745 1600     00683         LD      D,0             ;Init track count
              00684 BVER1
2747          00685         @@CKBRKC                ;Check for break
2747+3E6A     00686         LD      A,106
2749+EF       00687         RST     40
274A C2BC29   00688         JP      NZ,BREAK        ; and abort if so
              00689 ;
274D 6A       00690         LD      L,D             ;Pt to GAT byte for this
274E 262E     00691         LD      H,GATBUF<-8     ;  track & bypass verify
2750 7E       00692         LD      A,(HL)          ;  if track not formatted
2751 3C       00693         INC     A
2752 2836     00694         JR      Z,BVER8
              00695 ;
2754 7A       00696         LD      A,D
2755 CD4C2A   00697         CALL    CVDEC           ;Convert cyl # to ASCII
2758 D5       00698         PUSH    DE
2759 CD852A   00699         CALL    DSPCYL          ;Display the current cyl
275C D1       00700         POP     DE
275D AF       00701         XOR     A               ;Initialize starting sector
275E 327227   00702         LD      (BVER5+1),A
2761 326927   00703         LD      (BVER4+1),A
2764 010000   00704 VERSKEW LD      BC,0            ;P/u start of sector tbl
2767 0A       00705 BVER3   LD      A,(BC)          ;P/u sector #
2768 C600     00706 BVER4   ADD     A,0             ;Add in a side's sectors
276A 5F       00707         LD      E,A             ;  if on side 2
276B CD232A   00708         CALL    VERSEC          ;Sector verify
276E 2039     00709         JR      NZ,BVER9        ;Go on error
2770 03       00710         INC     BC              ;Bump sector table ptr
2771 3E00     00711 BVER5   LD      A,0             ;P/u sector #
2773 3C       00712         INC     A               ;Bump it up
2774 327227   00713         LD      (BVER5+1),A     ;  and save new #
2777 5F       00714         LD      E,A             ;Xfer to sector register
2778 3AE42A   00715         LD      A,(SECCYL)      ;Is this = a cyl?
277B BB       00716         CP      E
277C 280C     00717         JR      Z,BVER8         ;Go if cyl done
277E 3AE52A   00718         LD      A,(SECTRK)      ;Is this a track's worth?
2781 BB       00719         CP      E
2782 20E3     00720         JR      NZ,BVER3        ;Loop if not
2784 326927   00721         LD      (BVER4+1),A     ;Update the add for side2
2787 03       00722         INC     BC
2788 18DA     00723         JR      VERSKEW
              00724 ;
              00725 ;       Readjust for end of cylinder
              00726 ;
278A 7A       00727 BVER8   LD      A,D             ;P/u current cyl position
278B 14       00728         INC     D               ;Bump to next cyl
278C FDBE06   00729         CP      (IY+6)          ;Cp to highest # cyl
278F 014727   00730         LD      BC,BVER1        ;Go if more to verify
2792 2090     00731         JR      NZ,CKWAIT       ;  after checking WAIT
              00732 ;
              00733 ;       Shift the FREE table to LOCKOUT table
              00734 ;
2794 21002E   00735 MOVFREE LD      HL,GATBUF       ;Ptr to allocation info
2797 11602E   00736         LD      DE,GATBUF+60H   ;Lockout table
279A 0600     00737         LD      B,0
279C FD4E06   00738         LD      C,(IY+6)        ;P/u hi cyl
279F 0C       00739         INC     C               ;Offset from 0
27A0 EDB0     00740         LDIR                    ;Shift info to the lockout tbl
27A2 0E0D     00741         LD      C,CR            ;Print a newline
27A4          00742         @@DSP
27A4+3E02     00743         LD      A,2
27A6+EF       00744         RST     40
27A7 185D     00745         JR      CALCDIR         ;Go finish DIR init
              00746 ;
              00747 ;       Got verify error
              00748 ;
27A9 FE05     00749 BVER9   CP      5               ;Data rec not found?
27AB 2805     00750         JR      Z,BVER10
27AD FE04     00751         CP      4               ;Parity error?
27AF C2A829   00752         JP      NZ,IOERR        ;Quit on any other
27B2 D5       00753 BVER10  PUSH    DE
27B3          00754         @@DSPLY STAR$           ;Show the * lockout
              00755         IFEQ    01H,1
27B3+21652C   00756         LD      HL,STAR$
              00757         ENDIF
27B6+3E0A     00758         LD      A,10
27B8+EF       00759         RST     40
27B9 D1       00760         POP     DE
27BA 6A       00761         LD      L,D             ;Pt to this cyl
27BB 262E     00762         LD      H,GATBUF<-8     ;  in the GAT
27BD 36FF     00763         LD      (HL),0FFH       ;Lockout this cylinder
27BF 18C9     00764         JR      BVER8           ;Continue verifying
              00765 ;
              00766 ;       Hard drive format - most work done by controller
              00767 ;
27C1 216539   00768 HRDRV   LD      HL,LASTMSG      ;Give one last chance to
27C4 FDCB035E 00769         BIT     3,(IY+3)        ;  abort before wiping
27C8 2809     00770         JR      Z,AFLOP         ;  disk unless floppy
27CA CD592A   00771         CALL    GET3            ;Is hard, get response
27CD 7E       00772         LD      A,(HL)          ;P/u 1st char of resp
27CE FE59     00773         CP      'Y'             ;Must be yes to continue
27D0 C2BC29   00774         JP      NZ,FMTABT
27D3 3A1C26   00775 AFLOP   LD      A,(SYSPRM+1)    ;Bypass the formatting
27D6 B7       00776         OR      A               ;  if system info only
27D7 200C     00777         JR      NZ,HRDRV1
27D9          00778         @@DSPLY FMTG$           ;"formatting - be patient
              00779         IFEQ    01H,1
27D9+216A2C   00780         LD      HL,FMTG$
              00781         ENDIF
27DC+3E0A     00782         LD      A,10
27DE+EF       00783         RST     40
27DF CD132A   00784         CALL    FMTHD           ;Format hard drive
27E2 C2A829   00785         JP      NZ,IOERR
27E5 FD7E07   00786 HRDRV1  LD      A,(IY+7)        ;# of sectors/gran
27E8 57       00787         LD      D,A             ;-> reg E
27E9 E61F     00788         AND     1FH
27EB 5F       00789         LD      E,A
27EC 1C       00790         INC     E               ;Bump for 0 offset
27ED AA       00791         XOR     D
27EE 07       00792         RLCA                    ;Get # of heads
27EF 07       00793         RLCA                    ;Into reg D
27F0 07       00794         RLCA
27F1 3C       00795         INC     A               ;Adjust for zero offset
27F2 4F       00796         LD      C,A
27F3          00797         @@MUL8                  ;Multiply E x C
27F3+3E5A     00798         LD      A,90
27F5+EF       00799         RST     40
27F6 FDCB046E 00800         BIT     5,(IY+4)        ;2-sided?
27FA 2801     00801         JR      Z,$+3
27FC 87       00802         ADD     A,A             ;Twice the number
27FD 32E42A   00803         LD      (SECCYL),A
2800 FDCB035E 00804         BIT     3,(IY+3)        ;Floppy?
2804 288E     00805         JR      Z,MOVFREE       ;Form lock table instead
              00806 ;
              00807 ;       Routine to calculate the directory cylinder
              00808 ;
2806 CD032A   00809 CALCDIR CALL    RESTOR          ;Step in
2809 C2A829   00810         JP      NZ,IOERR        ;Go on error
280C 262E     00811         LD      H,GATBUF<-8
280E FD6E06   00812         LD      L,(IY+6)        ;P/u highest # cylinder
2811 010000   00813 DIRPARM LD      BC,0000         ;P/U 'DIR=' parm
2814 79       00814         LD      A,C             ;Check if entered
2815 B0       00815         OR      B
2816 2806     00816         JR      Z,NODIR         ;Calc one if not entered
2818 BD       00817         CP      L               ;Entered so check if
2819 3003     00818         JR      NC,NODIR        ;  within cylinders
281B 6F       00819         LD      L,A             ;Is ok, use it
281C 1803     00820         JR      DIRSET
281E 2C       00821 NODIR   INC     L               ;Adj for zero offset
281F CB3D     00822         SRL     L               ;Divide by 2 to find
2821 0E00     00823 DIRSET  LD      C,0             ;  disk midpoint
              00824 ;
              00825 ;       Perform expanding binary search to find
              00826 ;       A cylinder available for the directory
              00827 ;
2823 7E       00828 CALC1   LD      A,(HL)          ;Is this cylinder
2824 3C       00829         INC     A               ;Available or locked out?
2825 2019     00830         JR      NZ,GENSYS       ;Bypass if available
2827 0C       00831         INC     C               ;Bump C
2828 79       00832         LD      A,C
2829 0F       00833         RRCA                    ;Test if odd or even
282A 7D       00834         LD      A,L             ;Get current test pos
282B 3009     00835         JR      NC,CALC2        ;Jump if C was even
282D 81       00836         ADD     A,C             ;Add to previous pos
282E 6F       00837         LD      L,A
282F FDBE06   00838         CP      (IY+6)          ;Go over the top?
2832 20EF     00839         JR      NZ,CALC1        ;Loop if not
2834 1804     00840         JR      CALC3           ;Else abort
2836 91       00841 CALC2   SUB     C               ;Try a lower cylinder #
2837 6F       00842         LD      L,A
2838 20E9     00843         JR      NZ,CALC1        ;At cylinder 0?
283A 21782C   00844 CALC3   LD      HL,NOCYL$       ;"no dir space avail...
283D C3BC29   00845         JP      FMTABT
              00846 ;
              00847 ;       Generate the system initialization
              00848 ;
2840 FD7509   00849 GENSYS  LD      (IY+9),L        ;Stuff the dir cyl
2843 7D       00850         LD      A,L
2844 CD4C2A   00851         CALL    CVDEC           ;Cvrt reg A to 2 dec digs
2847 ED43C22C 00852         LD      (DIRASC$),BC    ;Stuff into the message
284B          00853         @@DSPLY DIRCYL$         ;"dir will be placed...
              00854         IFEQ    01H,1
284B+219D2C   00855         LD      HL,DIRCYL$
              00856         ENDIF
284E+3E0A     00857         LD      A,10
2850+EF       00858         RST     40
2851          00859         @@DSPLY IPLSYS$         ;"initializing...
              00860         IFEQ    01H,1
2851+21C52C   00861         LD      HL,IPLSYS$
              00862         ENDIF
2854+3E0A     00863         LD      A,10
2856+EF       00864         RST     40
2857 21002E   00865         LD      HL,GATBUF
285A 7E       00866         LD      A,(HL)          ;P/u GAT byte for 1st
285B F601     00867         OR      1               ;  cylinder & show 1st
285D 77       00868         LD      (HL),A          ;  gran in use for BOOTs
285E FD7E09   00869         LD      A,(IY+9)        ;Dir cyl # into DIR/SYS
2861 32CF2A   00870         LD      (DIRDIR+16H),A
2864 6F       00871         LD      L,A             ;Show entire directory
2865 36FF     00872         LD      (HL),0FFH       ;  cylinder used
              00873 ;
              00874 ;       Update BOOT for DIR & step rate
              00875 ;
2867 FD7E09   00876         LD      A,(IY+9)        ;Dir cyl into BOOT
286A 32022F   00877         LD      (BOOT+2),A
286D 3A0026   00878         LD      A,(BOOTST$)     ;P/u offset
2870 6F       00879         LD      L,A
2871 262F     00880         LD      H,BOOT<-8
2873 3AE32A   00881         LD      A,(STEPDFT)     ;P/u boot step rate
              00882         IF      @MOD2
              00883         OR      80H             ;Create single byte opcod
              00884         ENDIF
2876 77       00885         LD      (HL),A          ;  & set into BOOT
2877 110000   00886         LD      DE,0            ;Init for cyl 0, sect 0
287A CD232A   00887         CALL    VERSEC          ;Test if formatted
287D 21312D   00888         LD      HL,NOTFMT$      ;"Can't, not formatted
2880 C2BF29   00889         JP      NZ,EXTERR       ;Error if not
2883 21002F   00890         LD      HL,BOOT         ;Pt to Data disk BOOT
2886 CD172A   00891         CALL    WRSEC           ;  & write it
2889 CC402A   00892         CALL    Z,WRDIR1        ;Verify after write
288C C2A829   00893         JP      NZ,IOERR        ;  & display '.'
288F 110100   00894         LD      DE,1            ;Pt to cyl 0, sector 1
2892 21002F   00895         LD      HL,BOOT         ;Pt to the sector 1 boot
2895 CD172A   00896         CALL    WRSEC           ;Write 0/1
2898 CC402A   00897         CALL    Z,WRDIR+3       ;Verify after write
289B C2A829   00898         JP      NZ,IOERR
              00899 ;
              00900 ;       Complete GAT construction
              00901 ;
289E FD7E06   00902         LD      A,(IY+6)        ;P/u highest # cylinder
28A1 D622     00903         SUB     22H             ;  & adj offset from 34
28A3 32CC2E   00904         LD      (GATBUF+0CCH),A ;Stuff GAT cyl excess
28A6 FD7E04   00905         LD      A,(IY+4)        ;P/u # of sides
28A9 E6A0     00906         AND     80H+20H
28AB 47       00907         LD      B,A             ;Save tempy in B
28AC FD7E03   00908         LD      A,(IY+3)        ;P/u density
28AF E640     00909         AND     40H             ;Mask it,
28B1 B0       00910         OR      B               ;  merge in sides
28B2 47       00911         LD      B,A             ;  and save it
28B3 FD7E08   00912         LD      A,(IY+8)        ;P/u # of grans/cyl
28B6 07       00913         RLCA
28B7 07       00914         RLCA                    ;  to bits 0-2
28B8 07       00915         RLCA
28B9 E607     00916         AND     7               ;Mask it
28BB 325529   00917         LD      (CYLGRN+1),A
28BE B0       00918         OR      B               ;Merge the two
28BF F688     00919         OR      88H             ;Data disk, new date style
28C1 32CD2E   00920         LD      (GATBUF+0CDH),A ;Stuff into GAT
              00921 ;
28C4 11F52E   00922         LD      DE,GATBUF+255-10        ;6.2 Media Data Block
28C7 21DB28   00923         LD      HL,LSIID        ;Point to header
28CA 010400   00924         LD      BC,04           ;Set length &
28CD EDB0     00925         LDIR                    ;  move it
28CF FDE5     00926         PUSH    IY              ;Get DCT address
28D1 E1       00927         POP     HL              ;  into HL
28D2 23       00928         INC     HL              ;Bypass the driver vector
28D3 23       00929         INC     HL
28D4 23       00930         INC     HL
28D5 0E07     00931         LD      C,7             ;Bytes to move
28D7 EDB0     00932         LDIR
28D9 1804     00933         JR      WRGAT1          ;Skip around string
              00934         IF      @BLD631
28DB 03       00935 LSIID   DB      03,'631'        ;<631>
     36 33 31 
              00936         ELSE
              00937 LSIID   DB      03,'LSI'
              00938         ENDIF
              00939 ;
              00940 ;       Write copy of GAT into 0/3
              00941 ;
              00942 WRGAT1
28DF 21002E   00943         LD      HL,GATBUF       ;Pt to GAT buffer
28E2 1600     00944         LD      D,0             ;Write it out to
28E4 1E03     00945         LD      E,3             ;Cyl 0, sector 3
28E6 CD172A   00946         CALL    WRSEC           ;Write 0/3
28E9 CC402A   00947         CALL    Z,WRDIR1        ;Verify after write
28EC C2A829   00948         JP      NZ,IOERR        ;Quit on error
              00949 ;
              00950 ;       Write the system information sector
              00951 ;
28EF 210030   00952         LD      HL,HITBUF       ;Zero out buffer
28F2 3600     00953 GSYS1   LD      (HL),0
28F4 2C       00954         INC     L
28F5 20FB     00955         JR      NZ,GSYS1
              00956         IF      @BLD631
              00957         ELSE
              00958         LD      HL,HITBUF       ;Set first byte to OSVER
              00959         ENDIF
28F7 3663     00960         LD      (HL),RLS        ;  for release number
28F9 2E20     00961         LD      L,20H           ;Point hl to AUTO buffer
28FB 360D     00962         LD      (HL),0DH        ;Put in terminator
28FD 110200   00963         LD      DE,2            ;Pt to cyl 0, sector 2
2900 6A       00964         LD      L,D             ;Hl now points to HITBUF
2901 CD172A   00965         CALL    WRSEC           ;Write 0/2
2904 CC402A   00966         CALL    Z,WRDIR1        ;Verify after write
              00967         IF      @BLD631
              00968         ELSE
              00969         JP      NZ,IOERR        ;Quit on error
              00970         ENDIF
2907 2E20     00971         LD      L,20H           ;Zero this out for use
2909 3600     00972         LD      (HL),0          ;  when writing HIT
              00973 ;
              00974 ;       Write out the directory GAT
              00975 ;
290B 21002E   00976         LD      HL,GATBUF       ;Pt to GAT sector buffer
290E FD5609   00977         LD      D,(IY+9)        ;P/u the dir cyl
2911 5D       00978         LD      E,L             ;Denote sector 0
              00979         IF      @BLD631
2912 CC3D2A   00980         CALL    Z,WRDIR         ;<631>Write the GAT
              00981         ELSE
              00982         CALL    WRDIR           ;Write the GAT
              00983         JP      NZ,IOERR
              00984         ENDIF
              00985 ;
              00986 ;       Construct the HIT
              00987 ;
2915 210030   00988         LD      HL,HITBUF       ;Point to the HIT buffer
2918 36A2     00989         LD      (HL),0A2H       ;Stuff BOOT/SYS hash code
291A 23       00990         INC     HL
291B 36C4     00991         LD      (HL),0C4H       ;Stuff DIR/SYS hash code
291D 2B       00992         DEC     HL
291E FD5609   00993         LD      D,(IY+9)        ;P/u dir cyl #
2921 1E01     00994         LD      E,1             ;Pt to sector 1
2923 CD3D2A   00995         CALL    WRDIR           ;Write the HIT
2926 C2A829   00996         JP      NZ,IOERR
2929 110030   00997         LD      DE,HITBUF       ;Establish buffer for
292C 21992A   00998         LD      HL,BOOTDIR      ;  dir records
292F 012000   00999         LD      BC,32           ;Move BOOT/SYS dir record
2932 EDB0     01000         LDIR                    ;  into 1st slot
2934 FD5609   01001         LD      D,(IY+9)        ;P/u dir cyl
2937 1E02     01002         LD      E,2             ;This will be sector 2
2939 210030   01003         LD      HL,HITBUF       ;Pt to buffer start
293C CD3D2A   01004         CALL    WRDIR           ;Write the sector
293F C2A829   01005         JP      NZ,IOERR
2942 3AE42A   01006         LD      A,(SECCYL)      ;P/u # of records
              01007         IF      @BLD631
              01008         ELSE
              01009         LD      (DIRDIR+14H),A  ;  & stuff into DIR/SYS
              01010         ENDIF
2945 B7       01011         OR      A               ;Are recs=256?
              01012         IF      @BLD631
2946 2804     01013         JR      Z,L294C         ;<631>
2948 FE23     01014         CP      '#'             ;<631>
294A 3802     01015         JR      C,L294E         ;<631>
294C 3E22     01016 L294C:  LD      A,22H           ;<631>
294E 21E42A   01017 L294E:  LD      HL,SECCYL       ;<631>
2951 32CD2A   01018         LD      (DIRDIR+14H),A  ;<631> set lsb of ERN
              01019         ELSE
              01020         JR      NZ,CYLGRN       ;Go if not
              01021         INC     A
              01022         LD      (DIRDIR+15H),A  ;  else stuff msb of ERN
              01023         ENDIF
2954 3E00     01024 CYLGRN  LD      A,0             ;P/u # grans/cyl
2956 FDCB046E 01025         BIT     5,(IY+4)        ;Test 2-sided
295A 2802     01026         JR      Z,$+4
295C 87       01027         ADD     A,A             ;Double count on 2-sided
295D 3C       01028         INC     A               ;Plus 1 for 0 offset adj
295E 32D02A   01029         LD      (DIRDIR+17H),A  ;Stuf in DIR/SYS
2961 FD7E09   01030         LD      A,(IY+9)        ;P/u the dir cyl # &
2964 32CF2A   01031         LD      (DIRDIR+16H),A  ;  stuff into the DIR rec
2967 21B92A   01032         LD      HL,DIRDIR       ;Pt to start of DIR data
296A 110030   01033         LD      DE,HITBUF       ;Pt to start of dir buf
296D 012000   01034         LD      BC,32           ;Move DIR/SYS into buf
2970 EDB0     01035         LDIR
2972 FD5609   01036         LD      D,(IY+9)        ;P/u dir cyl #
2975 1E03     01037         LD      E,3             ;Write as sector 3
2977 210030   01038         LD      HL,HITBUF       ;Pt to start of buffer
297A CD3D2A   01039         CALL    WRDIR           ;Write the sector
297D 2029     01040         JR      NZ,IOERR
297F 210030   01041         LD      HL,HITBUF       ;Zero the 1st 32 bytes
2982 0620     01042         LD      B,32            ;  of the buffer to clear
2984 3600     01043 GSYS2   LD      (HL),0          ;Where we stuffed the
2986 23       01044         INC     HL              ;  BOOT & DIR dir records
2987 10FB     01045         DJNZ    GSYS2
2989 FD5609   01046         LD      D,(IY+9)        ;P/u dir cyl #
298C 1E04     01047         LD      E,4             ;Cont writing at sect 4
298E 210030   01048 GSYS3   LD      HL,HITBUF       ;Pt to start of buffer
2991 CD3D2A   01049         CALL    WRDIR           ;Write the sector
2994 2012     01050         JR      NZ,IOERR
              01051 ;
              01052 ;       Write the remaining directory
              01053 ;
2996 1C       01054         INC     E               ;Bump the sector pointer
2997 3AE42A   01055         LD      A,(SECCYL)      ;P/u highest # sector
299A BB       01056         CP      E               ;Are we finished yet?
299B 20F1     01057         JR      NZ,GSYS3        ;Loop if not
299D CDE529   01058         CALL    EXIT2           ;Get system disk
29A0          01059         @@DSPLY FMTCAO$         ;"formatting complete...
              01060         IFEQ    01H,1
29A0+210A2D   01061         LD      HL,FMTCAO$
              01062         ENDIF
29A3+3E0A     01063         LD      A,10
29A5+EF       01064         RST     40
29A6 1823     01065         JR      EXIT
              01066 ;
              01067 ;       Exit procedures
              01068 ;
29A8 F5       01069 IOERR   PUSH    AF              ;Save errcod
29A9 CDE529   01070         CALL    EXIT2           ;Interrupts on if needed
29AC F1       01071         POP     AF              ;Rcvr errcod
29AD FE3F     01072         CP      63              ;Extended errror?
29AF 280E     01073         JR      Z,EXTERR        ;Go if so
29B1 6F       01074         LD      L,A             ;Error code to HL
29B2 2600     01075         LD      H,0
29B4 F6C0     01076         OR      0C0H            ;Mask to ABORT with brief
29B6 4F       01077         LD      C,A             ;Error code to C
29B7          01078         @@ERROR                 ;  for error display
29B7+3E1A     01079         LD      A,26
29B9+EF       01080         RST     40
29BA 180C     01081         JR      ERREXIT
              01082 ;
29BC          01083 BREAK   EQU     $
29BC 21202D   01084 FMTABT  LD      HL,FMTABT$      ;"Command aborted
29BF          01085 EXTERR  @@LOGOT                 ;Some error to abort job
              01086         IFEQ    00H,1
              01087         LD      HL,
              01088         ENDIF
29BF+3E0C     01089         LD      A,12
29C1+EF       01090         RST     40
29C2 CDE529   01091         CALL    EXIT2           ;Get system disk
29C5 21FFFF   01092         LD      HL,-1           ;Set abort code
29C8 22CC29   01093 ERREXIT LD      (RETCOD),HL
29CB 210000   01094 EXIT    LD      HL,0            ;Init to no error
29CC          01095 RETCOD  EQU     $-2
29CE E5       01096         PUSH    HL
29CF FDE5     01097         PUSH    IY              ;Transfer the saved
29D1 D1       01098         POP     DE              ;  system DCT back
29D2 21D92A   01099         LD      HL,SYSDCT       ;  into the system
29D5 010A00   01100         LD      BC,10           ;  DCT slot
29D8 EDB0     01101         LDIR
29DA CD032A   01102         CALL    RESTOR          ;Match DCT and drive
29DD E1       01103         POP     HL
29DE 310000   01104 SPSAV   LD      SP,$-$          ;P/u the stack pointer
29E1          01105         @@CKBRKC                ;Clear break bit
29E1+3E6A     01106         LD      A,106
29E3+EF       01107         RST     40
29E4 C9       01108         RET                     ;  & exit to caller
              01109 ;
29E5 3A272A   01110 EXIT2   LD      A,(FMTDRV+1)    ;P/u drive # just fmtd
29E8 3C       01111         INC     A               ;If drive never entered,
29E9 C8       01112         RET     Z               ;  just return
29EA 3D       01113         DEC     A               ;If 0, we need a system
29EB 200D     01114         JR      NZ,EXIT4
29ED 21EB2C   01115         LD      HL,PMTSYS$      ;"load system disk...
29F0          01116         @@DSPLY
              01117         IFEQ    00H,1
              01118         LD      HL,
              01119         ENDIF
29F0+3E0A     01120         LD      A,10
29F2+EF       01121         RST     40
29F3          01122 EXIT3   @@KEY                   ;Request a key
29F3+3E01     01123         LD      A,1
29F5+EF       01124         RST     40
29F6 FE0D     01125         CP      CR              ;Must be 
29F8 20F9     01126         JR      NZ,EXIT3
29FA 1807     01127 EXIT4   JR      RESTOR          ;Restore disk to cyl 0
              01128 ;
              01129 ;       Disk I/O requests
              01130 ;
              01131         IF      @BLD631
29FC AF       01132 DRVNOP: XOR     A               ;<631>
29FD 1826     01133         JR      SAVBC           ;<631>
29FF 3E01     01134 SELECT: LD      A,1             ;<631>
2A01 1822     01135         JR      SAVBC           ;<631>
2A03 3E04     01136 RESTOR: LD      A,4             ;<631>
2A05 181E     01137         JR      SAVBC           ;<631>
2A07 3E05     01138 STEPIN: LD      A,5             ;<631>
2A09 181A     01139         JR      SAVBC           ;<631>
2A0B 3E07     01140 RSELCT: LD      A,7             ;<631>
2A0D 1816     01141         JR      SAVBC           ;<631>
2A0F 3E0F     01142 WRCYL:  LD      A,15            ;<631>
2A11 1812     01143         JR      SAVBC           ;<631>
2A13 3E0C     01144 FMTHD:  LD      A,12            ;<631>
2A15 180E     01145         JR      SAVBC           ;<631>
2A17 3E0D     01146 WRSEC:  LD      A,13            ;<631>
2A19 180A     01147         JR      SAVBC           ;<631>
2A1B 3E0E     01148 WRSYS:  LD      A,14            ;<631>
2A1D 1806     01149         JR      SAVBC           ;<631>
2A1F 3E09     01150 RDSEC:  LD      A,9             ;<631>
2A21 1802     01151         JR      SAVBC           ;<631>
2A23 3E0A     01152 VERSEC: LD      A,10            ;<631>
2A25 C5       01153 SAVBC:  PUSH    BC              ;<631>
2A26 0EFF     01154 FMTDRV: LD      C,-1            ;<631>P/u drive #
              01155         ELSE
              01156 DRVNOP  PUSH    BC
              01157         XOR     A
              01158         JR      FMTDRV
              01159 SELECT  PUSH    BC
              01160         LD      A,1
              01161         JR      FMTDRV
              01162 RESTOR  PUSH    BC
              01163         LD      A,4
              01164         JR      FMTDRV
              01165 STEPIN  PUSH    BC
              01166         LD      A,5
              01167         JR      FMTDRV
              01168 RSELCT  PUSH    BC
              01169         LD      A,7
              01170         JR      FMTDRV
              01171 WRCYL   PUSH    BC
              01172         LD      A,15
              01173         JR      FMTDRV
              01174 FMTHD   PUSH    BC
              01175         LD      A,12
              01176         JR      FMTDRV
              01177 WRSEC   PUSH    BC
              01178         LD      A,13
              01179         JR      FMTDRV
              01180 WRSYS   PUSH    BC
              01181         LD      A,14
              01182         JR      FMTDRV
              01183 RDSEC   PUSH    BC
              01184         LD      A,9
              01185         JR      FMTDRV
              01186 VERSEC  PUSH    BC
              01187         LD      A,10
              01188 FMTDRV  LD      C,-1            ;P/u drive #
              01189         ENDIF
2A28 C628     01190         ADD     A,40            ;Adjust SVC #
2A2A EF       01191         RST     40
2A2B C1       01192         POP     BC
2A2C C9       01193         RET
              01194 ;
              01195 ;       Perform a verification to ensure system sector
              01196 ;
2A2D CD232A   01197 VERSYS  CALL    VERSEC          ;Sector verify
2A30 2806     01198         JR      Z,VERS1         ;Bypass if not system
2A32 D606     01199         SUB     6               ;Test read system retcod
2A34 C8       01200         RET     Z               ;Go if that's what it was
2A35 C606     01201         ADD     A,6             ;Restore orig retcod
2A37 C9       01202         RET
2A38 F601     01203 VERS1   OR      1               ;S/b system, found data
2A3A 3E00     01204         LD      A,0
2A3C C9       01205         RET
              01206 ;
2A3D CD1B2A   01207 WRDIR   CALL    WRSYS           ;Write the DIR sector
2A40 C42D2A   01208 WRDIR1  CALL    NZ,VERSYS       ;Verify after write
2A43 C0       01209         RET     NZ
2A44 D5       01210         PUSH    DE
2A45 0E2E     01211         LD      C,'.'           ;Display a period
2A47          01212         @@DSP                   ;  for every sector written
2A47+3E02     01213         LD      A,2
2A49+EF       01214         RST     40
2A4A D1       01215         POP     DE
2A4B C9       01216         RET
              01217 ;
              01218 ;       Routine to convert reg A to 2 decimal digits
              01219 ;
2A4C 0E30     01220 CVDEC   LD      C,30H           ;Init msd to 0
2A4E D60A     01221 CVD1    SUB     10              ;Sub 10 until underflow
2A50 3803     01222         JR      C,CVD2
2A52 0C       01223         INC     C               ;Inc the count
2A53 18F9     01224         JR      CVD1
2A55 C63A     01225 CVD2    ADD     A,3AH           ;Add back 10 + '0'
2A57 47       01226         LD      B,A             ;Lsd to B
2A58 C9       01227         RET
              01228 ;
              01229 ;       Routines to convert input strings to UC
              01230 ;       HL => Prompt string
              01231 ;
2A59          01232 GET3    @@DSPLY                 ;Display the prompt
              01233         IFEQ    00H,1
              01234         LD      HL,
              01235         ENDIF
2A59+3E0A     01236         LD      A,10
2A5B+EF       01237         RST     40
2A5C 010003   01238         LD      BC,3<8          ;Init 3 keys max
2A5F 1803     01239         JR      $+5
2A61 010008   01240 GET8    LD      BC,8<8          ;8-chars max
2A64 210030   01241         LD      HL,HITBUF       ;Buffer area
2A67          01242 GET8A   @@KEYIN                 ;Enter them
2A67+3E09     01243         LD      A,9
2A69+EF       01244         RST     40
2A6A DABC29   01245         JP      C,FMTABT        ;Quit on Break
2A6D 78       01246         LD      A,B             ;Get length of response
2A6E B7       01247         OR      A
2A6F C8       01248         RET     Z               ;Back if Enter only
              01249 ;
              01250 ;       Routine to convert n-character string to UC
              01251 ;
2A70 F5       01252         PUSH    AF              ;Save the registers
2A71 C5       01253         PUSH    BC
2A72 E5       01254         PUSH    HL
2A73 7E       01255 GETUC   LD      A,(HL)          ;P/u a char
2A74 FE61     01256         CP      'a'             ;Skip if below 'a'
2A76 3806     01257         JR      C,GETUC1
2A78 FE7B     01258         CP      'z'+1           ;  or above 'z'
2A7A 3002     01259         JR      NC,GETUC1
2A7C CBAE     01260         RES     5,(HL)          ;  else convert to UC
2A7E 23       01261 GETUC1  INC     HL              ;Bump the buffer ptr
2A7F 10F2     01262         DJNZ    GETUC           ;Loop thru all chars
2A81 E1       01263         POP     HL
2A82 C1       01264         POP     BC
2A83 F1       01265         POP     AF
2A84 C9       01266         RET
              01267 ;
              01268 ;       Routine to display the cylinder number
              01269 ;
2A85 C5       01270 DSPCYL  PUSH    BC              ;Save ASCII cylinder #
2A86 0E08     01271         LD      C,8             ;Back up twice &
2A88          01272         @@DSP                   ;  output new position
2A88+3E02     01273         LD      A,2
2A8A+EF       01274         RST     40
2A8B 0E08     01275         LD      C,8
2A8D          01276         @@DSP
2A8D+3E02     01277         LD      A,2
2A8F+EF       01278         RST     40
2A90 C1       01279         POP     BC              ;Recover cyl #
2A91          01280         @@DSP                   ;Send MSD
2A91+3E02     01281         LD      A,2
2A93+EF       01282         RST     40
2A94 48       01283         LD      C,B
2A95          01284         @@DSP                   ;Send LSD
2A95+3E02     01285         LD      A,2
2A97+EF       01286         RST     40
2A98 C9       01287         RET
              01288 ;
              01289 ;       Formatting data and tables
              01290 ;
              01291         IF      @BLD631
2A99 5E       01292 BOOTDIR DB      5EH,0,0,0,0,'BOOT    SYS',0F4H,71H      ;<631>
     00 00 00 00 42 4F 4F 54
     20 20 20 20 53 59 53 F4
     71 
              01293         ELSE
              01294 BOOTDIR DB      5EH,0,0,0,0,'BOOT    SYS',0F6H,37H
              01295         ENDIF
2AAB 00       01296         DB      0,0,5,0,0,0,0FFH,0FFH,-1,-1,-1,-1,-1,-1
     00 05 00 00 00 FF FF FF
     FF FF FF FF FF 
              01297         IF      @BLD631
2AB9 5D       01298 DIRDIR  DB      5DH,0,0,0,0,'DIR     SYS',0F4H,71H      ;<631>
     00 00 00 00 44 49 52 20
     20 20 20 20 53 59 53 F4
     71 
              01299         ELSE
              01300 DIRDIR  DB      5DH,0,0,0,0,'DIR     SYS',0F6H,37H
              01301         ENDIF
2ACB 96       01302         DB      96H,42H,10,0,11H,1,0FFH,0FFH,0,0,0,0,0,0
     42 0A 00 11 01 FF FF 00
     00 00 00 00 00 
2AD9          01303 SYSDCT  DS      10
2AE3 00       01304 STEPDFT DB      0               ;Boot step rate default
2AE4          01305 SECCYL  DS      1               ;# of sectors per cyl
2AE5          01306 SECTRK  DS      1               ;# of sectors per trk
              01307 ;
              01308 ;       Single density 5" format table
              01309 ;
2AE6 0A       01310 S5TBL   DB      10,7
     07 
2AE8 00       01311         DB      0,5,1,6,2,7,3,8,4,9
     05 01 06 02 07 03 08 04
     09 
2AF2 F6       01312         DB      -10,-10,-10,-10,-10,-10,-10,-10,14,0FFH
     F6 F6 F6 F6 F6 F6 F6 0E
     FF 
2AFC F1       01313         DB      0F1H,6,0,1,0FEH
     06 00 01 FE 
2B01 F3       01314         DB      0F3H,3,0,1,1,1,0F7H,1,0FFH,11,0FFH
     03 00 01 01 01 F7 01 FF
     0B FF 
2B0C 06       01315         DB      6,0,1,0FBH,0,0E5H,1,0F7H,1,0FFH,13,0FFH
     00 01 FB 00 E5 01 F7 01
     FF 0D FF 
2B18 F2       01316         DB      0F2H,47H,0FFH,0F4H
     47 FF F4 
2B1C 00       01317         DB      0,1,2,3,4,5,6,7,8,9
     01 02 03 04 05 06 07 08
     09 
              01318 ;
              01319 ;       Double density 5" format table
              01320 ;
2B26 12       01321 D5TBL   DB      18,10
     0A 
2B28 00       01322         DB      0,9,1,10,2,11,3,12,4
     09 01 0A 02 0B 03 0C 04
2B31 0D       01323         DB      13,5,14,6,15,7,16,8,17
     05 0E 06 0F 07 10 08 11
2B3A EE       01324         DC      11,-18
     EE EE EE EE EE EE EE EE
     EE EE 
2B45 20       01325         DB      32,4EH
     4E 
2B47 F1       01326         DB      0F1H,12,0,3,0F5H,1,0FEH
     0C 00 03 F5 01 FE 
2B4E F3       01327         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 
2B5B 01       01328         DB      1,0FBH,0F5H,128,6DH,0B6H
     FB F5 80 6D B6 
2B61 01       01329         DB      1,0F7H,1,4EH,23,04EH
     F7 01 4E 17 4E 
2B67 F2       01330         DB      0F2H,182,4EH,0F4H
     B6 4E F4 
2B6B 00       01331         DB      0,1,2,3,4,5,6,7,8,9
     01 02 03 04 05 06 07 08
     09 
2B75 0A       01332         DB      10,11,12,13,14,15,16,17
     0B 0C 0D 0E 0F 10 11 
              01333 ;
              01334 ;       Single density 8" format table
              01335 ;
2B7D 10       01336 S8TBL   DB      16,2
     02 
2B7F 0A       01337         DB      10,5,0,11,6,1,12,7,2,13,8,3,14,9,4,15
     05 00 0B 06 01 0C 07 02
     0D 08 03 0E 09 04 0F 
2B8F F0       01338         DB      -16,-16,-16,28H,0FFH
     F0 F0 28 FF 
2B94 F1       01339         DB      0F1H,6,0,1,0FEH
     06 00 01 FE 
2B99 F3       01340         DB      0F3H,3,0,1,1,1,0F7H,11,0FFH,6,0,1,0FBH
     03 00 01 01 01 F7 0B FF
     06 00 01 FB 
2BA6 00       01341         DB      0,0E5H,1,0F7H,1,0FFH,20,0FFH
     E5 01 F7 01 FF 14 FF 
2BAE F2       01342         DB      0F2H,208,0FFH,0F4H
     D0 FF F4 
2BB2 0A       01343         DB      10,0,6,12,2,8,14,4,5,11,1,7,13,3,9,15
     00 06 0C 02 08 0E 04 05
     0B 01 07 0D 03 09 0F 
              01344 ;
              01345 ;       Double density 8" format table
              01346 ;
2BC2 1E       01347 D8TBL   DB      30,12
     0C 
2BC4 00       01348         DB      0,10,20,1,11,21,2,12,22,3,13,23,4,14,24
     0A 14 01 0B 15 02 0C 16
     03 0D 17 04 0E 18 
2BD3 05       01349         DB      5,15,25,6,16,26,7,17,27,8,18,28,9,19,29
     0F 19 06 10 1A 07 11 1B
     08 12 1C 09 13 1D 
2BE2 E2       01350         DC      13,-30
     E2 E2 E2 E2 E2 E2 E2 E2
     E2 E2 E2 E2 
2BEF 14       01351         DB      20,4EH
     4E 
2BF1 F1       01352         DB      0F1H,0CH,0,3,0F5H,1,0FEH
     0C 00 03 F5 01 FE 
2BF8 F3       01353         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 
2C05 01       01354         DB      1,0FBH,0F5H,128,6DH,0B6H
     FB F5 80 6D B6 
2C0B 01       01355         DB      1,0F7H,1,0FFH,17,4EH
     F7 01 FF 11 4E 
2C11 F2       01356         DB      0F2H,0,4EH,61,4EH,0F4H
     00 4E 3D 4E F4 
2C17 00       01357         DB      0,20,11,2,22,13,4,24,15,6,26,17,8,28,19
     14 0B 02 16 0D 04 18 0F
     06 1A 11 08 1C 13 
2C26 0A       01358         DB      10,1,21,12,3,23,14,5,25,16,7,27,18,9,29
     01 15 0C 03 17 0E 05 19
     10 07 1B 12 09 1D 
              01359 ;
2C35 1D       01360 FMTCYL$ DB      29,'Formatting cylinder   ',3
     46 6F 72 6D 61 74 74 69
     6E 67 20 63 79 6C 69 6E
     64 65 72 20 20 20 03 
2C4D 1D       01361 VERCYL$ DB      29,'Verifying  cylinder   ',3
     56 65 72 69 66 79 69 6E
     67 20 20 63 79 6C 69 6E
     64 65 72 20 20 20 03 
2C65 2A       01362 STAR$   DB      '*   ',3
     20 20 20 03 
2C6A 46       01363 FMTG$   DB      'Formatting...',CR
     6F 72 6D 61 74 74 69 6E
     67 2E 2E 2E 0D 
2C78 4E       01364 NOCYL$  DB      'No cylinders available for directory',CR
     6F 20 63 79 6C 69 6E 64
     65 72 73 20 61 76 61 69
     6C 61 62 6C 65 20 66 6F
     72 20 64 69 72 65 63 74
     6F 72 79 0D 
2C9D 44       01365 DIRCYL$ DB      'Directory will be placed on cylinder '
     69 72 65 63 74 6F 72 79
     20 77 69 6C 6C 20 62 65
     20 70 6C 61 63 65 64 20
     6F 6E 20 63 79 6C 69 6E
     64 65 72 20 
2CC2 30       01366 DIRASC$ DB      '00',CR
     30 0D 
2CC5 0A       01367 IPLSYS$ DB      LF,'Initializing DIRECTORY information: ',3
     49 6E 69 74 69 61 6C 69
     7A 69 6E 67 20 44 49 52
     45 43 54 4F 52 59 20 69
     6E 66 6F 72 6D 61 74 69
     6F 6E 3A 20 03 
2CEB 0A       01368 PMTSYS$ DB      LF,'Load SYSTEM diskette  ',CR
     4C 6F 61 64 20 53 59 53
     54 45 4D 20 64 69 73 6B
     65 74 74 65 20 20 3C 45
     4E 54 45 52 3E 0D 
2D0A 0A       01369 FMTCAO$ DB      LF,LF,'Formatting complete',CR
     0A 46 6F 72 6D 61 74 74
     69 6E 67 20 63 6F 6D 70
     6C 65 74 65 0D 
2D20 0A       01370 FMTABT$ DB      LF,'Command aborted',CR
     43 6F 6D 6D 61 6E 64 20
     61 62 6F 72 74 65 64 0D
2D31 0A       01371 NOTFMT$ DB      LF,'Can''t, Diskette not formatted',CR
     43 61 6E 27 74 2C 20 44
     69 73 6B 65 74 74 65 20
     6E 6F 74 20 66 6F 72 6D
     61 74 74 65 64 0D 
              01372 ;
              01373 ;       Patch area
              01374 ;
2E00          01375         ORG     $<-8+1<+8
2E00          01376 GATBUF  DS      203             ;GAT sector buffer
2ECB 63       01377         DB      RLS,0,0,0,0     ;Ver, cyl exc, type, pswd
     00 00 00 00 
2ED0 20       01378         DB      '        MM/DD/YY'
     20 20 20 20 20 20 20 4D
     4D 2F 44 44 2F 59 59 
2EE0 00       01379         DC      32,0
     00 00 00 00 00 00 00 00
     00 00 00 00 00 00 00 00
     00 00 00 00 00 00 00 00
     00 00 00 00 00 00 00 
2F00          01380 BOOT    EQU     $
2F00          01381 CORE$   DEFL    $
4300          01382         ORG     4300H           ;Execute at ROM BOOT
4300          01383         LORG    CORE$           ;  but load here
4300 00       01384         NOP
4301 FE00     01385         CP      0               ;P/u the DIR track
              01386 ;
              01387         IF      @MOD2
              01388         DB      83H
              01389         ENDIF
              01390         IF      @MOD4
4303 F3       01391         DI
              01392         ENDIF
4304 00       01393         DC      12,0
     00 00 00 00 00 00 00 00
     00 00 00 
4310 118DFB   01394         LD      DE,80*11+CRT4+29        ;Mod 4 video locn
4313 212943   01395         LD      HL,DATADSK$     ;Xfer error to vidmem
4316 011700   01396         LD      BC,STRLEN
4319 EDB0     01397         LDIR
431B 11153E   01398         LD      DE,64*8+CRT3+21 ;Mod 3 video locn
431E 212943   01399         LD      HL,DATADSK$     ;Xfer error to vidmem
4321 011700   01400         LD      BC,STRLEN
4324 EDB0     01401         LDIR
4326 C32643   01402 STOP    JP      STOP
4329 43       01403 DATADSK$        DB      'Cannot boot, DATA DISK!'
     61 6E 6E 6F 74 20 62 6F
     6F 74 2C 20 44 41 54 41
     20 44 49 53 4B 21 
0017          01404 STRLEN  EQU     $-DATADSK$
4340 00       01405         DC      -$&0FFH,0
     00 00 00 00 00 00 00 00
     00 00 00 00 00 00 00 00
     00 00 00 00 00 00 00 00
     00 00 00 00 00 00 00 00
     00 00 00 00 00 00 00 00
     00 00 00 00 00 00 00 00
     00 00 00 00 00 00 00 00
     00 00 00 00 00 00 00 00
     00 00 00 00 00 00 00 00
     00 00 00 00 00 00 00 00
     00 00 00 00 00 00 00 00
     00 00 00 00 00 00 00 00
     00 00 00 00 00 00 00 00
     00 00 00 00 00 00 00 00
     00 00 00 00 00 00 00 00
     00 00 00 00 00 00 00 00
     00 00 00 00 00 00 00 00
     00 00 00 00 00 00 00 00
     00 00 00 00 00 00 00 00
     00 00 00 00 00 00 00 00
     00 00 00 00 00 00 00 00
     00 00 00 00 00 00 00 00
     00 00 00 00 00 00 00 00
     00 00 00 00 00 00 00 
4400          01406 SAFESP  EQU     $
3000          01407         ORG     CORE$+256
3000          01408         LORG    CORE$+256
3000          01409 HITBUF  DS      256
              01410 ;
3100          01413 *GET    FORMAT2:3
              01414 ;FORMAT2/ASM - Format Initialization Code
              01415 ;
              01416 ;       FORMAT routine entry point
              01417 ;
              01418 FORMAT
3100          01419         @@CKBRKC                ;Check for break
3100+3E6A     01420         LD      A,106
3102+EF       01421         RST     40
3103 2804     01422         JR      Z,FORMATA       ;Continue if no break
3105 21FFFF   01423         LD      HL,-1           ;  else abort
3108 C9       01424         RET
              01425 ;
3109 ED73DF29 01426 FORMATA LD      (SPSAV+1),SP    ;Save the stack pointer
310D E5       01427         PUSH    HL              ;Save cmdline ptr
310E          01428         @@DSPLY HELLO$          ;Hello message
              01429         IFEQ    01H,1
310E+21BE36   01430         LD      HL,HELLO$
              01431         ENDIF
3111+3E0A     01432         LD      A,10
3113+EF       01433         RST     40
3114 CD5036   01434         CALL    GETSYS2         ;Load SYS2 overlay
              01435 ;
              01436 ;       Read config sector & extract DCT # cyls
              01437 ;
              01438         IF      @MOD4
3117 110200   01439         LD      DE,2            ;Track 0, sector 2
311A 4A       01440         LD      C,D             ;Drive 0
              01441         ENDIF
              01442 ;
              01443         IF      @MOD2
              01444         LD      C,0             ;Drive 0
              01445         @@GTDCT                 ;Fetch DCT
              01446         LD      A,(IY+3)        ;Get dct data
              01447         AND     28H             ;Bit 5/3
              01448         CP      20H             ;8" floppy?
              01449         JR      NZ,SETSYS1      ;Go if not
              01450         LD      A,(IY+4)        ;Get data
              01451         AND     50H             ;Bit 6/4
              01452         CP      40H             ;DD not alien?
              01453         JR      NZ,SETSYS1      ;Go if not
              01454         LD      HL,HITBUF       ;Init buffer
              01455         LD      D,(IY+9)        ;Get dir cyl
              01456         LD      E,0             ;Init GAT table
              01457         @@RDSEC                 ;Read GAT table
              01458         CP      6               ;Directory read?
              01459         JP      NZ,IOERR        ;Go on disk error
              01460         LD      A,(HITBUF+0CDH) ;Get data byte
              01461         BIT     7,A             ;System disk?
              01462 SETSYS1 LD      DE,0<8+2        ;Init cyl 0
              01463         JR      NZ,$+3          ;Go if not system
              01464         INC     D               ;Else on cyl 1
              01465         LD      C,0             ;Drive 0
              01466         ENDIF
              01467 ;
311B 210030   01468         LD      HL,HITBUF       ;Set disk buffer
311E          01469         @@RDSEC                 ;Read sysinfo sector
311E+3E31     01470         LD      A,49
3120+EF       01471         RST     40
3121 C2A829   01472         JP      NZ,IOERR        ;Quit on read error
3124 2E76     01473         LD      L,70H+6         ;Pt to default DCTs
              01474 ;
              01475 ;       Establish the default BOOT step rate
              01476 ;
3126 E5       01477         PUSH    HL              ;Pt IY to the
3127 FDE1     01478         POP     IY              ;  start of the DCTs
3129 FD7EFD   01479         LD      A,(IY+3-6)      ;P/u DCT$ default step
312C E603     01480         AND     3               ;  & strip off
312E 329731   01481         LD      (STEPARM+1),A   ;Keep for Step parm
              01482 ;
              01483 ;       Keep cyl count on all 8 drives
              01484 ;
3131 0608     01485         LD      B,8
3133 DD211D36 01486         LD      IX,DCTCYL       ;Pt to where to stuff
3137 110A00   01487         LD      DE,10           ;  10-byte increments
313A 7E       01488 DCTLP1  LD      A,(HL)          ;P/u default # CYL
313B DD7700   01489         LD      (IX),A          ;Save in table
313E DD23     01490         INC     IX
3140 19       01491         ADD     HL,DE
3141 10F7     01492         DJNZ    DCTLP1          ;Loop for 8 DCTs
              01493 ;
3143 E1       01494         POP     HL              ;Rcvr ptr to cmdline
3144 7E       01495 FMT1    LD      A,(HL)          ;Ignore spaces
3145 23       01496         INC     HL
3146 FE20     01497         CP      ' '
3148 28FA     01498         JR      Z,FMT1
314A FE3A     01499         CP      ':'             ;Colon drive indicator?
314C 281F     01500         JR      Z,FMT2          ;Go on drive entry
              01501 ;
              01502 ;       Drive not entered, prompt for it
              01503 ;
314E 2B       01504         DEC     HL              ;Backspace command line
314F 2B       01505         DEC     HL              ;  & adjust for next INC
3150 E5       01506         PUSH    HL              ;Save pointer
3151          01507 WHDRV   @@DSPLY WHDRV$          ;"which drive...
              01508         IFEQ    01H,1
3151+216A37   01509         LD      HL,WHDRV$
              01510         ENDIF
3154+3E0A     01511         LD      A,10
3156+EF       01512         RST     40
3157 210030   01513         LD      HL,HITBUF       ;Input buffer for now
315A 010001   01514         LD      BC,1<8          ;Max 1 char
315D          01515         @@KEYIN                 ;Get a 1-char line
315D+3E09     01516         LD      A,9
315F+EF       01517         RST     40
3160 DABC29   01518         JP      C,FMTABT        ;Quit on Break
3163 7E       01519         LD      A,(HL)          ;P/u the entry
3164 D630     01520         SUB     '0'             ;Cvrt to binary
3166 FE08     01521         CP      8               ;Error if > 7
3168 30E7     01522         JR      NC,WHDRV
316A E1       01523         POP     HL              ;Rcvr command pointer
316B 1808     01524         JR      FMT2A
              01525 ;
              01526 ;       Drive entered
              01527 ;
316D 7E       01528 FMT2    LD      A,(HL)          ;P/u drive #
316E D630     01529         SUB     '0'             ;Cvrt to ASCII
3170 FE08     01530         CP      8               ;Make sure not > 7
3172 D24B36   01531         JP      NC,PRMERR
3175 32272A   01532 FMT2A   LD      (FMTDRV+1),A    ;Stuff drive
3178 23       01533         INC     HL              ;Bump cmdline ptr
3179 115C36   01534         LD      DE,PRMTBL$      ;Parse any parameters
317C          01535         @@PARAM
317C+3E11     01536         LD      A,17
317E+EF       01537         RST     40
317F C24B36   01538         JP      NZ,PRMERR       ;Jump on parm error
              01539 ;
              01540 ;       Test if any other parm was entered
              01541 ;
3182 110000   01542 SDPARM  LD      DE,0            ;Single density parm
3185 7A       01543         LD      A,D
3186 B3       01544         OR      E               ;Merge all theses parms
3187 110000   01545 DDPARM  LD      DE,0            ;Double density parm
318A B2       01546         OR      D
318B B3       01547         OR      E
318C 110000   01548 SIDES   LD      DE,0            ;Sides parm
318F B2       01549         OR      D
3190 B3       01550         OR      E
3191 110000   01551 CPARM   LD      DE,0            ;Cylinder parm
3194 B2       01552         OR      D
3195 B3       01553         OR      E
3196 1100FF   01554 STEPARM LD      DE,0FF00H       ;Init to show if entry
3199 14       01555         INC     D               ;Did user enter it?
319A B2       01556         OR      D               ;0=no user entry
319B 32B032   01557         LD      (PRMMRG+1),A    ;Set to non-zero if any
              01558 ;
              01559 ;       If Q-parm, then set NAME & MPW if not entered
              01560 ;
319E ED5BB532 01561         LD      DE,(QPARM+1)    ;P/u Query parm
31A2 2AEB31   01562         LD      HL,(NPARM+1)    ;P/u Name parm
31A5 7C       01563         LD      A,H
31A6 B5       01564         OR      L
31A7 2004     01565         JR      NZ,$+6          ;Go if user entered name
31A9 ED53EB31 01566         LD      (NPARM+1),DE    ;  else use Q-parm value
31AD 2A3B32   01567         LD      HL,(MPARM+1)    ;P/u Password parm
31B0 7C       01568         LD      A,H
31B1 B5       01569         OR      L
31B2 2004     01570         JR      NZ,$+6          ;Go if user entered password
31B4 ED533B32 01571         LD      (MPARM+1),DE    ;Set to Q-parm entry
              01572 ;
31B8 3A272A   01573         LD      A,(FMTDRV+1)    ;P/u drive
31BB 4F       01574         LD      C,A             ;Set in drive register
31BC 211D36   01575         LD      HL,DCTCYL       ;Find default # cyls
31BF 85       01576         ADD     A,L             ;Index the DCTCYL table
31C0 6F       01577         LD      L,A             ;  according to drive #
31C1 8C       01578         ADC     A,H
31C2 95       01579         SUB     L
31C3 67       01580         LD      H,A
31C4 7E       01581         LD      A,(HL)          ;P/u cylinder count
31C5 3C       01582         INC     A               ;Offset from 1
31C6 324133   015839         LD      (PCYL2+1),A     ;Stuff default for 5"
31C9          01584         @@GTDCT                 ;Find the DCT pointer
31C9+3E51     01585         LD      A,81
31CB+EF       01586         RST     40
31CC FDE5     01587         PUSH    IY
31CE E1       01588         POP     HL              ;Xfer DCT to HL
31CF 11D92A   01589         LD      DE,SYSDCT       ;Save the system's DCT
31D2 010A00   01590         LD      BC,10           ;  for the drive since
31D5 EDB0     01591         LDIR                    ;  we are altering it
31D7 3A1C26   01592         LD      A,(SYSPRM+1)    ;Check if "SYSTEM" parm
31DA 3C       01593         INC     A               ; entered
31DB 2007     01594         JR      NZ,FMT2B        ;Go if not
31DD FDCB035E 01595         BIT     3,(IY+3)        ;Check if hard drive
31E1 CA4536   01596         JP      Z,NOTHARD       ;Can't "SYSTEM" floppy
31E4 CDFC29   01597 FMT2B   CALL    DRVNOP          ;Test if drive enabled
31E7 C2A829   01598         JP      NZ,IOERR
31EA 210000   01599 NPARM   LD      HL,0            ;NAME parm entered?
31ED 7C       01600         LD      A,H
31EE B5       01601         OR      L
31EF 3C       01602         INC     A               ;Was it just NAME?
31F0 2826     01603         JR      Z,DSKNAM        ;Prompt if so
31F2 3D       01604         DEC     A               ;If entered, use it
31F3 2003     01605         JR      NZ,$+5
31F5 21DF39   01606 DFTNAM  LD      HL,PAKNAM$
31F8 11D02E   01607         LD      DE,GATBUF+0D0H  ;Yes, move name to field
31FB 0608     01608         LD      B,8             ;8-chars max
31FD 7E       01609 MOVNAM  LD      A,(HL)          ;P/u a char
31FE FE22     01610         CP      '"'             ;Closing "
3200 2829     01611         JR      Z,CKNAME        ;Exit if end of parm
3202 FE20     01612         CP      20H             ;Permit all but controls
3204 DA2B32   01613         JP      C,CKNAME
3207 FE61     01614         CP      'a'             ;If char is lower case,
3209 3806     01615         JR      C,MOVNAM1
320B FE7B     01616         CP      'z'+1
320D 3002     01617         JR      NC,MOVNAM1
320F EE20     01618         XOR     20H             ;  make it UC
3211 12       01619 MOVNAM1 LD      (DE),A          ;Put char in buffer
3212 23       01620         INC     HL              ;Bump both ptrs
3213 13       01621         INC     DE
3214 10E7     01622         DJNZ    MOVNAM          ;Loop til complete
3216 1813     01623         JR      CKNAME          ;Check if valid name
              01624 ;
              01625 ;       Prompt user for name parameter
              01626 ;
3218          01627 DSKNAM  @@DSPLY DSKNAM$         ;"diskette name?
              01628         IFEQ    01H,1
3218+218737   01629         LD      HL,DSKNAM$
              01630         ENDIF
321B+3E0A     01631         LD      A,10
321D+EF       01632         RST     40
321E CD612A   01633         CALL    GET8            ;Get 8 chars, make UC
3221 28D2     01634         JR      Z,DFTNAM        ;Use default if no entry
3223 48       01635         LD      C,B             ;Only move to name field
3224 0600     01636         LD      B,0             ;  how many were entered
3226 11D02E   01637         LD      DE,GATBUF+0D0H
3229 EDB0     01638         LDIR
322B 11D02E   01639 CKNAME  LD      DE,GATBUF+0D0H  ;Now check if illegal
322E CDB835   01640         CALL    CKMPW0          ;  chars in name
3231 C23D36   01641         JP      NZ,BADNAM       ;  & quit if so
3234 21D82E   01642 GETDAT  LD      HL,GATBUF+0D8H  ;Get today's date & stuff
3237          01643         @@DATE
3237+3E12     01644         LD      A,18
3239+EF       01645         RST     40
              01646 ;
              01647 ;       Master Password handling
              01648 ;
323A 210000   01649 MPARM   LD      HL,0            ;Did user enter the MPW?
323D 7C       01650         LD      A,H
323E B5       01651         OR      L
323F 3C       01652         INC     A               ;If only MPW, then prompt
3240 2821     01653         JR      Z,MPW           ;Go prompt if not
3242 3D       01654         DEC     A
3243 2003     01655         JR      NZ,$+5          ;If entered, use it
3245 21E739   01656 DFTMPW  LD      HL,PAKMPW$      ;  else use ours
3248 115336   01657         LD      DE,MPWBUF       ;Shift to pswd field
324B 0608     01658         LD      B,8
324D 7E       01659 MOVMPW  LD      A,(HL)
324E FE30     01660         CP      30H             ;No spaces permitted
3250 3819     01661         JR      C,PRSMPW        ;End also on closing "
3252 FE61     01662         CP      'a'             ;Need cvrt to UC?
3254 3806     01663         JR      C,MOVMPW1
3256 FE7B     01664         CP      'z'+1
3258 3002     01665         JR      NC,MOVMPW1
325A EE20     01666         XOR     20H             ;Cvrt to UC
325C 12       01667 MOVMPW1 LD      (DE),A          ;Store the char and
325D 13       01668         INC     DE              ;  bump the buffer ptrs
325E 23       01669         INC     HL
325F 10EC     01670         DJNZ    MOVMPW
3261 1808     01671         JR      PRSMPW          ;Check if valid password
              01672 ;
              01673 ;       Prompt for master password
              01674 ;
3263 219837   01675 MPW     LD      HL,MPW$         ;"master...
3266 CD9135   01676         CALL    INPMPW
3269 30DA     01677         JR      NC,DFTMPW       ;Use default on 
              01678 ;
              01679 ;       Parse the password & stuff into GAT sector buffer
              01680 ;
326B 115336   01681 PRSMPW  LD      DE,MPWBUF
326E CDB135   01682         CALL    CKMPW           ;Check for valid MPW
3271 C2A829   01683         JP      NZ,IOERR
3274 22CE2E   01684         LD      (GATBUF+0CEH),HL        ;Stuff it
3277 FDCB0466 01685         BIT     4,(IY+4)        ;Jump if alien controller
327B C2A833   01686         JP      NZ,CALCGPC
327E 212536   01687         LD      HL,TBLDATA      ;Pt to config tables
3281 110600   01688         LD      DE,6            ;Index the table
3284 FDCB036E 01689         BIT     5,(IY+3)        ;8" drive?
3288 2802     01690         JR      Z,INITDEN       ;Bypass if not
328A 19       01691         ADD     HL,DE           ;  else move to 8" configs
328B 19       01692         ADD     HL,DE
328C 22F332   01693 INITDEN LD      (SETSDEN+1),HL  ;  & stuff for SDEN option
328F EB       01694         EX      DE,HL           ;6->HL, SDEN->DE
3290 19       01695         ADD     HL,DE           ;Pt to DDEN index table
3291 22E332   01696         LD      (SETDDEN+1),HL  ;Stuff DDEN config ptr
3294 EB       01697         EX      DE,HL           ;HL=SDEN, DE=DDEN
3295 FDCB03B6 01698         RES     6,(IY+3)        ;Set DCT to SDEN
3299 FDCB0476 01699         BIT     6,(IY+4)        ;Test if DDEN capability
329D 2805     01700         JR      Z,SETSTD        ;Go if single
329F EB       01701         EX      DE,HL           ;HL->DDEN table
32A0 FDCB03F6 01702         SET     6,(IY+3)        ;Set DCT to DDEN
32A4 CD2D35   01703 SETSTD  CALL    SETUP           ;Init to std config
32A7 FDCB03A6 01704         RES     4,(IY+3)        ;Set i/o to front side
32AB FDCB04AE 01705         RES     5,(IY+4)        ;Set to 1-sided
32AF 3E00     01706 PRMMRG  LD      A,0             ;<>0 if config parms
32B1 B7       01707         OR      A               ;  in command line
32B2 2008     01708         JR      NZ,GETDEN
32B4 11FFFF   01709 QPARM   LD      DE,-1           ;Prompts? Default=Y
32B7 7A       01710         LD      A,D
32B8 B3       01711         OR      E
32B9 CA9D33   01712         JP      Z,PSTEP1        ;Go if no prompting
32BC FDCB0476 01713 GETDEN  BIT     6,(IY+4)        ;Bypass DDEN request msg
32C0 283A     01714         JR      Z,PMTSIDE       ;  if no DDEN capability
32C2 3AB032   01715         LD      A,(PRMMRG+1)    ;Also, don't prompt if
32C5 B7       01716         OR      A               ;  any config parm was
32C6 2013     01717         JR      NZ,GDDEN1       ;  entered with command
32C8 213E38   01718         LD      HL,DEN?$        ;Density ...
32CB CD592A   01719         CALL    GET3
32CE 282C     01720         JR      Z,PMTSIDE       ;Go on 
32D0 7E       01721         LD      A,(HL)          ;P/u respsonse
32D1 FE53     01722         CP      'S'             ;Single Density?
32D3 281D     01723         JR      Z,SETSDEN
32D5 FE44     01724         CP      'D'             ;Double density?
32D7 2809     01725         JR      Z,SETDDEN
32D9 18E1     01726         JR      GETDEN          ;Redo if bad response
32DB 3A8831   01727 GDDEN1  LD      A,(DDPARM+1)    ;Not prompted, was DDEN
32DE EEFF     01728         XOR     -1              ;  set in command line?
32E0 2009     01729         JR      NZ,GSDEN1       ;Bypass if not
32E2 210000   01730 SETDDEN LD      HL,$-$          ;P/u DDEN index table
32E5 FDCB03F6 01731         SET     6,(IY+3)        ;Set DCT to DDEN
32E9 180E     01732         JR      CHGDEN
32EB 3A8331   01733 GSDEN1  LD      A,(SDPARM+1)    ;Was SDEN parm
32EE EEFF     01734         XOR     -1              ;  on command line?
32F0 200A     01735         JR      NZ,PMTSIDE      ;Go if not
32F2 210000   01736 SETSDEN LD      HL,$-$          ;P/u SDEN index table
32F5 FDCB03B6 01737         RES     6,(IY+3)        ;Set DCT to SDEN
32F9 CD2D35   01738 CHGDEN  CALL    SETUP           ;Init #CYLs & alloc
32FC 3AB032   01739 PMTSIDE LD      A,(PRMMRG+1)    ;Config parms entered
32FF B7       01740         OR      A               ;On command line?
3300 2020     01741         JR      NZ,PMTS1        ;Bypass if yes
3302 FDE5     01742         PUSH    IY              ;P/u flag table
3304          01743         @@FLAGS                 ;  and check if
3304+3E65     01744         LD      A,101
3306+EF       01745         RST     40
3307 FDCB0B6E 01746         BIT     5,(IY+'L'-'A')  ;  2-side inhibit?
330B FDE1     01747         POP     IY
330D 2013     01748         JR      NZ,PMTS1        ;If set, use 1 side
330F 211F38   01749         LD      HL,SIDES$       ;"double sided...?
3312 CD592A   01750         CALL    GET3            ;Get # sides wanted
3315 2816     01751         JR      Z,PMTCYL        ;Go on 
3317 7E       01752         LD      A,(HL)          ;P/u response char
3318 FE31     01753         CP      '1'             ;1 is ok
331A 2811     01754         JR      Z,PMTCYL
331C FE32     01755         CP      '2'             ;  and so is 2
331E 20DC     01756         JR      NZ,PMTSIDE      ;  but redo on anything else
3320 1805     01757         JR      TSTSID
              01758 ;
              01759 ;       Check side parm from command line
              01760 ;
3322 3A8D31   01761 PMTS1   LD      A,(SIDES+1)     ;How many sides?
3325 FE02     01762         CP      2
3327 2004     01763 TSTSID  JR      NZ,PMTCYL       ;DCT ok if not 2
3329 FDCB04EE 01764         SET     5,(IY+4)        ;Set 2-sided drive
332D FD7E03   01765 PMTCYL  LD      A,(IY+3)        ;No cylinder request
3330 E628     01766         AND     28H             ;  if either hard drive
3332 202E     01767         JR      NZ,PMTSTEP      ;  or 8" drive
3334 3AB032   01768 PCYL1   LD      A,(PRMMRG+1)    ;P/u config test byte &
3337 B7       01769         OR      A               ;  bypass cyl req if user
3338 201E     01770         JR      NZ,PCYL4        ;  entered cmd line parms
333A 21AB37   01771         LD      HL,NUMCYL$      ;"number of cyls..?
333D CD592A   01772         CALL    GET3
3340 3E00     01773 PCYL2   LD      A,0             ;P/u default # cyls
3342 C47E35   01774         CALL    NZ,CVBIN        ;Get # of cyls on CR
              01775         IF      @BLD631
3345 CD4C33   01776         CALL    CHKCNT         ;<631>
3348 38EA     01777         JR      C,PCYL1         ;<631>Anything out of range
334A 1816     01778         JR      PMTSTEP         ;<631>
334C FE61     01779 CHKCNT: CP      96+1            ;<631>System cannot support
334E 3F       01780         CCF                     ;<631>  anything over 96 (95)
334F D8       01781         RET     C               ;<631>
3350 FE23     01782         CP      35              ;<631>Must be 35 or more
3352 D8       01783         RET     C               ;<631>
3353 3D       01784         DEC     A               ;<631>Adjust to zero offset
3354 FD7706   01785         LD      (IY+6),A        ;<631> & stuff in DCT
3357 C9       01786         RET                     ;<631>
              01787         ELSE
              01788 PCYL3   CP      96+1            ;System cannot support
              01789         JR      NC,PCYL1        ;  anything over 96 (95)
              01790         CP      35
              01791         JR      C,PCYL1         ;Must be 35 or more
              01792         DEC     A               ;Adjust to zero offset
              01793         LD      (IY+6),A        ;  & stuff in DCT
              01794         JR      PMTSTEP
              01795         ENDIF
              01796 ;
              01797 ;       User entered config parms with command line
              01798 ;
3358 3A9231   01799 PCYL4   LD      A,(CPARM+1)     ;Was cyl= one of them?
335B B7       01800         OR      A
              01801         IF      @BLD631
335C C44C33   01802         CALL    NZ,CHKCNT       ;<631>Check for valid range
335F DA4B36   01803         JP      C,PRMERR        ;<631>Parm error if too big
3362 FDCB0466 01804 PMTSTEP:BIT     4,(IY+4)        ;<631>Alien controller?
3366 2040     01805         JR      NZ,CALCGPC      ;<631>No adjustable rate if so
              01806         ELSE
              01807         JR      Z,PMTSTEP       ;Bypass if not
              01808         CP      96+1
              01809         JP      NC,PRMERR       ;Parm error if too big
              01810         CP      35
              01811         JP      C,PRMERR        ;  or too small
              01812         DEC     A               ;Adjust to zero offset
              01813         LD      (IY+6),A        ;  & stuff into DCT
              01814 PMTSTEP BIT     4,(IY+4)        ;Alien controller?
              01815         JR      NZ,PMTSIDE      ;No adjustable step rate if so
              01816         ENDIF
              01817 ;
              01818 ;       If step rate parm wasn't entered, prompt
              01819 ;       for it but first determine 8" or 5" drive
              01820 ;
3368 3AB032   01821         LD      A,(PRMMRG+1)    ;Did user enter config
336B B7       01822         OR      A               ;Parms on command line?
336C 202F     01823         JR      NZ,PSTEP1       ;Go to step prompt if yes
              01824 ;
336E FDE5     01825         PUSH    IY              ;P/u flag table and
3370          01826         @@FLAGS                 ;  check if
3370+3E65     01827         LD      A,101
3372+EF       01828         RST     40
3373 FDCB0B46 01829         BIT     0,(IY+'L'-'A')  ;  step prompt inhibited
3377 FDE1     01830         POP     IY
3379 2022     01831         JR      NZ,PSTEP1       ;Bypass if set
              01832 ;
337B FDCB036E 01833         BIT     5,(IY+3)        ;Need prompt, 8"?
337F 200F     01834         JR      NZ,STEP8        ;Jump if 8"
              01835 ;
              01836 ;       5" drive step rate parsing
              01837 ;
3381 21C237   01838 STEP5   LD      HL,STEP5$       ;"...step rate - 5"
              01839         IF      @BLD631
3384 117435   01840         LD      DE,L3574        ;<631>
3387 CD5635   01841         CALL    DOITALL         ;<631>
338A 20F5     01842         JR      NZ,STEP5        ;<631>
338C 380F     01843         JR      C,PSTEP1        ;<631>
338E 1814     01844         JR      GOTSTEP         ;<631>
              01845         ELSE
              01846         CALL    GET3
              01847         CALL    CVBIN           ;Get 5" step rate
              01848         OR      A               ;Use default?
              01849         JR      Z,PSTEP1        ;Go if parm not entered
              01850         LD      B,0             ;Init key to 0
              01851         CP      6
              01852         JR      Z,GOTSTEP
              01853         LD      B,1             ;Init key to 1
              01854         CP      12
              01855         JR      Z,GOTSTEP
              01856         LD      B,2             ;Init key to 2
              01857         CP      20
              01858         JR      Z,GOTSTEP
              01859         LD      B,3             ;Init key to 3
              01860         CP      30
              01861         JR      Z,GOTSTEP
              01862         CP      40
              01863         JR      Z,GOTSTEP
              01864         JR      STEP5           ;Re-request, bad value
              01865         ENDIF
              01866 ;
              01867 ;       8" drive step rate parsing
              01868 ;
3390 21F037   01869 STEP8   LD      HL,STEP8$       ;"step rate - 8"...
              01870         IF      @BLD631
3393 117935   01871         LD      DE,L3579        ;<631>
3396 CD5635   01872         CALL    DOITALL         ;<631>
3399 20F5     01873         JR      NZ,STEP8        ;<631>
339B 3007     01874         JR      NC,GOTSTEP      ;<631>
              01875         ELSE
              01876         CALL    GET3
              01877         CALL    CVBIN           ;Get 8" step rate
              01878         OR      A               ;Use default?
              01879         JR      Z,PSTEP1        ;Go if not entered
              01880         LD      B,0             ;Init key to 0
              01881         CP      3
              01882         JR      Z,GOTSTEP
              01883         LD      B,1             ;Init key to 1
              01884         CP      6
              01885         JR      Z,GOTSTEP
              01886         LD      B,2             ;Init key to 2
              01887         CP      10
              01888         JR      Z,GOTSTEP
              01889         LD      B,3             ;Init key to 3
              01890         CP      15
              01891         JR      Z,GOTSTEP
              01892         CP      20
              01893         JR      Z,GOTSTEP
              01894         JR      STEP8           ;Bad entry, re-request
              01895         ENDIF
339D 3A9731   01896 PSTEP1  LD      A,(STEPARM+1)   ;P/u step parm entry
33A0 E603     01897         AND     3               ;Keep 2 lo-order bits
33A2 1801     01898         JR      $+3
33A4 78       01899 GOTSTEP LD      A,B             ;Stuff boot step rate key
33A5 32E32A   01900         LD      (STEPDFT),A
              01901 ;
              01902 ;       Routine to calculate the # of grans per logical
              01903 ;       cylinder so that the GAT byte can be constructed
              01904 ;
33A8 FD7E08   01905 CALCGPC LD      A,(IY+8)        ;P/u # of grans per cyl
33AB 07       01906         RLCA                    ;Rotate to bits 0-2
33AC 07       01907         RLCA
33AD 07       01908         RLCA
33AE E607     01909         AND     7               ;Strip off other data
33B0 3C       01910         INC     A               ;Adj for zero offset
              01911 ;
              01912 ;       If double siding (cylindering), double the count
              01913 ;
33B1 FDCB046E 01914         BIT     5,(IY+4)        ;Test if 2-sided drive
33B5 2801     01915         JR      Z,$+3           ;Bypass if only 1-sided
33B7 87       01916         ADD     A,A             ;Double the grans/cyl
33B8 01FFFF   01917         LD      BC,0FFFFH       ;Init GAT byte to ones
33BB CB20     01918 CGPC1   SLA     B               ;Now keep removing low
33BD 3D       01919         DEC     A               ;  order bits , 1 bit for
33BE 20FB     01920         JR      NZ,CGPC1        ;  each available granule
33C0 21002E   01921         LD      HL,GATBUF       ;Pt to GAT buffer area
33C3 FD7E06   01922         LD      A,(IY+6)        ;P/u highest # cylinder
33C6 70       01923 CGPC2   LD      (HL),B          ;Stuff the GAT byte into
33C7 2C       01924         INC     L               ;Each position of the GAT
33C8 BD       01925         CP      L               ;One byte per cylinder
33C9 30FB     01926         JR      NC,CGPC2
              01927 ;
              01928 ;       Test if we are at 202 first by ignoring the
              01929 ;       first two instructions with LD DE,xxxx
              01930 ;
33CB 3ECB     01931         LD      A,0CBH          ;Continue to stuff GAT
33CD 11       01932         DB      11H             ;  until cyl 202
33CE 71       01933 CGPC3   LD      (HL),C          ;Use FFH to show unused
33CF 2C       01934         INC     L
33D0 BD       01935         CP      L               ;First test here for
33D1 20FB     01936         JR      NZ,CGPC3        ;  match against 202
              01937 ;
              01938 ;       Prompt for destination disk & prepare it
              01939 ;
33D3 3A272A   01940         LD      A,(FMTDRV+1)    ;P/u drive
33D6 B7       01941         OR      A
33D7 2020     01942         JR      NZ,PFMT1        ;Bypass if other than 0
33D9          01943 PMTDST  @@DSPLY PMTDST$         ;"load dest disk...
              01944         IFEQ    01H,1
33D9+219938   01945         LD      HL,PMTDST$
              01946         ENDIF
33DC+3E0A     01947         LD      A,10
33DE+EF       01948         RST     40
33DF FDE5     01949         PUSH    IY              ;Save DCT pointer
33E1          01950         @@FLAGS                 ;Point to flags
33E1+3E65     01951         LD      A,101
33E3+EF       01952         RST     40
33E4 FDCB126E 01953         BIT     5,(IY+'S'-'A')  ;Check for JCL active
33E8 FDE1     01954         POP     IY              ;Restore pointer
33EA C2BC29   01955         JP      NZ,FMTABT       ;Abort if in JCL
33ED 210030   01956         LD      HL,HITBUF
33F0 010000   01957         LD      BC,0            ;Zero characters means
33F3          01958         @@KEYIN                 ;Enter or Break only
33F3+3E09     01959         LD      A,9
33F5+EF       01960         RST     40
33F6 DABC29   01961         JP      C,FMTABT        ;Abort if Break
33F9 FDE5     01962 PFMT1   PUSH    IY              ;Xfer DCT ptr to HL
33FB E1       01963         POP     HL              ;  & move DCT again
33FC 111336   01964         LD      DE,TMPDCT       ;  to store tempy
33FF 010A00   01965         LD      BC,10
3402 EDB0     01966         LDIR
              01967         IF      @MOD2
              01968         CALL    SELECT
              01969         JP      NZ,IOERR        ;Go on error
              01970         ENDIF
3404 CD032A   01971         CALL    RESTOR          ;Restore to cyl 0
3407 C2A829   01972         JP      NZ,IOERR        ;Go on error
340A CD0B2A   01973         CALL    RSELCT          ;Reselect drive
340D C2A829   01974         JP      NZ,IOERR        ;Go on error
3410 FDCB0466 01975         BIT     4,(IY+4)        ;Jump if alien controller
3414 2040     01976         JR      NZ,PFMT3
3416 216038   01977         LD      HL,NOTRDY$      ;Init "drive not ready
3419 CB7F     01978         BIT     7,A             ;Test FDC status for READY
341B C2BF29   01979         JP      NZ,EXTERR       ;Quit if not ready
341E 218538   01980         LD      HL,NODRV$       ;Init "drive not in...
3421 CB57     01981         BIT     2,A             ;Test FDC status for TRACK-0
3423 CABF29   01982         JP      Z,EXTERR        ;  & error if not at track 0
3426 CDE835   01983         CALL    CKDRV           ;Ck if floppy not present
3429 20AE     01984         JR      NZ,PMTDST
342B 217038   01985         LD      HL,CANTWR$      ;Init "write protected..
342E 07       01986         RLCA                    ;Align to bit 7
342F FDB603   01987         OR      (IY+3)          ;Combine with soft WP
3432 E680     01988         AND     80H             ;WP error?
3434 C2BF29   01989         JP      NZ,EXTERR       ;Can't format over WP
3437 3A1C26   01990         LD      A,(SYSPRM+1)    ;Don't check space needed
343A B7       01991         OR      A               ;  if SYSTEM info only
343B 2019     01992         JR      NZ,PFMT3
343D 210031   01993         LD      HL,FORMAT       ;Start of format buffer
3440 110000   01994 PFMT2   LD      DE,0            ;P/u format space needed
3443 19       01995         ADD     HL,DE           ;Pt to last addr needed
3444 54       01996         LD      D,H             ;Xfer to reg DE
3445 5D       01997         LD      E,L
3446 210000   01998         LD      HL,0            ;Set up for HIGH$ fetch
3449 45       01999         LD      B,L
344A          02000         @@HIGH$                 ;Make sure it won't wrap
344A+3E64     02001         LD      A,100
344C+EF       02002         RST     40
344D AF       02003         XOR     A
344E ED52     02004         SBC     HL,DE           ;  into protected memory
3450 215C37   02005         LD      HL,NOMEM$       ;Init "insufficient mem..
3453 DABF29   02006         JP      C,EXTERR        ;Quit if no memory available
3456 110000   02007 PFMT3   LD      DE,0            ;Init to cyl 0, sect 0
3459 CD232A   02008         CALL    VERSEC          ;Verify BOOT
345C C21935   02009         JP      NZ,PFMT6        ;Assume unformated if err
              02010 ;
              02011 ;       Appears formatted, is there SYSTEM information?
              02012 ;
345F 3A1C26   02013         LD      A,(SYSPRM+1)    ;Ignore data if SYSTEM
3462 B7       02014         OR      A               ;  info only
3463 C21935   02015         JP      NZ,PFMT6
3466 210030   02016         LD      HL,HITBUF       ;Pt to i/o buffer
3469 CD1F2A   02017         CALL    RDSEC           ;Now try to read BOOT
346C C2A829   02018         JP      NZ,IOERR        ;Jump on error
346F          02019         @@LOGOT HASDAT$         ;Show "disk contains data
              02020         IFEQ    01H,1
346F+21BC38   02021         LD      HL,HASDAT$
              02022         ENDIF
3472+3E0C     02023         LD      A,12
3474+EF       02024         RST     40
3475 21D338   02025         LD      HL,NOFMT$       ;Init "non-std format
              02026 ;
              02027 ;       BOOT was read, is there a valid directory pointer
              02028 ;
3478 3A0230   02029         LD      A,(HITBUF+2)    ;P/u dir cyl # (possible)
347B FDBE06   02030         CP      (IY+6)          ;Check against max cyl #
347E 3076     02031         JR      NC,PFMT5        ;Go if bigger (or =)
              02032 ;
              02033 ;       Read the assumed GAT & test it
              02034 ;
3480 210030   02035         LD      HL,HITBUF
3483 5D       02036         LD      E,L
3484 57       02037         LD      D,A             ;Pt to assumed GAT sector
3485 210030   02038         LD      HL,HITBUF       ;Pt to buffer
3488 CD1F2A   02039         CALL    RDSEC           ;Read the sector
348B FE06     02040         CP      6               ;Dir errcod returned?
348D 2805     02041         JR      Z,PFMT4         ;Jump if yes & grab data
348F 21E738   02042         LD      HL,CANTRD$      ;Init "unreadable dir...
3492 1862     02043         JR      PFMT5
3494 21FC38   02044 PFMT4   LD      HL,NODIR$       ;Init "non-init dir
3497 3ADA30   02045         LD      A,(HITBUF+0DAH) ;Check if date field
349A FE2F     02046         CP      '/'             ;  is present
349C 2058     02047         JR      NZ,PFMT5        ;Jump if no
              02048 ;
              02049 ;       The directory is readable - request its MPW
              02050 ;
349E 21D030   02051         LD      HL,HITBUF+0D0H
34A1 111B39   02052         LD      DE,PACKID$+5    ;Move name & date into
34A4 010800   02053         LD      BC,8            ;  display message field
34A7 EDB0     02054         LDIR
34A9 112A39   02055         LD      DE,PACKID$+14H
34AC 0E08     02056         LD      C,8
34AE EDB0     02057         LDIR
              02058 ;
              02059 ;       If MPW = "PASSWORD", just ck ABS
              02060 ;
34B0 2ACE30   02061         LD      HL,(HITBUF+0CEH)        ;P/u disk MPW
34B3 11E042   02062         LD      DE,PASSWORD     ;Password=PASSWORD
34B6 AF       02063         XOR     A
34B7 ED52     02064         SBC     HL,DE           ;Is it password?
34B9 211639   02065         LD      HL,PACKID$      ;Init"Name=, Date=
34BC 2838     02066         JR      Z,PFMT5         ;If match, go check ABS
              02067         IF      @BLD631
34BE FDE5     02068         PUSH    IY              ;<631>
34C0          02069         @@FLAGS                 ;<631>
34C0+3E65     02070         LD      A,101
34C2+EF       02071         RST     40
34C3 FDCB0D7E 02072         BIT     7,(IY+0DH)      ;<631>
34C7 FDE1     02073         POP     IY              ;<631>
34C9 202B     02074         JR      NZ,PFMT5        ;<631>
              02075         ENDIF
34CB          02076         @@LOGOT                 ;Log the ID field
              02077         IFEQ    00H,1
              02078         LD      HL,
              02079         ENDIF
34CB+3E0C     02080         LD      A,12
34CD+EF       02081         RST     40
34CE FDE5     02082         PUSH    IY              ;Abort if in JCL
34D0          02083         @@FLAGS
34D0+3E65     02084         LD      A,101
34D2+EF       02085         RST     40
34D3 FDCB126E 02086         BIT     5,(IY+'S'-'A')  ;Test if "DOing"
34D7 FDE1     02087         POP     IY
34D9 C2BC29   02088         JP      NZ,FMTABT       ;Can't get PW if in JCL
              02089 ;
              02090 ;       User must enter Current Pack's MPW to proceed
              02091 ;
34DC 213339   02092 OLDMPW  LD      HL,OLDMPW$      ;"What's the old MPW?
34DF CD9135   02093         CALL    INPMPW          ;Grab user input to match
34E2 30F8     02094         JR      NC,OLDMPW
34E4 115336   02095         LD      DE,MPWBUF
34E7 CDB535   02096         CALL    HASHMPW         ;Hash user entry
              02097 ;
              02098 ;       Routine to test master password for match
              02099 ;
34EA EB       02100         EX      DE,HL           ;Xfer hashed MPW to DE
34EB 2ACE30   02101         LD      HL,(HITBUF+0CEH)        ;Else grab pack MPW
34EE AF       02102         XOR     A               ;Clear carry flag
34EF ED52     02103         SBC     HL,DE           ;Did user enter pack MPW?
34F1 C24136   02104         JP      NZ,BADMPW       ;Abort if no match
34F4 1823     02105         JR      PFMT6
              02106 ;
              02107 ;       The directory was not readable - req assurance
              02108 ;
34F6          02109 PFMT5   @@LOGOT
              02110         IFEQ    00H,1
              02111         LD      HL,
              02112         ENDIF
34F6+3E0C     02113         LD      A,12
34F8+EF       02114         RST     40
34F9 110000   02115 APARM   LD      DE,0            ;ABS parameter
34FC 1C       02116         INC     E
34FD 281A     02117         JR      Z,PFMT6         ;Go if ABS used
34FF FDE5     02118         PUSH    IY
3501          02119         @@FLAGS
3501+3E65     02120         LD      A,101
3503+EF       02121         RST     40
3504 FDCB126E 02122         BIT     5,(IY+'S'-'A')  ;Test if "DOing"
3508 FDE1     02123         POP     IY
350A C2BC29   02124         JP      NZ,FMTABT       ;Abort if JCL but no ABS
350D 218D39   02125         LD      HL,SURE?$       ;"are you sure...?
3510 CD592A   02126         CALL    GET3            ;Get response
3513 7E       02127         LD      A,(HL)
3514 FE59     02128         CP      'Y'             ;If not Yes, abort
3516 C2BC29   02129         JP      NZ,FMTABT
3519 FDE5     02130 PFMT6   PUSH    IY              ;Move drive code table
351B D1       02131         POP     DE              ;  back into place
351C 211336   02132         LD      HL,TMPDCT       ;  into system slot
351F 010A00   02133         LD      BC,10
3522 EDB0     02134         LDIR
3524 CD032A   02135         CALL    RESTOR          ;Restore to cylinder 0
3527 C2A829   02136         JP      NZ,IOERR        ;Go on error
352A C30126   02137         JP      GOFMT           ;Go and format it
              02138 ;
              02139 ;       Routine to set up the DCT for format
              02140 ;
352D 3A4133   02141 SETUP   LD      A,(PCYL2+1)     ;P/u the highest # cyl
3530 FDCB036E 02142         BIT     5,(IY+3)        ;If 8" drive, use 77
3534 2802     02143         JR      Z,$+4           ;Go if only 5"
3536 3E4D     02144         LD      A,77            ;8" drives are 77 cyls
3538 3D       02145         DEC     A
3539 FD7706   02146         LD      (IY+6),A        ;Stuff in our DCT
353C 5E       02147         LD      E,(HL)          ;Grab address to
353D 23       02148         INC     HL              ;  master formatting table
353E 56       02149         LD      D,(HL)
353F 23       02150         INC     HL
3540 ED530926 02151         LD      (FMTTBL+1),DE   ;Stuff for later use
3544 5E       02152         LD      E,(HL)          ;P/u DCT+7 data
3545 23       02153         INC     HL              ;Max sector, # of heads
3546 56       02154         LD      D,(HL)          ;P/u DCT+8 data, # of
3547 23       02155         INC     HL              ;  sectors/gran & grans/cyl
3548 FD7307   02156         LD      (IY+7),E        ;Stuff these values into
354B FD7208   02157         LD      (IY+8),D        ;  our DCT
354E 5E       02158         LD      E,(HL)          ;P/u space needed for
354F 23       02159         INC     HL              ;  the formatting buffer
3550 56       02160         LD      D,(HL)
3551 ED534134 02161         LD      (PFMT2+1),DE    ;  & stuff that for later
3555 C9       02162         RET
              02163         IF      @BLD631
3556 D5       02164 DOITALL:PUSH    DE              ;<631>
3557 CD592A   02165         CALL    GET3            ;<631>
355A CD7E35   02166         CALL    CVBIN           ;<631>
355D E1       02167         POP     HL              ;<631>
355E B7       02168         OR      A               ;<631>
355F 37       02169         SCF                     ;<631>
3560 C8       02170         RET     Z               ;<631>
3561 0600     02171         LD      B,0             ;<631>
3563 BE       02172         CP      (HL)            ;<631>
3564 C8       02173         RET     Z               ;<631>
3565 23       02174         INC     HL              ;<631>
3566 04       02175         INC     B               ;<631>
3567 BE       02176         CP      (HL)            ;<631>
3568 C8       02177         RET     Z               ;<631>
3569 04       02178         INC     B               ;<631>
356A 23       02179         INC     HL              ;<631>
356B BE       02180         CP      (HL)            ;<631>
356C C8       02181         RET     Z               ;<631>
356D 23       02182         INC     HL              ;<631>
356E 04       02183         INC     B               ;<631>
356F BE       02184         CP      (HL)            ;<631>
3570 C8       02185         RET     Z               ;<631>
3571 23       02186         INC     HL              ;<631>
3572 BE       02187         CP      (HL)            ;<631>
3573 C9       02188         RET                     ;<631>
3574 06       02189 L3574:  DB      06H,0CH,14H,1EH,28H     ;<631>
     0C 14 1E 28 
3579 03       02190 L3579:  DB      03H,06H,0AH,0FH,14H     ;<631>
     06 0A 0F 14 
              02191         ENDIF
              02192 ;
              02193 ;       Convert decimal ASCII to binary
              02194 ;
357E 1E00     02195 CVBIN   LD      E,0             ;Init value to 0
3580 7E       02196 CVB1    LD      A,(HL)          ;Get a character
3581 23       02197         INC     HL              ;Bump buff ptr
3582 D630     02198         SUB     30H             ;Make binary
3584 47       02199         LD      B,A
3585 FE0A     02200         CP      0AH             ;Was it a decimal digit?
3587 7B       02201         LD      A,E
3588 D0       02202         RET     NC              ;Return if not
3589 87       02203         ADD     A,A             ;Mult previous value X 10
358A 87       02204         ADD     A,A
358B 83       02205         ADD     A,E
358C 87       02206         ADD     A,A
358D 80       02207         ADD     A,B             ;Add in new digit
358E 5F       02208         LD      E,A             ;Put results in E
358F 18EF     02209         JR      CVB1            ;Loop
              02210 ;
3591          02211 INPMPW  @@DSPLY
              02212         IFEQ    00H,1
              02213         LD      HL,
              02214         ENDIF
3591+3E0A     02215         LD      A,10
3593+EF       02216         RST     40
3594 215336   02217         LD      HL,MPWBUF       ;Use this buffer
3597 0608     02218         LD      B,8             ;8 chars max
3599 CD672A   02219         CALL    GET8A           ;Input the pswd
359C C8       02220         RET     Z               ;Go if Enter only
359D EB       02221         EX      DE,HL
359E 83       02222         ADD     A,E             ;Find where the X'0D' was
359F 6F       02223         LD      L,A             ;  stuffed & cover it
35A0 7A       02224         LD      A,D
35A1 CE00     02225         ADC     A,0
35A3 67       02226         LD      H,A
35A4 3E08     02227         LD      A,8             ;If 8 chars entered,
35A6 90       02228         SUB     B
35A7 37       02229         SCF                     ;  done
35A8 C8       02230         RET     Z
35A9 47       02231         LD      B,A             ;  else pad the buffer
35AA 3620     02232 FILLBLK LD      (HL),' '        ;  w/spaces
35AC 23       02233         INC     HL
35AD 10FB     02234         DJNZ    FILLBLK
35AF 37       02235         SCF
35B0 C9       02236         RET
              02237 ;
35B1 CDB835   02238 CKMPW   CALL    CKMPW0
35B4 C0       02239         RET     NZ
              02240 ;
              02241 ;       Hash a diskette password
              02242 ;
35B5 3EE4     02243 HASHMPW LD      A,0E4H          ;Use SYS2 routine
35B7 EF       02244         RST     40
              02245 ;
35B8 0608     02246 CKMPW0  LD      B,8             ;8 char to check
35BA D5       02247         PUSH    DE              ;Xfer start of PW
35BB E1       02248         POP     HL              ;  to HL
35BC 7E       02249         LD      A,(HL)          ;P/u 1st char
35BD 180E     02250         JR      CKMPW2          ;  & check 
35BF 23       02251 CKMPW1  INC     HL              ;Advance to next char
35C0 7E       02252         LD      A,(HL)          ;P/u the char
35C1 FE20     02253         CP      ' '
35C3 2818     02254         JR      Z,CKMPW7        ;Go on space
35C5 FE30     02255         CP      '0'
35C7 3818     02256         JR      C,INVMPW        ;Bad if less than o
35C9 FE3A     02257         CP      '9'+1           ;  or greater than 9
35CB 3808     02258         JR      C,CKMPW3
35CD FE41     02259 CKMPW2  CP      'A'
35CF 3810     02260         JR      C,INVMPW        ;  but less than A
35D1 FE5B     02261         CP      'Z'+1
35D3 300C     02262         JR      NC,INVMPW       ;More than Z also bad
35D5 10E8     02263 CKMPW3  DJNZ    CKMPW1          ;Char ok, do another
35D7 AF       02264         XOR     A               ;Set Z, PW good
35D8 C9       02265         RET
              02266 ;
35D9 23       02267 CKMPW5  INC     HL              ;Next char position
35DA BE       02268         CP      (HL)            ;No imbedded spaces
35DB 2004     02269         JR      NZ,INVMPW
35DD 10FA     02270 CKMPW7  DJNZ    CKMPW5          ;Loop til 8 checked
35DF AF       02271         XOR     A               ;Set Z = PW good
35E0 C9       02272         RET
              02273 ;
35E1 21B339   02274 INVMPW  LD      HL,INVMPW$      ;Init "Invalid PW
35E4 3E3F     02275         LD      A,63            ;Indicate extended error
35E6 B7       02276         OR      A               ;Set NZ condition
35E7 C9       02277         RET
              02278 ;
              02279 ;       Brief routine to check a drive for availability
              02280 ;
35E8 210030   02281 CKDRV   LD      HL,HITBUF
35EB          02282         @@TIME                  ;P/u the timer pointer
35EB+3E13     02283         LD      A,19
35ED+EF       02284         RST     40
35EE EB       02285         EX      DE,HL           ;TIME$ to HL
35EF 2B       02286         DEC     HL              ;TIMER$ to HL
35F0 7E       02287         LD      A,(HL)          ;P/u current timer value
35F1 C60F     02288         ADD     A,15            ;Set timeout to 500ms
35F3 57       02289         LD      D,A             ;Save for test later
              02290 ;
              02291 ;       Test for diskette in drive & rotating
              02292 ;
35F4 CD0436   02293 CKDR1   CALL    CKDR6           ;Test index pulse
35F7 20FB     02294         JR      NZ,CKDR1        ;Jump on index
35F9 CD0436   02295 CKDR2   CALL    CKDR6           ;Test index pulse
35FC 28FB     02296         JR      Z,CKDR2         ;Jump on no index
35FE CD0436   02297 CKDR2A  CALL    CKDR6
3601 20FB     02298         JR      NZ,CKDR2A       ;Jump on index
3603 C9       02299         RET
3604 FB       02300 CKDR6   EI                      ;Make sure they're ON
3605 7E       02301         LD      A,(HL)          ;P/u latest TIMER$ value
3606 92       02302         SUB     D               ;500ms passed?
3607 2806     02303         JR      Z,CKDR7
3609 CD0B2A   02304         CALL    RSELCT          ;Select & wait not busy
360C CB4F     02305         BIT     1,A             ;Test index
360E C9       02306         RET
360F D1       02307 CKDR7   POP     DE              ;Pop the ret address
3610 F601     02308         OR      1               ;Set "Illegal drive #
3612 C9       02309         RET                     ;With NZ
              02310 ;
              02311 ;       Temporary storage space for format drive DCT
              02312 ;
3613          02313 TMPDCT  DS      10
361D          02314 DCTCYL  DS      8               ;Default # cyls
              02315 ;
              02316 ;       Config table for single density 5"
              02317 ;
3625          02318 TBLDATA EQU     $
3625 E62A     02319         DW      S5TBL,2409H,3381
     0924 350D 
              02320 ;
              02321 ;       Config table for double density 5"
              02322 ;
362B 262B     02323         DW      D5TBL,4511H,6506
     1145 6A19 
              02324 ;
              02325 ;       Config table for single density 8"
              02326 ;
3631 7D2B     02327         DW      S8TBL,270FH,5464
     0F27 5815 
              02328 ;
              02329 ;       Config table for double density 8"
              02330 ;
3637 C22B     02331         DW      D8TBL,491DH,10673
     1D49 B129 
              02332 ;
              02333 ;       Parm error exit
              02334 ;
363D 21CD39   02335 BADNAM  LD      HL,BADNAM$
3640 DD       02336         DB      0DDH
3641 21B339   02337 BADMPW  LD      HL,INVMPW$
3644 DD       02338         DB      0DDH
3645 214337   02339 NOTHARD LD      HL,HARD$
3648 C3BF29   02340         JP      EXTERR
364B 3E2C     02341 PRMERR  LD      A,44            ;Init Parm ERROR
364D C3A829   02342         JP      IOERR
              02343 ;
              02344 ;       Load SYS2 overlay
              02345 ;
3650 3E84     02346 GETSYS2 LD      A,84H
3652 EF       02347         RST     28H
              02348 ;
3653 20       02349 MPWBUF  DB      '         '
     20 20 20 20 20 20 20 20
              02350 PRMTBL$
0080          02351 VAL     EQU     80H
0040          02352 SW      EQU     40H
0020          02353 STR     EQU     20H
0010          02354 SGL     EQU     10H
365C 80       02355         DB      80H
365D 74       02356         DB      SW!STR!SGL!4,'NAME',0
     4E 41 4D 45 00 
3662          02357 NRESP   EQU     $-1
3663 EB31     02358         DW      NPARM+1
3665 73       02359         DB      SW!STR!SGL!3,'MPW',0
     4D 50 57 00 
3669          02360 MRESP   EQU     $-1
366A 3B32     02361         DW      MPARM+1
366C 44       02362         DB      SW!4,'SDEN',0
     53 44 45 4E 00 
3672 8331     02363         DW      SDPARM+1
3674 44       02364         DB      SW!4,'DDEN',0
     44 44 45 4E 00 
367A 8831     02365         DW      DDPARM+1
367C 85       02366         DB      VAL!5,'SIDES',0
     53 49 44 45 53 00 
3683 8D31     02367         DW      SIDES+1
3685 93       02368         DB      VAL!SGL!3,'CYL',0
     43 59 4C 00 
368A 9231     02369         DW      CPARM+1
368C 84       02370         DB      VAL!4,'STEP',0
     53 54 45 50 00 
3692 9731     02371         DW      STEPARM+1
3694 53       02372         DB      SW!SGL!3,'ABS',0
     41 42 53 00 
3699 FA34     02373         DW      APARM+1
369B 55       02374         DB      SW!SGL!5,'QUERY',0
     51 55 45 52 59 00 
36A2 B532     02375         DW      QPARM+1
36A4 46       02376         DB      SW!6,'SYSTEM',0
     53 59 53 54 45 4D 00 
36AC 1C26     02377         DW      SYSPRM+1
36AE 94       02378         DB      VAL!SGL!4,'WAIT',0
     57 41 49 54 00 
36B4 2C27     02379         DW      WAITPRM+1
36B6 93       02380         DB      VAL!SGL!3,'DIR',0
     44 49 52 00 
36BB 1228     02381         DW      DIRPARM+1
36BD 00       02382         NOP
              02383 ;
36BE 46       02384 HELLO$  DB      'FORMAT'
     4F 52 4D 41 54 
36C4          02385 *GET    CLIENT:3
              02386 ;CLIENT/ASM - File to establish sign-on headers
              02387 ; and version numbers.
              02388 ;
              02389 ; EACH STRING SHOULD CONTAIN ONLY 63 CHARACTERS !!
              02390 ;
              02391         IF      @BLD631
              02392 ;                12345678901234567890123456789012345678901234567890
36C4 20       02393         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 
36F6 49       02394         DB      'Inc.,       ',10       ;<631>
     6E 63 2E 2C 20 20 20 20
     20 20 20 0A 
              02395         ELSE
              02396         DB      ' - 6.3.0 - Copyright 1982/83/84/86 by Logical Syst'
              02397         DB      'ems, Inc.   ',10
              02398         ENDIF
              02399 ;
              02400 ;       DB      'All Rights Reserved. Licensed 1982/83/84 to Tandy '
              02401 ;       DB      'Corporation.',10,13
              02402 ;
              02403 ;       DB      'All Rights Reserved. Beta-TEST Level/AD, DO NOT DI'
              02404 ;       DB      'STRIBUTE !! ',10,13
              02405 ;       DB      'All Rights reserved by LSI, 8970 N. 55th St. Milwa'
              02406 ;       DB      'ukee, Wisc. ',10,13
3703 41       02407         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 
3735 72       02408         DB      'rohibited.  ',10,13
     6F 68 69 62 69 74 65 64
     2E 20 20 0A 0D 
3743 43       02409 HARD$   DB      'Cannot "SYSTEM" a floppy',CR
     61 6E 6E 6F 74 20 22 53
     59 53 54 45 4D 22 20 61
     20 66 6C 6F 70 70 79 0D
              02410         IF      @BLD631
375C 4F       02411 NOMEM$  DB      'Out of memory',CR      ;<631>
     75 74 20 6F 66 20 6D 65
     6D 6F 72 79 0D 
              02412         ELSE
              02413 NOMEM$  DB      'Insufficient memory for '
              02414         DB      'specified format',CR
              02415         ENDIF
376A 57       02416 WHDRV$  DB      'Which drive is to be used ? ',3
     68 69 63 68 20 64 72 69
     76 65 20 69 73 20 74 6F
     20 62 65 20 75 73 65 64
     20 3F 20 03 
3787 44       02417 DSKNAM$ DB      'Diskette name ? ',3
     69 73 6B 65 74 74 65 20
     6E 61 6D 65 20 3F 20 03
3798 4D       02418 MPW$    DB      'Master password ? ',3
     61 73 74 65 72 20 70 61
     73 73 77 6F 72 64 20 3F
     20 03 
37AB 4E       02419 NUMCYL$ DB      'Number of cylinders ? ',3
     75 6D 62 65 72 20 6F 66
     20 63 79 6C 69 6E 64 65
     72 73 20 3F 20 03 
              02420         IF      @BLD631
37C2 42       02421 STEP5$  DB      'Boot strap step rate ' ;<631>
     6F 6F 74 20 73 74 72 61
     70 20 73 74 65 70 20 72
     61 74 65 20 
              02422         ELSE
              02423 STEP5$  DB      'Boot strap stepping rate '
              02424         ENDIF
37D7 3C       02425         DB      '<6, 12, 20, 30 msecs> ? ',3
     36 2C 20 31 32 2C 20 32
     30 2C 20 33 30 20 6D 73
     65 63 73 3E 20 3F 20 03
              02426         IF      @BLD631
37F0 42       02427 STEP8$  DB      'Bootstrap step rate '  ;<631>
     6F 6F 74 73 74 72 61 70
     20 73 74 65 70 20 72 61
     74 65 20 
              02428         ELSE
              02429 STEP8$  DB      'Bootstrap stepping rate '
              02430         ENDIF
3804 3C       02431         DB      '<3, 6, 10, 15/20 msecs> ? ',3
     33 2C 20 36 2C 20 31 30
     2C 20 31 35 2F 32 30 20
     6D 73 65 63 73 3E 20 3F
     20 03 
381F 45       02432 SIDES$  DB      'Enter number of sides <1,2> ? ',3
     6E 74 65 72 20 6E 75 6D
     62 65 72 20 6F 66 20 73
     69 64 65 73 20 3C 31 2C
     32 3E 20 3F 20 03 
383E 53       02433 DEN?$   DB      'Single or Double density  ? ',3
     69 6E 67 6C 65 20 6F 72
     20 44 6F 75 62 6C 65 20
     64 65 6E 73 69 74 79 20
     3C 53 2C 44 3E 20 3F 20
     03 
3860 44       02434 NOTRDY$ DB      'Drive not ready',CR
     72 69 76 65 20 6E 6F 74
     20 72 65 61 64 79 0D 
3870 57       02435 CANTWR$ DB      'Write protected disk',CR
     72 69 74 65 20 70 72 6F
     74 65 63 74 65 64 20 64
     69 73 6B 0D 
3885 44       02436 NODRV$  DB      'Drive not in system',CR
     72 69 76 65 20 6E 6F 74
     20 69 6E 20 73 79 73 74
     65 6D 0D 
3899 4C       02437 PMTDST$ DB      'Load destination diskette  ',CR
     6F 61 64 20 64 65 73 74
     69 6E 61 74 69 6F 6E 20
     64 69 73 6B 65 74 74 65
     20 20 3C 45 4E 54 45 52
     3E 0D 
38BC 44       02438 HASDAT$ DB      'Disk contains data -- ',3
     69 73 6B 20 63 6F 6E 74
     61 69 6E 73 20 64 61 74
     61 20 2D 2D 20 03 
38D3 4E       02439 NOFMT$  DB      'Non-standard format',CR
     6F 6E 2D 73 74 61 6E 64
     61 72 64 20 66 6F 72 6D
     61 74 0D 
38E7 55       02440 CANTRD$ DB      'Unreadable directory',CR
     6E 72 65 61 64 61 62 6C
     65 20 64 69 72 65 63 74
     6F 72 79 0D 
38FC 4E       02441 NODIR$  DB      'Non-initialized directory',CR
     6F 6E 2D 69 6E 69 74 69
     61 6C 69 7A 65 64 20 64
     69 72 65 63 74 6F 72 79
     0D 
3916 4E       02442 PACKID$ DB      'Name=XXXXXXXX  Date=MM/DD/YY',CR
     61 6D 65 3D 58 58 58 58
     58 58 58 58 20 20 44 61
     74 65 3D 4D 4D 2F 44 44
     2F 59 59 0D 
3933 20       02443 OLDMPW$ DB      '  Enter its Master Password'
     20 45 6E 74 65 72 20 69
     74 73 20 4D 61 73 74 65
     72 20 50 61 73 73 77 6F
     72 64 
394E 20       02444         DB      ' or  to abort: ',3
     6F 72 20 3C 42 52 45 41
     4B 3E 20 74 6F 20 61 62
     6F 72 74 3A 20 03 
3965 2A       02445 LASTMSG DB      '*** The target drive is a hard disk ***',LF
     2A 2A 20 54 68 65 20 74
     61 72 67 65 74 20 64 72
     69 76 65 20 69 73 20 61
     20 68 61 72 64 20 64 69
     73 6B 20 2A 2A 2A 0A 
398D 41       02446 SURE?$  DB      'Are you sure you want to format it ? ',3
     72 65 20 79 6F 75 20 73
     75 72 65 20 79 6F 75 20
     77 61 6E 74 20 74 6F 20
     66 6F 72 6D 61 74 20 69
     74 20 3F 20 03 
39B3 0A       02447 INVMPW$ DB      LF,'Invalid Master Password',LF,CR
     49 6E 76 61 6C 69 64 20
     4D 61 73 74 65 72 20 50
     61 73 73 77 6F 72 64 0A
     0D 
39CD 49       02448 BADNAM$ DB      'Invalid Disk Name',CR
     6E 76 61 6C 69 64 20 44
     69 73 6B 20 4E 61 6D 65
     0D 
39DF 44       02449 PAKNAM$ DB      'DATADISK'
     41 54 41 44 49 53 4B 
39E7 50       02450 PAKMPW$ DB      'PASSWORD'
     41 53 53 57 4F 52 44 
              02451 ;
3100          02452         END     FORMAT
3100 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!