]> wirehaze git hosting - MS-DOS.git/blob - v2.0/source/PCLOCK.ASM

wirehaze git hosting

Add Turkish translation for README
[MS-DOS.git] / v2.0 / source / PCLOCK.ASM
1 TITLE CLOCK - Enable/disable clock interrupts
2
3 ; "CLOCK" module for MS-DOS profile program. This implements the
4 ; PROFIL program on the Seattle Computer Products 8086 system
5
6 INTSEG SEGMENT AT 0
7 ORG 60H+7*4
8 INTVECTOR LABEL WORD
9 INTSEG ENDS
10
11 CODE SEGMENT BYTE PUBLIC
12
13 PUBLIC CLOCKON,CLOCKOFF,LEAVE_INT
14
15 EXTRN CLK_INTER:NEAR
16
17 ASSUME CS:CODE, DS:CODE, ES:CODE
18
19 BASE= 0F0H
20 STCSTAT= BASE+5
21 STCDATA= BASE+4
22 STCCOMND= BASE+5
23 SLAVECOM= BASE+2
24 MASTCOM= BASE+0
25 SLAVEMASK= BASE+3
26
27 ;The following mode selects F2 as counter source (400 KHz), reload from
28 ;load, count up once in binary with TC toggle.
29 MODE= 0C02H
30
31 ;************************************************
32 ;Enable clock and start generating clock interrupt.
33 ; Clock interval in micro seconds passed in DX
34 CLOCKON PROC NEAR
35 MOV AL,4 ;Set pointer to mode register 4
36 OUT STCCOMND,AL
37 MOV AL,MODE AND 0FFH ;Low byte of mode
38 OUT STCDATA,AL
39 MOV AL,MODE/100H ;High byte of mode
40 OUT STCDATA,AL
41 MOV AL,0CH ;Counter 4 load register
42 OUT STCCOMND,AL
43 XCHG AX,DX ;Count in microseconds
44 XOR DX,DX
45 SHL AX,1
46 RCL DX,1 ;Count in DX:AX times 2
47 MOV BX,5
48 DIV BX ;AX=Count/2.5
49 OUT STCDATA,AL
50 MOV AL,AH
51 OUT STCDATA,AL ;Set the load register
52 MOV AL,0E4H ;Clear output 4
53 OUT STCCOMND,AL
54
55 ASSUME DS:INTSEG
56
57 PUSH DS
58 XOR AX,AX
59 MOV DS,AX
60 ;Set the clock interrupt
61 MOV INTVECTOR,OFFSET CLK_INTER
62 MOV INTVECTOR+2,CS
63 POP DS
64
65 ASSUME DS:CODE
66
67 IN AL,SLAVEMASK
68 AND AL,7FH ;Enable counter 4 interrupt
69 OUT SLAVEMASK,AL
70 MOV AL,68H ;Load and arm counter 4
71 OUT STCCOMND,AL ;Let her rip!
72 RET
73 CLOCKON ENDP
74
75 ;************************************************
76 ;Disable clock and clock interrupt
77 CLOCKOFF PROC NEAR
78 IN AL,SLAVEMASK
79 OR AL,80H ;Turn off counter 4 interrupt
80 OUT SLAVEMASK,AL
81 RET
82 CLOCKOFF ENDP
83
84
85 ;************************************************
86 ;This routine is jumped to from the CLK_INTER
87 ; routine to perform and steps to reset the interrupt
88 LEAVE_INT:
89 PUSH AX
90 MOV AL,0E4H ;Clear output 4
91 OUT STCCOMND,AL
92 MOV AL,20H ;End-of-interrupt command
93 OUT SLAVECOM,AL
94 OUT MASTCOM,AL
95 MOV AL,68H ;Load and arm counter 4
96 OUT STCCOMND,AL
97 POP AX
98 IRET
99
100 CODE ENDS
101 END
102