source: xtideuniversalbios/trunk/XTIDE_Universal_BIOS/Src/Boot/BootMenuEvent.asm @ 92

Last change on this file since 92 was 92, checked in by aitotat, 13 years ago

Changes to XTIDE Universal BIOS:

  • Removed ROM Boot from boot menu and created a hotkey for it.
File size: 5.0 KB
RevLine 
[88]1; Project name  :   XTIDE Universal BIOS
[3]2; Description   :   Boot Menu event handler for menu library callbacks.
3
4; Section containing code
5SECTION .text
6
[88]7struc ITEM_TYPE_REFRESH
8    .HardDisk           resb    2
9    .FloppyDrive        resb    2
10    .SpecialFunction    resb    2
11endstruc
12
13
[3]14;--------------------------------------------------------------------
15; BootMenuEvent_Handler
[88]16;   Common parameters for all events:
17;       BX:         Menu event (anything from MENUEVENT struct)
18;       SS:BP:      Menu library handle
19;   Common return values for all events:
20;       CF:         Set if event processed
21;                   Cleared if event not processed
[3]22;   Corrupts registers:
[88]23;       All
[3]24;--------------------------------------------------------------------
25ALIGN JUMP_ALIGN
26BootMenuEvent_Handler:
[88]27    cmp     bx, MENUEVENT.RefreshItemFromCX ; Above last supported item?
28    ja      SHORT .EventNotHandled
29    jmp     [bx+.rgfnEventSpecificHandlers]
30.EventNotHandled:
31.IdleProcessing:
32    clc
33    ret
[3]34
35ALIGN WORD_ALIGN
[88]36.rgfnEventSpecificHandlers:
37    dw      .InitializeMenuinitFromDSSI
38    dw      .EventCompleted
39    dw      .IdleProcessing
40    dw      .ItemHighlightedFromCX
41    dw      .ItemSelectedFromCX
42    dw      .KeyStrokeInAX
43    dw      BootMenuPrint_TitleStrings
44    dw      .RefreshInformation
45    dw      .RefreshItemFromCX
[3]46
47
[88]48; Parameters:
49;   DS:SI:      Ptr to MENUINIT struct to initialize
50; Returns:
51;   DS:SI:      Ptr to initialized MENUINIT struct
[3]52ALIGN JUMP_ALIGN
[88]53.InitializeMenuinitFromDSSI:
54    push    ds
55    call    RamVars_GetSegmentToDS
56    call    .GetDefaultMenuitemToDX
57    call    BootMenu_GetMenuitemCountToCX
58    pop     ds
59    mov     [si+MENUINIT.wItems], cx
60    mov     [si+MENUINIT.wHighlightedItem], dx
61    mov     WORD [si+MENUINIT.wTitleAndInfoLines], BOOT_MENU_TITLE_AND_INFO_LINES
62    mov     BYTE [si+MENUINIT.bWidth], BOOT_MENU_WIDTH
63    call    BootMenu_GetHeightToAHwithItemCountInCL
[92]64    sub     ah, MENU_SCREEN_BOTTOM_LINES*2
[88]65    mov     [si+MENUINIT.bHeight], ah
66    stc
[3]67    ret
68
[88]69ALIGN JUMP_ALIGN
70.GetDefaultMenuitemToDX:
71    mov     dl, [cs:ROMVARS.bBootDrv]   ; Default boot drive
72    call    BootMenu_IsDriveInSystem
73    jnc     SHORT .DoNotSetDefaultMenuitem
74    call    DriveXlate_SetDriveToSwap
75    call    BootMenu_ConvertDriveToMenuitem
76    mov     dx, cx
77    ret
78ALIGN JUMP_ALIGN
79.DoNotSetDefaultMenuitem:
80    xor     dx, dx                      ; Whatever appears first on boot menu
81    ret
[3]82
[88]83
84; Parameters:
85;   CX:         Index of new highlighted item
86;   DX:         Index of previously highlighted item or NO_ITEM_HIGHLIGHTED
[3]87ALIGN JUMP_ALIGN
[88]88.ItemHighlightedFromCX:
89    push    cx
90    push    dx
[3]91    call    RamVars_GetSegmentToDS
92    call    DriveXlate_Reset
[92]93    call    BootMenu_ConvertMenuitemFromCXtoDriveInDX
[3]94    call    DriveXlate_SetDriveToSwap
[88]95    pop     ax      ; Update previous item
96    CALL_MENU_LIBRARY RefreshItemFromAX
97    pop     ax      ; Update new item
98    CALL_MENU_LIBRARY RefreshItemFromAX
99    CALL_MENU_LIBRARY RefreshInformation
100    stc
[3]101    ret
102
103
[88]104; Parameters:
105;   AL:         ASCII character for the key
106;   AH:         Keyboard library scan code for the key
[3]107ALIGN JUMP_ALIGN
[88]108.KeyStrokeInAX:
[92]109    cmp     ah, ROM_BOOT_HOTKEY_SCANCODE
110    jne     SHORT .CheckDriveHotkeys
111    int     INTV_BOOT_FAILURE       ; ROM Boot, never returns
112ALIGN JUMP_ALIGN
113.CheckDriveHotkeys:
114    call    BootMenu_ConvertAsciiHotkeyFromALtoMenuitemInCX
[88]115    cmp     cx, [bp+MENUINIT.wItems]
[92]116    jae     SHORT .EventCompleted   ; Invalid key
[88]117    xchg    ax, cx
118    CALL_MENU_LIBRARY HighlightItemFromAX
119    ; Fall to .ItemSelectedFromCX
[3]120
121
[88]122; Parameters:
123;   CX:         Index of selected item
[3]124ALIGN JUMP_ALIGN
[88]125.ItemSelectedFromCX:
126    CALL_MENU_LIBRARY Close
127.EventCompleted:
128    stc
[3]129    ret
130
131
[88]132; Parameters:
133;   CX:         Index of item to refresh
134;   Cursor has been positioned to the beginning of item line
[3]135ALIGN JUMP_ALIGN
[88]136.RefreshItemFromCX:
137    mov     bx, .rgwItemTypeRefresh
138    jmp     SHORT .RefreshItemOrInformationWithJumpTableInCSBX
[3]139
[88]140
141; Parameters:
142;   CX:         Index of highlighted item
143;   Cursor has been positioned to the beginning of first line
[3]144ALIGN JUMP_ALIGN
[88]145.RefreshInformation:
146    mov     bx, .rgwInformationItemTypeRefresh
147    ; Fall to .RefreshItemOrInformationWithJumpTableInCSBX
[3]148
149;--------------------------------------------------------------------
[88]150; RefreshItemOrInformationWithJumpTableInCSBX
[3]151;   Parameters:
152;       CX:     Index of selected menuitem
[88]153;       CS:BX:  Ptr to ITEM_TYPE_REFRESH jump table
[3]154;   Returns:
[88]155;       CF:     set since event processed
[3]156;--------------------------------------------------------------------
157ALIGN JUMP_ALIGN
[88]158.RefreshItemOrInformationWithJumpTableInCSBX:
159    cmp     cl, NO_ITEM_HIGHLIGHTED
160    je      SHORT .EventCompleted
161
[3]162    call    RamVars_GetSegmentToDS
[92]163    call    BootMenu_ConvertMenuitemFromCXtoDriveInDX
[3]164    test    dl, 80h                 ; Floppy drive?
[88]165    jz      SHORT .DrawFloppyDrive
166    jmp     [cs:bx+ITEM_TYPE_REFRESH.HardDisk]
[3]167ALIGN JUMP_ALIGN
[88]168.DrawFloppyDrive:
169    jmp     [cs:bx+ITEM_TYPE_REFRESH.FloppyDrive]
[3]170
[88]171; Jump tables for .RefreshItemOrInformationWithJumpTableInCSBX
172ALIGN WORD_ALIGN
173.rgwItemTypeRefresh:
174istruc ITEM_TYPE_REFRESH
175    at  ITEM_TYPE_REFRESH.HardDisk,         dw  BootMenuPrint_HardDiskMenuitem
176    at  ITEM_TYPE_REFRESH.FloppyDrive,      dw  BootMenuPrint_FloppyMenuitem
177iend
178.rgwInformationItemTypeRefresh:
179istruc ITEM_TYPE_REFRESH
180    at  ITEM_TYPE_REFRESH.HardDisk,         dw  BootMenuPrint_HardDiskMenuitemInformation
181    at  ITEM_TYPE_REFRESH.FloppyDrive,      dw  BootMenuPrint_FloppyMenuitemInformation
182iend
Note: See TracBrowser for help on using the repository browser.