source: xtideuniversalbios/trunk/Configurator/Src/Menupages/IdeControllerMenu.asm @ 2

Last change on this file since 2 was 2, checked in by aitotat, 14 years ago
File size: 8.6 KB
Line 
1; File name     :   IdeControllerMenu.asm
2; Project name  :   XTIDE Univeral BIOS Configurator
3; Created date  :   23.4.2010
4; Last update   :   27.4.2010
5; Author        :   Tomi Tilli
6; Description   :   Menu for configuring IDEVARS.
7
8; Section containing initialized data
9SECTION .data
10
11; -Back to previous menu
12; +Master Drive
13; +Slave Drive
14; Command Block (base port) address (01F0h)
15; Control Block address (03F0h)
16; Bus type (16-bit)
17; Enable Interrupt (Y)
18; IRQ (14)
19
20ALIGN WORD_ALIGN
21g_MenuPageIdeVars:
22istruc MENUPAGE
23    at  MENUPAGE.bItemCnt,          db  8
24iend
25istruc MENUPAGEITEM ; Back to previous menu
26    at  MENUPAGEITEM.fnActivate,    dw  MainPageItem_ActivateLeaveSubmenu
27    at  MENUPAGEITEM.fnNameFormat,  dw  MenuPageItemFormat_NameForAnyType
28    at  MENUPAGEITEM.szName,        dw  g_szPreviousMenu
29    at  MENUPAGEITEM.szInfo,        dw  g_szNfoIdeBack
30    at  MENUPAGEITEM.szHelp,        dw  g_szNfoIdeBack
31    at  MENUPAGEITEM.bFlags,        db  FLG_MENUPAGEITEM_VISIBLE
32    at  MENUPAGEITEM.bType,         db  TYPE_MENUPAGEITEM_BACK
33iend
34g_MenuPageItemIdeMaster:
35istruc MENUPAGEITEM ; Master Drive
36    at  MENUPAGEITEM.fnActivate,    dw  IdeControllerMenu_ActivateMasterOrSlaveMenu
37    at  MENUPAGEITEM.fnNameFormat,  dw  MenuPageItemFormat_NameForAnyType
38    at  MENUPAGEITEM.pSubMenuPage,  dw  g_MenuPageDrvParams
39    at  MENUPAGEITEM.szName,        dw  g_szItemIdeMaster
40    at  MENUPAGEITEM.szInfo,        dw  g_szNfoIdeMaster
41    at  MENUPAGEITEM.szHelp,        dw  g_szNfoIdeMaster
42    at  MENUPAGEITEM.bFlags,        db  FLG_MENUPAGEITEM_VISIBLE
43    at  MENUPAGEITEM.bType,         db  TYPE_MENUPAGEITEM_NEXT
44iend
45g_MenuPageItemIdeSlave:
46istruc MENUPAGEITEM ; Slave Drive
47    at  MENUPAGEITEM.fnActivate,    dw  IdeControllerMenu_ActivateMasterOrSlaveMenu
48    at  MENUPAGEITEM.fnNameFormat,  dw  MenuPageItemFormat_NameForAnyType
49    at  MENUPAGEITEM.pSubMenuPage,  dw  g_MenuPageDrvParams
50    at  MENUPAGEITEM.szName,        dw  g_szItemIdeSlave
51    at  MENUPAGEITEM.szInfo,        dw  g_szNfoIdeSlave
52    at  MENUPAGEITEM.szHelp,        dw  g_szNfoIdeSlave
53    at  MENUPAGEITEM.bFlags,        db  FLG_MENUPAGEITEM_VISIBLE
54    at  MENUPAGEITEM.bType,         db  TYPE_MENUPAGEITEM_NEXT
55iend
56g_MenuPageItemIdeBusType:
57istruc MENUPAGEITEM ; Bus type
58    at  MENUPAGEITEM.fnActivate,    dw  MainPageItem_ActivateSubmenuForGettingLookupValue
59    at  MENUPAGEITEM.fnNameFormat,  dw  MenuPageItemFormat_LookupString
60    at  MENUPAGEITEM.pSubMenuPage,  dw  g_MenuPageBusType
61    at  MENUPAGEITEM.rgszLookup,    dw  g_rgszBusTypeValueToString
62    at  MENUPAGEITEM.szName,        dw  g_szItemIdeBusType
63    at  MENUPAGEITEM.szInfo,        dw  g_szNfoIdeBusType
64    at  MENUPAGEITEM.szHelp,        dw  g_szNfoIdeBusType
65    at  MENUPAGEITEM.bFlags,        db  FLG_MENUPAGEITEM_VISIBLE
66    at  MENUPAGEITEM.bType,         db  TYPE_MENUPAGEITEM_NEXT
67iend
68g_MenuPageItemIdeCmdPort:
69istruc MENUPAGEITEM ; Command Block (base port) address
70    at  MENUPAGEITEM.fnActivate,    dw  MenuPageItem_GetHexWordFromUser
71    at  MENUPAGEITEM.fnNameFormat,  dw  MenuPageItemFormat_NameForAnyType
72    at  MENUPAGEITEM.szName,        dw  g_szItemIdeCmdPort
73    at  MENUPAGEITEM.szInfo,        dw  g_szNfoIdeCmdPort
74    at  MENUPAGEITEM.szHelp,        dw  g_szHelpIdeCmdPort
75    at  MENUPAGEITEM.szDialog,      dw  g_szDlgIdeCmdPort
76    at  MENUPAGEITEM.bFlags,        db  FLG_MENUPAGEITEM_VISIBLE
77    at  MENUPAGEITEM.bType,         db  TYPE_MENUPAGEITEM_HEX_WORD
78iend
79g_MenuPageItemIdeCtrlPort:
80istruc MENUPAGEITEM ; Control Block address (03F0h)
81    at  MENUPAGEITEM.fnActivate,    dw  MenuPageItem_GetHexWordFromUser
82    at  MENUPAGEITEM.fnNameFormat,  dw  MenuPageItemFormat_NameForAnyType
83    at  MENUPAGEITEM.szName,        dw  g_szItemIdeCtrlPort
84    at  MENUPAGEITEM.szInfo,        dw  g_szNfoIdeCtrlPort
85    at  MENUPAGEITEM.szHelp,        dw  g_szHelpIdeCtrlPort
86    at  MENUPAGEITEM.szDialog,      dw  g_szDlgIdeCtrlPort
87    at  MENUPAGEITEM.bFlags,        db  FLG_MENUPAGEITEM_VISIBLE
88    at  MENUPAGEITEM.bType,         db  TYPE_MENUPAGEITEM_HEX_WORD
89iend
90g_MenuPageItemIdeEnIRQ:
91istruc MENUPAGEITEM ; Enable interrupt
92    at  MENUPAGEITEM.fnActivate,    dw  IdeControllerMenu_ActivateEnableInterrupt
93    at  MENUPAGEITEM.fnNameFormat,  dw  MenuPageItemFormat_NameForAnyType
94    at  MENUPAGEITEM.wValueMask,    dw  000Fh
95    at  MENUPAGEITEM.szName,        dw  g_szItemIdeEnIRQ
96    at  MENUPAGEITEM.szInfo,        dw  g_szNfoIdeEnIRQ
97    at  MENUPAGEITEM.szHelp,        dw  g_szHelpIdeEnIRQ
98    at  MENUPAGEITEM.szDialog,      dw  g_szDlgIdeEnIRQ
99    at  MENUPAGEITEM.bFlags,        db  FLG_MENUPAGEITEM_VISIBLE
100    at  MENUPAGEITEM.bType,         db  TYPE_MENUPAGEITEM_FLAG
101iend
102g_MenuPageItemIdeIRQ:
103istruc MENUPAGEITEM ; IRQ
104    at  MENUPAGEITEM.fnActivate,    dw  MenuPageItem_GetByteFromUser
105    at  MENUPAGEITEM.fnNameFormat,  dw  MenuPageItemFormat_NameForAnyType
106    at  MENUPAGEITEM.wValueMin,     dw  2
107    at  MENUPAGEITEM.wValueMax,     dw  15
108    at  MENUPAGEITEM.szName,        dw  g_szItemIdeIRQ
109    at  MENUPAGEITEM.szInfo,        dw  g_szNfoIdeIRQ
110    at  MENUPAGEITEM.szHelp,        dw  g_szHelpIdeIRQ
111    at  MENUPAGEITEM.szDialog,      dw  g_szDlgIdeIRQ
112    at  MENUPAGEITEM.bFlags,        db  FLG_MENUPAGEITEM_VISIBLE
113    at  MENUPAGEITEM.bType,         db  TYPE_MENUPAGEITEM_UNSIGNED_BYTE
114iend
115
116
117; Section containing code
118SECTION .text
119
120;--------------------------------------------------------------------
121; Stores IDEVARS specific pointers to IDE Controller Menu 
122; MENUPAGEITEM structs.
123;
124; IdeControllerMenu_SetIdevarsOffset
125;   Parameters:
126;       AX:     Offset to IDEVARS
127;       DS:     CS
128;   Returns:
129;       Nothing
130;   Corrupts registers:
131;       BX, CX
132;--------------------------------------------------------------------
133ALIGN JUMP_ALIGN
134IdeControllerMenu_SetIdevarsOffset:
135    eMOVZX  cx, BYTE [g_MenuPageIdeVars+MENUPAGE.bItemCnt]
136    dec     cx
137    mov     bx, g_MenuPageItemIdeMaster+MENUPAGEITEM.pValue
138ALIGN JUMP_ALIGN
139.StoreIdevarsLoop:
140    mov     [bx], ax
141    add     bx, MENUPAGEITEM_size
142    loop    .StoreIdevarsLoop
143
144    ; Add offsets to values
145    add     WORD [g_MenuPageItemIdeMaster+MENUPAGEITEM.pValue], BYTE IDEVARS.drvParamsMaster
146    add     WORD [g_MenuPageItemIdeSlave+MENUPAGEITEM.pValue], BYTE IDEVARS.drvParamsSlave
147    add     WORD [g_MenuPageItemIdeBusType+MENUPAGEITEM.pValue], BYTE IDEVARS.bBusType
148    add     WORD [g_MenuPageItemIdeCmdPort+MENUPAGEITEM.pValue], BYTE IDEVARS.wPort
149    add     WORD [g_MenuPageItemIdeCtrlPort+MENUPAGEITEM.pValue], BYTE IDEVARS.wPortCtrl
150    add     WORD [g_MenuPageItemIdeEnIRQ+MENUPAGEITEM.pValue], BYTE IDEVARS.bIRQ
151    add     WORD [g_MenuPageItemIdeIRQ+MENUPAGEITEM.pValue], BYTE IDEVARS.bIRQ
152    ret
153
154
155;--------------------------------------------------------------------
156; IdeControllerMenu_ActivateMasterOrSlaveMenu
157;   Parameters:
158;       DS:SI   Ptr to MENUPAGE
159;       DS:DI   Ptr to MENUPAGEITEM
160;       SS:BP:  Ptr to MENUVARS
161;   Returns:
162;       CF:     Set if menuitem changed
163;               Cleared if no changes
164;   Corrupts registers:
165;       AX, BX, CX, DX
166;--------------------------------------------------------------------
167ALIGN JUMP_ALIGN
168IdeControllerMenu_ActivateMasterOrSlaveMenu:
169    mov     ax, [di+MENUPAGEITEM.pValue]    ; AX=Offset to DRVPARAMS
170    call    DrvParamsMenu_SetDrvParamsOffset
171    call    DrvParamsMenu_SetMenuitemVisibility
172    jmp     MainPageItem_ActivateSubmenu
173
174
175;--------------------------------------------------------------------
176; IdeControllerMenu_ActivateEnableInterrupt
177;   Parameters:
178;       DS:SI   Ptr to MENUPAGE
179;       DS:DI   Ptr to MENUPAGEITEM
180;       SS:BP:  Ptr to MENUVARS
181;   Returns:
182;       CF:     Set if menuitem changed
183;               Cleared if no changes
184;   Corrupts registers:
185;       AX, BX, CX, DX
186;--------------------------------------------------------------------
187ALIGN JUMP_ALIGN
188IdeControllerMenu_ActivateEnableInterrupt:
189    call    MenuPageItem_GetBoolFromUser
190    jc      SHORT IdeControllerMenu_SetMenuitemVisibilityAndDrawChanges
191    ret
192
193
194;--------------------------------------------------------------------
195; IdeControllerMenu_SetMenuitemVisibilityAndDrawChanges
196;   Parameters:
197;       DS:SI:  Ptr to MENUPAGE
198;       SS:BP:  Ptr to MENUVARS
199;   Returns:
200;       CF:     Cleared since no need to draw changes
201;   Corrupts registers:
202;       AX, BX, CX, DX
203;--------------------------------------------------------------------
204ALIGN JUMP_ALIGN
205IdeControllerMenu_SetMenuitemVisibilityAndDrawChanges:
206    call    IdeControllerMenu_SetMenuitemVisibility
207    call    MenuPage_InvalidateItemCount
208    clc     ; No need to redraw Full Mode menuitem
209    ret
210
211;--------------------------------------------------------------------
212; Enables or disables menuitems based on current configuration.
213;
214; IdeControllerMenu_SetMenuitemVisibility
215;   Parameters:
216;       DS:     CS
217;   Returns:
218;       Nothing
219;   Corrupts registers:
220;       BX
221;--------------------------------------------------------------------
222ALIGN JUMP_ALIGN
223IdeControllerMenu_SetMenuitemVisibility:
224    jmp     SHORT IdeControllerMenu_EnableOrDisableIrqSelect
225
226ALIGN JUMP_ALIGN
227IdeControllerMenu_EnableOrDisableIrqSelect:
228    mov     bx, [g_MenuPageItemIdeIRQ+MENUPAGEITEM.pValue]
229    cmp     BYTE [bx], 0                ; Interrupts disabled?
230    je      SHORT .DisableIrqMenuitem
231    or      BYTE [g_MenuPageItemIdeIRQ+MENUPAGEITEM.bFlags], FLG_MENUPAGEITEM_VISIBLE
232    ret
233ALIGN JUMP_ALIGN
234.DisableIrqMenuitem:
235    and     BYTE [g_MenuPageItemIdeIRQ+MENUPAGEITEM.bFlags], ~FLG_MENUPAGEITEM_VISIBLE
236    ret
Note: See TracBrowser for help on using the repository browser.