Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | Download | RSS feed

  1.  
  2. use32
  3. org     0
  4. db      'MENUET01'
  5. dd      1
  6. dd      _start
  7. dd      _end
  8. dd      _memory
  9. dd      _stack
  10. dd      _param
  11. dd      0
  12.  
  13. ;=========================================
  14.  
  15. _start:
  16.  
  17. mov     ah, byte [_param]
  18. test    ah, ah
  19. jz      _exit
  20.  
  21. call    console_lib_init
  22.  
  23. push    cobj_caption
  24. push    -1
  25. push    -1
  26. push    -1
  27. push    -1
  28. call    [con_init]
  29.  
  30. mov     eax, 68
  31. mov     ebx, 19
  32. mov     ecx, _param
  33. int     0x40
  34. test    eax, eax
  35. jz      _exit_and_close_console
  36.  
  37. mov     edx, eax
  38.  
  39.  
  40. _main_loop:
  41.  
  42. cmp     dword [edx], 0
  43. je      _exit_and_close_console
  44.  
  45. push    dword [edx]
  46. push    specification
  47. call    [con_printf]
  48. add     esp, 8
  49.  
  50. add     edx, 8
  51.  
  52. jmp     _main_loop
  53.  
  54. _exit_and_close_console:
  55.  
  56. push    0
  57. call    [con_exit]
  58.  
  59. _exit:
  60. mov     eax, -1
  61. int     0x40
  62.  
  63.  
  64. ;=========================================
  65.  
  66. console_lib_init:
  67.  
  68. ; load DLL
  69.         mov     eax, 68
  70.         mov     ebx, 19
  71.         mov     ecx, console_lib_name
  72.         int     0x40
  73.         test    eax, eax
  74.         jz      _exit
  75.  
  76. ; initialize import
  77.         mov     edx, eax
  78.         mov     esi, console_lib_import
  79. import_loop:
  80.         lodsd
  81.         test    eax, eax
  82.         jz      import_done
  83.         push    edx
  84. import_find:
  85.         mov     ebx, [edx]
  86.         test    ebx, ebx
  87.         jz      _exit;import_not_found
  88.         push    eax
  89. @@:
  90.         mov     cl, [eax]
  91.         cmp     cl, [ebx]
  92.         jnz     import_find_next
  93.         test    cl, cl
  94.         jz      import_found
  95.         inc     eax
  96.         inc     ebx
  97.         jmp     @b
  98. import_find_next:
  99.         pop     eax
  100.         add     edx, 8
  101.         jmp     import_find
  102. import_found:
  103.         pop     eax
  104.         mov     eax, [edx+4]
  105.         mov     [esi-4], eax
  106.         pop     edx
  107.         jmp     import_loop
  108. import_done:
  109.  
  110. ret
  111.  
  112. ;=========================================
  113.  
  114. console_lib_name        db      '/sys/lib/console.obj',0
  115.  
  116. align 4
  117. console_lib_import:
  118. dll_start               dd      aStart
  119. con_init                dd      aConInit
  120. con_exit                dd      aConExit
  121. con_printf              dd      aCon_printf
  122.                         dd      0
  123.  
  124. aStart                  db      'START',0
  125. aConInit                db      'con_init',0
  126. aConExit                db      'con_exit',0
  127. aCon_printf             db      'con_printf',0
  128.  
  129.  
  130. ;=========================================
  131.  
  132. cobj_caption            db      'cObj v0.2 by Albom',0
  133. specification           db      '%s',13,10,0
  134.  
  135. ;=========================================
  136.  
  137. _param:
  138. db      0
  139. rb 256
  140.  
  141. _end:
  142.  
  143. align 32
  144. rb 2048
  145. _stack:
  146. _memory:
  147.  
  148. ;=========================================