source: xtideuniversalbios/trunk/XTIDE_Universal_BIOS/Inc/BootVars.inc @ 121

Last change on this file since 121 was 121, checked in by aitotat, 13 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.3 KB
Line 
1; Project name  :   XTIDE Universal BIOS
2; Description   :   Defines for BOOTVARS struct used by boot menu
3;                   and drive initialization.
4%ifndef BOOTVARS_INC
5%define BOOTVARS_INC
6
7
8BOOT_READ_RETRY_TIMES       EQU     3
9
10
11; Boot Menu Information Table. These are generated for all XTIDE Universal
12; BIOS drives. Available only until boot is successfull.
13LEN_BOOTNFO_DRV     EQU     26      ; Bytes reserved for drive name
14struc BOOTNFO
15    .twSectCnt      resb    6       ; Total user addressable sectors
16    .szDrvName      resb    LEN_BOOTNFO_DRV+1   ; Drive name
17                    resb    1       ; Alignment
18endstruc
19
20
21; Pre-boot variables. These do not exist after successfull boot to OS.
22; Segment is always 0000h, same as BDA segment
23struc BOOTVARS
24                    resb    800h
25    .dwPostStack    resb    4       ;  804h, POST stack when entering INT 19h
26                    resb    8
27    .rgBootNfo      resb    73F4h   ;  80Ch, Array containing BOOTNFO structs
28    .rgbMnuStack:                   ; 7C00h and below, Boot Menu stack
29    .rgbAtaInfo:                    ; 7C00h, ATA Information for drive detection
30    .rgbBootSect    resb    512     ; 7C00h, Boot sector
31endstruc
32
33
34;--------------------------------------------------------------------
35; Stores POST stack pointer to BOOTVARS.
36;
37; STORE_POST_STACK_POINTER
38;   Parameters:
39;       DS:     BDA and Interrupt Vector segment (zero)
40;   Returns:
41;       Nothing
42;   Corrupts registers:
43;       Nothing
44;--------------------------------------------------------------------
45%macro STORE_POST_STACK_POINTER 0
46    mov     [BOOTVARS.dwPostStack], sp
47    mov     [BOOTVARS.dwPostStack+2], ss
48%endmacro
49
50
51;--------------------------------------------------------------------
52; Initializes stack for boot menu usage.
53; POST stack is not large enough when DPTs are stored to 30:0h.
54;
55; Note regarding LOAD_BDA_SEGMENT_TO: If you force the use of SP
56; then you also have to unconditionally enable the CLI/STI pair.
57; The reason for this is that only some buggy 808x CPU:s need the
58; CLI/STI instruction pair when changing stacks. Other CPU:s disable
59; interrupts automatically when SS is modified for the duration of
60; the immediately following instruction to give time to change SP.
61;
62; SWITCH_TO_BOOT_MENU_STACK
63;   Parameters:
64;       Nothing
65;   Returns:
66;       SS:SP:  Pointer to top of Boot Menu stack
67;   Corrupts registers:
68;       Nothing
69;--------------------------------------------------------------------
70%macro SWITCH_TO_BOOT_MENU_STACK 0
71%ifndef USE_186
72    cli                                 ; Disable interrupts
73%endif
74    LOAD_BDA_SEGMENT_TO ss, sp
75    mov     sp, BOOTVARS.rgbMnuStack    ; Load offset to stack
76%ifndef USE_186
77    sti                                 ; Enable interrupts
78%endif
79%endmacro
80
81
82;--------------------------------------------------------------------
83; Restores SS and SP to initial boot loader values.
84;
85; Before doing any changes, see the note regarding
86; LOAD_BDA_SEGMENT_TO in BootVars_SwitchToBootMenuStack
87;
88; SWITCH_BACK_TO_POST_STACK
89;   Parameters:
90;       Nothing
91;   Returns:
92;       SS:SP:  Ptr to POST stack
93;   Corrupts registers:
94;       Nothing
95;--------------------------------------------------------------------
96%macro SWITCH_BACK_TO_POST_STACK 0
97%ifndef USE_386
98    cli                                 ; Disable interrupts
99    LOAD_BDA_SEGMENT_TO ss, sp
100    mov     sp, [ss:BOOTVARS.dwPostStack]
101    mov     ss, [ss:BOOTVARS.dwPostStack+2]
102    sti                                 ; Enable interrupts
103%else
104    LOAD_BDA_SEGMENT_TO ss, sp
105    lss     sp, [ss:BOOTVARS.dwPostStack]
106%endif
107%endmacro
108
109
110%endif ; BOOTVARS_INC
Note: See TracBrowser for help on using the repository browser.