MISOSYS EDAS-4.3 04/19/99 21:44:32 FORMAT - LS-DOS 6.3 Page 00001 00001 ;FORMAT1/ASM - Format Program MISOSYS EDAS-4.3 04/19/99 21:44:32 FORMAT - LS-DOS 6.3 Page 00002 '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 ; MISOSYS EDAS-4.3 04/19/99 21:44:32 FORMAT - LS-DOS 6.3 Page 00003 ' 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 MISOSYS EDAS-4.3 04/19/99 21:44:32 FORMAT - LS-DOS 6.3 Page 00004 ' 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 MISOSYS EDAS-4.3 04/19/99 21:44:32 FORMAT - LS-DOS 6.3 Page 00005 ' 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 MISOSYS EDAS-4.3 04/19/99 21:44:32 FORMAT - LS-DOS 6.3 Page 00010 ' 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 MISOSYS EDAS-4.3 04/19/99 21:44:32 FORMAT - LS-DOS 6.3 Page 00013 '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 MISOSYS EDAS-4.3 04/19/99 21:44:32 FORMAT - LS-DOS 6.3 Page 00014 ' 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 MISOSYS EDAS-4.3 04/19/99 21:44:32 FORMAT - LS-DOS 6.3 Page 00017 ' 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 # MISOSYS EDAS-4.3 04/19/99 21:44:32 FORMAT - LS-DOS 6.3 Page 00019 ' 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 MISOSYS EDAS-4.3 04/19/99 21:44:32 FORMAT - LS-DOS 6.3 Page 00020 '',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 MISOSYS EDAS-4.3 04/19/99 21:44:32 FORMAT - LS-DOS 6.3 Page 00023 ' 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 MISOSYS EDAS-4.3 04/19/99 21:44:32 FORMAT - LS-DOS 6.3 Page 00029 ' 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? MISOSYS EDAS-4.3 04/19/99 21:44:32 FORMAT - LS-DOS 6.3 Page 00032 ' 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> MISOSYS EDAS-4.3 04/19/99 21:44:32 FORMAT - LS-DOS 6.3 Page 00033 '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 MISOSYS EDAS-4.3 04/19/99 21:44:32 FORMAT - LS-DOS 6.3 Page 00034 ' 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 MISOSYS EDAS-4.3 04/19/99 21:44:32 FORMAT - LS-DOS 6.3 Page 00035 ' 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 MISOSYS EDAS-4.3 04/19/99 21:44:32 FORMAT - LS-DOS 6.3 Page 00039 ' 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 MISOSYS EDAS-4.3 04/19/99 21:44:32 FORMAT - LS-DOS 6.3 Page 00041 ' 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 MISOSYS EDAS-4.3 04/19/99 21:44:32 FORMAT - LS-DOS 6.3 Page 00043 ' 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> MISOSYS EDAS-4.3 04/19/99 21:44:32 FORMAT - LS-DOS 6.3 Page 00046 ' 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 MISOSYS EDAS-4.3 04/19/99 21:44:32 FORMAT - LS-DOS 6.3 Page 00047 ' ? ',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 MISOSYS EDAS-4.3 04/19/99 21:44:32 FORMAT - LS-DOS 6.3 Page 00048 '