ProMiNick
Joined: 24 Mar 2012
Posts: 802
Location: Russian Federation, Sochi
|
;format PE CEGUI 2.11 at $10000
format PE GUI 2.11 at $10000;rename binary as 'winCE.EXE'
PE.Settings.Machine = IMAGE_FILE_MACHINE_ARM
PE.Settings.Subsystem = IMAGE_SUBSYSTEM_WINDOWS_CE_GUI
entry start ;launch CMD line '%OUTPUT%'
include 'wincew.inc'
section '.text' code readable executable
start:
;invoke GetModuleHandle,0 ; {MOV R0, #0; BL GetModuleHandle}
;STR R0, [wc.hInstance]
STR R4, [wc.hInstance] ; Initialy R4 holds hInstance
LDR R1, WindowProc
STR R1, [wc.lpfnWndProc]
MOV R1, COLOR_BTNFACE+1
STR R1, [wc.hbrBackground]
LDR R1, _class
STR R1, [wc.lpszClassName]
invoke LoadIcon,R0,IDI_APPLICATION ; {MOV R1, IDI_APPLICATION; BL LoadIcon}
STR R0, [wc.hIcon]
invoke RegisterClass,wc ; {LDR R0, wc; BL RegisterClass}
CMP R0,#0
BEQ error
invoke CreateWindowEx,0,_class,_title,$10000000,0,0,100,100,NULL,NULL,[wc.hInstance],NULL ; {MOV R0, #0; LDR R1, _class; LDR R2, _title; MOV R3, $10000000; (MOV R5, NULL; STR R5, [SP]), (LDR R5, [wc.hInstance]; STR R5, [SP-4]), (MOV R5, NULL; STR R5, [SP-8]), (MOV R5, NULL; STR R5, [SP-12]), (MOV R5, 100; STR R5, [SP-16]), (MOV R5, 100; STR R5, [SP-20]), (MOV R5, 0; STR R5, [SP-16]), (MOV R5, 0; STR R5, [SP-20]), later 4 nulls for 4 params via registers; BL CreateWindowEx}
CMP R0,#0
BEQ error
msg_loop:
invoke GetMessage,msg,NULL,0,0 ; {LDR R0, msg; MOV R1, NULL; MOV R2, #0; MOV R3, #0; BL GetMessage}
CMP R0, #0
BEQ end_loop
invoke TranslateMessage,msg ; {LDR R0, msg; BL TranslateMessage}
invoke DispatchMessage,msg ; {LDR R0, msg; BL DispatchMessage}
B msg_loop
error:
invoke MessageBox,NULL,_error,NULL,MB_ICONERROR+MB_OK ; MOV R0, NULL; LDR R1, _error; MOV R2, NULL; MOV R3, MB_ICONERROR+MB_OK; BL MessageBox}
end_loop:
;invoke ExitProcess,0
MOV R0,#0
MOV PC,$F000F7F8 ;B $F000F7F8; ExitProcess=$F000F7F8?
proc WindowProc uses R4 R5 R6 R7 R8 R11 LR, hwnd,wmsg,wparam,lparam
CMP R1,WM_DESTROY
BEQ .wmdestroy
.defwndproc:
invoke DefWindowProc,R0,R1,R2,R3
B .finish
.wmdestroy:
invoke PostQuitMessage,0 ; {MOV R0, #0; BL PostQuitMessage}
MOV R0,#0
.finish:
ret
endp
section '.data' data readable writeable
_class TCHAR 'FASMWINCE',0
_title TCHAR 'WinCE program template',0
_error TCHAR 'Startup failed.',0
wc WNDCLASS style:0, lpfnWndProc:WindowProc, hbrBackground:COLOR_BTNFACE+1, lpszClassName:_class
msg MSG
section '.idata' import data readable writeable
;DCD 0,0,0,RVA coredll_name,RVA coredll_table
;dd 0,0,0,0,0
;coredll_table:
; ExitProcess dd RVA _ExitProcess
; dd 0
;coredll_name db 'COREDLL.DLL',0
;LoadIcon dw 0
; db 'LoadIconW',0
;RegisterClass dw 0
; db 'RegisterClassW',0
;CreateWindowEx dw 0
; db 'CreateWindowExW',0
;GetMessage dw 0
; db 'GetMessageW',0
;TranslateMessage dw 0
; db 'TranslateMessage',0
;DispatchMessage dw 0
; db 'DispatchMessageW',0
;MessageBox dw 0
; db 'MessageBoxW',0
;DefWindowProc dw 0
; db 'DefWindowProcW',0
;PostQuitMessage dw 0
; db 'PostQuitMessageW',0
library coredll,'COREDLL.DLL'
include 'ABI\WINCE\API\coredll.inc'
where is correct formatter includes & macros to ARM format variations & ARM OSes
question: registers R0-R3 for calls 1st 4 args, what is the best register for temp calculations? to make some things via macro?
(I would prefer to change order of STR instruction to Intel like syntax).
Why I try ARM in wince - it small, easy to emulate & it structures & apies looks like windows structures & apies. this is skeleton of app, for now wincew.inc & ceredll.inc - not exists.
_________________ I don`t like to refer by "you" to one person.
My soul requires acronim "thou" instead.
|