forked from KolibriOS/kolibrios
50724bd885
git-svn-id: svn://kolibrios.org@775 a494cfbc-eb01-0410-851d-a64ba20cac60
779 lines
14 KiB
PHP
779 lines
14 KiB
PHP
{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 {㬥ìè¨âì è¨à¨ã 1}
|
||
decl %ecx {㬥ìè¨âì ¢ëá®âã 1}
|
||
andl $0xEFFFFFFF, %edx
|
||
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 {㬥ìè¨âì è¨à¨ã 1}
|
||
decl %esi {㬥ìè¨âì ¢ëá®âã 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
|
||
movswl %ax, %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
|
||
movswl %ax, %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:
|
||
¡¨â 0 ãáâ ®¢«¥ = «¥¢ ï ª®¯ª ¦ â
|
||
¡¨â 1 ãáâ ®¢«¥ = ¯à ¢ ï ª®¯ª ¦ â
|
||
¡¨â 2 ãáâ ®¢«¥ = á।ïï ª®¯ª ¦ â
|
||
¡¨â 3 ãáâ ®¢«¥ = 4-ï ª®¯ª ¦ â
|
||
¡¨â 4 ãáâ ®¢«¥ = 5-ï ª®¯ª ¦ â }
|
||
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_setkeyboardmode(mode: DWord); assembler; register;
|
||
asm
|
||
pushl %eax
|
||
pushl %ebx
|
||
movl $66, %ecx
|
||
movl $1, %ebx
|
||
xchgl %eax, %ecx
|
||
int $0x40
|
||
xchgl %eax, %ecx
|
||
popl %ebx
|
||
popl %eax
|
||
end;
|
||
|
||
function kos_getkeyboardmode(): DWord; assembler; register;
|
||
asm
|
||
pushl %ebx
|
||
movl $66, %eax
|
||
movl $2, %ebx
|
||
int $0x40
|
||
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 }
|
||
|
||
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;
|
||
|
||
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 {ä« £¨, 梥â}
|
||
movl bgcolor, %edi
|
||
movw %dx, %ax
|
||
andl $0x7FFFFFFF, %ecx
|
||
btl $31, %edi
|
||
jnc nobg
|
||
orl $0x40000000, %ecx
|
||
nobg:
|
||
popl %edx
|
||
movl %eax, %ebx {ª®®à¤¨ âë}
|
||
movzbl (%edx), %esi {¤«¨ áâப¨}
|
||
movl $4, %eax {®¬¥à äãªæ¨¨}
|
||
incl %edx {㪠§ ⥫ì áâபã}
|
||
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;
|
||
|
||
{ 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;
|
||
|
||
{ 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 - ãᯥè®
|
||
1 - ¯à¨ñ¬¨ª ¥ ®¯à¥¤¥«¨« ¡ãä¥à ¤«ï IPC-á®®¡é¥¨©
|
||
(¬®¦¥â ¡ëâì, ¥éñ ¥ ãᯥ«, ¬®¦¥â ¡ëâì, íâ® ¥ â®â ¯®â®ª, ª®â®àë© ã¦¥)
|
||
2 - ¯à¨ñ¬¨ª § ¡«®ª¨à®¢ « IPC-¡ãä¥à; ¯®¯à®¡ã©â¥ ¥¬®£® ¯®¤®¦¤ âì
|
||
3 - ¯¥à¥¯®«¥¨¥ IPC-¡ãä¥à ¯à¨ñ¬¨ª
|
||
4 - ¯à®æ¥áá /¯®â®ª á â ª¨¬ PID ¥ áãé¥áâ¢ã¥â}
|
||
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;
|
||
|
||
|
||
{ Sound }
|
||
|
||
function kos_speaker(notes: Pointer): Boolean; assembler; register;
|
||
asm
|
||
pushl %esi
|
||
pushl %ebx
|
||
movl $55, %esi
|
||
movl %esi, %ebx
|
||
xchgl %eax, %esi
|
||
int $0x40
|
||
{eax = 55 - ®è¨¡ª }
|
||
andl $1, %eax
|
||
popl %ebx
|
||
popl %esi
|
||
xorb $1, %al
|
||
end;
|
||
|
||
|
||
{ 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;
|