Ignore:
Timestamp:
May 12, 2012, 1:58:25 PM (12 years ago)
Author:
aitotat@…
google:author:
aitotat@gmail.com
Message:

Changes to XTIDE Universal BIOS:

  • Modified ROMVARS for user defined CHS translation mode.
  • Base DPT struct now includes initialization error flags again.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/XTIDE_Universal_BIOS/Src/VariablesAndDPTs/AtaGeometry.asm

    r421 r422  
    3434;   Returns:
    3535;       BX:DX:AX:   48-bit sector count
    36 ;       CL:         FLGL_DPT_LBA48 if LBA48 supported, zero otherwise
     36;       CL:         FLGL_DPT_LBA48 if LBA48 supported
     37;                   Zero if only LBA28 is supported
    3738;   Corrupts registers:
    3839;       Nothing
     
    6465
    6566;--------------------------------------------------------------------
    66 ; AtaGeometry_GetLCHStoAXBLBHfromAtaInfoInESSI:
    67 ;   Parameters:
     67; AtaGeometry_GetLCHStoAXBLBHfromAtaInfoInESSIandTranslateModeInDX
     68; AtaGeometry_GetLCHStoAXBLBHfromPCHSinAXBLBHandTranslateModeInDX
     69;   Parameters:
     70;       DX:     Wanted translate mode or TRANSLATEMODE_AUTO to autodetect
    6871;       ES:SI:  Ptr to 512-byte ATA information read from the drive
    6972;   Returns:
     
    7275;       BH:     Number of L-CHS sectors per track (1...63)
    7376;       CX:     Number of bits shifted (0...3)
    74 ;       DL:     Addressing mode
     77;       DL:     CHS Translate Mode
    7578;   Corrupts registers:
    7679;       DH
    7780;--------------------------------------------------------------------
    78 AtaGeometry_GetLCHStoAXBLBHfromAtaInfoInESSI:
     81AtaGeometry_GetLCHStoAXBLBHfromAtaInfoInESSIandTranslateModeInDX:
    7982    call    AtaGeometry_GetPCHStoAXBLBHfromAtaInfoInESSI
    8083    ; Fall to AtaGeometry_GetLCHStoAXBLBHfromPCHSinAXBLBH
    8184
    82 AtaGeometry_GetLCHStoAXBLBHfromPCHSinAXBLBH:
     85AtaGeometry_GetLCHStoAXBLBHfromPCHSinAXBLBHandTranslateModeInDX:
     86    ; Check if user defined translate mode
     87    test    dx, dx
     88    jnz     SHORT .CheckIfLargeTranslationWanted
     89    MIN_U   ax, MAX_LCHS_CYLINDERS  ; TRANSLATEMODE_NORMAL maximum cylinders
     90    inc     dx
     91.CheckIfLargeTranslationWanted:
     92    dec     dx                      ; Set ZF if TRANSLATEMODE_LARGE
     93    jz      SHORT ConvertPCHfromAXBLtoRevisedEnhancedCHinAXBL
     94    dec     dx                      ; Set ZF if TRANSLATEMODE_ASSISTED_LBA
     95    jz      SHORT .UseAssistedLBA
     96    ; TRANSLATEMODE_AUTO set
     97
    8398    ; Generate L-CHS using simple bit shift algorithm (ECHS) if
    8499    ; 8192 or less cylinders.
    85100    cmp     ax, 8192
    86     jbe     SHORT ConvertPCHfromAXBXtoEnhancedCHinAXBX
     101    jbe     SHORT ConvertPCHfromAXBLtoEnhancedCHinAXBL
    87102
    88103    ; We have 8193 or more cylinders so two algorithms are available:
    89104    ; Revised ECHS or Assisted LBA. The Assisted LBA provides larger
    90105    ; capacity but requires LBA support from drive (drives this large
    91     ; always support LBA but we may have intentionally cleared the LBA
    92     ; bit to force CHS addressing).
     106    ; always support LBA but user might have unintentionally set LBA).
     107.UseAssistedLBA:
    93108    test    BYTE [es:si+ATA1.wCaps+1], A1_wCaps_LBA>>8
    94     jz      SHORT ConvertPCHfromAXBXtoRevisedEnhancedCHinAXBX
     109    jz      SHORT ConvertPCHfromAXBLtoRevisedEnhancedCHinAXBL
    95110
    96111    ; Drive supports LBA
    97     call    AtaGeometry_GetSectorCountToDXAXfromCHSinAXBLBH
     112    call    GetSectorCountToDXAXfromCHSinAXBLBH
    98113    call    ConvertChsSectorCountFromDXAXtoLbaAssistedLCHSinAXBLBH
    99114    xor     cx, cx      ; No bits to shift
    100     mov     dl, ADDRESSING_MODE_ASSISTED_LBA
     115    mov     dl, TRANSLATEMODE_ASSISTED_LBA
    101116    ret
    102117
     
    121136
    122137;--------------------------------------------------------------------
    123 ; AtaGeometry_GetSectorCountToDXAXfromCHSinAXBLBH
     138; GetSectorCountToDXAXfromCHSinAXBLBH
    124139;   Parameters:
    125140;       ES:SI:  Ptr to 512-byte ATA information read from the drive
     
    132147;       BX
    133148;--------------------------------------------------------------------
    134 AtaGeometry_GetSectorCountToDXAXfromCHSinAXBLBH:
     149GetSectorCountToDXAXfromCHSinAXBLBH:
    135150    xchg    ax, bx
    136151    mul     ah          ; AX = Heads * Sectors per track
     
    157172;  Do a standard ECHS translation
    158173;
    159 ; ConvertPCHfromAXBXtoRevisedEnhancedCHinAXBX:
     174; ConvertPCHfromAXBLtoRevisedEnhancedCHinAXBL:
    160175;   Parameters:
    161176;       AX:     Number of P-CHS cylinders (8193...16383)
     
    169184;       Nothing
    170185;--------------------------------------------------------------------
    171 ConvertPCHfromAXBXtoRevisedEnhancedCHinAXBX:
     186ConvertPCHfromAXBLtoRevisedEnhancedCHinAXBL:
     187    ; Generate L-CHS using simple bit shift algorithm (ECHS) if
     188    ; 8192 or less cylinders
     189    cmp     ax, 8192
     190    jbe     SHORT ConvertPCHfromAXBLtoEnhancedCHinAXBL
    172191    cmp     bl, 16  ; Drives with 8193 or more cylinders can report 15 heads
    173     jb      SHORT ConvertPCHfromAXBXtoEnhancedCHinAXBX
     192    jb      SHORT ConvertPCHfromAXBLtoEnhancedCHinAXBL
    174193
    175194    eMOVZX  cx, bl  ; CX = 16
     
    201220;  Use the multiplier on the Cylinder and Head values to obtain the translated values.
    202221;
    203 ; ConvertPCHfromAXBXtoEnhancedCHinAXBX:
     222; ConvertPCHfromAXBLtoEnhancedCHinAXBL:
    204223;   Parameters:
    205224;       AX:     Number of P-CHS cylinders (1...8192)
     
    209228;       BL:     Number of L-CHS heads (?...128)
    210229;       CX:     Number of bits shifted (0...3)
    211 ;       DL:     ADDRESSING_MODE_NORMAL or ADDRESSING_MODE_LARGE
     230;       DL:     TRANSLATEMODE_NORMAL or TRANSLATEMODE_LARGE
    212231;   Corrupts registers:
    213232;       Nothing
    214233;--------------------------------------------------------------------
    215 ConvertPCHfromAXBXtoEnhancedCHinAXBX:
     234ConvertPCHfromAXBLtoEnhancedCHinAXBL:
    216235    xor     cx, cx      ; No bits to shift initially
    217     xor     dl, dl      ; Assume ADDRESSING_MODE_NORMAL
     236    xor     dl, dl      ; Assume TRANSLATEMODE_NORMAL
    218237.ShiftIfMoreThan1024Cylinder:
    219238    cmp     ax, MAX_LCHS_CYLINDERS
    220239    jbe     SHORT ReturnLCHSinAXBLBH
    221     shr     ax, 1
    222     shl     bl, 1
     240    shr     ax, 1       ; Halve cylinders
     241    shl     bl, 1       ; Double heads
    223242    inc     cx          ; Increment bit shift count
    224     mov     dl, ADDRESSING_MODE_LARGE
     243    mov     dl, TRANSLATEMODE_LARGE
    225244    jmp     SHORT .ShiftIfMoreThan1024Cylinder
    226245
Note: See TracChangeset for help on using the changeset viewer.