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

Last change on this file since 622 was 614, checked in by Krister Nordvall, 3 years ago

Changes:

  • BIOSDRVS should now build again (broke in r613).
  • Removed the NO_ATAID_CORRECTION define from the Tiny build.
  • Added a new configuration option to skip detection of slave drives.
  • Made FLASH_SIGNATURE 2 bytes shorter to free up ROM space.
  • "Auto Configure" in XTIDECFG should now detect if running on an Olivetti M24, AT&T PC6300, Xerox 6060 or Logabax Persona 1600 and automatically select the fastest compatible transfer mode/device type for any IDE controllers found in the system.
  • Cleaned out some duplicate/unused definitions.
File size: 21.6 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
[614]28 at MENUPAGE.wMenuitems, dw 11
[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
[614]41g_MenuitemMasterSlaveDisableDetection:
42istruc MENUITEM
43 at MENUITEM.fnActivate, dw Menuitem_ActivateMultichoiceSelectionForMenuitemInDSSI
44 at MENUITEM.fnFormatValue, dw MenuitemPrint_WriteLookupValueStringToBufferInESDIfromShiftedItemInDSSI
45 at MENUITEM.szName, dw g_szItemDrvDisableDetection
46 at MENUITEM.szQuickInfo, dw g_szNfoDrvDisableDetection
47 at MENUITEM.szHelp, dw g_szHelpDrvDisableDetection
48 at MENUITEM.bFlags, db FLG_MENUITEM_MODIFY_MENU | FLG_MENUITEM_FLAGVALUE
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_szDlgDrvDisableDetection
52 at MENUITEM.itemValue + ITEM_VALUE.szMultichoice, dw g_szMultichoiceBooleanFlag
53 at MENUITEM.itemValue + ITEM_VALUE.rgszValueToStringLookup, dw g_rgszValueToStringLookupForFlagBooleans
54 at MENUITEM.itemValue + ITEM_VALUE.wValueBitmask, dw FLG_DRVPARAMS_DO_NOT_DETECT
55iend
56
[57]57g_MenuitemMasterSlaveBlockModeTransfers:
58istruc MENUITEM
[108]59 at MENUITEM.fnActivate, dw Menuitem_ActivateMultichoiceSelectionForMenuitemInDSSI
[59]60 at MENUITEM.fnFormatValue, dw MenuitemPrint_WriteLookupValueStringToBufferInESDIfromShiftedItemInDSSI
[57]61 at MENUITEM.szName, dw g_szItemDrvBlockMode
62 at MENUITEM.szQuickInfo, dw g_szNfoDrvBlockMode
63 at MENUITEM.szHelp, dw g_szHelpDrvBlockMode
[614]64 at MENUITEM.bFlags, db FLG_MENUITEM_FLAGVALUE
[108]65 at MENUITEM.bType, db TYPE_MENUITEM_MULTICHOICE
[57]66 at MENUITEM.itemValue + ITEM_VALUE.wRomvarsValueOffset, dw NULL
67 at MENUITEM.itemValue + ITEM_VALUE.szDialogTitle, dw g_szDlgDrvBlockMode
[108]68 at MENUITEM.itemValue + ITEM_VALUE.szMultichoice, dw g_szMultichoiceBooleanFlag
[57]69 at MENUITEM.itemValue + ITEM_VALUE.rgszValueToStringLookup, dw g_rgszValueToStringLookupForFlagBooleans
70 at MENUITEM.itemValue + ITEM_VALUE.wValueBitmask, dw FLG_DRVPARAMS_BLOCKMODE
71iend
72
[425]73g_MenuitemMasterSlaveChsTranslateMode:
74istruc MENUITEM
75 at MENUITEM.fnActivate, dw Menuitem_ActivateMultichoiceSelectionForMenuitemInDSSI
76 at MENUITEM.fnFormatValue, dw MenuitemPrint_WriteLookupValueStringToBufferInESDIfromUnshiftedItemInDSSI
77 at MENUITEM.szName, dw g_szItemDrvXlateMode
78 at MENUITEM.szQuickInfo, dw g_szNfoDrvXlateMode
79 at MENUITEM.szHelp, dw g_szNfoDrvXlateMode
[614]80 at MENUITEM.bFlags, db FLG_MENUITEM_MASKVALUE
[425]81 at MENUITEM.bType, db TYPE_MENUITEM_MULTICHOICE
82 at MENUITEM.itemValue + ITEM_VALUE.wRomvarsValueOffset, dw NULL
83 at MENUITEM.itemValue + ITEM_VALUE.szDialogTitle, dw g_szDlgDrvXlateMode
[614]84 at MENUITEM.itemValue + ITEM_VALUE.szMultichoice, dw g_szMultichoiceXlateMode
[425]85 at MENUITEM.itemValue + ITEM_VALUE.rgwChoiceToValueLookup, dw g_rgwChoiceToValueLookupForXlateMode
86 at MENUITEM.itemValue + ITEM_VALUE.rgszChoiceToStringLookup, dw g_rgszChoiceToStringLookupForXlateMode
87 at MENUITEM.itemValue + ITEM_VALUE.wValueBitmask, dw MASK_DRVPARAMS_TRANSLATEMODE
88 at MENUITEM.itemValue + ITEM_VALUE.bFieldPosition, db TRANSLATEMODE_FIELD_POSITION
89iend
90
[286]91g_MenuitemMasterSlaveWriteCache:
92istruc MENUITEM
93 at MENUITEM.fnActivate, dw Menuitem_ActivateMultichoiceSelectionForMenuitemInDSSI
94 at MENUITEM.fnFormatValue, dw MenuitemPrint_WriteLookupValueStringToBufferInESDIfromUnshiftedItemInDSSI
95 at MENUITEM.szName, dw g_szItemDrvWriteCache
96 at MENUITEM.szQuickInfo, dw g_szNfoDrvWriteCache
97 at MENUITEM.szHelp, dw g_szHelpDrvWriteCache
[614]98 at MENUITEM.bFlags, db FLG_MENUITEM_MASKVALUE
[286]99 at MENUITEM.bType, db TYPE_MENUITEM_MULTICHOICE
100 at MENUITEM.itemValue + ITEM_VALUE.wRomvarsValueOffset, dw NULL
101 at MENUITEM.itemValue + ITEM_VALUE.szDialogTitle, dw g_szDlgDrvWriteCache
[614]102 at MENUITEM.itemValue + ITEM_VALUE.szMultichoice, dw g_szMultichoiceWrCache
[286]103 at MENUITEM.itemValue + ITEM_VALUE.rgwChoiceToValueLookup, dw g_rgwChoiceToValueLookupForWriteCache
104 at MENUITEM.itemValue + ITEM_VALUE.rgszChoiceToStringLookup, dw g_rgszChoiceToStringLookupForWriteCache
105 at MENUITEM.itemValue + ITEM_VALUE.wValueBitmask, dw MASK_DRVPARAMS_WRITECACHE
[425]106 at MENUITEM.itemValue + ITEM_VALUE.bFieldPosition, db 0
[286]107iend
108
[57]109g_MenuitemMasterSlaveUserCHS:
110istruc MENUITEM
[108]111 at MENUITEM.fnActivate, dw Menuitem_ActivateMultichoiceSelectionForMenuitemInDSSI
[59]112 at MENUITEM.fnFormatValue, dw MenuitemPrint_WriteLookupValueStringToBufferInESDIfromShiftedItemInDSSI
[57]113 at MENUITEM.szName, dw g_szItemDrvUserCHS
114 at MENUITEM.szQuickInfo, dw g_szNfoDrvUserCHS
115 at MENUITEM.szHelp, dw g_szHelpDrvUserCHS
[614]116 at MENUITEM.bFlags, db FLG_MENUITEM_MODIFY_MENU | FLG_MENUITEM_FLAGVALUE
[108]117 at MENUITEM.bType, db TYPE_MENUITEM_MULTICHOICE
[57]118 at MENUITEM.itemValue + ITEM_VALUE.wRomvarsValueOffset, dw NULL
119 at MENUITEM.itemValue + ITEM_VALUE.szDialogTitle, dw g_szDlgDrvUserCHS
[108]120 at MENUITEM.itemValue + ITEM_VALUE.szMultichoice, dw g_szMultichoiceBooleanFlag
[57]121 at MENUITEM.itemValue + ITEM_VALUE.rgszValueToStringLookup, dw g_rgszValueToStringLookupForFlagBooleans
122 at MENUITEM.itemValue + ITEM_VALUE.wValueBitmask, dw FLG_DRVPARAMS_USERCHS
[526]123 at MENUITEM.itemValue + ITEM_VALUE.fnValueWriter, dw MasterSlaveMenu_WriteCHSFlag
[57]124iend
125
126g_MenuitemMasterSlaveCylinders:
127istruc MENUITEM
128 at MENUITEM.fnActivate, dw Menuitem_ActivateUnsignedInputForMenuitemInDSSI
129 at MENUITEM.fnFormatValue, dw MenuitemPrint_WriteUnsignedValueStringToBufferInESDIfromItemInDSSI
130 at MENUITEM.szName, dw g_szItemDrvCyls
131 at MENUITEM.szQuickInfo, dw g_szNfoDrvCyls
132 at MENUITEM.szHelp, dw g_szNfoDrvCyls
133 at MENUITEM.bFlags, db NULL
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_szDlgDrvCyls
137 at MENUITEM.itemValue + ITEM_VALUE.wMinValue, dw 1
[548]138 at MENUITEM.itemValue + ITEM_VALUE.wMaxValue, dw MAX_PCHS_CYLINDERS
139%define MASTERSLAVE_CYLINDERS_DEFAULT 1024 ; Max L-CHS Cylinders
[57]140iend
141
142g_MenuitemMasterSlaveHeads:
143istruc MENUITEM
144 at MENUITEM.fnActivate, dw Menuitem_ActivateUnsignedInputForMenuitemInDSSI
145 at MENUITEM.fnFormatValue, dw MenuitemPrint_WriteUnsignedValueStringToBufferInESDIfromItemInDSSI
146 at MENUITEM.szName, dw g_szItemDrvHeads
147 at MENUITEM.szQuickInfo, dw g_szNfoDrvHeads
148 at MENUITEM.szHelp, dw g_szNfoDrvHeads
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_szDlgDrvHeads
153 at MENUITEM.itemValue + ITEM_VALUE.wMinValue, dw 1
[548]154 at MENUITEM.itemValue + ITEM_VALUE.wMaxValue, dw MAX_PCHS_HEADS
155%define MASTERSLAVE_HEADS_DEFAULT MAX_PCHS_HEADS
[57]156iend
157
158g_MenuitemMasterSlaveSectors:
159istruc MENUITEM
160 at MENUITEM.fnActivate, dw Menuitem_ActivateUnsignedInputForMenuitemInDSSI
161 at MENUITEM.fnFormatValue, dw MenuitemPrint_WriteUnsignedValueStringToBufferInESDIfromItemInDSSI
162 at MENUITEM.szName, dw g_szItemDrvSect
163 at MENUITEM.szQuickInfo, dw g_szNfoDrvSect
164 at MENUITEM.szHelp, dw g_szNfoDrvSect
165 at MENUITEM.bFlags, db FLG_MENUITEM_BYTEVALUE
166 at MENUITEM.bType, db TYPE_MENUITEM_UNSIGNED
167 at MENUITEM.itemValue + ITEM_VALUE.wRomvarsValueOffset, dw NULL
168 at MENUITEM.itemValue + ITEM_VALUE.szDialogTitle, dw g_szDlgDrvSect
169 at MENUITEM.itemValue + ITEM_VALUE.wMinValue, dw 1
[548]170 at MENUITEM.itemValue + ITEM_VALUE.wMaxValue, dw MAX_PCHS_SECTORS_PER_TRACK
171%define MASTERSLAVE_SECTORS_DEFAULT MAX_PCHS_SECTORS_PER_TRACK
[57]172iend
173
[286]174g_MenuitemMasterSlaveUserLBA:
175istruc MENUITEM
176 at MENUITEM.fnActivate, dw Menuitem_ActivateMultichoiceSelectionForMenuitemInDSSI
177 at MENUITEM.fnFormatValue, dw MenuitemPrint_WriteLookupValueStringToBufferInESDIfromShiftedItemInDSSI
178 at MENUITEM.szName, dw g_szItemDrvUserLBA
179 at MENUITEM.szQuickInfo, dw g_szNfoDrvUserLBA
180 at MENUITEM.szHelp, dw g_szHelpDrvUserLBA
[614]181 at MENUITEM.bFlags, db FLG_MENUITEM_MODIFY_MENU | FLG_MENUITEM_FLAGVALUE
[286]182 at MENUITEM.bType, db TYPE_MENUITEM_MULTICHOICE
183 at MENUITEM.itemValue + ITEM_VALUE.wRomvarsValueOffset, dw NULL
184 at MENUITEM.itemValue + ITEM_VALUE.szDialogTitle, dw g_szDlgDrvUserLBA
185 at MENUITEM.itemValue + ITEM_VALUE.szMultichoice, dw g_szMultichoiceBooleanFlag
186 at MENUITEM.itemValue + ITEM_VALUE.rgszValueToStringLookup, dw g_rgszValueToStringLookupForFlagBooleans
187 at MENUITEM.itemValue + ITEM_VALUE.wValueBitmask, dw FLG_DRVPARAMS_USERLBA
[526]188 at MENUITEM.itemValue + ITEM_VALUE.fnValueWriter, dw MasterSlaveMenu_WriteLBAFlag
[286]189iend
[57]190
[286]191g_MenuitemMasterSlaveUserLbaValue:
192istruc MENUITEM
193 at MENUITEM.fnActivate, dw Menuitem_ActivateUnsignedInputForMenuitemInDSSI
194 at MENUITEM.fnFormatValue, dw MenuitemPrint_WriteUnsignedValueStringToBufferInESDIfromItemInDSSI
195 at MENUITEM.szName, dw g_szItemDrvLbaSectors
196 at MENUITEM.szQuickInfo, dw g_szNfoDrvLbaSectors
197 at MENUITEM.szHelp, dw g_szNfoDrvLbaSectors
198 at MENUITEM.bFlags, db NULL
199 at MENUITEM.bType, db TYPE_MENUITEM_UNSIGNED
200 at MENUITEM.itemValue + ITEM_VALUE.wRomvarsValueOffset, dw NULL
201 at MENUITEM.itemValue + ITEM_VALUE.szDialogTitle, dw g_szDlgDrvLbaSectors
[548]202 at MENUITEM.itemValue + ITEM_VALUE.wMinValue, dw 16 ; 8 GiB (but a little more than L-CHS limit)
[286]203 at MENUITEM.itemValue + ITEM_VALUE.wMaxValue, dw 10000000h / (1024 * 1024) ; Limit to 28-bit LBA
204 at MENUITEM.itemValue + ITEM_VALUE.fnValueReader, dw ValueReaderForUserLbaValue
205 at MENUITEM.itemValue + ITEM_VALUE.fnValueWriter, dw ValueWriterForUserLbaValue
[548]206%define MASTERSLAVE_USERLBA_DEFAULT 64 ; 32 GiB (max supported by Win95)
[286]207iend
208
209
210g_rgwChoiceToValueLookupForWriteCache:
211 dw DEFAULT_WRITE_CACHE
212 dw DISABLE_WRITE_CACHE
213 dw ENABLE_WRITE_CACHE
214g_rgszChoiceToStringLookupForWriteCache:
215 dw g_szValueBootDispModeDefault
216 dw g_szValueDrvWrCaDis
217 dw g_szValueDrvWrCaEn
218
[425]219g_rgwChoiceToValueLookupForXlateMode:
220 dw TRANSLATEMODE_NORMAL
221 dw TRANSLATEMODE_LARGE
222 dw TRANSLATEMODE_ASSISTED_LBA
223 dw TRANSLATEMODE_AUTO
224g_rgszChoiceToStringLookupForXlateMode:
225 dw g_szValueDrvXlateNormal
226 dw g_szValueDrvXlateLarge
227 dw g_szValueDrvXlateLBA
228 dw g_szValueDrvXlateAuto
229
230
[57]231; Section containing code
232SECTION .text
233
234;--------------------------------------------------------------------
235; MasterSlaveMenu_InitializeToDrvparamsOffsetInBX
236; Parameters:
237; SS:BP: Menu handle
238; Returns:
239; Nothing
240; Corrupts registers:
241; AX
242;--------------------------------------------------------------------
243ALIGN JUMP_ALIGN
244MasterSlaveMenu_InitializeToDrvparamsOffsetInBX:
[592]245 push ds
246
247 push cs
248 pop ds
249
250%ifndef CHECK_FOR_UNUSED_ENTRYPOINTS
251%if DRVPARAMS.wFlags = 0
252 mov ax, bx
253%else
[57]254 lea ax, [bx+DRVPARAMS.wFlags]
[592]255%endif
256%endif
[614]257 mov [g_MenuitemMasterSlaveDisableDetection+MENUITEM.itemValue+ITEM_VALUE.wRomvarsValueOffset], ax
[592]258 mov [g_MenuitemMasterSlaveBlockModeTransfers+MENUITEM.itemValue+ITEM_VALUE.wRomvarsValueOffset], ax
259 mov [g_MenuitemMasterSlaveChsTranslateMode+MENUITEM.itemValue+ITEM_VALUE.wRomvarsValueOffset], ax
260 mov [g_MenuitemMasterSlaveWriteCache+MENUITEM.itemValue+ITEM_VALUE.wRomvarsValueOffset], ax
261 mov [g_MenuitemMasterSlaveUserCHS+MENUITEM.itemValue+ITEM_VALUE.wRomvarsValueOffset], ax
262 mov [g_MenuitemMasterSlaveUserLBA+MENUITEM.itemValue+ITEM_VALUE.wRomvarsValueOffset], ax
[57]263
264 lea ax, [bx+DRVPARAMS.wCylinders]
[592]265 mov [g_MenuitemMasterSlaveCylinders+MENUITEM.itemValue+ITEM_VALUE.wRomvarsValueOffset], ax
[57]266
267 lea ax, [bx+DRVPARAMS.bHeads]
[592]268 mov [g_MenuitemMasterSlaveHeads+MENUITEM.itemValue+ITEM_VALUE.wRomvarsValueOffset], ax
[57]269
270 lea ax, [bx+DRVPARAMS.bSect]
[592]271 mov [g_MenuitemMasterSlaveSectors+MENUITEM.itemValue+ITEM_VALUE.wRomvarsValueOffset], ax
[286]272
273 lea ax, [bx+DRVPARAMS.dwMaximumLBA]
[592]274 mov [g_MenuitemMasterSlaveUserLbaValue+MENUITEM.itemValue+ITEM_VALUE.wRomvarsValueOffset], ax
275
276 pop ds
[57]277 ret
278
279
280;--------------------------------------------------------------------
281; MasterSlaveMenu_EnterMenuOrModifyItemVisibility
282; Parameters:
283; SS:BP: Menu handle
284; Returns:
285; Nothing
286; Corrupts registers:
287; All, except BP
288;--------------------------------------------------------------------
289ALIGN JUMP_ALIGN
290MasterSlaveMenu_EnterMenuOrModifyItemVisibility:
291 push cs
292 pop ds
[614]293 mov bx, [g_MenuitemMasterSlaveDisableDetection+MENUITEM.itemValue+ITEM_VALUE.wRomvarsValueOffset]
294 call Buffers_GetRomvarsValueToAXfromOffsetInBX
295 mov si, g_MenupageForMasterSlaveMenu
296 ePUSH_T bx, Menupage_ChangeToNewMenupageInDSSI
297 test al, FLG_DRVPARAMS_DO_NOT_DETECT
298 jnz SHORT .DisableAllItemsOnThisMenuExceptDisableDetection
299 call .EnableOrDisableItemsDependingOnControllerBeingSerialOrNot
[286]300 call .EnableOrDisableUserCHSandLBA
[57]301 call .EnableOrDisableCHandS
[614]302 jmp .EnableOrDisableUserLbaValue
[57]303
[286]304
[57]305;--------------------------------------------------------------------
[614]306; .EnableOrDisableItemsDependingOnControllerBeingSerialOrNot
307; Parameters:
308; SS:BP: Menu handle
309; Returns:
310; Nothing
311; Corrupts registers:
312; AX, BX
313;--------------------------------------------------------------------
314ALIGN JUMP_ALIGN
315.EnableOrDisableItemsDependingOnControllerBeingSerialOrNot:
316 mov bx, [g_MenuitemIdeControllerDevice+MENUITEM.itemValue+ITEM_VALUE.wRomvarsValueOffset]
317 call Buffers_GetRomvarsValueToAXfromOffsetInBX
318 mov bx, g_MenuitemMasterSlaveChsTranslateMode
319 call EnableMenuitemFromCSBX
320 cmp al, DEVICE_SERIAL_PORT
321 je SHORT .DisableAllItemsNotApplicableToSerialDrives
322 mov bx, g_MenuitemMasterSlaveBlockModeTransfers
323 call EnableMenuitemFromCSBX
324 mov bx, g_MenuitemMasterSlaveWriteCache
325 jmp EnableMenuitemFromCSBX
326
327
328;--------------------------------------------------------------------
329; .DisableAllItemsOnThisMenuExceptDisableDetection
330; .DisableAllItemsNotApplicableToSerialDrives
331; Parameters:
332; SS:BP: Menu handle
333; Returns:
334; Nothing
335; Corrupts registers:
336; AX, BX
337;--------------------------------------------------------------------
338ALIGN JUMP_ALIGN
339.DisableAllItemsOnThisMenuExceptDisableDetection:
340 mov bx, g_MenuitemMasterSlaveChsTranslateMode
341 call DisableMenuitemFromCSBX
342 mov bx, g_MenuitemMasterSlaveUserCHS
343 call DisableMenuitemFromCSBX
344 call .DisableCHandS
345 mov bx, g_MenuitemMasterSlaveUserLBA
346 call DisableMenuitemFromCSBX
347 mov bx, g_MenuitemMasterSlaveUserLbaValue
348 call DisableMenuitemFromCSBX
349.DisableAllItemsNotApplicableToSerialDrives:
350 mov bx, g_MenuitemMasterSlaveBlockModeTransfers
351 call DisableMenuitemFromCSBX
352 mov bx, g_MenuitemMasterSlaveWriteCache
353 jmp SHORT .DisableMenuitemFromCSBX
354
355
356;--------------------------------------------------------------------
[286]357; .EnableOrDisableUserCHSandLBA
358; Parameters:
359; SS:BP: Menu handle
360; Returns:
361; Nothing
362; Corrupts registers:
363; AX, BX
364;--------------------------------------------------------------------
365ALIGN JUMP_ALIGN
366.EnableOrDisableUserCHSandLBA:
367 mov bx, [g_MenuitemMasterSlaveUserLBA+MENUITEM.itemValue+ITEM_VALUE.wRomvarsValueOffset]
368 call Buffers_GetRomvarsValueToAXfromOffsetInBX
[592]369 test al, FLG_DRVPARAMS_USERLBA
[286]370 jnz SHORT .DisableCHSandEnableLBA
[592]371 test al, FLG_DRVPARAMS_USERCHS
[286]372 jnz SHORT .EnableCHSandDisableLBA
373
374 ; Enable both
375 mov bx, g_MenuitemMasterSlaveUserCHS
[567]376 call EnableMenuitemFromCSBX
[286]377 mov bx, g_MenuitemMasterSlaveUserLBA
[567]378 jmp SHORT .EnableMenuitemFromCSBX
[286]379
380ALIGN JUMP_ALIGN
381.EnableCHSandDisableLBA:
382 mov bx, g_MenuitemMasterSlaveUserCHS
[567]383 call EnableMenuitemFromCSBX
[286]384 mov bx, g_MenuitemMasterSlaveUserLBA
[567]385 jmp SHORT .DisableMenuitemFromCSBX
[286]386
387ALIGN JUMP_ALIGN
388.DisableCHSandEnableLBA:
389 mov bx, g_MenuitemMasterSlaveUserLBA
[567]390 call EnableMenuitemFromCSBX
[286]391 mov bx, g_MenuitemMasterSlaveUserCHS
[567]392 jmp SHORT .DisableMenuitemFromCSBX
[286]393
394
395;--------------------------------------------------------------------
[57]396; .EnableOrDisableCHandS
397; Parameters:
398; SS:BP: Menu handle
399; Returns:
400; Nothing
401; Corrupts registers:
402; AX, BX
403;--------------------------------------------------------------------
404ALIGN JUMP_ALIGN
405.EnableOrDisableCHandS:
[592]406 mov bx, [g_MenuitemMasterSlaveUserCHS+MENUITEM.itemValue+ITEM_VALUE.wRomvarsValueOffset]
[57]407 call Buffers_GetRomvarsValueToAXfromOffsetInBX
[592]408 test al, FLG_DRVPARAMS_USERCHS
[57]409 jz SHORT .DisableCHandS
[592]410 test al, FLG_DRVPARAMS_USERLBA
[286]411 jnz SHORT .DisableCHandS
[57]412
[614]413 mov ax, EnableMenuitemFromCSBX
414 jmp SHORT .EnableCHandS
[57]415
416.DisableCHandS:
[614]417 mov ax, DisableMenuitemFromCSBX
418.EnableCHandS:
[57]419 mov bx, g_MenuitemMasterSlaveCylinders
[614]420 call ax
[57]421 mov bx, g_MenuitemMasterSlaveHeads
[614]422 call ax
[57]423 mov bx, g_MenuitemMasterSlaveSectors
[614]424 jmp ax
[57]425
[286]426
[57]427;--------------------------------------------------------------------
[286]428; .EnableOrDisableUserLbaValue
429; Parameters:
430; SS:BP: Menu handle
431; Returns:
432; Nothing
433; Corrupts registers:
434; AX, BX
435;--------------------------------------------------------------------
436ALIGN JUMP_ALIGN
437.EnableOrDisableUserLbaValue:
[592]438 mov bx, [g_MenuitemMasterSlaveUserLBA+MENUITEM.itemValue+ITEM_VALUE.wRomvarsValueOffset]
[286]439 call Buffers_GetRomvarsValueToAXfromOffsetInBX
440 mov bx, g_MenuitemMasterSlaveUserLbaValue
[592]441 test al, FLG_DRVPARAMS_USERCHS
[286]442 jnz SHORT .DisableMenuitemFromCSBX
[592]443 test al, FLG_DRVPARAMS_USERLBA
[286]444 jz SHORT .DisableMenuitemFromCSBX
[293]445 ; Fall to .EnableMenuitemFromCSBX
[286]446
447
448;--------------------------------------------------------------------
[57]449; .EnableMenuitemFromCSBX
450; .DisableMenuitemFromCSBX
451; Parameters:
452; CS:BX: Ptr to MENUITEM
453; Returns:
454; Nothing
455; Corrupts registers:
456; Nothing
457;--------------------------------------------------------------------
458ALIGN JUMP_ALIGN
459.EnableMenuitemFromCSBX:
[567]460 jmp EnableMenuitemFromCSBX
[57]461
462ALIGN JUMP_ALIGN
463.DisableMenuitemFromCSBX:
[567]464 jmp DisableMenuitemFromCSBX
[286]465
466
467;--------------------------------------------------------------------
468; MENUITEM value reader functions
469; Parameters:
470; AX: Value from MENUITEM.itemValue+ITEM_VALUE.wRomvarsValueOffset
471; DS:SI: Ptr to MENUITEM
472; ES:DI: Ptr to value variable
473; Returns:
474; AX: Value with possible modifications
475; Corrupts registers:
476; Nothing
477;--------------------------------------------------------------------
478ALIGN JUMP_ALIGN
479ValueReaderForUserLbaValue:
[345]480 push dx
481
[583]482 mov ax, 1
483 cwd ; DX:AX = 1
484 add ax, [es:di]
485 adc dx, [es:di+2] ; User defined LBA28 limit added
[345]486
487 xchg ax, dx ; SHR 16
[567]488 eSHR_IM ax, 4 ; SHR 4 => AX = DX:AX / (1024*1024)
[345]489
490 pop dx
[286]491 ret
492
493
494;--------------------------------------------------------------------
495; MENUITEM value writer functions
496; Parameters:
497; AX: Value to be written to MENUITEM.itemValue+ITEM_VALUE.wRomvarsValueOffset
498; DS:SI: Ptr to MENUITEM
499; ES:DI: Ptr to value variable
500; Returns:
501; AX: Value to be stored
502; Corrupts registers:
503; Nothing
504;--------------------------------------------------------------------
505ALIGN JUMP_ALIGN
506ValueWriterForUserLbaValue:
[345]507 push dx
508
509 xor dx, dx
[567]510 eSHL_IM ax, 4
[345]511 xchg dx, ax ; DX:AX now holds AX * 1024 * 1024
512
513 sub ax, BYTE 1 ; Decrement DX:AX by one
514 sbb dx, BYTE 0 ; (necessary since maximum LBA28 sector count is 0FFF FFFFh)
515
516 mov [es:di+2], dx ; Store DX by ourselves
517 pop dx
518 ret ; AX will be stored by our menu system
[369]519
520;
521; No change to CHS flag, but we use this opportunity to change defaults stored in the CHS values if we are
522; changing in/out of user CHS settings (since we use these bytes in different ways with the LBA setting).
523;
[526]524ALIGN JUMP_ALIGN
[369]525MasterSlaveMenu_WriteCHSFlag:
[592]526 test BYTE [es:di], FLG_DRVPARAMS_USERCHS
527 jnz SHORT .AlreadySet
[369]528
[567]529 push ax
530 push di
531 push si
[369]532
[567]533 mov ax, MASTERSLAVE_CYLINDERS_DEFAULT
534 mov si, g_MenuitemMasterSlaveCylinders
535 call Menuitem_StoreValueFromAXtoMenuitemInDSSI
[526]536
[567]537 mov ax, MASTERSLAVE_HEADS_DEFAULT
538 mov si, g_MenuitemMasterSlaveHeads
539 call Menuitem_StoreValueFromAXtoMenuitemInDSSI
[369]540
[567]541 mov ax, MASTERSLAVE_SECTORS_DEFAULT
542 mov si, g_MenuitemMasterSlaveSectors
543 call Menuitem_StoreValueFromAXtoMenuitemInDSSI
[526]544
[567]545 pop si
546 pop di
547 pop ax
[369]548
[592]549.AlreadySet:
[567]550 ret
[369]551
552;
553; No change to LBA flag, but we use this opportunity to change defaults stored in the LBA value if we are
554; changing in/out of user LBA settings (since we use these bytes in different ways with the CHS setting).
555;
[526]556ALIGN JUMP_ALIGN
[369]557MasterSlaveMenu_WriteLBAFlag:
[592]558 test BYTE [es:di], FLG_DRVPARAMS_USERLBA
559 jnz SHORT .AlreadySet
[369]560
[567]561 push ax
562 push di
563 push si
[369]564
[567]565 mov ax, MASTERSLAVE_USERLBA_DEFAULT
566 mov si, g_MenuitemMasterSlaveUserLbaValue
567 call Menuitem_StoreValueFromAXtoMenuitemInDSSI
[369]568
[567]569 pop si
570 pop di
571 pop ax
[526]572
[592]573.AlreadySet:
[567]574 ret
[592]575
Note: See TracBrowser for help on using the repository browser.