Changeset 528 in xtideuniversalbios for trunk/XTIDE_Universal_BIOS/Src/Menus


Ignore:
Timestamp:
Mar 22, 2013, 5:43:54 PM (12 years ago)
Author:
aitotat@…
google:author:
aitotat@gmail.com
Message:

Changes to XTIDE Universal BIOS:

  • Swapping Floppy and Hard Drives at the same time work again (broke in r492).
  • Hotkeys again work in boot menu (broke in r492).
Location:
trunk/XTIDE_Universal_BIOS/Src/Menus
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/XTIDE_Universal_BIOS/Src/Menus/BootMenu/BootMenuEvent.asm

    r526 r528  
    6969MENUEVENT_ExitMenu equ  (BootMenuEvent_Completed - FirstEvent)
    7070MENUEVENT_ItemHighlightedFromCX equ (EventItemHighlightedFromCX - FirstEvent)
     71MENUEVENT_KeyStrokeInAX equ (EventKeyStrokeInAX - FirstEvent)
    7172MENUEVENT_ItemSelectedFromCX equ (EventItemSelectedFromCX - FirstEvent)
    7273MENUEVENT_RefreshTitle equ (BootMenuPrint_TitleStrings - FirstEvent)
     
    9495    dw      EventNotHandled                     ; MENUEVENT.IdleProcessing
    9596    dw      EventItemHighlightedFromCX          ; MENUEVENT.ItemHighlightedFromCX
     97   
    9698    dw      EventItemSelectedFromCX             ; MENUEVENT.ItemSelectedFromCX
    9799    dw      EventKeyStrokeInAX                  ; MENUEVENT.KeyStrokeInAX
     
    161163EventItemHighlightedFromCX:
    162164    push    cx
     165
     166    ; Drive number translations and hotkeys must be reset to defaults so highlighted
     167    ; selections are correctly displayed on Hotkey Bar and on Boot Menu
     168%ifdef MODULE_HOTKEYS
     169    call    BootVars_StoreDefaultDriveLettersToHotkeyVars
     170%endif
     171    call    DriveXlate_Reset
     172
     173    ; Set highlighted item to be drive to boot from for visual purposes only
    163174    call    BootMenu_GetDriveToDXforMenuitemInCX
    164     jnc     .noDriveSwap
     175    jnc     SHORT .noDriveSwapSinceRomBootSelected
    165176    call    DriveXlate_SetDriveToSwap
    166 .noDriveSwap:
     177
     178%ifdef MODULE_HOTKEYS
     179    ; Store highlighted drive as hotkey
     180    call    HotkeyBar_StoreHotkeyToBootvarsForDriveNumberInDL
     181    jmp     SHORT .UpdateHotkeyBar
     182.noDriveSwapSinceRomBootSelected:
     183    mov     ah, ROM_BOOT_HOTKEY_SCANCODE
     184    call    HotkeyBar_StoreHotkeyToBootvarsIfValidKeystrokeInAX
     185
     186.UpdateHotkeyBar:
     187    ; Redraw Hotkey Bar for updated boot drive letters
     188    mov     al, MONO_NORMAL
     189    CALL_DISPLAY_LIBRARY    SetCharacterAttributeFromAL
     190
     191    mov     bl, ATTRIBUTES_ARE_USED
     192    mov     ax, TELETYPE_OUTPUT_WITH_ATTRIBUTE
     193    CALL_DISPLAY_LIBRARY    SetCharOutputFunctionFromAXwithAttribFlagInBL
     194    call    HotkeyBar_DrawToTopOfScreen
     195%else
     196.noDriveSwapSinceRomBootSelected:
     197%endif ; MODULE_HOTKEYS
    167198
    168199    ; Redraw changes in drive numbers
     
    181212
    182213;--------------------------------------------------------------------
     214; EventKeyStrokeInAX
     215;   Parameters
     216;       AL:     ASCII character for the key
     217;       AH:     Keyboard library scan code for the key
     218;       DS:     Ptr to RAMVARS
     219;       ES:     Ptr to BDA (zero)
     220;       SS:BP:  Menu library handle
     221;   Returns:
     222;       CF:     Set if event processed
     223;               Cleared if event not processed
     224;   Corrupts registers:
     225;       Does not matter
     226;--------------------------------------------------------------------
     227%ifdef MODULE_HOTKEYS
     228EventKeyStrokeInAX:
     229    ; Keypress will be the primary boot drive
     230    cmp     ah, BOOT_MENU_HOTKEY_SCANCODE
     231    je      SHORT BootMenuEvent_Completed   ; Ignore Boot Menu hotkey
     232    call    HotkeyBar_StoreHotkeyToBootvarsIfValidKeystrokeInAX
     233    jnc     SHORT BootMenuEvent_Completed
     234    ; Fall to CloseBootMenu through EventItemSelectedFromCX
     235%endif
     236
     237
     238;--------------------------------------------------------------------
    183239; EventItemSelectedFromCX
    184240;   Parameters
     
    223279BootMenuEvent_Completed:
    224280    stc
    225     ret
     281%ifndef MODULE_HOTKEYS
     282EventKeyStrokeInAX:
     283%endif
     284    ret
  • trunk/XTIDE_Universal_BIOS/Src/Menus/DriveXlate.asm

    r526 r528  
    143143;       Nothing
    144144;   Corrupts registers:
    145 ;       AX, DI, DL
     145;       Nothing
    146146;--------------------------------------------------------------------
    147147DriveXlate_Reset:
    148     xor     dl, dl              ; no translation for a floppy
    149     ;; fall through to DriveXlate_SetDriveToSwap
     148    mov     WORD [RAMVARS.xlateVars+XLATEVARS.wFDandHDswap], 8000h
     149    ret
     150
    150151
    151152;--------------------------------------------------------------------
     
    154155; DriveXlate_SetDriveToSwap
    155156;   Parameters:
    156 ;       DL:     Drive to swap to 00h or 80h
     157;       DL:     Hard Drive to swap to first Hard Drive
     158;               Floppy Drive to swap to first Floppy Drive
    157159;       DS:     RAMVARS segment
    158160;   Returns:
    159161;       Nothing
    160162;   Corrupts registers:
    161 ;       AX, DI
     163;       Nothing
    162164;--------------------------------------------------------------------
    163165DriveXlate_SetDriveToSwap:
    164     mov     ax, 8000h           ; Default mapping (no translation)
    165166    test    dl, dl              ; Floppy drive?
    166167    js      SHORT .SetHardDriveToSwap
    167     mov     al, dl              ; Store floppy translation
    168     SKIP2B  di
     168
     169    ; Set Floppy Drive to swap
     170    mov     [RAMVARS.xlateVars+XLATEVARS.bFDSwap], dl
     171    ret
     172
    169173.SetHardDriveToSwap:
    170     mov     ah, dl              ; Store HD translation
    171     mov     WORD [RAMVARS.xlateVars+XLATEVARS.wFDandHDswap], ax
     174    mov     [RAMVARS.xlateVars+XLATEVARS.bHDSwap], dl
    172175    ret
  • trunk/XTIDE_Universal_BIOS/Src/Menus/HotkeyBar.asm

    r526 r528  
    2222
    2323;--------------------------------------------------------------------
     24; Scans key presses and draws any hotkey changes.
     25;
    2426; HotkeyBar_UpdateDuringDriveDetection
    2527;   Parameters:
     
    3234;--------------------------------------------------------------------
    3335HotkeyBar_UpdateDuringDriveDetection:
    34     call    HotkeyBar_ScanHotkeysFromKeyBufferAndStoreToBootvars
     36    call    ScanHotkeysFromKeyBufferAndStoreToBootvars
    3537    ; Fall to HotkeyBar_DrawToTopOfScreen
    3638
     
    311313
    312314;--------------------------------------------------------------------
    313 ; HotkeyBar_StoreHotkeyToBootvarsForDriveLetterInDL
     315; HotkeyBar_StoreHotkeyToBootvarsForDriveNumberInDL
     316;   Parameters:
     317;       DS:     RAMVARS segment
     318;       ES:     BDA segment (zero)
     319;       DL:     Drive Number
     320;   Returns:
     321;       Nothing
     322;   Corrupts registers:
     323;       AX, CX, DL, DI
     324;--------------------------------------------------------------------
     325HotkeyBar_StoreHotkeyToBootvarsForDriveNumberInDL:
     326    call    DriveXlate_ConvertDriveNumberFromDLtoDriveLetter
     327    ; Fall to StoreHotkeyToBootvarsForDriveLetterInDL
     328
     329
     330;--------------------------------------------------------------------
     331; StoreHotkeyToBootvarsForDriveLetterInDL
    314332;   Parameters:
    315333;       DS:     RAMVARS segment
     
    321339;       AX, CX, DI
    322340;--------------------------------------------------------------------
    323 HotkeyBar_StoreHotkeyToBootvarsForDriveLetterInDL:
     341StoreHotkeyToBootvarsForDriveLetterInDL:
    324342    eMOVZX  ax, dl
    325343    or      al, 32  ; Upper case drive letter to lower case keystroke
     
    328346
    329347;--------------------------------------------------------------------
    330 ; HotkeyBar_ScanHotkeysFromKeyBufferAndStoreToBootvars
     348; ScanHotkeysFromKeyBufferAndStoreToBootvars
    331349;   Parameters:
    332350;       DS:     RAMVARS segment
     
    337355;       AH, CX
    338356;--------------------------------------------------------------------
    339 HotkeyBar_ScanHotkeysFromKeyBufferAndStoreToBootvars:
     357ScanHotkeysFromKeyBufferAndStoreToBootvars:
    340358    call    Keyboard_GetKeystrokeToAX
    341359    jz      SHORT NoHotkeyToProcess
    342360
    343     ePUSH_T cx, HotkeyBar_ScanHotkeysFromKeyBufferAndStoreToBootvars
     361    ; Prepare to read another key from buffer
     362    ePUSH_T cx, ScanHotkeysFromKeyBufferAndStoreToBootvars
    344363    ; Fall to HotkeyBar_StoreHotkeyToBootvarsIfValidKeystrokeInAX
    345364
     
    354373;   Returns:
    355374;       AL:     Last scancode seen
     375;       CF:     Set if valid hotkey in AL
     376;               Clear if scancode in AL is not for any hotkey
    356377;   Corrupts registers:
    357378;       AH, CX, DI
     
    387408    xchg    ax, cx
    388409    mov     [es:di], al
     410    stc                             ; Valid hotkey scancode returned in AL
    389411
    390412.KeystrokeIsNotValidDriveLetter:
     
    392414    mov     al, [es:BOOTVARS.hotkeyVars+HOTKEYVARS.bScancode]
    393415    ret
     416
    394417
    395418;--------------------------------------------------------------------
Note: See TracChangeset for help on using the changeset viewer.