Changeset 492 in xtideuniversalbios for trunk/XTIDE_Universal_BIOS


Ignore:
Timestamp:
Dec 21, 2012, 1:01:55 AM (12 years ago)
Author:
gregli@…
google:author:
gregli@hotmail.com
Message:

Removed the dependency between MODULE_BOOT_MENU and MODULE_HOTKEYS. With these changes, 0, 1, or 2 of them can be included in a build. This change also means that the hotkeys don't work while the menu is up. But the most important hotkey there was for Rom Boot, and that has been added to the menu as a choice proper. Lots of changes across the board in the hotkeys code - even if we eventually back this change out (becaue, for example we want hotkeys to work in the menu) we should probably start from this base and add that functionality back in, as these changes results in approximately 120 bytes of savings and includes new functionality, such as the Rom Boot menu item and the Com Detect hotkey.

Location:
trunk/XTIDE_Universal_BIOS
Files:
19 edited

Legend:

Unmodified
Added
Removed
  • trunk/XTIDE_Universal_BIOS/Inc/BootVars.inc

    r473 r492  
    2222%define BOOTVARS_INC
    2323
     24; Default drives
     25DEFAULT_FLOPPY_DRIVE_LETTER             EQU 'A'
     26DEFAULT_HARD_DRIVE_LETTER               EQU 'C'
     27
    2428; Number of times to retry booting before accepting error
    2529BOOT_READ_RETRY_TIMES       EQU     3
     
    4347    .clearToZeroFromThisPoint:
    4448%ifdef MODULE_HOTKEYS
    45     .hotkeyVars         resb    HOTKEYVARS_size
     49    .hotkeyVars             resb    HOTKEYVARS_size
    4650%endif
    4751
     
    5054
    5155%ifdef MODULE_HOTKEYS
     56
    5257struc HOTKEYVARS
    5358    .wTimeToClose       resb    2       ; Earliest system time when Hotkey Bar can be closed
    54     .bScancode          resb    1       ; Function hotkey scancode
    55     .bFlags             resb    1       ; Must be just before .bHddLetter!
    5659    .wHddAndFddLetters:
     60    .bFddLetter         resb    1       ; Floppy Drive letter hotkey (upper case)
    5761    .bHddLetter         resb    1       ; Hard Drive letter hotkey (upper case)
    58     .bFddLetter         resb    1       ; Floppy Drive letter hotkey (upper case)
     62    .bFlags             resb    1       ; Must be just after .bHddLetter!  (dependency in Hotkeybar.asm)
     63    .bScancode          resb    1       ; Function hotkey scancode, must be just after .bFlags!
    5964endstruc
    6065
    61 ; Bit defines for HOTKEYVARS.bFlags
     66%ifndef CHECK_FOR_UNUSED_ENTRYPOINTS
     67%if HOTKEYVARS.bFddLetter+1 != HOTKEYVARS.bHddLetter || HOTKEYVARS.bHddLetter+1 != HOTKEYVARS.bFlags || HOTKEYVARS.bFlags+1 != HOTKEYVARS.bScancode
     68%error "HOTKEYVARS: bytes need to come in the order .bFddLetter, then .bHddLetter, then .bFlags, then .bScancode"
     69%endif
     70%endif
     71
     72; Bit defines for KEYBOARDVARS.bFlags
    6273FLG_HOTKEY_HD_FIRST     EQU     (1<<0)  ; First try to boot from HDD, then FDD
    6374
    64 %endif ; MODULE_HOTKEY
    65 
    66 
     75%endif ; MODULE_HOTKEYS
    6776
    6877struc DRVDETECTINFO
  • trunk/XTIDE_Universal_BIOS/Inc/HotkeyBar.inc

    r413 r492  
    2323MIN_TIME_TO_DISPLAY_HOTKEY_BAR          EQU (5000/55)   ; 5000 ms
    2424
    25 
    26 ; Hotkeys
    27 BOOT_MENU_HOTKEY_SCANCODE               EQU 3Ch ; F2
    2825ROM_BOOT_HOTKEY_SCANCODE                EQU 42h ; F8
    2926
    30 ; Default drives
    31 DEFAULT_FLOPPY_DRIVE_LETTER             EQU 'A'
    32 DEFAULT_HARD_DRIVE_LETTER               EQU 'C'
     27%ifdef MODULE_BOOT_MENU
     28BOOT_MENU_HOTKEY_SCANCODE               EQU 3Ch ; F2
     29%endif
    3330
     31%ifdef MODULE_SERIAL
     32COM_DETECT_HOTKEY_SCANCODE              EQU 40h ; F6
     33%endif
    3434
    3535%endif ; HOTKEYBAR_INC
  • trunk/XTIDE_Universal_BIOS/Inc/ModuleDependency.inc

    r491 r492  
    1818;
    1919
    20 ; Boot Menu requires Hotkey support
    21 %ifdef MODULE_BOOT_MENU
    22     %ifndef MODULE_HOTKEYS
    23         %define MODULE_HOTKEYS
    24     %endif
    25 %endif
    26 
    2720%ifdef MODULE_SERIAL_FLOPPY
    2821    %ifndef MODULE_SERIAL
     
    3023    %endif
    3124%endif
    32 
    3325
    3426; Include module specific .INC files
     
    5042%ifdef MODULE_HOTKEYS
    5143    %include "HotkeyBar.inc"        ; For Hotkeys
    52     %ifdef MODULE_BOOT_MENU
    53         %include "BootMenu.inc"     ; For Boot Menu
    54     %endif
     44%endif
     45
     46%ifdef MODULE_BOOT_MENU
     47    %include "BootMenu.inc"         ; For Boot Menu
     48%endif
     49
     50%ifdef MODULE_BOOT_MENU OR MODULE_HOTKEYS
     51    %define MODULE_DRIVEXLATE
    5552%endif
    5653
  • trunk/XTIDE_Universal_BIOS/Inc/RamVars.inc

    r444 r492  
    2626%endif
    2727
     28%ifdef MODULE_SERIAL_FLOPPY
     29    %define NEED_XLATEVARS
     30%endif
     31
     32%ifdef MODULE_DRIVEXLATE
     33    %define NEED_XLATEVARS
     34%endif
     35
     36
    2837; RAM Variables.
    2938; Variables should be kept to minimum since they might be located
     
    5059
    5160    ; Variables for drive number translation
    52 %ifdef MODULE_HOTKEYS
     61%ifdef NEED_XLATEVARS
    5362    .xlateVars          resb    XLATEVARS_size
    5463%endif
     
    6069
    6170
    62 
     71%ifdef NEED_XLATEVARS
    6372; Variables for translating drive numbers.
    64 %ifdef MODULE_HOTKEYS
    6573    struc XLATEVARS
    6674    %ifdef MODULE_SERIAL_FLOPPY
     
    6977                                        ; and number of drives (low order bit, max 2 drives supported).
    7078                                        ; During initialization, until the end of DetectDrives_FromAllIDEControllers,
    71                                         ; this byte contains the raw number of floppy drives seen (using .bFlopCreateCnt)
     79                                        ; this byte contains the raw number of floppy drives seen
     80                                        ; (using .bFlopCreateCnt)
    7281    %else
    7382                            resb    1   ; alignment
    7483    %endif
     84
     85    %ifdef MODULE_DRIVEXLATE
    7586        .bXlatedDrv         resb    1   ; Drive number after translation
    7687        .wFDandHDswap:
    7788        .bFDSwap            resb    1   ; Floppy Drive to swap to 00h and vice versa
    7889        .bHDSwap            resb    1   ; Hard Drive to swap to 80h and vice versa
     90    %else
     91                            resb    1   ; alignment
     92    %endif
    7993    endstruc
    8094%endif
    81 
    8295
    8396%ifdef MODULE_SERIAL_FLOPPY
  • trunk/XTIDE_Universal_BIOS/Src/Handlers/Int19h.asm

    r417 r492  
    104104;--------------------------------------------------------------------
    105105SelectDriveToBootFrom:
    106 %ifdef MODULE_HOTKEYS
    107     call    HotkeyBar_UpdateDuringDriveDetection
    108 
     106
     107; The following macro could be easily inlined below.  Why a macro?  Depending on the combination
     108; of MODULE_HOTKEYS or MODULE_BOOT_MENU, this code needs to either come before or after the
     109; call to the boot menu. 
     110;
     111%macro TRY_TO_BOOT_DL_AND_DH_DRIVES 0
     112    push    dx                                  ; it's OK if this is left on the stack, if we are
     113                                                ; are successful, the following call does not return
     114    call    TryToBootFromPrimaryOrSecondaryBootDevice_AndBoot
     115    pop     dx
     116    mov     dl, dh
     117    call    TryToBootFromPrimaryOrSecondaryBootDevice_AndBoot
     118%endmacro
     119               
     120%ifdef MODULE_HOTKEYS
     121    call    HotkeyBar_ScanHotkeysFromKeyBufferAndStoreToBootvars       
     122    cmp     al, ROM_BOOT_HOTKEY_SCANCODE
     123    jz      JumpToBootSector_or_RomBoot         ; CF clear so ROM boot
    109124%ifdef MODULE_BOOT_MENU
    110     mov     di, BOOTVARS.hotkeyVars+HOTKEYVARS.bScancode
    111     cmp     BYTE [es:di], BOOT_MENU_HOTKEY_SCANCODE
    112     jne     SHORT .DoNotDisplayBootMenu
    113 
    114     ; Stop blinking the Boot Menu hotkey and display menu
    115     mov     BYTE [es:di], 0
    116     call    HotkeyBar_DrawToTopOfScreen
    117     call    BootMenu_DisplayAndStoreSelectionAsHotkey
    118 .DoNotDisplayBootMenu:
    119 %endif
    120 
    121     ; Check if ROM boot (INT 18h) wanted
    122     cmp     BYTE [es:BOOTVARS.hotkeyVars+HOTKEYVARS.bScancode], ROM_BOOT_HOTKEY_SCANCODE
    123     je      SHORT JumpToBootSector_or_RomBoot   ; CF clear so ROM boot
    124 
    125     ; Get Primary boot drive number to DL
    126     call    HotkeyBar_GetPrimaryBootDriveNumberToDL
     125    cmp     al, BOOT_MENU_HOTKEY_SCANCODE
     126    jz      .BootMenu
     127%endif
     128    call    HotkeyBar_GetBootDriveNumbersToDX
     129.TryUsingHotKeysCode:
     130    TRY_TO_BOOT_DL_AND_DH_DRIVES
     131    ;; falls through to boot menu, if it is present.  If not present, falls through to rom boot.
     132%endif
     133
     134%ifdef MODULE_BOOT_MENU
     135.BootMenu:     
     136    call    BootMenu_DisplayAndReturnDriveInDLRomBootClearCF
     137    jnc     JumpToBootSector_or_RomBoot         ; CF clear so ROM boot
     138
     139    mov     dh, dl                              ; Setup for secondary drive
     140    not     dh                                  ; Floppy goes to HD, or vice veras
     141    and     dh, 080h                            ; Go to first drive of the floppy or HD set
     142
     143%ifdef MODULE_HOTKEYS
     144    jmp     .TryUsingHotKeysCode
    127145%else
     146    TRY_TO_BOOT_DL_AND_DH_DRIVES       
     147    jmp     .BootMenu
     148%endif
     149%endif
     150
     151%ifndef MODULE_HOTKEYS
     152%ifndef MODULE_BOOT_MENU
    128153    xor     dl, dl          ; Try to boot from Floppy Drive A
    129 %endif  ; MODULE_HOTKEYS
    130 
    131     ; Try to boot from Primary boot drive (00h by default)
    132     call    TryToBootFromPrimaryOrSecondaryBootDevice
    133     jc      SHORT JumpToBootSector_or_RomBoot
    134 
    135     ; Try to boot from Secondary boot device (80h by default)
    136 %ifdef MODULE_HOTKEYS
    137     call    HotkeyBar_GetSecondaryBootDriveNumberToDL
    138 %else
     154    call    TryToBootFromPrimaryOrSecondaryBootDevice_AndBoot
    139155    mov     dl, 80h         ; Try to boot from Hard Drive C
    140 %endif
    141     call    TryToBootFromPrimaryOrSecondaryBootDevice
    142 
    143 %ifdef MODULE_BOOT_MENU
    144     ; Force Boot Menu hotkey to display boot menu
    145     mov     BYTE [es:BOOTVARS.hotkeyVars+HOTKEYVARS.bScancode], BOOT_MENU_HOTKEY_SCANCODE
    146     jnc     SHORT SelectDriveToBootFrom
    147 %endif
    148     ; Fall to JumpToBootSector_or_RomBoot
    149 
     156    call    TryToBootFromPrimaryOrSecondaryBootDevice_AndBoot
     157%endif
     158%endif
     159
     160%ifndef MODULE_BOOT_MENU
     161    clc     ;  fall through with flag for ROM boot.  Boot Menu goes back to menu and doesn't fall through.
     162%endif     
    150163
    151164;--------------------------------------------------------------------
     
    203216;       AX, CX, DH, SI, DI, (DL if failed to read boot sector)
    204217;--------------------------------------------------------------------
    205 %ifndef MODULE_HOTKEYS
    206 TryToBootFromPrimaryOrSecondaryBootDevice   EQU     BootSector_TryToLoadFromDriveDL
     218%ifndef MODULE_DRIVEXLATE
     219TryToBootFromPrimaryOrSecondaryBootDevice_AndBoot   EQU     BootSector_TryToLoadFromDriveDL_AndBoot
    207220
    208221%else
    209 TryToBootFromPrimaryOrSecondaryBootDevice:
     222TryToBootFromPrimaryOrSecondaryBootDevice_AndBoot:
    210223    call    DriveXlate_SetDriveToSwap
    211224    call    DriveXlate_ToOrBack
    212     jmp     BootSector_TryToLoadFromDriveDL
    213 %endif
     225    ; fall through to TryToBoot_FallThroughTo_BootSector_TryToLoadFromDriveDL_AndBoot
     226
     227TryToBoot_FallThroughTo_BootSector_TryToLoadFromDriveDL_AndBoot:
     228; fall through to BootSector_TryToLoadFromDriveDL_AndBoot               
     229%endif
     230       
     231
  • trunk/XTIDE_Universal_BIOS/Src/Handlers/Int19h/BootSector.asm

    r428 r492  
    3333;       AX, CX, DH, SI, DI, (DL if failed to read boot sector)
    3434;--------------------------------------------------------------------
    35 BootSector_TryToLoadFromDriveDL:
     35BootSector_TryToLoadFromDriveDL_AndBoot:
    3636    call    DetectPrint_TryToBootFromDL
    3737    call    LoadFirstSectorFromDriveDL
     
    4444.AlwaysBootFromFloppyDriveForBooterGames:
    4545    stc
    46     ret
     46    jmp     SHORT JumpToBootSector_or_RomBoot       
    4747.FailedToLoadFirstSector:
    4848    call    DetectPrint_FailedToLoadFirstSector
    49     clc
    5049    ret
    5150.FirstHardDiskSectorNotBootable:
    5251    mov     si, g_szBootSectorNotFound
    5352    call    DetectPrint_NullTerminatedStringFromCSSIandSetCF
    54     clc
    5553    ret
     54
     55%ifndef CHECK_FOR_UNUSED_ENTRYPOINTS       
     56  %ifdef MODULE_DRIVEXLATE
     57    %if TryToBoot_FallThroughTo_BootSector_TryToLoadFromDriveDL_AndBoot <> BootSector_TryToLoadFromDriveDL_AndBoot
     58      %error "TryToBoot_FallThroughTo_BootSector_TryToLoadFromDriveDL_AndBoot <> BootSector_TryToLoadFromDriveDL_AndBoot, BootSector must come immediately after int19h.asm"
     59    %endif
     60  %endif
     61%endif
    5662
    5763;--------------------------------------------------------------------
  • trunk/XTIDE_Universal_BIOS/Src/Initialization/DetectDrives.asm

    r491 r492  
    4848    call    StartDetectionWithDriveSelectByteInBHandStringInCX
    4949
     50%ifdef MODULE_HOTKEYS
     51    call    HotkeyBar_ScanHotkeysFromKeyBufferAndStoreToBootvars        ; Done here while CX is still protected
     52%endif             
     53
    5054    pop     cx
    5155
     
    6266; if serial drive detected, do not scan (avoids duplicate drives and isn't needed - we already have a connection)
    6367;
    64     call    FindDPT_ToDSDIforSerialDevice
     68    call    FindDPT_ToDSDIforSerialDevice   ; does not modify AX
    6569    jnc     .AddHardDisks
    6670
    6771    mov     bp, ROMVARS.ideVarsSerialAuto   ; Point to our special IDEVARS structure, just for serial scans
     72
     73%ifdef MODULE_HOTKEYS
     74    cmp     al, COM_DETECT_HOTKEY_SCANCODE  ; Set by last call to HotkeyBar_UpdateDuringDriveDetection above
     75    jz      .DriveDetectLoop
     76%endif     
    6877
    6978    mov     al,[cs:ROMVARS.wFlags]          ; Configurator set to always scan?
     
    192201%ifdef MODULE_HOTKEYS
    193202    call    HotkeyBar_UpdateDuringDriveDetection
    194 %endif
     203%endif             
     204       
    195205%ifdef MODULE_8BIT_IDE
    196206    pop     dx
  • trunk/XTIDE_Universal_BIOS/Src/Initialization/DetectPrint.asm

    r489 r492  
    3434    ret
    3535
    36 
     36       
     37%ifdef MODULE_HOTKEYS
    3738;--------------------------------------------------------------------
    3839; DetectPrint_GetSoftwareCoordinatesToAX
     
    4748    CALL_DISPLAY_LIBRARY    GetSoftwareCoordinatesToAX
    4849    ret
    49 
    50 
     50%endif
     51
     52       
    5153;--------------------------------------------------------------------
    5254; DetectPrint_StartDetectWithMasterOrSlaveStringInCXandIdeVarsInCSBP
     
    227229    mov     bp, sp
    228230
    229 %ifdef MODULE_HOTKEYS
     231%ifdef MODULE_DRIVEXLATE
    230232
    231233    call    DriveXlate_ToOrBack ; DL = Untranslated Drive number
     
    233235    call    DriveXlate_ToOrBack ; DL = Translated Drive number
    234236
    235     call    HotkeyBar_ConvertDriveNumberFromDLtoDriveLetter ; DL = Translated letter
     237    call    DriveXlate_ConvertDriveNumberFromDLtoDriveLetter    ; DL = Translated letter
    236238    xchg    dl, dh
    237     call    HotkeyBar_ConvertDriveNumberFromDLtoDriveLetter ; DL = Untranslated letter
     239    call    DriveXlate_ConvertDriveNumberFromDLtoDriveLetter    ; DL = Untranslated letter
    238240    push    dx
    239241    xchg    dl, dh
    240242    push    dx
    241243
    242     call    HotkeyBar_ConvertDriveLetterInDLtoDriveNumber   ; Restore DL
     244    call    DriveXlate_ConvertDriveLetterInDLtoDriveNumber  ; Restore DL
    243245
    244246%else
     
    254256    push    ax
    255257
    256 %endif ; MODULE_HOTKEYS
     258%endif ; MODULE_DRIVEXLATE
    257259
    258260    mov     si, g_szTryToBoot
  • trunk/XTIDE_Universal_BIOS/Src/Initialization/Interrupts.asm

    r491 r492  
    4141    ; If no drives detected, leave system INT 13h and 40h handlers
    4242    ; in place. We need our INT 13h handler to swap drive letters.
    43 %ifndef MODULE_HOTKEYS
     43%ifndef MODULE_DRIVEXLATE
    4444    cmp     BYTE [RAMVARS.bDrvCnt], 0
    4545    je      SHORT Interrupts_InstallHandlerToVectorInALFromCSSI.Interrupts_Return
  • trunk/XTIDE_Universal_BIOS/Src/Main.asm

    r491 r492  
    3636    %define MENUEVENT_INLINE_OFFSETS        ; Only one menu required, save space and inline offsets
    3737    %define INCLUDE_MENU_LIBRARY
    38 
     38    %define MENU_NO_ESC                     ; User cannot 'esc' out of the menu
    3939%else   ; If no boot menu included
    4040    %define INCLUDE_DISPLAY_LIBRARY
     
    197197%ifdef MODULE_HOTKEYS
    198198    %include "HotkeyBar.asm"        ; For hotkeys during drive detection and boot menu
    199     %include "DriveXlate.asm"       ; For swapping drive numbers
     199%endif     
     200%ifdef MODULE_DRIVEXLATE
     201    %include "DriveXlate.asm"       ; For swapping drive numbers, must come immediately after HotkeyBar.asm
    200202%endif
    201203
     
    211213    ; Boot loader
    212214    %include "Int19h.asm"           ; For Int 19h, Boot Loader
     215    %include "BootSector.asm"       ; For loading boot sector
    213216    %include "Int19hReset.asm"      ; INT 19h handler for proper system reset
    214     %include "BootSector.asm"       ; For loading boot sector
    215217
    216218    ; For all device types
  • trunk/XTIDE_Universal_BIOS/Src/Menus/BootMenu/BootMenu.asm

    r392 r492  
    2424; Displays Boot Menu and returns Drive or Function number.
    2525;
    26 ; BootMenu_DisplayAndReturnSelectionInDX
     26; BootMenu_DisplayAndStoreSelection
    2727;   Parameters:
    2828;       DS:     RAMVARS segment
    2929;   Returns:
    30 ;       Nothing, selected drive is converted to hotkey
     30;       DL:     Drive number selected
     31;       CF:     Set if selected item is an actual drive, DL is valid
     32;               Clear if selected item is Rom Boot, DL is invalid
    3133;   Corrupts registers:
    3234;       All General Purpose Registers
    3335;--------------------------------------------------------------------
    34 BootMenu_DisplayAndStoreSelectionAsHotkey:
     36BootMenu_DisplayAndReturnDriveInDLRomBootClearCF:
    3537    call    DriveXlate_Reset
    3638
     
    3840    CALL_MENU_LIBRARY   DisplayWithHandlerInBXandUserDataInDXAX
    3941
     42    xchg    cx, ax
     43       
    4044    ; Clear Boot Menu from screen
    4145    mov     ax, ' ' | (MONO_NORMAL<<8)
    4246    CALL_DISPLAY_LIBRARY    ClearScreenWithCharInALandAttrInAH
    43     ret
    4447
     48    ; fall through to BootMenu_GetDriveToDXforMenuitemInCX
    4549
    4650;--------------------------------------------------------------------
     
    5256;       DS:     RAMVARS segment
    5357;       CF:     Set: There is a selected menu item, DL is valid
    54 ;               Clear: There is no selected menu item, DL is not valid
     58;               Clear: The item selected is Rom Boot, DL is not valid
    5559;   Corrupts registers:
    56 ;       AX, DI
     60;       AX, BX, DI
     61;
     62; NOTE: We can't use the menu structure in here, as we are falling through
     63; through from BootMenu_DisplayAndReturnDriveInDLRomBootClearCF when the
     64; menu structure has already been destroyed.
    5765;--------------------------------------------------------------------
    5866BootMenu_GetDriveToDXforMenuitemInCX:
    59     cmp     cl, NO_ITEM_HIGHLIGHTED
    60     je      SHORT .ReturnFloppyDriveInDX    ; Clear CF if branch taken
    61 
    6267    mov     dl, cl                          ; Copy menuitem index to DX
    6368    call    FloppyDrive_GetCountToAX
     
    6570    jb      SHORT .ReturnFloppyDriveInDX    ; Set CF if branch taken
    6671    or      al, 80h                         ; Or 80h into AL before the sub
    67                                             ; to cause CF to be set after
    68                                             ; and result has high order bit set
     72                                            ; shorter instruction than or'ing it in afterward
    6973    sub     dl, al                          ; Remove floppy drives from index
    70 
     74    call    RamVars_GetHardDiskCountFromBDAtoAX
     75    or      al, 80h                         ; Or 80h into AL before the sub             
     76    cmp     dl, al                          ; Set CF if hard disk
     77                                            ; Clear CF if last item, beyond hard disk list, which indicates ROM boot
    7178.ReturnFloppyDriveInDX:
    7279    ret
  • trunk/XTIDE_Universal_BIOS/Src/Menus/BootMenu/BootMenuEvent.asm

    r489 r492  
    2121SECTION .text
    2222
    23 
    24 ;--------------------------------------------------------------------
    25 ; GetDefaultMenuitemToDL
    26 ;   Parameters:
    27 ;       DL:     Drive number
    28 ;       ES:     Ptr to BDA (zero)
    29 ;   Returns:
    30 ;       DL:     Menuitem index (assuming drive is available)
    31 ;   Corrupts registers:
    32 ;       AX, DH
    33 ;--------------------------------------------------------------------
    34 GetDefaultMenuitemToDX:
    35     mov     dx, [es:BOOTVARS.hotkeyVars+HOTKEYVARS.wHddAndFddLetters]
    36     test    BYTE [es:BOOTVARS.hotkeyVars+HOTKEYVARS.bFlags], FLG_HOTKEY_HD_FIRST
    37     eCMOVZ  dl, dh
    38     call    IsDriveDLinSystem
    39     jnc     SHORT BootMenuEvent_Handler.DoNotSetDefaultMenuitem
    40     call    DriveXlate_SetDriveToSwap
    41     ; Fall to GetMenuitemToDXforDriveInDL
    42 
    43 
    4423;--------------------------------------------------------------------
    4524; GetMenuitemToDXforDriveInDL
     
    6342
    6443;--------------------------------------------------------------------
    65 ; IsDriveDLinSystem
    66 ;   Parameters:
    67 ;       DL:     Drive number
    68 ;       DS:     RAMVARS segment
    69 ;   Returns:
    70 ;       CF:     Set if drive number is valid
    71 ;               Clear if drive is not present in system
    72 ;   Corrupts registers:
    73 ;       AX, CX
    74 ;--------------------------------------------------------------------
    75 IsDriveDLinSystem:
    76     test    dl, dl                              ; Floppy drive?
    77     jns     SHORT .IsFloppyDriveInSystem
    78     call    RamVars_GetHardDiskCountFromBDAtoAX ; Hard Disk count to AX
    79     or      al, 80h                             ; Set Hard Disk bit to AX
    80     jmp     SHORT .CompareDriveNumberToDriveCount
    81 .IsFloppyDriveInSystem:
    82     call    FloppyDrive_GetCountToAX
    83 .CompareDriveNumberToDriveCount:
    84     cmp     dl, al                              ; Set CF when DL is smaller
    85     ret
    86 
    87 
    88 ;--------------------------------------------------------------------
    8944; BootMenuEvent_Handler
    9045;   Common parameters for all events:
     
    11570MENUEVENT_ItemHighlightedFromCX equ (EventItemHighlightedFromCX - FirstEvent)
    11671MENUEVENT_ItemSelectedFromCX equ (EventItemSelectedFromCX - FirstEvent)
    117 MENUEVENT_KeyStrokeInAX equ (EventKeyStrokeInAX - FirstEvent)
    11872MENUEVENT_RefreshTitle equ (BootMenuPrint_TitleStrings - FirstEvent)
    11973MENUEVENT_RefreshInformation equ (BootMenuPrint_RefreshInformation - FirstEvent)
     
    164118EventInitializeMenuinitFromSSBP:
    165119    ; Store default Menuitem (=default drive to boot from)
    166     call    GetDefaultMenuitemToDX
     120    xor     dx, dx
    167121    mov     [bp+MENUINIT.wHighlightedItem], dx
    168122
     
    172126    call    FloppyDrive_GetCountToAX
    173127    add     ax, cx
     128    inc     ax                              ; extra entry for ROM Boot item
    174129    mov     [bp+MENUINIT.wItems], ax
    175 
     130               
    176131    ; Store menu size
    177132    mov     WORD [bp+MENUINIT.wTitleAndInfoLines], BOOT_MENU_TITLE_AND_INFO_LINES
     
    180135    xchg    cx, ax
    181136    CALL_DISPLAY_LIBRARY    GetColumnsToALandRowsToAH
    182     sub     ah, MENU_SCREEN_BOTTOM_LINES*2  ; Leave space for Hotkey Bar
    183137    MIN_U   ah, cl
    184138    mov     [bp+MENUINIT.bHeight], ah
     
    207161EventItemHighlightedFromCX:
    208162    push    cx
     163    call    DriveXlate_Reset       
    209164    call    BootMenu_GetDriveToDXforMenuitemInCX       
    210     call    DriveXlate_Reset
     165    jnc     .noDriveSwap       
    211166    call    DriveXlate_SetDriveToSwap
    212 
    213     ; We need to generate keystroke so selection two drives is possible.
    214     ; The secondary boot drive is selected by highlighting it using menu keys
    215     ; and the primary boot drive is selected by pressing drive letter hotkey.
    216     call    BootVars_StoreHotkeyForDriveNumberInDL
    217     call    RedrawHotkeyBarFromInsideMenuEventHandler
    218 
     167.noDriveSwap:   
     168       
    219169    ; Redraw changes in drive numbers
    220170    xor     ax, ax  ; Update first floppy drive (for translated drive number)
     
    230180    ret
    231181
    232 
    233 ;--------------------------------------------------------------------
    234 ; EventKeyStrokeInAX
    235 ;   Parameters
    236 ;       AL:     ASCII character for the key
    237 ;       AH:     Keyboard library scan code for the key
    238 ;       DS:     Ptr to RAMVARS
    239 ;       ES:     Ptr to BDA (zero)
    240 ;       SS:BP:  Menu library handle
    241 ;   Returns:
    242 ;       CF:     Set if event processed
    243 ;               Cleared if event not processed
    244 ;   Corrupts registers:
    245 ;       Does not matter
    246 ;--------------------------------------------------------------------
    247 EventKeyStrokeInAX:
    248     cmp     ah, BOOT_MENU_HOTKEY_SCANCODE
    249     je      SHORT BootMenuEvent_Completed   ; Ignore Boot Menu hotkey
    250     call    HotkeyBar_StoreHotkeyToBootvarsIfValidKeystrokeInAX
    251     jnc     SHORT BootMenuEvent_Completed
    252 
    253     ; Hotkey is now stored to BOOTVARS and menu can be closed
    254     jmp     SHORT CloseBootMenu
    255 
    256 
     182       
    257183;--------------------------------------------------------------------
    258184; EventItemSelectedFromCX
     
    269195;--------------------------------------------------------------------
    270196EventItemSelectedFromCX:
    271     call    BootMenu_GetDriveToDXforMenuitemInCX
    272     jnc     SHORT BootMenuEvent_Completed   ; No menuitem selected
    273 
    274     ; Convert selected drive to hotkey keystroke
    275     call    HotkeyBar_StoreHotkeyToBootvarsForDriveLetterInDL
    276197    ; Fall to CloseBootMenu
    277198
     
    290211    call    DriveXlate_Reset
    291212    CALL_MENU_LIBRARY   Close
    292     ; Fall to RedrawHotkeyBarFromInsideMenuEventHandler
    293 
    294 
    295 ;--------------------------------------------------------------------
    296 ; RedrawHotkeyBarFromInsideMenuEventHandler
    297 ;   Parameters
    298 ;       DS:     RAMVARS segment
    299 ;       ES:     BDA segment (zero)
    300 ;   Returns:
    301 ;       Nothing
    302 ;   Corrupts registers:
    303 ;       AX, BX, CX, DX, SI, DI
    304 ;--------------------------------------------------------------------
    305 RedrawHotkeyBarFromInsideMenuEventHandler:
    306     mov     al, MONO_NORMAL
    307     CALL_DISPLAY_LIBRARY    SetCharacterAttributeFromAL
    308 
    309     mov     bl, ATTRIBUTES_ARE_USED
    310     mov     ax, TELETYPE_OUTPUT_WITH_ATTRIBUTE
    311     CALL_DISPLAY_LIBRARY    SetCharOutputFunctionFromAXwithAttribFlagInBL
    312     call    HotkeyBar_DrawToTopOfScreen
    313213    ; Fall to BootMenuEvent_Completed
    314214
    315 
     215       
    316216;--------------------------------------------------------------------
    317217; BootMenuEvent_Completed
  • trunk/XTIDE_Universal_BIOS/Src/Menus/BootMenu/BootMenuPrint.asm

    r491 r492  
    3333;--------------------------------------------------------------------
    3434BootMenuPrint_RefreshItem:
    35     call    BootMenu_GetDriveToDXforMenuitemInCX
    36     jnc     BootMenuEvent_Completed                 ; if no menu item selected, out we go
    37 
    3835    push    bp
    3936    mov     bp, sp
     37
     38    call    BootMenu_GetDriveToDXforMenuitemInCX
     39    mov     si, g_szRomBootDash                     ; Standard "Rom Boot" but with a "-" at the front
     40    mov     al, 20h                                 ; The space between "Rom" and "Boot"
     41    jnc     .ROMBoot                                ; display "Rom Boot" option for last entry
    4042
    4143    call    FindDPT_ForDriveNumberInDL
     
    5759    mov     ax, dx                                  ; preserve DL for the floppy drive letter addition
    5860    call    DriveXlate_ToOrBack
     61
     62    test    dl, 0f0h                                ; if there is a character in the upper nibble
     63    jnz     .noSpace
     64    dec     si                                      ; backup a character to a leading space
     65.noSpace:
     66
    5967    push    dx                                      ; translated drive number
    6068    push    bx                                      ; sub string
    6169    add     al, 'A'                                 ; floppy drive letter (we always push this although
    62     push    ax                                      ; the hard disks don't ever use it, but it does no harm)
     70                                                    ; the hard disks don't ever use it, but it does no harm)
     71.ROMBoot:       
     72    push    ax                                     
    6373
    6474    jmp     SHORT BootMenuPrint_RefreshInformation.FormatRelay
     
    95105
    96106    call    BootMenu_GetDriveToDXforMenuitemInCX
    97     jnc     BootMenuEvent_Completed                     ; if no menu selection, abort
     107    jnc     BootMenuEvent_Completed                     ; nothing to display if "Rom Boot" option
    98108
    99109    push    bp
  • trunk/XTIDE_Universal_BIOS/Src/Menus/DriveXlate.asm

    r397 r492  
    2020; Section containing code
    2121SECTION .text
     22
     23;--------------------------------------------------------------------
     24; DriveXlate_ConvertDriveLetterInDLtoDriveNumber
     25;   Parameters:
     26;       DS:     RAMVARS segment
     27;       DL:     Drive letter ('A'...)
     28;   Returns:
     29;       DL:     Drive number (0xh for Floppy Drives, 8xh for Hard Drives)
     30;   Corrupts registers:
     31;       AX
     32;--------------------------------------------------------------------
     33DriveXlate_ConvertDriveLetterInDLtoDriveNumber:
     34    call    DriveXlate_GetLetterForFirstHardDriveToAX
     35    cmp     dl, al
     36    jb      SHORT .ConvertLetterInDLtoFloppyDriveNumber
     37
     38    ; Convert letter in DL to Hard Drive number
     39    sub     dl, al
     40    or      dl, 80h
     41    ret
     42
     43.ConvertLetterInDLtoFloppyDriveNumber:
     44    sub     dl, DEFAULT_FLOPPY_DRIVE_LETTER
     45    ret
     46
     47%ifdef MODULE_HOTKEY
     48%if HotkeyBar_FallThroughTo_DriveXlate_ConvertDriveLetterInDLtoDriveNumber <> DriveXlate_ConvertDriveLetterInDLtoDriveNumber
     49    %error "DriveXlate_ConvertDriveLetterInDLtoDriveNumber must be at the top of DriveXlate.asm, and that file must immediately follow HotKeys.asm"
     50%endif     
     51%endif
     52       
     53;--------------------------------------------------------------------
     54; DriveXlate_ConvertDriveNumberFromDLtoDriveLetter
     55;   Parameters:
     56;       DL:     Drive number (0xh for Floppy Drives, 8xh for Hard Drives)
     57;       DS:     RAMVARS Segment
     58;   Returns:
     59;       DL:     Drive letter ('A'...)
     60;       CF:     Set if Hard Drive
     61;               Clear if Floppy Drive
     62;   Corrupts registers:
     63;       AX
     64;--------------------------------------------------------------------
     65DriveXlate_ConvertDriveNumberFromDLtoDriveLetter:
     66    test    dl, dl
     67    jns     SHORT .GetDefaultFloppyDrive
     68
     69    ; Store default hard drive to boot from
     70    call    DriveXlate_GetLetterForFirstHardDriveToAX
     71    sub     dl, 80h
     72    add     dl, al
     73    stc
     74    ret
     75
     76.GetDefaultFloppyDrive:
     77    add     dl, DEFAULT_FLOPPY_DRIVE_LETTER     ; Clears CF
     78    ret
     79
     80
     81;--------------------------------------------------------------------
     82; Returns letter for first hard disk. Usually it will be 'C' but it
     83; can be higher if more than two floppy drives are found.
     84;
     85; DriveXlate_GetLetterForFirstHardDriveToAX
     86;   Parameters:
     87;       DS:     RAMVARS segment
     88;   Returns:
     89;       AX:     Upper case letter for first hard disk
     90;   Corrupts registers:
     91;       Nothing
     92;--------------------------------------------------------------------
     93DriveXlate_GetLetterForFirstHardDriveToAX:
     94    call    FloppyDrive_GetCountToAX
     95    add     al, DEFAULT_FLOPPY_DRIVE_LETTER
     96    MAX_U   al, DEFAULT_HARD_DRIVE_LETTER
     97    ret
     98               
    2299
    23100;--------------------------------------------------------------------
  • trunk/XTIDE_Universal_BIOS/Src/Menus/HotkeyBar.asm

    r491 r492  
    3232;--------------------------------------------------------------------
    3333HotkeyBar_UpdateDuringDriveDetection:
    34     call    ScanHotkeysFromKeyBufferAndStoreToBootvars
     34    call    HotkeyBar_ScanHotkeysFromKeyBufferAndStoreToBootvars
    3535    ; Fall to HotkeyBar_DrawToTopOfScreen
    36 
    37 
     36       
     37       
    3838;--------------------------------------------------------------------
    3939; HotkeyBar_DrawToTopOfScreen
     
    6666;--------------------------------------------------------------------
    6767.PrintFloppyDriveHotkeys:
     68    mov     cx, [es:BOOTVARS.hotkeyVars+HOTKEYVARS.wHddAndFddLetters]
     69       
    6870    call    FloppyDrive_GetCountToAX
    6971    test    ax, ax      ; Any Floppy Drives?
    7072    jz      SHORT .SkipFloppyDriveHotkeys
    7173
    72     mov     di, DEFAULT_FLOPPY_DRIVE_LETTER | (ANGLE_QUOTE_RIGHT<<8)
    73     mov     cl, [es:BOOTVARS.hotkeyVars+HOTKEYVARS.bFddLetter]
    74     mov     si, g_szFDD
     74    mov     ax, (ANGLE_QUOTE_RIGHT << 8) | DEFAULT_FLOPPY_DRIVE_LETTER
     75    mov     di, g_szFDD
    7576    call    FormatDriveHotkeyString
    7677
     
    8889;       AX, CX, DX, SI, DI
    8990;--------------------------------------------------------------------
    90     call    HotkeyBar_GetLetterForFirstHardDriveToAX
     91    call    DriveXlate_GetLetterForFirstHardDriveToAX
    9192    mov     ah, ANGLE_QUOTE_RIGHT
    92     xchg    di, ax
    93     mov     cl, [es:BOOTVARS.hotkeyVars+HOTKEYVARS.bHddLetter]
    94     mov     si, g_szHDD
     93    mov     cl, ch
     94    mov     di, g_szHDD
    9595    call    FormatDriveHotkeyString
    9696    ; Fall to .PrintBootMenuHotkey
     
    107107.PrintBootMenuHotkey:
    108108%ifdef MODULE_BOOT_MENU
    109     mov     ah, BOOT_MENU_HOTKEY_SCANCODE
    110     mov     di, 'F' | ('2'<<8)      ; F2
    111     mov     si, g_szBootMenu
     109    mov     ax, BOOT_MENU_HOTKEY_SCANCODE | ('2' << 8)
     110    mov     di, g_szBootMenu
    112111    call    FormatFunctionHotkeyString
    113112%endif
    114     ; Fall to .PrintRomBootHotkey
     113    ; Fall to .PrintComDetectHotkey
     114
     115;--------------------------------------------------------------------
     116; .PrintComDetectHotkey
     117;   Parameters:
     118;       ES:     BDA segment (zero)
     119;   Returns:
     120;       Nothing
     121;   Corrupts registers:
     122;       AX, CX, DX, SI, DI
     123;--------------------------------------------------------------------
     124.PrintComDetectHotkey:
     125%ifdef MODULE_SERIAL
     126    mov     ax, COM_DETECT_HOTKEY_SCANCODE | ('6' << 8)
     127    mov     di, g_szHotComDetect
     128    call    FormatFunctionHotkeyString
     129%endif
     130    ; Fall to .PrintRomBootHotkey       
    115131
    116132;--------------------------------------------------------------------
     
    124140;--------------------------------------------------------------------
    125141.PrintRomBootHotkey:
    126     mov     ah, ROM_BOOT_HOTKEY_SCANCODE
    127     mov     di, 'F' | ('8'<<8)      ; F8
    128     mov     si, g_szRomBoot
     142    mov     ax, ROM_BOOT_HOTKEY_SCANCODE | ('8' << 8)
     143    mov     di, g_szRomBoot
    129144    call    FormatFunctionHotkeyString
    130145    ; Fall to .EndHotkeyBarRendering
     
    168183;   Parameters:
    169184;       CL:         Drive letter hotkey from BOOTVARS
    170 ;       DI low:     First character for drive key string
    171 ;       DI high:    Second character for drive key string (ANGLE_QUOTE_RIGHT)
     185;       AL:         First character for drive key string
     186;       AH:         Second character for drive key string (ANGLE_QUOTE_RIGHT)
    172187;       SI:         Offset to hotkey description string
    173188;       ES:         BDA segment (zero)
     
    177192;       AX, CX, DX, SI, DI
    178193;--------------------------------------------------------------------
    179 FormatDriveHotkeyString:
    180     ePUSH_T ax, PushHotkeyParamsAndFormat
    181     jmp     SHORT GetNonSelectedHotkeyDescriptionAttributeToDX
    182 
     194;; No work to do before going into FormatFunctionHotkeyString
     195FormatDriveHotkeyString  equ  GetNonSelectedHotkeyDescriptionAttributeToDX
    183196
    184197;--------------------------------------------------------------------
    185198; FormatFunctionHotkeyString
    186199;   Parameters:
    187 ;       AH:         Hotkey scancode to compare with BOOTVARS.hotkeyVars+HOTKEYVARS.bScancode
     200;       AL:         Scancode of function key, to know which if any to show as selected
     201;                   Later replaced with an 'F' for the call to the output routine
     202;       AH:         Second character for drive key string
    188203;       SI:         Offset to hotkey description string
    189 ;       DI low:     First character for drive key string
    190 ;       DI high:    Second character for drive key string
    191204;       ES:         BDA segment (zero)
    192205;   Returns:
     
    196209;--------------------------------------------------------------------
    197210FormatFunctionHotkeyString:
    198     ePUSH_T ax, PushHotkeyParamsAndFormat
    199     mov     cx, g_szBoot        ; Description parameter string
    200     cmp     [es:BOOTVARS.hotkeyVars+HOTKEYVARS.bScancode], ah
    201     jne     SHORT GetNonSelectedHotkeyDescriptionAttributeToDX
    202     ; Fall to GetSelectedHotkeyDescriptionAttributeToDX
    203 
    204 
    205 ;--------------------------------------------------------------------
    206 ; GetSelectedHotkeyDescriptionAttributeToDX
    207 ; GetNonSelectedHotkeyDescriptionAttributeToDX
    208 ;   Parameters:
    209 ;       CF:     Set if selected hotkey
    210 ;               Cleared if unselected hotkey
    211 ;       ES:     BDA segment (zero)
    212 ;   Returns:
    213 ;       DX:     Description Attribute
    214 ;   Corrupts registers:
    215 ;       AX
    216 ;--------------------------------------------------------------------
     211    xor     cx, cx      ; Null character, eaten in output routines
     212
     213    cmp     [es:BOOTVARS.hotkeyVars+HOTKEYVARS.bScancode], al
     214    mov     al, 'F'     ; Replace scancode with character for output
     215
    217216%ifdef MODULE_BOOT_MENU
    218 GetSelectedHotkeyDescriptionAttributeToDX:
    219     push    si
     217
    220218    mov     si, ATTRIBUTE_CHARS.cHurryTimeout       ; Selected hotkey
    221     jmp     SHORT GetDescriptionAttributeToDX
     219    jz      SHORT GetDescriptionAttributeToDX       ; From compare with bScancode above
    222220
    223221GetNonSelectedHotkeyDescriptionAttributeToDX:
    224     push    si
    225222    mov     si, ATTRIBUTE_CHARS.cHighlightedItem    ; Unselected hotkey
    226223
    227224    ; Display Library should not be called like this
    228225GetDescriptionAttributeToDX:
     226    xchg    dx, ax
    229227    call    MenuAttribute_GetToAXfromTypeInSI
    230     pop     si
    231228    xchg    dx, ax                  ; DX = Description attribute
    232     ret
    233 
    234 %else   ; No boot menu so use simpler attributes
    235 
    236 GetSelectedHotkeyDescriptionAttributeToDX:
     229    ;;  fall through to PushHotkeyParamsAndFormat
     230
     231%else ; MODULE_BOOT_MENU - No boot menu so use simpler attributes
     232
    237233    mov     dx, (COLOR_ATTRIBUTE(COLOR_YELLOW, COLOR_CYAN) << 8) | MONO_REVERSE_BLINK
    238     jmp     SHORT SelectAttributeFromDHorDLbasedOnVideoMode
     234    jz      SHORT SelectAttributeFromDHorDLbasedOnVideoMode         ; From compare with bScancode above
    239235
    240236GetNonSelectedHotkeyDescriptionAttributeToDX:
    241237    mov     dx, (COLOR_ATTRIBUTE(COLOR_BLACK, COLOR_CYAN) << 8) | MONO_REVERSE
     238
    242239SelectAttributeFromDHorDLbasedOnVideoMode:
    243240    mov     al, [es:BDA.bVidMode]
     
    248245    mov     dl, dh
    249246.AttributeLoadedToDL:
    250     ret
    251 
    252 %endif
     247    ;;  fall through to PushHotkeyParamsAndFormat       
     248
     249%endif ; MODULE_BOOT_MENU
    253250
    254251
     
    256253; PushHotkeyParamsAndFormat
    257254;   Parameters:
    258 ;       DI low:     First character
    259 ;       DI high:    Second character
     255;       BL:         First character
     256;       BH:         Second character
    260257;       DX:         Description Attribute
    261258;       CX:         Description string parameter
    262 ;       CS:SI:      Description string
     259;       CS:DI:      Description string
    263260;   Returns:
    264261;       Nothing
     
    270267    mov     bp, sp
    271268
    272     mov     ax, MONO_BRIGHT
    273     push    ax              ; Key attribute
    274     xchg    ax, di
    275     push    ax              ; First character
    276     xchg    al, ah
    277     push    ax              ; Second character
     269    mov     si, MONO_BRIGHT
     270
     271    push    si              ; Key attribute
     272    push    ax              ; First Character
     273    mov     al, ah
     274    push    ax              ; Second Character
    278275
    279276    push    dx              ; Description attribute
    280     push    si              ; Description string
     277    push    di              ; Description string
    281278    push    cx              ; Description string parameter
    282 
    283     push    di              ; Key attribute for last space
     279       
     280    push    si              ; Key attribute for last space
     281
    284282    mov     si, g_szHotkey
    285283    jmp     DetectPrint_FormatCSSIfromParamsInSSBP
     
    332330
    333331;--------------------------------------------------------------------
    334 ; ScanHotkeysFromKeyBufferAndStoreToBootvars
    335 ;   Parameters:
    336 ;       DS:     RAMVARS segment
    337 ;       ES:     BDA segment (zero)
    338 ;   Returns:
    339 ;       Nothing
    340 ;   Corrupts registers:
    341 ;       AX, CX
    342 ;--------------------------------------------------------------------
    343 ScanHotkeysFromKeyBufferAndStoreToBootvars:
     332; HotkeyBar_ScanHotkeysFromKeyBufferAndStoreToBootvars
     333;   Parameters:
     334;       DS:     RAMVARS segment
     335;       ES:     BDA segment (zero)
     336;   Returns:
     337;       AL:     Last scancode value
     338;   Corrupts registers:
     339;       AH, CX
     340;--------------------------------------------------------------------
     341HotkeyBar_ScanHotkeysFromKeyBufferAndStoreToBootvars:
    344342    call    Keyboard_GetKeystrokeToAX
    345343    jz      SHORT NoHotkeyToProcess
    346344
    347     ePUSH_T cx, ScanHotkeysFromKeyBufferAndStoreToBootvars
     345    ePUSH_T cx, HotkeyBar_ScanHotkeysFromKeyBufferAndStoreToBootvars
    348346    ; Fall to HotkeyBar_StoreHotkeyToBootvarsIfValidKeystrokeInAX
    349347
     
    357355;       ES:     BDA segment (zero)
    358356;   Returns:
    359 ;       CF:     Set if valid keystroke
    360 ;               Clear if invalid keystroke
    361 ;   Corrupts registers:
    362 ;       AX, CX, DI
     357;       AL:     Last scancode seen
     358;   Corrupts registers:
     359;       AH, CX, DI
    363360;--------------------------------------------------------------------
    364361HotkeyBar_StoreHotkeyToBootvarsIfValidKeystrokeInAX:
    365     ; Boot menu
    366 %ifdef MODULE_BOOT_MENU
    367     cmp     ah, BOOT_MENU_HOTKEY_SCANCODE   ; Display Boot Menu?
    368     je      SHORT .StoreFunctionHotkeyFromAH
    369 %endif
    370 
    371     ; ROM Boot
    372     cmp     ah, ROM_BOOT_HOTKEY_SCANCODE    ; ROM Boot?
    373     je      SHORT .StoreFunctionHotkeyFromAH
    374 
     362    mov     di, BOOTVARS.hotkeyVars+HOTKEYVARS.bScancode
     363
     364    ; All scancodes are saved, even if it wasn't a drive letter,
     365    ; which also covers our function key case.  Invalid function keys
     366    ; will not do anything (won't be printed, won't be accepted as input)       
     367    mov     [es:di], ah
     368       
    375369    ; Drive letter hotkeys remaining, allow 'a' to 'z'
    376370    call    Char_IsLowerCaseLetterInAL
    377     jnc     SHORT .KeystrokeIsNotValidHotkey
     371    jnc     SHORT .KeystrokeIsNotValidDriveLetter
    378372    xor     al, 32                  ; We want to print upper case letters
    379373
    380374    ; Clear HD First flag to assume Floppy Drive hotkey
    381     mov     di, BOOTVARS.hotkeyVars+HOTKEYVARS.bFlags
     375    dec     di
    382376    and     BYTE [es:di], ~FLG_HOTKEY_HD_FIRST
    383377
    384378    ; Determine if Floppy or Hard Drive hotkey
    385379    eMOVZX  cx, al                  ; Clear CH to clear scancode
    386     call    HotkeyBar_GetLetterForFirstHardDriveToAX
     380    call    DriveXlate_GetLetterForFirstHardDriveToAX
    387381    cmp     cl, al
    388382    jb      SHORT .StoreDriveLetter ; Store Floppy Drive letter
     
    392386
    393387.StoreDriveLetter:
    394     adc     di, BYTE 1          ; Add CF if Floppy Drive
     388    sbb     di, BYTE 1          ; Sub CF if Floppy Drive
    395389    xchg    ax, cx
    396390    mov     [es:di], al         ; AH = zero to clear function hotkey
    397391
    398 .StoreFunctionHotkeyFromAH:
    399     mov     [es:BOOTVARS.hotkeyVars+HOTKEYVARS.bScancode], ah
    400     stc     ; Valid hotkey
    401 
    402 .KeystrokeIsNotValidHotkey:
     392.KeystrokeIsNotValidDriveLetter:       
    403393NoHotkeyToProcess:
     394    mov     al, [es:BOOTVARS.hotkeyVars+HOTKEYVARS.bScancode]
    404395    ret
    405396
    406 
    407 ;--------------------------------------------------------------------
    408 ; HotkeyBar_GetSecondaryBootDriveNumberToDL
    409 ; HotkeyBar_GetPrimaryBootDriveNumberToDL
    410 ;   Parameters:
    411 ;       DS:     RAMVARS segment
    412 ;       ES:     BDA segment (zero)
    413 ;   Returns:
    414 ;       DL:     Drive selected as boot device
    415 ;   Corrupts registers:
    416 ;       AX, DH
    417 ;--------------------------------------------------------------------
    418 HotkeyBar_GetSecondaryBootDriveNumberToDL:
     397;--------------------------------------------------------------------
     398; HotkeyBar_GetBootDriveNumbersToDX
     399;   Parameters:
     400;       DS:     RAMVARS segment
     401;       ES:     BDA segment (zero)
     402;   Returns:
     403;       DX:     Drives selected as boot device, DL is primary
     404;   Corrupts registers:
     405;       AX
     406;--------------------------------------------------------------------
     407HotkeyBar_GetBootDriveNumbersToDX:
    419408    mov     dx, [es:BOOTVARS.hotkeyVars+HOTKEYVARS.wHddAndFddLetters]
     409    test    BYTE [es:BOOTVARS.hotkeyVars+HOTKEYVARS.bFlags], FLG_HOTKEY_HD_FIRST       
     410    jnz     .noflip
    420411    xchg    dl, dh
    421     jmp     SHORT GetBootDriveNumberFromLettersInDX
    422 
    423 HotkeyBar_GetPrimaryBootDriveNumberToDL:
    424     mov     dx, [es:BOOTVARS.hotkeyVars+HOTKEYVARS.wHddAndFddLetters]
    425 GetBootDriveNumberFromLettersInDX:
    426     test    BYTE [es:BOOTVARS.hotkeyVars+HOTKEYVARS.bFlags], FLG_HOTKEY_HD_FIRST
    427     eCMOVZ  dl, dh
    428     ; Fall to HotkeyBar_ConvertDriveLetterInDLtoDriveNumber
    429 
    430 
    431 ;--------------------------------------------------------------------
    432 ; HotkeyBar_ConvertDriveLetterInDLtoDriveNumber
    433 ;   Parameters:
    434 ;       DS:     RAMVARS segment
    435 ;       DL:     Drive letter ('A'...)
    436 ;   Returns:
    437 ;       DL:     Drive number (0xh for Floppy Drives, 8xh for Hard Drives)
    438 ;   Corrupts registers:
    439 ;       AX, DH
    440 ;--------------------------------------------------------------------
    441 HotkeyBar_ConvertDriveLetterInDLtoDriveNumber:
    442     call    HotkeyBar_GetLetterForFirstHardDriveToAX
    443     cmp     dl, al
    444     jb      SHORT .ConvertLetterInDLtoFloppyDriveNumber
    445 
    446     ; Convert letter in DL to Hard Drive number
    447     sub     dl, al
    448     or      dl, 80h
    449     ret
    450 
    451 .ConvertLetterInDLtoFloppyDriveNumber:
    452     sub     dl, DEFAULT_FLOPPY_DRIVE_LETTER
    453     ret
    454 
    455 
    456 ;--------------------------------------------------------------------
    457 ; HotkeyBar_ConvertDriveNumberFromDLtoDriveLetter
    458 ;   Parameters:
    459 ;       DL:     Drive number (0xh for Floppy Drives, 8xh for Hard Drives)
    460 ;       DS:     RAMVARS Segment
    461 ;   Returns:
    462 ;       DL:     Drive letter ('A'...)
    463 ;       CF:     Set if Hard Drive
    464 ;               Clear if Floppy Drive
    465 ;   Corrupts registers:
    466 ;       AX
    467 ;--------------------------------------------------------------------
    468 HotkeyBar_ConvertDriveNumberFromDLtoDriveLetter:
    469     test    dl, dl
    470     jns     SHORT .GetDefaultFloppyDrive
    471 
    472     ; Store default hard drive to boot from
    473     call    HotkeyBar_GetLetterForFirstHardDriveToAX
    474     sub     dl, 80h
    475     add     dl, al
    476     stc
    477     ret
    478 
    479 .GetDefaultFloppyDrive:
    480     add     dl, DEFAULT_FLOPPY_DRIVE_LETTER     ; Clears CF
    481     ret
    482 
    483 
    484 ;--------------------------------------------------------------------
    485 ; Returns letter for first hard disk. Usually it will be 'C' but it
    486 ; can be higher if more than two floppy drives are found.
    487 ;
    488 ; HotkeyBar_GetLetterForFirstHardDriveToAX
    489 ;   Parameters:
    490 ;       DS:     RAMVARS segment
    491 ;   Returns:
    492 ;       AX:     Upper case letter for first hard disk
    493 ;   Corrupts registers:
    494 ;       Nothing
    495 ;--------------------------------------------------------------------
    496 HotkeyBar_GetLetterForFirstHardDriveToAX:
    497     call    FloppyDrive_GetCountToAX
    498     add     al, DEFAULT_FLOPPY_DRIVE_LETTER
    499     MAX_U   al, DEFAULT_HARD_DRIVE_LETTER
    500     ret
     412.noflip:   
     413    call    DriveXlate_ConvertDriveLetterInDLtoDriveNumber
     414    xchg    dl, dh
     415    ; Fall to HotkeyBar_FallThroughTo_DriveXlate_ConvertDriveLetterInDLtoDriveNumber       
     416       
     417HotkeyBar_FallThroughTo_DriveXlate_ConvertDriveLetterInDLtoDriveNumber:     
     418
  • trunk/XTIDE_Universal_BIOS/Src/Strings.asm

    r491 r492  
    6565; Boot loader strings
    6666g_szTryToBoot:          db  "Booting %c",ANGLE_QUOTE_RIGHT,"%c",LF,CR,NULL
    67 g_szBootSectorNotFound: db  "Boot sector "
     67g_szBootSectorNotFound: db  "Boot sector "          ; String fall through...
    6868g_szNotFound:           db  "not found",LF,CR,NULL
    6969g_szReadError:          db  "Error %x!",LF,CR,NULL
     
    7272%ifdef MODULE_HOTKEYS
    7373; Hotkey Bar strings
    74 g_szFDD:        db  "FDD [%c]",NULL         ; "FDD [A]"
    75 g_szHDD:        db  "HDD [%c]",NULL         ; "HDD [C]"
    76 g_szBootMenu:   db  "%sMnu",NULL            ; "BootMnu"
    77 g_szRomBoot:    db  "Rom%s",NULL            ; "RomBoot"
    78 g_szBoot:       db  "Boot",NULL
    79 g_szHotkey:     db  "%A%c%c%A%s%A ",NULL    ; "C»HDD [A] ", "F2BootMnu " or "F8RomBoot "
    80 
     74g_szFDD:                db  "FDD [%c]",NULL         ; "FDD [A]"
     75g_szHDD:                db  "HDD [%c]",NULL         ; "HDD [C]"
     76%ifdef MODULE_BOOT_MENU
     77g_szBootMenu:           db  "BootMnu%c",NULL        ; "BootMnu", location of %c doesn't matter
     78%endif ; MODULE_BOOT_MENU
     79g_szHotkey:             db  "%A%c%c%A%s%A ",NULL    ; "C»HDD [A] ", "F2BootMnu " or "F8RomBoot "
     80%ifdef MODULE_SERIAL
     81g_szHotComDetect:       db  "ComDtct%c",NULL        ; "ComDtct", location of %c doesn't matter
     82%endif ; MODULE_SERIAL
     83%endif ; MODULE_HOTKEYS
     84
     85%ifdef MODULE_BOOT_MENU
     86g_szRomBootDash:        db  " -  "                  ; String fall through to g_szRomBoot
     87%endif
     88%ifdef MODULE_HOTKEYS OR MODULE_BOOT_MENU       
     89g_szRomBoot:            db  "Rom%cBoot", NULL       ; "RomBoot" or "Rom Boot"
     90%endif
     91       
    8192
    8293%ifdef MODULE_BOOT_MENU
     
    190201; which is checked at assembly time below.
    191202;
     203g_szDriveNumSpace:      db  " "                         ; leading space, used if drive number is less than 0fh
     204                                                        ; must come immediately before g_szDriveNum!
    192205g_szBootMenuPrintStart:
    193206g_szDriveNum:           db  "%x %s",NULL
     207g_szDriveNumBNSpace:    db  " "                         ; leading space, used if drive number is less than 0fh
     208                                                        ; must come immediately before g_szDriveNumBOOTNFO!
    194209g_szDriveNumBOOTNFO:    db  "%x %z",NULL
    195210g_szFloppyDrv:          db  "Floppy Drive %c",NULL
     
    201216        %error "g_szBootMenuPrint* strings must start on the same 256 byte page, required by the BootMenuPrint_* routines.  Please move this block up or down within Strings.asm"
    202217    %endif
     218    %if g_szDriveNumSpace+1 != g_szDriveNum || g_szDriveNumBNSpace+1 != g_szDriveNumBOOTNFO
     219        %error "g_szDriveNumSpace or g_szDriveNumBNSpace are out of position"
     220    %endif
    203221%endif
    204222
    205223%endif ; MODULE_BOOT_MENU
    206 %endif ; MODULE_HOTKEYS
    207224
    208225
  • trunk/XTIDE_Universal_BIOS/Src/StringsCompressed.asm

    r491 r492  
    129129                          db     48h,  75h,  75h,  7ah,  6fh,  74h, 0edh,  3ch,  24h,  3ch,  19h                                  ; compressed
    130130
    131 g_szBootSectorNotFound: ; db    "Boot sector "
     131g_szBootSectorNotFound: ; db    "Boot sector "          ; String fall through...
    132132                        ; db     42h,  6fh,  6fh,  74h,  20h,  73h,  65h,  63h,  74h,  6fh,  72h,  20h    ; uncompressed
    133133                          db     48h,  75h,  75h, 0fah,  79h,  6bh,  69h,  7ah,  75h, 0f8h                ; compressed
     
    145145%ifdef MODULE_HOTKEYS
    146146; Hotkey Bar strings
    147 g_szFDD:        ; db    "FDD [%c]",NULL         ; "FDD [A]"
    148                 ; db     46h,  44h,  44h,  20h,  5bh,  25h,  63h,  5dh,  00h    ; uncompressed
    149                   db     4ch,  4ah, 0cah,  61h,  3ch, 0a3h                      ; compressed
    150 
    151 g_szHDD:        ; db    "HDD [%c]",NULL         ; "HDD [C]"
    152                 ; db     48h,  44h,  44h,  20h,  5bh,  25h,  63h,  5dh,  00h    ; uncompressed
    153                   db     4eh,  4ah, 0cah,  61h,  3ch, 0a3h                      ; compressed
    154 
    155 g_szBootMenu:   ; db    "%sMnu",NULL            ; "BootMnu"
    156                 ; db     25h,  73h,  4dh,  6eh,  75h,  00h    ; uncompressed
    157                   db     3dh,  53h,  74h, 0bbh                ; compressed
    158 
    159 g_szRomBoot:    ; db    "Rom%s",NULL            ; "RomBoot"
    160                 ; db     52h,  6fh,  6dh,  25h,  73h,  00h    ; uncompressed
    161                   db     58h,  75h,  73h,  1dh                ; compressed
    162 
    163 g_szBoot:       ; db    "Boot",NULL
    164                 ; db     42h,  6fh,  6fh,  74h,  00h    ; uncompressed
    165                   db     48h,  75h,  75h, 0bah          ; compressed
    166 
    167 g_szHotkey:     ; db    "%A%c%c%A%s%A ",NULL    ; "C»HDD [A] ", "F2BootMnu " or "F8RomBoot "
    168                 ; db     25h,  41h,  25h,  63h,  25h,  63h,  25h,  41h,  25h,  73h,  25h,  41h,  20h,  00h    ; uncompressed
    169                   db     3bh,  3ch,  3ch,  3bh,  3dh,  3bh,  00h                                              ; compressed
    170 
     147g_szFDD:                ; db    "FDD [%c]",NULL         ; "FDD [A]"
     148                        ; db     46h,  44h,  44h,  20h,  5bh,  25h,  63h,  5dh,  00h    ; uncompressed
     149                          db     4ch,  4ah, 0cah,  61h,  3ch, 0a3h                      ; compressed
     150
     151g_szHDD:                ; db    "HDD [%c]",NULL         ; "HDD [C]"
     152                        ; db     48h,  44h,  44h,  20h,  5bh,  25h,  63h,  5dh,  00h    ; uncompressed
     153                          db     4eh,  4ah, 0cah,  61h,  3ch, 0a3h                      ; compressed
     154
     155%ifdef MODULE_BOOT_MENU
     156g_szBootMenu:           ; db    "BootMnu%c",NULL        ; "BootMnu", location of %c doesn't matter
     157                        ; db     42h,  6fh,  6fh,  74h,  4dh,  6eh,  75h,  25h,  63h,  00h    ; uncompressed
     158                          db     48h,  75h,  75h,  7ah,  53h,  74h,  7bh,  1ch                ; compressed
     159
     160%endif ; MODULE_BOOT_MENU
     161g_szHotkey:             ; db    "%A%c%c%A%s%A ",NULL    ; "C»HDD [A] ", "F2BootMnu " or "F8RomBoot "
     162                        ; db     25h,  41h,  25h,  63h,  25h,  63h,  25h,  41h,  25h,  73h,  25h,  41h,  20h,  00h    ; uncompressed
     163                          db     3bh,  3ch,  3ch,  3bh,  3dh,  3bh,  00h                                              ; compressed
     164
     165%ifdef MODULE_SERIAL
     166g_szHotComDetect:       ; db    "ComDtct%c",NULL        ; "ComDtct", location of %c doesn't matter
     167                        ; db     43h,  6fh,  6dh,  44h,  74h,  63h,  74h,  25h,  63h,  00h    ; uncompressed
     168                          db     49h,  75h,  73h,  4ah,  7ah,  69h,  7ah,  1ch                ; compressed
     169
     170%endif ; MODULE_SERIAL
     171%endif ; MODULE_HOTKEYS
     172
     173%ifdef MODULE_BOOT_MENU
     174g_szRomBootDash:        ; db    " -  "                  ; String fall through to g_szRomBoot
     175                        ; db     20h,  2dh,  20h,  20h    ; uncompressed
     176                          db     20h,  28h,  20h,  20h    ; compressed
     177
     178%endif
     179%ifdef MODULE_HOTKEYS OR MODULE_BOOT_MENU       
     180g_szRomBoot:            ; db    "Rom%cBoot", NULL       ; "RomBoot" or "Rom Boot"
     181                        ; db     52h,  6fh,  6dh,  25h,  63h,  42h,  6fh,  6fh,  74h,  00h    ; uncompressed
     182                          db     58h,  75h,  73h,  3ch,  48h,  75h,  75h, 0bah                ; compressed
     183
     184%endif
    171185
    172186
     
    353367; which is checked at assembly time below.
    354368;
     369g_szDriveNumSpace:      ; db    " "                         ; leading space, used if drive number is less than 0fh
     370                        ; db     20h    ; uncompressed
     371                          db     20h    ; compressed
     372
     373; must come immediately before g_szDriveNum!
    355374g_szBootMenuPrintStart:
    356375g_szDriveNum:           ; db    "%x %s",NULL
     
    358377                          db     37h,  20h,  1dh                      ; compressed
    359378
     379g_szDriveNumBNSpace:    ; db    " "                         ; leading space, used if drive number is less than 0fh
     380                        ; db     20h    ; uncompressed
     381                          db     20h    ; compressed
     382
     383; must come immediately before g_szDriveNumBOOTNFO!
    360384g_szDriveNumBOOTNFO:    ; db    "%x %z",NULL
    361385                        ; db     25h,  78h,  20h,  25h,  7ah,  00h    ; uncompressed
     
    376400%error "g_szBootMenuPrint* strings must start on the same 256 byte page, required by the BootMenuPrint_* routines.  Please move this block up or down within Strings.asm"
    377401%endif
     402%if g_szDriveNumSpace+1 != g_szDriveNum || g_szDriveNumBNSpace+1 != g_szDriveNumBOOTNFO
     403%error "g_szDriveNumSpace or g_szDriveNumBNSpace are out of position"
     404%endif
    378405%endif
    379406
    380407%endif ; MODULE_BOOT_MENU
    381 %endif ; MODULE_HOTKEYS
    382408
    383409
     
    528554;; translated usage stats
    529555;; 33:1
    530 ;; 32:29
     556;; 32:34
    531557;; 181:1
    532558;; 53:2
     
    543569;; 49:1
    544570;; 56:7
    545 ;; 45:1
     571;; 45:2
    546572;; 175:1
    547573;; 171:2
     
    554580;; 5-u:2
    555581;; x:5
    556 ;; s:16
     582;; s:14
    557583;; 5-x:1
    558584;; nl:12
    559585;; 2-I:1
    560586;; u:6
    561 ;; c:10
     587;; c:13
    562588;; z:2
    563589;; total format: 11
     
    572598;; 64,@:1
    573599;; 65,A:5
    574 ;; 66,B:8
    575 ;; 67,C:2
    576 ;; 68,D:10
     600;; 66,B:9
     601;; 67,C:3
     602;; 68,D:11
    577603;; 69,E:3
    578604;; 70,F:3
     
    605631;; 97,a:7
    606632;; 98,b:
    607 ;; 99,c:5
     633;; 99,c:6
    608634;; 100,d:6
    609635;; 101,e:15
     
    615641;; 107,k:4
    616642;; 108,l:5
    617 ;; 109,m:1
     643;; 109,m:2
    618644;; 110,n:11
    619 ;; 111,o:17
     645;; 111,o:20
    620646;; 112,p:3
    621647;; 113,q:
    622648;; 114,r:11
    623649;; 115,s:7
    624 ;; 116,t:12
     650;; 116,t:15
    625651;; 117,u:4
    626652;; 118,v:3
  • trunk/XTIDE_Universal_BIOS/Src/VariablesAndDPTs/BootVars.asm

    r491 r492  
    6464;--------------------------------------------------------------------
    6565BootVars_StoreHotkeyForDriveNumberInDL:
    66     mov     WORD [es:BOOTVARS.hotkeyVars+HOTKEYVARS.wHddAndFddLetters], DEFAULT_HARD_DRIVE_LETTER | (DEFAULT_FLOPPY_DRIVE_LETTER<<8)
    67     call    HotkeyBar_ConvertDriveNumberFromDLtoDriveLetter
     66    mov     WORD [es:BOOTVARS.hotkeyVars+HOTKEYVARS.wHddAndFddLetters], DEFAULT_FLOPPY_DRIVE_LETTER | (DEFAULT_HARD_DRIVE_LETTER<<8)
     67    call    DriveXlate_ConvertDriveNumberFromDLtoDriveLetter
    6868    jmp     HotkeyBar_StoreHotkeyToBootvarsForDriveLetterInDL
    6969
  • trunk/XTIDE_Universal_BIOS/Src/VariablesAndDPTs/RamVars.asm

    r489 r492  
    107107.InitializeDriveTranslationAndReturn:
    108108    pop     es
    109 %ifdef MODULE_HOTKEYS
     109%ifdef MODULE_DRIVEXLATE
    110110    jmp     DriveXlate_Reset
    111111%else
     
    164164;       AX:     Total hard disk count
    165165;   Corrupts registers:
    166 ;       CX
     166;       BX
    167167;--------------------------------------------------------------------
    168168%ifdef MODULE_BOOT_MENU
     
    171171    push    ds
    172172    LOAD_BDA_SEGMENT_TO ds, cx
    173     mov     cl, [BDA.bHDCount]
    174     MAX_U   al, cl
     173    mov     bl, [BDA.bHDCount]
     174    MAX_U   al, bl
    175175    pop     ds
    176176    ret
Note: See TracChangeset for help on using the changeset viewer.