Changeset 580 in xtideuniversalbios for trunk/XTIDE_Universal_BIOS


Ignore:
Timestamp:
Feb 19, 2015, 1:38:02 PM (9 years ago)
Author:
krille_n_@…
google:author:
krille_n_@hotmail.com
Message:

Changes:

  • XTIDECFG: Fixed a bug from r459 where the menu option for selection of default boot drive would be missing if the BIOS had been built without MODULE_HOTKEYS. The menu option is now visible if either or both of MODULE_HOTKEYS and MODULE_BOOT_MENU is available.
  • BIOS: Disabled ATA-ID validation by adding a new define (NO_ATAID_VALIDATION) and making it the default for all builds since at least two WD Caviar drive models are incompatible with it.
  • Fixed the "No Fixed Disk Present in FDISK"-bug introduced in r551 which means the Tiny build now works without including MODULE_DRIVEXLATE.
  • Fixed a bug from r528 where pressing hotkey F6 would not initiate detection of serial drives.
  • Fixed a bug from r186 in DisplayFormatCompressed.asm where the boot menu would print the IRQ in hexadecimal format when it should be in decimal format.
  • Optimizations and fixes.
Location:
trunk/XTIDE_Universal_BIOS
Files:
9 edited

Legend:

Unmodified
Added
Removed
  • trunk/XTIDE_Universal_BIOS/Src/Device/IDE/IdePioBlock.asm

    r567 r580  
    4949ALIGN JUMP_ALIGN
    5050.InswLoop:
    51     %rep 8 ; WORDs
     51    %rep 8  ; WORDs
    5252        XTIDE_INSW
    5353    %endrep
     
    7676    rep insb
    7777    ret
    78 %else ; If 8088/8086
     78%else ; 808x
    7979    UNROLL_SECTORS_IN_CX_TO_OWORDS
    8080ALIGN JUMP_ALIGN
     
    112112    ret
    113113
    114 %else ; If 8088/8086
     114%else ; 808x
    115115    UNROLL_SECTORS_IN_CX_TO_OWORDS
    116116ALIGN JUMP_ALIGN
     
    130130    db      0C1h        ; SHL
    131131    db      0E1h        ; CX
    132     db      7           ; 7 (Sectors to DWORDs)
     132    db      7           ; 7 (Sectors to DWORDs)
    133133    rep
    134134    db      66h         ; Override operand size to 32-bit
     
    155155;       Nothing
    156156;   Corrupts registers:
    157 ;       AX, BX, CX, DX
     157;       AX, BX, CX
    158158;--------------------------------------------------------------------
    159159ALIGN JUMP_ALIGN
     
    162162    UNROLL_SECTORS_IN_CX_TO_QWORDS
    163163    mov     bl, 8       ; Bit mask for toggling data low/high reg
    164     push    es          ; Copy ES...
    165     pop     ds          ; ...to DS
     164    push    es
     165    pop     ds
    166166ALIGN JUMP_ALIGN
    167167.OutswLoop:
     
    183183;       Nothing
    184184;   Corrupts registers:
    185 ;       AX, BX, CX, DX
     185;       AX, BX, CX
    186186;--------------------------------------------------------------------
    187187ALIGN JUMP_ALIGN
     
    189189    UNROLL_SECTORS_IN_CX_TO_QWORDS
    190190    push    ds
    191     push    es      ; Copy ES...
    192     pop     ds      ; ...to DS
     191    push    es
     192    pop     ds
    193193ALIGN JUMP_ALIGN
    194194.WriteNextQword:
    195195    %rep 4  ; WORDs
    196         XTIDE_MOD_OUTSW ; special macro
     196        XTIDE_MOD_OUTSW
    197197    %endrep
    198198    loop    .WriteNextQword
     
    210210;       Nothing
    211211;   Corrupts registers:
    212 ;       AX, BX, CX, DX
     212;       AX, BX, CX
    213213;--------------------------------------------------------------------
    214214ALIGN JUMP_ALIGN
     
    220220    ret
    221221
    222 %else ; If 8088/8086
    223     UNROLL_SECTORS_IN_CX_TO_QWORDS
    224     push    ds
    225     ;mov    ax, es
    226     ;mov    ds, ax  ; move es to ds via ax (does this run faster on 8088?)
     222%else ; 808x
     223    UNROLL_SECTORS_IN_CX_TO_QWORDS
     224    push    ds
    227225    push    es
    228226    pop     ds
     
    231229    %rep 8  ; BYTEs
    232230        lodsb           ; Load BYTE from [DS:SI]
    233         out dx, al      ; Write BYTE
     231        out     dx, al  ; Write BYTE
    234232    %endrep
    235233    loop    .WriteNextQword
     
    251249;       Nothing
    252250;   Corrupts registers:
    253 ;       AX, BX, CX, DX
     251;       AX, BX, CX
    254252;--------------------------------------------------------------------
    255253ALIGN JUMP_ALIGN
     
    261259    ret
    262260
    263 %else ; If 8088/8086
    264     UNROLL_SECTORS_IN_CX_TO_QWORDS
    265     push    ds
    266     ;mov    ax, es
    267     ;mov    ds, ax      ; move es to ds via ax (does this run faster on 8088?)
     261%else ; 808x
     262    UNROLL_SECTORS_IN_CX_TO_QWORDS
     263    push    ds
    268264    push    es
    269265    pop     ds
     
    272268    %rep 4  ; WORDs
    273269        lodsw           ; Load WORD from [DS:SI]
    274         out dx, ax      ; Write WORD
     270        out     dx, ax  ; Write WORD
    275271    %endrep
    276272    loop    .WriteNextQword
    277273    pop     ds
    278274    ret
    279 %endif  ; if/else USE_186
     275%endif
    280276
    281277;--------------------------------------------------------------------
     
    284280    db      0C1h        ; SHL
    285281    db      0E1h        ; CX
    286     db      7           ; 7 (Sectors to DWORDs)
     282    db      7           ; 7 (Sectors to DWORDs)
    287283    es                  ; Source is ES segment
    288284    rep
  • trunk/XTIDE_Universal_BIOS/Src/Handlers/Int13h/AH15h_HSize.asm

    r567 r580  
    7474
    7575;--------------------------------------------------------------------
    76 ; AH15h_GetSectorCountFromForeignDriveToDXAX:
    77 ; AH15h_GetSectorCountToBXDXAX:
     76; AH15h_GetSectorCountFromForeignDriveToDXAX
     77; AH15h_GetSectorCountToBXDXAX
    7878;   Parameters:
    7979;       DL:     Drive number (AH15h_GetSectorCountFromForeignDriveToDXAX only)
  • trunk/XTIDE_Universal_BIOS/Src/Handlers/Int13h/EBIOS/AH48h_GetExtendedDriveParameters.asm

    r568 r580  
    100100    jb      Prepare_ReturnFromInt13hWithInvalidFunctionError
    101101    mov     [di+EDRIVE_INFO.wSize], ax
    102     add     al, EDRIVEINFO_SIZE_WITH_DPTE - MINIMUM_EDRIVEINFO_SIZE
     102    mov     al, EDRIVEINFO_SIZE_WITH_DPTE
    103103    cmp     cx, ax
    104104    jb      SHORT .SkipEddConfigurationParameters
    105     mov     [di+EDRIVE_INFO.wSize], ax
     105    mov     [di+EDRIVE_INFO.wSize], al
    106106
    107107    ; Store DPTE for standard controllers only,
     
    159159    mov     [di+EDRIVE_INFO.dwCylinders+2], cx
    160160
    161     xor     ax, ax      ; Success
     161    xchg    ax, cx      ; Success
    162162    jmp     Int13h_ReturnFromHandlerAfterStoringErrorCodeFromAH
  • trunk/XTIDE_Universal_BIOS/Src/Initialization/AtaID.asm

    r568 r580  
    3232;       AX, BX, CX
    3333;--------------------------------------------------------------------
     34%ifndef NO_ATAID_VALIDATION
    3435AtaID_VerifyFromESSI:
    3536    ; We cannot start by reading ATA version since the ID might be
     
    8788.ValidPCHorSinOffsetBX:
    8889    ret
     90%endif ; NO_ATAID_VALIDATION
    8991
    9092
  • trunk/XTIDE_Universal_BIOS/Src/Initialization/DetectDrives.asm

    r568 r580  
    4848    call    StartDetectionWithDriveSelectByteInBHandStringInCX
    4949
     50%ifdef MODULE_HOTKEYS
     51%ifdef MODULE_SERIAL
     52    ; This is only needed for hotkey F6 (ComDtct) to work
     53    call    ScanHotkeysFromKeyBufferAndStoreToBootvars          ; Done here while CX is still protected
     54%endif
     55%endif
     56
    5057    pop     cx
    5158
     
    6875
    6976%ifdef MODULE_HOTKEYS
    70     cmp     al, COM_DETECT_HOTKEY_SCANCODE  ; Set by last call to HotkeyBar_UpdateDuringDriveDetection above
     77    cmp     al, COM_DETECT_HOTKEY_SCANCODE  ; Set by last call to ScanHotkeysFromKeyBufferAndStoreToBootvars above
    7178    je      .DriveDetectLoop
    7279%endif
     
    7683    and     al, 8                           ; 8 = alt key depressed, same as FLG_ROMVARS_SERIAL_ALWAYSDETECT
    7784    jnz     .DriveDetectLoop
    78 %endif
     85%endif ; MODULE_SERIAL
    7986
    8087.AddHardDisks:
     
    226233;--------------------------------------------------------------------
    227234CreateBiosTablesForHardDisk:
     235%ifndef NO_ATAID_VALIDATION
    228236    push    bx
    229237    call    AtaID_VerifyFromESSI
    230238    pop     bx
    231239    jnz     SHORT DetectDrives_DriveNotFound
     240%endif
    232241    call    CreateDPT_FromAtaInformation
    233242    jc      SHORT DetectDrives_DriveNotFound
  • trunk/XTIDE_Universal_BIOS/Src/Initialization/Initialize.asm

    r567 r580  
    8282    call    RamVars_Initialize
    8383    call    BootVars_Initialize
     84%ifdef MODULE_HOTKEYS
     85    ; This is a simple fix for the so called "No Fixed Disk Present in FDISK"-bug introduced in r551. MODULE_HOTKEYS includes the internal
     86    ; module MODULE_DRIVEXLATE which is needed if interrupt handlers are installed before drive detection. The reason for this is that
     87    ; Interrupts_InitializeInterruptVectors won't install our interrupt 13h handler if no drives were detected (unless MODULE_DRIVEXLATE is included).
     88    ; Since the drive detection hasn't been done yet, the handler will not be installed, causing the above mentioned bug.
    8489    call    Interrupts_InitializeInterruptVectors   ; HotkeyBar requires INT 40h so install handlers before drive detection
    8590    call    DetectDrives_FromAllIDEControllers
     91%else
     92    ; Without MODULE_HOTKEYS (or actually MODULE_DRIVEXLATE) we *must* use this call order.
     93    call    DetectDrives_FromAllIDEControllers
     94    call    Interrupts_InitializeInterruptVectors
     95%endif
    8696    mov     [RAMVARS.wDrvDetectSignature], es       ; No longer in drive detection mode (set normal timeouts)
    8797    ; Fall to .StoreDptPointersToIntVectors
  • trunk/XTIDE_Universal_BIOS/Src/Initialization/Interrupts.asm

    r558 r580  
    2222
    2323;--------------------------------------------------------------------
    24 ; Drives must be detected before this function is called!
     24; Drives must be detected before this function is called unless
     25; MODULE_DRIVEXLATE has been included in the BIOS.
    2526;
    2627; Interrupts_InitializeInterruptVectors
  • trunk/XTIDE_Universal_BIOS/Src/VariablesAndDPTs/AtaGeometry.asm

    r568 r580  
    304304    ; Max = 16,514,064 / 63 = 262128
    305305    mov     cx, LBA_ASSIST_SPT          ; CX = 63
    306     call    Math_DivDXAXbyCX
     306    call    Math_DivDXAXbyCX            ; Preserves CX
    307307    push    dx
    308308    push    ax                          ; Value CH stored for later use
     
    316316    ; AX = Number of heads = ((Value CH - 1) / 1024) + 1
    317317    ; Max = (262127 / 1024) + 1 = 256
    318     push    si
    319     call    Size_DivideSizeInBXDXAXby1024andIncrementMagnitudeInCX
    320     pop     si
     318    call    Size_DivideSizeInBXDXAXby1024   ; Preserves CX
    321319    inc     ax                          ; + 1
    322320
    323321    ; Heads must be 16, 32, 64, 128 or 255 (round up to the nearest)
    324322    ; Max = 255
    325     mov     cx, 16                      ; Min number of heads
     323    mov     cl, 16                      ; Min number of heads
    326324.CompareNextValidNumberOfHeads:
    327325    cmp     ax, cx
  • trunk/XTIDE_Universal_BIOS/makefile

    r567 r580  
    3535# RESERVE_DIAGNOSTIC_CYLINDER Reserve one L-CHS cylinder for compatibility with old BIOSes         #
    3636# DANGEROUS_DETECTION         Scans Advanced Controllers from dangerous ports like mirrored PIC    #
     37# NO_ATAID_VALIDATION ***     Excludes code that tries to ensure proper communication with drives  #
    3738# USE_186                     Use instructions supported by 80188/80186 and V20/V30 and later      #
    3839# USE_286                     Use instructions supported by 286 and later (defines USE_UNDOC_INTEL)#
     
    4243#                                                                                                  #
    4344# ** AT Builds only (when USE_AT is defined)                                                       #
     45# *** Use this only when certain known good drives are not being detected (eg WD Caviars)          #
    4446####################################################################################################
    4547
     
    101103# Assembler preprocessor defines.                               #
    102104#################################################################
    103 DEFINES_COMMON = MODULE_STRINGS_COMPRESSED MODULE_HOTKEYS MODULE_8BIT_IDE MODULE_EBIOS MODULE_SERIAL MODULE_SERIAL_FLOPPY MODULE_POWER_MANAGEMENT RESERVE_DIAGNOSTIC_CYLINDER
     105DEFINES_COMMON = MODULE_STRINGS_COMPRESSED MODULE_HOTKEYS MODULE_8BIT_IDE MODULE_EBIOS MODULE_SERIAL MODULE_SERIAL_FLOPPY MODULE_POWER_MANAGEMENT RESERVE_DIAGNOSTIC_CYLINDER NO_ATAID_VALIDATION
    104106DEFINES_COMMON_LARGE = MODULE_BOOT_MENU MODULE_8BIT_IDE_ADVANCED MODULE_COMPATIBLE_TABLES
    105107
    106108DEFINES_XT = $(DEFINES_COMMON) ELIMINATE_CGA_SNOW MODULE_8BIT_IDE_ADVANCED
    107 DEFINES_XTPLUS = $(DEFINES_COMMON) $(DEFINES_XT) USE_186
     109DEFINES_XTPLUS = $(DEFINES_XT) USE_186
    108110DEFINES_AT = $(DEFINES_COMMON) USE_AT USE_286 MODULE_IRQ MODULE_ADVANCED_ATA MODULE_COMPATIBLE_TABLES
    109111
     
    112114DEFINES_AT_LARGE = $(DEFINES_AT) $(DEFINES_COMMON_LARGE)
    113115
    114 DEFINES_XT_TINY = MODULE_STRINGS_COMPRESSED MODULE_8BIT_IDE
     116DEFINES_XT_TINY = MODULE_STRINGS_COMPRESSED MODULE_8BIT_IDE NO_ATAID_VALIDATION
    115117DEFINES_386_8K = $(DEFINES_AT) USE_386
    116118
Note: See TracChangeset for help on using the changeset viewer.