diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/devices/oprom/x86_asm.S | 36 |
1 files changed, 21 insertions, 15 deletions
diff --git a/src/devices/oprom/x86_asm.S b/src/devices/oprom/x86_asm.S index bbae4b1bce..e355da8fb9 100644 --- a/src/devices/oprom/x86_asm.S +++ b/src/devices/oprom/x86_asm.S @@ -141,20 +141,23 @@ __realmode_call = RELOCATED(.) mov %ax, %ds lidt __realmode_idt - /* Set all segments to 0x0000, ds to 0x0040 */ - mov %ax, %es - mov %ax, %fs - mov %ax, %gs - mov $0x40, %ax - mov %ax, %ds - /* 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 + 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 /* ************************************ */ __lcall_instr = RELOCATED(.) @@ -262,12 +265,6 @@ __realmode_interrupt = RELOCATED(.) 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 @@ __realmode_interrupt = RELOCATED(.) 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 @@ __interrupt_handler_16bit = RELOCATED(.) 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 |