📄 sysfuncs.txt
字号:
ebx = 00000000 00000000 00000000 00000111b events:
I window draw
I key in buffer
I button in buffer
I (end request)
I desktop background draw
I mouse change
I IPC event
I---------------I get irqs data
41 = GET IRQ OWNER
ebx : irq
ret : PID of the process
42 = GET DATA READ BY IRQ
ebx : IRQ number
ret : eax number of bytes in buffer
bl data
ecx 0 = successful data read
1 = no data in buffer
2 = incorrect IRQ owner
44 = PROGRAM IRQ's
ebx : pointer to table
ecx : irq number
45 = RESERVE/FREE IRQ
ebx : 0 - reserve, 1 - free
ecx : IRQ number
ret : eax: 0 - successful, 1 - error
46 = RESERVE/FREE PORT AREA
ebx : 0 - reserve, 1 - free
ecx : port area start ( min 256 )
edx : port area end ( max 16383 )
ret : eax: 0 - successful, 1 - error
Direct access with in and out commands
47 = DISPLAY NUMBER TO WINDOW
ebx = print type, bl=0 -> ecx is number
bl=1 -> ecx is pointer
bh=0 -> display decimal
bh=1 -> display hexadecimal
bh=2 -> display binary
bits 16-21 = number of digits to display (0-32)
bits 22-31 = reserved
ecx = number or pointer
edx = x shl 16 + y
esi = color
48 = DEFINE GENERAL WINDOW PROPERTIES
ebx = 0 apply/redraw
ecx = 0 , apply/redraw desktop
ebx = 1 define button style
ecx = 0 , set flat buttons
ecx = 1 , set 3d buttons
ebx = 2 define window colors
ecx = pointer to table
edx = number of bytes defined
ebx = 3 get define window colors
ecx = pointer to table
edx = number of bytes to get
ebx = 4 get window skin height
50 = FREE FORM WINDOW SHAPE AND SCALE
ebx = 0 ; shape reference area
ecx = pointer to reference area
byte per pixel, 0 not used, 1=used, other = reserved
ebx = 1 ; scale of reference area (default 1:1)
ecx : scale is set to 2^ecx
return: nothing changed
51 = CREATE THREAD
ebx = 1 ; create
ecx ; = thread entry point
edx ; = thread stack position
ret: eax = pid or 0xfffffff0+ for error
52 = STACK DRIVER STATUS
- see stack.txt
53 = SOCKET INTERFACE
- see stack.txt
55 = SOUND INTERFACE
ebx = 0 ; load sound block
ecx = ; pointer to (default size 65536 byte) soundblock
ebx = 1 ; play (default 44 khz 8 bit mono) sound block
ebx = 2 ; set format
ecx = 1 ; set play block length
edx = ; block length
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
path examples:
'/RAMDISK/FIRST/KERNEL.ASM',0
'/RD/1/KERNEL.ASM',0
'/HARDDISK/FIRST/KERNEL.ASM',0
'/HD/1/KERNEL.ASM',0
'/HARDDISK/FIRST/MENUET/PICS/TANZANIA.BMP',0
fileinfo:
dd 0 ; 0=READ (delete/append)
dd 0x0 ; 512 block to read 0+
dd 0x1 ; blocks to read (/bytes to write/append)
dd 0x20000 ; return data pointer
dd 0x10000 ; work area for os - 16384 bytes
db '/RAMDISK/FIRST/KERNEL.ASM',0 ; ASCIIZ dir & filename
ret: eax = 0 - success, other - error code
ebx = size of file
or
fileinfo:
dd 1 ; 1=WRITE
dd 0x0 ; not used
dd 10000 ; bytes to write
dd 0x20000 ; source data pointer
dd 0x10000 ; work area for os - 16384 bytes
db '/RAMDISK/FIRST/KERNEL.ASM',0 ; ASCIIZ dir & filename
ret: eax = 0 - success, other - error code
or
; LBA
fileinfo:
dd 8 ; 8=LBA read (/9=LBA write)
dd 0x0 ; 512 block to read (write)
dd 0x1 ; set to 1
dd 0x20000 ; return data pointer
dd 0x10000 ; work area for os (16384 bytes)
dd '/HARDDISK/SECOND',0 ; physical device ; ASCIIZ
( or /rd/1/ )
LBA read must be enabled with setup
NOTE: The asciiz in this context refers to the physical device and
not to logical one.
For hd: first=pri.master, second=pri.slave
third=sec.master, fourth=sec.slave
or
fileinfo:
dd 16 ; 16=START APPLICATION
dd 0x0 ; nop
dd param ; 0 or parameter area ( ASCIIZ )
; receiving application must
; reserve a 256 byte area
dd 0x0 ; nop
dd 0x10000 ; work area for os - 16384 bytes
db '/HD/1/MENUET/APPS/FIRE',0 ; ASCIIZ dir & filename
ret: eax = pid or 0xfffffff0+ for error
59 = TRACE FOR SYSTEM CALLS FROM PROCESSES
ebx = 0 ; get system events
ecx ; pointer to table -> ; 64 bytes/system call descriptor
; +00 PID
; +32 EDI
; +36 ESI
; +40 EBP
; +44 ESP
; +48 EBX
; +52 EDX
; +56 ECX
; +60 EAX
edx ; number of bytes to return to table (currently max 16*64)
return: eax = number of system calls from start
latest call is saved to (eax mod 16)*64 in table
ebx = 0 : above format
60 = INTER PROCESS COMMUNICATION
ebx = 1 - define IPC memory
ebx = 2 - send message
61 = DIRECT GRAPHICS ACCESS
ebx = 1 - get resolution -> eax [x] shl 16 + [y]
ebx = 2 - get bits per pixel -> eax
ebx = 3 - get bytes per scanline -> eax
direct access with gs selector : mov [gs:0],dword 0xffffff
62 = PCI ACCESS
- see pci.txt
63 = GENERAL DEBUG BOARD
ebx = 1 write byte in cl
ebx = 2 read byte : ebx = 1 -> byte in al ; ebx = 0 -> no data
64 = APPLICATION MEMORY RESIZE
ebx = 1 set amount of memory
ecx = new amount of memory
ret: eax = 0 - successfull
eax = 1 - out of memory
65 = UTF
66 = KEYBOARD DATA MODE
ebx = 1 set mode
ecx = 0 : keymap
ecx = 1 : scancodes
ebx = 2 get mode : return in eax
ebx = 3 get ctrl alt shift state : return in eax
67 = Application Window Move or Resize
ebx = new x start
ecx = new y start
edx = new x size
esi = new y size
Specify any parameters as -1 will leave that parameter unchanged.
eg specify ebx = -1 and ecx = -1 to simply resize the window, but
not move it
-1 = END APPLICATION
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -