===================================================================
@@ -141,21 +141,24 @@
mov %ax, %ds
lidt __realmode_idt
+ /* initialize registers for option rom lcall */
+ movl __registers + 0, %eax
+ movl __registers + 4, %ebx
+ movl __registers + 8, %ecx
+ movl __registers + 12, %edx
+ movl __registers + 16, %esi
+ movl __registers + 20, %edi
+
/* Set all segments to 0x0000, ds to 0x0040 */
+ push %ax
+ xor %ax, %ax
mov %ax, %es
mov %ax, %fs
mov %ax, %gs
mov $0x40, %ax
mov %ax, %ds
+ pop %ax
- /* initialize registers for option rom lcall */
- movl __registers + 0, %eax
- movl __registers + 4, %ebx
- movl __registers + 8, %ecx
- movl __registers + 12, %edx
- movl __registers + 16, %esi
- movl __registers + 20, %edi
-
/* ************************************ */
__lcall_instr = RELOCATED(.)
.byte 0x9a
@@ -262,12 +265,6 @@
mov %ax, %ds
lidt __realmode_idt
- /* Set all segments to 0x0000 */
- mov %ax, %ds
- mov %ax, %es
- mov %ax, %fs
- mov %ax, %gs
-
/* initialize registers for intXX call */
movl __registers + 0, %eax
movl __registers + 4, %ebx
@@ -276,6 +273,15 @@
movl __registers + 16, %esi
movl __registers + 20, %edi
+ /* Set all segments to 0x0000 */
+ push %ax
+ xor %ax, %ax
+ mov %ax, %ds
+ mov %ax, %es
+ mov %ax, %fs
+ mov %ax, %gs
+ pop %ax
+
__intXX_instr = RELOCATED(.)
.byte 0xcd, 0x00 /* This becomes intXX */
@@ -376,7 +382,7 @@
mov %ax, %ds
lidt __realmode_idt
- /* Set up segment registers to segment 0x0000 */
+ /* Set up segment registers to segment 0x0000 and ds to 0x040 */
mov %ax, %es
mov %ax, %fs
mov %ax, %gs