2D, 3D, game, games, online game, game development, game engine, programming, OpenGL, Open AI, math, graphics, design, graphic, graphics, game development, game engine, programming, web development, web art, web graphic, arts, tutorial, tutorials,
joi, 15 august 2024
luni, 12 august 2024
News : FencerDevLog - Godot 4: Screen glitch shader (tutorial) .
... more video tutorials from FencerDevLog - official youtube channel .
Posted by
Cătălin George Feștilă
Labels:
2024,
2024 news,
news,
tutorials,
video,
video tutorial,
youtube
FASM : play a wav file with assembly programming language.
... this source code in FASM will play a hexa file using a window with two buttons, see my comments to deal with 'how to do it' ... :
; sound player example , tested with tada.wav from windows os
; convert wav file with
; tomeko.net/online_tools/file_to_hex.php online tool
; to text from tool , then add 'db ' in the front of Sound.inc text file like this:
; db 0x52, 0x49, 0x46, 0x46,
; this : 0x52, 0x49, 0x46, 0x46, is header for RIFF WAV file format
format PE GUI 4.0
entry start
include 'INCLUDE\win32a.inc'
ID_CAPTION = 101
ID_MESSAGE = 102
ID_ICONERROR = 201
ID_ICONINFORMATION = 202
ID_ICONQUESTION = 203
ID_ICONWARNING = 204
ID_TOPMOST = 301
section '.text' code readable executable
start:
invoke GetModuleHandle,0
invoke DialogBoxParam,eax,37,HWND_DESKTOP,DialogProc,0
invoke ExitProcess,0
proc DialogProc hwnddlg,msg,wparam,lparam
push ebx esi edi
cmp [msg],WM_INITDIALOG
je .wminitdialog
cmp [msg],WM_COMMAND
je .wmcommand
cmp [msg],WM_CLOSE
je .wmclose
xor eax,eax
jmp .finish
.wminitdialog:
jmp .processed
.wmcommand:
cmp [wparam],BN_CLICKED shl 16 + IDCANCEL ; stop
je .player_stop
cmp [wparam],BN_CLICKED shl 16 + IDOK
je .player_play
jmp .processed
.player_stop:
invoke play, NULL, NULL, NULL ; stop
jmp .processed
.player_play:
invoke play, sndFile, NULL, 0x0004 or 0x0001 ; 0x0004 = SND_MEMORY + ASYNC = 0x0001
jmp .processed
.wmclose:
invoke EndDialog,[hwnddlg],0
.processed:
mov eax,1
.finish:
pop edi esi ebx
ret
endp
section '.bss' readable writeable
sndFile :
;db 'Sound.wav',0
include 'Sound.inc';
section '.idata' import data readable writeable
library kernel,'KERNEL32.DLL',\
user,'USER32.DLL',\
winmm,'winmm.dll'
import winmm,\
play, 'PlaySound'
import kernel,\
GetModuleHandle,'GetModuleHandleA',\
ExitProcess,'ExitProcess'
import user,\
DialogBoxParam,'DialogBoxParamA',\
EndDialog,'EndDialog'
section '.rsrc' resource data readable
directory RT_DIALOG,dialogs
resource dialogs,\
37,LANG_ENGLISH+SUBLANG_DEFAULT,demonstration
dialog demonstration,'SoundPlayer / _ (typedef)',70,76,110,30,WS_CAPTION+WS_POPUP+WS_SYSMENU+DS_MODALFRAME
dialogitem 'BUTTON','Play',IDOK,10,10,45,15,WS_VISIBLE
dialogitem 'BUTTON','Stop',IDCANCEL,54,10,45,15,WS_VISIBLE
enddialog
sâmbătă, 10 august 2024
FASM : take a screenshot with assembly programming language.
From my old assembly projects, this is a source code that take an screenshot of your display.
format PE GUI 4.0
include 'INCLUDE\win32w.inc'
struct GdiplusStartupInput
GdiplusVersion dd ?
DebugEventCallback dd ?
SuppressBackgroundThread dd ?
SuppressExternalCodecs dd ?
ends
struct ImageCodecInfo
Clsid db 16 dup ?
FormatID db 16 dup ?
CodecName dd ?
DllName dd ?
FormatDescription dd ?
FilenameExtension dd ?
MimeType dd ?
Flags dd ?
Version dd ?
SigCount dd ?
SizeSize dd ?
SigPattern dd ?
SigMask dd ?
ends
section '.text' code readable executable
entry $
invoke GdiplusStartup,token,input,NULL
test eax,eax
jnz exit
invoke GdipGetImageEncodersSize,encoders_count,encoders_size
test eax,eax
jnz gdiplus_shutdown
invoke VirtualAlloc,0,[encoders_size],MEM_COMMIT,PAGE_READWRITE
test eax,eax
jz gdiplus_shutdown
mov ebx,eax
invoke GdipGetImageEncoders,[encoders_count],[encoders_size],ebx
test eax,eax
jnz gdiplus_shutdown
scan_encoders:
mov esi,[ebx+ImageCodecInfo.MimeType]
mov edi,encoder_mimetype
mov ecx,(encoder_clsid-encoder_mimetype) shr 1
repe cmpsw
je encoder_found
add ebx,sizeof.ImageCodecInfo
dec [encoders_count]
jnz scan_encoders
; no encoder found
jmp gdiplus_shutdown
encoder_found:
lea esi,[ebx+ImageCodecInfo.Clsid]
mov edi,encoder_clsid
mov ecx,4
rep movsd
invoke VirtualFree,ebx,0,MEM_RELEASE
invoke GetDC,HWND_DESKTOP
test eax,eax
jz gdiplus_shutdown
mov esi,eax
invoke GetSystemMetrics,SM_CYSCREEN
mov [screen_height],eax
invoke GetSystemMetrics,SM_CXSCREEN
mov [screen_width],eax
invoke CreateCompatibleBitmap,esi,[screen_width],[screen_height]
test eax,eax
jz release_desktop_dc
mov ebx,eax
invoke CreateCompatibleDC,esi
test eax,eax
jz delete_bitmap
mov edi,eax
invoke SelectObject,edi,ebx
test eax,eax
jz delete_dc
invoke BitBlt,edi,0,0,[screen_width],[screen_height],esi,0,0,SRCCOPY
test eax,eax
jz delete_dc
invoke GdipCreateBitmapFromHBITMAP,ebx,NULL,gdip_bitmap
test eax,eax
jnz delete_dc
invoke GdipSaveImageToFile,[gdip_bitmap],file_name,encoder_clsid,NULL
invoke GdipDisposeImage,[gdip_bitmap]
delete_dc:
invoke DeleteObject,edi
delete_bitmap:
invoke DeleteObject,ebx
release_desktop_dc:
invoke ReleaseDC,HWND_DESKTOP,esi
gdiplus_shutdown:
invoke GdiplusShutdown,[token]
exit:
invoke ExitProcess,0
section '.data' data readable writeable
file_name du 'test.jpg',0
encoder_mimetype du 'image/jpeg',0
.length = $ - encoder_mimetype
encoder_clsid db 16 dup ?
input GdiplusStartupInput 1
token dd ?
memdc dd ?
gdip_bitmap dd ?
encoders_count dd ?
encoders_size dd ?
screen_width dd ?
screen_height dd ?
section '.rdata' data readable
data import
library kernel32,'KERNEL32.DLL',\
user32,'USER32.DLL',\
gdi32,'GDI32.DLL',\
gdiplus, 'GDIPLUS.DLL'
include 'INCLUDE\API\kernel32.inc'
include 'INCLUDE\API\user32.inc'
include 'INCLUDE\API\gdi32.inc'
import gdiplus,\
GdiplusStartup,'GdiplusStartup',\
GdiplusShutdown,'GdiplusShutdown',\
GdipGetImageEncodersSize,'GdipGetImageEncodersSize',\
GdipGetImageEncoders,'GdipGetImageEncoders',\
GdipSaveImageToFile,'GdipSaveImageToFile',\
GdipDisposeImage,'GdipDisposeImage',\
GdipCreateBitmapFromHBITMAP,'GdipCreateBitmapFromHBITMAP'
end data
Abonați-vă la:
Postări (Atom)