Re: FASM Assembler project
- From: Frank Kotler <fbkotler@xxxxxxxxxxx>
- Date: Sun, 21 Aug 2005 14:29:32 -0400
Betov wrote:
If you are not familiar with Assembly, this is not a trivial task to choose, for your first "steps in".
This is true. John's not a complete newbie though. He and I swapped some code examples back and forth, some years ago. He "gets it", IMHO.
One way for doing a port to Assembly of an existing Demo, is to make use of RosAsm Disassembler-Re-Assembler.
Are you mad??? (nevermind :) I didn't even download the C++ cruft - something like 10M, if I recall... No...
For comparison, here's the Fasm example... at the risk of violating Marcus' copyright...
; +-------------------------------------------+ ; | Program ...... FASMCam | ; | Author ....... Marcus Araujo | ; | Description .. this application shows how | ; | to access webcam via FASM. | ; +-------------------------------------------+
format PE GUI 4.0 entry codestart
include 'win32a.inc'
IDD_MAIN = 100 WM_CAP_DRIVER_CONNECT = WM_USER + 10 WM_CAP_DRIVER_DISCONNECT = WM_USER + 11 WM_CAP_FILE_SAVEDIB = WM_USER + 25 WM_CAP_SET_PREVIEW = WM_USER + 50 WM_CAP_SET_PREVIEWRATE = WM_USER + 52 WM_CAP_SET_SCALE = WM_USER + 53 ID_START = 201 ID_STOP = 202 ID_CLICK = 203 _camtitle db 'FASMWEBCAM'
_filename db 'IMAGE.BMP' ; Filename
nDevice dd 0 ; Device Number -> It can range from 0 through 9
nFPS dd 100 ; Frames per second. Must be 1000/FPS. E.g. 20 FPS = 50
section '.data' data readable writeable hInstance dd ? hWebcam dd ?
section '.code' code readable executable
codestart:
invoke GetModuleHandle, 0
mov [hInstance], eax
invoke DialogBoxParam, eax, IDD_MAIN, HWND_DESKTOP, MainDlg, 0
invoke ExitProcess, 0proc MainDlg hdlg, msg, wparam, lparam
push ebx esi edi
cmp [msg], WM_INITDIALOG
je .wminitdlg
cmp [msg], WM_COMMAND
je .wmcommand
cmp [msg], WM_CLOSE
je .wmclose
xor eax, eax
jmp .finish
.wminitdlg:
invoke capCreateCaptureWindow, _camtitle, WS_VISIBLE + WS_CHILD, 10, 10,\
266, 252, [hdlg], 0
mov [hWebcam], eax
jmp .finish
.wmcommand:
cmp [wparam], BN_CLICKED shl 16 + ID_START
je .startbutton
cmp [wparam], BN_CLICKED shl 16 + ID_STOP
je .stopbutton
cmp [wparam], BN_CLICKED shl 16 + ID_CLICK
je .clickbutton
.wmclose:
invoke SendMessage, [hWebcam], WM_CAP_DRIVER_DISCONNECT, _camtitle, 0
invoke EndDialog, [hdlg], 0
.finish:
pop edi esi ebx
ret
.startbutton:
invoke SendMessage, [hWebcam], WM_CAP_DRIVER_CONNECT, [nDevice], 0
invoke SendMessage, [hWebcam], WM_CAP_SET_SCALE, TRUE, 0
invoke SendMessage, [hWebcam], WM_CAP_SET_PREVIEWRATE, [nFPS], 0
invoke SendMessage, [hWebcam], WM_CAP_SET_PREVIEW, TRUE, 0
jmp .finish
.stopbutton:
invoke SendMessage, [hWebcam], WM_CAP_DRIVER_DISCONNECT, _camtitle, 0
jmp .finish
.clickbutton:
invoke SendMessage, [hWebcam], WM_CAP_FILE_SAVEDIB, 0, _filename
jmp .finish
endp
section '.idata' import data readable writeable
library kernel, 'KERNEL32.DLL',\
user, 'USER32.DLL',\
avicap, 'AVICAP32.DLL' import kernel,\
GetModuleHandle,'GetModuleHandleA',\
ExitProcess, 'ExitProcess' import user,\
DialogBoxParam, 'DialogBoxParamA',\
EndDialog, 'EndDialog',\
SendMessage, 'SendMessageA' import avicap,\
capCreateCaptureWindow, 'capCreateCaptureWindowA'section '.rsrc' resource data readable
directory RT_DIALOG, dialogs
resource dialogs,\
IDD_MAIN, LANG_ENGLISH + SUBLANG_DEFAULT, main_dialog
dialog main_dialog, 'FASM Webcam', 0, 0, 190, 200, WS_CAPTION + WS_POPUP + WS_SYSMENU +\
DS_MODALFRAME + DS_CENTER
dialogitem 'BUTTON', 'START', ID_START, 10, 170, 50, 20, WS_VISIBLE + WS_TABSTOP
dialogitem 'BUTTON', 'STOP', ID_STOP, 70, 170, 50, 20, WS_VISIBLE + WS_TABSTOP
dialogitem 'BUTTON', 'CLICK', ID_CLICK, 130, 170, 50, 20, WS_VISIBLE + WS_TABSTOP
enddialog
;----------------------------------
What part of the "assembly language" is going to be too complicated for the newbie? "xor eax, eax"? Looks like interfacing with Windows is the "hard part". That "AVICAP32.DLL" seems to do all the "grunt work". Now disassembling *that* to find out what's "really going on" might be worthwhile... but not really neccessary, to "just call ...".
Do not hope, anyway, that any solution could be achieved in one day...
I'll bet John could modify that to do something slightly different in "just one day". Getting it to do everything he wants... probably longer... As you say, researching the information is the slow - and unpredictable - part.
Porting it to Linux... if an ".so" equivalent to that ".dll" can be found, no problem. If it has to be done "from scratch", *major* project! If the C++ stuff covers that (which I doubt), it might be worth looking at. Otherwise, I'd say "forget that", and work from Marcus' Fasm example... from the "bottom up"!
Best, Frank .
- Follow-Ups:
- Re: FASM Assembler project
- From: JGCASEY
- Re: FASM Assembler project
- From: Betov
- Re: FASM Assembler project
- References:
- FASM Assembler project
- From: JGCASEY
- Re: FASM Assembler project
- From: Betov
- FASM Assembler project
- Prev by Date: Re: US Military Dead during Iraq War
- Next by Date: Re: Lightning Calculator
- Previous by thread: Re: FASM Assembler project
- Next by thread: Re: FASM Assembler project
- Index(es):
Relevant Pages
|