source: xtideuniversalbios/trunk/XTIDE_Universal_BIOS_Configurator_v2/Src/Menupages/MasterSlaveMenu.asm @ 592

Last change on this file since 592 was 592, checked in by krille_n_, 6 years ago

Changes:

  • The problem with NASM in the previous revision (r591) has been fixed.
  • The colors used by the boot menu and hotkey bar can now be customized by selecting one of a number of pre-defined color themes. Suggestions for additional themes are more than welcome!
  • Large builds are now 10 KB. Small builds are still 8 KB with the exception of the Tiny build which is now 4 KB. In other words, builds are now as small as possible to make it easier to combine them with other BIOSes.
  • Added code to the library to improve drive error handling. XTIDECFG can now handle "Drive Not Ready" errors.
  • Fixed a couple of potential bugs in AtaID.asm (AtaID_GetMaxPioModeToAXandMinCycleTimeToCX); 1) ATA1.bPioMode was treated as a WORD variable. 2) ATA2.bPIOSupp was assumed to be non-zero which would result in PIO mode 3 being returned if the assumption was wrong.
  • Made the same changes in the equivalent function used by BIOSDRVS (DisplayPioModeInformationUsingAtaInfoFromDSBX in AtaInfo.asm).
  • Fixed a bug from r587 in PDC20x30.asm in PDC20x30_GetMaxPioModeToALandMinPioCycleTimeToBX.
  • Fixed a bug from r523 in XTIDECFG where Auto Configure would only set the IRQ on one IDE interface on AT-builds.
  • XTIDECFG will now restore the default settings for the "Serial port virtual device" when reselecting it in the list of device types. This makes it behave consistently for all device types.
  • The eAAM macro is now used regardless if USE_UNDOC_INTEL is defined or not because it is apparently supported on all processors including the NEC V20/V30 CPUs.
  • Renamed the EXCLUDE_FROM_XTIDE_UNIVERSAL_BIOS define to EXCLUDE_FROM_XUB.
  • Added a define to exclude unused library code from BIOSDRVS (EXCLUDE_FROM_BIOSDRVS). This makes it a lot smaller than in previous revisions.
  • All unnecessary CLD-instructions are now under a new define 'CLD_NEEDED' which is only enabled for the BIOS. It is disabled for XTIDECFG and BIOSDRVS but can be enabled if needed by adding this define to the respective makefile. This change was made because these unnecessary instructions are wasteful and should never be needed. In fact, they only serve to hide bugs (in other peoples code) which I strongly believe should be avoided. I recommend people making their own BIOSes from source to not use this define as it's extremely unlikely to be needed.
  • Updated the copyright info in SerDrive and changed an URL to point to the new site.
  • Updated the copyright info and version number in BIOSDRVS.
  • Updated the copyright info in XTIDECFG.
  • Optimizations in general.
File size: 18.8 KB
RevLine 
[57]1; Project name  :   XTIDE Universal BIOS Configurator v2
2; Description   :   "Master/Slave Drive" menu structs and functions.
3
[376]4;
[526]5; XTIDE Universal BIOS and Associated Tools
6; Copyright (C) 2009-2010 by Tomi Tilli, 2011-2013 by XTIDE Universal BIOS Team.
[376]7;
8; This program is free software; you can redistribute it and/or modify
9; it under the terms of the GNU General Public License as published by
10; the Free Software Foundation; either version 2 of the License, or
11; (at your option) any later version.
[526]12;
[376]13; This program is distributed in the hope that it will be useful,
14; but WITHOUT ANY WARRANTY; without even the implied warranty of
15; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
[526]16; GNU General Public License for more details.
[376]17; Visit http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
[526]18;
[376]19
[57]20; Section containing initialized data
21SECTION .data
22
23ALIGN WORD_ALIGN
24g_MenupageForMasterSlaveMenu:
25istruc MENUPAGE
26    at  MENUPAGE.fnEnter,           dw  MasterSlaveMenu_EnterMenuOrModifyItemVisibility
[59]27    at  MENUPAGE.fnBack,            dw  IdeControllerMenu_EnterMenuOrModifyItemVisibility
[425]28    at  MENUPAGE.wMenuitems,        dw  10
[57]29iend
30
31g_MenuitemMasterSlaveBackToIdeControllerMenu:
32istruc MENUITEM
33    at  MENUITEM.fnActivate,        dw  IdeControllerMenu_EnterMenuOrModifyItemVisibility
34    at  MENUITEM.szName,            dw  g_szItemDrvBackToIde
35    at  MENUITEM.szQuickInfo,       dw  g_szItemDrvBackToIde
36    at  MENUITEM.szHelp,            dw  g_szItemDrvBackToIde
37    at  MENUITEM.bFlags,            db  FLG_MENUITEM_VISIBLE
38    at  MENUITEM.bType,             db  TYPE_MENUITEM_PAGEBACK
39iend
40
41g_MenuitemMasterSlaveBlockModeTransfers:
42istruc MENUITEM
[108]43    at  MENUITEM.fnActivate,        dw  Menuitem_ActivateMultichoiceSelectionForMenuitemInDSSI
[59]44    at  MENUITEM.fnFormatValue,     dw  MenuitemPrint_WriteLookupValueStringToBufferInESDIfromShiftedItemInDSSI
[57]45    at  MENUITEM.szName,            dw  g_szItemDrvBlockMode
46    at  MENUITEM.szQuickInfo,       dw  g_szNfoDrvBlockMode
47    at  MENUITEM.szHelp,            dw  g_szHelpDrvBlockMode
48    at  MENUITEM.bFlags,            db  FLG_MENUITEM_VISIBLE | FLG_MENUITEM_FLAGVALUE
[108]49    at  MENUITEM.bType,             db  TYPE_MENUITEM_MULTICHOICE
[57]50    at  MENUITEM.itemValue + ITEM_VALUE.wRomvarsValueOffset,        dw  NULL
51    at  MENUITEM.itemValue + ITEM_VALUE.szDialogTitle,              dw  g_szDlgDrvBlockMode
[108]52    at  MENUITEM.itemValue + ITEM_VALUE.szMultichoice,              dw  g_szMultichoiceBooleanFlag
[57]53    at  MENUITEM.itemValue + ITEM_VALUE.rgszValueToStringLookup,    dw  g_rgszValueToStringLookupForFlagBooleans
54    at  MENUITEM.itemValue + ITEM_VALUE.wValueBitmask,              dw  FLG_DRVPARAMS_BLOCKMODE
55iend
56
[425]57g_MenuitemMasterSlaveChsTranslateMode:
58istruc MENUITEM
59    at  MENUITEM.fnActivate,        dw  Menuitem_ActivateMultichoiceSelectionForMenuitemInDSSI
60    at  MENUITEM.fnFormatValue,     dw  MenuitemPrint_WriteLookupValueStringToBufferInESDIfromUnshiftedItemInDSSI
61    at  MENUITEM.szName,            dw  g_szItemDrvXlateMode
62    at  MENUITEM.szQuickInfo,       dw  g_szNfoDrvXlateMode
63    at  MENUITEM.szHelp,            dw  g_szNfoDrvXlateMode
64    at  MENUITEM.bFlags,            db  FLG_MENUITEM_VISIBLE | FLG_MENUITEM_MASKVALUE
65    at  MENUITEM.bType,             db  TYPE_MENUITEM_MULTICHOICE
66    at  MENUITEM.itemValue + ITEM_VALUE.wRomvarsValueOffset,        dw  NULL
67    at  MENUITEM.itemValue + ITEM_VALUE.szDialogTitle,              dw  g_szDlgDrvXlateMode
68    at  MENUITEM.itemValue + ITEM_VALUE.szMultichoice,              dw  g_szMultichoiseXlateMode
69    at  MENUITEM.itemValue + ITEM_VALUE.rgwChoiceToValueLookup,     dw  g_rgwChoiceToValueLookupForXlateMode
70    at  MENUITEM.itemValue + ITEM_VALUE.rgszChoiceToStringLookup,   dw  g_rgszChoiceToStringLookupForXlateMode
71    at  MENUITEM.itemValue + ITEM_VALUE.wValueBitmask,              dw  MASK_DRVPARAMS_TRANSLATEMODE
72    at  MENUITEM.itemValue + ITEM_VALUE.bFieldPosition,             db  TRANSLATEMODE_FIELD_POSITION
73iend
74
[286]75g_MenuitemMasterSlaveWriteCache:
76istruc MENUITEM
77    at  MENUITEM.fnActivate,        dw  Menuitem_ActivateMultichoiceSelectionForMenuitemInDSSI
78    at  MENUITEM.fnFormatValue,     dw  MenuitemPrint_WriteLookupValueStringToBufferInESDIfromUnshiftedItemInDSSI
79    at  MENUITEM.szName,            dw  g_szItemDrvWriteCache
80    at  MENUITEM.szQuickInfo,       dw  g_szNfoDrvWriteCache
81    at  MENUITEM.szHelp,            dw  g_szHelpDrvWriteCache
82    at  MENUITEM.bFlags,            db  FLG_MENUITEM_VISIBLE | FLG_MENUITEM_MASKVALUE
83    at  MENUITEM.bType,             db  TYPE_MENUITEM_MULTICHOICE
84    at  MENUITEM.itemValue + ITEM_VALUE.wRomvarsValueOffset,        dw  NULL
85    at  MENUITEM.itemValue + ITEM_VALUE.szDialogTitle,              dw  g_szDlgDrvWriteCache
86    at  MENUITEM.itemValue + ITEM_VALUE.szMultichoice,              dw  g_szMultichoiseWrCache
87    at  MENUITEM.itemValue + ITEM_VALUE.rgwChoiceToValueLookup,     dw  g_rgwChoiceToValueLookupForWriteCache
88    at  MENUITEM.itemValue + ITEM_VALUE.rgszChoiceToStringLookup,   dw  g_rgszChoiceToStringLookupForWriteCache
89    at  MENUITEM.itemValue + ITEM_VALUE.wValueBitmask,              dw  MASK_DRVPARAMS_WRITECACHE
[425]90    at  MENUITEM.itemValue + ITEM_VALUE.bFieldPosition,             db  0
[286]91iend
92
[57]93g_MenuitemMasterSlaveUserCHS:
94istruc MENUITEM
[108]95    at  MENUITEM.fnActivate,        dw  Menuitem_ActivateMultichoiceSelectionForMenuitemInDSSI
[59]96    at  MENUITEM.fnFormatValue,     dw  MenuitemPrint_WriteLookupValueStringToBufferInESDIfromShiftedItemInDSSI
[57]97    at  MENUITEM.szName,            dw  g_szItemDrvUserCHS
98    at  MENUITEM.szQuickInfo,       dw  g_szNfoDrvUserCHS
99    at  MENUITEM.szHelp,            dw  g_szHelpDrvUserCHS
100    at  MENUITEM.bFlags,            db  FLG_MENUITEM_VISIBLE | FLG_MENUITEM_MODIFY_MENU | FLG_MENUITEM_FLAGVALUE
[108]101    at  MENUITEM.bType,             db  TYPE_MENUITEM_MULTICHOICE
[57]102    at  MENUITEM.itemValue + ITEM_VALUE.wRomvarsValueOffset,        dw  NULL
103    at  MENUITEM.itemValue + ITEM_VALUE.szDialogTitle,              dw  g_szDlgDrvUserCHS
[108]104    at  MENUITEM.itemValue + ITEM_VALUE.szMultichoice,              dw  g_szMultichoiceBooleanFlag
[57]105    at  MENUITEM.itemValue + ITEM_VALUE.rgszValueToStringLookup,    dw  g_rgszValueToStringLookupForFlagBooleans
106    at  MENUITEM.itemValue + ITEM_VALUE.wValueBitmask,              dw  FLG_DRVPARAMS_USERCHS
[526]107    at  MENUITEM.itemValue + ITEM_VALUE.fnValueWriter,              dw  MasterSlaveMenu_WriteCHSFlag
[57]108iend
109
110g_MenuitemMasterSlaveCylinders:
111istruc MENUITEM
112    at  MENUITEM.fnActivate,        dw  Menuitem_ActivateUnsignedInputForMenuitemInDSSI
113    at  MENUITEM.fnFormatValue,     dw  MenuitemPrint_WriteUnsignedValueStringToBufferInESDIfromItemInDSSI
114    at  MENUITEM.szName,            dw  g_szItemDrvCyls
115    at  MENUITEM.szQuickInfo,       dw  g_szNfoDrvCyls
116    at  MENUITEM.szHelp,            dw  g_szNfoDrvCyls
117    at  MENUITEM.bFlags,            db  NULL
118    at  MENUITEM.bType,             db  TYPE_MENUITEM_UNSIGNED
119    at  MENUITEM.itemValue + ITEM_VALUE.wRomvarsValueOffset,        dw  NULL
120    at  MENUITEM.itemValue + ITEM_VALUE.szDialogTitle,              dw  g_szDlgDrvCyls
121    at  MENUITEM.itemValue + ITEM_VALUE.wMinValue,                  dw  1
[548]122    at  MENUITEM.itemValue + ITEM_VALUE.wMaxValue,                  dw  MAX_PCHS_CYLINDERS
123%define                 MASTERSLAVE_CYLINDERS_DEFAULT                   1024        ; Max L-CHS Cylinders
[57]124iend
125
126g_MenuitemMasterSlaveHeads:
127istruc MENUITEM
128    at  MENUITEM.fnActivate,        dw  Menuitem_ActivateUnsignedInputForMenuitemInDSSI
129    at  MENUITEM.fnFormatValue,     dw  MenuitemPrint_WriteUnsignedValueStringToBufferInESDIfromItemInDSSI
130    at  MENUITEM.szName,            dw  g_szItemDrvHeads
131    at  MENUITEM.szQuickInfo,       dw  g_szNfoDrvHeads
132    at  MENUITEM.szHelp,            dw  g_szNfoDrvHeads
133    at  MENUITEM.bFlags,            db  FLG_MENUITEM_BYTEVALUE
134    at  MENUITEM.bType,             db  TYPE_MENUITEM_UNSIGNED
135    at  MENUITEM.itemValue + ITEM_VALUE.wRomvarsValueOffset,        dw  NULL
136    at  MENUITEM.itemValue + ITEM_VALUE.szDialogTitle,              dw  g_szDlgDrvHeads
137    at  MENUITEM.itemValue + ITEM_VALUE.wMinValue,                  dw  1
[548]138    at  MENUITEM.itemValue + ITEM_VALUE.wMaxValue,                  dw  MAX_PCHS_HEADS
139%define                 MASTERSLAVE_HEADS_DEFAULT                       MAX_PCHS_HEADS
[57]140iend
141
142g_MenuitemMasterSlaveSectors:
143istruc MENUITEM
144    at  MENUITEM.fnActivate,        dw  Menuitem_ActivateUnsignedInputForMenuitemInDSSI
145    at  MENUITEM.fnFormatValue,     dw  MenuitemPrint_WriteUnsignedValueStringToBufferInESDIfromItemInDSSI
146    at  MENUITEM.szName,            dw  g_szItemDrvSect
147    at  MENUITEM.szQuickInfo,       dw  g_szNfoDrvSect
148    at  MENUITEM.szHelp,            dw  g_szNfoDrvSect
149    at  MENUITEM.bFlags,            db  FLG_MENUITEM_BYTEVALUE
150    at  MENUITEM.bType,             db  TYPE_MENUITEM_UNSIGNED
151    at  MENUITEM.itemValue + ITEM_VALUE.wRomvarsValueOffset,        dw  NULL
152    at  MENUITEM.itemValue + ITEM_VALUE.szDialogTitle,              dw  g_szDlgDrvSect
153    at  MENUITEM.itemValue + ITEM_VALUE.wMinValue,                  dw  1
[548]154    at  MENUITEM.itemValue + ITEM_VALUE.wMaxValue,                  dw  MAX_PCHS_SECTORS_PER_TRACK
155%define                 MASTERSLAVE_SECTORS_DEFAULT                     MAX_PCHS_SECTORS_PER_TRACK
[57]156iend
157
[286]158g_MenuitemMasterSlaveUserLBA:
159istruc MENUITEM
160    at  MENUITEM.fnActivate,        dw  Menuitem_ActivateMultichoiceSelectionForMenuitemInDSSI
161    at  MENUITEM.fnFormatValue,     dw  MenuitemPrint_WriteLookupValueStringToBufferInESDIfromShiftedItemInDSSI
162    at  MENUITEM.szName,            dw  g_szItemDrvUserLBA
163    at  MENUITEM.szQuickInfo,       dw  g_szNfoDrvUserLBA
164    at  MENUITEM.szHelp,            dw  g_szHelpDrvUserLBA
165    at  MENUITEM.bFlags,            db  FLG_MENUITEM_VISIBLE | FLG_MENUITEM_MODIFY_MENU | FLG_MENUITEM_FLAGVALUE
166    at  MENUITEM.bType,             db  TYPE_MENUITEM_MULTICHOICE
167    at  MENUITEM.itemValue + ITEM_VALUE.wRomvarsValueOffset,        dw  NULL
168    at  MENUITEM.itemValue + ITEM_VALUE.szDialogTitle,              dw  g_szDlgDrvUserLBA
169    at  MENUITEM.itemValue + ITEM_VALUE.szMultichoice,              dw  g_szMultichoiceBooleanFlag
170    at  MENUITEM.itemValue + ITEM_VALUE.rgszValueToStringLookup,    dw  g_rgszValueToStringLookupForFlagBooleans
171    at  MENUITEM.itemValue + ITEM_VALUE.wValueBitmask,              dw  FLG_DRVPARAMS_USERLBA
[526]172    at  MENUITEM.itemValue + ITEM_VALUE.fnValueWriter,              dw  MasterSlaveMenu_WriteLBAFlag
[286]173iend
[57]174
[286]175g_MenuitemMasterSlaveUserLbaValue:
176istruc MENUITEM
177    at  MENUITEM.fnActivate,        dw  Menuitem_ActivateUnsignedInputForMenuitemInDSSI
178    at  MENUITEM.fnFormatValue,     dw  MenuitemPrint_WriteUnsignedValueStringToBufferInESDIfromItemInDSSI
179    at  MENUITEM.szName,            dw  g_szItemDrvLbaSectors
180    at  MENUITEM.szQuickInfo,       dw  g_szNfoDrvLbaSectors
181    at  MENUITEM.szHelp,            dw  g_szNfoDrvLbaSectors
182    at  MENUITEM.bFlags,            db  NULL
183    at  MENUITEM.bType,             db  TYPE_MENUITEM_UNSIGNED
184    at  MENUITEM.itemValue + ITEM_VALUE.wRomvarsValueOffset,        dw  NULL
185    at  MENUITEM.itemValue + ITEM_VALUE.szDialogTitle,              dw  g_szDlgDrvLbaSectors
[548]186    at  MENUITEM.itemValue + ITEM_VALUE.wMinValue,                  dw  16                          ; 8 GiB (but a little more than L-CHS limit)
[286]187    at  MENUITEM.itemValue + ITEM_VALUE.wMaxValue,                  dw  10000000h / (1024 * 1024)   ; Limit to 28-bit LBA
188    at  MENUITEM.itemValue + ITEM_VALUE.fnValueReader,              dw  ValueReaderForUserLbaValue
189    at  MENUITEM.itemValue + ITEM_VALUE.fnValueWriter,              dw  ValueWriterForUserLbaValue
[548]190%define             MASTERSLAVE_USERLBA_DEFAULT                     64                              ; 32 GiB (max supported by Win95)
[286]191iend
192
193
194g_rgwChoiceToValueLookupForWriteCache:
195    dw  DEFAULT_WRITE_CACHE
196    dw  DISABLE_WRITE_CACHE
197    dw  ENABLE_WRITE_CACHE
198g_rgszChoiceToStringLookupForWriteCache:
199    dw  g_szValueBootDispModeDefault
200    dw  g_szValueDrvWrCaDis
201    dw  g_szValueDrvWrCaEn
202
[425]203g_rgwChoiceToValueLookupForXlateMode:
204    dw  TRANSLATEMODE_NORMAL
205    dw  TRANSLATEMODE_LARGE
206    dw  TRANSLATEMODE_ASSISTED_LBA
207    dw  TRANSLATEMODE_AUTO
208g_rgszChoiceToStringLookupForXlateMode:
209    dw  g_szValueDrvXlateNormal
210    dw  g_szValueDrvXlateLarge
211    dw  g_szValueDrvXlateLBA
212    dw  g_szValueDrvXlateAuto
213
214
[57]215; Section containing code
216SECTION .text
217
218;--------------------------------------------------------------------
219; MasterSlaveMenu_InitializeToDrvparamsOffsetInBX
220;   Parameters:
221;       SS:BP:  Menu handle
222;   Returns:
223;       Nothing
224;   Corrupts registers:
225;       AX
226;--------------------------------------------------------------------
227ALIGN JUMP_ALIGN
228MasterSlaveMenu_InitializeToDrvparamsOffsetInBX:
[592]229    push    ds
230
231    push    cs
232    pop     ds
233
234%ifndef CHECK_FOR_UNUSED_ENTRYPOINTS
235%if DRVPARAMS.wFlags = 0
236    mov     ax, bx
237%else
[57]238    lea     ax, [bx+DRVPARAMS.wFlags]
[592]239%endif
240%endif
241    mov     [g_MenuitemMasterSlaveBlockModeTransfers+MENUITEM.itemValue+ITEM_VALUE.wRomvarsValueOffset], ax
242    mov     [g_MenuitemMasterSlaveChsTranslateMode+MENUITEM.itemValue+ITEM_VALUE.wRomvarsValueOffset], ax
243    mov     [g_MenuitemMasterSlaveWriteCache+MENUITEM.itemValue+ITEM_VALUE.wRomvarsValueOffset], ax
244    mov     [g_MenuitemMasterSlaveUserCHS+MENUITEM.itemValue+ITEM_VALUE.wRomvarsValueOffset], ax
245    mov     [g_MenuitemMasterSlaveUserLBA+MENUITEM.itemValue+ITEM_VALUE.wRomvarsValueOffset], ax
[57]246
247    lea     ax, [bx+DRVPARAMS.wCylinders]
[592]248    mov     [g_MenuitemMasterSlaveCylinders+MENUITEM.itemValue+ITEM_VALUE.wRomvarsValueOffset], ax
[57]249
250    lea     ax, [bx+DRVPARAMS.bHeads]
[592]251    mov     [g_MenuitemMasterSlaveHeads+MENUITEM.itemValue+ITEM_VALUE.wRomvarsValueOffset], ax
[57]252
253    lea     ax, [bx+DRVPARAMS.bSect]
[592]254    mov     [g_MenuitemMasterSlaveSectors+MENUITEM.itemValue+ITEM_VALUE.wRomvarsValueOffset], ax
[286]255
256    lea     ax, [bx+DRVPARAMS.dwMaximumLBA]
[592]257    mov     [g_MenuitemMasterSlaveUserLbaValue+MENUITEM.itemValue+ITEM_VALUE.wRomvarsValueOffset], ax
258
259    pop     ds
[57]260    ret
261
262
263;--------------------------------------------------------------------
264; MasterSlaveMenu_EnterMenuOrModifyItemVisibility
265;   Parameters:
266;       SS:BP:  Menu handle
267;   Returns:
268;       Nothing
269;   Corrupts registers:
270;       All, except BP
271;--------------------------------------------------------------------
272ALIGN JUMP_ALIGN
273MasterSlaveMenu_EnterMenuOrModifyItemVisibility:
274    push    cs
275    pop     ds
[286]276    call    .EnableOrDisableUserCHSandLBA
[57]277    call    .EnableOrDisableCHandS
[286]278    call    .EnableOrDisableUserLbaValue
[57]279    mov     si, g_MenupageForMasterSlaveMenu
280    jmp     Menupage_ChangeToNewMenupageInDSSI
281
[286]282
[57]283;--------------------------------------------------------------------
[286]284; .EnableOrDisableUserCHSandLBA
285;   Parameters:
286;       SS:BP:  Menu handle
287;   Returns:
288;       Nothing
289;   Corrupts registers:
290;       AX, BX
291;--------------------------------------------------------------------
292ALIGN JUMP_ALIGN
293.EnableOrDisableUserCHSandLBA:
294    mov     bx, [g_MenuitemMasterSlaveUserLBA+MENUITEM.itemValue+ITEM_VALUE.wRomvarsValueOffset]
295    call    Buffers_GetRomvarsValueToAXfromOffsetInBX
[592]296    test    al, FLG_DRVPARAMS_USERLBA
[286]297    jnz     SHORT .DisableCHSandEnableLBA
[592]298    test    al, FLG_DRVPARAMS_USERCHS
[286]299    jnz     SHORT .EnableCHSandDisableLBA
300
301    ; Enable both
302    mov     bx, g_MenuitemMasterSlaveUserCHS
[567]303    call    EnableMenuitemFromCSBX
[286]304    mov     bx, g_MenuitemMasterSlaveUserLBA
[567]305    jmp     SHORT .EnableMenuitemFromCSBX
[286]306
307ALIGN JUMP_ALIGN
308.EnableCHSandDisableLBA:
309    mov     bx, g_MenuitemMasterSlaveUserCHS
[567]310    call    EnableMenuitemFromCSBX
[286]311    mov     bx, g_MenuitemMasterSlaveUserLBA
[567]312    jmp     SHORT .DisableMenuitemFromCSBX
[286]313
314ALIGN JUMP_ALIGN
315.DisableCHSandEnableLBA:
316    mov     bx, g_MenuitemMasterSlaveUserLBA
[567]317    call    EnableMenuitemFromCSBX
[286]318    mov     bx, g_MenuitemMasterSlaveUserCHS
[567]319    jmp     SHORT .DisableMenuitemFromCSBX
[286]320
321
322;--------------------------------------------------------------------
[57]323; .EnableOrDisableCHandS
324;   Parameters:
325;       SS:BP:  Menu handle
326;   Returns:
327;       Nothing
328;   Corrupts registers:
329;       AX, BX
330;--------------------------------------------------------------------
331ALIGN JUMP_ALIGN
332.EnableOrDisableCHandS:
[592]333    mov     bx, [g_MenuitemMasterSlaveUserCHS+MENUITEM.itemValue+ITEM_VALUE.wRomvarsValueOffset]
[57]334    call    Buffers_GetRomvarsValueToAXfromOffsetInBX
[592]335    test    al, FLG_DRVPARAMS_USERCHS
[57]336    jz      SHORT .DisableCHandS
[592]337    test    al, FLG_DRVPARAMS_USERLBA
[286]338    jnz     SHORT .DisableCHandS
[57]339
340    mov     bx, g_MenuitemMasterSlaveCylinders
[567]341    call    EnableMenuitemFromCSBX
[57]342    mov     bx, g_MenuitemMasterSlaveHeads
[567]343    call    EnableMenuitemFromCSBX
[57]344    mov     bx, g_MenuitemMasterSlaveSectors
[286]345    jmp     SHORT .EnableMenuitemFromCSBX
[57]346
347ALIGN JUMP_ALIGN
348.DisableCHandS:
349    mov     bx, g_MenuitemMasterSlaveCylinders
[567]350    call    DisableMenuitemFromCSBX
[57]351    mov     bx, g_MenuitemMasterSlaveHeads
[567]352    call    DisableMenuitemFromCSBX
[57]353    mov     bx, g_MenuitemMasterSlaveSectors
[286]354    jmp     SHORT .DisableMenuitemFromCSBX
[57]355
[286]356
[57]357;--------------------------------------------------------------------
[286]358; .EnableOrDisableUserLbaValue
359;   Parameters:
360;       SS:BP:  Menu handle
361;   Returns:
362;       Nothing
363;   Corrupts registers:
364;       AX, BX
365;--------------------------------------------------------------------
366ALIGN JUMP_ALIGN
367.EnableOrDisableUserLbaValue:
[592]368    mov     bx, [g_MenuitemMasterSlaveUserLBA+MENUITEM.itemValue+ITEM_VALUE.wRomvarsValueOffset]
[286]369    call    Buffers_GetRomvarsValueToAXfromOffsetInBX
370    mov     bx, g_MenuitemMasterSlaveUserLbaValue
[592]371    test    al, FLG_DRVPARAMS_USERCHS
[286]372    jnz     SHORT .DisableMenuitemFromCSBX
[592]373    test    al, FLG_DRVPARAMS_USERLBA
[286]374    jz      SHORT .DisableMenuitemFromCSBX
[293]375    ; Fall to .EnableMenuitemFromCSBX
[286]376
377
378;--------------------------------------------------------------------
[57]379; .EnableMenuitemFromCSBX
380; .DisableMenuitemFromCSBX
381;   Parameters:
382;       CS:BX:  Ptr to MENUITEM
383;   Returns:
384;       Nothing
385;   Corrupts registers:
386;       Nothing
387;--------------------------------------------------------------------
388ALIGN JUMP_ALIGN
389.EnableMenuitemFromCSBX:
[567]390    jmp     EnableMenuitemFromCSBX
[57]391
392ALIGN JUMP_ALIGN
393.DisableMenuitemFromCSBX:
[567]394    jmp     DisableMenuitemFromCSBX
[286]395
396
397;--------------------------------------------------------------------
398; MENUITEM value reader functions
399;   Parameters:
400;       AX:     Value from MENUITEM.itemValue+ITEM_VALUE.wRomvarsValueOffset
401;       DS:SI:  Ptr to MENUITEM
402;       ES:DI:  Ptr to value variable
403;   Returns:
404;       AX:     Value with possible modifications
405;   Corrupts registers:
406;       Nothing
407;--------------------------------------------------------------------
408ALIGN JUMP_ALIGN
409ValueReaderForUserLbaValue:
[345]410    push    dx
411
[583]412    mov     ax, 1
413    cwd                         ; DX:AX = 1
414    add     ax, [es:di]
415    adc     dx, [es:di+2]       ; User defined LBA28 limit added
[345]416
417    xchg    ax, dx              ; SHR 16
[567]418    eSHR_IM ax, 4               ; SHR 4 => AX = DX:AX / (1024*1024)
[345]419
420    pop     dx
[286]421    ret
422
423
424;--------------------------------------------------------------------
425; MENUITEM value writer functions
426;   Parameters:
427;       AX:     Value to be written to MENUITEM.itemValue+ITEM_VALUE.wRomvarsValueOffset
428;       DS:SI:  Ptr to MENUITEM
429;       ES:DI:  Ptr to value variable
430;   Returns:
431;       AX:     Value to be stored
432;   Corrupts registers:
433;       Nothing
434;--------------------------------------------------------------------
435ALIGN JUMP_ALIGN
436ValueWriterForUserLbaValue:
[345]437    push    dx
438
439    xor     dx, dx
[567]440    eSHL_IM ax, 4
[345]441    xchg    dx, ax          ; DX:AX now holds AX * 1024 * 1024
442
443    sub     ax, BYTE 1      ; Decrement DX:AX by one
444    sbb     dx, BYTE 0      ; (necessary since maximum LBA28 sector count is 0FFF FFFFh)
445
446    mov     [es:di+2], dx   ; Store DX by ourselves
447    pop     dx
448    ret                     ; AX will be stored by our menu system
[369]449
450;
451; No change to CHS flag, but we use this opportunity to change defaults stored in the CHS values if we are
452; changing in/out of user CHS settings (since we use these bytes in different ways with the LBA setting).
453;
[526]454ALIGN JUMP_ALIGN
[369]455MasterSlaveMenu_WriteCHSFlag:
[592]456    test    BYTE [es:di], FLG_DRVPARAMS_USERCHS
457    jnz     SHORT .AlreadySet
[369]458
[567]459    push    ax
460    push    di
461    push    si
[369]462
[567]463    mov     ax, MASTERSLAVE_CYLINDERS_DEFAULT
464    mov     si, g_MenuitemMasterSlaveCylinders
465    call    Menuitem_StoreValueFromAXtoMenuitemInDSSI
[526]466
[567]467    mov     ax, MASTERSLAVE_HEADS_DEFAULT
468    mov     si, g_MenuitemMasterSlaveHeads
469    call    Menuitem_StoreValueFromAXtoMenuitemInDSSI
[369]470
[567]471    mov     ax, MASTERSLAVE_SECTORS_DEFAULT
472    mov     si, g_MenuitemMasterSlaveSectors
473    call    Menuitem_StoreValueFromAXtoMenuitemInDSSI
[526]474
[567]475    pop     si
476    pop     di
477    pop     ax
[369]478
[592]479.AlreadySet:
[567]480    ret
[369]481
482;
483; No change to LBA flag, but we use this opportunity to change defaults stored in the LBA value if we are
484; changing in/out of user LBA settings (since we use these bytes in different ways with the CHS setting).
485;
[526]486ALIGN JUMP_ALIGN
[369]487MasterSlaveMenu_WriteLBAFlag:
[592]488    test    BYTE [es:di], FLG_DRVPARAMS_USERLBA
489    jnz     SHORT .AlreadySet
[369]490
[567]491    push    ax
492    push    di
493    push    si
[369]494
[567]495    mov     ax, MASTERSLAVE_USERLBA_DEFAULT
496    mov     si, g_MenuitemMasterSlaveUserLbaValue
497    call    Menuitem_StoreValueFromAXtoMenuitemInDSSI
[369]498
[567]499    pop     si
500    pop     di
501    pop     ax
[526]502
[592]503.AlreadySet:
[567]504    ret
[592]505
Note: See TracBrowser for help on using the repository browser.