2025-05-27 16:03:52 +08:00

192 lines
5.8 KiB
Plaintext
Executable File
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

Turbo Assembler Version 5.3 06-02-23 10:20:14 Page 1
code.asm
1 0000 DATA SEGMENT
2 0000 0000 INT_OFF1 DW 0
3 0002 0000 INT_SEG1 DW 0
4 0004 0000 INT_OFF2 DW 0
5 0006 0000 INT_SEG2 DW 0
6 0008 0001 LED_STATE DW 00000001B
7 000A DATA ENDS
8
9 0000 STACK SEGMENT
*Warning* code.asm(9) Reserved word used as symbol: STACK
10 0000 64*(0000) DW 100 DUP (0)
11 00C8 STACK ENDS
12
13 0000 CODE SEGMENT
14 ASSUME CS:CODE, DS:DATA, SS:STACK
15 0000 START:
16 0000 B8 0000s MOV AX, DATA
17 0003 8E D8 MOV DS, AX
18 0005 8E C0 MOV ES, AX
19 0007 B8 0000s MOV AX, STACK
20 000A 8E D0 MOV SS, AX
21
22 ; save main chip's original interruption vector
23 000C B8 350B MOV AX, 350BH
24 000F CD 21 INT 21H
25 0011 89 1E 0000r MOV INT_OFF1, BX
26 0015 8C C3 MOV BX, ES
27 0017 89 1E 0002r MOV INT_SEG1, BX
28
29 ; load main chip's new interruption vector
30 001B FA CLI
31 001C BA 0000s MOV DX, SEG SW_INT
32 001F 8E DA MOV DS, DX
33 0021 BA 00ADr MOV DX, OFFSET SW_INT
34 0024 B8 250B MOV AX, 250BH
35 0027 CD 21 INT 21H
36 0029 B8 0000s MOV AX, DATA
37 002C 8E D8 MOV DS, AX
38
39 ; save slave chip's original interruption vector
40 002E B8 3572 MOV AX, 3572H
41 0031 CD 21 INT 21H
42 0033 89 1E 0004r MOV INT_OFF2, BX
43 0037 8C C3 MOV BX, ES
44 0039 89 1E 0006r MOV INT_SEG2, BX
45
46 ; load slave chip's new interruption vector
47 003D FA CLI
48 003E BA 0000s MOV DX, SEG SW_INT
49 0041 8E DA MOV DS, DX
50 0043 BA 00ADr MOV DX, OFFSET SW_INT
51 0046 B8 2572 MOV AX, 2572H
52 0049 CD 21 INT 21H
53 004B B8 0000s MOV AX, DATA
54 004E 8E D8 MOV DS, AX
55
56 ; open main chip's interruption mask
Turbo Assembler Version 5.3 06-02-23 10:20:14 Page 2
code.asm
57 0050 E4 21 IN AL, 21H
58 0052 24 F7 AND AL, 11110111B
59 0054 E6 21 OUT 21H, AL
60
61 ; open slave chip's interruption mask
62 0056 E4 A1 IN AL, 0A1H
63 0058 24 FB AND AL, 11111011B
64 005A E6 A1 OUT 0A1H, AL
65
66 ; main code
67 005C BA 0283 MOV DX, 283H
68 005F B0 80 MOV AL, 10000000B
69 0061 EE OUT DX, AL
70 0062 BA 0283 MOV DX, 283H
71 0065 A1 0008r MOV AX, LED_STATE
72 0068 EE OUT DX, AL
73
74 0069 33 D2 XOR DX,DX
75 006B FB L1: STI
76 006C 83 FA 0A CMP DX, 10
77 006F 75 FA JNZ L1
78
79 ; reload main chip's original interruption vector
80 0071 FA CLI
81 0072 8B 16 0002r MOV DX,INT_SEG1
82 0076 8E DA MOV DS,DX
83 0078 8B 16 0000r MOV DX,INT_OFF1
84 007C B8 2572 MOV AX,2572H
85 007F CD 21 INT 21H
86 0081 B8 0000s MOV AX,DATA
87 0084 8E D8 MOV DS,AX
88
89 ; reload slave chip's original interruption vector
90 0086 FA CLI
91 0087 8B 16 0006r MOV DX,INT_SEG2
92 008B 8E DA MOV DS,DX
93 008D 8B 16 0004r MOV DX,INT_OFF2
94 0091 B8 2572 MOV AX,2572H
95 0094 CD 21 INT 21H
96 0096 B8 0000s MOV AX,DATA
97 0099 8E D8 MOV DS,AX
98
99 ; close main chip's interruption mask
100 009B E4 21 IN AL, 21H
101 009D 0C 08 OR AL, 00001000B
102 009F E6 21 OUT 21H, AL
103
104 ; close slave chip's interruption mask
105 00A1 E4 A1 IN AL, 0A1H
106 00A3 0C 04 OR AL, 00000100B
107 00A5 E6 A1 OUT 0A1H, AL
108 00A7 FB STI
109
110 ; return to DOS
111 00A8 B8 4C00 MOV AX,4C00H
112 00AB CD 21 INT 21H
113
Turbo Assembler Version 5.3 06-02-23 10:20:14 Page 3
code.asm
114 ; interruption service proccess
115 00AD SW_INT PROC NEAR
116 00AD 50 PUSH AX
117 00AE FA CLI
118 00AF 42 INC DX
119
120 00B0 52 PUSH DX
121 00B1 A1 0008r MOV AX, LED_STATE
122 00B4 03 C2 ADD AX, DX
123 00B6 25 0001 AND AX, 00000001B
124 00B9 BA 0283 MOV DX, 283H
125 00BC EE OUT DX, AL
126 00BD 5A POP DX
127
128 00BE B0 20 MOV AL, 20H
129 00C0 E6 20 OUT 20H, AL
130 00C2 B0 62 MOV AL, 62H
131 00C4 E6 A0 OUT 0A0H, AL
132 00C6 FB STI
133 00C7 58 POP AX
134 00C8 CF IRET
135 00C9 SW_INT ENDP
136
137
138 00C9 CODE ENDS
139 END START
Turbo Assembler Version 5.3 06-02-23 10:20:14 Page 4
Symbol Table
Symbol Name Type Value
??DATE Text "06-02-23"
??FILENAME Text "code "
??TIME Text "10:20:14"
??VERSION Number 0503
@CPU Text 0101H
@CURSEG Text CODE
@FILENAME Text CODE
@WORDSIZE Text 2
INT_OFF1 Word DATA:0000
INT_OFF2 Word DATA:0004
INT_SEG1 Word DATA:0002
INT_SEG2 Word DATA:0006
L1 Near16 CODE:006B
LED_STATE Word DATA:0008
START Near16 CODE:0000
SW_INT Near16 CODE:00AD
Groups & Segments Bit Size Align Combine Class
CODE 16 00C9 Para none
DATA 16 000A Para none
STACK 16 00C8 Para none
Turbo Assembler Version 5.3 06-02-23 10:20:14 Page 5
Error Summary
*Warning* code.asm(9) Reserved word used as symbol: STACK