IF29
IF2B
IF2D
IF2E
IF30
IF32
IF34
IF36
IF39
IF39
IF3C
IF3E
IF40
IF40
IF44
IF45
IF46
IF47
IF48
IF53
IF53
BO
OB
E6
20
90
E4
20
OA
CO
75
05
B4
FF
EB
08
90
E8
IF57
BO
20
E6
20
MOV
AL
,OBH
OUT
INTAOO,AL
NOP
IN
AL,INTAOO
OR
AL,AL
JNZ
HW_INT
MOV
AH,OFFH
JMP
DILEXIT
HARDWARE
INTERRUPT
OCCURRED
HW_INT:
CALL
MASK-LEVEL
MOV
AL,
EOI
OUT
INTAOO
,AL
SAVE
I NTRJLAG
AND
EX
IT
Dll_EX
IT:
READ
IN-SERVICE
REG
(FIND
OUT
WHAT
LEVEL
BEING
SERVICED)
GET
LEVEL
NO
HARDWARE
IN
SERVICE?
SET
NO
LEVEL
IN
SERVICE
FLAG
SET
FLAG
TO
FF
IF
NON-HDWARE
GO
MASK
LEVEL,
RETURN
WITH
AH
INDICATING
LEVEL
MASKED
SEND
END
OF
INTERRUPT
88
26
006B
R
MOV
I
NTR_FLAG,
AH
SET
FLAG
58
POP
AX
RESTORE
REG
AX
CONTENTS
5A
POP
DX
IF
POP
DS
CF
IRET
Dll
ENDP
;ORG
OFF53H
ORG
01F53H
;
*********************************************************************
;
DUMMY
INTERRUPT
RETURN
;
*********************************************************************
PROC
FAR
IF53
CF
DUMMY
_RETURN
IRET
1
F54
DUMMY
_RETURN
ENDP
;
***************************************
PRINT
SCREEN
ROUTINE
ENTRY
ADDRESS
;
***************************************
;ORG
OFF54H
IF54
ORG
01
F54H
= IF54
PRINLSCREEN
EQU
1
F54
E9
0000
JMP
PRT
_SCRN
IF57
IF57
IF58
IF5A
IF5C
IF5E
IF60
1
F62
IF67
IF69
IF6B
IF6D
IF6F
IF6F
1
F70
IF71
51
B4
01
E4
AO
24
07
8A
C8
D2
E4
;
**********************************************************************
;
ROUTINE
USED
BY
Dll
HANDLER
TO
MASK
THE
INTERRUPT
LVL
BEING
SERVICED
;
*********************************************************************
MASK-LEVEL
PROC
NEAR
PUSH
CX
MOV
AH,OI
START
AT
LEVEL
0
IN
AL,IONMLCNTL
READ
HIGHEST
LVL
IN
SERVICE
AND
AL,07
JUST
KEEP
LEVEL
BITS
MOV
CL,
AL
GET
LEVEL
AS
SH
I
FT
COUNT
SHL
AH,CL
AH
CONTAINS
MASK
FOR
LEVEL
F6
06
0012 R
01
75
06
TEST
POSLSTATUS, POSLACTIVE ;
POWER_ON_SELF
_TEST
ACTIVE?
JNZ
MASK_EXIT
JUMP
I F
POST
ACTIVE
E4
21
OA
C4
E6
21
59
C3
IN
AL,INTAOI
OR
AL,AH
OUT
INTAOl,AL
MASK-EXIT:
POP
CX
RET
MASK-LEVEL
ENDP
GET
MASK
VALUE
MASK
OFF
LVL
BEING
SERVICED
ROM BIOS 2-239