Changeset 528 in xtideuniversalbios for trunk/XTIDE_Universal_BIOS
- Timestamp:
- Mar 22, 2013, 5:43:54 PM (12 years ago)
- google:author:
- aitotat@gmail.com
- Location:
- trunk/XTIDE_Universal_BIOS
- Files:
-
- 9 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/XTIDE_Universal_BIOS/Inc/BootVars.inc
r526 r528 57 57 .wFddAndHddLetters: 58 58 .bFddLetter resb 1 ; Floppy Drive letter hotkey (upper case) 59 .bHddLetter resb 1 ; Hard Drive letter hotkey (upper case) 59 .bHddLetter resb 1 ; Hard Drive letter hotkey (upper case). Must be after .bFddLetter! 60 60 .bFlags resb 1 ; Must be just after .bHddLetter! (dependency in Hotkeybar.asm) 61 61 .bScancode resb 1 ; Function hotkey scancode, must be just after .bFlags! -
trunk/XTIDE_Universal_BIOS/Inc/HotkeyBar.inc
r526 r528 21 21 %define HOTKEYBAR_INC 22 22 23 MIN_TIME_TO_DISPLAY_HOTKEY_BAR EQU ( 2000/55) ; 2000 ms23 MIN_TIME_TO_DISPLAY_HOTKEY_BAR EQU (4000/55) ; 4000 ms 24 24 25 25 ROM_BOOT_HOTKEY_SCANCODE EQU 42h ; F8 -
trunk/XTIDE_Universal_BIOS/Src/Handlers/Int19h.asm
r526 r528 103 103 ; Never returns (loads operating system) 104 104 ;-------------------------------------------------------------------- 105 SelectDriveToBootFrom:106 107 105 ; The following macro could be easily inlined below. Why a macro? Depending on the combination 108 106 ; of MODULE_HOTKEYS or MODULE_BOOT_MENU, this code needs to either come before or after the … … 112 110 push dx ; it's OK if this is left on the stack, if we are 113 111 ; successful, the following call does not return 114 call TryToBootFromPrimaryOrSecondaryBootDevice_AndBoot112 call BootSector_TryToLoadFromDriveDL_AndBoot 115 113 pop dx 116 114 mov dl, dh 117 call TryToBootFromPrimaryOrSecondaryBootDevice_AndBoot115 call BootSector_TryToLoadFromDriveDL_AndBoot 118 116 %endmacro 119 117 120 %ifdef MODULE_HOTKEYS 121 call HotkeyBar_ScanHotkeysFromKeyBufferAndStoreToBootvars 118 119 SelectDriveToBootFrom: ; Function starts here 120 %ifdef MODULE_HOTKEYS 121 call HotkeyBar_UpdateDuringDriveDetection 122 mov al, [es:BOOTVARS.hotkeyVars+HOTKEYVARS.bScancode] 122 123 cmp al, ROM_BOOT_HOTKEY_SCANCODE 123 je .RomBoot; CF clear so ROM boot124 je SHORT .RomBoot ; CF clear so ROM boot 124 125 %ifdef MODULE_BOOT_MENU 125 126 cmp al, BOOT_MENU_HOTKEY_SCANCODE 126 je .BootMenu 127 %endif 127 je SHORT .BootMenu 128 %endif ; MODULE_BOOT_MENU 129 130 .TryUsingHotKeysCode: 128 131 call HotkeyBar_GetBootDriveNumbersToDX 129 .TryUsingHotKeysCode: 132 call DriveXlate_SetDriveToSwap ; Enable primary boot device translation 133 xchg dl, dh 134 call DriveXlate_SetDriveToSwap ; Enable secondary boot device translation 135 xchg dl, dh 136 call DriveXlate_ToOrBack ; Tranlate now so boot device will appear as 00h or 80h to OS 130 137 TRY_TO_BOOT_DL_AND_DH_DRIVES 131 138 ;; falls through to boot menu, if it is present. If not present, falls through to rom boot. 132 139 %endif ; MODULE_HOTKEYS 133 140 141 134 142 %ifdef MODULE_BOOT_MENU 135 143 .BootMenu: 136 144 call BootMenu_DisplayAndReturnDriveInDLRomBootClearCF 137 jnc .RomBoot ; CF clear so ROM boot 138 145 jnc SHORT .RomBoot ; CF clear so ROM boot 146 147 call DriveXlate_Reset 148 %ifdef MODULE_HOTKEYS 149 jmp SHORT .TryUsingHotKeysCode ; Selected drive stored as hotkey 150 %else ; Boot menu without hotkeys, secondary boot drive is always 00h or 80h 139 151 mov dh, dl ; Setup for secondary drive 140 152 not dh ; Floppy goes to HD, or vice versa 141 153 and dh, 80h ; Go to first drive of the floppy or HD set 142 143 %ifdef MODULE_HOTKEYS 144 jmp .TryUsingHotKeysCode 145 %else 154 call DriveXlate_SetDriveToSwap 155 call DriveXlate_ToOrBack 146 156 TRY_TO_BOOT_DL_AND_DH_DRIVES 147 jmp .BootMenu 148 %endif 157 jmp SHORT .BootMenu ; Show boot menu again 158 %endif ; MODULE_HOTKEYS 159 149 160 %endif ; MODULE_BOOT_MENU 150 161 162 ; No hotkeys and no boot menu means fixed "A then C" boot order 151 163 %ifndef MODULE_HOTKEYS OR MODULE_BOOT_MENU 152 xor dl, dl ; Try to boot from Floppy Drive A153 call TryToBootFromPrimaryOrSecondaryBootDevice_AndBoot154 mov dl, 80h; Try to boot from Hard Drive C155 call TryToBootFromPrimaryOrSecondaryBootDevice_AndBoot164 xor dl, dl ; Try to boot from Floppy Drive A 165 call BootSector_TryToLoadFromDriveDL_AndBoot 166 mov dl, DEFAULT_HARD_DRIVE_LETTER ; Try to boot from Hard Drive C 167 call BootSector_TryToLoadFromDriveDL_AndBoot 156 168 %endif 157 169 … … 201 213 .romboot: 202 214 int BIOS_BOOT_FAILURE_INTERRUPT_18h ; Never returns 203 204 205 ;--------------------------------------------------------------------206 ; TryToBootFromPrimaryOrSecondaryBootDevice_AndBoot207 ; Parameters208 ; DL: Drive selected as boot device209 ; DS: RAMVARS segment210 ; ES: BDA and interrupt vector segment (zero)211 ; Returns:212 ; DL: Drive to boot from (translated, 00h or 80h)213 ; CF: Set for Boot Sector Boot214 ; Clear for ROM Boot215 ; ES:BX: (if CF set) Ptr to boot sector216 ; Corrupts registers:217 ; AX, CX, DH, SI, DI, (DL if failed to read boot sector)218 ;--------------------------------------------------------------------219 %ifndef MODULE_DRIVEXLATE220 TryToBootFromPrimaryOrSecondaryBootDevice_AndBoot EQU BootSector_TryToLoadFromDriveDL_AndBoot221 222 %else223 TryToBootFromPrimaryOrSecondaryBootDevice_AndBoot:224 call DriveXlate_SetDriveToSwap225 call DriveXlate_ToOrBack226 ; fall through to TryToBoot_FallThroughTo_BootSector_TryToLoadFromDriveDL_AndBoot227 228 TryToBoot_FallThroughTo_BootSector_TryToLoadFromDriveDL_AndBoot:229 ; fall through to BootSector_TryToLoadFromDriveDL_AndBoot230 %endif231 -
trunk/XTIDE_Universal_BIOS/Src/Handlers/Int19h/BootSector.asm
r526 r528 73 73 ret 74 74 75 %ifndef CHECK_FOR_UNUSED_ENTRYPOINTS76 %ifdef MODULE_DRIVEXLATE77 %if TryToBoot_FallThroughTo_BootSector_TryToLoadFromDriveDL_AndBoot <> BootSector_TryToLoadFromDriveDL_AndBoot78 %error "TryToBoot_FallThroughTo_BootSector_TryToLoadFromDriveDL_AndBoot <> BootSector_TryToLoadFromDriveDL_AndBoot, BootSector must come immediately after int19h.asm"79 %endif80 %endif81 %endif82 75 83 76 ;-------------------------------------------------------------------- -
trunk/XTIDE_Universal_BIOS/Src/Initialization/DetectDrives.asm
r526 r528 47 47 mov bh, MASK_DRVNHEAD_SET | FLG_DRVNHEAD_DRV 48 48 call StartDetectionWithDriveSelectByteInBHandStringInCX 49 50 %ifdef MODULE_HOTKEYS51 call HotkeyBar_ScanHotkeysFromKeyBufferAndStoreToBootvars ; Done here while CX is still protected52 %endif53 49 54 50 pop cx -
trunk/XTIDE_Universal_BIOS/Src/Menus/BootMenu/BootMenuEvent.asm
r526 r528 69 69 MENUEVENT_ExitMenu equ (BootMenuEvent_Completed - FirstEvent) 70 70 MENUEVENT_ItemHighlightedFromCX equ (EventItemHighlightedFromCX - FirstEvent) 71 MENUEVENT_KeyStrokeInAX equ (EventKeyStrokeInAX - FirstEvent) 71 72 MENUEVENT_ItemSelectedFromCX equ (EventItemSelectedFromCX - FirstEvent) 72 73 MENUEVENT_RefreshTitle equ (BootMenuPrint_TitleStrings - FirstEvent) … … 94 95 dw EventNotHandled ; MENUEVENT.IdleProcessing 95 96 dw EventItemHighlightedFromCX ; MENUEVENT.ItemHighlightedFromCX 97 96 98 dw EventItemSelectedFromCX ; MENUEVENT.ItemSelectedFromCX 97 99 dw EventKeyStrokeInAX ; MENUEVENT.KeyStrokeInAX … … 161 163 EventItemHighlightedFromCX: 162 164 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 163 174 call BootMenu_GetDriveToDXforMenuitemInCX 164 jnc .noDriveSwap175 jnc SHORT .noDriveSwapSinceRomBootSelected 165 176 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 167 198 168 199 ; Redraw changes in drive numbers … … 181 212 182 213 ;-------------------------------------------------------------------- 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 228 EventKeyStrokeInAX: 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 ;-------------------------------------------------------------------- 183 239 ; EventItemSelectedFromCX 184 240 ; Parameters … … 223 279 BootMenuEvent_Completed: 224 280 stc 225 ret 281 %ifndef MODULE_HOTKEYS 282 EventKeyStrokeInAX: 283 %endif 284 ret -
trunk/XTIDE_Universal_BIOS/Src/Menus/DriveXlate.asm
r526 r528 143 143 ; Nothing 144 144 ; Corrupts registers: 145 ; AX, DI, DL145 ; Nothing 146 146 ;-------------------------------------------------------------------- 147 147 DriveXlate_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 150 151 151 152 ;-------------------------------------------------------------------- … … 154 155 ; DriveXlate_SetDriveToSwap 155 156 ; 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 157 159 ; DS: RAMVARS segment 158 160 ; Returns: 159 161 ; Nothing 160 162 ; Corrupts registers: 161 ; AX, DI163 ; Nothing 162 164 ;-------------------------------------------------------------------- 163 165 DriveXlate_SetDriveToSwap: 164 mov ax, 8000h ; Default mapping (no translation)165 166 test dl, dl ; Floppy drive? 166 167 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 169 173 .SetHardDriveToSwap: 170 mov ah, dl ; Store HD translation 171 mov WORD [RAMVARS.xlateVars+XLATEVARS.wFDandHDswap], ax 174 mov [RAMVARS.xlateVars+XLATEVARS.bHDSwap], dl 172 175 ret -
trunk/XTIDE_Universal_BIOS/Src/Menus/HotkeyBar.asm
r526 r528 22 22 23 23 ;-------------------------------------------------------------------- 24 ; Scans key presses and draws any hotkey changes. 25 ; 24 26 ; HotkeyBar_UpdateDuringDriveDetection 25 27 ; Parameters: … … 32 34 ;-------------------------------------------------------------------- 33 35 HotkeyBar_UpdateDuringDriveDetection: 34 call HotkeyBar_ScanHotkeysFromKeyBufferAndStoreToBootvars36 call ScanHotkeysFromKeyBufferAndStoreToBootvars 35 37 ; Fall to HotkeyBar_DrawToTopOfScreen 36 38 … … 311 313 312 314 ;-------------------------------------------------------------------- 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 ;-------------------------------------------------------------------- 325 HotkeyBar_StoreHotkeyToBootvarsForDriveNumberInDL: 326 call DriveXlate_ConvertDriveNumberFromDLtoDriveLetter 327 ; Fall to StoreHotkeyToBootvarsForDriveLetterInDL 328 329 330 ;-------------------------------------------------------------------- 331 ; StoreHotkeyToBootvarsForDriveLetterInDL 314 332 ; Parameters: 315 333 ; DS: RAMVARS segment … … 321 339 ; AX, CX, DI 322 340 ;-------------------------------------------------------------------- 323 HotkeyBar_StoreHotkeyToBootvarsForDriveLetterInDL:341 StoreHotkeyToBootvarsForDriveLetterInDL: 324 342 eMOVZX ax, dl 325 343 or al, 32 ; Upper case drive letter to lower case keystroke … … 328 346 329 347 ;-------------------------------------------------------------------- 330 ; HotkeyBar_ScanHotkeysFromKeyBufferAndStoreToBootvars348 ; ScanHotkeysFromKeyBufferAndStoreToBootvars 331 349 ; Parameters: 332 350 ; DS: RAMVARS segment … … 337 355 ; AH, CX 338 356 ;-------------------------------------------------------------------- 339 HotkeyBar_ScanHotkeysFromKeyBufferAndStoreToBootvars:357 ScanHotkeysFromKeyBufferAndStoreToBootvars: 340 358 call Keyboard_GetKeystrokeToAX 341 359 jz SHORT NoHotkeyToProcess 342 360 343 ePUSH_T cx, HotkeyBar_ScanHotkeysFromKeyBufferAndStoreToBootvars 361 ; Prepare to read another key from buffer 362 ePUSH_T cx, ScanHotkeysFromKeyBufferAndStoreToBootvars 344 363 ; Fall to HotkeyBar_StoreHotkeyToBootvarsIfValidKeystrokeInAX 345 364 … … 354 373 ; Returns: 355 374 ; AL: Last scancode seen 375 ; CF: Set if valid hotkey in AL 376 ; Clear if scancode in AL is not for any hotkey 356 377 ; Corrupts registers: 357 378 ; AH, CX, DI … … 387 408 xchg ax, cx 388 409 mov [es:di], al 410 stc ; Valid hotkey scancode returned in AL 389 411 390 412 .KeystrokeIsNotValidDriveLetter: … … 392 414 mov al, [es:BOOTVARS.hotkeyVars+HOTKEYVARS.bScancode] 393 415 ret 416 394 417 395 418 ;-------------------------------------------------------------------- -
trunk/XTIDE_Universal_BIOS/Src/VariablesAndDPTs/BootVars.asm
r526 r528 41 41 mov di, BOOTVARS.rgDrvDetectInfo ; We must not initialize anything before this! 42 42 xchg cx, ax 43 %ifndef MODULE_HOTKEYS 44 jmp Memory_ZeroESDIwithSizeInCX 43 45 44 % ifdef MODULE_HOTKEYS46 %else ; if MODULE_HOTKEYS 45 47 call Memory_ZeroESDIwithSizeInCX 46 48 47 49 ; Initialize HOTKEYVARS by storing default drives to boot from 50 call BootVars_StoreDefaultDriveLettersToHotkeyVars 51 mov dl, [cs:ROMVARS.bBootDrv] 52 jmp HotkeyBar_StoreHotkeyToBootvarsForDriveNumberInDL 53 54 55 ;-------------------------------------------------------------------- 56 ; BootVars_StoreDefaultDriveLettersToHotkeyVars 57 ; Parameters: 58 ; ES: BDA Segment 59 ; Returns: 60 ; Nothing 61 ; Corrupts registers: 62 ; Nothing 63 ;-------------------------------------------------------------------- 64 BootVars_StoreDefaultDriveLettersToHotkeyVars: 48 65 mov WORD [es:BOOTVARS.hotkeyVars+HOTKEYVARS.wFddAndHddLetters], DEFAULT_FLOPPY_DRIVE_LETTER | (DEFAULT_HARD_DRIVE_LETTER<<8) 49 mov dl, [cs:ROMVARS.bBootDrv] 50 call DriveXlate_ConvertDriveNumberFromDLtoDriveLetter 51 jmp HotkeyBar_StoreHotkeyToBootvarsForDriveLetterInDL 66 ret 52 67 53 %else54 jmp Memory_ZeroESDIwithSizeInCX55 68 %endif ; MODULE_HOTKEYS
Note:
See TracChangeset
for help on using the changeset viewer.