2007-08-29 11:16:31 +02:00
|
|
|
|
{cp866}
|
|
|
|
|
|
|
|
|
|
{ User interface }
|
|
|
|
|
procedure kos_definewindow(x, y, w, h: Word; style, header, clframe: DWord); assembler; register;
|
|
|
|
|
asm
|
|
|
|
|
pushl %ebx
|
|
|
|
|
pushl %ecx
|
|
|
|
|
pushl %edx
|
|
|
|
|
pushl %esi
|
|
|
|
|
pushl %edi
|
|
|
|
|
movl %eax, %ebx
|
|
|
|
|
xchgl %edx, %ecx
|
|
|
|
|
movl header, %esi
|
|
|
|
|
shll $16, %ebx
|
|
|
|
|
shll $16, %ecx
|
|
|
|
|
movl clframe, %edi
|
|
|
|
|
movw %dx, %bx
|
|
|
|
|
movw h, %cx
|
|
|
|
|
xorl %eax, %eax
|
|
|
|
|
movl style, %edx
|
|
|
|
|
decl %ebx {㬥<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD>ਭ<EFBFBD> <EFBFBD><EFBFBD> 1}
|
|
|
|
|
decl %ecx {㬥<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> 1}
|
2007-09-12 18:34:21 +02:00
|
|
|
|
andl $0xEFFFFFFF, %edx
|
2007-08-29 11:16:31 +02:00
|
|
|
|
int $0x40
|
|
|
|
|
popl %edi
|
|
|
|
|
popl %esi
|
|
|
|
|
popl %edx
|
|
|
|
|
popl %ecx
|
|
|
|
|
popl %ebx
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
procedure kos_movewindow(x, y, w, h: DWord); assembler; register;
|
|
|
|
|
asm
|
|
|
|
|
pushl %eax
|
|
|
|
|
pushl %ebx
|
|
|
|
|
pushl %ecx
|
|
|
|
|
pushl %edx
|
|
|
|
|
pushl %esi
|
|
|
|
|
movl %eax, %ebx
|
|
|
|
|
xchgl %ecx, %edx
|
|
|
|
|
movl $67, %eax
|
|
|
|
|
movl h, %esi
|
|
|
|
|
decl %edx {㬥<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD>ਭ<EFBFBD> <EFBFBD><EFBFBD> 1}
|
|
|
|
|
decl %esi {㬥<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> 1}
|
|
|
|
|
int $0x40
|
|
|
|
|
popl %esi
|
|
|
|
|
popl %edx
|
|
|
|
|
popl %ecx
|
|
|
|
|
popl %ebx
|
|
|
|
|
popl %eax
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
function kos_getkey(): DWord; assembler; register;
|
|
|
|
|
asm
|
|
|
|
|
movl $2, %eax
|
|
|
|
|
int $0x40
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
function kos_getevent(wait: Boolean = True): DWord; assembler; register;
|
|
|
|
|
asm
|
|
|
|
|
andl $1, %eax
|
|
|
|
|
xorb $1, %al
|
|
|
|
|
addl $10, %eax
|
|
|
|
|
int $0x40
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
function kos_waitevent(timeout: DWord): DWord; assembler; register;
|
|
|
|
|
asm
|
|
|
|
|
pushl %ebx
|
|
|
|
|
movl $23, %ebx
|
|
|
|
|
xchgl %eax, %ebx
|
|
|
|
|
int $0x40
|
|
|
|
|
popl %ebx
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
function kos_getbutton(): DWord; assembler; register;
|
|
|
|
|
asm
|
|
|
|
|
movl $17, %eax
|
|
|
|
|
int $0x40
|
|
|
|
|
shrl $8, %eax
|
|
|
|
|
andl $0xFF, %eax
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
function kos_getmousepos(): TKosPoint; assembler; register;
|
|
|
|
|
{@return: x*65536 + y}
|
|
|
|
|
asm
|
|
|
|
|
pushl %eax
|
|
|
|
|
pushl %ebx
|
|
|
|
|
pushl %ecx
|
|
|
|
|
pushl %eax
|
|
|
|
|
movl $37, %eax
|
|
|
|
|
xorl %ebx, %ebx
|
|
|
|
|
int $0x40
|
|
|
|
|
movswl %ax, %ecx
|
|
|
|
|
popl %ebx
|
|
|
|
|
shrl $16, %eax
|
|
|
|
|
movl %ecx, TKosPoint.Y(%ebx)
|
|
|
|
|
movl %eax, TKosPoint.X(%ebx)
|
|
|
|
|
popl %ecx
|
|
|
|
|
popl %ebx
|
|
|
|
|
popl %eax
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
function kos_getmousewinpos(): TKosPoint; assembler; register;
|
|
|
|
|
{@return: x*65536 + y}
|
|
|
|
|
asm
|
|
|
|
|
pushl %eax
|
|
|
|
|
pushl %ebx
|
|
|
|
|
pushl %ecx
|
|
|
|
|
pushl %eax
|
|
|
|
|
movl $37, %eax
|
|
|
|
|
movl $1, %ebx
|
|
|
|
|
int $0x40
|
|
|
|
|
movswl %ax, %ecx
|
|
|
|
|
popl %ebx
|
|
|
|
|
shrl $16, %eax
|
|
|
|
|
movl %ecx, TKosPoint.Y(%ebx)
|
|
|
|
|
movl %eax, TKosPoint.X(%ebx)
|
|
|
|
|
popl %ecx
|
|
|
|
|
popl %ebx
|
|
|
|
|
popl %eax
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
function kos_getmousebuttons(): DWord; assembler; register;
|
|
|
|
|
{@return:
|
|
|
|
|
<EFBFBD><EFBFBD><EFBFBD> 0 <EFBFBD><EFBFBD>⠭<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> = <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
<EFBFBD><EFBFBD><EFBFBD> 1 <EFBFBD><EFBFBD>⠭<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> = <EFBFBD>ࠢ<EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
<EFBFBD><EFBFBD><EFBFBD> 2 <EFBFBD><EFBFBD>⠭<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> = <EFBFBD>।<EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
<EFBFBD><EFBFBD><EFBFBD> 3 <EFBFBD><EFBFBD>⠭<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> = 4-<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
<EFBFBD><EFBFBD><EFBFBD> 4 <EFBFBD><EFBFBD>⠭<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> = 5-<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>}
|
|
|
|
|
asm
|
|
|
|
|
pushl %ebx
|
|
|
|
|
movl $37, %eax
|
|
|
|
|
movl $2, %ebx
|
|
|
|
|
int $0x40
|
|
|
|
|
popl %ebx
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
procedure kos_maskevents(mask: DWord); assembler; register;
|
|
|
|
|
asm
|
|
|
|
|
pushl %ebx
|
|
|
|
|
xchgl %eax, %ebx
|
|
|
|
|
movl $40, %eax
|
|
|
|
|
int $0x40
|
|
|
|
|
xchgl %eax, %ebx
|
|
|
|
|
popl %ebx
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
procedure kos_setcaption(caption: PChar); assembler; register;
|
|
|
|
|
asm
|
|
|
|
|
pushl %ecx
|
|
|
|
|
pushl %ebx
|
|
|
|
|
xchgl %eax, %ecx
|
|
|
|
|
movl $1, %ebx
|
|
|
|
|
movl $71, %eax
|
|
|
|
|
int $0x40
|
|
|
|
|
xchgl %eax, %ecx
|
|
|
|
|
popl %ebx
|
|
|
|
|
popl %ecx
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
{ Graphics }
|
|
|
|
|
|
2007-09-04 15:23:24 +02:00
|
|
|
|
function kos_screensize(): TKosPoint; assembler; register;
|
|
|
|
|
asm
|
|
|
|
|
pushl %eax
|
|
|
|
|
pushl %ecx
|
|
|
|
|
pushl %eax
|
|
|
|
|
movl $14, %eax
|
|
|
|
|
int $0x40
|
|
|
|
|
movswl %ax, %ecx
|
|
|
|
|
popl %ebx
|
|
|
|
|
shrl $16, %eax
|
|
|
|
|
movl %ecx, TKosPoint.Y(%ebx)
|
|
|
|
|
movl %eax, TKosPoint.X(%ebx)
|
|
|
|
|
popl %ecx
|
|
|
|
|
popl %eax
|
|
|
|
|
end;
|
|
|
|
|
|
2007-08-29 11:16:31 +02:00
|
|
|
|
procedure kos_begindraw(); assembler; register;
|
|
|
|
|
asm
|
|
|
|
|
pushl %ebx
|
|
|
|
|
movl $12, %eax
|
|
|
|
|
movl $1, %ebx
|
|
|
|
|
int $0x40
|
|
|
|
|
popl %ebx
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
procedure kos_enddraw(); assembler; register;
|
|
|
|
|
asm
|
|
|
|
|
pushl %ebx
|
|
|
|
|
movl $12, %eax
|
|
|
|
|
movl $2, %ebx
|
|
|
|
|
int $0x40
|
|
|
|
|
popl %ebx
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
procedure kos_putpixel(x, y: Word; color: DWord); assembler; register;
|
|
|
|
|
asm
|
|
|
|
|
pushl %ebx
|
|
|
|
|
movl %eax, %ebx
|
|
|
|
|
xchgl %edx, %ecx
|
|
|
|
|
movl $1, %eax
|
|
|
|
|
int $0x40
|
|
|
|
|
xchgl %edx, %ecx
|
|
|
|
|
popl %ebx
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
procedure kos_drawtext(x, y: Word; text: String; flags, bgcolor: DWord); assembler; register;
|
|
|
|
|
label nobg;
|
|
|
|
|
asm
|
|
|
|
|
pusha
|
|
|
|
|
shll $16, %eax
|
|
|
|
|
pushl %ecx
|
|
|
|
|
movl flags, %ecx {䫠<EFBFBD><EFBFBD>, 梥<EFBFBD>}
|
|
|
|
|
movl bgcolor, %edi
|
|
|
|
|
movw %dx, %ax
|
|
|
|
|
andl $0x7FFFFFFF, %ecx
|
|
|
|
|
btl $31, %edi
|
|
|
|
|
jnc nobg
|
|
|
|
|
orl $0x40000000, %ecx
|
|
|
|
|
nobg:
|
|
|
|
|
popl %edx
|
|
|
|
|
movl %eax, %ebx {<EFBFBD><EFBFBD><EFBFBD>न<EFBFBD><EFBFBD><EFBFBD><EFBFBD>}
|
|
|
|
|
movzbl (%edx), %esi {<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD>ப<EFBFBD>}
|
|
|
|
|
movl $4, %eax {<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD>㭪樨}
|
|
|
|
|
incl %edx {㪠<EFBFBD><EFBFBD>⥫<EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>ப<EFBFBD>}
|
|
|
|
|
andl $0xFFFFFF, %edi
|
|
|
|
|
int $0x40
|
|
|
|
|
popa
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
procedure kos_drawrect(x, y, w, h: Word; color: DWord); assembler; register;
|
|
|
|
|
asm
|
|
|
|
|
pushl %eax
|
|
|
|
|
pushl %ebx
|
|
|
|
|
pushl %ecx
|
|
|
|
|
pushl %edx
|
|
|
|
|
movl %eax, %ebx
|
|
|
|
|
xchgl %edx, %ecx
|
|
|
|
|
shll $16, %ebx
|
|
|
|
|
shll $16, %ecx
|
|
|
|
|
movl $13, %eax
|
|
|
|
|
movw %dx, %bx
|
|
|
|
|
movw h, %cx
|
|
|
|
|
movl color, %edx
|
|
|
|
|
int $0x40
|
|
|
|
|
popl %edx
|
|
|
|
|
popl %ecx
|
|
|
|
|
popl %ebx
|
|
|
|
|
popl %eax
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
procedure kos_drawline(x1, y1, x2, y2: Word; color: DWord = $000000); assembler; register;
|
|
|
|
|
asm
|
|
|
|
|
pushl %eax
|
|
|
|
|
pushl %ebx
|
|
|
|
|
pushl %ecx
|
|
|
|
|
pushl %edx
|
|
|
|
|
|
|
|
|
|
xchgl %eax, %ecx
|
|
|
|
|
xchgl %ecx, %edx
|
|
|
|
|
movl color, %ebx
|
|
|
|
|
{eax - x2, ebx - color, ecx - y1, edx - x1}
|
|
|
|
|
shll $16, %ecx
|
|
|
|
|
shll $16, %edx
|
|
|
|
|
movw %ax, %dx
|
|
|
|
|
movw y2, %cx
|
|
|
|
|
movl $38, %eax
|
|
|
|
|
xchgl %ebx, %edx
|
|
|
|
|
int $0x40
|
|
|
|
|
|
|
|
|
|
popl %edx
|
|
|
|
|
popl %ecx
|
|
|
|
|
popl %ebx
|
|
|
|
|
popl %eax
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
procedure kos_drawimage(x, y, w, h, depth: DWord; image: Pointer; palette: Pointer; xoffset: DWord); assembler; register;
|
|
|
|
|
asm
|
|
|
|
|
pusha
|
|
|
|
|
shll $16, %eax
|
|
|
|
|
shll $16, %ecx
|
|
|
|
|
orl %eax, %edx
|
|
|
|
|
orl h, %ecx
|
|
|
|
|
movl depth, %esi
|
|
|
|
|
movl image, %ebx
|
|
|
|
|
movl palette, %edi
|
|
|
|
|
movl xoffset, %ebp
|
|
|
|
|
movl $65, %eax
|
|
|
|
|
int $0x40
|
|
|
|
|
popa
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
procedure kos_drawimage24(x, y, w, h: DWord; image: Pointer); assembler; register;
|
|
|
|
|
asm
|
|
|
|
|
pushl %eax
|
|
|
|
|
pushl %ebx
|
|
|
|
|
pushl %ecx
|
|
|
|
|
pushl %edx
|
|
|
|
|
shll $16, %eax
|
|
|
|
|
shll $16, %ecx
|
|
|
|
|
orl %eax, %edx
|
|
|
|
|
orl h, %ecx
|
|
|
|
|
movl image, %ebx
|
|
|
|
|
movl $7, %eax
|
|
|
|
|
int $0x40
|
|
|
|
|
popl %edx
|
|
|
|
|
popl %ecx
|
|
|
|
|
popl %ebx
|
|
|
|
|
popl %eax
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
{ Work with system }
|
|
|
|
|
|
|
|
|
|
{ Work with system - System services }
|
|
|
|
|
|
|
|
|
|
function kos_killthread(tid: TThreadID): Boolean; assembler; register;
|
|
|
|
|
asm
|
|
|
|
|
pushl %ecx
|
|
|
|
|
pushl %ebx
|
|
|
|
|
movl $18, %ecx
|
|
|
|
|
movl $18, %ebx
|
|
|
|
|
xchgl %eax, %ecx
|
|
|
|
|
int $0x40
|
|
|
|
|
andl $1, %eax
|
|
|
|
|
popl %ebx
|
|
|
|
|
popl %ecx
|
|
|
|
|
xorb $1, %al
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
procedure kos_setactivewindow(slot: TThreadSlot); assembler; register;
|
|
|
|
|
asm
|
|
|
|
|
pushl %ecx
|
|
|
|
|
pushl %ebx
|
|
|
|
|
movl $18, %ecx
|
|
|
|
|
movl $3, %ebx
|
|
|
|
|
xchgl %eax, %ecx
|
|
|
|
|
int $0x40
|
|
|
|
|
xchgl %eax, %ecx
|
|
|
|
|
popl %ebx
|
|
|
|
|
popl %ecx
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
{$ifdef EMULATOR}
|
|
|
|
|
function kos_getthreadslot(tid: TThreadID): TThreadSlot;
|
|
|
|
|
var
|
|
|
|
|
ThreadInfo: TKosThreadInfo;
|
|
|
|
|
HighThreadSlot: TThreadSlot;
|
|
|
|
|
begin
|
|
|
|
|
Result := 0;
|
|
|
|
|
repeat
|
|
|
|
|
Inc(Result);
|
|
|
|
|
HighThreadSlot := kos_threadinfo(@ThreadInfo, Result);
|
|
|
|
|
until (Result > HighThreadSlot) or (ThreadInfo.ThreadID = tid);
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
{$else}
|
|
|
|
|
|
|
|
|
|
function kos_getthreadslot(tid: TThreadID): TThreadSlot; assembler; register;
|
|
|
|
|
asm
|
|
|
|
|
pushl %ecx
|
|
|
|
|
pushl %ebx
|
|
|
|
|
movl $18, %ecx
|
|
|
|
|
movl $21, %ebx
|
|
|
|
|
xchgl %eax, %ecx
|
|
|
|
|
int $0x40
|
|
|
|
|
popl %ebx
|
|
|
|
|
popl %ecx
|
|
|
|
|
end;
|
|
|
|
|
{$endif}
|
|
|
|
|
|
|
|
|
|
{ Work with system - Set system parameters }
|
|
|
|
|
|
|
|
|
|
procedure kos_enablepci(); assembler; register;
|
|
|
|
|
asm
|
|
|
|
|
pushl %eax
|
|
|
|
|
pushl %ebx
|
|
|
|
|
pushl %ecx
|
|
|
|
|
movl $21, %eax
|
|
|
|
|
movl $12, %ebx
|
|
|
|
|
movl $1, %ecx
|
|
|
|
|
int $0x40
|
|
|
|
|
popl %ecx
|
|
|
|
|
popl %ebx
|
|
|
|
|
popl %eax
|
|
|
|
|
end;
|
|
|
|
|
|
2007-10-27 18:38:51 +02:00
|
|
|
|
{ Work with system - Get system parameters }
|
|
|
|
|
|
|
|
|
|
function kos_timecounter(): DWord; assembler; register;
|
|
|
|
|
asm
|
|
|
|
|
pushl %ebx
|
|
|
|
|
movl $26, %eax
|
|
|
|
|
movl $9, %ebx
|
|
|
|
|
int $0x40
|
|
|
|
|
popl %ebx
|
|
|
|
|
end;
|
|
|
|
|
|
2007-08-29 11:16:31 +02:00
|
|
|
|
{ Work with system - Internal system services }
|
|
|
|
|
|
|
|
|
|
procedure kos_switchthread(); assembler; register;
|
|
|
|
|
asm
|
|
|
|
|
pushl %eax
|
|
|
|
|
pushl %ebx
|
|
|
|
|
movl $68, %eax
|
|
|
|
|
movl $1, %ebx
|
|
|
|
|
int $0x40
|
|
|
|
|
popl %ebx
|
|
|
|
|
popl %eax
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
function kos_initheap(): DWord; assembler; register;
|
|
|
|
|
asm
|
|
|
|
|
pushl %ebx
|
|
|
|
|
movl $68, %eax
|
|
|
|
|
movl $11, %ebx
|
|
|
|
|
int $0x40
|
|
|
|
|
popl %ebx
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
function kos_alloc(size: DWord): Pointer; assembler; register;
|
|
|
|
|
asm
|
|
|
|
|
pushl %ebx
|
|
|
|
|
pushl %ecx
|
|
|
|
|
movl %eax, %ecx
|
|
|
|
|
movl $68, %eax
|
|
|
|
|
movl $12, %ebx
|
|
|
|
|
int $0x40
|
|
|
|
|
popl %ecx
|
|
|
|
|
popl %ebx
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
function kos_free(ptr: Pointer): Boolean; assembler; register;
|
|
|
|
|
asm
|
|
|
|
|
pushl %ebx
|
|
|
|
|
pushl %ecx
|
|
|
|
|
movl %eax, %ecx
|
|
|
|
|
movl $68, %eax
|
|
|
|
|
movl $13, %ebx
|
|
|
|
|
int $0x40
|
|
|
|
|
popl %ecx
|
|
|
|
|
popl %ebx
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
function kos_loaddriver(name: PChar): THandle; assembler; register;
|
|
|
|
|
asm
|
|
|
|
|
pushl %ebx
|
|
|
|
|
pushl %ecx
|
|
|
|
|
movl %eax, %ecx
|
|
|
|
|
movl $68, %eax
|
|
|
|
|
movl $16, %ebx
|
|
|
|
|
int $0x40
|
|
|
|
|
popl %ecx
|
|
|
|
|
popl %ebx
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
{ Processes and threads }
|
|
|
|
|
|
|
|
|
|
function kos_threadinfo(info: PKosThreadInfo; slot: TThreadSlot): DWord; assembler; register;
|
|
|
|
|
asm
|
|
|
|
|
pushl %ebx
|
|
|
|
|
movl %eax, %ebx
|
|
|
|
|
xchgl %edx, %ecx
|
|
|
|
|
movl $9, %eax
|
|
|
|
|
int $0x40
|
|
|
|
|
xchgl %edx, %ecx
|
|
|
|
|
popl %ebx
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
function kos_newthread(entry, stack: Pointer): TThreadID; assembler; register;
|
|
|
|
|
asm
|
|
|
|
|
pushl %ebx
|
|
|
|
|
pushl %ecx
|
|
|
|
|
movl $1, %ebx
|
|
|
|
|
movl %eax, %ecx
|
|
|
|
|
movl $51, %eax
|
|
|
|
|
int $0x40
|
|
|
|
|
popl %ecx
|
|
|
|
|
popl %ebx
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
procedure kos_initipc(ipc: PKosIPC; size: DWord); assembler; register;
|
|
|
|
|
asm
|
|
|
|
|
pushl %ebx
|
|
|
|
|
pushl %ecx
|
|
|
|
|
movl $60, %ecx
|
|
|
|
|
movl $1, %ebx
|
|
|
|
|
xchgl %eax, %ecx
|
|
|
|
|
int $0x40
|
|
|
|
|
popl %ecx
|
|
|
|
|
popl %ebx
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
function kos_sendmsg(tid: TThreadID; msg: Pointer; size: DWord): DWord; assembler; register;
|
|
|
|
|
{@return:
|
|
|
|
|
0 - <EFBFBD>ᯥ譮
|
|
|
|
|
1 - <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>।<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD> IPC-ᮮ<EFBFBD>饭<EFBFBD><EFBFBD>
|
|
|
|
|
(<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD>ᯥ<EFBFBD>, <EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD>⮪, <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD>㦥<EFBFBD>)
|
|
|
|
|
2 - <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> IPC-<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>; <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
3 - <EFBFBD><EFBFBD>९<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> IPC-<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
4 - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<EFBFBD><EFBFBD>⮪<EFBFBD> <EFBFBD> ⠪<EFBFBD><EFBFBD> PID <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>}
|
|
|
|
|
asm
|
|
|
|
|
pushl %esi
|
|
|
|
|
pushl %ebx
|
|
|
|
|
movl $60, %esi
|
|
|
|
|
movl $2, %ebx
|
|
|
|
|
xchgl %ecx, %esi
|
|
|
|
|
xchgl %eax, %ecx
|
|
|
|
|
int $0x40
|
|
|
|
|
xchgl %ecx, %esi
|
|
|
|
|
popl %ebx
|
|
|
|
|
popl %esi
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
function kos_resizemem(size: DWord): Boolean; assembler; register;
|
|
|
|
|
asm
|
|
|
|
|
pushl %ebx
|
|
|
|
|
pushl %ecx
|
|
|
|
|
movl %eax, %ecx
|
|
|
|
|
movl $64, %eax
|
|
|
|
|
movl $1, %ebx
|
|
|
|
|
int $0x40
|
|
|
|
|
xorb $1, %al
|
|
|
|
|
popl %ecx
|
|
|
|
|
popl %ebx
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
{ File system }
|
|
|
|
|
{ File system - Work with the current folder }
|
|
|
|
|
|
|
|
|
|
procedure kos_setdir(path: PChar); assembler; register;
|
|
|
|
|
asm
|
|
|
|
|
pushl %ecx
|
|
|
|
|
pushl %ebx
|
|
|
|
|
movl $30, %ecx
|
|
|
|
|
movl $1, %ebx
|
|
|
|
|
xchgl %eax, %ecx
|
|
|
|
|
int $0x40
|
|
|
|
|
popl %ebx
|
|
|
|
|
popl %ecx
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
function kos_getdir(path: PChar; size: DWord): DWord; assembler; register;
|
|
|
|
|
asm
|
|
|
|
|
pushl %ecx
|
|
|
|
|
pushl %ebx
|
|
|
|
|
movl $30, %ecx
|
|
|
|
|
movl $2, %ebx
|
|
|
|
|
xchgl %eax, %ecx
|
|
|
|
|
int $0x40
|
|
|
|
|
popl %ebx
|
|
|
|
|
popl %ecx
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
{ File system - Work with file system with long names support }
|
|
|
|
|
|
|
|
|
|
function kos_readfile(kosfile: PKosFile; var readed: Longint): DWord; assembler; register;
|
|
|
|
|
asm
|
|
|
|
|
pushl %ebx
|
|
|
|
|
movl $70, %ebx
|
|
|
|
|
xchgl %eax, %ebx
|
|
|
|
|
movl $0, (%ebx)
|
|
|
|
|
int $0x40
|
|
|
|
|
movl %ebx, (%edx)
|
|
|
|
|
popl %ebx
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
function kos_rewritefile(kosfile: PKosFile; var writed: Longint): DWord; assembler; register;
|
|
|
|
|
asm
|
|
|
|
|
pushl %ebx
|
|
|
|
|
movl $70, %ebx
|
|
|
|
|
xchgl %eax, %ebx
|
|
|
|
|
movl $2, (%ebx)
|
|
|
|
|
int $0x40
|
|
|
|
|
movl %ebx, (%edx)
|
|
|
|
|
popl %ebx
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
function kos_writefile(kosfile: PKosFile; var writed: Longint): DWord; assembler; register;
|
|
|
|
|
asm
|
|
|
|
|
pushl %ebx
|
|
|
|
|
movl $70, %ebx
|
|
|
|
|
xchgl %eax, %ebx
|
|
|
|
|
movl $3, (%ebx)
|
|
|
|
|
int $0x40
|
|
|
|
|
movl %ebx, (%edx)
|
|
|
|
|
popl %ebx
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
function kos_fileinfo(kosfile: PKosFile): DWord; assembler; register;
|
|
|
|
|
asm
|
|
|
|
|
pushl %ebx
|
|
|
|
|
movl $70, %ebx
|
|
|
|
|
xchgl %eax, %ebx
|
|
|
|
|
movl $5, (%ebx)
|
|
|
|
|
int $0x40
|
|
|
|
|
popl %ebx
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
|
2007-09-12 18:34:21 +02:00
|
|
|
|
{ Sound }
|
|
|
|
|
|
2007-09-28 14:26:28 +02:00
|
|
|
|
function kos_speaker(notes: Pointer): Boolean; assembler; register;
|
2007-09-12 18:34:21 +02:00
|
|
|
|
asm
|
|
|
|
|
pushl %esi
|
|
|
|
|
pushl %ebx
|
|
|
|
|
movl $55, %esi
|
|
|
|
|
movl %esi, %ebx
|
|
|
|
|
xchgl %eax, %esi
|
|
|
|
|
int $0x40
|
|
|
|
|
{eax = 55 - <EFBFBD>訡<EFBFBD><EFBFBD>}
|
|
|
|
|
andl $1, %eax
|
|
|
|
|
popl %ebx
|
|
|
|
|
popl %esi
|
|
|
|
|
xorb $1, %al
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
|
2007-08-29 11:16:31 +02:00
|
|
|
|
{ Work with hardware }
|
|
|
|
|
|
|
|
|
|
function kos_readport(index: DWord): DWord; assembler; register;
|
|
|
|
|
label ok, exit;
|
|
|
|
|
asm
|
|
|
|
|
pushl %ecx
|
|
|
|
|
pushl %ebx
|
|
|
|
|
xchgl %eax, %ecx {index}
|
|
|
|
|
movl $43, %eax
|
|
|
|
|
orl $0x80000000, %ecx {index}
|
|
|
|
|
int $0x40
|
|
|
|
|
orl %eax, %eax
|
|
|
|
|
jzl ok
|
|
|
|
|
movl $-1, %eax
|
|
|
|
|
jmp exit
|
|
|
|
|
ok:
|
|
|
|
|
movl %ebx, %eax
|
|
|
|
|
exit:
|
|
|
|
|
popl %ebx
|
|
|
|
|
popl %ecx
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
procedure kos_writeport(index, value: DWord); assembler; register;
|
|
|
|
|
asm
|
|
|
|
|
pushl %eax
|
|
|
|
|
pushl %ebx
|
|
|
|
|
pushl %ecx
|
|
|
|
|
xchgl %edx, %ebx {value}
|
|
|
|
|
xchgl %eax, %ecx {index}
|
|
|
|
|
movl $43, %eax
|
|
|
|
|
int $0x40
|
|
|
|
|
xchgl %edx, %ebx
|
|
|
|
|
popl %ecx
|
|
|
|
|
popl %ebx
|
|
|
|
|
popl %eax
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
function kos_reserveport(port: DWord): Boolean; assembler; register;
|
|
|
|
|
asm
|
|
|
|
|
pushl %ebx
|
|
|
|
|
pushl %ecx
|
|
|
|
|
pushl %edx
|
|
|
|
|
movl %eax, %ecx {port}
|
|
|
|
|
movl $46, %eax
|
|
|
|
|
movl %ecx, %edx {port}
|
|
|
|
|
xorl %ebx, %ebx
|
|
|
|
|
int $0x40
|
|
|
|
|
xorb $1, %al
|
|
|
|
|
popl %edx
|
|
|
|
|
popl %ecx
|
|
|
|
|
popl %ebx
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
{ Work with hardware - Low-level access to PCI}
|
|
|
|
|
|
|
|
|
|
function kos_lastpcibus(): Byte; assembler; register;
|
|
|
|
|
asm
|
|
|
|
|
pushl %ebx
|
|
|
|
|
movl $62, %eax
|
|
|
|
|
movl $1, %ebx
|
|
|
|
|
int $0x40
|
|
|
|
|
popl %ebx
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
function kos_readpcib(bus, dev, func, reg: Byte): Byte; assembler; register;
|
|
|
|
|
asm
|
|
|
|
|
pushl %ebx
|
|
|
|
|
pushl %ecx
|
|
|
|
|
pushl %edx
|
|
|
|
|
shlb $3, %dl {dev}
|
|
|
|
|
movb %al, %bh {bus}
|
|
|
|
|
shlw $8, %cx {func}
|
|
|
|
|
movb $4, %bl
|
|
|
|
|
movb reg, %cl {func}
|
|
|
|
|
andb $7, %ch {func}
|
|
|
|
|
movl $62, %eax
|
|
|
|
|
orb %dl, %ch {dev/func}
|
|
|
|
|
int $0x40
|
|
|
|
|
popl %edx
|
|
|
|
|
popl %ecx
|
|
|
|
|
popl %ebx
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
function kos_readpciw(bus, dev, func, reg: Byte): Word; assembler; register;
|
|
|
|
|
asm
|
|
|
|
|
pushl %ebx
|
|
|
|
|
pushl %ecx
|
|
|
|
|
pushl %edx
|
|
|
|
|
shlb $3, %dl {dev}
|
|
|
|
|
movb %al, %bh {bus}
|
|
|
|
|
shlw $8, %cx {func}
|
|
|
|
|
movb $5, %bl
|
|
|
|
|
movb reg, %cl {reg}
|
|
|
|
|
andb $7, %ch {func}
|
|
|
|
|
movl $62, %eax
|
|
|
|
|
orb %dl, %ch {dev/func}
|
|
|
|
|
int $0x40
|
|
|
|
|
popl %edx
|
|
|
|
|
popl %ecx
|
|
|
|
|
popl %ebx
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
function kos_readpcid(bus, dev, func, reg: Byte): DWord; assembler; register;
|
|
|
|
|
asm
|
|
|
|
|
pushl %ebx
|
|
|
|
|
pushl %ecx
|
|
|
|
|
pushl %edx
|
|
|
|
|
shlb $3, %dl {dev}
|
|
|
|
|
movb %al, %bh {bus}
|
|
|
|
|
shlw $8, %cx {func}
|
|
|
|
|
movb $6, %bl
|
|
|
|
|
movb reg, %cl {reg}
|
|
|
|
|
andb $7, %ch {func}
|
|
|
|
|
movl $62, %eax
|
|
|
|
|
orb %dl, %ch {dev/func}
|
|
|
|
|
int $0x40
|
|
|
|
|
popl %edx
|
|
|
|
|
popl %ecx
|
|
|
|
|
popl %ebx
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
{ Other }
|
|
|
|
|
procedure kos_delay(ms: DWord); assembler; register;
|
|
|
|
|
asm
|
|
|
|
|
pushl %ebx
|
|
|
|
|
movl %eax, %ebx
|
|
|
|
|
movl $5, %eax
|
|
|
|
|
int $0x40
|
|
|
|
|
popl %ebx
|
|
|
|
|
end;
|