Changeset 286 in xtideuniversalbios


Ignore:
Timestamp:
Mar 1, 2012, 8:52:08 PM (12 years ago)
Author:
aitotat@…
google:author:
aitotat@gmail.com
Message:

Changes to Configurator v2:

  • JR-IDE/ISA can now be selected.
  • Maximum LBA for EBIOS can now be specified.
  • Drive internal write cache can now be enabled or disabled.
Location:
trunk/XTIDE_Universal_BIOS_Configurator_v2
Files:
2 added
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/XTIDE_Universal_BIOS_Configurator_v2/Inc/MenuStructs.inc

    r242 r286  
    3232FLG_MENUITEM_CHOICESTRINGS  EQU (1<<5)  ; ChoiceToStringLookup table is 1-1 with ChoiceToValueLookup table,
    3333                                        ; ChoiceToStringLookup table must also be NULL terminated
     34FLG_MENUITEM_MASKVALUE      EQU (1<<6)  ; Item value is more than one bit among other bits
     35
    3436
    3537; Values for MENUITEM.bType
  • trunk/XTIDE_Universal_BIOS_Configurator_v2/Src/Menuitem.asm

    r233 r286  
    7676;       DS:SI:  Ptr to MENUITEM
    7777;   Returns:
    78 ;       Nothing
     78;       CF:     Cleared if value inputted
     79;               Set if user cancellation
    7980;   Corrupts registers:
    8081;       AX, BX, CX, SI, DI, ES
     
    9798    pop     di
    9899
    99     cmp     BYTE [si+WORD_DIALOG_IO.bUserCancellation], TRUE
     100    mov     cl, [si+WORD_DIALOG_IO.bUserCancellation]
     101    cmp     cl, TRUE
    100102    je      SHORT .NothingToChange
    101103    mov     ax, [si+WORD_DIALOG_IO.wReturnWord]
     
    104106.NothingToChange:
    105107    add     sp, BYTE WORD_DIALOG_IO_size
     108    shr     cl, 1
    106109    ret
    107110
     
    150153    add     di, [si+MENUITEM.itemValue+ITEM_VALUE.wRomvarsValueOffset]
    151154    jmp     [cs:bx+.rgfnJumpToStoreValueBasedOnItemType]
     155.InvalidItemType:
     156    ret
    152157
    153158ALIGN WORD_ALIGN
     
    174179ALIGN JUMP_ALIGN
    175180.StoreMultichoiceValueFromAXtoESDIwithItemInDSSI:
     181    test    BYTE [si+MENUITEM.bFlags], FLG_MENUITEM_MASKVALUE
     182    jnz     SHORT .ClearBitsUsingMask
    176183    test    BYTE [si+MENUITEM.bFlags], FLG_MENUITEM_FLAGVALUE
    177184    jz      SHORT .TranslateChoiceToValueUsingLookupTable
     
    187194    or      [es:di], ax
    188195    jmp     SHORT .SetUnsavedChanges
     196
     197ALIGN JUMP_ALIGN
     198.ClearBitsUsingMask:
     199    mov     bx, [si+MENUITEM.itemValue+ITEM_VALUE.wValueBitmask]
     200    not     bx
     201    and     [es:di], bx
     202    ; Fall to .TranslateChoiceToValueUsingLookupTable
     203
    189204
    190205ALIGN JUMP_ALIGN
     
    225240.NoWriter:
    226241    pop     bx
     242    test    BYTE [si+MENUITEM.bFlags], FLG_MENUITEM_MASKVALUE
     243    jz      SHORT .StoreByteOrWord
     244    or      [es:di], ax
     245    jmp     SHORT .SetUnsavedChanges
     246
     247.StoreByteOrWord:
    227248    test    BYTE [si+MENUITEM.bFlags], FLG_MENUITEM_BYTEVALUE
    228249    jnz     SHORT .StoreByteFromAL
    229        
     250
    230251    mov     [es:di+1], ah
    231252ALIGN JUMP_ALIGN
     
    255276    CALL_MENU_LIBRARY GetHighlightedItemToAX
    256277    CALL_MENU_LIBRARY RefreshItemFromAX
    257 .InvalidItemType:
    258278    ret
    259279
     
    306326    pop     es
    307327
     328    test    BYTE [si+MENUITEM.bFlags], FLG_MENUITEM_MASKVALUE
     329    jz      SHORT .TestIfFlagValue
     330    and     ax, [si+MENUITEM.itemValue+ITEM_VALUE.wValueBitmask]
     331    ret
     332
     333.TestIfFlagValue:
    308334    test    BYTE [si+MENUITEM.bFlags], FLG_MENUITEM_FLAGVALUE
    309335    jz      SHORT .Return
  • trunk/XTIDE_Universal_BIOS_Configurator_v2/Src/MenuitemPrint.asm

    r233 r286  
    233233    mov     bx, 10
    234234    CALL_DISPLAY_LIBRARY PrintWordFromAXwithBaseInBX
    235     jmp     SHORT FinishPrintingUnsignedOrHexValue
     235    jmp     SHORT MenuitemPrint_FinishPrintingUnsignedOrHexValue
    236236
    237237;--------------------------------------------------------------------
     
    258258    CALL_DISPLAY_LIBRARY PrintCharacterFromAL
    259259ALIGN JUMP_ALIGN
    260 FinishPrintingUnsignedOrHexValue:
     260MenuitemPrint_FinishPrintingUnsignedOrHexValue:
    261261    CALL_DISPLAY_LIBRARY GetCharacterPointerToBXAX
    262262    xchg    bx, ax
  • trunk/XTIDE_Universal_BIOS_Configurator_v2/Src/Menupages/IdeControllerMenu.asm

    r280 r286  
    178178    dw  DEVICE_32BIT_ATA
    179179    dw  DEVICE_SERIAL_PORT
     180    dw  DEVICE_JRIDE_ISA
    180181g_rgszValueToStringLookupForDevice:
    181182    dw  g_szValueCfgDeviceDual8b
     
    185186    dw  g_szValueCfgDevice32b
    186187    dw  g_szValueCfgDeviceSerial
     188    dw  g_szValueCfgDeviceJrIdeIsa
    187189
    188190g_rgbChoiceToValueLookupForCOM:
  • trunk/XTIDE_Universal_BIOS_Configurator_v2/Src/Menupages/MasterSlaveMenu.asm

    r108 r286  
    1010    at  MENUPAGE.fnEnter,           dw  MasterSlaveMenu_EnterMenuOrModifyItemVisibility
    1111    at  MENUPAGE.fnBack,            dw  IdeControllerMenu_EnterMenuOrModifyItemVisibility
    12     at  MENUPAGE.wMenuitems,        dw  6
     12    at  MENUPAGE.wMenuitems,        dw  9
    1313iend
    1414
     
    3939iend
    4040
     41g_MenuitemMasterSlaveWriteCache:
     42istruc MENUITEM
     43    at  MENUITEM.fnActivate,        dw  Menuitem_ActivateMultichoiceSelectionForMenuitemInDSSI
     44    at  MENUITEM.fnFormatValue,     dw  MenuitemPrint_WriteLookupValueStringToBufferInESDIfromUnshiftedItemInDSSI
     45    at  MENUITEM.szName,            dw  g_szItemDrvWriteCache
     46    at  MENUITEM.szQuickInfo,       dw  g_szNfoDrvWriteCache
     47    at  MENUITEM.szHelp,            dw  g_szHelpDrvWriteCache
     48    at  MENUITEM.bFlags,            db  FLG_MENUITEM_VISIBLE | FLG_MENUITEM_MASKVALUE
     49    at  MENUITEM.bType,             db  TYPE_MENUITEM_MULTICHOICE
     50    at  MENUITEM.itemValue + ITEM_VALUE.wRomvarsValueOffset,        dw  NULL
     51    at  MENUITEM.itemValue + ITEM_VALUE.szDialogTitle,              dw  g_szDlgDrvWriteCache
     52    at  MENUITEM.itemValue + ITEM_VALUE.szMultichoice,              dw  g_szMultichoiseWrCache
     53    at  MENUITEM.itemValue + ITEM_VALUE.rgwChoiceToValueLookup,     dw  g_rgwChoiceToValueLookupForWriteCache
     54    at  MENUITEM.itemValue + ITEM_VALUE.rgszChoiceToStringLookup,   dw  g_rgszChoiceToStringLookupForWriteCache
     55    at  MENUITEM.itemValue + ITEM_VALUE.wValueBitmask,              dw  MASK_DRVPARAMS_WRITECACHE
     56iend
     57
    4158g_MenuitemMasterSlaveUserCHS:
    4259istruc MENUITEM
     
    100117iend
    101118
     119g_MenuitemMasterSlaveUserLBA:
     120istruc MENUITEM
     121    at  MENUITEM.fnActivate,        dw  Menuitem_ActivateMultichoiceSelectionForMenuitemInDSSI
     122    at  MENUITEM.fnFormatValue,     dw  MenuitemPrint_WriteLookupValueStringToBufferInESDIfromShiftedItemInDSSI
     123    at  MENUITEM.szName,            dw  g_szItemDrvUserLBA
     124    at  MENUITEM.szQuickInfo,       dw  g_szNfoDrvUserLBA
     125    at  MENUITEM.szHelp,            dw  g_szHelpDrvUserLBA
     126    at  MENUITEM.bFlags,            db  FLG_MENUITEM_VISIBLE | FLG_MENUITEM_MODIFY_MENU | FLG_MENUITEM_FLAGVALUE
     127    at  MENUITEM.bType,             db  TYPE_MENUITEM_MULTICHOICE
     128    at  MENUITEM.itemValue + ITEM_VALUE.wRomvarsValueOffset,        dw  NULL
     129    at  MENUITEM.itemValue + ITEM_VALUE.szDialogTitle,              dw  g_szDlgDrvUserLBA
     130    at  MENUITEM.itemValue + ITEM_VALUE.szMultichoice,              dw  g_szMultichoiceBooleanFlag
     131    at  MENUITEM.itemValue + ITEM_VALUE.rgszValueToStringLookup,    dw  g_rgszValueToStringLookupForFlagBooleans
     132    at  MENUITEM.itemValue + ITEM_VALUE.wValueBitmask,              dw  FLG_DRVPARAMS_USERLBA
     133iend
     134
     135g_MenuitemMasterSlaveUserLbaValue:
     136istruc MENUITEM
     137    at  MENUITEM.fnActivate,        dw  Menuitem_ActivateUnsignedInputForMenuitemInDSSI
     138    at  MENUITEM.fnFormatValue,     dw  MenuitemPrint_WriteUnsignedValueStringToBufferInESDIfromItemInDSSI
     139    at  MENUITEM.szName,            dw  g_szItemDrvLbaSectors
     140    at  MENUITEM.szQuickInfo,       dw  g_szNfoDrvLbaSectors
     141    at  MENUITEM.szHelp,            dw  g_szNfoDrvLbaSectors
     142    at  MENUITEM.bFlags,            db  NULL
     143    at  MENUITEM.bType,             db  TYPE_MENUITEM_UNSIGNED
     144    at  MENUITEM.itemValue + ITEM_VALUE.wRomvarsValueOffset,        dw  NULL
     145    at  MENUITEM.itemValue + ITEM_VALUE.szDialogTitle,              dw  g_szDlgDrvLbaSectors
     146    at  MENUITEM.itemValue + ITEM_VALUE.wMinValue,                  dw  ((16383*16*63) / (1024 * 1024)) + 1 ; One sector over 8.4 GB
     147    at  MENUITEM.itemValue + ITEM_VALUE.wMaxValue,                  dw  10000000h / (1024 * 1024)   ; Limit to 28-bit LBA
     148    at  MENUITEM.itemValue + ITEM_VALUE.fnValueReader,              dw  ValueReaderForUserLbaValue
     149    at  MENUITEM.itemValue + ITEM_VALUE.fnValueWriter,              dw  ValueWriterForUserLbaValue
     150iend
     151
     152
     153g_rgwChoiceToValueLookupForWriteCache:
     154    dw  DEFAULT_WRITE_CACHE
     155    dw  DISABLE_WRITE_CACHE
     156    dw  ENABLE_WRITE_CACHE
     157
     158g_rgszChoiceToStringLookupForWriteCache:
     159    dw  g_szValueBootDispModeDefault
     160    dw  g_szValueDrvWrCaDis
     161    dw  g_szValueDrvWrCaEn
     162
    102163
    103164; Section containing code
     
    117178    lea     ax, [bx+DRVPARAMS.wFlags]
    118179    mov     [cs:g_MenuitemMasterSlaveBlockModeTransfers+MENUITEM.itemValue+ITEM_VALUE.wRomvarsValueOffset], ax
     180    mov     [cs:g_MenuitemMasterSlaveWriteCache+MENUITEM.itemValue+ITEM_VALUE.wRomvarsValueOffset], ax
    119181    mov     [cs:g_MenuitemMasterSlaveUserCHS+MENUITEM.itemValue+ITEM_VALUE.wRomvarsValueOffset], ax
     182    mov     [cs:g_MenuitemMasterSlaveUserLBA+MENUITEM.itemValue+ITEM_VALUE.wRomvarsValueOffset], ax
    120183
    121184    lea     ax, [bx+DRVPARAMS.wCylinders]
     
    127190    lea     ax, [bx+DRVPARAMS.bSect]
    128191    mov     [cs:g_MenuitemMasterSlaveSectors+MENUITEM.itemValue+ITEM_VALUE.wRomvarsValueOffset], ax
     192
     193    lea     ax, [bx+DRVPARAMS.dwMaximumLBA]
     194    mov     [cs:g_MenuitemMasterSlaveUserLbaValue+MENUITEM.itemValue+ITEM_VALUE.wRomvarsValueOffset], ax
    129195    ret
    130196
     
    143209    push    cs
    144210    pop     ds
     211    call    .EnableOrDisableUserCHSandLBA
    145212    call    .EnableOrDisableCHandS
     213    call    .EnableOrDisableUserLbaValue
    146214    mov     si, g_MenupageForMasterSlaveMenu
    147215    jmp     Menupage_ChangeToNewMenupageInDSSI
     216
     217
     218;--------------------------------------------------------------------
     219; .EnableOrDisableUserCHSandLBA
     220;   Parameters:
     221;       SS:BP:  Menu handle
     222;   Returns:
     223;       Nothing
     224;   Corrupts registers:
     225;       AX, BX
     226;--------------------------------------------------------------------
     227ALIGN JUMP_ALIGN
     228.EnableOrDisableUserCHSandLBA:
     229    mov     bx, [g_MenuitemMasterSlaveUserLBA+MENUITEM.itemValue+ITEM_VALUE.wRomvarsValueOffset]
     230    call    Buffers_GetRomvarsValueToAXfromOffsetInBX
     231    test    ax, FLG_DRVPARAMS_USERLBA
     232    jnz     SHORT .DisableCHSandEnableLBA
     233    test    ax, FLG_DRVPARAMS_USERCHS
     234    jnz     SHORT .EnableCHSandDisableLBA
     235
     236    ; Enable both
     237    mov     bx, g_MenuitemMasterSlaveUserCHS
     238    call    .EnableMenuitemFromCSBX
     239    mov     bx, g_MenuitemMasterSlaveUserLBA
     240    jmp     .EnableMenuitemFromCSBX
     241
     242ALIGN JUMP_ALIGN
     243.EnableCHSandDisableLBA:
     244    mov     bx, g_MenuitemMasterSlaveUserCHS
     245    call    .EnableMenuitemFromCSBX
     246    mov     bx, g_MenuitemMasterSlaveUserLBA
     247    jmp     .DisableMenuitemFromCSBX   
     248
     249ALIGN JUMP_ALIGN
     250.DisableCHSandEnableLBA:
     251    mov     bx, g_MenuitemMasterSlaveUserLBA
     252    call    .EnableMenuitemFromCSBX
     253    mov     bx, g_MenuitemMasterSlaveUserCHS
     254    jmp     .DisableMenuitemFromCSBX   
     255
    148256
    149257;--------------------------------------------------------------------
     
    162270    test    ax, FLG_DRVPARAMS_USERCHS
    163271    jz      SHORT .DisableCHandS
     272    test    ax, FLG_DRVPARAMS_USERLBA
     273    jnz     SHORT .DisableCHandS
    164274
    165275    mov     bx, g_MenuitemMasterSlaveCylinders
     
    168278    call    .EnableMenuitemFromCSBX
    169279    mov     bx, g_MenuitemMasterSlaveSectors
    170     call    .EnableMenuitemFromCSBX
    171     ret
     280    jmp     SHORT .EnableMenuitemFromCSBX
    172281
    173282ALIGN JUMP_ALIGN
     
    178287    call    .DisableMenuitemFromCSBX
    179288    mov     bx, g_MenuitemMasterSlaveSectors
    180     call    .DisableMenuitemFromCSBX
    181     ret
     289    jmp     SHORT .DisableMenuitemFromCSBX
     290
     291
     292;--------------------------------------------------------------------
     293; .EnableOrDisableUserLbaValue
     294;   Parameters:
     295;       SS:BP:  Menu handle
     296;   Returns:
     297;       Nothing
     298;   Corrupts registers:
     299;       AX, BX
     300;--------------------------------------------------------------------
     301ALIGN JUMP_ALIGN
     302.EnableOrDisableUserLbaValue:
     303    mov     bx, [cs:g_MenuitemMasterSlaveUserLBA+MENUITEM.itemValue+ITEM_VALUE.wRomvarsValueOffset]
     304    call    Buffers_GetRomvarsValueToAXfromOffsetInBX
     305    mov     bx, g_MenuitemMasterSlaveUserLbaValue
     306    test    ax, FLG_DRVPARAMS_USERCHS
     307    jnz     SHORT .DisableMenuitemFromCSBX
     308    test    ax, FLG_DRVPARAMS_USERLBA
     309    jz      SHORT .DisableMenuitemFromCSBX
     310    jmp     SHORT .EnableMenuitemFromCSBX
     311
    182312
    183313;--------------------------------------------------------------------
     
    200330    and     BYTE [cs:bx+MENUITEM.bFlags], ~FLG_MENUITEM_VISIBLE
    201331    ret
     332
     333
     334;--------------------------------------------------------------------
     335; MENUITEM value reader functions
     336;   Parameters:
     337;       AX:     Value from MENUITEM.itemValue+ITEM_VALUE.wRomvarsValueOffset
     338;       DS:SI:  Ptr to MENUITEM
     339;       ES:DI:  Ptr to value variable
     340;   Returns:
     341;       AX:     Value with possible modifications
     342;   Corrupts registers:
     343;       Nothing
     344;--------------------------------------------------------------------
     345ALIGN JUMP_ALIGN
     346ValueReaderForUserLbaValue:
     347    mov     ax, [es:di+2]       ; SHR 16
     348    eSHIFT_IM ax, 4, shr        ; SHR 16 + 4 = 20
     349    ret
     350
     351
     352;--------------------------------------------------------------------
     353; MENUITEM value writer functions
     354;   Parameters:
     355;       AX:     Value to be written to MENUITEM.itemValue+ITEM_VALUE.wRomvarsValueOffset
     356;       DS:SI:  Ptr to MENUITEM
     357;       ES:DI:  Ptr to value variable
     358;   Returns:
     359;       AX:     Value to be stored
     360;   Corrupts registers:
     361;       Nothing
     362;--------------------------------------------------------------------
     363ALIGN JUMP_ALIGN
     364ValueWriterForUserLbaValue:
     365    eSHIFT_IM ax, 4, shl
     366    mov     [es:di+2], ax
     367    xor     ax, ax      ; Store zero to [es:di]
     368    ret
  • trunk/XTIDE_Universal_BIOS_Configurator_v2/Src/Strings.asm

    r282 r286  
    155155g_szMultichoiceCfgDevice:
    156156                        db  "8-bit dual port (XTIDE)",LF
    157                         db  "XTIDE mod by Chuck(G)",LF
     157                        db  "XTIDE mod (A0<->A3)",LF
    158158                        db  "8-bit single port",LF
    159159                        db  "16-bit standard IDE",LF
    160160                        db  "32-bit generic IDE",LF
    161                         db  "Serial port virtual device",NULL
     161                        db  "Serial port virtual device",LF
     162                        db  "JR-IDE/ISA",NULL
    162163
    163164g_szSerialCOMChoice:
     
    211212
    212213g_szValueCfgDeviceDual8b:   db  "XTIDE",NULL
    213 g_szValueCfgDeviceMod:      db  "Chuck(G)",NULL
     214g_szValueCfgDeviceMod:      db  "XTIDEmod",NULL
    214215g_szValueCfgDeviceSingle8b: db  "8-bit",NULL
    215216g_szValueCfgDevice16b:      db  "16-bit",NULL
    216217g_szValueCfgDevice32b:      db  "32-bit",NULL
    217218g_szValueCfgDeviceSerial:   db  "Serial",NULL
     219g_szValueCfgDeviceJrIdeIsa: db  "JR-ISA",NULL
    218220
    219221
     
    221223g_szItemDrvBackToIde:   db  "Back to IDE Controller Menu",NULL
    222224g_szItemDrvBlockMode:   db  "Block Mode Transfers",NULL
     225g_szItemDrvWriteCache:  db  "Internal Write Cache",NULL
    223226g_szItemDrvUserCHS:     db  "User specified CHS",NULL
    224227g_szItemDrvCyls:        db  "Cylinders",NULL
    225228g_szItemDrvHeads:       db  "Heads",NULL
    226229g_szItemDrvSect:        db  "Sectors per track",NULL
     230g_szItemDrvUserLBA:     db  "User specified LBA",NULL
     231g_szItemDrvLbaSectors:  db  "Millions of sectors",NULL
    227232
    228233g_szDlgDrvBlockMode:    db  "Enable Block Mode Transfers?",NULL
     234g_szDlgDrvWriteCache:   db  "Select hard drive internal write cache settings.",NULL
    229235g_szDlgDrvUserCHS:      db  "Specify (P-)CHS parameters manually?",NULL
    230236g_szDlgDrvCyls:         db  "Enter number of P-CHS cylinders (1...16383).",NULL
    231237g_szDlgDrvHeads:        db  "Enter number of P-CHS heads (1...16).",NULL
    232238g_szDlgDrvSect:         db  "Enter number of sectors per track (1...63).",NULL
     239g_szDlgDrvUserLBA:      db  "Limit drive capacity?",NULL
     240g_szDlgDrvLbaSectors:   db  "Enter maximum capacity in millions of sectors (16...256).",NULL
    233241
    234242g_szNfoDrvBlockMode:    db  "Transfer multiple sectors per data request.",NULL
     243g_szNfoDrvWriteCache:   db  "Hard Drive Internal Write Cache settings (WARNING!).",NULL
    235244g_szNfoDrvUserCHS:      db  "Specify (P-)CHS parameters manually instead of autodetecting them.",NULL
    236245g_szNfoDrvCyls:         db  "Number of user specified P-CHS cylinders.",NULL
    237246g_szNfoDrvHeads:        db  "Number of user specified P-CHS heads.",NULL
    238247g_szNfoDrvSect:         db  "Number of user specified P-CHS sectors per track.",NULL
     248g_szNfoDrvUserLBA:      db  "Limit drive capacity to X million sectors.",NULL
     249g_szNfoDrvLbaSectors:   db  "Millions of sectors (1024*1024). 1M sectors = 512 MiB.",NULL
    239250
    240251g_szHelpDrvBlockMode:   incbin  "Drive_BlockMode.txt"
    241252                        db  NULL
     253g_szHelpDrvWriteCache:  incbin  "Drive_WriteCache.txt"
     254                        db  NULL
    242255g_szHelpDrvUserCHS:     incbin  "Drive_UserCHS.txt"
    243256                        db  NULL
     257g_szHelpDrvUserLBA:     incbin  "Drive_UserLBA.txt"
     258                        db  NULL
     259                       
     260g_szMultichoiseWrCache: db  "Drive Default",LF
     261                        db  "Disable Write Cache",LF
     262                        db  "Enable Write Cache",NULL
     263
     264g_szValueDrvWrCaDis:    db  "Disabled",NULL
     265g_szValueDrvWrCaEn:     db  "Enabled",NULL
    244266
    245267
Note: See TracChangeset for help on using the changeset viewer.