flat assembler
Message board for the users of flat assembler.
![]() |
Author |
|
Ville 28 Aug 2022, 17:00
Here is an example for functions 2,37,66 and 9, which returns applications path/name.
Also startup parameters are displayed when the app is started with 'filename param1 param2' with CMD. Menuet doesnt have a temporary directory. And wanted events can be set with system call 40. Code: ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; 64 bit Menuet event example ; ; Compile with FASM 1.60 or above ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; use64 org 0x0 db 'MENUET64' ; Header identifier dq 0x01 ; Version dq START ; Start of code dq image_end ; Size of image dq 0x100000 ; Memory for app dq 0xffff0 ; Rsp dq parameter ; Prm dq 0x00 ; Icon START: mov rax , 40 mov rbx , 100111b ; Events: mouse,button,keyboard,window int 0x60 call draw_window ; At first, draw the window still: mov rax , 10 ; Wait here for event int 0x60 test rax , 1 ; Window redraw jnz window_event test rax , 2 ; Keyboard press jnz key_event test rax , 4 ; Button press jnz button_event test rax , 32 ; Mouse event jnz mouse_event jmp still mouse_event: mov rax , 13 mov rbx , 20 shl 32 + 120 mov rcx , 160 shl 32 + 40 mov rdx , 0xf8f8f8 int 0x60 ; Mouse buttons mov rax , 37 mov rbx , 2 int 0x60 mov rcx , rax mov rax , 47 mov rbx , 8 shl 16 + 1 shl 8 mov rdx , 30 shl 32 + 170 mov rsi , 0 int 0x60 ; Mouse scroll wheel mov rax , 37 mov rbx , 3 int 0x60 mov rcx , rax mov rax , 47 mov rbx , 16 shl 16 + 1 shl 8 mov rdx , 30 shl 32 + 180 mov rsi , 0 int 0x60 jmp still window_event: call draw_window jmp still key_event: mov rax , 13 mov rbx , 20 shl 32 + 120 mov rcx , 70 shl 32 + 80 mov rdx , 0xf8f8f8 int 0x60 ; Get key data mov rax , 2 int 0x60 mov r10 , rax mov r11 , rbx mov r12 , rcx ; Function result (rax) mov rax , 47 mov rbx , 16 shl 16 + 1 shl 8 mov rcx , r10 mov rdx , 30 shl 32 + 80 mov rsi , 0 int 0x60 ; Key type (down/up,value/extended,ascii/unicode) mov rcx , r11 add rdx , 12 int 0x60 ; Key value/extended mov rcx , r12 add rdx , 12 int 0x60 mov rax , 'Key: ' mov [text],rax mov [text+5],r12 mov [text+5+8],byte 0 add rdx , 12 and rdx , 0xffff mov rax , 4 mov rbx , text mov rcx , 30 mov rsi , 0x000000 mov r9 , 1 int 0x60 ; Pressed ctrl,menu,alt,.. keys ; Available without key event mov rax , 66 mov rbx , 3 int 0x60 mov rcx , rax mov rax , 47 mov rbx , 16 shl 16 + 1 shl 8 mov rdx , 30 shl 32 + 130 mov rsi , 0 int 0x60 jmp still button_event: mov rax , 17 int 0x60 ; rax = status ; rbx = button id cmp rbx , 0x10000001 jne no_application_terminate_button mov rax , 0x200 int 0x60 no_application_terminate_button: cmp rbx , 0x106 jne no_application_terminate_menu mov rax , 0x200 int 0x60 no_application_terminate_menu: jmp still draw_window: mov rax , 12 ; Beginning of window draw mov rbx , 1 int 0x60 mov rax , 0 ; Draw window mov rbx , 256 shl 32 + 250 ; X start & size mov rcx , 128 shl 32 + 230 ; Y start & size mov rdx , 0x0000000000FFFFFF ; Type & border color mov r8 , 0x0000000000000001 ; Flags (set as 1) mov r9 , window_label ; 0 or label - asciiz mov r10 , menu_struct ; 0 or pointer to menu struct int 0x60 ; Startup parameter(s) mov rax , 4 ; Display text mov rbx , parameter+8 ; Pointer to text mov rcx , 30 ; X position mov rdx , 45 ; Y position mov rsi , 0x000000 ; Color mov r9 , 1 ; Font int 0x60 ; Display current application path/name mov rax , 111 mov rbx , 1 int 0x60 sub rsp , 1024 mov rcx , rax mov rax , 9 mov rbx , 2 mov rdx , rsp mov r8 , 1000 int 0x60 mov rax , 4 ; Display text mov rbx , rsp ; Pointer to text add rbx , 408 ; table 9-1 mov rcx , 30 ; X position mov rdx , 60 ; Y position mov rsi , 0x000000 ; Color mov r9 , 1 ; Font int 0x60 add rsp , 1024 mov rax , 12 ; End of window draw mov rbx , 2 int 0x60 ret ; Data area window_label: db 'EXAMPLE',0 ; Window label text: times 32 db ' ' menu_struct: ; Menu Struct dq 0 ; Version dq 0x100 ; Start value of ID to return ( ID + Line ) ; Returned when menu closes and ; user made no selections. db 0,'FILE',0 ; ID = 0x100 + 1 db 1,'New',0 ; ID = 0x100 + 2 db 1,'Open..',0 ; ID = 0x100 + 3 db 1,'Save..',0 ; ID = 0x100 + 4 db 1,'-',0 ; ID = 0x100 + 5 db 1,'Quit',0 ; ID = 0x100 + 6 db 0,'HELP',0 ; ID = 0x100 + 7 db 1,'Contents..',0 ; ID = 0x100 + 8 db 1,'About..',0 ; ID = 0x100 + 9 db 255 ; End of Menu Struct parameter: dq 255 ; area length rb 256 image_end: |
|||
![]() |
|
Ville 29 Aug 2022, 16:10
Menuet has ring-3 protection for applications. When memory is accessed beoynd applications memory area (2 MB paging), the application is removed by the OS. Same happens with other privelidged commands when executed at processes ring-3 level. See System -> Protection application. Application can program some interrupts to read data from defined I/O ports.
|
|||
![]() |
|
CandyMan 30 Aug 2022, 17:21
Thanks a lot. You helped me a lot.
I'll be in touch again. |
|||
![]() |
|
< Last Thread | Next Thread > |
Forum Rules:
|
Copyright © 1999-2023, Tomasz Grysztar. Also on GitHub, YouTube.
Website powered by rwasa.