Changeset 121 in xtideuniversalbios for trunk/XTIDE_Universal_BIOS/Inc/BootVars.inc


Ignore:
Timestamp:
Feb 28, 2011, 5:13:38 PM (13 years ago)
Author:
aitotat
google:author:
aitotat
Message:

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:
1 edited

Legend:

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

    r96 r121  
    3232
    3333
     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
    34110%endif ; BOOTVARS_INC
Note: See TracChangeset for help on using the changeset viewer.