forked from KolibriOS/kolibrios
MENU.DAT: general update of Russian version
UNIMG: upload binnary, add to IMG KWINE: upload to SVN, add to ISO git-svn-id: svn://kolibrios.org@7864 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
dad5229ccd
commit
7d89f2686a
@ -25,6 +25,7 @@ img_files = {
|
||||
{"LANG.INC", build_type .. "/lang.inc"},
|
||||
{"NOTIFY3.PNG", "common/notify3.png"},
|
||||
{"TOOLBAR.PNG", PROGS .. "/cmm/txtread/toolbar.png"},
|
||||
{"UNIMG", PROGS .. "/fs/unimg/unimg"},
|
||||
{"VMODE", "common/vmode"},
|
||||
{"3D/HOUSE.3DS", "common/3d/house.3ds"},
|
||||
{"DEVELOP/T_EDIT.INI", PROGS .. "/other/t_edit/t_edit.ini"},
|
||||
@ -177,15 +178,14 @@ extra_files = {
|
||||
{"kolibrios/develop/TinyBasic/", "common/develop/TinyBasic/*"},
|
||||
{"kolibrios/utils/cnc_editor/cnc_editor", PROGS .. "/other/cnc_editor/cnc_editor"},
|
||||
{"kolibrios/utils/cnc_editor/kolibri.NC", PROGS .. "/other/cnc_editor/kolibri.NC"},
|
||||
{"kolibrios/emul/", "common/emul/*"},
|
||||
{"kolibrios/emul/dosbox/", "common/emul/DosBox/*"},
|
||||
{"kolibrios/emul/e80/readme.txt", PROGS .. "/emulator/e80/trunk/readme.txt"},
|
||||
{"kolibrios/emul/e80/keyboard.png", PROGS .. "/emulator/e80/trunk/keyboard.png"},
|
||||
{"kolibrios/emul/fceu/fceu", PROGS .. "/emulator/fceu/fceu"},
|
||||
{"kolibrios/emul/fceu/FCEU ReadMe.txt", PROGS .. "/emulator/fceu/FCEU ReadMe.txt"},
|
||||
{"kolibrios/emul/", "common/emul/gameboy"},
|
||||
{"kolibrios/emul/", "common/emul/pokemini"},
|
||||
{"kolibrios/emul/", "common/emul/scummvm"},
|
||||
{"kolibrios/emul/", "common/emul/zsnes"},
|
||||
{"kolibrios/emul/kwine/kwine", PROGS .. "/emulator/kwine/bin/kwine"},
|
||||
{"kolibrios/emul/kwine/lib/", PROGS .. "/emulator/kwine/bin/kwine/lib/*"},
|
||||
{"kolibrios/demos/ak47.lif", "common/demos/ak47.lif"},
|
||||
{"kolibrios/demos/life2", "common/demos/life2"},
|
||||
{"kolibrios/demos/life3tb.png", PROGS .. "/games/life3/trunk/life3tb.png"},
|
||||
|
@ -2,13 +2,13 @@
|
||||
ˆ£à®¢®© æ¥âà /sys/allgames
|
||||
„¥¬ª¨ > /@1
|
||||
ƒà 䨪 > /@3
|
||||
Œã«ì⨬¥¤¨ > /@4
|
||||
<EFBFBD>¬ã«ïâ®àë > /@18
|
||||
‡¢ãª ¨ ¢¨¤¥® > /@4
|
||||
<EFBFBD> §à ¡®âª > /@5
|
||||
<EFBFBD>¬ã«ïâ®àë > /@6
|
||||
‘¨á⥬ > /@7
|
||||
Ž¡à ¡®âª ¤ ëå > /@13
|
||||
‘¥âì > /@14
|
||||
<EFBFBD> §®¥ > /@17
|
||||
Žä¨á > /@10
|
||||
‘¥âì > /@11
|
||||
<EFBFBD> §®¥ > /@14
|
||||
„®ªã¬¥â æ¨ï /sys/docpack
|
||||
‡ ¯ã᪠¯à®£à ¬¬ë /sys/run
|
||||
‡ ¢¥à襨¥ à ¡®âë /sys/end
|
||||
@ -42,84 +42,62 @@ FlatWave /sys/3d/flatwav
|
||||
<EFBFBD>¥¤ ªâ®à Animage /sys/media/animage
|
||||
<EFBFBD> «®¦¥¨¥ 䨫ìâ஢ /sys/media/imgf/imgf
|
||||
<EFBFBD> «¨âà /sys/media/palitra
|
||||
#4 **** Œã«ì⨬¥¤¨ ****
|
||||
<EFBFBD>¨¯¥âª /sys/pipetka
|
||||
#4 **** ‡¢ãª ¨ ¢¨¤¥® ****
|
||||
€ã¤¨®¯«¥¥à Pixie /sys/media/pixie
|
||||
€ã¤¨®¯«¥¥à AC97SND /sys/media/ac97snd
|
||||
‚¨¤¥®¯«¥¥à Fplay /kolibrios/media/fplay
|
||||
Midi-¯«¥¥à /sys/media/midamp
|
||||
#5 **** <20> §à ¡®âª ****
|
||||
<EFBFBD>ਬ¥àë > /@6
|
||||
“¯ ª®¢é¨ª KPack /sys/kpack
|
||||
Flat Assembler /sys/develop/fasm
|
||||
„®áª ®â« ¤ª¨ /sys/develop/board
|
||||
HEX-। ªâ®à /sys/develop/heed
|
||||
Diff tool /sys/develop/diff
|
||||
Žâ« ¤ç¨ª /sys/develop/mtdbg
|
||||
<EFBFBD>¨¯¥âª /sys/pipetka
|
||||
Hex2Dec2Bin /sys/develop/h2d2b
|
||||
’ ¡«¨æ ᨬ¢®«®¢ /sys/ASCIIVju
|
||||
ASCII-ª®¤ë /sys/develop/keyascii
|
||||
SCAN-ª®¤ë /sys/develop/scancode
|
||||
#6 **** <20> §à ¡®âª -> <20>ਬ¥àë ****
|
||||
<EFBFBD>®â®ª¨ /sys/develop/thread
|
||||
Color Slider /sys/demos/cslide
|
||||
Š®á®«ìë© ¯à¨¬¥à 1 /sys/develop/testcon2
|
||||
Š®á®«ìë© ¯à¨¬¥à 2 /sys/develop/test_gets
|
||||
Žª á®®¡é¥¨© /sys/demos/use_mb
|
||||
#6 **** <20>¬ã«ïâ®àë ****
|
||||
DOSBox DOS Emulator /kolibrios/emul/DosBox/dosbox
|
||||
e80 (ZX Spectrum) /kolibrios/emul/e80/e80
|
||||
FCE Ultra - NES /kolibrios/emul/fceu/fceu
|
||||
PokeMini /kolibrios/emul/pokemini
|
||||
ScummVM /kolibrios/emul/scummvm
|
||||
ZSNES Super Nintendo /kolibrios/emul/zsnes
|
||||
#7 **** ‘¨á⥬ ****
|
||||
<EFBFBD> áâனª¨ > /@8
|
||||
‘¨áâ¥¬ë¥ á¥á®àë > /@9
|
||||
<EFBFBD> ¡®â á ä ©« ¬¨ > /@10
|
||||
’¥áâ¨à®¢ ¨¥ > /@11
|
||||
‘¯¥æ. ¢®§¬®¦®á⨠> /@12
|
||||
‘¨á⥬ ï ¯ ¥«ì /sys/syspanel
|
||||
” ©«®¢ë¥ ¬¥¥¤¦¥àë > /@8
|
||||
‘¯¥æ. ¢®§¬®¦®á⨠> /@9
|
||||
Š «¥¤ àì /sys/calendar
|
||||
„®áª ®â« ¤ª¨ /sys/develop/board
|
||||
<EFBFBD>ãä¥à ®¡¬¥ /sys/develop/clipview
|
||||
’¥à¬¨ « /sys/terminal
|
||||
#8 **** ‘¨á⥬ -> <20> áâனª¨ ****
|
||||
“áâனá⢠/sys/setup
|
||||
“áâ ®¢¨âì ä® /sys/media/palitra
|
||||
‘â¨«ì ®ª® /sys/skincfg
|
||||
ƒ®àï稥 ª« ¢¨è¨ /sys/mykey
|
||||
‚¨¤¥®à¥¦¨¬ ¤«ï ATI /sys/vmode
|
||||
#9 **** ‘¨á⥬ -> ‘¥á®àë ****
|
||||
„¨á¯¥âç¥à ¯à®æ¥áᮢ /sys/cpu
|
||||
PCI-ãáâனá⢠/sys/pcidev
|
||||
CPUID /sys/cpuid
|
||||
GHOST Monitor /sys/gmon
|
||||
K. Bus disconnected /sys/kbd
|
||||
HDD ¨ä®à¬¥à /sys/hdd_info
|
||||
#10 **** ‘¨á⥬ -> <20> ¡®â á ä ©« ¬¨ ****
|
||||
‚¨àâã «ìë¥ ¤¨áª¨ /sys/tmpdisk
|
||||
Š®á®«ì SHELL /sys/shell
|
||||
‘®åà ¥¨¥ ®¡à § /sys/rdsave
|
||||
#8 **** ‘¨á⥬ -> ” ©«®¢ë¥ ¬¥¥¤¦¥àë ****
|
||||
KFAR /sys/File Managers/kfar
|
||||
fNav /sys/File Managers/fNav/fNav
|
||||
KFM /sys/File Managers/kfm
|
||||
Eolite /sys/File Managers/Eolite
|
||||
‚¨àâã «ìë¥ ¤¨áª¨ /sys/tmpdisk
|
||||
Š®á®«ì SHELL /sys/shell
|
||||
‘®åà ¥¨¥ ®¡à § /sys/rdsave
|
||||
#11 **** ‘¨á⥬ -> ’¥áâ¨à®¢ ¨¥ ****
|
||||
’¥áâ § é¨âë /sys/test
|
||||
’¥áâ ¬®¨â®à /sys/disptest
|
||||
ƒà ä¨ç¥áª¨© ¡¥ç¬ ઠ/sys/mgb
|
||||
FSPEED ᪮à®áâì ”‘ /sys/fspeed
|
||||
#12 **** ‘¨á⥬ -> ‘¯¥æ.¢®§¬®¦®á⨠****
|
||||
#9 **** ‘¨á⥬ -> ‘¯¥æ.¢®§¬®¦®á⨠****
|
||||
<EFBFBD>ªà ï «ã¯ /sys/magnify
|
||||
<EFBFBD>ªà ï ª« ¢¨ âãà /sys/zkey
|
||||
#13 **** Ž¡à ¡®âª ¤ ëå ****
|
||||
#10 **** Žä¨á ****
|
||||
Š «ìªã«ïâ®à /sys/calc
|
||||
<EFBFBD>¥¤ ªâ®à Tinypad /sys/tinypad
|
||||
<EFBFBD>¥¤ ªâ®à TextEdit /sys/develop/t_edit
|
||||
’ ¡«¨çë© ¯à®æ¥áá®à /sys/table
|
||||
<EFBFBD>®áâ஥¨¥ £à 䨪®¢ /sys/graph
|
||||
HEX-। ªâ®à /sys/develop/heed
|
||||
<EFBFBD> § à娢 â®à Unz /sys/unz
|
||||
#14 **** ‘¥âì ****
|
||||
‘¥à¢¥àë > /@15
|
||||
Š«¨¥âë > /@16
|
||||
<EFBFBD>à®á¬®âà RTF /sys/rtfread
|
||||
#11 **** ‘¥âì ****
|
||||
‘¥à¢¥àë > /@12
|
||||
Š«¨¥âë > /@13
|
||||
<EFBFBD> áâனª¨ á¥â¨ /sys/network/netcfg
|
||||
‘â âãá ¯®¤ª«î票ï /sys/network/netstat
|
||||
#15 **** ‘¥âì -> ‘¥à¢¥àë ****
|
||||
#12 **** ‘¥âì -> ‘¥à¢¥àë ****
|
||||
FTP daemon /sys/network/ftpd
|
||||
#16 **** ‘¥âì -> Š«¨¥âë ****
|
||||
#13 **** ‘¥âì -> Š«¨¥âë ****
|
||||
IRC ª«¨¥â /sys/network/ircc
|
||||
FTP ª«¨¥â /sys/network/ftpc
|
||||
TFTP ª«¨¥â /sys/network/tftpc
|
||||
@ -130,19 +108,12 @@ DNS lookup /sys/network/nslookup
|
||||
VNC Š«¨¥â /sys/network/vncc
|
||||
ˆâ¥à¥â § £àã§ç¨ª /sys/network/downloader
|
||||
’¥ªáâ®¢ë© ¡à 㧥à /sys/network/webview
|
||||
#17 **** <20> §®¥ ****
|
||||
#14 **** <20> §®¥ ****
|
||||
‘®§¤ ¨¥ áªà¨è®â®¢ /sys/scrshoot
|
||||
€ «®£®¢ë¥ ç áë /sys/demos/aclock
|
||||
<EFBFBD>à®á¬®âà RTF /sys/rtfread
|
||||
’ ¡«¨æ Œ¥¤¥«¥¥¢ /sys/period
|
||||
’ॠ¦ñà KJ|ABuIIIA /sys/games/klavisha
|
||||
<EFBFBD>¨ àë¥ ç áë /sys/demos/bcdclk
|
||||
’ ©¬¥à /sys/demos/timer
|
||||
#18 **** <20>¬ã«ïâ®àë ****
|
||||
DOSBox DOS Emulator /kolibrios/emul/DosBox/dosbox
|
||||
e80 (ZX Spectrum) /kolibrios/emul/e80/e80
|
||||
FCE Ultra - NES /kolibrios/emul/fceu/fceu
|
||||
Gameboy Color /kolibrios/emul/gameboy
|
||||
ScummVM (adventure) /kolibrios/emul/scummvm
|
||||
ZSNES Super Nintendo /kolibrios/emul/zsnes
|
||||
<EFBFBD> § à娢 â®à Unz /sys/unz
|
||||
##
|
||||
|
BIN
programs/emulator/kwine/bin/kwine
Normal file
BIN
programs/emulator/kwine/bin/kwine
Normal file
Binary file not shown.
BIN
programs/emulator/kwine/bin/lib/kernel32.dll
Normal file
BIN
programs/emulator/kwine/bin/lib/kernel32.dll
Normal file
Binary file not shown.
BIN
programs/emulator/kwine/bin/lib/msvcrt.dll
Normal file
BIN
programs/emulator/kwine/bin/lib/msvcrt.dll
Normal file
Binary file not shown.
BIN
programs/emulator/kwine/bin/samples.zip
Normal file
BIN
programs/emulator/kwine/bin/samples.zip
Normal file
Binary file not shown.
664
programs/emulator/kwine/kwine.asm
Normal file
664
programs/emulator/kwine/kwine.asm
Normal file
@ -0,0 +1,664 @@
|
||||
; ------------------------------------------------------------- ;
|
||||
; KWINE is a fork of program PELoad written by 0CodErr
|
||||
; author - rgimad
|
||||
; ------------------------------------------------------------- ;
|
||||
ORG 0
|
||||
BITS 32
|
||||
; ------------------------------------------------------------- ;
|
||||
PATH_SIZE equ 4096
|
||||
PARAMS_SIZE equ 4096
|
||||
STACK_SIZE equ 4096
|
||||
END_ equ IMAGE_BASE - (PATH_SIZE + PARAMS_SIZE + STACK_SIZE)
|
||||
; ------------------------------------------------------------- ;
|
||||
IMAGE_BASE equ 400000H
|
||||
; ------------------------------------------------------------- ;
|
||||
MENUET01 db 'MENUET01'
|
||||
version dd 1
|
||||
program.start dd start_
|
||||
program.end dd END_
|
||||
program.memory dd END_ + PATH_SIZE + PARAMS_SIZE + STACK_SIZE
|
||||
program.stack dd END_ + PATH_SIZE + PARAMS_SIZE + STACK_SIZE
|
||||
program.params dd END_ + PATH_SIZE
|
||||
program.path dd END_
|
||||
; ------------------------------------------------------------- ;
|
||||
load.library:
|
||||
mov eax, 68
|
||||
mov ebx, 19
|
||||
mov ecx, [esp + 4]
|
||||
int 64
|
||||
ret 4
|
||||
; ------------------------------------------------------------- ;
|
||||
getprocaddress:
|
||||
mov edx, [esp + 8]
|
||||
xor eax, eax
|
||||
test edx, edx
|
||||
jz .end
|
||||
.next:
|
||||
xor eax, eax
|
||||
cmp [edx], dword 0
|
||||
jz .end
|
||||
mov esi, [edx]
|
||||
mov edi, [esp + 4]
|
||||
.next_:
|
||||
lodsb
|
||||
scasb
|
||||
jne .fail
|
||||
or al, al
|
||||
jnz .next_
|
||||
jmp .ok
|
||||
.fail:
|
||||
add edx, 8
|
||||
jmp .next
|
||||
.ok:
|
||||
mov eax, [edx + 4]
|
||||
.end:
|
||||
ret 8
|
||||
; ------------------------------------------------------------- ;
|
||||
realloc.app.mem:
|
||||
mov eax, 64
|
||||
mov ebx, 1
|
||||
mov ecx, [esp + 4]
|
||||
int 64
|
||||
ret 4
|
||||
; ------------------------------------------------------------- ;
|
||||
set.current.directory:
|
||||
mov eax, 30
|
||||
mov ebx, 1
|
||||
mov ecx, [esp + 4]
|
||||
int 64
|
||||
ret 4
|
||||
; ------------------------------------------------------------- ;
|
||||
%if 0 ; comment
|
||||
int2str:
|
||||
%define number [esp + 8 + 8 * 4]
|
||||
%define buffer [esp + 4 + 8 * 4]
|
||||
pushad
|
||||
mov edi, buffer
|
||||
mov eax, " " ; 4 spaces
|
||||
stosd
|
||||
stosd
|
||||
stosw
|
||||
xor al, al
|
||||
stosb
|
||||
dec edi
|
||||
dec edi
|
||||
mov ecx, 10
|
||||
mov eax, number
|
||||
.next:
|
||||
xor edx, edx
|
||||
div ecx ; ecx = 10
|
||||
add edx, 48 ; edx = (eax MOD ecx) + 48
|
||||
mov [edi], dl
|
||||
dec edi
|
||||
test eax, eax
|
||||
jnz .next
|
||||
popad
|
||||
ret 8
|
||||
%undef number
|
||||
%undef buffer
|
||||
%endif ; endcomment
|
||||
; ------------------------------------------------------------- ;
|
||||
; test_file_path db "/hd3/1/mntest.exe",0
|
||||
; complex
|
||||
; address
|
||||
; data
|
||||
; hello
|
||||
; numbers +-
|
||||
; proc
|
||||
; sptrim
|
||||
; se
|
||||
; clear
|
||||
; locals +-
|
||||
; tokenise -
|
||||
; mntest
|
||||
file_path dd 0
|
||||
lib_name dd 0
|
||||
lib dd 0
|
||||
func dd 0
|
||||
func_name dd 0
|
||||
; ------------------------------------------------------------- ;
|
||||
sz_pe_load db "PELoad",0
|
||||
; ------------------------------------------------------------- ;
|
||||
con_init dd 0
|
||||
con_write_asciiz dd 0
|
||||
con_exit dd 0
|
||||
console dd 0
|
||||
sz_con_init db "con_init",0
|
||||
sz_con_write_asciiz db "con_write_asciiz",0
|
||||
sz_con_exit db "con_exit",0
|
||||
sz_console db "/sys/lib/console.obj",0
|
||||
; ------------------------------------------------------------- ;
|
||||
MZ dw 0
|
||||
PE dw 0
|
||||
lfa_new dd 0
|
||||
NumberOfSections dd 0
|
||||
SizeOfOptionalHeader dd 0
|
||||
EntryPoint dd 0
|
||||
SizeOfImage dd 0
|
||||
SizeOfHeaders dd 0
|
||||
DataDirectories dd 0
|
||||
SectionsTable dd 0
|
||||
Import dd 0
|
||||
; ------------------------------------------------------------- ;
|
||||
ERROR_MESSAGE dd 0
|
||||
err_params db "Parameters error",0
|
||||
err_file_path db "No input file path",0
|
||||
err_read_file db "Read file error",0
|
||||
err_mz_not_found db "No DOS signature found",0
|
||||
err_pe_not_found db "No PE signature found",0
|
||||
err_load_library db "Error load library: ",0
|
||||
err_func_not_found db "Not found function: ",0
|
||||
|
||||
; ------------------------------------------------------------- ;
|
||||
%if 0 ; comment
|
||||
msg_buffer resb 256
|
||||
sz_new_line db 10,0
|
||||
sz_space db " ",0
|
||||
sz_space_colon_space db " : ",0
|
||||
%endif ; endcomment
|
||||
sz_empty db "",0
|
||||
|
||||
|
||||
start_:
|
||||
; ------------------------------------------------------------- ;
|
||||
; find params and file path
|
||||
; mov eax, test_file_path
|
||||
mov eax, [program.params]
|
||||
cmp [eax], byte 34 ; quote
|
||||
jne .no_quote
|
||||
inc eax
|
||||
mov edi, eax
|
||||
.find_quote_or_zero:
|
||||
cmp [edi], byte 0
|
||||
je .found
|
||||
cmp [edi], byte 34 ; quote
|
||||
je .found
|
||||
inc edi
|
||||
jmp .find_quote_or_zero
|
||||
.no_quote:
|
||||
mov edi, eax
|
||||
.find_space_or_zero:
|
||||
cmp [edi], byte 0
|
||||
je .found
|
||||
cmp [edi], byte 32 ; space
|
||||
je .found
|
||||
inc edi
|
||||
jmp .find_space_or_zero
|
||||
.found:
|
||||
mov [edi], byte 0
|
||||
mov [file_path], eax
|
||||
; check file path
|
||||
mov eax, [file_path]
|
||||
mov al, [eax]
|
||||
test al, al
|
||||
jne file_path_ok
|
||||
mov [ERROR_MESSAGE], dword err_file_path
|
||||
jmp ERROR
|
||||
file_path_ok:
|
||||
; check MZ signature (IMAGE_DOS_HEADER.e_magic)
|
||||
push dword [file_path];filepath
|
||||
dec esp
|
||||
mov [esp], byte 0
|
||||
push dword MZ;buffer
|
||||
push dword 2;count
|
||||
push dword 0
|
||||
push dword 0;position
|
||||
push dword 0
|
||||
mov ebx, esp
|
||||
mov eax, 70
|
||||
int 64
|
||||
test eax, eax
|
||||
je read_ok
|
||||
mov [ERROR_MESSAGE], dword err_read_file
|
||||
jmp ERROR
|
||||
read_ok:
|
||||
cmp word [MZ], "MZ"
|
||||
je MZ_exists
|
||||
mov [ERROR_MESSAGE], dword err_mz_not_found
|
||||
jmp ERROR
|
||||
MZ_exists:
|
||||
; get lfa_new (IMAGE_DOS_HEADER.e_lfanew)
|
||||
push dword [file_path];filepath
|
||||
dec esp
|
||||
mov [esp], byte 0
|
||||
push dword lfa_new;buffer
|
||||
push dword 4;count
|
||||
push dword 0
|
||||
push dword 60;position
|
||||
push dword 0
|
||||
mov ebx, esp
|
||||
mov eax, 70
|
||||
int 64
|
||||
; check PE signature (IMAGE_OPTIONAL_HEADER.Magic)
|
||||
push dword [file_path];filepath
|
||||
dec esp
|
||||
mov [esp], byte 0
|
||||
push dword PE;buffer
|
||||
push dword 2;count
|
||||
push dword 0
|
||||
push dword [lfa_new];position
|
||||
push dword 0
|
||||
mov ebx, esp
|
||||
mov eax, 70
|
||||
int 64
|
||||
cmp word [PE], "PE"
|
||||
je PE_exists
|
||||
mov [ERROR_MESSAGE], dword err_pe_not_found
|
||||
jmp ERROR
|
||||
PE_exists:
|
||||
; get size of headers (IMAGE_OPTIONAL_HEADER.SizeOfHeaders)
|
||||
push dword [file_path];filepath
|
||||
dec esp
|
||||
mov [esp], byte 0
|
||||
push dword SizeOfHeaders;buffer
|
||||
push dword 4;count
|
||||
push dword 0
|
||||
mov eax, [lfa_new]
|
||||
add eax, 84
|
||||
push eax;position
|
||||
push dword 0
|
||||
mov ebx, esp
|
||||
mov eax, 70
|
||||
int 64
|
||||
; resize app memory and load headers
|
||||
mov eax, IMAGE_BASE
|
||||
add eax, [SizeOfHeaders]
|
||||
push eax
|
||||
call realloc.app.mem
|
||||
|
||||
push dword [file_path];filepath
|
||||
dec esp
|
||||
mov [esp], byte 0
|
||||
push dword IMAGE_BASE;buffer
|
||||
push dword [SizeOfHeaders];count
|
||||
push dword 0
|
||||
push dword 0;position
|
||||
push dword 0
|
||||
mov ebx, esp
|
||||
mov eax, 70
|
||||
int 64
|
||||
|
||||
add esp, (25 * 5) ; restore our stack top
|
||||
|
||||
mov edx, [lfa_new]
|
||||
; get SizeOfImage (IMAGE_OPTIONAL_HEADER.SizeOfImage)
|
||||
mov eax, [IMAGE_BASE + edx + 80]
|
||||
mov [SizeOfImage], eax
|
||||
; get EntryPoint (IMAGE_OPTIONAL_HEADER.AddressOfEntryPoint)
|
||||
mov eax, [IMAGE_BASE + edx + 40]
|
||||
mov [EntryPoint], eax
|
||||
; get DataDirectories (IMAGE_OPTIONAL_HEADER.DataDirectory)
|
||||
lea eax, [edx + 120]
|
||||
mov [DataDirectories], eax
|
||||
; get SizeOfOptionalHeader (IMAGE_FILE_HEADER.SizeOfOptionalHeader)
|
||||
movzx eax, word [IMAGE_BASE + edx + 20]
|
||||
mov [SizeOfOptionalHeader], ax
|
||||
; get SectionsTable
|
||||
lea eax, [edx + 24]
|
||||
add ax, [SizeOfOptionalHeader]
|
||||
mov [SectionsTable], eax
|
||||
; get Import
|
||||
mov eax, IMAGE_BASE
|
||||
add eax, [DataDirectories]
|
||||
add eax, 1 * 8
|
||||
mov eax, [eax]
|
||||
mov [Import], eax
|
||||
; get NumberOfSections (IMAGE_FILE_HEADER.NumberOfSections)
|
||||
movzx eax, word [IMAGE_BASE + edx + 6]
|
||||
mov [NumberOfSections], eax
|
||||
; resize app memory and load sections to their virtual address
|
||||
mov eax, IMAGE_BASE
|
||||
add eax, [SizeOfImage]
|
||||
push eax
|
||||
call realloc.app.mem
|
||||
|
||||
mov ecx, [NumberOfSections]
|
||||
next_section:
|
||||
lea eax, [ecx - 1]
|
||||
lea eax, [eax * 4 + eax]
|
||||
lea eax, [eax * 8]
|
||||
add eax, IMAGE_BASE
|
||||
add eax, [SectionsTable]
|
||||
|
||||
push dword [file_path] ; filepath
|
||||
dec esp
|
||||
mov [esp], byte 0
|
||||
mov edx, [eax + 12]
|
||||
add edx, IMAGE_BASE
|
||||
push edx ; buffer (IMAGE_SECTION_HEADER.VirtualAddress)
|
||||
push dword [eax + 16] ; count (IMAGE_SECTION_HEADER.SizeOfRawData)
|
||||
push dword 0
|
||||
push dword [eax + 20] ; position (IMAGE_SECTION_HEADER.PointerToRawData)
|
||||
push dword 0
|
||||
mov ebx, esp
|
||||
mov eax, 70
|
||||
int 64
|
||||
|
||||
dec ecx
|
||||
jnz next_section
|
||||
|
||||
mov eax, [NumberOfSections]
|
||||
lea eax, [eax * 4 + eax]
|
||||
lea eax, [eax * 4 + eax]
|
||||
add esp, eax ; restore our stack top
|
||||
|
||||
|
||||
|
||||
|
||||
; ==========================================================
|
||||
%if 0 ; comment
|
||||
push sz_console
|
||||
call load.library
|
||||
; mov [console], eax
|
||||
mov ecx, eax
|
||||
mov ebx, getprocaddress
|
||||
push ecx
|
||||
push sz_con_init
|
||||
call ebx
|
||||
mov [con_init], eax
|
||||
push ecx
|
||||
push sz_con_write_asciiz
|
||||
call ebx
|
||||
mov [con_write_asciiz], eax
|
||||
push ecx
|
||||
push sz_con_exit
|
||||
call ebx
|
||||
mov [con_exit], eax
|
||||
push sz_pe_load
|
||||
push -1
|
||||
push -1
|
||||
push -1
|
||||
push -1
|
||||
call [con_init]
|
||||
|
||||
mov ecx, [NumberOfSections]
|
||||
next_sect:
|
||||
lea eax, [ecx - 1]
|
||||
lea eax, [eax * 4 + eax]
|
||||
lea eax, [eax * 8]
|
||||
add eax, IMAGE_BASE
|
||||
add eax, [SectionsTable]
|
||||
push eax
|
||||
|
||||
push eax
|
||||
call [con_write_asciiz]
|
||||
push sz_space_colon_space
|
||||
call [con_write_asciiz]
|
||||
|
||||
|
||||
pop eax
|
||||
add eax, 20
|
||||
mov eax, [eax]
|
||||
push eax
|
||||
push msg_buffer
|
||||
call int2str
|
||||
push msg_buffer
|
||||
call [con_write_asciiz]
|
||||
|
||||
push sz_new_line
|
||||
call [con_write_asciiz]
|
||||
|
||||
|
||||
dec ecx
|
||||
jnz next_sect
|
||||
%endif ; endcomment
|
||||
; ==============================================
|
||||
; program.path = program.path_without_filename & "lib/"
|
||||
mov edi, [program.path]
|
||||
xor al, al
|
||||
xor ecx, ecx
|
||||
dec ecx
|
||||
repne scasb
|
||||
std
|
||||
mov al, "/"
|
||||
repne scasb
|
||||
cld
|
||||
inc edi
|
||||
inc edi
|
||||
mov eax, "lib/"
|
||||
stosd
|
||||
;
|
||||
mov [lib_name], edi
|
||||
|
||||
xor ecx, ecx
|
||||
next_descriptor:
|
||||
lea eax, [ecx * 4 + ecx]
|
||||
lea eax, [eax * 4]
|
||||
add eax, IMAGE_BASE
|
||||
add eax, [Import]
|
||||
mov edx, [eax + 12]
|
||||
add edx, IMAGE_BASE
|
||||
|
||||
%if 0 ; comment
|
||||
pushad
|
||||
push edx
|
||||
call [con_write_asciiz]
|
||||
push sz_new_line
|
||||
call [con_write_asciiz]
|
||||
popad
|
||||
%endif ; endcomment
|
||||
|
||||
pushad
|
||||
; concatenate (program.path_without_filename & "lib/") & lib_name
|
||||
mov esi, edx
|
||||
mov edi, [lib_name]
|
||||
.copy_lib_name:
|
||||
lodsb
|
||||
stosb
|
||||
test al, al
|
||||
jnz .copy_lib_name
|
||||
; try to load library
|
||||
push dword [program.path]
|
||||
call load.library
|
||||
test eax, eax
|
||||
jnz .lib_loaded
|
||||
; concatenate "Error load library: " & lib_name
|
||||
sub edi, [lib_name]
|
||||
mov esi, edi
|
||||
mov edi, err_load_library
|
||||
xor al, al
|
||||
xor ecx, ecx
|
||||
dec ecx
|
||||
repne scasb
|
||||
dec edi
|
||||
mov ecx, esi
|
||||
mov esi, edx
|
||||
rep movsb
|
||||
;
|
||||
popad
|
||||
mov [ERROR_MESSAGE], dword err_load_library
|
||||
jmp ERROR
|
||||
.lib_loaded:
|
||||
mov [lib], eax
|
||||
popad
|
||||
xor ebx, ebx
|
||||
next_function:
|
||||
mov edx, [eax + 16]
|
||||
lea esi, [edx + ebx * 4 + IMAGE_BASE]
|
||||
mov [func], esi
|
||||
mov edx, [esi]
|
||||
test edx, edx
|
||||
jz .done
|
||||
inc edx
|
||||
inc edx
|
||||
add edx, IMAGE_BASE
|
||||
|
||||
%if 0 ; comment
|
||||
pushad
|
||||
push edx
|
||||
call [con_write_asciiz]
|
||||
push sz_new_line
|
||||
call [con_write_asciiz]
|
||||
popad
|
||||
%endif ; endcomment
|
||||
|
||||
pushad
|
||||
mov [func_name], edx
|
||||
; look for address of imported function
|
||||
push dword [lib]
|
||||
push edx
|
||||
call getprocaddress
|
||||
test eax, eax
|
||||
jnz .func_found
|
||||
popad
|
||||
; concatenate "Not found function: " & name of function
|
||||
mov edi, err_func_not_found
|
||||
xor al, al
|
||||
xor ecx, ecx
|
||||
dec ecx
|
||||
repne scasb
|
||||
dec edi
|
||||
mov esi, edx
|
||||
.copy_func_name:
|
||||
lodsb
|
||||
stosb
|
||||
test al, al
|
||||
jnz .copy_func_name
|
||||
;
|
||||
dec edi
|
||||
mov eax, " in "
|
||||
stosd
|
||||
|
||||
mov esi, [lib_name]
|
||||
.copy_lib_name:
|
||||
lodsb
|
||||
stosb
|
||||
test al, al
|
||||
jnz .copy_lib_name
|
||||
|
||||
mov [ERROR_MESSAGE], dword err_func_not_found
|
||||
jmp ERROR
|
||||
.func_found:
|
||||
mov edx, [func]
|
||||
mov [edx], eax
|
||||
popad
|
||||
inc ebx
|
||||
jmp next_function
|
||||
.done:
|
||||
|
||||
inc ecx
|
||||
lea eax, [ecx * 4 + ecx]
|
||||
lea eax, [eax * 4]
|
||||
add eax, IMAGE_BASE
|
||||
add eax, [Import]
|
||||
mov eax, [eax + 12]
|
||||
cmp eax, dword 0
|
||||
jnz next_descriptor
|
||||
|
||||
|
||||
; set.current.directory
|
||||
mov edi, [file_path]
|
||||
xor al, al
|
||||
xor ecx, ecx
|
||||
dec ecx
|
||||
repne scasb
|
||||
std
|
||||
mov al, "/"
|
||||
repne scasb
|
||||
cld
|
||||
mov [edi + 1], byte 0
|
||||
push dword [file_path]
|
||||
call set.current.directory
|
||||
mov [edi + 1], byte "/" ; restore full file_path
|
||||
|
||||
; ---------------------- ;
|
||||
; call load_console_lib ;
|
||||
; ---------------------- ;
|
||||
|
||||
; go to EntryPoint
|
||||
mov eax, [EntryPoint]
|
||||
add eax, IMAGE_BASE
|
||||
jmp eax
|
||||
|
||||
|
||||
; push dword [EntryPoint]
|
||||
; push msg_buffer
|
||||
; call int2str
|
||||
; push msg_buffer
|
||||
; call [con_write_asciiz]
|
||||
|
||||
%if 0 ; comment
|
||||
push 0
|
||||
call [con_exit]
|
||||
%endif ; endcomment
|
||||
|
||||
%if 0 ; comment
|
||||
; dump ---------------------------------------
|
||||
push dword dump_path;filepath
|
||||
dec esp
|
||||
mov [esp], byte 0
|
||||
push dword 0 ;buffer
|
||||
mov eax, IMAGE_BASE
|
||||
add eax, [SizeOfImage]
|
||||
push eax;count
|
||||
push dword 0
|
||||
push dword 0;position
|
||||
push dword 2
|
||||
mov ebx, esp
|
||||
mov eax, 70
|
||||
int 64
|
||||
|
||||
|
||||
xor eax, eax
|
||||
dec eax
|
||||
int 64
|
||||
|
||||
dump_path db "/hd3/1/dump.bin",0
|
||||
%endif ; endcomment
|
||||
; ==========================================================
|
||||
|
||||
|
||||
ERROR:
|
||||
|
||||
push sz_console
|
||||
call load.library
|
||||
; mov [console], eax
|
||||
mov ecx, eax
|
||||
mov ebx, getprocaddress
|
||||
push ecx
|
||||
push sz_con_init
|
||||
call ebx
|
||||
mov [con_init], eax
|
||||
push ecx
|
||||
push sz_con_write_asciiz
|
||||
call ebx
|
||||
mov [con_write_asciiz], eax
|
||||
push ecx
|
||||
push sz_con_exit
|
||||
call ebx
|
||||
mov [con_exit], eax
|
||||
|
||||
push sz_pe_load
|
||||
push -1
|
||||
push -1
|
||||
push -1
|
||||
push -1
|
||||
call [con_init]
|
||||
push dword [ERROR_MESSAGE]
|
||||
call [con_write_asciiz]
|
||||
push 0
|
||||
call [con_exit]
|
||||
|
||||
xor eax, eax
|
||||
dec eax
|
||||
int 64
|
||||
|
||||
|
||||
|
||||
; load_console_lib:
|
||||
; push sz_console
|
||||
; call load.library
|
||||
|
||||
; push eax
|
||||
; push sz_con_init
|
||||
; call getprocaddress
|
||||
; mov [con_init], eax
|
||||
|
||||
; push sz_empty
|
||||
; push -1
|
||||
; push -1
|
||||
; push -1
|
||||
; push -1
|
||||
; call [con_init]
|
||||
|
||||
; ret
|
868
programs/emulator/kwine/lib/kernel32.dll.asm
Normal file
868
programs/emulator/kwine/lib/kernel32.dll.asm
Normal file
@ -0,0 +1,868 @@
|
||||
; ------------------------------------------------------------- ;
|
||||
; KWINE is a fork of program PELoad written by 0CodErr
|
||||
; author - rgimad
|
||||
; ------------------------------------------------------------- ;
|
||||
; standard device (Winbase.h)
|
||||
%define STD_INPUT_HANDLE -10
|
||||
%define STD_OUTPUT_HANDLE -11
|
||||
%define STD_ERROR_HANDLE -12
|
||||
|
||||
; starting point for file pointer move (Winbase.h)
|
||||
%define FILE_BEGIN 0 ; zero or beginning of file
|
||||
%define FILE_CURRENT 1 ; current value of file pointer
|
||||
%define FILE_END 2 ; current end-of-file position
|
||||
|
||||
; file system operation codes (kernel/trunk/fs/fs_lfn.inc)
|
||||
%define F70_READ_F 0 ; read file
|
||||
%define F70_READ_D 1 ; read folder
|
||||
%define F70_CREATE_F 2 ; create/rewrite file
|
||||
%define F70_WRITE_F 3 ; write/append to file
|
||||
%define F70_SETSIZE_F 4 ; set end of file
|
||||
%define F70_GETATTR_FD 5 ; get file/directory attributes structure
|
||||
%define F70_SETATTR_FD 6 ; set file/directory attributes structure
|
||||
%define F70_START_F 7 ; start application
|
||||
%define F70_DELETE_FD 8 ; delete file
|
||||
%define F70_CREATE_D 9 ; create directory
|
||||
|
||||
; action to take on file that exists or does not exist (Winbase.h)
|
||||
%define CREATE_NEW 1 ; creates a new file, only if it does not already exist
|
||||
%define CREATE_ALWAYS 2 ; creates new file, always
|
||||
%define OPEN_EXISTING 3 ; opens file, only if it exists
|
||||
%define OPEN_ALWAYS 4 ; opens file, always
|
||||
%define TRUNCATE_EXISTING 5 ; opens file and truncates it so that its size is zero bytes, only if it exists
|
||||
|
||||
%define INVALID_HANDLE_VALUE -1
|
||||
%define INVALID_FILE_SIZE -1
|
||||
|
||||
GLOBAL EXPORTS
|
||||
section '.exprt' align 16
|
||||
;**********************************************************************************
|
||||
EXPORTS: ;/////////////////////////////////////////////////////////////////////////
|
||||
;**********************************************************************************
|
||||
dd sz_ExitProcess, ExitProcess
|
||||
dd sz_GetStdHandle, GetStdHandle
|
||||
dd sz_SetConsoleMode, SetConsoleMode
|
||||
dd sz_WriteFile, WriteFile
|
||||
dd sz_ReadFile, ReadFile
|
||||
dd sz_GetCommandLineA, GetCommandLineA
|
||||
dd sz_GlobalAlloc, GlobalAlloc
|
||||
dd sz_GlobalFree, GlobalFree
|
||||
dd sz_GlobalReAlloc, GlobalReAlloc
|
||||
dd sz_Sleep, Sleep
|
||||
dd sz_FlushConsoleInputBuffer, FlushConsoleInputBuffer
|
||||
dd sz_CloseHandle, CloseHandle
|
||||
dd sz_GetFileSize, GetFileSize
|
||||
dd sz_CreateFileA, CreateFileA
|
||||
dd sz_SetFilePointer, SetFilePointer
|
||||
dd sz_VirtualAlloc, VirtualAlloc
|
||||
dd sz_VirtualFree, VirtualFree
|
||||
dd sz_SetConsoleCursorPosition, SetConsoleCursorPosition
|
||||
dd sz_DeleteFileA, DeleteFileA
|
||||
dd sz_FindClose, FindClose
|
||||
dd sz_FindFirstFileA, FindFirstFileA
|
||||
dd sz_GetLocalTime, GetLocalTime
|
||||
dd sz_GetLastError, GetLastError
|
||||
dd sz_GetProcessHeap, GetProcessHeap
|
||||
dd sz_HeapAlloc, HeapAlloc
|
||||
dd sz_HeapFree, HeapFree
|
||||
dd sz_HeapReAlloc, HeapReAlloc
|
||||
dd 0
|
||||
sz_ExitProcess db "ExitProcess",0
|
||||
sz_GetStdHandle db "GetStdHandle",0
|
||||
sz_SetConsoleMode db "SetConsoleMode",0
|
||||
sz_WriteFile db "WriteFile",0
|
||||
sz_ReadFile db "ReadFile",0
|
||||
sz_GetCommandLineA db "GetCommandLineA",0
|
||||
sz_GlobalAlloc db "GlobalAlloc",0
|
||||
sz_GlobalFree db "GlobalFree",0
|
||||
sz_GlobalReAlloc db "GlobalReAlloc",0
|
||||
sz_Sleep db "Sleep",0
|
||||
sz_FlushConsoleInputBuffer db "FlushConsoleInputBuffer",0
|
||||
sz_CloseHandle db "CloseHandle",0
|
||||
sz_GetFileSize db "GetFileSize",0
|
||||
sz_CreateFileA db "CreateFileA",0
|
||||
sz_SetFilePointer db "SetFilePointer",0
|
||||
sz_VirtualAlloc db "VirtualAlloc",0
|
||||
sz_VirtualFree db "VirtualFree",0
|
||||
sz_SetConsoleCursorPosition db "SetConsoleCursorPosition",0
|
||||
sz_DeleteFileA db "DeleteFileA",0
|
||||
sz_FindClose db "FindClose",0
|
||||
sz_FindFirstFileA db "FindFirstFileA",0
|
||||
sz_GetLocalTime db "GetLocalTime",0
|
||||
sz_GetLastError db "GetLastError",0
|
||||
sz_GetProcessHeap db "GetProcessHeap",0
|
||||
sz_HeapAlloc db "HeapAlloc",0
|
||||
sz_HeapFree db "HeapFree",0
|
||||
sz_HeapReAlloc db "HeapReAlloc",0
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
section '.code' align 16
|
||||
align 16
|
||||
;**********************************************************************************
|
||||
ExitProcess: ;/////////////////////////////////////////////////////////////////////
|
||||
;**********************************************************************************
|
||||
xor eax, eax
|
||||
dec eax
|
||||
int 64
|
||||
; ret not need
|
||||
align 16
|
||||
;**********************************************************************************
|
||||
GetStdHandle: ;////////////////////////////////////////////////////////////////////
|
||||
;**********************************************************************************
|
||||
push ebx
|
||||
push esi
|
||||
push edi
|
||||
; if already loaded then do nothing
|
||||
cmp [console], dword 0
|
||||
jne .do_nothing
|
||||
|
||||
push sz_console
|
||||
call load.library
|
||||
mov [console], eax
|
||||
mov ecx, eax
|
||||
mov ebx, getprocaddress
|
||||
push ecx
|
||||
push sz_con_init
|
||||
call ebx
|
||||
mov [con_init], eax
|
||||
push ecx
|
||||
push sz_con_write_asciiz
|
||||
call ebx
|
||||
mov [con_write_asciiz], eax
|
||||
push ecx
|
||||
push sz_con_exit
|
||||
call ebx
|
||||
mov [con_exit], eax
|
||||
push ecx
|
||||
push sz_con_gets
|
||||
call ebx
|
||||
mov [con_gets], eax
|
||||
push ecx
|
||||
push sz_con_write_string
|
||||
call ebx
|
||||
mov [con_write_string], eax
|
||||
push ecx
|
||||
push sz_con_set_flags
|
||||
call ebx
|
||||
mov [con_set_flags], eax
|
||||
push ecx
|
||||
push sz_con_set_cursor_pos
|
||||
call ebx
|
||||
mov [con_set_cursor_pos], eax
|
||||
push ecx
|
||||
push sz_con_printf
|
||||
call ebx
|
||||
mov [con_printf], eax
|
||||
|
||||
mov eax, [28]
|
||||
cmp [eax], byte 34 ; quote
|
||||
jne .no_quote
|
||||
inc eax
|
||||
.no_quote:
|
||||
push eax
|
||||
push -1
|
||||
push -1
|
||||
push -1
|
||||
push -1
|
||||
call [con_init]
|
||||
.do_nothing:
|
||||
|
||||
mov eax, con_handle ; return pointer to console descriptor
|
||||
|
||||
pop edi
|
||||
pop esi
|
||||
pop ebx
|
||||
ret 4
|
||||
align 16
|
||||
;**********************************************************************************
|
||||
WriteFile: ;///////////////////////////////////////////////////////////////////////
|
||||
;**********************************************************************************
|
||||
%define hFile [ebp + 8] ; handle to the file
|
||||
%define lpBuffer [ebp + 12] ; pointer to buffer containing data
|
||||
%define nNumberOfBytesToWrite [ebp + 16] ; number of bytes to be written
|
||||
%define lpNumberOfBytesWritten [ebp + 20] ; pointer to variable that receives number of bytes written
|
||||
%define lpOverlapped [ebp + 24] ; pointer to OVERLAPPED structure
|
||||
push ebp
|
||||
mov ebp, esp
|
||||
push ebx
|
||||
push esi
|
||||
push edi
|
||||
;---------
|
||||
mov eax, hFile
|
||||
cmp [eax + 8], dword "CON"
|
||||
je .con
|
||||
lea edx, [eax + 8]
|
||||
push edx ;filepath
|
||||
dec esp
|
||||
mov [esp], byte 0
|
||||
push dword lpBuffer ;buffer
|
||||
push dword nNumberOfBytesToWrite;count
|
||||
push dword 0
|
||||
push dword [eax + 4];position ; in InternalFileInfo in libio
|
||||
push dword F70_WRITE_F
|
||||
mov ebx, esp
|
||||
mov eax, 70
|
||||
int 64
|
||||
add esp, 25 ; restore stack
|
||||
mov edx, lpNumberOfBytesWritten
|
||||
mov [edx], ebx
|
||||
mov edx, hFile
|
||||
add [edx + 4], ebx
|
||||
jmp .exit
|
||||
.con:
|
||||
|
||||
; push dword lpBuffer
|
||||
; call [con_printf]
|
||||
; add esp, 4
|
||||
|
||||
push dword nNumberOfBytesToWrite
|
||||
push dword lpBuffer
|
||||
call [con_write_string]
|
||||
|
||||
; push dword lpBuffer
|
||||
; call [con_write_asciiz]
|
||||
|
||||
.exit:
|
||||
;---------
|
||||
pop edi
|
||||
pop esi
|
||||
pop ebx
|
||||
pop ebp
|
||||
ret 20
|
||||
%undef hFile
|
||||
%undef lpBuffer
|
||||
%undef nNumberOfBytesToWrite
|
||||
%undef lpNumberOfBytesWritten
|
||||
%undef lpOverlapped
|
||||
align 16
|
||||
;**********************************************************************************
|
||||
ReadFile: ;////////////////////////////////////////////////////////////////////////
|
||||
;**********************************************************************************
|
||||
%define hFile [ebp + 8] ; handle to the file
|
||||
%define lpBuffer [ebp + 12] ; pointer to buffer that receives data
|
||||
%define nNumberOfBytesToRead [ebp + 16] ; maximum number of bytes to read
|
||||
%define lpNumberOfBytesRead [ebp + 20] ; pointer to variable that receives number of bytes read
|
||||
%define lpOverlapped [ebp + 24] ; pointer to OVERLAPPED structure
|
||||
push ebp
|
||||
mov ebp, esp
|
||||
push ebx
|
||||
push esi
|
||||
push edi
|
||||
|
||||
; push dword 0
|
||||
; call GetStdHandle
|
||||
|
||||
;---------
|
||||
mov eax, hFile
|
||||
cmp [eax + 8], dword "CON"
|
||||
je .con
|
||||
|
||||
|
||||
|
||||
; lea eax, [eax + 8]
|
||||
; push eax
|
||||
; call [con_write_asciiz]
|
||||
|
||||
lea edx, [eax + 8]
|
||||
push edx ;filepath
|
||||
dec esp
|
||||
mov [esp], byte 0
|
||||
push dword lpBuffer ;buffer
|
||||
push dword nNumberOfBytesToRead;count
|
||||
push dword 0
|
||||
push dword [eax + 4];position ; in InternalFileInfo in libio
|
||||
push dword F70_READ_F
|
||||
mov ebx, esp
|
||||
mov eax, 70
|
||||
int 64
|
||||
add esp, 25 ; restore stack
|
||||
mov edx, lpNumberOfBytesRead
|
||||
mov [edx], ebx
|
||||
mov edx, hFile
|
||||
add [edx + 4], ebx
|
||||
jmp .exit
|
||||
.con:
|
||||
push dword nNumberOfBytesToRead
|
||||
push dword lpBuffer
|
||||
call [con_gets]
|
||||
.exit:
|
||||
;---------
|
||||
pop edi
|
||||
pop esi
|
||||
pop ebx
|
||||
pop ebp
|
||||
ret 20
|
||||
%undef hFile
|
||||
%undef lpBuffer
|
||||
%undef nNumberOfBytesToRead
|
||||
%undef lpNumberOfBytesRead
|
||||
%undef lpOverlapped
|
||||
align 16
|
||||
;**********************************************************************************
|
||||
SetConsoleMode: ;//////////////////////////////////////////////////////////////////
|
||||
;**********************************************************************************
|
||||
; ignore input parameters
|
||||
xor eax, eax
|
||||
dec eax
|
||||
ret 8
|
||||
align 16
|
||||
;**********************************************************************************
|
||||
GetCommandLineA: ;/////////////////////////////////////////////////////////////////
|
||||
;**********************************************************************************
|
||||
push edi
|
||||
mov edi, [28]
|
||||
xor al, al
|
||||
xor ecx, ecx
|
||||
dec ecx
|
||||
repne scasb
|
||||
mov eax, edi
|
||||
pop edi
|
||||
ret
|
||||
align 16
|
||||
;**********************************************************************************
|
||||
GlobalAlloc: ;/////////////////////////////////////////////////////////////////////
|
||||
;**********************************************************************************
|
||||
%define uFlags [esp + 4 +1*4] ; memory allocation attributes
|
||||
%define dwBytes [esp + 8 +1*4] ; number of bytes to allocate
|
||||
push ebx
|
||||
; uFlags ignored
|
||||
mov eax, 68
|
||||
mov ebx, 12
|
||||
mov ecx, dwBytes
|
||||
int 64
|
||||
|
||||
pop ebx
|
||||
ret 8
|
||||
%undef uFlags
|
||||
%undef dwBytes
|
||||
align 16
|
||||
;**********************************************************************************
|
||||
GlobalFree: ;//////////////////////////////////////////////////////////////////////
|
||||
;**********************************************************************************
|
||||
%define hMem [esp + 4 +1*4] ; handle to global memory object
|
||||
push ebx
|
||||
|
||||
mov eax, 68
|
||||
mov ebx, 13
|
||||
mov ecx, hMem
|
||||
int 64
|
||||
|
||||
pop ebx
|
||||
ret 4
|
||||
%undef hMem
|
||||
align 16
|
||||
;**********************************************************************************
|
||||
GlobalReAlloc: ;///////////////////////////////////////////////////////////////////
|
||||
;**********************************************************************************
|
||||
%define hMem [esp + 4 +1*4] ; handle to global memory object
|
||||
%define dwBytes [esp + 8 +1*4] ; new size of memory block in bytes
|
||||
%define uFlags [esp + 12 +1*4] ; reallocation options
|
||||
push ebx
|
||||
; uFlags ignored
|
||||
mov eax, 68
|
||||
mov ebx, 20
|
||||
mov ecx, dwBytes
|
||||
mov edx, hMem
|
||||
int 64
|
||||
|
||||
pop ebx
|
||||
ret 12
|
||||
%undef hMem
|
||||
%undef dwBytes
|
||||
%undef uFlags
|
||||
align 16
|
||||
;**********************************************************************************
|
||||
Sleep: ;///////////////////////////////////////////////////////////////////////////
|
||||
;**********************************************************************************
|
||||
%define dwMilliseconds [esp + 4 +1*4] ; time interval
|
||||
push ebx
|
||||
|
||||
mov eax, dwMilliseconds
|
||||
mov ebx, 10
|
||||
cmp eax, ebx
|
||||
jae .ae
|
||||
add eax, 10 ; avoid zero result if dwMilliseconds < 10
|
||||
.ae:
|
||||
xor edx, edx
|
||||
div ebx
|
||||
mov ebx, eax
|
||||
|
||||
mov eax, 5
|
||||
int 64
|
||||
|
||||
pop ebx
|
||||
ret 4
|
||||
%undef dwMilliseconds
|
||||
align 16
|
||||
;**********************************************************************************
|
||||
FlushConsoleInputBuffer: ;/////////////////////////////////////////////////////////
|
||||
;**********************************************************************************
|
||||
; not implemented correctly
|
||||
xor eax, eax
|
||||
dec eax
|
||||
ret 4
|
||||
align 16
|
||||
;**********************************************************************************
|
||||
CloseHandle: ;/////////////////////////////////////////////////////////////////////
|
||||
;**********************************************************************************
|
||||
%define hObject [esp + 4 +1*4]
|
||||
push ebx
|
||||
mov eax, 68
|
||||
mov ebx, 13
|
||||
mov ecx, hObject
|
||||
int 64
|
||||
pop ebx
|
||||
ret 4
|
||||
%undef hObject
|
||||
align 16
|
||||
;**********************************************************************************
|
||||
GetFileSize: ;/////////////////////////////////////////////////////////////////////
|
||||
;**********************************************************************************
|
||||
%define hFile [esp + 4 +3*4]
|
||||
%define lpFileSizeHigh [esp + 8 +3*4]
|
||||
push ebx
|
||||
push esi
|
||||
push edi
|
||||
; lpFileSizeHigh ignored
|
||||
mov [esp - (25 + 40) + 0], dword F70_GETATTR_FD
|
||||
mov [esp - (25 + 40) + 8], dword 0
|
||||
mov [esp - (25 + 40) + 20], byte 0
|
||||
lea eax, [esp - 40]
|
||||
mov [esp - (25 + 40) + 16], eax
|
||||
lea ebx, [esp - (25 + 40)]
|
||||
mov eax, hFile
|
||||
lea eax, [eax + 8] ; as in InternalFileInfo in libio
|
||||
mov [esp - (25 + 40) + 21], eax
|
||||
mov eax, 70
|
||||
int 64
|
||||
test eax, eax
|
||||
jz .no_error
|
||||
mov eax, INVALID_FILE_SIZE
|
||||
jmp .exit
|
||||
.no_error:
|
||||
mov eax, [esp - (25 + 40) + 25 + 32] ; file.size
|
||||
.exit:
|
||||
pop edi
|
||||
pop esi
|
||||
pop ebx
|
||||
ret 8
|
||||
%undef hFile
|
||||
%undef lpFileSizeHigh
|
||||
align 16
|
||||
;**********************************************************************************
|
||||
CreateFileA: ;//////////////////////////////////////////////////////////////////////
|
||||
;**********************************************************************************
|
||||
%define lpFileName [esp + 4 +3*4]
|
||||
%define dwDesiredAccess [esp + 8 +3*4]
|
||||
%define dwShareMode [esp + 12 +3*4]
|
||||
%define lpSecurityAttributes [esp + 16 +3*4]
|
||||
%define dwCreationDisposition [esp + 20 +3*4]
|
||||
%define dwFlagsAndAttributes [esp + 24 +3*4]
|
||||
%define hTemplateFile [esp + 28 +3*4]
|
||||
push ebx
|
||||
push esi
|
||||
push edi
|
||||
;---------
|
||||
|
||||
; push dword 0
|
||||
; call GetStdHandle
|
||||
|
||||
; push dword lpFileName
|
||||
; call [con_write_asciiz]
|
||||
|
||||
|
||||
|
||||
mov eax, 68
|
||||
mov ebx, 12
|
||||
mov ecx, 4096
|
||||
int 64
|
||||
|
||||
mov edx, eax
|
||||
|
||||
lea edi, [eax + 8] ; as in InternalFileInfo in libio
|
||||
mov esi, lpFileName
|
||||
.copy_name:
|
||||
lodsb
|
||||
stosb
|
||||
test al, al
|
||||
jnz .copy_name
|
||||
|
||||
mov eax, dwCreationDisposition
|
||||
cmp eax, CREATE_ALWAYS
|
||||
je .create_always
|
||||
cmp eax, OPEN_EXISTING
|
||||
je .open_existing
|
||||
mov eax, INVALID_HANDLE_VALUE
|
||||
jmp .exit
|
||||
.open_existing:
|
||||
lea eax, [edx + 8]
|
||||
push eax ;filepath
|
||||
dec esp
|
||||
mov [esp], byte 0
|
||||
push dword 0 ; buffer
|
||||
push dword 0 ; count
|
||||
push dword 0
|
||||
push dword 0
|
||||
push dword F70_READ_F
|
||||
mov ebx, esp
|
||||
mov eax, 70
|
||||
int 64
|
||||
add esp, 25 ; restore stack
|
||||
test eax, eax
|
||||
jz .no_error
|
||||
mov eax, INVALID_HANDLE_VALUE
|
||||
jmp .exit
|
||||
.no_error:
|
||||
mov eax, edx ; return pointer to file descriptor
|
||||
jmp .exit
|
||||
.create_always:
|
||||
lea eax, [edx + 8]
|
||||
push eax ;filepath
|
||||
dec esp
|
||||
mov [esp], byte 0
|
||||
push dword 0 ; buffer
|
||||
push dword 0 ; count
|
||||
push dword 0
|
||||
push dword 0
|
||||
push dword F70_CREATE_F
|
||||
mov ebx, esp
|
||||
mov eax, 70
|
||||
int 64
|
||||
add esp, 25 ; restore stack
|
||||
mov eax, edx ; return pointer to file descriptor
|
||||
jmp .exit
|
||||
|
||||
.exit:
|
||||
;---------
|
||||
pop edi
|
||||
pop esi
|
||||
pop ebx
|
||||
ret 28
|
||||
%undef lpFileName
|
||||
%undef dwDesiredAccess
|
||||
%undef dwShareMode
|
||||
%undef lpSecurityAttributes
|
||||
%undef dwCreationDisposition
|
||||
%undef dwFlagsAndAttributes
|
||||
%undef hTemplateFile
|
||||
align 16
|
||||
;**********************************************************************************
|
||||
SetFilePointer: ;//////////////////////////////////////////////////////////////////
|
||||
;**********************************************************************************
|
||||
%define hFile [esp + 4 +3*4]
|
||||
%define lDistanceToMove [esp + 8 +3*4]
|
||||
%define lpDistanceToMoveHigh [esp + 12 +3*4]
|
||||
%define dwMoveMethod [esp + 16 +3*4]
|
||||
push ebx
|
||||
push esi
|
||||
push edi
|
||||
;---------
|
||||
mov eax, hFile
|
||||
cmp dwMoveMethod, dword FILE_BEGIN
|
||||
je .FILE_BEGIN
|
||||
cmp dwMoveMethod, dword FILE_CURRENT
|
||||
je .FILE_CURRENT
|
||||
jmp .FILE_END
|
||||
.FILE_BEGIN:
|
||||
mov edx, lDistanceToMove
|
||||
mov [eax + 4], edx
|
||||
jmp .exit
|
||||
.FILE_CURRENT:
|
||||
mov edx, lDistanceToMove
|
||||
add [eax + 4], edx
|
||||
jmp .exit
|
||||
.FILE_END:
|
||||
push dword 0
|
||||
push eax
|
||||
call GetFileSize
|
||||
mov edx, eax
|
||||
|
||||
mov eax, hFile
|
||||
mov [eax + 4], edx
|
||||
mov edx, lDistanceToMove
|
||||
add [eax + 4], edx
|
||||
.exit:
|
||||
mov eax, [eax + 4]
|
||||
;---------
|
||||
pop edi
|
||||
pop esi
|
||||
pop ebx
|
||||
ret 16
|
||||
%undef hFile
|
||||
%undef lDistanceToMove
|
||||
%undef lpDistanceToMoveHigh
|
||||
%undef dwMoveMethod
|
||||
align 16
|
||||
;**********************************************************************************
|
||||
VirtualAlloc: ;////////////////////////////////////////////////////////////////////
|
||||
;**********************************************************************************
|
||||
%define lpAddress [esp + 4 +1*4]
|
||||
%define dwSize [esp + 8 +1*4]
|
||||
%define flAllocationType [esp + 12 +1*4]
|
||||
%define flProtect [esp + 16 +1*4]
|
||||
push ebx
|
||||
|
||||
mov eax, 68
|
||||
mov ebx, 12
|
||||
mov ecx, dwSize
|
||||
int 64
|
||||
|
||||
pop ebx
|
||||
ret 16
|
||||
%undef lpAddress
|
||||
%undef dwSize
|
||||
%undef flAllocationType
|
||||
%undef flProtect
|
||||
align 16
|
||||
;**********************************************************************************
|
||||
VirtualFree: ;/////////////////////////////////////////////////////////////////////
|
||||
;**********************************************************************************
|
||||
%define lpAddress [esp + 4 +1*4]
|
||||
%define dwSize [esp + 8 +1*4]
|
||||
%define dwFreeType [esp + 12 +1*4]
|
||||
push ebx
|
||||
|
||||
mov eax, 68
|
||||
mov ebx, 13
|
||||
mov ecx, lpAddress
|
||||
int 64
|
||||
|
||||
pop ebx
|
||||
ret 12
|
||||
%undef lpAddress
|
||||
%undef dwSize
|
||||
%undef dwFreeType
|
||||
align 16
|
||||
;**********************************************************************************
|
||||
SetConsoleCursorPosition: ;////////////////////////////////////////////////////////
|
||||
;**********************************************************************************
|
||||
%define hConsoleOutput [esp + 4 +3*4]
|
||||
%define dwCursorPosition [esp + 8 +3*4]
|
||||
push ebx
|
||||
push esi
|
||||
push edi
|
||||
|
||||
mov edx, dwCursorPosition
|
||||
shld eax, edx, 16
|
||||
shr edx, 16
|
||||
|
||||
push eax
|
||||
push edx
|
||||
call [con_set_cursor_pos]
|
||||
|
||||
pop edi
|
||||
pop esi
|
||||
pop ebx
|
||||
ret 8
|
||||
%undef hConsoleOutput
|
||||
%undef dwCursorPosition
|
||||
align 16
|
||||
;**********************************************************************************
|
||||
DeleteFileA: ;/////////////////////////////////////////////////////////////////////
|
||||
;**********************************************************************************
|
||||
%define lpFileName [esp + 4 +1*4] ; name of file
|
||||
push ebx
|
||||
|
||||
mov [esp - (25 + 40) + 0], dword F70_DELETE_FD
|
||||
mov [esp - (25 + 40) + 8], dword 0
|
||||
mov [esp - (25 + 40) + 20], byte 0
|
||||
lea eax, [esp - 40]
|
||||
mov [esp - (25 + 40) + 16], eax
|
||||
lea ebx, [esp - (25 + 40)]
|
||||
mov eax, lpFileName
|
||||
mov [esp - (25 + 40) + 21], eax
|
||||
mov eax, 70
|
||||
int 64
|
||||
|
||||
pop ebx
|
||||
ret 4
|
||||
%undef lpFileName
|
||||
align 16
|
||||
;**********************************************************************************
|
||||
FindClose: ;///////////////////////////////////////////////////////////////////////
|
||||
;**********************************************************************************
|
||||
%define hFindFile [esp + 4 +1*4] ; file search handle
|
||||
|
||||
ret 4
|
||||
%undef hFindFile
|
||||
align 16
|
||||
;**********************************************************************************
|
||||
FindFirstFileA: ;//////////////////////////////////////////////////////////////////
|
||||
;**********************************************************************************
|
||||
%define lpFileName [esp + 4 +3*4] ; name of file
|
||||
%define lpFindFileData [esp + 8 +3*4] ; pointer to WIN32_FIND_DATA structure
|
||||
push ebx
|
||||
push esi
|
||||
push edi
|
||||
|
||||
pop edi
|
||||
pop esi
|
||||
pop ebx
|
||||
ret 8
|
||||
%undef lpFileName
|
||||
%undef lpFindFileData
|
||||
align 16
|
||||
;**********************************************************************************
|
||||
GetLocalTime: ;///////////////////////////////////////////////////////////////////////
|
||||
;**********************************************************************************
|
||||
%define lpSystemTime [esp + 4] ; pointer to SYSTEMTIME structure
|
||||
; yet not implemented
|
||||
; mov eax, lpSystemTime
|
||||
; mov [eax + 0], dword 12345678H
|
||||
; mov [eax + 4], dword 12345678H
|
||||
; mov [eax + 8], dword 12345678H
|
||||
; mov [eax + 12], dword 12345678H
|
||||
; MSDN: This function does not return a value.
|
||||
ret 4
|
||||
%undef lpSystemTime
|
||||
align 16
|
||||
;**********************************************************************************
|
||||
GetLastError: ;////////////////////////////////////////////////////////////////////
|
||||
;**********************************************************************************
|
||||
xor eax, eax
|
||||
ret
|
||||
align 16
|
||||
;**********************************************************************************
|
||||
GetProcessHeap: ;////////////////////////////////////////////////////////////////////
|
||||
;**********************************************************************************
|
||||
xor eax, eax
|
||||
dec eax
|
||||
ret
|
||||
align 16
|
||||
;**********************************************************************************
|
||||
HeapAlloc: ;///////////////////////////////////////////////////////////////////////
|
||||
;**********************************************************************************
|
||||
%define hHeap [esp + 4 +1*4]
|
||||
%define dwFlags [esp + 8 +1*4]
|
||||
%define dwBytes [esp + 12 +1*4]
|
||||
push ebx
|
||||
|
||||
mov eax, 68
|
||||
mov ebx, 12
|
||||
mov ecx, dwBytes
|
||||
int 64
|
||||
|
||||
pop ebx
|
||||
ret 12
|
||||
%undef hHeap
|
||||
%undef dwFlags
|
||||
%undef dwBytes
|
||||
align 16
|
||||
;**********************************************************************************
|
||||
HeapFree: ;////////////////////////////////////////////////////////////////////////
|
||||
;**********************************************************************************
|
||||
%define hHeap [esp + 4 +1*4]
|
||||
%define dwFlags [esp + 8 +1*4]
|
||||
%define lpMem [esp + 12 +1*4]
|
||||
push ebx
|
||||
|
||||
mov eax, 68
|
||||
mov ebx, 13
|
||||
mov ecx, lpMem
|
||||
int 64
|
||||
|
||||
pop ebx
|
||||
ret 12
|
||||
%undef hHeap
|
||||
%undef dwFlags
|
||||
%undef lpMem
|
||||
align 16
|
||||
;**********************************************************************************
|
||||
HeapReAlloc: ;/////////////////////////////////////////////////////////////////////
|
||||
;**********************************************************************************
|
||||
%define hHeap [esp + 4 +1*4]
|
||||
%define dwFlags [esp + 8 +1*4]
|
||||
%define lpMem [esp + 12 +1*4]
|
||||
%define dwBytes [esp + 16 +1*4]
|
||||
push ebx
|
||||
|
||||
mov eax, 68
|
||||
mov ebx, 20
|
||||
mov ecx, dwBytes
|
||||
mov edx, lpMem
|
||||
int 64
|
||||
|
||||
pop ebx
|
||||
ret 16
|
||||
%undef hHeap
|
||||
%undef dwFlags
|
||||
%undef lpMem
|
||||
%undef dwBytes
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
; ------------------------------------------------------------- ;
|
||||
load.library:
|
||||
mov eax, 68
|
||||
mov ebx, 19
|
||||
mov ecx, [esp + 4]
|
||||
int 64
|
||||
ret 4
|
||||
; ------------------------------------------------------------- ;
|
||||
getprocaddress:
|
||||
mov edx, [esp + 8]
|
||||
xor eax, eax
|
||||
test edx, edx
|
||||
jz .end
|
||||
.next:
|
||||
xor eax, eax
|
||||
cmp [edx], dword 0
|
||||
jz .end
|
||||
mov esi, [edx]
|
||||
mov edi, [esp + 4]
|
||||
.next_:
|
||||
lodsb
|
||||
scasb
|
||||
jne .fail
|
||||
or al, al
|
||||
jnz .next_
|
||||
jmp .ok
|
||||
.fail:
|
||||
add edx, 8
|
||||
jmp .next
|
||||
.ok:
|
||||
mov eax, [edx + 4]
|
||||
.end:
|
||||
ret 8
|
||||
; ------------------------------------------------------------- ;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
section '.data' align 16
|
||||
|
||||
con_init dd 0
|
||||
con_write_asciiz dd 0
|
||||
con_exit dd 0
|
||||
con_gets dd 0
|
||||
con_write_string dd 0
|
||||
con_set_flags dd 0
|
||||
con_set_cursor_pos dd 0
|
||||
con_printf dd 0
|
||||
console dd 0
|
||||
sz_con_init db "con_init",0
|
||||
sz_con_write_asciiz db "con_write_asciiz",0
|
||||
sz_con_exit db "con_exit",0
|
||||
sz_con_gets db "con_gets",0
|
||||
sz_con_write_string db "con_write_string",0
|
||||
sz_console db "/sys/lib/console.obj",0
|
||||
sz_con_set_flags db "con_set_flags",0
|
||||
sz_con_set_cursor_pos db "con_set_cursor_pos",0
|
||||
sz_con_printf db "con_printf",0
|
||||
|
||||
con_handle:
|
||||
dd 0
|
||||
dd 0
|
||||
dd "CON"
|
||||
|
||||
|
243
programs/emulator/kwine/lib/msvcrt.dll.asm
Normal file
243
programs/emulator/kwine/lib/msvcrt.dll.asm
Normal file
@ -0,0 +1,243 @@
|
||||
; ------------------------------------------------------------- ;
|
||||
; KWINE is a fork of program PELoad written by 0CodErr
|
||||
; author - rgimad
|
||||
; ------------------------------------------------------------- ;
|
||||
GLOBAL EXPORTS
|
||||
section '.exprt' align 16
|
||||
;**********************************************************************************
|
||||
EXPORTS: ;/////////////////////////////////////////////////////////////////////////
|
||||
;**********************************************************************************
|
||||
dd sz__getch, _getch
|
||||
dd sz__kbhit, _kbhit
|
||||
dd sz_printf, printf
|
||||
dd sz_puts, puts
|
||||
dd sz_gets, gets
|
||||
dd sz_strlen, strlen
|
||||
dd 0
|
||||
sz__getch db "_getch",0
|
||||
sz__kbhit db "_kbhit",0
|
||||
sz_printf db "printf",0
|
||||
sz_puts db "puts",0
|
||||
sz_gets db "gets",0
|
||||
sz_strlen db "strlen",0
|
||||
|
||||
section '.code' align 16
|
||||
align 16
|
||||
;**********************************************************************************
|
||||
_getch: ;//////////////////////////////////////////////////////////////////////////
|
||||
;**********************************************************************************
|
||||
push ebx
|
||||
push esi
|
||||
push edi
|
||||
|
||||
call load_console_lib
|
||||
pop ecx
|
||||
call [con_getch]
|
||||
push ecx
|
||||
|
||||
pop edi
|
||||
pop esi
|
||||
pop ebx
|
||||
ret
|
||||
align 16
|
||||
;**********************************************************************************
|
||||
_kbhit: ;//////////////////////////////////////////////////////////////////////////
|
||||
;**********************************************************************************
|
||||
push ebx
|
||||
push esi
|
||||
push edi
|
||||
|
||||
call load_console_lib
|
||||
pop ecx
|
||||
call [con_kbhit]
|
||||
push ecx
|
||||
|
||||
pop edi
|
||||
pop esi
|
||||
pop ebx
|
||||
ret
|
||||
align 16
|
||||
;**********************************************************************************
|
||||
printf: ;//////////////////////////////////////////////////////////////////////////
|
||||
;**********************************************************************************
|
||||
;pushad
|
||||
;push ebx
|
||||
;push esi
|
||||
;push edi
|
||||
call load_console_lib
|
||||
;popad
|
||||
pop ecx
|
||||
call [con_printf]
|
||||
push ecx
|
||||
|
||||
;pop edi
|
||||
;pop esi
|
||||
;pop ebx
|
||||
|
||||
ret
|
||||
align 16
|
||||
;**********************************************************************************
|
||||
puts: ;////////////////////////////////////////////////////////////////////////// cdecl
|
||||
;**********************************************************************************
|
||||
;push ebx
|
||||
;push esi
|
||||
;push edi
|
||||
|
||||
call load_console_lib
|
||||
pop ecx ; pop return address
|
||||
call [con_write_asciiz]
|
||||
push ecx ; push return address again
|
||||
|
||||
;pop edi
|
||||
;pop esi
|
||||
;pop ebx
|
||||
ret
|
||||
align 16
|
||||
;**********************************************************************************
|
||||
gets: ;////////////////////////////////////////////////////////////////////////// cdecl
|
||||
;**********************************************************************************
|
||||
;push ebx
|
||||
;push esi
|
||||
;push edi
|
||||
|
||||
call load_console_lib
|
||||
pop ecx
|
||||
pop edx
|
||||
push 25 ;; second arg of con_gets assume by default
|
||||
push edx
|
||||
call [con_gets]
|
||||
push ecx
|
||||
|
||||
;pop edi
|
||||
;pop esi
|
||||
;pop ebx
|
||||
ret
|
||||
align 16
|
||||
;**********************************************************************************
|
||||
strlen: ;//////////////////////////////////////////////////////////////////////////
|
||||
;**********************************************************************************
|
||||
push ebx
|
||||
push esi
|
||||
push edi
|
||||
|
||||
call load_console_lib
|
||||
xor eax,eax
|
||||
mov edi, dword [esp + 4 + 4 + 4 + 4]
|
||||
.while1:
|
||||
inc eax
|
||||
cmp byte [eax + edi], 0
|
||||
jnz .while1
|
||||
|
||||
pop edi
|
||||
pop esi
|
||||
pop ebx
|
||||
ret
|
||||
|
||||
|
||||
load_console_lib: ;; stdcall ?
|
||||
; if already loaded then do nothing
|
||||
cmp [console], dword 0
|
||||
jne .do_nothing
|
||||
push sz_console
|
||||
call load.library
|
||||
mov [console], eax
|
||||
mov ecx, eax
|
||||
mov ebx, getprocaddress
|
||||
;;
|
||||
push ecx
|
||||
push sz_con_init
|
||||
call ebx
|
||||
mov [con_init], eax
|
||||
;;
|
||||
push ecx
|
||||
push sz_con_getch
|
||||
call ebx
|
||||
mov [con_getch], eax
|
||||
;;
|
||||
push ecx
|
||||
push sz_con_kbhit
|
||||
call ebx
|
||||
mov [con_kbhit], eax
|
||||
;;
|
||||
push ecx
|
||||
push sz_con_printf
|
||||
call ebx
|
||||
mov [con_printf], eax
|
||||
;;
|
||||
push ecx
|
||||
push sz_con_write_asciiz
|
||||
call ebx
|
||||
mov [con_write_asciiz], eax
|
||||
;;
|
||||
push ecx
|
||||
push sz_con_gets
|
||||
call ebx
|
||||
mov [con_gets], eax
|
||||
|
||||
push ecx
|
||||
push sz_con_init
|
||||
call ebx
|
||||
mov [con_init], eax
|
||||
push con_caption
|
||||
push -1
|
||||
push -1
|
||||
push -1
|
||||
push -1
|
||||
call [con_init]
|
||||
|
||||
|
||||
.do_nothing:
|
||||
ret
|
||||
|
||||
; ------------------------------------------------------------- ; stdcall
|
||||
load.library:
|
||||
mov eax, 68
|
||||
mov ebx, 19
|
||||
mov ecx, [esp + 4]
|
||||
int 64
|
||||
ret 4
|
||||
; ------------------------------------------------------------- ;
|
||||
getprocaddress:
|
||||
mov edx, [esp + 8]
|
||||
xor eax, eax
|
||||
test edx, edx
|
||||
jz .end
|
||||
.next:
|
||||
xor eax, eax
|
||||
cmp [edx], dword 0
|
||||
jz .end
|
||||
mov esi, [edx]
|
||||
mov edi, [esp + 4]
|
||||
.next_:
|
||||
lodsb
|
||||
scasb
|
||||
jne .fail
|
||||
or al, al
|
||||
jnz .next_
|
||||
jmp .ok
|
||||
.fail:
|
||||
add edx, 8
|
||||
jmp .next
|
||||
.ok:
|
||||
mov eax, [edx + 4]
|
||||
.end:
|
||||
ret 8
|
||||
; ------------------------------------------------------------- ;
|
||||
|
||||
section '.data' align 16
|
||||
|
||||
con_caption db "test!",0
|
||||
con_init dd 0
|
||||
con_getch dd 0
|
||||
con_kbhit dd 0
|
||||
con_printf dd 0
|
||||
con_write_asciiz dd 0
|
||||
con_gets dd 0
|
||||
console dd 0
|
||||
sz_con_init db "con_init",0
|
||||
sz_con_getch db "con_getch",0
|
||||
sz_con_kbhit db "con_kbhit",0
|
||||
sz_con_printf db "con_printf",0
|
||||
sz_con_write_asciiz db "con_write_asciiz",0
|
||||
sz_con_gets db "con_gets",0
|
||||
sz_console db "/sys/lib/console.obj",0
|
22
programs/emulator/kwine/make.bat
Normal file
22
programs/emulator/kwine/make.bat
Normal file
@ -0,0 +1,22 @@
|
||||
@echo off
|
||||
set NASM="nasm\nasm.exe"
|
||||
%NASM% -f coff "lib\msvcrt.dll.asm" -o "..\lib\msvcrt.dll"
|
||||
strip --strip-debug "../lib/msvcrt.dll"
|
||||
|
||||
%NASM% -f coff "lib/kernel32.dll.asm" -o "../lib/kernel32.dll"
|
||||
strip --strip-debug "../lib/kernel32.dll"
|
||||
|
||||
%NASM% -f bin "kwine.asm" -o "../kwine"
|
||||
|
||||
if %errorlevel% == 0 (
|
||||
echo compiled succesfully.
|
||||
ubuntu1804 run "mcopy -D o -i ../kolibri.img ../lib/msvcrt.dll ::kwine/lib/msvcrt.dll"
|
||||
ubuntu1804 run "mcopy -D o -i ../kolibri.img ../lib/kernel32.dll ::kwine/lib/kernel32.dll"
|
||||
ubuntu1804 run "mcopy -D o -i ../kolibri.img ../kwine ::kwine/kwine"
|
||||
|
||||
qemu-system-x86_64 -fda ../kolibri.img -m 256
|
||||
) else (
|
||||
echo compilation failed.
|
||||
)
|
||||
|
||||
pause
|
5
programs/emulator/kwine/make_old.txt
Normal file
5
programs/emulator/kwine/make_old.txt
Normal file
@ -0,0 +1,5 @@
|
||||
@echo off
|
||||
fasm lib\kernel32.dll.asm ..\lib\kernel32.dll
|
||||
fasm lib\msvcrt.dll.asm ..\lib\msvcrt.dll
|
||||
fasm kwine.asm ..\kwine
|
||||
pause
|
8
programs/emulator/kwine/readme.txt
Normal file
8
programs/emulator/kwine/readme.txt
Normal file
@ -0,0 +1,8 @@
|
||||
kwine - kolibri wine.
|
||||
|
||||
Developers:
|
||||
- 0CodErr founder of project (PEload)
|
||||
- rgimad some improvements
|
||||
|
||||
Topic:
|
||||
http://board.kolibrios.org/viewtopic.php?f=9&t=2318&p=74314#p74308
|
BIN
programs/fs/unimg/unimg
Normal file
BIN
programs/fs/unimg/unimg
Normal file
Binary file not shown.
Loading…
Reference in New Issue
Block a user