Changeset 597 in xtideuniversalbios


Ignore:
Timestamp:
Jul 11, 2018, 9:44:43 AM (6 years ago)
Author:
aitotat
Message:

Windows 95 CMOS hack now works with Award BIOSes.
Some small optimizations to INT 19h and INT 19h reset handlers.
Added menuitem to configurator for clearing BDA drive count.

Location:
trunk
Files:
1 added
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/XTIDE_Universal_BIOS/Src/Handlers/Int19h.asm

    r596 r597  
    199199    call    DriveXlate_Reset                    ; Clean up any drive mappings before Rom Boot
    200200%endif
    201     clc
    202     ;; fall through to Int19h_JumpToBootSectorOrRomBoot
    203 
    204 ;--------------------------------------------------------------------
    205 ; Int19h_JumpToBootSectorOrRomBoot
     201    stc
     202    ;; fall through to Int19h_JumpToBootSectorInESBXOrRomBoot
     203
     204;--------------------------------------------------------------------
     205; Int19h_JumpToBootSectorInESBXOrRomBoot
    206206;
    207207; Switches back to the POST stack, clears the DS and ES registers,
     
    211211;   Parameters:
    212212;       DL:     Drive to boot from (translated, 00h or 80h)
    213 ;       CF:     Set for Boot Sector Boot
    214 ;               Clear for ROM Boot
    215 ;       ES:BX:  (if CF set) Ptr to boot sector (ES = zero)
     213;       CF:     Clear for Boot Sector Boot
     214;               Set for ROM Boot
     215;       ES:BX:  (if CF clear) Ptr to boot sector (ES = zero)
    216216;
    217217;   Returns:
    218218;       Never returns
    219219;--------------------------------------------------------------------
    220 Int19h_JumpToBootSectorOrRomBoot:
    221     mov     ax, es      ; Preserve MBR segment (can't push because of stack change)
    222                         ; NOTE: can't use XOR (LOAD_BDA_SEGMENT_TO) as it impacts CF
     220Int19h_JumpToBootSectorInESBXOrRomBoot:
     221    mov     ax, es      ; Clear AX. NOTE: can't use XOR (LOAD_BDA_SEGMENT_TO) as it impacts CF
    223222    SWITCH_BACK_TO_POST_STACK
    224223
    225224; clear segment registers before boot sector or rom call
     225Int19h_JumpToBootSectorInESBXOrRomBootWithoutStackChange:
     226    mov     ax, es      ; Clear AX and preserve CF
    226227    mov     ds, ax
    227228%ifdef USE_386
     
    229230    mov     gs, ax
    230231%endif
    231     jnc     SHORT .RomBoot
     232    jc      SHORT .RomBoot
    232233
    233234; jump to boot sector
    234     push    ax          ; sgment address for MBR
     235    push    es          ; sgment address for MBR
    235236    push    bx          ; offset address for MBR
    236237    retf                ; NOTE: DL is set to the drive number
  • trunk/XTIDE_Universal_BIOS/Src/Handlers/Int19h/BootSector.asm

    r595 r597  
    5959    jne     SHORT .FirstHardDiskSectorNotBootable
    6060.AlwaysBootFromFloppyDriveForBooterGames:
    61     stc     ; Boot Sector loaded successfully
    62     jmp     SHORT Int19h_JumpToBootSectorOrRomBoot
     61    clc     ; Boot Sector loaded successfully
     62    jmp     SHORT Int19h_JumpToBootSectorInESBXOrRomBoot
    6363
    6464.FirstHardDiskSectorNotBootable:
  • trunk/XTIDE_Universal_BIOS/Src/Handlers/Int19h/Int19hReset.asm

    r595 r597  
    3838    call    BootSector_LoadFirstSectorFromDriveDL
    3939    jc      SHORT .Reboot
    40 
    41     xor     ax, ax
    42     mov     ds, ax
    43 %ifdef USE_386
    44     mov     fs, ax
    45     mov     gs, ax
    46 %endif
    4740    cmp     WORD [bx+510], 0AA55h   ; Valid boot sector?
    48     jne     SHORT .Reboot
    49     push    es                      ; Zero
    50     push    bx
    51     retf
     41    je      SHORT Int19h_JumpToBootSectorInESBXOrRomBootWithoutStackChange
    5242
    5343    ; Do warm reset since boot from floppy drive failed
  • trunk/XTIDE_Universal_BIOS/Src/Initialization/DetectDrives.asm

    r596 r597  
    118118        jnz     SHORT .ClearBdaDriveCount       ; Unsupported BIOS, use plan B
    119119
    120         ; Now we can alter CMOS location 12h
     120        ; Now we can alter CMOS location 12h. Important! We set type for drive 1
     121        ; (primary slave) and not for drive 0! Award BIOS locks if we set drive 0 type to Fh.
     122        ; We cannot set it to less either since that will fully set predefined hard drive type to the BIOS.
     123        ; Windows 95 only cares that the CMOS location 12h is non-zero.
    121124        mov     dl, HARD_DISK_TYPES
    122         mov     al, 0F0h    ; Drive 0 type 16...47 but Windows doesn't care as long as this is not zero
     125        mov     al, 0Fh ; Drive 1 type 16...47 (defined elsewhere in the CMOS)
    123126        call    CMOS_WriteALtoIndexInDL
    124127        call    CMOS_StoreNewChecksumFor10hto2Dh
  • trunk/XTIDE_Universal_BIOS_Configurator_v2/Src/Menupages/BootMenuSettingsMenu.asm

    r592 r597  
    2626    at  MENUPAGE.fnEnter,           dw  BootMenuSettingsMenu_EnterMenuOrModifyItemVisibility
    2727    at  MENUPAGE.fnBack,            dw  ConfigurationMenu_EnterMenuOrModifyItemVisibility
    28     at  MENUPAGE.wMenuitems,        dw  7
     28    at  MENUPAGE.wMenuitems,        dw  8
    2929iend
    3030
     
    134134    at  MENUITEM.itemValue + ITEM_VALUE.wMaxValue,                  dw  1092
    135135iend
     136
     137g_MenuitemBootMnuStngsClearBdaDriveCount:
     138istruc MENUITEM
     139    at  MENUITEM.fnActivate,        dw  Menuitem_ActivateMultichoiceSelectionForMenuitemInDSSI
     140    at  MENUITEM.fnFormatValue,     dw  MenuitemPrint_WriteLookupValueStringToBufferInESDIfromShiftedItemInDSSI
     141    at  MENUITEM.szName,            dw  g_szItemClearBdaDriveCount
     142    at  MENUITEM.szQuickInfo,       dw  g_szNfoClearBdaDriveCount
     143    at  MENUITEM.szHelp,            dw  g_szHelpClearBdaDriveCount
     144    at  MENUITEM.bFlags,            db  FLG_MENUITEM_FLAGVALUE
     145    at  MENUITEM.bType,             db  TYPE_MENUITEM_MULTICHOICE
     146    at  MENUITEM.itemValue + ITEM_VALUE.wRomvarsValueOffset,        dw  ROMVARS.wFlags
     147    at  MENUITEM.itemValue + ITEM_VALUE.szDialogTitle,              dw  g_szDlgClearBdaDriveCount
     148    at  MENUITEM.itemValue + ITEM_VALUE.szMultichoice,              dw  g_szMultichoiceBooleanFlag
     149    at  MENUITEM.itemValue + ITEM_VALUE.rgszValueToStringLookup,    dw  g_rgszValueToStringLookupForFlagBooleans
     150    at  MENUITEM.itemValue + ITEM_VALUE.wValueBitmask,              dw  FLG_ROMVARS_IGNORE_MOTHERBOARD_DRIVES
     151iend
     152
    136153
    137154g_rgwChoiceToValueLookupForDisplayModes:
     
    241258    call    .EnableOrDisableColorThemeSelection
    242259    call    .EnableOrDisableBootMenuSelectionTimeout
     260    call    .EnableOrDisableClearBdaDriveCount
    243261    mov     si, g_MenupageForBootMenuSettingsMenu
    244262    jmp     Menupage_ChangeToNewMenupageInDSSI
     
    310328    mov     bx, g_MenuitemBootMnuStngsSelectionTimeout
    311329    test    ax, FLG_ROMVARS_MODULE_BOOT_MENU
     330    jmp     SHORT .DisableMenuitemFromCSBXifZFset
     331
     332
     333;--------------------------------------------------------------------
     334; .EnableOrDisableClearBdaDriveCount
     335;   Parameters:
     336;       AX:     ROMVARS.wFlags
     337;       SS:BP:  Menu handle
     338;   Returns:
     339;       Nothing
     340;   Corrupts registers:
     341;       BX
     342;--------------------------------------------------------------------
     343ALIGN JUMP_ALIGN
     344.EnableOrDisableClearBdaDriveCount:
     345    mov     bx, g_MenuitemBootMnuStngsClearBdaDriveCount
     346    call    Buffers_IsXTbuildLoaded
    312347.DisableMenuitemFromCSBXifZFset:
    313348    jz      SHORT .DisableMenuitemFromCSBX
  • trunk/XTIDE_Universal_BIOS_Configurator_v2/Src/Strings.asm

    r592 r597  
    426426g_szItemBootFloppyDrvs: db  "Number of Floppy Drives",NULL
    427427g_szItemSerialDetect:   db  "Scan for Serial Drives",NULL
     428g_szItemClearBdaDriveCount: db  "Remove other hard drives",NULL
    428429
    429430g_szDlgBootTimeout:     db  "Enter Boot Menu selection timeout in BIOS timer ticks (2...1092).",NULL
     
    433434g_szDlgBootFloppyDrvs:  db  "Select number of Floppy Drives in system.",NULL
    434435g_szDlgSerialDetect:    db  "Scan for serial drives?",NULL
     436g_szDlgClearBdaDriveCount:  db  "Remove existing INT 13h hard drives during drive detection?",NULL
    435437
    436438g_szNfoBootTimeout:     db  "Menu item selection timeout in BIOS timer ticks. 1 tick = 54.9 ms.",NULL
     
    441443g_szNfoSerialDetect:    db  "Scans all standard COM ports for serial drives."
    442444                        db  " This can also be invoked by holding down ALT at the end of normal drive detection.",NULL
     445g_szNfoClearBdaDriveCount:  db  "Can be used to remove duplicate hard drives.",NULL
    443446
    444447g_szHelpBootTimeout:    db  "Boot Menu selection timeout in BIOS timer ticks (1 second = 18.2 ticks)."
     
    460463                        db  " of normal drive detection. Note that if any serial drives are detected during the normal drive detection,"
    461464                        db  " no scan will take place (to avoid finding the same drive twice).",NULL
     465g_szHelpClearBdaDriveCount: db  "Set to NO for normal operation. Set to YES to get Windows 95 drivers to work when "
     466                            db  "MODULE_WIN95_CMOS_HACK is not included (dummy drive needs to be defined in system BIOS setup).",NULL
    462467
    463468g_szMultichoiceBootDispMode:    db  "Default",LF
Note: See TracChangeset for help on using the changeset viewer.