Rev 485 | Go to most recent revision | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 485 | Rev 539 | ||
---|---|---|---|
1 | ; |
1 | ; |
2 | ; INFRARED |
2 | ; INFRARED |
3 | ; |
3 | ; |
4 | ; Compile with FASM for Menuet |
4 | ; Compile with FASM for Menuet |
5 | ; |
5 | ; |
6 | 6 | ||
7 | use32 |
7 | use32 |
8 | 8 | ||
9 | org 0x0 |
9 | org 0x0 |
10 | 10 | ||
11 | db 'MENUET01' ; 8 byte id |
11 | db 'MENUET01' ; 8 byte id |
12 | dd 1 ; required os |
12 | dd 1 ; required os |
13 | dd START ; program start |
13 | dd START ; program start |
14 | dd I_END ; program image size |
14 | dd I_END ; program image size |
15 | dd 0x1000 ; required amount of memory |
15 | dd 0x1000 ; required amount of memory |
16 | dd 0x1000 ; esp = 0x7FFF0 |
16 | dd 0x1000 ; esp = 0x7FFF0 |
17 | dd 0, 0 |
17 | dd 0, 0 |
18 | 18 | ||
19 | 19 | ||
20 | include '..\..\..\..\macros.inc' |
20 | include '..\..\..\..\macros.inc' |
21 | 21 | ||
22 | START: ; start of execution |
22 | START: ; start of execution |
23 | 23 | ||
24 | set_variables: |
24 | set_variables: |
25 | 25 | ||
26 | mov eax,46 ; reserve ports 0x3f0 - 0x3ff |
26 | mov eax,46 ; reserve ports 0x3f0 - 0x3ff |
27 | mov ebx,0 |
27 | mov ebx,0 |
28 | mov ecx,0x3f0 |
28 | mov ecx,0x3f0 |
29 | mov edx,0x3ff |
29 | mov edx,0x3ff |
30 | mcall |
30 | mcall |
31 | 31 | ||
32 | mov eax,45 ; reserve irq 4 |
32 | mov eax,45 ; reserve irq 4 |
33 | mov ebx,0 |
33 | mov ebx,0 |
34 | mov ecx,4 |
34 | mov ecx,4 |
35 | mcall |
35 | mcall |
36 | 36 | ||
37 | mov eax,44 ; set read ports for irq 4 |
37 | mov eax,44 ; set read ports for irq 4 |
38 | mov ebx,irqtable |
38 | mov ebx,irqtable |
39 | ; mov ecx,4 |
39 | ; mov ecx,4 |
40 | mcall |
40 | mcall |
41 | 41 | ||
42 | mov dh, 3 ; all ports have number 3xx hex |
42 | mov dh, 3 ; all ports have number 3xx hex |
43 | 43 | ||
44 | mov dl, 0xf3+8 |
44 | mov dl, 0xf3+8 |
45 | mov al, 0x80 |
45 | mov al, 0x80 |
46 | out dx, al |
46 | out dx, al |
47 | 47 | ||
48 | mov dl, 0xf1+8 |
48 | mov dl, 0xf1+8 |
49 | mov al, 0 |
49 | mov al, 0 |
50 | out dx, al |
50 | out dx, al |
51 | 51 | ||
52 | mov dl, 0xf0+8 |
52 | mov dl, 0xf0+8 |
53 | mov al, 0x30 / 4 |
53 | mov al, 0x30 / 4 |
54 | out dx, al |
54 | out dx, al |
55 | 55 | ||
56 | mov dl, 0xf3+8 |
56 | mov dl, 0xf3+8 |
57 | mov al, 3 |
57 | mov al, 3 |
58 | out dx, al |
58 | out dx, al |
59 | 59 | ||
60 | mov dl, 0xf4+8 |
60 | mov dl, 0xf4+8 |
61 | mov al, 0xB |
61 | mov al, 0xB |
62 | out dx, al |
62 | out dx, al |
63 | 63 | ||
64 | mov dl, 0xf1+8 |
64 | mov dl, 0xf1+8 |
65 | mov al, 1 |
65 | mov al, 1 |
66 | out dx, al |
66 | out dx, al |
67 | 67 | ||
68 | mov eax,5 |
68 | mov eax,5 |
69 | mov ebx,100 |
69 | mov ebx,100 |
70 | mcall |
70 | mcall |
71 | 71 | ||
72 | mov dl, 0xf8 |
72 | mov dl, 0xf8 |
73 | mov al, 'I' |
73 | mov al, 'I' |
74 | out dx, al |
74 | out dx, al |
75 | 75 | ||
76 | mov eax,5 |
76 | mov eax,5 |
77 | mov ebx,10 |
77 | mov ebx,10 |
78 | mcall |
78 | mcall |
79 | 79 | ||
80 | mov al, 'R' |
80 | mov al, 'R' |
81 | out dx, al |
81 | out dx, al |
82 | 82 | ||
83 | mov eax,40 ; get com 1 data with irq 4 |
83 | mov eax,40 ; get com 1 data with irq 4 |
84 | mov ebx,0000000000010000b shl 16 + 101b |
84 | mov ebx,0000000000010000b shl 16 + 101b |
85 | mcall |
85 | mcall |
86 | 86 | ||
87 | red: |
87 | red: |
88 | call draw_window |
88 | call draw_window |
89 | 89 | ||
90 | still: |
90 | still: |
91 | 91 | ||
92 | mov eax,10 ; wait here for event |
92 | mov eax,10 ; wait here for event |
93 | mcall |
93 | mcall |
94 | dec eax |
94 | dec eax |
95 | jz red |
95 | jz red |
96 | dec eax |
96 | dec eax |
97 | dec eax |
97 | dec eax |
98 | jnz readir |
98 | jnz readir |
99 | 99 | ||
100 | button: ; button |
100 | button: ; button |
101 | mov al,17 ; get id |
101 | mov al,17 ; get id |
102 | mcall |
102 | mcall |
103 | 103 | ||
104 | ; we have only one button, close |
104 | ; we have only one button, close |
105 | 105 | ||
106 | mov eax,45 ; free irq |
106 | mov eax,45 ; free irq |
107 | mov ebx,1 |
107 | mov ebx,1 |
108 | mov ecx,4 |
108 | mov ecx,4 |
109 | mcall |
109 | mcall |
110 | 110 | ||
111 | mov eax,46 ; free ports 0x3f0-0x3ff |
111 | mov eax,46 ; free ports 0x3f0-0x3ff |
112 | mov ebx,1 |
112 | mov ebx,1 |
113 | mov ecx,0x3f0 |
113 | mov ecx,0x3f0 |
114 | mov edx,0x3ff |
114 | mov edx,0x3ff |
115 | mcall |
115 | mcall |
116 | 116 | ||
117 | or eax,-1 ; close this program |
117 | or eax,-1 ; close this program |
118 | mcall |
118 | mcall |
119 | 119 | ||
120 | pos dd 0x0 |
120 | pos dd 0x0 |
121 | 121 | ||
122 | cdplayer: |
122 | cdplayer: |
123 | dd 7 |
123 | dd 7 |
124 | dd 0 |
124 | dd 0 |
125 | dd 0 |
125 | dd 0 |
126 | dd 0 |
126 | dd 0 |
127 | dd 0 |
127 | dd 0 |
128 | db '/RD/1/CDP',0 |
128 | db '/sys/CDP',0 |
129 | 129 | ||
130 | readir: |
130 | readir: |
131 | mov eax,42 |
131 | mov eax,42 |
132 | mov ebx,4 |
132 | mov ebx,4 |
133 | mcall |
133 | mcall |
134 | 134 | ||
135 | cmp ebx,80 |
135 | cmp ebx,80 |
136 | jne nocd |
136 | jne nocd |
137 | 137 | ||
138 | mov eax,70 |
138 | mov eax,70 |
139 | mov ebx,cdplayer |
139 | mov ebx,cdplayer |
140 | mcall |
140 | mcall |
141 | 141 | ||
142 | 142 | ||
143 | nocd: |
143 | nocd: |
144 | 144 | ||
145 | push ebx |
145 | push ebx |
146 | mov eax,[pos] |
146 | mov eax,[pos] |
147 | add eax,1 |
147 | add eax,1 |
148 | cmp eax,10*20+1 |
148 | cmp eax,10*20+1 |
149 | jb noeaxz |
149 | jb noeaxz |
150 | mov esi,text+10*4 |
150 | mov esi,text+10*4 |
151 | mov edi,text |
151 | mov edi,text |
152 | mov ecx,10*21*4 |
152 | mov ecx,10*21*4 |
153 | cld |
153 | cld |
154 | rep movsb |
154 | rep movsb |
155 | mov eax,13 |
155 | mov eax,13 |
156 | mov ebx,20*65536+260 |
156 | mov ebx,20*65536+260 |
157 | mov ecx,22*65536+220 |
157 | mov ecx,22*65536+220 |
158 | mov edx,[wcolor] |
158 | mov edx,[wcolor] |
159 | mcall |
159 | mcall |
160 | mov eax,10*19+1 |
160 | mov eax,10*19+1 |
161 | noeaxz: |
161 | noeaxz: |
162 | mov [pos],eax |
162 | mov [pos],eax |
163 | pop ebx |
163 | pop ebx |
164 | and ebx,0xff |
164 | and ebx,0xff |
165 | call draw_data |
165 | call draw_data |
166 | jmp still |
166 | jmp still |
167 | 167 | ||
168 | 168 | ||
169 | 169 | ||
170 | 170 | ||
171 | draw_data: |
171 | draw_data: |
172 | 172 | ||
173 | pusha |
173 | pusha |
174 | 174 | ||
175 | xchg eax,ebx |
175 | xchg eax,ebx |
176 | 176 | ||
177 | mov ecx,10 |
177 | mov ecx,10 |
178 | shl ebx,2 |
178 | shl ebx,2 |
179 | mov esi,3 |
179 | mov esi,3 |
180 | newnum: |
180 | newnum: |
181 | xor edx,edx |
181 | xor edx,edx |
182 | div ecx |
182 | div ecx |
183 | add edx,48 |
183 | add edx,48 |
184 | mov [ebx+text-1],dl |
184 | mov [ebx+text-1],dl |
185 | dec ebx |
185 | dec ebx |
186 | dec esi |
186 | dec esi |
187 | jnz newnum |
187 | jnz newnum |
188 | 188 | ||
189 | call draw_text |
189 | call draw_text |
190 | 190 | ||
191 | popa |
191 | popa |
192 | 192 | ||
193 | ret |
193 | ret |
194 | 194 | ||
195 | 195 | ||
196 | irqtable: |
196 | irqtable: |
197 | 197 | ||
198 | dd 0x3f8+0x01000000 ; + 01 = read byte, 02 read word |
198 | dd 0x3f8+0x01000000 ; + 01 = read byte, 02 read word |
199 | dd 0 |
199 | dd 0 |
200 | 200 | ||
201 | 201 | ||
202 | 202 | ||
203 | ; ********************************************* |
203 | ; ********************************************* |
204 | ; ******* WINDOW DEFINITIONS AND DRAW ******** |
204 | ; ******* WINDOW DEFINITIONS AND DRAW ******** |
205 | ; ********************************************* |
205 | ; ********************************************* |
206 | 206 | ||
207 | 207 | ||
208 | draw_window: |
208 | draw_window: |
209 | 209 | ||
210 | mov eax,12 ; function 12:tell os about windowdraw |
210 | mov eax,12 ; function 12:tell os about windowdraw |
211 | mov ebx,1 ; 1, start of draw |
211 | mov ebx,1 ; 1, start of draw |
212 | mcall |
212 | mcall |
213 | 213 | ||
214 | ; DRAW WINDOW |
214 | ; DRAW WINDOW |
215 | mov eax,0 ; function 0 : define and draw window |
215 | mov eax,0 ; function 0 : define and draw window |
216 | mov ebx,100*65536+300 ; [x start] *65536 + [x size] |
216 | mov ebx,100*65536+300 ; [x start] *65536 + [x size] |
217 | mov ecx,100*65536+250 ; [y start] *65536 + [y size] |
217 | mov ecx,100*65536+250 ; [y start] *65536 + [y size] |
218 | mov edx,[wcolor] ; color of work area RRGGBB,8->color |
218 | mov edx,[wcolor] ; color of work area RRGGBB,8->color |
219 | mov edi,labelt ; caption string |
219 | mov edi,labelt ; caption string |
220 | mcall |
220 | mcall |
221 | 221 | ||
222 | ; ; WINDOW LABEL |
222 | ; ; WINDOW LABEL |
223 | ; mov eax,4 ; function 4 : write text to window |
223 | ; mov eax,4 ; function 4 : write text to window |
224 | ; mov ebx,8*65536+8 ; [x start] *65536 + [y start] |
224 | ; mov ebx,8*65536+8 ; [x start] *65536 + [y start] |
225 | ; mov ecx,0x00ffffff ; color of text RRGGBB |
225 | ; mov ecx,0x00ffffff ; color of text RRGGBB |
226 | ; mov edx,labelt ; pointer to text beginning |
226 | ; mov edx,labelt ; pointer to text beginning |
227 | ; mov esi,labellen-labelt ; text length |
227 | ; mov esi,labellen-labelt ; text length |
228 | ; mcall |
228 | ; mcall |
229 | 229 | ||
230 | ; CLOSE BUTTON |
230 | ; CLOSE BUTTON |
231 | ; mov eax,8 ; function 8 : define and draw button |
231 | ; mov eax,8 ; function 8 : define and draw button |
232 | ; mov ebx,(300-19)*65536+12 ; [x start] *65536 + [x size] |
232 | ; mov ebx,(300-19)*65536+12 ; [x start] *65536 + [x size] |
233 | ; mov ecx,5*65536+12 ; [y start] *65536 + [y size] |
233 | ; mov ecx,5*65536+12 ; [y start] *65536 + [y size] |
234 | ; mov edx,1 ; button id |
234 | ; mov edx,1 ; button id |
235 | ; mov esi,0x5599cc ; button color RRGGBB |
235 | ; mov esi,0x5599cc ; button color RRGGBB |
236 | ; mcall |
236 | ; mcall |
237 | 237 | ||
238 | draw_text: |
238 | draw_text: |
239 | 239 | ||
240 | mov ebx,25*65536+35 ; draw info text with function 4 |
240 | mov ebx,25*65536+35 ; draw info text with function 4 |
241 | mov ecx,0xffffff |
241 | mov ecx,0xffffff |
242 | mov edx,text |
242 | mov edx,text |
243 | mov esi,40 |
243 | mov esi,40 |
244 | mov edi,20 |
244 | mov edi,20 |
245 | newline: |
245 | newline: |
246 | mov eax,4 |
246 | mov eax,4 |
247 | mcall |
247 | mcall |
248 | add ebx,10 |
248 | add ebx,10 |
249 | add edx,esi |
249 | add edx,esi |
250 | dec edi |
250 | dec edi |
251 | jne newline |
251 | jne newline |
252 | 252 | ||
253 | mov eax,12 |
253 | mov eax,12 |
254 | mov ebx,2 |
254 | mov ebx,2 |
255 | mcall |
255 | mcall |
256 | 256 | ||
257 | ret |
257 | ret |
258 | 258 | ||
259 | 259 | ||
260 | ; DATA AREA |
260 | ; DATA AREA |
261 | 261 | ||
262 | wcolor dd 0x13000000 |
262 | wcolor dd 0x13000000 |
263 | 263 | ||
264 | labelt db 'INFRARED RECEIVER FOR IRMAN IN COM 1',0 |
264 | labelt db 'INFRARED RECEIVER FOR IRMAN IN COM 1',0 |
265 | 265 | ||
266 | text: |
266 | text: |
267 | 267 | ||
268 | I_END: |
268 | I_END: |