source: xtideuniversalbios/trunk/XTIDE_Universal_BIOS/Src/Handlers/Int13h/AH15h_HSize.asm@ 371

Last change on this file since 371 was 369, checked in by gregli@…, 12 years ago

Removed align directives for initalization code and added define for align in boot-time calls to the assembly library (defaulting to 1), resulting in a significant savings for the AT and 386 builds. Fixed a bug with switch command line handling in the serial server. Put in CR characters in licesnse.txt, so that it properly displays on Windows. In the configurator, added default values for user supplied CHS and LBA values, defaulting to values within range when those features are enabled. Updated the copyright message in the configurator as the literal word Copyright is important.

File size: 2.9 KB
RevLine 
[117]1; Project name : XTIDE Universal BIOS
[3]2; Description : Int 13h function AH=15h, Read Disk Drive Size.
3
4; Section containing code
5SECTION .text
6
7;--------------------------------------------------------------------
8; Int 13h function AH=15h, Read Disk Drive Size.
9;
10; AH15h_HandlerForReadDiskDriveSize
11; Parameters:
[148]12; DL: Translated Drive number
13; DS:DI: Ptr to DPT (in RAMVARS segment)
[150]14; SS:BP: Ptr to IDEPACK
15; Returns with INTPACK:
[294]16; If successful:
[258]17; AH: Hard Disk: 3 (Hard disk accessible)
18; Floppy: 1 (Floppy disk, without change detection)
[3]19; CX:DX: Total number of sectors
20; CF: 0
21; If failed:
22; AH: 0 (Drive not present)
23; CX:DX: 0
24; CF: 1
25;--------------------------------------------------------------------
26AH15h_HandlerForReadDiskDriveSize:
[258]27%ifdef MODULE_SERIAL_FLOPPY
28 mov cl, 1 ; 1 = floppy disk, no change detection
[294]29
30 test dl,dl ; DO NOT store the sector count if this is a
31 jns .FloppyDrive ; floppy disk, some OS's depend on this not
[258]32 ; happening for floppies in order to boot.
33%endif
[294]34
[252]35 call AH15h_GetSectorCountToBXDXAX
[258]36 mov [bp+IDEPACK.intpack+INTPACK.cx], dx ; HIWORD to CX
37 xchg [bp+IDEPACK.intpack+INTPACK.dx], ax ; LOWORD to DX, AL gets drive number
[3]38
[294]39 xor ah, ah
40%ifdef MODULE_SERIAL_FLOPPY
[258]41 mov cl, 3 ; 3 = Hard Disk Accessible
42.FloppyDrive:
[294]43
44 call Int13h_SetErrorCodeToBdaAndToIntpackInSSBPfromAH_ALHasDriveNumber ; Store success to BDA and CF
45 mov [bp+IDEPACK.intpack+INTPACK.ah], cl
[258]46%else
[294]47 call Int13h_SetErrorCodeToBdaAndToIntpackInSSBPfromAH ; Store success to BDA and CF
[258]48 mov BYTE [bp+IDEPACK.intpack+INTPACK.ah], 3
[294]49%endif
50
[148]51 jmp Int13h_ReturnFromHandlerWithoutStoringErrorCode
[150]52
53
54;--------------------------------------------------------------------
55; AH15h_GetSectorCountFromForeignDriveToDXAX:
[252]56; AH15h_GetSectorCountToBXDXAX:
[150]57; Parameters:
[252]58; DL: Drive number (AH15h_GetSectorCountFromForeignDriveToDXAX only)
[150]59; DS: RAMVARS segment
[252]60; DS:DI: Ptr to DPT (AH15h_GetSectorCountToDXAX only)
[150]61; Returns:
62; DX:AX: Total sector count
63; BX: Zero
64; Corrupts registers:
65; CX
66;--------------------------------------------------------------------
67AH15h_GetSectorCountFromForeignDriveToDXAX:
68 mov ah, GET_DRIVE_PARAMETERS
69 call Int13h_CallPreviousInt13hHandler
70 jmp SHORT ConvertAH08hReturnValuesToSectorCount
71
[252]72AH15h_GetSectorCountToBXDXAX:
[150]73 call AH8h_GetDriveParameters
74 ; Fall to ConvertAH08hReturnValuesToSectorCount
75
76ConvertAH08hReturnValuesToSectorCount:
[155]77 call Address_ExtractLCHSparametersFromOldInt13hAddress
[285]78 mov al, bh ; AL = Max head number
79 inc cx ; Max cylinder number to cylinder count
80 inc ax ; Max head number to head count (AH=8h returns max 254 so no overflow to AH)
81 mul bl ; AX = Head count * Sectors per track
82 mul cx ; DX:AX = Total sector count for AH=0xh transfer functions
83 xor bx, bx
[150]84 ret
Note: See TracBrowser for help on using the repository browser.