Changeset 592 in xtideuniversalbios for trunk/XTIDE_Universal_BIOS_Configurator_v2/Src/Menuitem.asm
- Timestamp:
- Jun 25, 2018, 10:29:27 PM (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/XTIDE_Universal_BIOS_Configurator_v2/Src/Menuitem.asm
r567 r592 53 53 call Memory_ReserveCXbytesFromStackToDSSI 54 54 call InitializeDialogInputInDSSIfromMenuitemInESDI 55 mov ax, [es:di+MENUITEM.itemValue +ITEM_VALUE.szMultichoice]55 mov ax, [es:di+MENUITEM.itemValue+ITEM_VALUE.szMultichoice] 56 56 mov [si+DIALOG_INPUT.fszItems], ax 57 57 push di … … 59 59 pop di 60 60 61 cmp ax, BYTE NO_ITEM_SELECTED 62 je SHORT .NothingToChange 61 inc ax ; NO_ITEM_SELECTED ? 62 jz SHORT .NothingToChange 63 dec ax 63 64 call Registers_CopyESDItoDSSI 64 65 call Menuitem_StoreValueFromAXtoMenuitemInDSSI … … 70 71 ;-------------------------------------------------------------------- 71 72 ; Menuitem_ActivateHexInputForMenuitemInDSSI 72 ; Parameters: 73 ; DS:SI: Ptr to MENUITEM 74 ; Returns: 75 ; Nothing 73 ; Menuitem_ActivateUnsignedInputForMenuitemInDSSI 74 ; Parameters: 75 ; DS:SI: Ptr to MENUITEM 76 ; Returns: 77 ; CF: Cleared if value inputted 78 ; Set if user cancellation 76 79 ; Corrupts registers: 77 80 ; AX, BX, CX, SI, DI, ES 78 81 ;-------------------------------------------------------------------- 79 ALIGN JUMP_ALIGN80 82 Menuitem_ActivateHexInputForMenuitemInDSSI: 83 mov bl, 16 84 SKIP2B ax 85 Menuitem_ActivateUnsignedInputForMenuitemInDSSI: 86 mov bl, 10 87 81 88 call Registers_CopyDSSItoESDI 82 83 89 mov cx, WORD_DIALOG_IO_size 84 90 call Memory_ReserveCXbytesFromStackToDSSI 85 91 call InitializeDialogInputInDSSIfromMenuitemInESDI 86 mov BYTE [si+WORD_DIALOG_IO.bNumericBase], 16 87 jmp SHORT ContinueWordInput 88 89 ;-------------------------------------------------------------------- 90 ; Menuitem_ActivateUnsignedInputForMenuitemInDSSI 91 ; Parameters: 92 ; DS:SI: Ptr to MENUITEM 93 ; Returns: 94 ; CF: Cleared if value inputted 95 ; Set if user cancellation 96 ; Corrupts registers: 97 ; AX, BX, CX, SI, DI, ES 98 ;-------------------------------------------------------------------- 99 ALIGN JUMP_ALIGN 100 Menuitem_ActivateUnsignedInputForMenuitemInDSSI: 101 call Registers_CopyDSSItoESDI 102 103 mov cx, WORD_DIALOG_IO_size 104 call Memory_ReserveCXbytesFromStackToDSSI 105 call InitializeDialogInputInDSSIfromMenuitemInESDI 106 mov BYTE [si+WORD_DIALOG_IO.bNumericBase], 10 107 ContinueWordInput: 108 mov ax, [es:di+MENUITEM.itemValue + ITEM_VALUE.wMinValue] 92 mov [si+WORD_DIALOG_IO.bNumericBase], bl 93 mov ax, [es:di+MENUITEM.itemValue+ITEM_VALUE.wMinValue] 109 94 mov [si+WORD_DIALOG_IO.wMin], ax 110 mov ax, [es:di+MENUITEM.itemValue +ITEM_VALUE.wMaxValue]95 mov ax, [es:di+MENUITEM.itemValue+ITEM_VALUE.wMaxValue] 111 96 mov [si+WORD_DIALOG_IO.wMax], ax 112 97 push di … … 138 123 ALIGN JUMP_ALIGN 139 124 InitializeDialogInputInDSSIfromMenuitemInESDI: 140 mov ax, [es:di+MENUITEM.itemValue +ITEM_VALUE.szDialogTitle]125 mov ax, [es:di+MENUITEM.itemValue+ITEM_VALUE.szDialogTitle] 141 126 mov [si+DIALOG_INPUT.fszTitle], ax 142 127 mov [si+DIALOG_INPUT.fszTitle+2], cs … … 162 147 ALIGN JUMP_ALIGN 163 148 Menuitem_StoreValueFromAXtoMenuitemInDSSI: 149 %if 0 150 ; 3 bytes more but this will always invoke the Writer, even if it's an invalid item type (which might be useful). 164 151 eMOVZX bx, [si+MENUITEM.bType] 165 152 cmp bl, TYPE_MENUITEM_HEX 153 %else 154 ; This will only invoke the Writer for valid item types. 155 mov bx, -TYPE_MENUITEM_MULTICHOICE & 0FFh 156 add bl, [si+MENUITEM.bType] 157 jnc SHORT .InvalidItemType 158 cmp bl, TYPE_MENUITEM_HEX - TYPE_MENUITEM_MULTICHOICE 159 %endif 166 160 ja SHORT .InvalidItemType 167 161 … … 169 163 add di, [si+MENUITEM.itemValue+ITEM_VALUE.wRomvarsValueOffset] 170 164 171 push bx 172 mov bx,[si+MENUITEM.itemValue+ITEM_VALUE.fnValueWriter] 173 test bx,bx 174 jz SHORT .NoWriter 175 call bx 176 .NoWriter: 165 push WORD [cs:bx+.rgfnJumpToStoreValueBasedOnItemType] 166 mov bx, [si+MENUITEM.itemValue+ITEM_VALUE.fnValueWriter] 167 test bx, bx 168 jnz SHORT .InvokeWriter 169 .InvalidItemType: 177 170 pop bx 178 179 jmp [cs:bx+.rgfnJumpToStoreValueBasedOnItemType] 180 .InvalidItemType: 181 ret 171 .InvokeWriter: 172 jmp bx ; The Writer can freely corrupt BX 182 173 183 174 ALIGN WORD_ALIGN 184 175 .rgfnJumpToStoreValueBasedOnItemType: 185 dw .InvalidItemType ; TYPE_MENUITEM_PAGEBACK186 dw .InvalidItemType ; TYPE_MENUITEM_PAGENEXT187 dw .InvalidItemType ; TYPE_MENUITEM_ACTION176 ; dw .InvalidItemType ; TYPE_MENUITEM_PAGEBACK 177 ; dw .InvalidItemType ; TYPE_MENUITEM_PAGENEXT 178 ; dw .InvalidItemType ; TYPE_MENUITEM_ACTION 188 179 dw .StoreMultichoiceValueFromAXtoESDIwithItemInDSSI ; TYPE_MENUITEM_MULTICHOICE 189 180 dw .StoreByteOrWordValueFromAXtoESDIwithItemInDSSI ; TYPE_MENUITEM_UNSIGNED … … 237 228 jz .StoreByteOrWordValueFromAXtoESDIwithItemInDSSI 238 229 239 shlax, 1 ; Shift for WORD lookup230 eSHL_IM ax, 1 ; Shift for WORD lookup 240 231 add bx, ax 241 232 mov ax, [bx] ; Lookup complete … … 317 308 ; AX: Menuitem value 318 309 ; Corrupts registers: 319 ; BX310 ; Nothing 320 311 ;-------------------------------------------------------------------- 321 312 ALIGN JUMP_ALIGN … … 330 321 test BYTE [si+MENUITEM.bFlags], FLG_MENUITEM_BYTEVALUE 331 322 jz SHORT .NoConvertWordToByteValue 332 xor ah, ah 333 323 xor ah, ah ; conversion needs to happen before call to the reader, 324 ; in case the reader unpacks the byte to a word 334 325 335 326 .NoConvertWordToByteValue: … … 338 329 jz SHORT .NoReader 339 330 340 call bx 331 call bx ; The Reader can freely corrupt BX, DI and ES 341 332 342 333 .NoReader:
Note:
See TracChangeset
for help on using the changeset viewer.