mirror of
https://github.com/KolibriOS/kolibrios.git
synced 2024-12-18 04:43:06 +03:00
fca4378433
git-svn-id: svn://kolibrios.org@836 a494cfbc-eb01-0410-851d-a64ba20cac60
107 lines
2.4 KiB
NASM
107 lines
2.4 KiB
NASM
use32
|
|
db 'MENUET01'
|
|
dd 1
|
|
dd start
|
|
dd i_end
|
|
dd mem
|
|
dd mem
|
|
dd 0
|
|
dd 0
|
|
|
|
REQ_DLL_VER = 2
|
|
DLL_ENTRY = 1
|
|
|
|
start:
|
|
; First 3 steps are intended to load/init console DLL
|
|
; and are identical for all console programs
|
|
|
|
; load DLL
|
|
mov eax, 68
|
|
mov ebx, 19
|
|
mov ecx, dll_name
|
|
int 0x40
|
|
test eax, eax
|
|
jz exit
|
|
|
|
; initialize import
|
|
mov edx, eax
|
|
mov esi, myimport
|
|
import_loop:
|
|
lodsd
|
|
test eax, eax
|
|
jz import_done
|
|
push edx
|
|
import_find:
|
|
mov ebx, [edx]
|
|
test ebx, ebx
|
|
jz exit;import_not_found
|
|
push eax
|
|
@@:
|
|
mov cl, [eax]
|
|
cmp cl, [ebx]
|
|
jnz import_find_next
|
|
test cl, cl
|
|
jz import_found
|
|
inc eax
|
|
inc ebx
|
|
jmp @b
|
|
import_find_next:
|
|
pop eax
|
|
add edx, 8
|
|
jmp import_find
|
|
import_found:
|
|
pop eax
|
|
mov eax, [edx+4]
|
|
mov [esi-4], eax
|
|
pop edx
|
|
jmp import_loop
|
|
import_done:
|
|
|
|
; check version
|
|
cmp word [dll_ver], REQ_DLL_VER
|
|
jb exit
|
|
cmp word [dll_ver+2], REQ_DLL_VER
|
|
ja exit
|
|
push DLL_ENTRY
|
|
call [dll_start]
|
|
|
|
; yes! Now do some work (say helloworld in this case).
|
|
push caption
|
|
push -1
|
|
push -1
|
|
push -1
|
|
push -1
|
|
call [con_init]
|
|
push aHelloWorld
|
|
call [con_write_asciiz]
|
|
push 0
|
|
call [con_exit]
|
|
exit:
|
|
or eax, -1
|
|
int 0x40
|
|
|
|
dll_name db '/sys/lib/console.obj',0
|
|
caption db 'Console test',0
|
|
aHelloWorld db 'Hello, World!',10,0
|
|
|
|
align 4
|
|
myimport:
|
|
dll_start dd aStart
|
|
dll_ver dd aVersion
|
|
con_init dd aConInit
|
|
con_write_asciiz dd aConWriteAsciiz
|
|
con_exit dd aConExit
|
|
dd 0
|
|
|
|
aStart db 'START',0
|
|
aVersion db 'version',0
|
|
aConInit db 'con_init',0
|
|
aConWriteAsciiz db 'con_write_asciiz',0
|
|
aConExit db 'con_exit',0
|
|
|
|
i_end:
|
|
|
|
align 4
|
|
rb 2048 ; stack
|
|
mem:
|