1,7 → 1,7 |
/* |
Sphinx C-- header file for MenuetOS applications. |
Based on msys.h-- written by Alexey Sugonyaev and modified by Barry Kauler. |
This extended version is written by Ivan Poddubny. |
This file is rewritten by Ivan Poddubny. |
|
e-mail: ivan-yar@bk.ru |
*/ |
24,11 → 24,13 |
#define clGreen 0x0000ff00 |
#define clBlue 0x000000ff |
|
// Events |
#define evReDraw 1 |
#define evKey 2 |
#define evButton 3 |
#define evMouse 6 |
#define evIPC 7 |
#define evStack 8 |
|
struct FileInfo |
{ |
73,13 → 75,14 |
w_work_graph; |
}; |
|
/* |
/********************************************************* |
0 = DEFINE WINDOW |
{x_start|y_start}, {x_size|y_size}, color_back, color_title, color_frames |
EBX = [x_start][x_size] |
ECX = [y_start][y_size] |
EDX, ESI, EDI = [00RRGGBB] |
*/ |
*********************************************************/ |
|
inline fastcall void sys_draw_window(dword EBX, ECX, EDX, ESI, EDI) |
{ |
EAX = 0; // function 0 : define and draw window |
86,7 → 89,8 |
$int 0x40 |
} |
|
/* |
|
/********************************************************* |
01 = PUTPIXEL |
ebx [x] |
ecx [y] |
93,7 → 97,8 |
edx pixel color 0x0XRRGGBB |
^ 0 normal put, 1 negative |
ret: nothing changed |
*/ |
*********************************************************/ |
|
inline fastcall void sys_put_pixel(dword EBX,ECX,EDX) |
{ |
EAX=1; |
100,12 → 105,14 |
$int 0x40 |
} |
|
/* |
|
/********************************************************* |
02 = GET KEY |
ret: al 0 successful -> ah = key |
al 1 no key in buffer |
MODIFIED, see below... |
*/ |
*********************************************************/ |
|
inline fastcall dword sys_get_key() |
{ |
EAX = 2; // just read it key from buffer |
113,10 → 120,13 |
$shr eax,8 |
} //return eax=key code. |
|
/* |
|
/********************************************************* |
03 = GET SYSTEM CLOCK |
ret: eax 0x00SSMMHH sec,min,hour |
*/ |
*********************************************************/ |
|
#define sys_get_time sys_get_clock |
inline fastcall dword sys_get_clock() |
{ |
EAX=3; |
123,14 → 133,17 |
$int 0x40 |
} |
|
/* |
|
/********************************************************* |
04 = WRITE TEXT TO WINDOW |
ebx [x start]*65536 + [y start] |
ecx text color 0x00RRGGBB |
edx pointer to text beginning |
esi text length |
ret: nothing changed |
*/ |
return: nothing changed |
*********************************************************/ |
|
#define sys_print_text sys_write_text |
inline fastcall void sys_write_text(dword EBX, ECX, EDX, ESI) |
{ |
EAX = 4; |
137,11 → 150,21 |
$int 0x40; |
} |
|
/* |
inline fastcall void sys_write_char(dword EBX, ECX, EDX) |
{ |
EAX = 4; |
ESI = 1; |
$int 0x40 |
} |
|
|
/********************************************************* |
05 = DELAY X/100 SECS |
ebx delay in 1/100 secs |
ret: nothing changed |
*/ |
*********************************************************/ |
|
#define sys_wait sys_delay |
inline fastcall void sys_delay(dword EBX) |
{ |
EAX = 5; |
148,29 → 171,33 |
$int 0x40 |
} |
|
/* |
|
/********************************************************* |
06 = OPEN FILE FROM FLOPPY |
ebx pointer to filename -> 11 capital letters |
ecx set 0x00000000 - reserved |
edx set 0xffffffff - reserved |
esi read to mem position |
ret: nothing changed |
*/ |
inline fastcall void sys_open_file_floppy(dword EBX, ESI) |
ret: ebx = file size |
*********************************************************/ |
|
inline fastcall dword sys_open_file_floppy(dword EBX, ESI) |
{ |
$xor ecx,ecx |
ECX = 0; |
EDX = -1; |
EAX = 6; |
$int 0x40 |
} |
|
/* |
|
/********************************************************* |
07 = PUTIMAGE |
ebx pointer to image in memory - RRGGBBRRGGBB.. |
ecx image size [x]*65536+[y] |
edx image position in window [x]*65536+[y] |
ret: eax 0 succesful, 1 overlapped |
*/ |
*********************************************************/ |
|
inline fastcall dword sys_put_image(dword EBX, ECX, EDX) |
{ |
EAX = 7; |
177,7 → 204,8 |
$int 0x40 |
} |
|
/* |
|
/********************************************************* |
08 = DEFINE BUTTON |
ebx [x start]*65536 + [x size] |
ecx [y start]*65536 + [y size] |
184,7 → 212,8 |
edx button id number |
esi button color 0x 00 RR GG BB |
ret: nothing changed |
*/ |
*********************************************************/ |
|
inline fastcall void sys_draw_button(dword EBX, ECX, EDX, ESI) |
{ |
EAX = 8; |
191,7 → 220,15 |
$int 0x40 |
} |
|
/* |
inline fastcall void sys_delete_button(dword EDX) |
{ |
EAX = 8; |
EDX |= 0x80000000; |
$int 0x40 |
} |
|
|
/********************************************************* |
09 = PROCESS INFO |
ebx pointer to 1024 bytes table |
ecx process number or -1 = who am I |
207,7 → 244,8 |
+38 dword window y start |
+42 dword window x size |
+46 dword window y size |
*/ |
*********************************************************/ |
|
inline fastcall dword sys_process_info(dword EBX, ECX) |
{ |
EAX = 9; |
214,10 → 252,15 |
$int 0x40 |
} |
|
/* |
|
/********************************************************* |
10 = WAIT FOR EVENT |
ret: eax event type, 1 window redraw, 2 key in buffer, 3 button pressed |
*/ |
ret: eax event type, |
1 window redraw, |
2 key in buffer, |
3 button pressed |
*********************************************************/ |
|
inline fastcall dword sys_wait_event() |
{ |
EAX = 10; // wait here for event |
224,10 → 267,15 |
$int 0x40 |
} |
|
/* |
|
/********************************************************* |
11 = CHECK FOR EVENT, NO WAIT |
ret: eax 0 no event, 1 window redraw, 2 key in buffer, 3 button pressed |
*/ |
ret: eax 0 no event, |
1 window redraw, |
2 key in buffer, |
3 button pressed |
*********************************************************/ |
|
inline fastcall dword sys_nowait_event() |
{ |
EAX = 11; |
234,9 → 282,12 |
$int 0x40 |
} |
|
/* 12 = WINDOW REDRAW |
|
/********************************************************* |
12 = WINDOW REDRAW |
EBX=1 start of draw, =2 end of draw. |
*/ |
*********************************************************/ |
|
inline fastcall void sys_window_redraw(dword EBX) |
{ |
EAX = 12; // function 12:tell os about windowdraw |
243,7 → 294,21 |
$int 0x40 |
} |
|
/* |
inline fastcall void sys_begin_draw() |
{ |
EAX = 12; |
EBX = 1; |
$int 0x40 |
} |
|
inline fastcall void sys_end_draw() |
{ |
EAX = 12; |
EBX = 2; |
$int 0x40 |
} |
|
/********************************************************* |
13 = DRAW BAR |
DrawBar(EBX=[xstart][xsize],ECX=[ystart][ysize],EDX=[0x00RRGGBB]) |
ebx [x start]*65536 + [x size] |
250,7 → 315,8 |
ecx [y start]*65536 + [y size] |
edx color 0x00RRGGBB |
ret: nothing changed |
*/ |
*********************************************************/ |
|
inline fastcall void sys_draw_bar(dword EBX, ECX, EDX) |
{ |
EAX = 13; |
257,10 → 323,12 |
$int 0x40 |
} |
|
/* |
|
/********************************************************* |
14 = GET SCREEN MAX |
ret: eax [screen x max]*65536 + [screen y max] |
*/ |
*********************************************************/ |
|
inline fastcall dword sys_get_screen_size() |
{ |
EAX = 14; |
267,7 → 335,8 |
$int 0x40 |
} |
|
/* |
|
/********************************************************* |
15 = BACKGROUND |
ebx 1 : set background size |
ecx x size |
283,7 → 352,8 |
ecx - from |
edx - to where in os bgr memory |
esi - count of bytes to move |
*/ |
*********************************************************/ |
|
inline fastcall void sys_set_background(dword EBX, ECX, EDX, ESI) |
{ |
EAX = 15; |
291,11 → 361,12 |
} |
|
|
/* |
/********************************************************* |
17 = GET PRESSED BUTTON ID |
ret: al 0 successful -> ah = id number al 1 no key in buffer. |
MODIFIED, see below. |
*/ |
*********************************************************/ |
|
inline fastcall dword sys_get_button_id() |
{ |
EAX = 17; // Get ID |
303,7 → 374,8 |
$shr eax,8 |
} //eax=id, eax=0 no id. |
|
/* |
|
/********************************************************* |
18 = SYSTEM SERVICE |
ebx 1 - system boot |
ebx 2 - force terminate , ecx process no |
310,7 → 382,8 |
ebx 4 - idle clock cycles / second |
ebx 5 - time stamp counter / second - cpu speed |
HD-> ebx 6 - save ramdisk to /hd/1/menuet.img |
*/ |
*********************************************************/ |
|
inline fastcall dword sys_service(dword EBX, ECX) |
{ |
EAX = 18; |
317,13 → 390,43 |
$int 0x40 |
} |
|
/* |
inline fastcall void sys_shutdown() |
{ |
EAX = 18; |
EBX = 1; |
$int 0x40 |
} |
|
inline fastcall void sys_kill(dword ECX) |
{ |
EAX = 18; |
EBX = 2; |
$int 0x40 |
} |
|
inline fastcall dword sys_get_idle() |
{ |
EAX = 18; |
EBX = 4; |
$int 0x40 |
} |
|
inline fastcall dword sys_get_tscsec() |
{ |
EAX = 18; |
EBX = 5; |
$int 0x40 |
} |
|
|
/********************************************************* |
19 = START PROGRAM from RAMDISK |
ebx point to 11 char filename |
ecx 0, or point to ASCIIZ start parameters - max 256 bytes |
ret: eax 0 successful |
eax other error code |
*/ |
*********************************************************/ |
|
inline fastcall dword sys_exec_app_ramdisk(dword EBX, ECX) |
{ |
EAX = 19; |
330,11 → 433,13 |
$int 0x40 |
} |
|
/* |
|
/********************************************************* |
20 = MIDI INTERFACE - MPU401 |
ebx 1 - reset device |
ebx 2 - cl midi data to output |
*/ |
*********************************************************/ |
|
inline fastcall void sys_midi(dword EBX) |
{ |
EAX = 20; |
341,7 → 446,8 |
$int 0x40 |
} |
|
/* |
|
/********************************************************* |
21 = SETUP FOR DEVICES |
ebx 1=roland mpu midi base , base io address |
ebx 2=keyboard 1 base keymap 2 shift keymap (ecx pointer to keymap) |
354,7 → 460,8 |
ebx 7=hd base, 1 pri.master 2 pri slave |
3 sec master 4 sec slave |
ebx 8=fat32 partition in hd |
*/ |
*********************************************************/ |
|
inline fastcall void sys_setup_devices(dword EBX, ECX) |
{ |
EAX = 21; |
361,12 → 468,14 |
$int 0x40 |
} |
|
/* |
|
/********************************************************* |
23 = WAIT FOR EVENT WITH TIMEOUT |
ebx time to delay in hs |
ret: eax event type: 0 no event, 1 window redraw, |
2 key in buffer, 3 button |
*/ |
*********************************************************/ |
|
inline fastcall dword sys_wait_event_timeout(dword EBX) |
{ |
EAX = 23; |
373,12 → 482,14 |
$int 0x40 |
} |
|
/* |
|
/********************************************************* |
24 = CD AUDIO |
ebx 1 - play from ecx 00 FR SS MM |
ebx 2 - get playlist size of ecx to [edx] |
ebx 3 - stop/pause play |
*/ |
*********************************************************/ |
|
inline fastcall void sys_cd_audio(dword EBX, ECX, EDX) |
{ |
EAX = 24; |
385,11 → 496,13 |
$int 0x40 |
} |
|
/* |
|
/********************************************************* |
25 = SB16 - mixer I |
ebx 1 - set main volume cl [L]*16+[R] |
ebx 2 - set cd volume cl [L]*16+[R] |
*/ |
*********************************************************/ |
|
inline fastcall void sys_sb16_mixer_1(dword EBX, ECX) |
{ |
EAX = 25; |
396,7 → 509,8 |
$int 0x40 |
} |
|
/* |
|
/********************************************************* |
26 = GET SETUP FOR DEVICES |
ebx 1=roland mpu midi base , base io address |
ebx 2=keyboard 1 base keymap 2 shift keymap |
409,9 → 523,10 |
ebx 7=hd base, 1 pri.master 2 pri slave |
3 sec master 4 sec slave |
ebx 8=fat32 partition in hd |
ebx 9=1/100 timer tics from stard -> eax |
ebx 9=1/100 timer tics from start -> eax |
return value in eax |
*/ |
*********************************************************/ |
|
inline fastcall dword sys_get_setup_devices(dword EBX) |
{ |
EAX = 26; |
418,11 → 533,13 |
$int 0x40 |
} |
|
/* |
|
/********************************************************* |
27 = WINDOWS SOUND SYSTEM |
ebx 1 - set main volume to cl 0-255 |
ebx 2 - set cd volume to cl 0-255 |
*/ |
*********************************************************/ |
|
inline fastcall void sys_windows_sound_system(dword EBX, ECX) |
{ |
EAX = 27; |
429,11 → 546,13 |
$int 0x40 |
} |
|
/* |
|
/********************************************************* |
28 = SB16 - mixer II |
ebx 1 - set main volume to cl 0-255 |
ebx 2 - set cd volume to cl 0-255 |
*/ |
*********************************************************/ |
|
inline fastcall void sys_sb16_mixer_2(dword EBX, ECX) |
{ |
EAX = 28; |
440,10 → 559,12 |
$int 0x40 |
} |
|
/* |
|
/********************************************************* |
29 = GET DATE |
ret: eax 0x00YYDDMM year date month |
*/ |
*********************************************************/ |
|
inline fastcall dword sys_get_date() |
{ |
EAX = 29; |
450,7 → 571,8 |
$int 0x40 |
} |
|
/* |
|
/********************************************************* |
30 = READ HD |
ebx pointer to file |
ecx file lenght |
458,7 → 580,8 |
esi reserved, set as 1 |
edi pointer to return/work area (atleast 20 000 bytes) |
return: work_area+1024 <- requested block of 512 bytes |
*/ |
*********************************************************/ |
|
inline fastcall dword sys_read_hd(dword EBX, ECX, EDX, ESI, EDI) |
{ |
EAX = 30; |
465,13 → 588,15 |
$int 0x40 |
} |
|
/* |
|
/********************************************************* |
31 = START APP FROM HD |
ebx pointer to file |
ecx file lenght |
edx pointer to return/work area (atleast 20 000 bytes) |
ret eax=0 successful, eax<>0 errorcode |
*/ |
*********************************************************/ |
|
inline fastcall dword sys_exec_app_hd() |
{ |
EAX = 31; |
478,10 → 603,11 |
$int 0x40 |
} |
|
/* |
|
/********************************************************* |
32 = DELETE FILE FROM FLOPPY IMAGE IN MEMORY |
ebx pointer to filename |
*/ |
*********************************************************/ |
|
inline fastcall dword sys_floppy_delete(EBX) |
{ |
489,13 → 615,15 |
$int 0x40 |
} |
|
/* |
|
/********************************************************* |
33 = SAVE FILE TO FLOPPY IMAGE IN MEMORY |
ebx pointer to file name |
ecx pointer to data |
edx count to write in bytes |
esi 0 create new , ( 1 append - not implemented yet ) |
*/ |
*********************************************************/ |
|
inline fastcall dword sys_floppy_save(EBX,ECX,EDX) |
{ |
EAX = 33; |
503,7 → 631,8 |
$int 0x40 |
} |
|
/* |
|
/********************************************************* |
34 = READ DIRECTORY FROM FLOPPY |
ebx reserved : set as zero |
ecx reserved : set as zero |
510,20 → 639,29 |
edx start 512 block to read |
esi reserved : set as 1 |
edi pointer to return area |
*********************************************************/ |
|
|
/********************************************************* |
35 = READ SCREEN PIXEL |
ebx = pixel count from top left of the screen |
return : eax = 0x00RRGGBB |
*/ |
*********************************************************/ |
|
/* |
inline fastcall dword sys_read_pixel(dword EBX) |
{ |
EAX = 35; |
$int 0x40 |
} |
|
|
/********************************************************* |
37 = READ MOUSE POSITION |
ebx=0 screen relative |
ebx=1 window relative |
ebx=2 buttons pressed |
return in eax |
*/ |
*********************************************************/ |
|
inline fastcall dword sys_read_mouse(dword EBX) |
{ |
EAX = 37; |
530,13 → 668,15 |
$int 0x40 |
} |
|
/* |
|
/********************************************************* |
38 = DRAW LINE |
ebx [x start] shl 16 + [x end] |
ecx [y start] shl 16 + [y end] |
edx colour 0x00RRGGBB |
return : nothing changed |
*/ |
*********************************************************/ |
|
inline fastcall void sys_draw_line(dword EBX, ECX, EDX) |
{ |
EAX = 38; |
543,13 → 683,15 |
$int 0x40 |
} |
|
/* |
|
/********************************************************* |
39 = GET BACKGROUND |
ebx=1 -> eax=[bgr x size] shl 16 + [bgr y size] |
ebx=2 |
ecx= postition of backgrounds memorymap to return in eax |
ebx=4 -> eax=1 tiled, eax=2 stretched |
*/ |
*********************************************************/ |
|
inline fastcall dword sys_get_background(dword EBX, ECX) |
{ |
EAX = 39; |
556,7 → 698,8 |
$int 0x40 |
} |
|
/* |
|
/********************************************************* |
40 = SET BITFIELD FOR WANTED EVENTS |
as default: |
ebx = 00000000 00000000 00000000 00000111b events: |
565,15 → 708,24 |
I button in buffer |
I (end request) |
I desktop background draw |
I (mouse change) |
I mouse change |
I IPC message |
I stack |
I---------------I get irqs data |
|
*********************************************************/ |
|
//sys_set_event_mask() |
//{ |
//} |
|
/********************************************************* |
41 = GET IRQ OWNER |
ebx = irq |
return : PID of the process |
*********************************************************/ |
|
|
/********************************************************* |
42 = GET DATA READ BY IRQ |
ebx IRQ number |
return : eax number of bytes in buffer |
581,33 → 733,106 |
ecx 0 = successful data read |
1 = no data in buffer |
2 = incorrect IRQ owner |
*********************************************************/ |
|
/********************************************************* |
43 = SEND/READ DATA TO/FROM DEVICE |
|
43 = SEND DATA TO DEVICE |
bx : port |
cl : data |
return : eax = if 0 successful, other = error |
SEND: |
|
bl : data |
cx : port |
|
return: eax: status of read ( 0 if successful, other if error ) |
|
READ: |
|
ecx : bit 31 set + port |
|
return: eax: 0 status of read ( 0 if successful, other if error ) |
ebx: low 8 bits : value |
*********************************************************/ |
|
inline fastcall dword sys_read_port(word CX) |
{ |
EAX = 43; |
ECX |= 0x80000000; // set bit 31 |
$int 0x40 |
} |
|
inline fastcall dword sys_read_port_fast(dword ECX) |
{ |
EAX = 43; |
$int 0x40 |
} |
|
inline fastcall dword sys_write_port(word CX,byte BL) |
{ |
EAX = 43; |
$int 0x40 |
} |
|
|
/********************************************************* |
44 = PROGRAM IRQ's |
ebx pointer to table |
ecx irq number |
*********************************************************/ |
|
inline fastcall void sys_program_irqs(dword EBX,ECX) |
{ |
EAX = 44; |
$int 0x40 |
} |
|
|
/********************************************************* |
45 = RESERVE/FREE IRQ |
ebx 0 reserve 1 free |
ecx IRQ number |
|
ret eax 0 successful, 1 error |
*********************************************************/ |
|
inline fastcall dword sys_reserve_irq(dword ECX) |
{ |
EAX = 45; |
EBX = 0; |
$int 0x40 |
} |
|
inline fastcall dword sys_free_irq(dword ECX) |
{ |
EAX = 45; |
EBX = 1; |
$int 0x40 |
} |
|
|
/********************************************************* |
46 = RESERVE/FREE PORT AREA |
ebx 0 reserve 1 free |
ecx port area start |
edx port area end |
ret eax 0 successful, 1 error |
*/ |
*********************************************************/ |
|
/* |
inline fastcall dword sys_reserve_port_area(dword ECX,EDX) |
{ |
EAX = 46; |
EBX = 0; |
$int 0x40 |
} |
|
inline fastcall dword sys_free_port_area() |
{ |
EAX = 46; |
EBX = 1; |
$int 0x40 |
} |
|
|
/********************************************************* |
47 = DISPLAY NUMBER TO WINDOW |
ebx = print type, bl=0 -> ecx is number |
bl=1 -> ecx is pointer |
619,7 → 844,7 |
ecx = number or pointer |
edx = x shl 16 + y |
esi = color |
*/ |
*********************************************************/ |
inline fastcall void sys_write_number(dword EBX, ECX, EDX, ESI) |
{ |
EAX = 47; |
626,7 → 851,8 |
$int 0x40 |
} |
|
/* |
|
/********************************************************* |
48 = DEFINE GENERAL WINDOW PROPERTIES |
ebx = 0 apply/redraw |
ecx = 0 , apply/redraw desktop |
639,7 → 865,8 |
ebx = 3 get define window colors |
ecx = pointer to table |
edx = number of bytes to get |
*/ |
ebx = 4 get window skin height |
*********************************************************/ |
|
inline fastcall void sys_redraw_desktop() |
{ |
669,14 → 896,15 |
$int 0x40 |
} |
|
/* |
49 = DEFINE APPLICATIONS INTERNAL INTERRUPTS |
ebx = 0 |
ecx point to dword x 256 table of interrupt entries |
inside the application |
return : nothing changed |
inline fastcall dword sys_get_skin_height(dword) |
{ |
EAX = 48; |
EBX = 4; |
$int 0x40 |
} |
|
|
/********************************************************* |
50 = FREE FORM WINDOW SHAPE AND SCALE |
ebx = 0 ; shape reference area |
ecx = pointer to reference area |
684,14 → 912,22 |
ebx = 1 ; scale of reference area (default 1:1) |
ecx : scale is set to 2^ecx |
return: nothing changed |
*********************************************************/ |
|
inline void sys_freeform_window(dword EBX,ECX) |
{ |
EAX = 50; |
$int 0x40 |
} |
|
|
/********************************************************* |
51 = CREATE THREAD |
ebx = 1 ; create |
ecx ; = thread entry point |
edx ; = thread stack position |
return : eax = pid or 0xfffffff0+ for error |
*/ |
*********************************************************/ |
|
inline fastcall dword sys_create_thread(dword ECX,EDX) |
{ |
700,26 → 936,56 |
$int 0x40 |
} |
|
/* |
|
/********************************************************* |
52 = STACK DRIVER STATUS |
- see stack.txt |
net.h-- |
|
|
53 = SOCKET INTERFACE |
- see stack.txt |
net.h-- |
*********************************************************/ |
|
|
54 = USER EVENTS |
- not ready yet |
/********************************************************* |
55 = SOUND INTERFACE |
|
ebx = 0 ; load sound block |
ecx = ; pointer to (default size 65536 byte) soundblock |
|
55 = SOUND INTERFACE |
ebx = 0 ; load 44 khz 8 bit mono sound block |
ecx ; = pointer to 65536 byte soundblock |
ebx = 1 ; play 44 khz 8 bit mono sound block |
ebx = 1 ; play (default 44 khz 8 bit mono) sound block |
|
ebx = 2 ; set format |
ecx = 1 ; set play block length |
edx = ; block length |
*********************************************************/ |
|
inline fastcall void sys_sound_load(dword ECX) |
{ |
EAX = 55; |
EBX = 0; |
$int 0x40 |
} |
|
inline fastcall void sys_sound_play() |
{ |
EAX = 55; |
EBX = 1; |
$int 0x40 |
} |
|
inline fastcall void sys_sound_format_length(dword EDX) |
{ |
EAX = 55; |
EBX = 2; |
ECX = 1; |
$int 0x40 |
} |
|
|
/********************************************************* |
56 = WRITE FILE TO HD |
ebx pointer to 12 char filename |
ecx bytes to write |
726,15 → 992,17 |
edx pointer to data to write |
esi pointer to path |
path db 0 |
*********************************************************/ |
|
|
/********************************************************* |
57 = DELETE FILE FROM HD |
ebx pointer to filename : 11 capital letters |
edx pointer to path : path db 0 |
*/ |
*********************************************************/ |
|
|
/* |
/********************************************************* |
58 = SYSTEM TREE ACCESS |
ebx pointer to fileinfo block |
fileinfo: |
744,7 → 1012,7 |
dd 0x20000 ; return data pointer |
dd 0x10000 ; work area for os - 16384 bytes |
db '/RAMDISK/FIRST/KERNEL.ASM',0 ; ASCIIZ dir & filename |
*/ |
*********************************************************/ |
inline fastcall void sys_tree_access(dword EBX) |
{ |
EAX = 58; |
751,7 → 1019,8 |
$int 0x40 |
} |
|
/* |
|
/********************************************************* |
59 = TRACE FOR SYSTEM CALLS FROM PROCESSES |
ebx = 0 ; get system events |
ecx ; pointer to table -> ; 64 bytes/system call descriptor |
768,9 → 1037,17 |
return: eax = number of system calls from start |
latest call is saved to (eax mod 16)*64 in table |
ebx = 0 : above format |
*/ |
*********************************************************/ |
|
/* |
inline fastcall void sys_syscall_trace(dword ECX,EDX) |
{ |
EAX = 59; |
EBX = 0; |
$int 0x40 |
} |
|
|
/********************************************************* |
60 = IPC |
ebx = 1 ; define receive area |
ecx = pointer to start |
780,7 → 1057,7 |
ecx = PID |
edx = pointer to message |
esi = length |
*/ |
*********************************************************/ |
|
inline fastcall void sys_ipc_init(dword ECX, EDX) |
{ |
796,11 → 1073,48 |
$int 0x40 |
} |
|
/* -1 = EXIT PROCESS */ |
|
/********************************************************* |
63 = GENERAL DEBUG BOARD |
|
ebx = 1 write byte in cl |
ebx = 2 read byte : ebx = 1 -> byte in al ; ebx = 0 -> no data |
*********************************************************/ |
|
inline fastcall void sys_debug_write_char(byte CL) |
{ |
EAX = 63; |
EBX = 1; |
$int 0x40 |
} |
|
:fastcall void sys_debug_write_string(dword ESI) |
{ |
$pusha |
CL = DSBYTE[ESI]; |
while(CL!=0) |
{ |
sys_debug_write_char(CL); |
ESI++; |
CL = DSBYTE[ESI]; |
} |
$popa |
} |
|
inline fastcall dword sys_debug_read_char(dword EBX) |
{ |
EAX = 63; |
EBX = 2; |
$int 0x40 |
} |
|
|
/********************************************************* |
-1 = EXIT PROCESS |
*********************************************************/ |
|
inline fastcall void sys_exit_process() |
{ |
$xor eax,eax |
$dec eax |
$or eax,0xffffffff |
$int 0x40 |
} |