Changeset 32 in xtideuniversalbios


Ignore:
Timestamp:
Aug 6, 2010, 7:11:04 AM (14 years ago)
Author:
Tomi Tilli
google:author:
aitotat
Message:

Correct number of drives is now returned from AH=08h even when it is redirected to foreign BIOS.

Location:
trunk/XTIDE_Universal_BIOS
Files:
9 edited

Legend:

Unmodified
Added
Removed
  • trunk/XTIDE_Universal_BIOS/Doc/changes.txt

    r28 r32  
    1 XTIDE Universal BIOS v1.1.3 (29 July 2010)
     1  * Correct number of drives is now returned from AH=08h even when it is redirected to foreign BIOS.
     2
     3
     4XTIDE Universal BIOS v1.1.3 (1 August 2010)
    25  * v1.1.1 broke booting from foreign drives, it is now fixed.
    36  * Improved error handling a bit.
  • trunk/XTIDE_Universal_BIOS/Src/Boot/BootMenu.asm

    r28 r32  
    22; Project name  :   IDE BIOS
    33; Created date  :   25.3.2010
    4 ; Last update   :   29.7.2010
     4; Last update   :   3.8.2010
    55; Author        :   Tomi Tilli
    66; Description   :   Displays Boot Menu.
     
    5757ALIGN JUMP_ALIGN
    5858BootMenu_GetMenuitemCount:
    59     call    RamVars_GetDriveCounts
    60     mov     ax, cx
     59    call    RamVars_GetHardDiskCountFromBDAtoCX
     60    xchg    ax, cx
    6161    call    FloppyDrive_GetCount
    6262    add     ax, cx
     
    254254    jb      SHORT .ReturnFloppyDriveInDX
    255255    sub     dx, cx                  ; Remove floppy drives from index
    256     call    RamVars_GetDriveCounts
     256    call    RamVars_GetHardDiskCountFromBDAtoCX
    257257    cmp     dx, cx                  ; Hard disk?
    258258    jb      SHORT .ReturnHardDiskInDX
     
    330330ALIGN JUMP_ALIGN
    331331BootMenu_IsDriveInSystem:
    332     test    dl, 80h                 ; Floppy drive?
     332    test    dl, 80h                             ; Floppy drive?
    333333    jz      SHORT .IsFloppyDriveIsInSystem
    334     call    RamVars_GetDriveCounts  ; Hard Disk count to CX
    335     or      cl, 80h                 ; Set Hard Disk bit to CX
     334    call    RamVars_GetHardDiskCountFromBDAtoCX ; Hard Disk count to CX
     335    or      cl, 80h                             ; Set Hard Disk bit to CX
    336336    jmp     SHORT .CompareDriveNumberToDriveCount
    337337.IsFloppyDriveIsInSystem:
    338     call    FloppyDrive_GetCount    ; Floppy Drive count to CX
     338    call    FloppyDrive_GetCount                ; Floppy Drive count to CX
    339339.CompareDriveNumberToDriveCount:
    340340    cmp     dl, cl
  • trunk/XTIDE_Universal_BIOS/Src/Boot/BootMenuPrint.asm

    r3 r32  
    22; Project name  :   IDE BIOS
    33; Created date  :   26.3.2010
    4 ; Last update   :   12.4.2010
     4; Last update   :   3.8.2010
    55; Author        :   Tomi Tilli
    66; Description   :   Functions for printing boot menu strings.
     
    2424    call    FloppyDrive_GetCount
    2525    mov     bl, cl                  ; Floppy Drive count to BL
    26     call    RamVars_GetDriveCounts
     26    call    RamVars_GetHardDiskCountFromBDAtoCX
    2727    mov     bh, cl                  ; Hard Disk count to BH
    2828    call    BootMenuPrint_GetCoordinatesForBottomStrings
  • trunk/XTIDE_Universal_BIOS/Src/Handlers/Int13h.asm

    r28 r32  
    110110    cli                                 ; Disable interrupts as INT would
    111111    retf
     112
     113
     114;--------------------------------------------------------------------
     115; Int13h_CallPreviousInt13hHandler
     116;   Parameters:
     117;       AH:     Bios function
     118;       DS:     RAMVARS segment
     119;       Other:  Depends on function to call
     120;   Returns:
     121;       Depends on function to call
     122;   Corrupts registers:
     123;       FLAGS
     124;--------------------------------------------------------------------
     125ALIGN JUMP_ALIGN
     126Int13h_CallPreviousInt13hHandler:
     127    pushf                               ; Push flags to simulate INT
     128    cli                                 ; Disable interrupts since INT does that
     129    call    FAR [RAMVARS.fpOldI13h]
     130    sti
     131    ret
    112132
    113133
  • trunk/XTIDE_Universal_BIOS/Src/Handlers/Int13h/AH0h_HReset.asm

    r28 r32  
    22; Project name  :   IDE BIOS
    33; Created date  :   27.9.2007
    4 ; Last update   :   29.7.2010
     4; Last update   :   3.8.2010
    55; Author        :   Tomi Tilli
    66; Description   :   Int 13h function AH=0h, Disk Controller Reset.
    7 
    8 RETRIES_IF_RESET_FAILS      EQU     3
    9 TIMEOUT_BEFORE_RESET_RETRY  EQU     5       ; System timer ticks
    107
    118; Section containing code
     
    8279    call    GetDriveNumberForForeignBiosesToDL
    8380    xor     ah, ah                      ; Disk Controller Reset
    84     pushf                               ; Push flags to simulate INT
    85     cli                                 ; Disable interrupts since INT does that
    86     call    FAR [RAMVARS.fpOldI13h]
    87     sti                                 ; Make sure interrupts are enabled again (some BIOSes fails to enable it)
     81    call    Int13h_CallPreviousInt13hHandler
    8882    jmp     SHORT BackupErrorCodeFromTheRequestedDriveToBH
    8983
  • trunk/XTIDE_Universal_BIOS/Src/Handlers/Int13h/AH8h_HParams.asm

    r28 r32  
    22; Project name  :   IDE BIOS
    33; Created date  :   27.9.2007
    4 ; Last update   :   12.4.2010
     4; Last update   :   3.8.2010
    55; Author        :   Tomi Tilli
    66; Description   :   Int 13h function AH=8h, Read Disk Drive Parameters.
     
    3232ALIGN JUMP_ALIGN
    3333AH8h_HandlerForReadDiskDriveParameters:
     34    call    RamVars_IsDriveHandledByThisBIOS
     35    jnc     SHORT .GetDriveParametersForForeignHardDiskInDL
     36
    3437    push    bx
    3538    call    AH8h_GetDriveParameters
    3639    pop     bx
     40    jmp     Int13h_ReturnWithoutSwappingDrives
     41
     42ALIGN JUMP_ALIGN
     43.GetDriveParametersForForeignHardDiskInDL:
     44    call    Int13h_CallPreviousInt13hHandler
     45    call    RamVars_GetCountOfKnownDrivesToDL
    3746    jmp     Int13h_ReturnWithoutSwappingDrives
    3847
     
    97106;       BX:     Number of L-CHS cylinders available (1...1024)
    98107;       DX:     Number of L-CHS heads (1...256)
     108;       DS:     RAMVARS segment
    99109;   Returns:
    100110;       CH:     Maximum cylinder number, bits 7...0
     
    111121    dec     dx                      ; Head count to max head number
    112122    mov     dh, dl                  ; Max head number to DH
    113     push    ax
    114     call    RamVars_GetDriveCounts  ; Hard disk count to CX
    115     pop     ax
    116     mov     dl, cl                  ; Hard disk count to DL
    117123    mov     ch, bl                  ; Cylinder bits 7...0 to CH
    118124    mov     cl, bh                  ; Cylinder bits 9...8 to CL
    119125    eROR_IM cl, 2                   ; Cylinder bits 9...8 to CL bits 7...6
    120126    or      cl, al                  ; Sectors per track to CL bits 5...0
    121     ret
     127    jmp     RamVars_GetCountOfKnownDrivesToDL
  • trunk/XTIDE_Universal_BIOS/Src/Handlers/Int13h/Common/HCapacity.asm

    r3 r32  
    22; Project name  :   IDE BIOS
    33; Created date  :   16.3.2010
    4 ; Last update   :   12.4.2010
     4; Last update   :   3.8.2010
    55; Author        :   Tomi Tilli
    66; Description   :   Functions for hard disk capacity calculations.
     
    2626HCapacity_GetSectorCountFromForeignAH08h:
    2727    mov     ah, 08h         ; Get Drive Parameters
    28     int     INTV_DISK_FUNC
     28    call    Int13h_CallPreviousInt13hHandler
    2929    jmp     SHORT HCapacity_ConvertAH08hReturnValuesToSectorCount
    3030
  • trunk/XTIDE_Universal_BIOS/Src/Main.asm

    r28 r32  
    3838    at  ROMVARS.bRomSize,   db  CNT_ROM_BLOCKS  ; ROM size in 512B blocks
    3939    at  ROMVARS.rgbJump,    jmp Initialize_FromMainBiosRomSearch
    40     at  ROMVARS.rgbDate,    db  "08/01/10"      ; Build data (mm/dd/yy)
     40    at  ROMVARS.rgbDate,    db  "08/03/10"      ; Build data (mm/dd/yy)
    4141    at  ROMVARS.rgbSign,    db  "XTIDE110"      ; Signature for flash program
    4242    at  ROMVARS.szTitle
     
    4949        db  " (XT)=-",STOP
    5050%endif
    51     at  ROMVARS.szVersion,  db  "v1.1.3 (08/01/10)",STOP
     51    at  ROMVARS.szVersion,  db  "v1.1.3 (08/03/10)",STOP
    5252
    5353;---------------------------;
  • trunk/XTIDE_Universal_BIOS/Src/VariablesAndDPTs/RamVars.asm

    r3 r32  
    22; Project name  :   IDE BIOS
    33; Created date  :   14.3.2010
    4 ; Last update   :   2.5.2010
     4; Last update   :   3.8.2010
    55; Author        :   Tomi Tilli
    66; Description   :   Functions for accessings RAMVARS.
     
    130130RamVars_IsFunctionHandledByThisBIOS:
    131131    test    ah, ah          ; Reset for all floppy and hard disk drives?
    132     jnz     SHORT RamVars_IsDriveHandledByThisBIOS
     132    jz      SHORT .FunctionIsHandledByOurBIOS
     133    cmp     ah, 08h         ; Read Disk Drive Parameters?
     134    jne     SHORT RamVars_IsDriveHandledByThisBIOS
     135    test    dl, 80h         ; We dot not handle floppy drives
     136    jz      SHORT .FunctionIsNotHandledByOurBIOS
     137ALIGN JUMP_ALIGN
     138.FunctionIsHandledByOurBIOS:
    133139    stc
     140.FunctionIsNotHandledByOurBIOS:
    134141    ret
    135142
     
    190197
    191198;--------------------------------------------------------------------
    192 ; Return number of Hard Disks in system.
    193 ;
    194 ; RamVars_GetDriveCounts
    195 ;   Parameters:
    196 ;       DS:     RAMVARS segment
    197 ;   Returns:
    198 ;       AL:     Number of hard disks handled by our BIOS
    199 ;       CX:     Total number of hard disks in system
    200 ;   Corrupts registers:
    201 ;       AH
    202 ;--------------------------------------------------------------------
    203 ALIGN JUMP_ALIGN
    204 RamVars_GetDriveCounts:
     199; RamVars_GetHardDiskCountFromBDAtoCX
     200;   Parameters:
     201;       DS:     RAMVARS segment
     202;   Returns:
     203;       CX:     Total hard disk count
     204;   Corrupts registers:
     205;       Nothing
     206;--------------------------------------------------------------------   
     207ALIGN JUMP_ALIGN
     208RamVars_GetHardDiskCountFromBDAtoCX:
    205209    push    es
     210    push    dx
     211
    206212    LOAD_BDA_SEGMENT_TO es, cx          ; Zero CX
    207     mov     cl, [es:BDA.bHDCount]       ; Total hard drive count
    208     mov     al, [RAMVARS.bDrvCnt]       ; Our drive count
     213    call    RamVars_GetCountOfKnownDrivesToDL
     214    MAX_U   dl, [es:BDA.bHDCount]
     215    mov     cl, dl
     216
     217    pop     dx
    209218    pop     es
    210219    ret
     220
     221;--------------------------------------------------------------------
     222; RamVars_GetCountOfKnownDrivesToDL
     223;   Parameters:
     224;       DS:     RAMVARS segment
     225;   Returns:
     226;       DL:     Total hard disk count
     227;   Corrupts registers:
     228;       Nothing
     229;--------------------------------------------------------------------   
     230ALIGN JUMP_ALIGN
     231RamVars_GetCountOfKnownDrivesToDL:
     232    mov     dl, [RAMVARS.bFirstDrv]     ; Number for our first drive
     233    add     dl, [RAMVARS.bDrvCnt]       ; Our drives
     234    and     dl, 7Fh                     ; Clear HD bit for drive count
     235    ret
Note: See TracChangeset for help on using the changeset viewer.