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

Last change on this file since 186 was 152, checked in by Tomi Tilli, 13 years ago

Changes to XTIDE Universal BIOS:

  • XTIDE mod should now be supported (untested).
  • Interrupt Service Routine no longer requires variable from RAMVARS.
  • Some small improvements.
File size: 3.0 KB
Line 
1; Project name : XTIDE Universal BIOS
2; Description : Int 19h BIOS functions for Boot Menu.
3
4; Section containing code
5SECTION .text
6
7;--------------------------------------------------------------------
8; Boot Menu Loader.
9;
10; Int19hMenu_BootLoader
11; Parameters:
12; Nothing
13; Returns:
14; Jumps to Int19hMenu_Display, then never returns
15;--------------------------------------------------------------------
16ALIGN JUMP_ALIGN
17Int19hMenu_BootLoader:
18 ; Store POST stack pointer
19 LOAD_BDA_SEGMENT_TO ds, ax
20 STORE_POST_STACK_POINTER
21 SWITCH_TO_BOOT_MENU_STACK
22 call RamVars_GetSegmentToDS
23 ; Fall to .InitializeDisplayForBootMenu
24
25;--------------------------------------------------------------------
26; .InitializeDisplayForBootMenu
27; Parameters:
28; Nothing
29; Returns:
30; Nothing
31; Corrupts registers:
32; AX, DI
33;--------------------------------------------------------------------
34.InitializeDisplayForBootMenu:
35 ; Change display mode if necessary
36 mov ax, [cs:ROMVARS.wDisplayMode] ; AH 00h = Set Video Mode
37 cmp al, DEFAULT_TEXT_MODE
38 je SHORT .InitializeDisplayLibrary
39 int BIOS_VIDEO_INTERRUPT_10h
40.InitializeDisplayLibrary:
41 call BootMenuPrint_InitializeDisplayContext
42 ; Fall to .ProcessMenuSelectionsUntilBootable
43
44;--------------------------------------------------------------------
45; .ProcessMenuSelectionsUntilBootable
46; Parameters:
47; DS: RAMVARS segment
48; Returns:
49; Never returns
50;--------------------------------------------------------------------
51ALIGN JUMP_ALIGN
52.ProcessMenuSelectionsUntilBootable:
53 call BootMenu_DisplayAndReturnSelection
54 call DriveXlate_ToOrBack ; Translate drive number
55 call BootSector_TryToLoadFromDriveDL
56 jnc SHORT .ProcessMenuSelectionsUntilBootable ; Boot failure, show menu again
57 SWITCH_BACK_TO_POST_STACK
58 ; Fall to JumpToBootSector
59
60;--------------------------------------------------------------------
61; JumpToBootSector
62; Parameters:
63; DL: Drive to boot from (translated, 00h or 80h)
64; ES:BX: Ptr to boot sector
65; Returns:
66; Never returns
67;--------------------------------------------------------------------
68ALIGN JUMP_ALIGN
69JumpToBootSector:
70 push es ; Push boot sector segment
71 push bx ; Push boot sector offset
72 call ClearSegmentsForBoot
73 retf
74
75
76;--------------------------------------------------------------------
77; Int19hMenu_RomBoot
78; Parameters:
79; DS: RAMVARS segment
80; Returns:
81; Never returns
82;--------------------------------------------------------------------
83ALIGN JUMP_ALIGN
84Int19hMenu_RomBoot:
85 SWITCH_BACK_TO_POST_STACK
86 call ClearSegmentsForBoot
87 int BIOS_BOOT_FAILURE_INTERRUPT_18h ; Never returns
88
89
90;--------------------------------------------------------------------
91; ClearSegmentsForBoot
92; Parameters:
93; Nothing
94; Returns:
95; DX: Zero
96; DS=ES: Zero
97; Corrupts registers:
98; Nothing
99;--------------------------------------------------------------------
100ALIGN JUMP_ALIGN
101ClearSegmentsForBoot:
102 xor dx, dx ; Device supported by INT 13h
103 mov ds, dx
104 mov es, dx
105 ret
Note: See TracBrowser for help on using the repository browser.