MISOSYS EDAS-4.3 04/11/99 22:24:33 Winchester Driver & Initiali Page 00001 00001 ;Assemble RS hard disk driver for 6.x - 12/12/83 0000 00002 *GET BUILDVER/ASM:3 00003 ; 00004 ; Buildver/asm is a bit of a kludge since not all utilities can load 00005 ; equates from LDOS60 and still compile. LOWCORE and everybody else 00006 ; relies on this setting, and it eventually ends up in LDOS60/EQU 00007 ; for programs that can use that. 00008 ; FFFF 00009 @BLD631 EQU -1 ;<631>Build 631 distribution (LEVEL 1B) 00010 ; These switches activate patches made since the 1B release. 00011 ; It is important that all earlier patches be enabled when a higher 00012 ; patch is enabled. 00013 ; Patches C thru F were published in TMQ IV.iv, page 32 (NOTE: the 00014 ; patch addresses listed for SPOOL in SPOOL1/FIX are 19H high.) FFFF 00015 @BLD631C EQU -1 ;<631>Apply 1C patches (SETKI) FFFF 00016 @BLD631D EQU -1 ;<631>Apply 1D patches (DIR) FFFF 00017 @BLD631E EQU -1 ;<631>Apply 1E patches (DIR & MEMDISK/DCT) FFFF 00018 @BLD631F EQU -1 ;<631>Apply 1F patches (SPOOL) 00019 ; Patches G and H were published in TMQ V.i, pages 10 and 18/19. FFFF 00020 @BLD631G EQU -1 ;<631>Apply 1G patches (//KEYIN,DIR,DO *) FFFF 00021 @BLD631H EQU -1 ;<631>Apply 1H patches (MEMORY) 00022 ; 00023 ;End of BUILDVER/ASM 0000 00024 *GET HDWD6A/ASM:3 00025 ; HDWD1/ASM - Western Digital driver 1000/1010 - 06/10/84 MISOSYS EDAS-4.3 04/11/99 22:24:33 Winchester Driver & Initiali Page 00002 ' disk command 00443 ; C => logical drive number 00444 ; D => logical cylinder number 00445 ; E => logical sector number 00446 ; HL => sector I/O buffer address 00447 ; IY => drive code table address 00448 ;*=*=* 00449 ; bit 2 => wait enable 00450 ; bit 3 => device enable 00451 ; bit 4 => software reset 00452 ;*=*=* 00C8 00453 DATA EQU 0C8H ;Data transfer port 00C9 00454 ERROR EQU DATA+1 ;Error code port 00C9 00455 WRP EQU DATA+1 ;Write precompensation port 00CA 00456 SECNT EQU DATA+2 ;Sector count 00CB 00457 SECNO EQU DATA+3 ;Sector number port 00CC 00458 CYLLO EQU DATA+4 ;Cylinder lo 00CD 00459 CYLHI EQU DATA+5 ;Cylinder hi 00CE 00460 SDH EQU DATA+6 ;Size/Drive/Head port 00CF 00461 STATUS EQU DATA+7 ;Status port 00CF 00462 COMMAND EQU DATA+7 ;Command port 00463 ;*=*=* 00464 ; Western Digital Controller OP codes 00465 ; 00466 ; 0001rrrr - Restore drive 00467 ; 0111rrrr - Seek sector/head/cyl 00468 ; 0010d000 - Read sector 00469 ; 00110000 - Write sector 00470 ; 01010000 - Format track 00471 ; MISOSYS EDAS-4.3 04/11/99 22:24:33 Winchester Driver & Initiali Page 00003 '3 3235 D3CF 00528 OUT (COMMAND),A ;* execute command 3237 CDFB32 00529 CALL DWR1 ;Wait until not busy 3238 00530 R1 EQU $-2 323A AF 00531 XOR A 323B D3CD 00532 OUT (CYLHI),A 323D D3CC 00533 OUT (CYLLO),A ;Reset for WD1010 323F 3E10 00534 LD A,1<4!0 ;Restore w/step rate 3240 00535 STP2 EQU $-1 ;+set by user entry 3241 D3CF 00536 OUT (COMMAND),A 3243 214F00 00537 LD HL,0<8!79 3246 012002 00538 LD BC,2<8!' ' ;Blank out 'H' 3249 00539 @@VDCTL 3249+3E0F 00540 LD A,15 324B+EF 00541 RST 40 324C 0632 00542 LD B,50 ;Delay about .32 sec. 324E 00543 @@PAUSE 324E+3E10 00544 LD A,16 3250+EF 00545 RST 40 3251 CDFD32 00546 CALL DWR2 ;Wait for completion 3252 00547 R2 EQU $-2 3254 20BD 00548 JR NZ,RETRYR ;Retry if error 3256 3E00 00549 PCPTRK LD A,00 3258 D3C9 00550 OUT (ERROR),A ;Set precomp trk# / 4 325A C9 00551 LINK RET ;End call before install 325B 57 00552 DB 'WD' ;2 more bytes for @ICNFG 44 00553 ; 00554 ;*=*=* 00555 ; Driver start 00556 ;*=*=* 325D CB58 00557 START BIT 3,B 325F 2018 00558 JR NZ,DIO ;Jump if I/O request 00559 ; treat any other request as TSTBSY 00560 IFDEF HARDWP 3261 FD7E03 00561 TSTBSY LD A,(IY+3) ;P/u drive address 3264 E603 00562 AND 3 ; & remove other junk 3266 4F 00563 LD C,A ;Save for counter 3267 DBC0 00564 IN A,(HARDWP) ;P/u the front panel WP 3269 DC 00565 DB 0DCH ;Ignore next 2 by CALL C, 326A 07 00566 ALIGN RLCA ;Align hard WP bit to b7 326B 0D 00567 DEC C ; according to drive 326C 20FC 00568 JR NZ,ALIGN ; address 326E FDB603 00569 OR (IY+3) ;Merge software WP 00570 ELSE 00571 ; 00572 TSTBSY LD A,(IY+3) ;Just dct bit MISOSYS EDAS-4.3 04/11/99 22:24:33 Winchester Driver & Initiali Page 00005 'correct DCT type 00793 ;*=*=* 33C0 FD210032 00794 USER LD IY,DCTAB 00795 ;*=*=*% 00796 ; Request physical drive slot first 00797 ;*=*=* 33C4 1803 00798 JR PRMPT4 33C6 CDC339 00799 GETDRV CALL ABTJCL 33C9 217A36 00800 PRMPT4 LD HL,DRIVE$ ;Request physical drive# 33CC CDB138 00801 CALL GETARG ;Display & get argument 33CF D631 00802 SUB '1' ;Convert to binary (0-3) 33D1 38F3 00803 JR C,GETDRV ;Re-request if bad range 33D3 FE04 00804 CP 3+1 ;Check max value 33D5 30EF 00805 JR NC,GETDRV ;Re-request if bad range 00806 ;*=*=* 00807 ; Stuff the drive select address into DCT 00808 ;*=*=* 00809 ; Merge the drive address 33D7 FDB603 00810 OR (IY+DRVSEL) ; into the standard 33DA FD7703 00811 LD (IY+DRVSEL),A ; DCT parameters 00812 ;*=*=* 00813 ; see if drive type has been established 00814 ;*=*=* 33DD CDB236 00815 CALL FNDOLD 33E0 2027 00816 JR NZ,PRMPT1 ;1st installation of drive 33E2 DD7E05 00817 LD A,(IX+5) ;IX=>existing DCT 33E5 FD7705 00818 LD (IY+5),A ;Propagate to this one 33E8 E607 00819 AND 00000111B 33EA CD4935 00820 CALL LDMAX ;Set max heads 33ED DD7E06 00821 LD A,(IX+6) ;Cyl count 33F0 FD7706 00822 LD (IY+6),A ;Set it 33F3 CB3F 00823 SRL A ;Dir cyl in center 33F5 FD7709 00824 LD (IY+9),A 33F8 DDCB046E 00825 BIT 5,(IX+4) ;Double? 33FC CA9634 00826 JP Z,STMP 33FF FDCB04EE 00827 SET 5,(IY+4) ;Set to match 3403 C39634 00828 JP STMP ;Now map heads in-use 00829 ;*=*=* 00830 ; Request drive type information 00831 ;*=*=* 3406 CDC339 00832 GTMAXHD CALL ABTJCL ;Unless re-prompt 3409 210E36 00833 PRMPT1 LD HL,HDS$ 340C CDB138 00834 CALL GETARG ;Prmpt/get 1 char 340F D631 00835 SUB '1' 3411 38F3 00836 JR C,GTMAXHD ;Must be at least 1 3413 FE08 00837 CP 8 ;Not over 8 3415 30EF 00838 JR NC,GTMAXHD 3417 FD7705 00839 LD (IY+5),A ;Store total entry 341A CD4935 00840 CALL LDMAX ;Store away MISOSYS EDAS-4.3 04/11/99 22:24:33 Winchester Driver & Initiali Page 00012 '3.0 3487 E6F0 00899 AND 11110000B ;Leave command 3489 B1 00900 OR C ;Merge step rate bits 348A 323432 00901 LD (STP1),A 348D 3A4032 00902 FASTOK LD A,(STP2) 3490 E6F0 00903 AND 11110000B ;P/u command 3492 B1 00904 OR C ;Merge step 3493 324032 00905 LD (STP2),A 00906 ; 3496 CDDC36 00907 STMP CALL SETMAP ; map out heads in use 00908 ;*=*=* 00909 ;Request heads for partition 00910 ;*=*=* 3499 1803 00911 JR PRMPT5 349B CDC339 00912 REQHD CALL ABTJCL 349E 213E3A 00913 PRMPT5 LD HL,HEADMP$ ;Show in-use 34A1 CDBD39 00914 CALL @DSPLY 34A4 21653A 00915 LD HL,HEADS$ ;Get number for partition 34A7 CDB138 00916 CALL GETARG 34AA D631 00917 SUB '1' ;Adjust to binary 34AC 38ED 00918 JR C,REQHD ;Must be > 0 34AE FDBE00 00919 CP (IY+0) ;Free heads left 34B1 30E8 00920 JR NC,REQHD ;User exceed max? 34B3 3C 00921 INC A ;Make real 34B4 4F 00922 LD C,A 34B5 32C437 00923 LD (NUMHDS),A ;Store number for later 34B8 3D 00924 DEC A ;Offset fm 0 34B9 0F 00925 RRCA ;Shift to 5-7 34BA 0F 00926 RRCA 34BB 0F 00927 RRCA 34BC 47 00928 LD B,A ;Save # of heads 34BD FD7E07 00929 LD A,(IY+7) ;P/u # of heads in tab 34C0 E61F 00930 AND 1FH ;Strip what's there 34C2 B0 00931 OR B ;Merge # of heads 34C3 FD7707 00932 LD (IY+7),A ;Update DCT$+7 init 00933 ;*=*=* 00934 ; Calculate proper Sectors Per Granule (SPG) 00935 ; and Grans per cylinder 00936 ;*=*=* 34C6 79 00937 LD A,C ;Number of heads 34C7 87 00938 ADD A,A ;Double # for GPC 34C8 160F 00939 LD D,15 ;Sec/gran (-1) 34CA 1E09 00940 LD E,8+1 ;Use 16 sec/gran w/4 heads 34CC FDCB046E 00941 BIT 5,(IY+4) ;Unless dbl bit is set 34D0 2802 00942 JR Z,UPTO4 34D2 1E05 00943 LD E,4+1 ;Then 2 is max 34D4 BB 00944 UPTO4 CP E ;More than max heads (x2)? MISOSYS EDAS-4.3 04/11/99 22:24:33 Winchester Driver & Initiali Page 00014 'next 3510 FE2E 00987 CP '.' ;Decimal 3512 2814 00988 JR Z,POINT ;Go if found 3514 FE0D 00989 CP CR 3516 2811 00990 JR Z,ISCR ;End of line 3518 D630 00991 SUB '0' ;Make BCD 0-7 351A D8 00992 RET C ;Out of range 351B FE08 00993 CP 7+1 ;7.5 is high number except 10 351D 3027 00994 JR NC,RNGERR 351F 5F 00995 LD E,A ;Save BCD 3520 7A 00996 LD A,D ;Take D*10 MISOSYS EDAS-4.3 04/11/99 22:24:33 Winchester Driver & Initiali Page 00015 '15 3544 BF 01025 CP A ;Set Z 3545 C9 01026 RET 3546 F6FF 01027 RNGERR OR 0FFH ;Set NZ 3548 C9 01028 RET 01029 ;*=*=* 01030 ;Stuff max heads on drive A=numb offset fm 0 01031 ;*=*=* 3549 0F 01032 LDMAX RRCA ;Roll to bits 7-5 354A 0F 01033 RRCA 354B 0F 01034 RRCA 354C 4F 01035 LD C,A 354D FD7E07 01036 LD A,(IY+7) ;Merge 3550 E61F 01037 AND 00011111B 3552 B1 01038 OR C 3553 FD7707 01039 LD (IY+7),A ;Store max heads 3556 C9 01040 RET 01041 ;*=*=* 01042 ;Driver dependent strings 3557 0A 01043 HELLO$ DB LF 3558 54 01044 DB 'TRSHD6b - WD 1000/1010 - Winchester Disk Driver',LF 52 53 48 44 36 62 20 2D 20 57 44 20 31 30 30 30 2F 31 30 31 30 20 2D 20 57 69 6E 63 68 65 73 74 MISOSYS EDAS-4.3 04/11/99 22:24:33 Winchester Driver & Initiali Page 00016 ' 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 35C1 49 01055 DB 'Inc., ',10 ;<631> 6E 63 2E 2C 20 20 20 20 20 20 20 0A 01056 ELSE 01057 DB ' - 6.3.0 - Copyright 1982/83/84/86 by Logical Syst' 01058 DB 'ems, Inc. ',10 01059 ENDIF 01060 ; 01061 ; DB 'All Rights Reserved. Licensed 1982/83/84 to Tandy ' 01062 ; DB 'Corporation.',10,13 01063 ; 01064 ; DB 'All Rights Reserved. Beta-TEST Level/AD, DO NOT DI' 01065 ; DB 'STRIBUTE !! ',10,13 01066 ; DB 'All Rights reserved by LSI, 8970 N. 55th St. Milwa' 01067 ; DB 'ukee, Wisc. ',10,13 35CE 41 01068 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 3600 72 01069 DB 'rohibited. ',10,13 6F 68 69 62 69 74 65 64 2E 20 20 0A 0D 360E 45 01070 HDS$ DB 'Enter total number of heads' 6E 74 65 72 20 74 6F 74 61 6C 20 6E 75 6D 62 65 72 20 6F 66 20 68 65 61 64 73 3629 20 01071 DB ' on drive <1-8> ',3 MISOSYS EDAS-4.3 04/11/99 22:24:33 Winchester Driver & Initiali Page 00017 ' ',3 2D 34 3E 20 03 01076 ; 01077 ;****************************************** 01078 ;Common subroutines for hard disk drivers 01079 ;******************************************* 01080 ;*=*=* 01081 ; Routine to set a bit in head map 01082 ;*=*=* 369C 07 01083 SETBIT RLCA ;Shift to "b" field 369D 07 01084 RLCA 369E 07 01085 RLCA 369F F6C3 01086 OR 0C3H ;Establish as SET b,E 36A1 32A536 01087 LD (SBIT1+1),A ;Alter the OP code 36A4 CBC3 01088 SBIT1 SET 0,E ;Map the head bit 36A6 C9 01089 RET 01090 ;*=*=* 01091 ; Routine to test if bit is set in head map 01092 ;*=*=* 36A7 07 01093 BITBIT RLCA 36A8 07 01094 RLCA 36A9 07 01095 RLCA 36AA F643 01096 OR 43H ;Construct BIT b,E 36AC 32B036 01097 LD (BBIT1+1),A 36AF CB43 01098 BBIT1 BIT 0,E 36B1 C9 01099 RET 01100 ;*=*=* 01101 ; get total heads and cyl count if an existing driver is 01102 ; found for this drive select address 36B2 3A883B 01103 FNDOLD LD A,(RESNUM) ;Get number of DCTs 36B5 B7 01104 OR A ;Using this driver 36B6 2821 01105 JR Z,NTHERE ;If none, prompt 36B8 47 01106 LD B,A ;Number to B 36B9 21893B 01107 LD HL,DCTPTR ;=>list of addresses MISOSYS EDAS-4.3 04/11/99 22:24:33 Winchester Driver & Initiali Page 00018 'DCT 36BF 23 01111 INC HL ;=>next pointer 36C0 D5 01112 PUSH DE 36C1 DDE1 01113 POP IX ;IX=>DCT 36C3 DD7E00 01114 LD A,(IX) ;Don't use any drive 36C6 FEC9 01115 CP 0C9H ; that's disabled 36C8 280D 01116 JR Z,SKPTHS 36CA DD7E03 01117 LD A,(IX+DRVSEL) ;Check if this matches 36CD E603 01118 AND 3 ; the drive # 36CF 4F 01119 LD C,A ;P/u drive requested 36D0 FD7E03 01120 LD A,(IY+DRVSEL) 36D3 E603 01121 AND 3 ;Check if same 36D5 B9 01122 CP C ;Match up yet? 36D6 C8 01123 RET Z ;IX=>DCT for same disk 36D7 10E3 01124 SKPTHS DJNZ OLDLP ;Check the rest 36D9 F6FF 01125 NTHERE OR 0FFH ;Force NZ 36DB C9 01126 RET 01127 ;*=*=* 01128 ;SETMAP 01129 ;IY=>New DCT containing Drive address in bits 0-2 of IY+3 01130 ;IY+7 = max heads possible in bits 5-7 01131 ;Sets up Heads in use message 01132 ;Sets IY+1&2 to existing driver address if found 01133 ;Sets used bits in (BITMAP) 01134 ;Sets (MAXHDS) = total heads 01135 ;Sets IY+0 = free heads 01136 ;*=*=* 01137 ; P/u # of heads on the drive & init checks 01138 ;*=*=* 36DC FD7E07 01139 SETMAP LD A,(IY+7) ;P/u Maximum heads 36DF 07 01140 RLCA ;Shift into 0-2 36E0 07 01141 RLCA 36E1 07 01142 RLCA 36E2 E607 01143 AND 7 ;Mask off Max sector # 36E4 3C 01144 INC A ;Adjust for zero offset 36E5 32873B 01145 LD (MAXHDS),A ;Save for later 36E8 47 01146 LD B,A 01147 ;*=*=* 01148 ; Adjust heads in use message 01149 ;*=*=* 36E9 21543A 01150 LD HL,INUSE$ 36EC 3E08 01151 LD A,8 36EE 90 01152 SUB B ;Calc index into msg 36EF 280C 01153 JR Z,GOT8HDS 36F1 47 01154 LD B,A 36F2 E5 01155 PUSH HL ;Save start of message 36F3 23 01156 BLP INC HL ;Bump msg pointer 2 36F4 23 01157 INC HL ; bytes per head loss 36F5 10FC 01158 DJNZ BLP 36F7 D1 01159 POP DE ;Recover start of msg MISOSYS EDAS-4.3 04/11/99 22:24:33 Winchester Driver & Initiali Page 00019 'saved addresses 370A C5 01169 HCLP PUSH BC ;Save loop counter 370B 4E 01170 LD C,(HL) 370C 23 01171 INC HL 370D 46 01172 LD B,(HL) ;P/u DCT address 370E 23 01173 INC HL 370F E5 01174 PUSH HL ;Save ptr to next entry 3710 C5 01175 PUSH BC 3711 DDE1 01176 POP IX ;Xfer to IX 3713 DD7E01 01177 LD A,(IX+1) ;Move address of driver 3716 FD7701 01178 LD (IY+1),A ;To new DCT 3719 DD7E02 01179 LD A,(IX+2) 371C FD7702 01180 LD (IY+2),A 371F CD8737 01181 CALL CNTHDS ;Add 'em up 3722 E1 01182 POP HL 3723 C1 01183 POP BC 3724 10E4 01184 DJNZ HCLP 3726 7B 01185 LD A,E 3727 32C237 01186 LD (BITMAP),A 01187 ;*=*=* 01188 ; check for heads in use past entered total 01189 ;*=*=* 372A 3A873B 01190 LD A,(MAXHDS) ;Entered # 372D 3D 01191 DEC A 372E FE07 01192 TSTHGH CP 7 ;Max of 8 3730 280B 01193 JR Z,NORES ;All OK 3732 3C 01194 INC A ;Check each past total 3733 4F 01195 LD C,A 3734 CDA736 01196 CALL BITBIT ;For in-use 3737 C29A39 01197 JP NZ,BADTOT ;Abort if any 373A 79 01198 LD A,C 373B 18F1 01199 JR TSTHGH ;Check up to 8 01200 ; 373D 3A873B 01201 NORES LD A,(MAXHDS) ;P/u maximum 3740 6F 01202 LD L,A ;Save 3741 92 01203 SUB D ;Calculate the quantity 3742 CA9639 01204 JP Z,NOHEAD ;Go if none remaining 01205 ;Find largest group of contiguous heads 3745 010000 01206 LD BC,0 ;Init count 3748 AF 01207 XOR A ;Start w/0 3749 67 01208 CNTH1 LD H,A ;Save hd posn 374A CDA736 01209 CALL BITBIT ;Head available? 374D 280A 01210 JR Z,CNTH3 ;Yes, count it 374F 0E00 01211 LD C,0 ;Reset for hd in use MISOSYS EDAS-4.3 04/11/99 22:24:33 Winchester Driver & Initiali Page 00020 'IY into address fm (DCTADD) 01318 ;*=*=* 37DA FD3600C3 01319 INSTALL LD (IY),0C3H ;Stuff JP 37DE 3A883B 01320 LD A,(RESNUM) 37E1 B7 01321 OR A ;Is a copy loaded? 37E2 207D 01322 JR NZ,ISRES ;Then don't re-load 01323 ;*=*=* 01324 IFDEF LINK ;If driver has LINK defined... 37E4 CD1C32 01325 CALL INIT ;Init drv before moving driver 01326 ; Move @ICNFG vector into driver next 01327 ;*=*=* 37E7 DD210000 01328 LD IX,$-$ 37E9 01329 FLAGTB EQU $-2 ;Saved address of table 37EB DD7E1C 01330 LD A,(IX+28) ;Get opcode 37EE 325A32 01331 LD (LINK),A 37F1 DD6E1D 01332 LD L,(IX+29) ;Get address 37F4 DD661E 01333 LD H,(IX+30) 37F7 225B32 01334 LD (LINK+1),HL 37FA DDE5 01335 PUSH IX ;Save table address 01336 ENDIF 01337 ; 01338 ;*=*=* 01339 ; Relocate internal references in driver 01340 ;*=*=* 37FC DD21A433 01341 LD IX,RELTAB ;Point to relocation tbl 3800 210000 01342 SVEND LD HL,$-$ ;Find distance to move 3803 220C32 01343 LD (DISK+2),HL ;Set last byte used 3806 115333 01344 LD DE,DISKEND-1 3809 B7 01345 OR A ;Clear carry flag 380A ED52 01346 SBC HL,DE 380C 44 01347 LD B,H ;Move to BC 380D 4D 01348 LD C,L 380E 3E0A 01349 LD A,TABLEN ;Get table length 3810 DD6E00 01350 RLOOP LD L,(IX) ;Get address to change 3813 DD6601 01351 LD H,(IX+1) 3816 5E 01352 LD E,(HL) ;P/U address 3817 23 01353 INC HL 3818 56 01354 LD D,(HL) 3819 EB 01355 EX DE,HL ;Offset it 381A 09 01356 ADD HL,BC 381B EB 01357 EX DE,HL 381C 72 01358 LD (HL),D ;And put back 381D 2B 01359 DEC HL 381E 73 01360 LD (HL),E 381F DD23 01361 INC IX 3821 DD23 01362 INC IX 3823 3D 01363 DEC A 3824 20EA 01364 JR NZ,RLOOP ;Loop till done 01365 ;*=*=* 01366 IFDEF LINK 01367 ; Set up @ICNFG MISOSYS EDAS-4.3 04/11/99 22:24:33 Winchester Driver & Initiali Page 00023 'real DCT 01416 ;*=*=* 01417 ; log in correct dir cyl if possible 01418 ;*=*=* 3870 110000 01419 LD DE,0 ;Read BOOT MISOSYS EDAS-4.3 04/11/99 22:24:33 Winchester Driver & Initiali Page 00024 'HL to number in BC 38AD 01455 DECHEX @@DECHEX ;Make decimal in BC 38AD+3E60 01456 LD A,96 38AF+EF 01457 RST 40 38B0 C9 01458 RET 01459 ;*=*=* 01460 ; Routine to parse user input parameter 01461 ;*=*=* 38B1 0601 01462 GETARG LD B,1 38B3 CDBD39 01463 GETARGX CALL @DSPLY ;Display message 38B6 219B3C 01464 KEYIN LD HL,KEYBUF$ 38B9 0E00 01465 LD C,0 38BB 01466 @@KEYIN ;Fetch user response 38BB+3E09 01467 LD A,9 38BD+EF 01468 RST 40 38BE DA9239 01469 JP C,ABTJOB 38C1 7E 01470 LD A,(HL) ;Load value 38C2 C9 01471 RET MISOSYS EDAS-4.3 04/11/99 22:24:33 Winchester Driver & Initiali Page 00025 'info 395D+3E65 01575 LD A,101 MISOSYS EDAS-4.3 04/11/99 22:24:33 Winchester Driver & Initiali Page 00027 'msg 39CD 20CE 01654 JR NZ,ABORTL ;Log out 39CF E1 01655 POP HL ;Else restore regs 39D0 F1 01656 POP AF 39D1 C9 01657 RET 01658 ;*=*=* 01659 ; Messages & Data tables 01660 ;*=*=* 39D2 0000 01661 HCPTR DW 0 ;Pointer if going to HIGH$ 39D4 0A 01662 NOFMT$ DB LF,'Note: Drive appears to be unformatted.',CR 4E 6F 74 65 3A 20 44 72 69 76 65 20 61 70 70 65 61 72 73 20 74 6F 20 62 65 20 75 6E 66 6F 72 6D 61 74 74 65 64 2E 0D 39FC 0A 01663 HMEM$ DB LF,'Note:driver installed in high memory.',CR 4E 6F 74 65 3A 64 72 69 76 65 72 20 69 6E 73 74 61 6C 6C 65 64 20 69 6E 20 68 69 67 68 20 6D 65 6D 6F 72 79 2E 0D 3A23 0A 01664 JCLAB$ DB LF,'Incorrect entry from JCL.',CR 49 6E 63 6F 72 72 65 63 74 20 65 6E 74 72 79 20 66 72 6F 6D 20 4A 43 4C 2E 0D 3A3E 48 01665 HEADMP$ DB 'Heads already in use <' MISOSYS EDAS-4.3 04/11/99 22:24:33 Winchester Driver & Initiali Page 00029 '',CR 2D 2E 2D 2E 2D 2E 2D 2E 2D 2E 2D 2E 2D 2E 3E 0D 3A65 45 01667 HEADS$ DB 'Enter number of heads for partition <1-' 6E 74 65 72 20 6E 75 6D 62 65 72 20 6F 66 20 68 65 61 64 73 20 66 6F 72 20 70 61 72 74 69 74 69 6F 6E 20 3C 31 2D 3A8C 58 01668 HEADS1$ DB 'X> ',3 3E 20 03 3A90 45 01669 STRTHD$ DB 'Enter starting head: ',3 6E 74 65 72 20 73 74 61 72 74 69 6E 67 20 68 65 61 64 3A 20 03 3AA6 48 01670 HDBAD$ DB 'Heads requested conflict with ' 65 61 64 73 20 72 65 71 75 65 73 74 65 64 20 63 6F 6E 66 6C 69 63 74 20 77 69 74 68 20 3AC4 68 01671 DB 'heads in-use.',CR 65 61 64 73 20 69 6E 2D 75 73 65 2E 0D 3AD2 4E 01672 NOHEAD$ DB 'No heads available on that drive.',CR 6F 20 68 65 61 64 73 20 61 76 61 69 6C 61 62 6C 65 20 6F 6E 20 74 68 61 74 20 64 72 69 76 65 2E 0D 3AF4 44 01673 BADTOT$ DB 'Drive has heads in use higher' 72 69 76 65 20 68 61 73 20 68 65 61 64 73 20 69 6E 20 75 73 65 20 68 69 67 68 65 72 3B11 20 01674 DB ' than entered total.',CR 74 68 61 6E 20 65 6E 74 65 72 65 64 20 74 6F 74 61 6C 2E 0D 3B26 4D 01675 ABTJOB$ DB 'Manual abort - Job terminated.',CR 61 6E 75 61 6C 20 61 62 6F 72 74 20 2D 20 4A 6F 62 20 74 65 72 6D 69 6E 61 74 65 64 2E 0D 3B45 4E 01676 NOROOM$ DB 'No memory space available.',CR 6F 20 6D 65 6D 6F 72 79 20 73 70 61 63 65 20 61 76 61 69 6C 61 62 6C 65 2E 0D 3B60 52 01677 CANTDO$ DB 'Requested drive slot already in use.',CR MISOSYS EDAS-4.3 04/11/99 22:24:33 Winchester Driver & Initiali Page 00030 '