source: xtideuniversalbios/trunk/XTIDE_Universal_BIOS/Src/Handlers/Int19hMenu.asm@ 121

Last change on this file since 121 was 121, checked in by Tomi Tilli, 14 years ago

Changes to XTIDE Universal BIOS:

  • Endianness is now corrected for ATA device names.
  • Converted all BootVars.asm functions to macros in BootVars.inc.
  • Display library is now initialized second time before trying to display boot menu.
File size: 3.0 KB
RevLine 
[90]1; Project name : XTIDE Universal BIOS
[3]2; Description : Int 19h BIOS functions for Boot Menu.
3
4; Section containing code
5SECTION .text
6
7;--------------------------------------------------------------------
8; Initial Boot Menu Loader.
9; Prepares BOOTVARS for displaying Boot Menu and accepting
10; callbacks from INT 18h and 19h.
11;
12; Int19hMenu_BootLoader
13; Parameters:
14; Nothing
15; Returns:
16; Jumps to Int19hMenu_Display, then never returns
17;--------------------------------------------------------------------
18ALIGN JUMP_ALIGN
19Int19hMenu_BootLoader:
[121]20 ; Store POST stack pointer
[3]21 LOAD_BDA_SEGMENT_TO ds, ax
[121]22 STORE_POST_STACK_POINTER
[3]23
24 ; Install new INT 19h handler now that BOOTVARS has been initialized
[96]25 mov WORD [INTV_BOOTSTRAP*4], DisplayBootMenu
[3]26 mov WORD [INTV_BOOTSTRAP*4+2], cs
[96]27 ; Fall to DisplayBootMenu
[3]28
29;--------------------------------------------------------------------
[96]30; DisplayBootMenu
[3]31; Parameters:
32; Nothing
33; Returns:
34; Never returns
35;--------------------------------------------------------------------
36ALIGN JUMP_ALIGN
[96]37DisplayBootMenu:
[121]38 SWITCH_TO_BOOT_MENU_STACK
39 CALL_DISPLAY_LIBRARY InitializeDisplayContext
[3]40 call RamVars_GetSegmentToDS
[96]41 ; Fall to .ProcessMenuSelectionsUntilBootable
[3]42
43;--------------------------------------------------------------------
[96]44; .ProcessMenuSelectionsUntilBootable
[3]45; Parameters:
46; DS: RAMVARS segment
47; Returns:
48; Never returns
49;--------------------------------------------------------------------
50ALIGN JUMP_ALIGN
[96]51.ProcessMenuSelectionsUntilBootable:
[95]52 call BootMenu_DisplayAndReturnSelection
53 call DriveXlate_ToOrBack ; Translate drive number
[96]54 call BootSector_TryToLoadFromDriveDL
55 jnc SHORT .ProcessMenuSelectionsUntilBootable ; Boot failure, show menu again
[121]56 SWITCH_BACK_TO_POST_STACK
[96]57 ; Fall to JumpToBootSector
[3]58
[96]59;--------------------------------------------------------------------
60; JumpToBootSector
61; Parameters:
62; DL: Drive to boot from (translated, 00h or 80h)
63; ES:BX: Ptr to boot sector
64; Returns:
65; Never returns
66;--------------------------------------------------------------------
67ALIGN JUMP_ALIGN
68JumpToBootSector:
69 push es ; Push boot sector segment
70 push bx ; Push boot sector offset
71 call ClearSegmentsForBoot
72 retf
[3]73
[96]74
[3]75;--------------------------------------------------------------------
[95]76; Int19hMenu_RomBoot
[3]77; Parameters:
78; DS: RAMVARS segment
79; Returns:
[95]80; Never returns
[3]81;--------------------------------------------------------------------
82ALIGN JUMP_ALIGN
[95]83Int19hMenu_RomBoot:
[121]84 SWITCH_BACK_TO_POST_STACK
[96]85 call ClearSegmentsForBoot
[95]86 int INTV_BOOT_FAILURE ; Never returns
[96]87
88
89;--------------------------------------------------------------------
90; ClearSegmentsForBoot
91; Parameters:
92; Nothing
93; Returns:
[121]94; DX: Zero
[96]95; DS=ES: Zero
96; Corrupts registers:
[121]97; Nothing
[96]98;--------------------------------------------------------------------
99ALIGN JUMP_ALIGN
100ClearSegmentsForBoot:
[121]101 xor dx, dx ; Device supported by INT 13h
102 mov ds, dx
103 mov es, dx
[96]104 ret
Note: See TracBrowser for help on using the repository browser.