Skip to content

Commit

Permalink
rework to make handling flags simpler, from ecm
Browse files Browse the repository at this point in the history
  • Loading branch information
PerditionC committed Feb 10, 2024
1 parent 7a73120 commit 716f732
Showing 1 changed file with 4 additions and 26 deletions.
30 changes: 4 additions & 26 deletions kernel/intr.asm
Original file line number Diff line number Diff line change
Expand Up @@ -41,9 +41,7 @@
push es
%endif
push ds
pushf
; Flags are preserved across the entire
; function call, particularly IF.
pushf

arg nr, {rp,%1}
mov ax, [.nr] ; interrupt number
Expand All @@ -55,38 +53,18 @@ arg nr, {rp,%1}
%else
mov bx, [.rp] ; regpack structure
%endif
mov cx, [bx+4]
mov dx, [bx+6]
mov si, [bx+8]
mov di, [bx+10]
mov bp, [bx+12]
push word [bx+14] ; ds
mov es, [bx+16]
pushf
pop cx
and cx, 0F02Ah
; Get the current reserved bits from the FL
; register. Hardens against possible weirdness
; around eg the NEC V20/V30 MD flag.

mov ax, [bx + 22] ; flags
and ax, ~ 0F72Ah
; Clear most of the top bits of the FL input.
; Particularly, clear DF, IF, and TF. Callers
; often do not initialise all of the iregs
; structure passed to us. Avoid weirdness
; when DF would be set (DN) or when TF would
; enable tracing randomly.

or ax, cx
; Set reserved bits to same as current FL.

push ax
mov ah, byte [bx+22] ; flags
sahf
mov ax, [bx]
mov cx, [bx+4]
mov bx, [bx+2]
popf ; set live FL
pop ds
sti
int 0
%%intr_1:

Expand Down

0 comments on commit 716f732

Please sign in to comment.