-
Notifications
You must be signed in to change notification settings - Fork 0
/
ATL_INT_SERV.Z80
118 lines (102 loc) · 2.01 KB
/
ATL_INT_SERV.Z80
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
MODULE INTERRUPT_SERVICE
;INTERRUPT 1: 20ms CLOCK INTERRUPT 50HZ
;INTERRUPT 2: TEARING EFFECT FROM VGA CONTROLLER (NOT USED)
;INTERRUPT 3: KEYBOARD INTERRUPT
;INTERRUPT 4: EMPTY
;INTERRUPT 5: EMPTY
;INTERRUPT 6: EMPTY
;INTERRUPT 7: EMPTY
;INTERRUPT 8: EMPTY
@INTSER: PUSH AF
PUSH BC
PUSH DE
PUSH HL
PUSH IX
;TEST INTERRUPT MODULE
;AND ACT ON WHAT DEVICE CAUSED THE INTERRUPT
IN A, (DEVINT) ;WAS DEVINP BEFORE V 0.43
CPL
AND 0X07 ;BITS 0-2
;DEC A ;CONVERT 1-8 TO 0-7 NOT NEEDED ON NEW BOARD ONLY ON MY PROTOTYPE
;CP 8
;JR NC,IS_EX ;ALWAYS LESS THAN 8
LD IX, INTTAB
LD B, 0
LD C, A
SLA C ;DOUBLE THIS CAUSE 2 BYTES PER ADDR
ADD IX, BC
LD L, (IX)
LD H, (IX + 1)
LD BC, IS_EX
PUSH BC ;RETURN ADDRESS
JP (HL) ;JP TO HL
IS_EX: POP IX
POP HL
POP DE
POP BC
POP AF
EI
RET ;SAME AS RETI FOR IM1
;IT COPIES THE INTERRUPT TABLE TO RAM SYS VARS
;CLEARS ALL INTERRUPTS
;ALSO ENABLES INTERRUPTS
@COPYINTTAB: DI
LD HL,MYINTADDR
LD DE,INTTAB
LD BC,16
LDIR
LD C,DEVINT
LD B,8
CIT_NXT: OUT (C), B
DJNZ CIT_NXT
EI
RET
MYINTADDR: DEFW INT_TIMER
DEFW SAVETE
DEFW INT_KEYB
DEFW DOCLRINT
DEFW DOCLRINT
DEFW DOCLRINT
DEFW DOCLRINT
DEFW DOCLRINT
INT_KEYB: LD C,A
CALL PS2SETKEYAV ;SET NEW KEY AVAILABLE FROM PS/2
LD A,C
OUT (DEVINT), A ;CLEAR THE INTERRUPT
RET
SAVETE: OUT (DEVINT), A ;CLEAR THE INTERRUPT
LD A, 1
LD (INT2TE),A ;TEARING EFFECT
RET
DOCLRINT: OUT (DEVINT), A
RET
;INCREASES THE TIMER EVERY 20ms
INT_TIMRINC: LD HL, TIMECTR
INC (HL)
LD A, (HL)
CP 0
RET NZ
INC HL
INC (HL)
LD A, (HL)
CP 0
RET NZ
INC HL
INC (HL)
LD A, (HL)
CP 0
RET NZ
INC HL
INC (HL)
LD A, (HL)
CP 0
RET NZ
;ZERO ALL 4 BYTES
LD HL, 0
LD (TIMECTR), HL
LD (TIMECTR + 2), HL
RET
INT_TIMER: OUT (DEVINT), A ;SUPPRESS INTERRUPT
CALL INT_TIMRINC ;INCREASE TIMER
CALL SND_INTDELAY ;UPDATES DELAY VALUES FOR SOUND MODULE
RET