Changeset 258 in xtideuniversalbios for trunk/XTIDE_Universal_BIOS/Src/Handlers/Int13h/AH8h_HParams.asm
- Timestamp:
- Feb 22, 2012, 7:01:53 PM (12 years ago)
- google:author:
- gregli@hotmail.com
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/XTIDE_Universal_BIOS/Src/Handlers/Int13h/AH8h_HParams.asm
r227 r258 14 14 ; SS:BP: Ptr to IDEPACK 15 15 ; Returns with INTPACK: 16 ; BL: Drive Type (for floppies only) 16 17 ; CH: Maximum cylinder number, bits 7...0 17 18 ; CL: Bits 7...6: Cylinder number bits 9...8 … … 19 20 ; DH: Maximum head number (0...255) 20 21 ; DL: Number of drives 22 ; ES:DI: Floppy DPT (for floppies only) 21 23 ; AH: Int 13h/40h floppy return status 22 24 ; CF: 0 if successfull, 1 if error 23 25 ;-------------------------------------------------------------------- 24 26 AH8h_HandlerForReadDiskDriveParameters: 27 25 28 call RamVars_IsDriveHandledByThisBIOS 26 jnc SHORT .GetDriveParametersForForeignHardDiskInDL 29 jnc SHORT .OurDrive 30 31 call Int13h_CallPreviousInt13hHandler 32 jnc SHORT .MidGame 33 jmp Int13h_ReturnFromHandlerAfterStoringErrorCodeFromAH 34 35 .OurDrive: 27 36 call AH8h_GetDriveParameters 28 jmp SHORT .ReturnAfterStoringValuesToIntpack29 37 30 .GetDriveParametersForForeignHardDiskInDL: 31 call Int13h_CallPreviousInt13hHandler 32 jc SHORT .ReturnErrorFromPreviousInt13hHandler 33 call RamVars_GetCountOfKnownDrivesToDL 34 .ReturnAfterStoringValuesToIntpack: 38 %ifdef MODULE_SERIAL_FLOPPY 39 push cs ; setup registers if we are a floppy drive, in all cases 40 pop es ; if it is not a floppy drive, these values will not be put in INTPACK 41 mov di, AH8h_FloppyDPT 42 %endif 43 ;; fall-through 44 45 .MidGame: 46 call RamVars_GetCountOfKnownDrivesToAX ; assume hard disk for now, will discard if for floppies 47 48 test byte [bp+IDEPACK.intpack+INTPACK.dl], 080h 49 jnz .Done 50 51 mov [bp+IDEPACK.intpack+INTPACK.bl], bl 52 53 mov [bp+IDEPACK.intpack+INTPACK.es], es 54 mov [bp+IDEPACK.intpack+INTPACK.di], di 55 56 call FloppyDrive_GetCountToAX 57 58 .Done: 59 mov ah, dh 60 35 61 mov [bp+IDEPACK.intpack+INTPACK.cx], cx 36 mov [bp+IDEPACK.intpack+INTPACK.dx], dx 62 xchg [bp+IDEPACK.intpack+INTPACK.dx], ax ; recover DL for BDA last status byte determination 63 37 64 xor ah, ah 38 .ReturnErrorFromPreviousInt13hHandler: 65 %ifdef MODULE_SERIAL_FLOPPY 66 jmp Int13h_ReturnFromHandlerAfterStoringErrorCodeFromAH_ALHasDriveNumber 67 %else 39 68 jmp Int13h_ReturnFromHandlerAfterStoringErrorCodeFromAH 69 %endif 40 70 41 71 … … 51 81 ; Bits 5...0: Maximum sector number (1...63) 52 82 ; DH: Maximum head number (0...255) 53 ; DL: Number of drives54 83 ; Corrupts registers: 55 84 ; AX, BX … … 73 102 ; Bits 5...0: Maximum sector number (1...63) 74 103 ; DH: Maximum head number (0...255) 75 ; DL: Number of drives76 104 ; Corrupts registers: 77 105 ; AX, BX … … 85 113 or cl, bh ; CL bits 0...5 = Sectors per track 86 114 mov dh, bl ; DH = Maximum head number 87 jmp RamVars_GetCountOfKnownDrivesToDL 115 116 %ifdef MODULE_SERIAL_FLOPPY 117 mov bl,[di+DPT.bFlagsHigh] 118 eSHR_IM bl,FLGH_DPT_SERIAL_FLOPPY_TYPE_FIELD_POSITION 119 %endif 120 ret 121 122 %ifdef MODULE_SERIAL_FLOPPY 123 ; 124 ; Floppy Disk Parameter Table. There is no way to specify more than one of these 125 ; for any given system, so no way to make this drive or media specific. 126 ; So we return fixed values out of the ROM for callers might be expecting this information. 127 ; 128 ; On AT systems, we return the information for a 1.44 MB disk, 129 ; and on XT systems, we return the information for a 360 KB disk. 130 ; 131 AH8h_FloppyDPT: 132 %ifdef USE_AT 133 db 0ah << 4 | 0fh ; Offset 0: Drive timings, 1.44MB values 134 %else 135 db 0dh << 4 | 0fh ; Offset 0: Drive timings, 360KB values 136 %endif 137 138 db 1h << 1 | 0 ; Offset 1: Typical values of 1 for head load time 139 ; DMA used (although it actually is not, but is more restrctive) 140 db 25h ; Offset 2: Inactiviy motor turn-off delay, 141 ; Typical value of 25h for 2 second delay 142 db 02h ; Offset 3: Sector size, always 512 143 144 %ifdef USE_AT 145 db 12h ; Offset 4: Sectors per track, 1.44MB value 146 db 1bh ; Offset 5: Sector gap, 1.44MB value 147 %else 148 db 09h ; Offset 4: Sectors per track, 360KB value 149 db 2ah ; Offset 5: Sector gap, 360KB value 150 %endif 151 152 db 0ffh ; Offset 6: Data length 153 154 %ifdef USE_AT 155 db 6ch ; Offset 7: Format gap length, 1.44MB value 156 %else 157 db 50h ; Offset 7: Format gap length, 360KB value 158 %endif 159 160 db 0f6h ; Offset 8: Fill byte for format 161 db 0fh ; Offset 9: Head setting time 162 db 08h ; Offset A: Wait for motor startpu time 163 164 %ifdef USE_AT 165 db 79 ; Offset B: Maximum track number, 1.44MB value 166 db 0 ; Offset C: Data transfer rate, 1.44MB value 167 db 4 ; Offset D: Diskette CMOS drive type, 1.44MB value 168 %else 169 db 39 ; Offset B: Maximum track number, 360KB value 170 db 80h ; Offset C: Data transfer rate, 360KB value 171 db 1 ; Offset D: Diskette CMOS drive type, 360KB value 172 %endif 173 %endif
Note: See TracChangeset
for help on using the changeset viewer.