Changeset 121 in xtideuniversalbios for trunk/XTIDE_Universal_BIOS
- Timestamp:
- Feb 28, 2011, 5:13:38 PM (14 years ago)
- google:author:
- aitotat
- Location:
- trunk/XTIDE_Universal_BIOS
- Files:
-
- 1 deleted
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/XTIDE_Universal_BIOS/Inc/BootVars.inc
r96 r121 32 32 33 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 34 110 %endif ; BOOTVARS_INC -
trunk/XTIDE_Universal_BIOS/Src/Boot/BootInfo.asm
r100 r121 67 67 add si, BYTE ATA1.strModel ; DS:SI now points drive name 68 68 lea di, [bx+BOOTNFO.szDrvName] ; ES:DI now points to name destination 69 mov cx, LEN_BOOTNFO_DRV 70 call Memory_CopyCXbytesFromDSSItoESDI 69 mov cx, LEN_BOOTNFO_DRV / 2 ; Max number of WORDs allowed 70 .CopyNextWord: 71 lodsw 72 xchg al, ah ; Change endianness 73 stosw 74 loop .CopyNextWord 71 75 xor ax, ax 72 76 stosb ; Terminate with NULL -
trunk/XTIDE_Universal_BIOS/Src/Handlers/Int19hMenu.asm
r96 r121 18 18 ALIGN JUMP_ALIGN 19 19 Int19hMenu_BootLoader: 20 ; Store POST stack pointer 20 21 LOAD_BDA_SEGMENT_TO ds, ax 21 call BootVars_StorePostStackPointer22 STORE_POST_STACK_POINTER 22 23 23 24 ; Install new INT 19h handler now that BOOTVARS has been initialized … … 35 36 ALIGN JUMP_ALIGN 36 37 DisplayBootMenu: 37 call BootVars_SwitchToBootMenuStack 38 SWITCH_TO_BOOT_MENU_STACK 39 CALL_DISPLAY_LIBRARY InitializeDisplayContext 38 40 call RamVars_GetSegmentToDS 39 41 ; Fall to .ProcessMenuSelectionsUntilBootable … … 52 54 call BootSector_TryToLoadFromDriveDL 53 55 jnc SHORT .ProcessMenuSelectionsUntilBootable ; Boot failure, show menu again 54 call BootVars_SwitchBackToPostStack56 SWITCH_BACK_TO_POST_STACK 55 57 ; Fall to JumpToBootSector 56 58 … … 68 70 push bx ; Push boot sector offset 69 71 call ClearSegmentsForBoot 70 xor dh, dh ; Device supported by INT 13h71 72 retf 72 73 … … 81 82 ALIGN JUMP_ALIGN 82 83 Int19hMenu_RomBoot: 83 call BootVars_SwitchBackToPostStack84 SWITCH_BACK_TO_POST_STACK 84 85 call ClearSegmentsForBoot 85 86 int INTV_BOOT_FAILURE ; Never returns … … 91 92 ; Nothing 92 93 ; Returns: 94 ; DX: Zero 93 95 ; DS=ES: Zero 94 96 ; Corrupts registers: 95 ; AX97 ; Nothing 96 98 ;-------------------------------------------------------------------- 97 99 ALIGN JUMP_ALIGN 98 100 ClearSegmentsForBoot: 99 xor ax, ax100 mov ds, ax101 mov es, ax101 xor dx, dx ; Device supported by INT 13h 102 mov ds, dx 103 mov es, dx 102 104 ret -
trunk/XTIDE_Universal_BIOS/Src/Main.asm
r116 r121 117 117 118 118 ; Include .asm files (boot menu) 119 %include "BootVars.asm" ; For accessing BOOTVARS struct120 119 %include "BootMenu.asm" ; For Boot Menu operations 121 120 %include "BootMenuEvent.asm" ; For menu library event handling
Note:
See TracChangeset
for help on using the changeset viewer.