Index: src/devices/oprom/x86_asm.S =================================================================== --- src/devices/oprom/x86_asm.S (revision 5608) +++ src/devices/oprom/x86_asm.S (working copy) @@ -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