Rev 963 | Rev 7661 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
963 | leency | 1 | /* |
2 | Sphinx C-- header file for KolibriOS applications. |
||
3 | Based on msys.h-- written by Alexey Sugonyaev and modified by Barry Kauler. |
||
4 | This file is rewritten by Ivan Poddubny. |
||
5 | |||
6 | e-mail: ivan-yar@bk.ru |
||
7 | */ |
||
8 | |||
9 | // KeyCode constant |
||
10 | #define UP_KEY 130+48 |
||
11 | #define DOWN_KEY 129+48 |
||
12 | #define LEFT_KEY 128+48 |
||
13 | #define RIGHT_KEY 131+48 |
||
14 | #define RETURN_KEY 13 |
||
15 | #define BACKSPACE_KEY 8 |
||
16 | |||
17 | // Color constant |
||
18 | #define clWhite 0x00ffffff |
||
19 | #define clGray 0x00808080 |
||
20 | #define clLightGray 0x00c0c0c0 |
||
21 | #define clDarkGray 0x00707070 |
||
22 | #define clBlack 0x00000000 |
||
23 | #define clRed 0x00ff0000 |
||
24 | #define clGreen 0x0000ff00 |
||
25 | #define clBlue 0x000000ff |
||
26 | |||
27 | // Events |
||
28 | #define evReDraw 1 |
||
29 | #define evKey 2 |
||
30 | #define evButton 3 |
||
31 | #define evMouse 6 |
||
32 | #define evIPC 7 |
||
33 | #define evStack 8 |
||
34 | |||
35 | #define OLD -1 |
||
36 | |||
37 | struct FileInfo |
||
38 | { |
||
39 | dword read, |
||
40 | firstBlock, |
||
41 | qnBlockRead, |
||
42 | retPtr, |
||
43 | Work; |
||
44 | byte filedir; |
||
45 | }; |
||
46 | |||
47 | struct ProcessInfo |
||
48 | { |
||
49 | dword cpu_usage; |
||
50 | word winstackpos; |
||
51 | word winstackval; |
||
52 | word not_used1; |
||
53 | byte name[12]; |
||
54 | dword memstart, |
||
55 | memory_used, |
||
56 | PID, |
||
57 | xstart, |
||
58 | ystart, |
||
59 | xsize, |
||
60 | ysize; |
||
61 | byte not_used2[974]; |
||
62 | }; |
||
63 | |||
64 | #define SystemColors SystemColours // usa/british |
||
65 | |||
66 | struct SystemColours |
||
67 | { |
||
6166 | leency | 68 | dword nonset1, |
69 | nonset2, |
||
70 | work_3d_dark, |
||
71 | work_3d_light, |
||
72 | w_title, |
||
963 | leency | 73 | w_work, |
74 | w_work_button, |
||
75 | w_work_button_text, |
||
76 | w_work_text, |
||
77 | w_work_graph; |
||
78 | }; |
||
79 | |||
80 | /********************************************************* |
||
81 | |||
82 | {x_start|y_start}, {x_size|y_size}, color_back, color_title, color_frames |
||
83 | EBX = [x_start][x_size] |
||
84 | ECX = [y_start][y_size] |
||
85 | EDX, ESI, EDI = [00RRGGBB] |
||
86 | *********************************************************/ |
||
87 | |||
88 | inline fastcall void sys_draw_window(dword EBX, ECX, EDX, ESI, EDI) |
||
89 | { |
||
90 | EAX = 0; // function 0 : define and draw window |
||
91 | $int 0x40 |
||
92 | } |
||
93 | |||
94 | |||
95 | /********************************************************* |
||
96 | 01 = PUTPIXEL |
||
97 | ebx [x] |
||
98 | ecx [y] |
||
99 | edx pixel color 0x0XRRGGBB |
||
100 | ^ 0 normal put, 1 negative |
||
101 | ret: nothing changed |
||
102 | *********************************************************/ |
||
103 | |||
104 | inline fastcall void sys_put_pixel(dword EBX,ECX,EDX) |
||
105 | { |
||
106 | EAX=1; |
||
107 | $int 0x40 |
||
108 | } |
||
109 | |||
110 | |||
111 | /********************************************************* |
||
112 | 02 = GET KEY |
||
113 | ret: al 0 successful -> ah = key |
||
114 | al 1 no key in buffer |
||
115 | MODIFIED, see below... |
||
116 | *********************************************************/ |
||
117 | |||
118 | inline fastcall dword sys_get_key() |
||
119 | { |
||
120 | EAX = 2; // just read it key from buffer |
||
121 | $int 0x40 |
||
122 | $shr eax,8 |
||
123 | } //return eax=key code. |
||
124 | |||
125 | |||
126 | /********************************************************* |
||
127 | 03 = GET SYSTEM CLOCK |
||
128 | ret: eax 0x00SSMMHH sec,min,hour |
||
129 | *********************************************************/ |
||
130 | |||
131 | #define sys_get_time sys_get_clock |
||
132 | inline fastcall dword sys_get_clock() |
||
133 | { |
||
134 | EAX=3; |
||
135 | $int 0x40 |
||
136 | } |
||
137 | |||
138 | |||
139 | /********************************************************* |
||
140 | 04 = WRITE TEXT TO WINDOW |
||
141 | ebx [x start]*65536 + [y start] |
||
142 | ecx text color 0x00RRGGBB |
||
143 | edx pointer to text beginning |
||
144 | esi text length |
||
145 | return: nothing changed |
||
146 | *********************************************************/ |
||
147 | |||
148 | #define sys_print_text sys_write_text |
||
149 | inline fastcall void sys_write_text(dword EBX, ECX, EDX, ESI) |
||
150 | { |
||
151 | EAX = 4; |
||
152 | $int 0x40; |
||
153 | } |
||
154 | |||
155 | inline fastcall void sys_write_char(dword EBX, ECX, EDX) |
||
156 | { |
||
157 | EAX = 4; |
||
158 | ESI = 1; |
||
159 | $int 0x40 |
||
160 | } |
||
161 | |||
162 | |||
163 | /********************************************************* |
||
164 | 05 = DELAY X/100 SECS |
||
165 | ebx delay in 1/100 secs |
||
166 | ret: nothing changed |
||
167 | *********************************************************/ |
||
168 | |||
169 | #define sys_wait sys_delay |
||
170 | inline fastcall void sys_delay(dword EBX) |
||
171 | { |
||
172 | EAX = 5; |
||
173 | $int 0x40 |
||
174 | } |
||
175 | |||
176 | |||
177 | /********************************************************* |
||
178 | 06 = OPEN FILE FROM FLOPPY |
||
179 | ebx pointer to filename -> 11 capital letters |
||
180 | ecx set 0x00000000 - reserved |
||
181 | edx set 0xffffffff - reserved |
||
182 | esi read to mem position |
||
183 | ret: ebx = file size |
||
184 | *********************************************************/ |
||
185 | |||
186 | inline fastcall dword sys_open_file_floppy(dword EBX, ESI) |
||
187 | { |
||
188 | ECX = 0; |
||
189 | EDX = -1; |
||
190 | EAX = 6; |
||
191 | $int 0x40 |
||
192 | } |
||
193 | |||
194 | |||
195 | /********************************************************* |
||
196 | 07 = PUTIMAGE |
||
197 | ebx pointer to image in memory - RRGGBBRRGGBB.. |
||
198 | ecx image size [x]*65536+[y] |
||
199 | edx image position in window [x]*65536+[y] |
||
200 | ret: eax 0 succesful, 1 overlapped |
||
201 | *********************************************************/ |
||
202 | |||
203 | inline fastcall dword sys_put_image(dword EBX, ECX, EDX) |
||
204 | { |
||
205 | EAX = 7; |
||
206 | $int 0x40 |
||
207 | } |
||
208 | |||
209 | |||
210 | /********************************************************* |
||
211 | 08 = DEFINE BUTTON |
||
212 | ebx [x start]*65536 + [x size] |
||
213 | ecx [y start]*65536 + [y size] |
||
214 | edx button id number |
||
215 | esi button color 0x 00 RR GG BB |
||
216 | ret: nothing changed |
||
217 | *********************************************************/ |
||
218 | |||
219 | inline fastcall void sys_draw_button(dword EBX, ECX, EDX, ESI) |
||
220 | { |
||
221 | EAX = 8; |
||
222 | $int 0x40 |
||
223 | } |
||
224 | |||
225 | inline fastcall void sys_delete_button(dword EDX) |
||
226 | { |
||
227 | EAX = 8; |
||
228 | EDX |= 0x80000000; |
||
229 | $int 0x40 |
||
230 | } |
||
231 | |||
232 | |||
233 | /********************************************************* |
||
234 | 09 = PROCESS INFO |
||
235 | ebx pointer to 1024 bytes table |
||
236 | ecx process number or -1 = who am I |
||
237 | ret: eax number of processes |
||
238 | table : +00 dword cpu usage |
||
239 | +04 word processes position in windowing stack |
||
240 | +06 word window stack value at ecx |
||
241 | +10 12 db name of the process |
||
242 | +22 dword start of processes memory |
||
243 | +26 dword memory used by process |
||
244 | +30 dword PID of the process |
||
245 | +34 dword window x start |
||
246 | +38 dword window y start |
||
247 | +42 dword window x size |
||
248 | +46 dword window y size |
||
249 | *********************************************************/ |
||
250 | |||
251 | inline fastcall dword sys_process_info(dword EBX, ECX) |
||
252 | { |
||
253 | EAX = 9; |
||
254 | $int 0x40 |
||
255 | } |
||
256 | |||
257 | |||
258 | /********************************************************* |
||
259 | 10 = WAIT FOR EVENT |
||
260 | ret: eax event type, |
||
261 | 1 window redraw, |
||
262 | 2 key in buffer, |
||
263 | 3 button pressed |
||
264 | *********************************************************/ |
||
265 | |||
266 | inline fastcall dword sys_wait_event() |
||
267 | { |
||
268 | EAX = 10; // wait here for event |
||
269 | $int 0x40 |
||
270 | } |
||
271 | |||
272 | |||
273 | /********************************************************* |
||
274 | 11 = CHECK FOR EVENT, NO WAIT |
||
275 | ret: eax 0 no event, |
||
276 | 1 window redraw, |
||
277 | 2 key in buffer, |
||
278 | 3 button pressed |
||
279 | *********************************************************/ |
||
280 | |||
281 | inline fastcall dword sys_nowait_event() |
||
282 | { |
||
283 | EAX = 11; |
||
284 | $int 0x40 |
||
285 | } |
||
286 | |||
287 | |||
288 | /********************************************************* |
||
289 | 12 = WINDOW REDRAW |
||
290 | EBX=1 start of draw, =2 end of draw. |
||
291 | *********************************************************/ |
||
292 | |||
293 | inline fastcall void sys_window_redraw(dword EBX) |
||
294 | { |
||
295 | EAX = 12; // function 12:tell os about windowdraw |
||
296 | $int 0x40 |
||
297 | } |
||
298 | |||
299 | inline fastcall void sys_begin_draw() |
||
300 | { |
||
301 | EAX = 12; |
||
302 | EBX = 1; |
||
303 | $int 0x40 |
||
304 | } |
||
305 | |||
306 | inline fastcall void sys_end_draw() |
||
307 | { |
||
308 | EAX = 12; |
||
309 | EBX = 2; |
||
310 | $int 0x40 |
||
311 | } |
||
312 | |||
313 | /********************************************************* |
||
314 | 13 = DRAW BAR |
||
315 | DrawBar(EBX=[xstart][xsize],ECX=[ystart][ysize],EDX=[0x00RRGGBB]) |
||
316 | ebx [x start]*65536 + [x size] |
||
317 | ecx [y start]*65536 + [y size] |
||
318 | edx color 0x00RRGGBB |
||
319 | ret: nothing changed |
||
320 | *********************************************************/ |
||
321 | |||
322 | inline fastcall void sys_draw_bar(dword EBX, ECX, EDX) |
||
323 | { |
||
324 | EAX = 13; |
||
325 | $int 0x40 |
||
326 | } |
||
327 | |||
328 | |||
329 | /********************************************************* |
||
330 | 14 = GET SCREEN MAX |
||
331 | ret: eax [screen x max]*65536 + [screen y max] |
||
332 | *********************************************************/ |
||
333 | |||
334 | inline fastcall dword sys_get_screen_size() |
||
335 | { |
||
336 | EAX = 14; |
||
337 | $int 0x40 |
||
338 | } |
||
339 | |||
340 | |||
341 | /********************************************************* |
||
342 | 15 = BACKGROUND |
||
343 | ebx 1 : set background size |
||
344 | ecx x size |
||
345 | edx y size |
||
346 | ebx 2 : write to background memory - max (0x100000-16) |
||
347 | ecx position in memory in bytes |
||
348 | edx color 0x00RRGGBB |
||
349 | ebx 3 : draw background |
||
350 | ebx 4 : type of background draw |
||
351 | ecx 1 - tile |
||
352 | ecx 2 - stretch |
||
353 | ebx 5 : blockmove image to os bgr memory |
||
354 | ecx - from |
||
355 | edx - to where in os bgr memory |
||
356 | esi - count of bytes to move |
||
357 | *********************************************************/ |
||
358 | |||
359 | inline fastcall void sys_set_background(dword EBX, ECX, EDX, ESI) |
||
360 | { |
||
361 | EAX = 15; |
||
362 | $int 0x40 |
||
363 | } |
||
364 | |||
365 | |||
366 | /********************************************************* |
||
367 | 17 = GET PRESSED BUTTON ID |
||
368 | ret: al 0 successful -> ah = id number al 1 no key in buffer. |
||
369 | MODIFIED, see below. |
||
370 | *********************************************************/ |
||
371 | |||
372 | inline fastcall dword sys_get_button_id() |
||
373 | { |
||
374 | EAX = 17; // Get ID |
||
375 | $int 0x40 |
||
376 | $shr eax,8 |
||
377 | } //eax=id, eax=0 no id. |
||
378 | |||
379 | |||
380 | /********************************************************* |
||
381 | 18 = SYSTEM SERVICE |
||
382 | ebx 1 - system boot |
||
383 | ebx 2 - force terminate , ecx process no |
||
384 | ebx 4 - idle clock cycles / second |
||
385 | ebx 5 - time stamp counter / second - cpu speed |
||
386 | HD-> ebx 6 - save ramdisk to /hd/1/menuet.img |
||
387 | *********************************************************/ |
||
388 | |||
389 | inline fastcall dword sys_service(dword EBX, ECX) |
||
390 | { |
||
391 | EAX = 18; |
||
392 | $int 0x40 |
||
393 | } |
||
394 | |||
395 | inline fastcall void sys_shutdown() |
||
396 | { |
||
397 | EAX = 18; |
||
398 | EBX = 1; |
||
399 | $int 0x40 |
||
400 | } |
||
401 | |||
402 | inline fastcall void sys_kill(dword ECX) |
||
403 | { |
||
404 | EAX = 18; |
||
405 | EBX = 2; |
||
406 | $int 0x40 |
||
407 | } |
||
408 | |||
409 | inline fastcall dword sys_get_idle() |
||
410 | { |
||
411 | EAX = 18; |
||
412 | EBX = 4; |
||
413 | $int 0x40 |
||
414 | } |
||
415 | |||
416 | inline fastcall dword sys_get_tscsec() |
||
417 | { |
||
418 | EAX = 18; |
||
419 | EBX = 5; |
||
420 | $int 0x40 |
||
421 | } |
||
422 | |||
423 | |||
424 | /********************************************************* |
||
425 | 19 = START PROGRAM from RAMDISK |
||
426 | ebx point to 11 char filename |
||
427 | ecx 0, or point to ASCIIZ start parameters - max 256 bytes |
||
428 | ret: eax 0 successful |
||
429 | eax other error code |
||
430 | *********************************************************/ |
||
431 | |||
432 | inline fastcall dword sys_exec_app_ramdisk(dword EBX, ECX) |
||
433 | { |
||
434 | EAX = 19; |
||
435 | $int 0x40 |
||
436 | } |
||
437 | |||
438 | |||
439 | /********************************************************* |
||
440 | 20 = MIDI INTERFACE - MPU401 |
||
441 | ebx 1 - reset device |
||
442 | ebx 2 - cl midi data to output |
||
443 | *********************************************************/ |
||
444 | |||
445 | inline fastcall void sys_midi(dword EBX) |
||
446 | { |
||
447 | EAX = 20; |
||
448 | $int 0x40 |
||
449 | } |
||
450 | |||
451 | |||
452 | /********************************************************* |
||
453 | 21 = SETUP FOR DEVICES |
||
454 | ebx 1=roland mpu midi base , base io address |
||
455 | ebx 2=keyboard 1 base keymap 2 shift keymap (ecx pointer to keymap) |
||
456 | 9 country 1eng 2fi 3ger 4rus |
||
457 | ebx 3=cd base 1 pri.master 2 pri slave, |
||
458 | 3 sec master 4 sec slave |
||
459 | ebx 4=sb16 base, base io address |
||
460 | ebx 5=system language, 1eng 2fi 3ger 4rus |
||
461 | ebx 6=wss base, base io address |
||
462 | ebx 7=hd base, 1 pri.master 2 pri slave |
||
463 | 3 sec master 4 sec slave |
||
464 | ebx 8=fat32 partition in hd |
||
465 | *********************************************************/ |
||
466 | |||
467 | inline fastcall void sys_setup_devices(dword EBX, ECX) |
||
468 | { |
||
469 | EAX = 21; |
||
470 | $int 0x40 |
||
471 | } |
||
472 | |||
473 | |||
474 | /********************************************************* |
||
475 | 23 = WAIT FOR EVENT WITH TIMEOUT |
||
476 | ebx time to delay in hs |
||
477 | ret: eax event type: 0 no event, 1 window redraw, |
||
478 | 2 key in buffer, 3 button |
||
479 | *********************************************************/ |
||
480 | |||
481 | inline fastcall dword sys_wait_event_timeout(dword EBX) |
||
482 | { |
||
483 | EAX = 23; |
||
484 | $int 0x40 |
||
485 | } |
||
486 | |||
487 | |||
488 | /********************************************************* |
||
489 | 24 = CD AUDIO |
||
490 | ebx 1 - play from ecx 00 FR SS MM |
||
491 | ebx 2 - get playlist size of ecx to [edx] |
||
492 | ebx 3 - stop/pause play |
||
493 | *********************************************************/ |
||
494 | |||
495 | inline fastcall void sys_cd_audio(dword EBX, ECX, EDX) |
||
496 | { |
||
497 | EAX = 24; |
||
498 | $int 0x40 |
||
499 | } |
||
500 | |||
501 | |||
502 | /********************************************************* |
||
503 | 25 = SB16 - mixer I |
||
504 | ebx 1 - set main volume cl [L]*16+[R] |
||
505 | ebx 2 - set cd volume cl [L]*16+[R] |
||
506 | *********************************************************/ |
||
507 | |||
508 | inline fastcall void sys_sb16_mixer_1(dword EBX, ECX) |
||
509 | { |
||
510 | EAX = 25; |
||
511 | $int 0x40 |
||
512 | } |
||
513 | |||
514 | |||
515 | /********************************************************* |
||
516 | 26 = GET SETUP FOR DEVICES |
||
517 | ebx 1=roland mpu midi base , base io address |
||
518 | ebx 2=keyboard 1 base keymap 2 shift keymap |
||
519 | 9 country 1eng 2fi 3ger 4rus |
||
520 | ebx 3=cd base 1 pri.master 2 pri slave, |
||
521 | 3 sec master 4 sec slave |
||
522 | ebx 4=sb16 base, base io address |
||
523 | ebx 5=system language, 1eng 2fi 3ger 4rus |
||
524 | ebx 6=wss base, base io address |
||
525 | ebx 7=hd base, 1 pri.master 2 pri slave |
||
526 | 3 sec master 4 sec slave |
||
527 | ebx 8=fat32 partition in hd |
||
528 | ebx 9=1/100 timer tics from start -> eax |
||
529 | return value in eax |
||
530 | *********************************************************/ |
||
531 | |||
532 | inline fastcall dword sys_get_setup_devices(dword EBX) |
||
533 | { |
||
534 | EAX = 26; |
||
535 | $int 0x40 |
||
536 | } |
||
537 | |||
538 | |||
539 | /********************************************************* |
||
540 | 27 = WINDOWS SOUND SYSTEM |
||
541 | ebx 1 - set main volume to cl 0-255 |
||
542 | ebx 2 - set cd volume to cl 0-255 |
||
543 | *********************************************************/ |
||
544 | |||
545 | inline fastcall void sys_windows_sound_system(dword EBX, ECX) |
||
546 | { |
||
547 | EAX = 27; |
||
548 | $int 0x40 |
||
549 | } |
||
550 | |||
551 | |||
552 | /********************************************************* |
||
553 | 28 = SB16 - mixer II |
||
554 | ebx 1 - set main volume to cl 0-255 |
||
555 | ebx 2 - set cd volume to cl 0-255 |
||
556 | *********************************************************/ |
||
557 | |||
558 | inline fastcall void sys_sb16_mixer_2(dword EBX, ECX) |
||
559 | { |
||
560 | EAX = 28; |
||
561 | $int 0x40 |
||
562 | } |
||
563 | |||
564 | |||
565 | /********************************************************* |
||
566 | 29 = GET DATE |
||
567 | ret: eax 0x00YYDDMM year date month |
||
568 | *********************************************************/ |
||
569 | |||
570 | inline fastcall dword sys_get_date() |
||
571 | { |
||
572 | EAX = 29; |
||
573 | $int 0x40 |
||
574 | } |
||
575 | |||
576 | |||
577 | /********************************************************* |
||
578 | 30 = READ HD |
||
579 | ebx pointer to file |
||
580 | ecx file lenght |
||
581 | edx block to read, starts from 1, blocksize = 512 bytes |
||
582 | esi reserved, set as 1 |
||
583 | edi pointer to return/work area (atleast 20 000 bytes) |
||
584 | return: work_area+1024 <- requested block of 512 bytes |
||
585 | *********************************************************/ |
||
586 | |||
587 | inline fastcall dword sys_read_hd(dword EBX, ECX, EDX, ESI, EDI) |
||
588 | { |
||
589 | EAX = 30; |
||
590 | $int 0x40 |
||
591 | } |
||
592 | |||
593 | |||
594 | /********************************************************* |
||
595 | 31 = START APP FROM HD |
||
596 | ebx pointer to file |
||
597 | ecx file lenght |
||
598 | edx pointer to return/work area (atleast 20 000 bytes) |
||
599 | ret eax=0 successful, eax<>0 errorcode |
||
600 | *********************************************************/ |
||
601 | |||
602 | inline fastcall dword sys_exec_app_hd() |
||
603 | { |
||
604 | EAX = 31; |
||
605 | $int 0x40 |
||
606 | } |
||
607 | |||
608 | |||
609 | /********************************************************* |
||
610 | 32 = DELETE FILE FROM FLOPPY IMAGE IN MEMORY |
||
611 | ebx pointer to filename |
||
612 | *********************************************************/ |
||
613 | |||
614 | inline fastcall dword sys_floppy_delete(EBX) |
||
615 | { |
||
616 | EAX = 32; |
||
617 | $int 0x40 |
||
618 | } |
||
619 | |||
620 | |||
621 | /********************************************************* |
||
622 | 33 = SAVE FILE TO FLOPPY IMAGE IN MEMORY |
||
623 | ebx pointer to file name |
||
624 | ecx pointer to data |
||
625 | edx count to write in bytes |
||
626 | esi 0 create new , ( 1 append - not implemented yet ) |
||
627 | *********************************************************/ |
||
628 | |||
629 | inline fastcall dword sys_floppy_save(EBX,ECX,EDX) |
||
630 | { |
||
631 | EAX = 33; |
||
632 | ESI = 0; |
||
633 | $int 0x40 |
||
634 | } |
||
635 | |||
636 | |||
637 | /********************************************************* |
||
638 | 34 = READ DIRECTORY FROM FLOPPY |
||
639 | ebx reserved : set as zero |
||
640 | ecx reserved : set as zero |
||
641 | edx start 512 block to read |
||
642 | esi reserved : set as 1 |
||
643 | edi pointer to return area |
||
644 | *********************************************************/ |
||
645 | |||
646 | /********************************************************* |
||
647 | 35 = READ SCREEN PIXEL |
||
648 | ebx = pixel count from top left of the screen |
||
649 | return : eax = 0x00RRGGBB |
||
650 | *********************************************************/ |
||
651 | |||
652 | inline fastcall dword sys_read_pixel(dword EBX) |
||
653 | { |
||
654 | EAX = 35; |
||
655 | $int 0x40 |
||
656 | } |
||
657 | |||
658 | |||
659 | /********************************************************* |
||
660 | 37 = READ MOUSE POSITION |
||
661 | ebx=0 screen relative |
||
662 | ebx=1 window relative |
||
663 | ebx=2 buttons pressed |
||
664 | return in eax |
||
665 | *********************************************************/ |
||
666 | |||
667 | inline fastcall dword sys_read_mouse(dword EBX) |
||
668 | { |
||
669 | EAX = 37; |
||
670 | $int 0x40 |
||
671 | } |
||
672 | |||
673 | |||
674 | /********************************************************* |
||
675 | 38 = DRAW LINE |
||
676 | ebx [x start] shl 16 + [x end] |
||
677 | ecx [y start] shl 16 + [y end] |
||
678 | edx colour 0x00RRGGBB |
||
679 | return : nothing changed |
||
680 | *********************************************************/ |
||
681 | |||
682 | inline fastcall void sys_draw_line(dword EBX, ECX, EDX) |
||
683 | { |
||
684 | EAX = 38; |
||
685 | $int 0x40 |
||
686 | } |
||
687 | |||
688 | |||
689 | /********************************************************* |
||
690 | 39 = GET BACKGROUND |
||
691 | ebx=1 -> eax=[bgr x size] shl 16 + [bgr y size] |
||
692 | ebx=2 |
||
693 | ecx= postition of backgrounds memorymap to return in eax |
||
694 | ebx=4 -> eax=1 tiled, eax=2 stretched |
||
695 | *********************************************************/ |
||
696 | |||
697 | inline fastcall dword sys_get_background(dword EBX, ECX) |
||
698 | { |
||
699 | EAX = 39; |
||
700 | $int 0x40 |
||
701 | } |
||
702 | |||
703 | |||
704 | /********************************************************* |
||
705 | 40 = SET BITFIELD FOR WANTED EVENTS |
||
706 | as default: |
||
707 | ebx = 00000000 00000000 00000000 00000111b events: |
||
708 | I window draw |
||
709 | I key in buffer |
||
710 | I button in buffer |
||
711 | I (end request) |
||
712 | I desktop background draw |
||
713 | I mouse change |
||
714 | I IPC message |
||
715 | I stack |
||
716 | I---------------I get irqs data |
||
717 | |||
718 | *********************************************************/ |
||
719 | |||
720 | //sys_set_event_mask() |
||
721 | //{ |
||
722 | //} |
||
723 | |||
724 | /********************************************************* |
||
725 | 41 = GET IRQ OWNER |
||
726 | ebx = irq |
||
727 | return : PID of the process |
||
728 | *********************************************************/ |
||
729 | |||
730 | /********************************************************* |
||
731 | 42 = GET DATA READ BY IRQ |
||
732 | ebx IRQ number |
||
733 | return : eax number of bytes in buffer |
||
734 | bl data |
||
735 | ecx 0 = successful data read |
||
736 | 1 = no data in buffer |
||
737 | 2 = incorrect IRQ owner |
||
738 | *********************************************************/ |
||
739 | |||
740 | /********************************************************* |
||
741 | 43 = SEND/READ DATA TO/FROM DEVICE |
||
742 | |||
743 | SEND: |
||
744 | |||
745 | bl : data |
||
746 | cx : port |
||
747 | |||
748 | return: eax: status of read ( 0 if successful, other if error ) |
||
749 | |||
750 | READ: |
||
751 | |||
752 | ecx : bit 31 set + port |
||
753 | |||
754 | return: eax: 0 status of read ( 0 if successful, other if error ) |
||
755 | ebx: low 8 bits : value |
||
756 | *********************************************************/ |
||
757 | |||
758 | inline fastcall dword sys_read_port(word CX) |
||
759 | { |
||
760 | EAX = 43; |
||
761 | ECX |= 0x80000000; // set bit 31 |
||
762 | $int 0x40 |
||
763 | } |
||
764 | |||
765 | inline fastcall dword sys_read_port_fast(dword ECX) |
||
766 | { |
||
767 | EAX = 43; |
||
768 | $int 0x40 |
||
769 | } |
||
770 | |||
771 | inline fastcall dword sys_write_port(word CX,byte BL) |
||
772 | { |
||
773 | EAX = 43; |
||
774 | $int 0x40 |
||
775 | } |
||
776 | |||
777 | |||
778 | /********************************************************* |
||
779 | 44 = PROGRAM IRQ's |
||
780 | ebx pointer to table |
||
781 | ecx irq number |
||
782 | *********************************************************/ |
||
783 | |||
784 | inline fastcall void sys_program_irqs(dword EBX,ECX) |
||
785 | { |
||
786 | EAX = 44; |
||
787 | $int 0x40 |
||
788 | } |
||
789 | |||
790 | |||
791 | /********************************************************* |
||
792 | 45 = RESERVE/FREE IRQ |
||
793 | ebx 0 reserve 1 free |
||
794 | ecx IRQ number |
||
795 | |||
796 | ret eax 0 successful, 1 error |
||
797 | *********************************************************/ |
||
798 | |||
799 | inline fastcall dword sys_reserve_irq(dword ECX) |
||
800 | { |
||
801 | EAX = 45; |
||
802 | EBX = 0; |
||
803 | $int 0x40 |
||
804 | } |
||
805 | |||
806 | inline fastcall dword sys_free_irq(dword ECX) |
||
807 | { |
||
808 | EAX = 45; |
||
809 | EBX = 1; |
||
810 | $int 0x40 |
||
811 | } |
||
812 | |||
813 | |||
814 | /********************************************************* |
||
815 | 46 = RESERVE/FREE PORT AREA |
||
816 | ebx 0 reserve 1 free |
||
817 | ecx port area start |
||
818 | edx port area end |
||
819 | ret eax 0 successful, 1 error |
||
820 | *********************************************************/ |
||
821 | |||
822 | inline fastcall dword sys_reserve_port_area(dword ECX,EDX) |
||
823 | { |
||
824 | EAX = 46; |
||
825 | EBX = 0; |
||
826 | $int 0x40 |
||
827 | } |
||
828 | |||
829 | inline fastcall dword sys_free_port_area() |
||
830 | { |
||
831 | EAX = 46; |
||
832 | EBX = 1; |
||
833 | $int 0x40 |
||
834 | } |
||
835 | |||
836 | |||
837 | /********************************************************* |
||
838 | 47 = DISPLAY NUMBER TO WINDOW |
||
839 | ebx = print type, bl=0 -> ecx is number |
||
840 | bl=1 -> ecx is pointer |
||
841 | bh=0 -> display decimal |
||
842 | bh=1 -> display hexadecimal |
||
843 | bh=2 -> display binary |
||
844 | bits 16-21 = number of digits to display (0-32) |
||
845 | bits 22-31 = reserved |
||
846 | ecx = number or pointer |
||
847 | edx = x shl 16 + y |
||
848 | esi = color |
||
849 | *********************************************************/ |
||
850 | inline fastcall void sys_write_number(dword EBX, ECX, EDX, ESI) |
||
851 | { |
||
852 | EAX = 47; |
||
853 | $int 0x40 |
||
854 | } |
||
855 | |||
856 | |||
857 | /********************************************************* |
||
858 | 48 = DEFINE GENERAL WINDOW PROPERTIES |
||
859 | ebx = 0 apply/redraw |
||
860 | ecx = 0 , apply/redraw desktop |
||
861 | ebx = 1 define button style |
||
862 | ecx = 0 , set flat buttons |
||
863 | ecx = 1 , set 3d buttons |
||
864 | ebx = 2 define window colors |
||
865 | ecx = pointer to table |
||
866 | edx = number of bytes defined |
||
867 | ebx = 3 get define window colors |
||
868 | ecx = pointer to table |
||
869 | edx = number of bytes to get |
||
870 | ebx = 4 get window skin height |
||
871 | *********************************************************/ |
||
872 | |||
873 | inline fastcall void sys_redraw_desktop() |
||
874 | { |
||
875 | EAX = 48; |
||
876 | EBX = ECX = 0; |
||
877 | $int 0x40 |
||
878 | } |
||
879 | |||
880 | inline fastcall void sys_set_button_style(dword ECX) |
||
881 | { |
||
882 | EAX = 48; |
||
883 | EBX = 1; |
||
884 | $int 0x40 |
||
885 | } |
||
886 | |||
887 | inline fastcall void sys_set_colors(dword ECX,EDX) |
||
888 | { |
||
889 | EAX = 48; |
||
890 | EBX = 2; |
||
891 | $int 0x40 |
||
892 | } |
||
893 | |||
894 | inline fastcall void sys_get_colors(dword ECX,EDX) |
||
895 | { |
||
896 | EAX = 48; |
||
897 | EBX = 3; |
||
898 | $int 0x40 |
||
899 | } |
||
900 | |||
901 | inline fastcall dword sys_get_skin_height() |
||
902 | { |
||
903 | EAX = 48; |
||
904 | EBX = 4; |
||
905 | $int 0x40 |
||
906 | } |
||
907 | |||
908 | |||
909 | /********************************************************* |
||
910 | 50 = FREE FORM WINDOW SHAPE AND SCALE |
||
911 | ebx = 0 ; shape reference area |
||
912 | ecx = pointer to reference area |
||
913 | byte per pixel, 0 not used, 1=used, other = reserved |
||
914 | ebx = 1 ; scale of reference area (default 1:1) |
||
915 | ecx : scale is set to 2^ecx |
||
916 | return: nothing changed |
||
917 | *********************************************************/ |
||
918 | |||
919 | inline void sys_freeform_window(dword EBX,ECX) |
||
920 | { |
||
921 | EAX = 50; |
||
922 | $int 0x40 |
||
923 | } |
||
924 | |||
925 | |||
926 | /********************************************************* |
||
927 | 51 = CREATE THREAD |
||
928 | ebx = 1 ; create |
||
929 | ecx ; = thread entry point |
||
930 | edx ; = thread stack position |
||
931 | return : eax = pid or 0xfffffff0+ for error |
||
932 | *********************************************************/ |
||
933 | |||
934 | inline fastcall dword sys_create_thread(dword ECX,EDX) |
||
935 | { |
||
936 | EAX = 51; |
||
937 | EBX = 1; |
||
938 | $int 0x40 |
||
939 | } |
||
940 | |||
941 | |||
942 | /********************************************************* |
||
943 | 52 = STACK DRIVER STATUS |
||
944 | - see stack.txt |
||
945 | net.h-- |
||
946 | |||
947 | |||
948 | 53 = SOCKET INTERFACE |
||
949 | - see stack.txt |
||
950 | net.h-- |
||
951 | *********************************************************/ |
||
952 | |||
953 | |||
954 | /********************************************************* |
||
955 | 55 = SOUND INTERFACE |
||
956 | |||
957 | ebx = 0 ; load sound block |
||
958 | ecx = ; pointer to (default size 65536 byte) soundblock |
||
959 | |||
960 | ebx = 1 ; play (default 44 khz 8 bit mono) sound block |
||
961 | |||
962 | ebx = 2 ; set format |
||
963 | ecx = 1 ; set play block length |
||
964 | edx = ; block length |
||
965 | *********************************************************/ |
||
966 | |||
967 | inline fastcall void sys_sound_load(dword ECX) |
||
968 | { |
||
969 | EAX = 55; |
||
970 | EBX = 0; |
||
971 | $int 0x40 |
||
972 | } |
||
973 | |||
974 | inline fastcall void sys_sound_play() |
||
975 | { |
||
976 | EAX = 55; |
||
977 | EBX = 1; |
||
978 | $int 0x40 |
||
979 | } |
||
980 | |||
981 | inline fastcall void sys_sound_format_length(dword EDX) |
||
982 | { |
||
983 | EAX = 55; |
||
984 | EBX = 2; |
||
985 | ECX = 1; |
||
986 | $int 0x40 |
||
987 | } |
||
988 | |||
989 | |||
990 | /********************************************************* |
||
991 | 56 = WRITE FILE TO HD |
||
992 | ebx pointer to 12 char filename |
||
993 | ecx bytes to write |
||
994 | edx pointer to data to write |
||
995 | esi pointer to path |
||
996 | path db 0 |
||
997 | *********************************************************/ |
||
998 | |||
999 | |||
1000 | /********************************************************* |
||
1001 | 57 = DELETE FILE FROM HD |
||
1002 | ebx pointer to filename : 11 capital letters |
||
1003 | edx pointer to path : path db 0 |
||
1004 | *********************************************************/ |
||
1005 | |||
1006 | |||
1007 | /********************************************************* |
||
1008 | 58 = SYSTEM TREE ACCESS |
||
1009 | ebx pointer to fileinfo block |
||
1010 | fileinfo: |
||
1011 | dd 0x0 ; 0=read (/write/delete/append) |
||
1012 | dd 0x0 ; 512 block to read 0+ |
||
1013 | dd 0x1 ; blocks to read (/bytes to write/append) |
||
1014 | dd 0x20000 ; return data pointer |
||
1015 | dd 0x10000 ; work area for os - 16384 bytes |
||
1016 | db '/RAMDISK/FIRST/KERNEL.ASM',0 ; ASCIIZ dir & filename |
||
1017 | *********************************************************/ |
||
1018 | inline fastcall void sys_tree_access(dword EBX) |
||
1019 | { |
||
1020 | EAX = 58; |
||
1021 | $int 0x40 |
||
1022 | } |
||
1023 | |||
1024 | |||
1025 | /********************************************************* |
||
1026 | 59 = TRACE FOR SYSTEM CALLS FROM PROCESSES |
||
1027 | ebx = 0 ; get system events |
||
1028 | ecx ; pointer to table -> ; 64 bytes/system call descriptor |
||
1029 | ; +00 PID |
||
1030 | ; +32 EDI |
||
1031 | ; +36 ESI |
||
1032 | ; +40 EBP |
||
1033 | ; +44 ESP |
||
1034 | ; +48 EBX |
||
1035 | ; +52 EDX |
||
1036 | ; +56 ECX |
||
1037 | ; +60 EAX |
||
1038 | edx ; number of bytes to return to table (currently max 16*64) |
||
1039 | return: eax = number of system calls from start |
||
1040 | latest call is saved to (eax mod 16)*64 in table |
||
1041 | ebx = 0 : above format |
||
1042 | *********************************************************/ |
||
1043 | |||
1044 | inline fastcall void sys_syscall_trace(dword ECX,EDX) |
||
1045 | { |
||
1046 | EAX = 59; |
||
1047 | EBX = 0; |
||
1048 | $int 0x40 |
||
1049 | } |
||
1050 | |||
1051 | |||
1052 | /********************************************************* |
||
1053 | 60 = IPC |
||
1054 | ebx = 1 ; define receive area |
||
1055 | ecx = pointer to start |
||
1056 | edx = size of area |
||
1057 | |||
1058 | ebx = 2 ; send message |
||
1059 | ecx = PID |
||
1060 | edx = pointer to message |
||
1061 | esi = length |
||
1062 | *********************************************************/ |
||
1063 | |||
1064 | inline fastcall void sys_ipc_init(dword ECX, EDX) |
||
1065 | { |
||
1066 | EAX = 60; |
||
1067 | EBX = 1; |
||
1068 | $int 0x40 |
||
1069 | } |
||
1070 | |||
1071 | inline fastcall void sys_ipc_send(dword ECX, EDX, ESI) |
||
1072 | { |
||
1073 | EAX = 60; |
||
1074 | EBX = 2; |
||
1075 | $int 0x40 |
||
1076 | } |
||
1077 | |||
1078 | |||
1079 | /********************************************************* |
||
1080 | 63 = GENERAL DEBUG BOARD |
||
1081 | |||
1082 | ebx = 1 write byte in cl |
||
1083 | ebx = 2 read byte : ebx = 1 -> byte in al ; ebx = 0 -> no data |
||
1084 | *********************************************************/ |
||
1085 | |||
1086 | inline fastcall void sys_debug_write_char(byte CL) |
||
1087 | { |
||
1088 | EAX = 63; |
||
1089 | EBX = 1; |
||
1090 | $int 0x40 |
||
1091 | } |
||
1092 | |||
1093 | :fastcall void sys_debug_write_string(dword ESI) |
||
1094 | { |
||
1095 | $pusha |
||
1096 | CL = DSBYTE[ESI]; |
||
1097 | while(CL!=0) |
||
1098 | { |
||
1099 | sys_debug_write_char(CL); |
||
1100 | ESI++; |
||
1101 | CL = DSBYTE[ESI]; |
||
1102 | } |
||
1103 | $popa |
||
1104 | } |
||
1105 | |||
1106 | inline fastcall dword sys_debug_read_char(dword EBX) |
||
1107 | { |
||
1108 | EAX = 63; |
||
1109 | EBX = 2; |
||
1110 | $int 0x40 |
||
1111 | } |
||
1112 | |||
1113 | |||
1114 | inline fastcall dword window_move_size(dword EBX,ECX,EDX,ESI){ |
||
1115 | EAX = 67; |
||
1116 | $int 0x40 |
||
1117 | } |
||
1118 | |||
1119 | |||
1120 | /********************************************************* |
||
1121 | -1 = EXIT PROCESS |
||
1122 | *********************************************************/ |
||
1123 | |||
1124 | inline fastcall void sys_exit_process() |
||
1125 | { |
||
1126 | $or eax,0xffffffff |
||
1127 | $int 0x40 |
||
1128 | }>-> |