bios: Get rid of self-modifying interrupt call code
diff --git a/common/lib/real.asm_bios_ia32 b/common/lib/real.asm_bios_ia32
index 4c43af98..5f2b5b2f 100644
--- a/common/lib/real.asm_bios_ia32
+++ b/common/lib/real.asm_bios_ia32
@@ -39,8 +39,9 @@ rm_hcf:
global rm_int
rm_int:
; Self-modifying code: int $int_no
- mov al, byte [esp+4]
- mov byte [.int_no], al
+ mov eax, dword [esp+4]
+ mov eax, dword [0 + eax*4]
+ mov dword [.int_offset], eax
; Save out_regs
mov eax, dword [esp+8]
@@ -100,14 +101,9 @@ rm_int:
pop eax
mov esp, dword [ss:.esp]
- sti
-
; Indirect interrupt call
- db 0xcd
- .int_no:
- db 0
-
- cli
+ pushf
+ call far [ss:.int_offset]
; Load out_regs
mov dword [ss:.esp], esp
@@ -164,3 +160,5 @@ align 16
.idt: dq 0
.rm_idt: dw 0x3ff
dd 0
+ dw 0
+ .int_offset: dd 0
