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