⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sysfuncs.txt

📁 menuet os应用程序源代码,很多汇编写的应用程序
💻 TXT
📖 第 1 页 / 共 2 页
字号:
     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 + -