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