Subversion Repositories Kolibri OS

Rev

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: