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