Apps/Timer: Rewrite from nasm to fasm

This commit is contained in:
2025-03-02 00:11:29 +02:00
committed by Max Logaev
parent 2e3548d92a
commit 25b79ca6d1
7 changed files with 109 additions and 196 deletions

View File

@@ -442,6 +442,7 @@ tup.append_table(img_files, {
{"TEST", VAR_PROGS .. "/testing/protection/trunk/test"}, {"TEST", VAR_PROGS .. "/testing/protection/trunk/test"},
{"TINYPAD", VAR_PROGS .. "/develop/tinypad/trunk/tinypad"}, {"TINYPAD", VAR_PROGS .. "/develop/tinypad/trunk/tinypad"},
{"TINFO", VAR_PROGS .. "/system/tinfo/tinfo"}, {"TINFO", VAR_PROGS .. "/system/tinfo/tinfo"},
{"TIMER", VAR_PROGS .. "/other/Timer/Timer"},
{"UNZ", VAR_PROGS .. "/fs/unz/unz"}, {"UNZ", VAR_PROGS .. "/fs/unz/unz"},
{"ZKEY", VAR_PROGS .. "/system/zkey/trunk/ZKEY"}, {"ZKEY", VAR_PROGS .. "/system/zkey/trunk/ZKEY"},
{"3D/3DWAV", VAR_PROGS .. "/demos/3dwav/trunk/3dwav"}, {"3D/3DWAV", VAR_PROGS .. "/demos/3dwav/trunk/3dwav"},
@@ -647,7 +648,6 @@ if tup.getconfig('NO_NASM') ~= 'full' then
tup.append_table(img_files, { tup.append_table(img_files, {
{"ACLOCK", VAR_PROGS .. "/demos/aclock/trunk/aclock"}, {"ACLOCK", VAR_PROGS .. "/demos/aclock/trunk/aclock"},
{"LOD", VAR_PROGS .. "/fs/lod/lod"}, {"LOD", VAR_PROGS .. "/fs/lod/lod"},
{"TIMER", VAR_PROGS .. "/other/Timer/timer"},
{"DEVELOP/GENFILES", VAR_PROGS .. "/testing/genfiles/GenFiles"}, {"DEVELOP/GENFILES", VAR_PROGS .. "/testing/genfiles/GenFiles"},
{"MEDIA/FILLSCR", VAR_PROGS .. "/media/FillScr/fillscr"}, {"MEDIA/FILLSCR", VAR_PROGS .. "/media/FillScr/fillscr"},
}) })

View File

@@ -1,11 +1,21 @@
; Timer with three buttons ; ; Timer with three buttons ;
; %define lang "ru_RU" ; %define lang "ru_RU"
; %define lang "it_IT" ; %define lang "it_IT"
ORG 0 use32
BITS 32 org 0
; ---------------------------------------------------------------------------- ; db 'MENUET01'
STACK_SIZE equ 256 version dd 1
dd program.start
dd program.end
dd program.memory
dd program.stack
dd 0,0
include '../../macros.inc'
include '../../proc32.inc'
include '../../KOSfuncs.inc'
include 'lang.inc'
; ---------------------------------------------------------------------------- ;
BUTTON_START equ 2 BUTTON_START equ 2
BUTTON_PAUSE equ 3 BUTTON_PAUSE equ 3
BUTTON_RESET equ 4 BUTTON_RESET equ 4
@@ -19,33 +29,24 @@ CHAR_WIDTH equ 6
CHAR2_WIDTH equ 8 CHAR2_WIDTH equ 8
CHAR_HEIGHT equ 9 CHAR_HEIGHT equ 9
BUTTON_START_WIDTH equ (BUTTON_PADDING * 2) + (sz_start.end - sz_start) * CHAR_WIDTH BUTTON_START_WIDTH = (BUTTON_PADDING * 2) + (sz_start.end - sz_start) * CHAR_WIDTH
BUTTON_PAUSE_WIDTH equ (BUTTON_PADDING * 2) + (sz_pause.end - sz_pause) * CHAR_WIDTH BUTTON_PAUSE_WIDTH = (BUTTON_PADDING * 2) + (sz_pause.end - sz_pause) * CHAR_WIDTH
BUTTON_RESET_WIDTH equ (BUTTON_PADDING * 2) + (sz_reset.end - sz_reset) * CHAR_WIDTH BUTTON_RESET_WIDTH = (BUTTON_PADDING * 2) + (sz_reset.end - sz_reset) * CHAR_WIDTH
BUTTON_HEIGHT equ (BUTTON_PADDING * 2) + CHAR_HEIGHT + 1 BUTTON_HEIGHT = (BUTTON_PADDING * 2) + CHAR_HEIGHT + 1
WINDOW_WIDTH equ (BORDER_SIZE * 2) + (MARGIN * 2) + (BUTTON_MARGIN * 2) + (BUTTON_START_WIDTH + BUTTON_PAUSE_WIDTH + BUTTON_RESET_WIDTH) WINDOW_WIDTH = (BORDER_SIZE * 2) + (MARGIN * 2) + (BUTTON_MARGIN * 2) + (BUTTON_START_WIDTH + BUTTON_PAUSE_WIDTH + BUTTON_RESET_WIDTH)
TIME_AREA_WIDTH equ (CHAR2_WIDTH * 8) ; HH MM SS TIME_AREA_WIDTH = (CHAR2_WIDTH * 8) ; HH MM SS
TIME_AREA_LEFT equ (WINDOW_WIDTH - BORDER_SIZE * 2 - TIME_AREA_WIDTH) / 2 TIME_AREA_LEFT = (WINDOW_WIDTH - BORDER_SIZE * 2 - TIME_AREA_WIDTH) / 2
TIME_AREA_TOP equ MARGIN + 1 TIME_AREA_TOP = MARGIN + 1
TEXT_ON_BUTTONS_TOP equ (MARGIN + CHAR_HEIGHT + MARGIN + BUTTON_PADDING) + 1 TEXT_ON_BUTTONS_TOP = (MARGIN + CHAR_HEIGHT + MARGIN + BUTTON_PADDING) + 1
BUTTON_START_BACK_COLOR equ 0x880000 BUTTON_START_BACK_COLOR equ 0x880000
BUTTON_PAUSE_BACK_COLOR equ 0x008800 BUTTON_PAUSE_BACK_COLOR equ 0x008800
BUTTON_RESET_BACK_COLOR equ 0x000088 BUTTON_RESET_BACK_COLOR equ 0x000088
; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- ;
MENUET01 db 'MENUET01'
version dd 1
program.start dd START
program.end dd END
program.memory dd END + STACK_SIZE
program.stack dd END + STACK_SIZE
program.params dd 0
program.path dd 0
; ---------------------------------------------------------------------------- ;
screen: screen:
.height dw 0 .height dw 0
.width dw 0 .width dw 0
@@ -56,17 +57,7 @@ window:
.width dd WINDOW_WIDTH .width dd WINDOW_WIDTH
.height dd 0 .height dd 0
; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- ;
sc: sc system_colors
.frames dd 0
.grab dd 0
.work_dark dd 0
.work_light dd 0
.grab_text dd 0
.work dd 0
.work_button dd 0
.work_button_text dd 0
.work_text dd 0
.work_graph dd 0
; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- ;
timer_ticks dd 0 timer_ticks dd 0
last_timer_ticks dd 0 last_timer_ticks dd 0
@@ -88,16 +79,16 @@ ButtonEvents:
.pause dd EmptyProc ; at start Pause must not work .pause dd EmptyProc ; at start Pause must not work
.reset dd On_ButtonReset .reset dd On_ButtonReset
; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- ;
%ifidn lang, "ru_RU" if lang eq ru_RU
sz_timer db "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>",0 sz_timer db "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>",0
sz_start: db "<22><><EFBFBD><EFBFBD><EFBFBD>" sz_start: db "<22><><EFBFBD><EFBFBD><EFBFBD>"
.end: db 0 .end: db 0
sz_pause: db "<22><><EFBFBD><EFBFBD><EFBFBD>" sz_pause: db "<22><>"
.end: db 0 .end: db 0
sz_reset: db "<22><><EFBFBD><EFBFBD><EFBFBD>" sz_reset: db "<22><><EFBFBD><EFBFBD><EFBFBD>"
.end: db 0 .end: db 0
%elifidn lang, "it_IT" else if lang eq it_IT
sz_timer db "Timer",0 sz_timer db "Timer",0
sz_start: db "lancio" sz_start: db "lancio"
@@ -106,7 +97,7 @@ ButtonEvents:
.end: db 0 .end: db 0
sz_reset: db "reset" sz_reset: db "reset"
.end: db 0 .end: db 0
%else else
sz_timer db "Timer",0 sz_timer db "Timer",0
sz_start: db "start" sz_start: db "start"
@@ -115,13 +106,12 @@ ButtonEvents:
.end: db 0 .end: db 0
sz_reset: db "reset" sz_reset: db "reset"
.end: db 0 .end: db 0
%endif end if
; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- ;
START: align 4
program.start:
; get.screen.size ; get.screen.size
mov eax, 61 mcall SF_GET_GRAPHICAL_PARAMS,SSF_SCREEN_SIZE
mov ebx, 1
int 64
mov [screen], eax mov [screen], eax
movzx eax, word[screen.width] movzx eax, word[screen.width]
@@ -130,9 +120,7 @@ START:
mov [window.left], eax mov [window.left], eax
; skin.height ; skin.height
mov eax, 48 mcall SF_STYLE_SETTINGS,SSF_GET_SKIN_HEIGHT
mov ebx, 4
int 64
add eax, (MARGIN * 3) + BORDER_SIZE + BUTTON_HEIGHT + CHAR_HEIGHT add eax, (MARGIN * 3) + BORDER_SIZE + BUTTON_HEIGHT + CHAR_HEIGHT
mov [window.height], eax mov [window.height], eax
@@ -144,33 +132,26 @@ START:
call On_Redraw call On_Redraw
; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- ;
wait.event: wait.event:
mov eax, 23 mcall SF_WAIT_EVENT_TIMEOUT, 50
mov ebx, 50 call dword[eax * 4 + Events]
int 64
call [eax * 4 + Events]
jmp wait.event jmp wait.event
; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- ;
On_KeyPress: On_KeyPress:
mov eax, 2 mcall SF_GET_KEY
int 64
ret ret
; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- ;
On_ButtonPress: On_ButtonPress:
mov eax, 17 mcall SF_GET_BUTTON
int 64
movzx eax, ah movzx eax, ah
call [eax * 4 + ButtonEvents] call dword[eax * 4 + ButtonEvents]
ret ret
; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- ;
On_ButtonClose: On_ButtonClose:
or eax, -1 mcall SF_TERMINATE_PROCESS
int 64
; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- ;
On_ButtonStart: On_ButtonStart:
; get system counter ; get system counter
mov eax, 26 mcall SF_SYSTEM_GET,SSF_TIME_COUNT
mov ebx, 9
int 64
sub eax, [last_timer_ticks] sub eax, [last_timer_ticks]
and [last_timer_ticks], dword 0 and [last_timer_ticks], dword 0
mov [timer_ticks], eax mov [timer_ticks], eax
@@ -181,9 +162,7 @@ On_ButtonStart:
; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- ;
On_ButtonPause: On_ButtonPause:
; get system counter ; get system counter
mov eax, 26 mcall SF_SYSTEM_GET,SSF_TIME_COUNT
mov ebx, 9
int 64
sub eax, [timer_ticks] sub eax, [timer_ticks]
mov [last_timer_ticks], eax mov [last_timer_ticks], eax
mov [timer_proc], dword EmptyProc mov [timer_proc], dword EmptyProc
@@ -204,23 +183,14 @@ On_ButtonReset:
; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- ;
On_Redraw: On_Redraw:
; redraw.start ; redraw.start
mov eax, 12 mcall SF_REDRAW,SSF_BEGIN_DRAW
mov ebx, 1
int 64
; get.standart.colors ; get.standart.colors
mov eax, 48 mcall SF_STYLE_SETTINGS,SSF_GET_COLORS,sc,sizeof.system_colors
mov ebx, 3
mov ecx, sc
mov edx, 40
int 64
; skin.height ; skin.height
mov eax, 48 mcall ,SSF_GET_SKIN_HEIGHT
mov ebx, 4
int 64
add eax, (MARGIN * 3) + BORDER_SIZE + BUTTON_HEIGHT + CHAR_HEIGHT add eax, (MARGIN * 3) + BORDER_SIZE + BUTTON_HEIGHT + CHAR_HEIGHT
mov [window.height], eax mov [window.height], eax
; draw.window ; draw.window
xor eax, eax
mov ebx, [window.left] mov ebx, [window.left]
shl ebx, 16 shl ebx, 16
add ebx, [window.width] add ebx, [window.width]
@@ -230,51 +200,28 @@ On_Redraw:
mov edx, [sc.work] mov edx, [sc.work]
or edx, 0x34000000 or edx, 0x34000000
mov edi, sz_timer mov edi, sz_timer
int 64 mcall SF_CREATE_WINDOW
; draw.buttons: ; draw.buttons:
mov eax, 8 mcall SF_DEFINE_BUTTON, (MARGIN shl 16) or BUTTON_START_WIDTH, ((MARGIN + CHAR_HEIGHT + MARGIN) shl 16) or BUTTON_HEIGHT, BUTTON_START, BUTTON_START_BACK_COLOR
mov ecx, ((MARGIN + CHAR_HEIGHT + MARGIN) << 16) | BUTTON_HEIGHT
mov ebx, (MARGIN << 16) | BUTTON_START_WIDTH mcall , ((MARGIN + BUTTON_START_WIDTH + BUTTON_MARGIN) shl 16) or BUTTON_PAUSE_WIDTH,, BUTTON_PAUSE, BUTTON_PAUSE_BACK_COLOR
mov edx, BUTTON_START
mov esi, BUTTON_START_BACK_COLOR
int 64
mov ebx, ((MARGIN + BUTTON_START_WIDTH + BUTTON_MARGIN) << 16) | BUTTON_PAUSE_WIDTH mcall , ((MARGIN + BUTTON_START_WIDTH + BUTTON_MARGIN + BUTTON_PAUSE_WIDTH + BUTTON_MARGIN) shl 16) or BUTTON_RESET_WIDTH,, BUTTON_RESET, BUTTON_RESET_BACK_COLOR
mov edx, BUTTON_PAUSE
mov esi, BUTTON_PAUSE_BACK_COLOR
int 64
mov ebx, ((MARGIN + BUTTON_START_WIDTH + BUTTON_MARGIN + BUTTON_PAUSE_WIDTH + BUTTON_MARGIN) << 16) | BUTTON_RESET_WIDTH
mov edx, BUTTON_RESET
mov esi, BUTTON_RESET_BACK_COLOR
int 64
;---------------------- ;----------------------
; draw.texts: ; draw.texts:
mov eax, 4 mcall SF_DRAW_TEXT, ((MARGIN + BUTTON_PADDING + 1) shl 16) or TEXT_ON_BUTTONS_TOP, 0x80FFFFFF, sz_start
mov ecx, 0x80FFFFFF
mov ebx, ((MARGIN + BUTTON_PADDING + 1) << 16) | TEXT_ON_BUTTONS_TOP mcall , ((MARGIN + BUTTON_START_WIDTH + BUTTON_MARGIN + BUTTON_PADDING + 1) shl 16) or TEXT_ON_BUTTONS_TOP,, sz_pause
mov edx, sz_start
int 64
mov ebx, ((MARGIN + BUTTON_START_WIDTH + BUTTON_MARGIN + BUTTON_PADDING + 1) << 16) | TEXT_ON_BUTTONS_TOP mcall , ((MARGIN + BUTTON_START_WIDTH + BUTTON_MARGIN + BUTTON_PAUSE_WIDTH + BUTTON_MARGIN + BUTTON_PADDING + 1) shl 16) or TEXT_ON_BUTTONS_TOP,, sz_reset
mov edx, sz_pause
int 64
mov ebx, ((MARGIN + BUTTON_START_WIDTH + BUTTON_MARGIN + BUTTON_PAUSE_WIDTH + BUTTON_MARGIN + BUTTON_PADDING + 1) << 16) | TEXT_ON_BUTTONS_TOP
mov edx, sz_reset
int 64
;---------------------- ;----------------------
call On_Idle call On_Idle
; redraw.finish ; redraw.finish
mov eax, 12 mcall SF_REDRAW,SSF_END_DRAW
mov ebx, 2
int 64
ret ret
; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- ;
DrawTime: DrawTime:
mov ebx, (1 << 16) mov ebx, (1 shl 16)
mov esi, [sc.work_text] mov esi, [sc.work_text]
mov edi, [sc.work] mov edi, [sc.work]
; HH ; HH
@@ -287,24 +234,16 @@ DrawTime:
mov ecx, eax ; [hours] first digit mov ecx, eax ; [hours] first digit
or esi, 0x70000000 or esi, 0x70000000
mov eax, 47 mcall SF_DRAW_NUMBER,,, (TIME_AREA_LEFT shl 16) or TIME_AREA_TOP
mov edx, (TIME_AREA_LEFT << 16) | TIME_AREA_TOP
int 64
and esi, 0x30FFFFFF and esi, 0x30FFFFFF
mov eax, 47 mcall ,,, ((TIME_AREA_LEFT + 1) shl 16) or TIME_AREA_TOP
mov edx, ((TIME_AREA_LEFT + 1) << 16) | TIME_AREA_TOP
int 64
mov ecx, ebp ; [hours] second digit mov ecx, ebp ; [hours] second digit
or esi, 0x70000000 or esi, 0x70000000
mov eax, 47 mcall ,,, ((TIME_AREA_LEFT + 1 + CHAR2_WIDTH) shl 16) or TIME_AREA_TOP
mov edx, ((TIME_AREA_LEFT + 1 + CHAR2_WIDTH) << 16) | TIME_AREA_TOP
int 64
and esi, 0x30FFFFFF and esi, 0x30FFFFFF
mov eax, 47 mcall ,,, ((TIME_AREA_LEFT + 1 + CHAR2_WIDTH + 1) shl 16) or TIME_AREA_TOP
mov edx, ((TIME_AREA_LEFT + 1 + CHAR2_WIDTH + 1) << 16) | TIME_AREA_TOP
int 64
; MM ; MM
mov eax, [minutes] mov eax, [minutes]
xor edx, edx xor edx, edx
@@ -315,24 +254,16 @@ DrawTime:
mov ecx, eax ; [minutes] first digit mov ecx, eax ; [minutes] first digit
or esi, 0x70000000 or esi, 0x70000000
mov eax, 47 mcall SF_DRAW_NUMBER,,, ((TIME_AREA_LEFT + CHAR2_WIDTH * 3) shl 16) or TIME_AREA_TOP
mov edx, ((TIME_AREA_LEFT + CHAR2_WIDTH * 3) << 16) | TIME_AREA_TOP
int 64
and esi, 0x30FFFFFF and esi, 0x30FFFFFF
mov eax, 47 mcall ,,, ((TIME_AREA_LEFT + CHAR2_WIDTH * 3 + 1) shl 16) or TIME_AREA_TOP
mov edx, ((TIME_AREA_LEFT + CHAR2_WIDTH * 3 + 1) << 16) | TIME_AREA_TOP
int 64
mov ecx, ebp ; [minutes] second digit mov ecx, ebp ; [minutes] second digit
or esi, 0x70000000 or esi, 0x70000000
mov eax, 47 mcall ,,, ((TIME_AREA_LEFT + 1 + CHAR2_WIDTH * 3 + CHAR2_WIDTH) shl 16) or TIME_AREA_TOP
mov edx, ((TIME_AREA_LEFT + 1 + CHAR2_WIDTH * 3 + CHAR2_WIDTH) << 16) | TIME_AREA_TOP
int 64
and esi, 0x30FFFFFF and esi, 0x30FFFFFF
mov eax, 47 mcall ,,, ((TIME_AREA_LEFT + 1 + CHAR2_WIDTH * 3 + CHAR2_WIDTH + 1) shl 16) or TIME_AREA_TOP
mov edx, ((TIME_AREA_LEFT + 1 + CHAR2_WIDTH * 3 + CHAR2_WIDTH + 1) << 16) | TIME_AREA_TOP
int 64
; SS ; SS
mov eax, [seconds] mov eax, [seconds]
xor edx, edx xor edx, edx
@@ -343,24 +274,16 @@ DrawTime:
mov ecx, eax ; [seconds] first digit mov ecx, eax ; [seconds] first digit
or esi, 0x70000000 or esi, 0x70000000
mov eax, 47 mcall SF_DRAW_NUMBER,,, ((TIME_AREA_LEFT + CHAR2_WIDTH * 6) shl 16) or TIME_AREA_TOP
mov edx, ((TIME_AREA_LEFT + CHAR2_WIDTH * 6) << 16) | TIME_AREA_TOP
int 64
and esi, 0x30FFFFFF and esi, 0x30FFFFFF
mov eax, 47 mcall ,,, ((TIME_AREA_LEFT + CHAR2_WIDTH * 6 + 1) shl 16) or TIME_AREA_TOP
mov edx, ((TIME_AREA_LEFT + CHAR2_WIDTH * 6 + 1) << 16) | TIME_AREA_TOP
int 64
mov ecx, ebp ; [seconds] second digit mov ecx, ebp ; [seconds] second digit
or esi, 0x70000000 or esi, 0x70000000
mov eax, 47 mcall ,,, ((TIME_AREA_LEFT + 1 + CHAR2_WIDTH * 6 + CHAR2_WIDTH) shl 16) or TIME_AREA_TOP
mov edx, ((TIME_AREA_LEFT + 1 + CHAR2_WIDTH * 6 + CHAR2_WIDTH) << 16) | TIME_AREA_TOP
int 64
and esi, 0x30FFFFFF and esi, 0x30FFFFFF
mov eax, 47 mcall ,,, ((TIME_AREA_LEFT + 1 + CHAR2_WIDTH * 6 + CHAR2_WIDTH + 1) shl 16) or TIME_AREA_TOP
mov edx, ((TIME_AREA_LEFT + 1 + CHAR2_WIDTH * 6 + CHAR2_WIDTH + 1) << 16) | TIME_AREA_TOP
int 64
ret ret
; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- ;
On_Idle: On_Idle:
@@ -370,9 +293,7 @@ On_Idle:
; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- ;
TimerStarted: TimerStarted:
; get system counter ; get system counter
mov eax, 26 mcall SF_SYSTEM_GET,SSF_TIME_COUNT
mov ebx, 9
int 64
sub eax, [timer_ticks] sub eax, [timer_ticks]
xor edx, edx xor edx, edx
mov ecx, 100 mov ecx, 100
@@ -390,4 +311,9 @@ TimerStarted:
EmptyProc: EmptyProc:
ret ret
; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- ;
END: align 4
program.end:
rb 512
align 16
program.stack:
program.memory:

View File

@@ -1,2 +1,7 @@
if tup.getconfig("NO_NASM") ~= "" then return end if tup.getconfig("NO_FASM") ~= "" then return end
tup.rule("Timer.asm", "nasm -f bin -o %o %f " .. tup.getconfig("KPACK_CMD"), "timer") HELPERDIR = (tup.getconfig("HELPERDIR") == "") and "../.." or tup.getconfig("HELPERDIR")
tup.include(HELPERDIR .. "/use_fasm.lua")
add_include(tup.getvariantdir())
tup.rule("echo lang fix " .. ((tup.getconfig("LANG") == "") and "en_US" or tup.getconfig("LANG")) .. " > %o", {"lang.inc"})
tup.rule({"Timer.asm", extra_inputs = {"lang.inc"}}, FASM .. " %f %o " .. tup.getconfig("KPACK_CMD"), "Timer")

View File

@@ -0,0 +1,4 @@
@echo lang fix en_EN >lang.inc
@fasm.exe -m 16384 timer.asm timer.kex
@kpack timer.kex
pause

View File

@@ -0,0 +1,4 @@
@echo lang fix ru_RU >lang.inc
@fasm.exe -m 16384 timer.asm timer.kex
@kpack timer.kex
pause

View File

@@ -1 +0,0 @@
nasm -f bin Timer.asm -o Timer

View File

@@ -113,31 +113,6 @@ EM_IPC equ 1000000b
EM_NETWORK equ 10000000b EM_NETWORK equ 10000000b
EM_DEBUG equ 100000000b EM_DEBUG equ 100000000b
; ---------------------------------------------------------------------------- ;
struct THREAD_INFO
cpu_usage rd 1 ; usage of the processor
win_stack_pos rw 1 ; position of the window of thread in the window stack
reserved0 rw 1 ; has no relation to the specified thread
reserved1 rw 1 ; reserved
name rb 11 ; name of the started file - executable file without extension
reserved2 rb 1 ; reserved, this byte is not changed
mem_address rd 1 ; address of the process in memory
mem_usage rd 1 ; size of used memory - 1
identifier rd 1 ; identifier (PID/TID)
x rd 1 ; coordinate of the thread window on axis x
y rd 1 ; coordinate of the thread window on axis y
size_x rd 1 ; size of the thread window on axis x
size_y rd 1 ; size of the thread window on axis y
thread_state rw 1 ; status of the thread slot
reserved3 rw 1 ; reserved, this word is not changed
client_x rd 1 ; coordinate of the client area on axis x
client_y rd 1 ; coordinate of the client area on axis y
client_size_x rd 1 ; width of the client area
client_size_y rd 1 ; height of the client area
window_state rb 1 ; state of the window - bitfield
event_mask rd 1 ; event mask
keyboard_mode rb 1 ; keyboard mode
ends
; ---------------------------------------------------------------------------- ; ; ---------------------------------------------------------------------------- ;
slot dd -1 ; for default if no params slot dd -1 ; for default if no params
@@ -248,7 +223,7 @@ macro DrawCpuUsage {
; sz_cpu_usage ; sz_cpu_usage
stdcall DrawText, [back_color],[fore_color],sz_cpu_usage,[Pos.y],COLUMN1_TEXT_X stdcall DrawText, [back_color],[fore_color],sz_cpu_usage,[Pos.y],COLUMN1_TEXT_X
; [cpu_usage] ; [cpu_usage]
stdcall uint2str, [thread_info + THREAD_INFO.cpu_usage] stdcall uint2str, [thread_info.cpu_usage]
stdcall PadBuffSpaces, COLUMN2_MAX_COUNT stdcall PadBuffSpaces, COLUMN2_MAX_COUNT
stdcall DrawText, [back_color],[fore_color],tmpbuffer,[Pos.y],COLUMN2_TEXT_X stdcall DrawText, [back_color],[fore_color],tmpbuffer,[Pos.y],COLUMN2_TEXT_X
call ChangeBackColor call ChangeBackColor
@@ -259,7 +234,7 @@ macro DrawWinStackPos {
; sz_win_stack_pos ; sz_win_stack_pos
stdcall DrawText, [back_color],[fore_color],sz_win_stack_pos,[Pos.y],COLUMN1_TEXT_X stdcall DrawText, [back_color],[fore_color],sz_win_stack_pos,[Pos.y],COLUMN1_TEXT_X
; [win_stack_pos] ; [win_stack_pos]
movzx eax, word [thread_info + THREAD_INFO.win_stack_pos] movzx eax, word [thread_info.window_stack_position]
stdcall uint2str, eax stdcall uint2str, eax
stdcall PadBuffSpaces, COLUMN2_MAX_COUNT stdcall PadBuffSpaces, COLUMN2_MAX_COUNT
stdcall DrawText, [back_color],[fore_color],tmpbuffer,[Pos.y],COLUMN2_TEXT_X stdcall DrawText, [back_color],[fore_color],tmpbuffer,[Pos.y],COLUMN2_TEXT_X
@@ -271,7 +246,7 @@ macro DrawName {
; sz_name ; sz_name
stdcall DrawText, [back_color],[fore_color],sz_name,[Pos.y],COLUMN1_TEXT_X stdcall DrawText, [back_color],[fore_color],sz_name,[Pos.y],COLUMN1_TEXT_X
; name ; name
stdcall DrawText, [back_color],[fore_color],(thread_info + THREAD_INFO.name),[Pos.y],COLUMN2_TEXT_X stdcall DrawText, [back_color],[fore_color],(thread_info.process_name),[Pos.y],COLUMN2_TEXT_X
call ChangeBackColor call ChangeBackColor
add [Pos.y], dword ITEM_HEIGHT add [Pos.y], dword ITEM_HEIGHT
} }
@@ -280,7 +255,7 @@ macro DrawMemAddress {
; sz_mem_address ; sz_mem_address
stdcall DrawText, [back_color],[fore_color],sz_mem_address,[Pos.y],COLUMN1_TEXT_X stdcall DrawText, [back_color],[fore_color],sz_mem_address,[Pos.y],COLUMN1_TEXT_X
; [mem_address] ; [mem_address]
stdcall uint2str, [thread_info + THREAD_INFO.mem_address] stdcall uint2str, [thread_info.memory_start]
stdcall PadBuffSpaces, COLUMN2_MAX_COUNT stdcall PadBuffSpaces, COLUMN2_MAX_COUNT
stdcall DrawText, [back_color],[fore_color],tmpbuffer,[Pos.y],COLUMN2_TEXT_X stdcall DrawText, [back_color],[fore_color],tmpbuffer,[Pos.y],COLUMN2_TEXT_X
call ChangeBackColor call ChangeBackColor
@@ -291,7 +266,7 @@ macro DrawMemUsage {
; sz_mem_usage ; sz_mem_usage
stdcall DrawText, [back_color],[fore_color],sz_mem_usage,[Pos.y],COLUMN1_TEXT_X stdcall DrawText, [back_color],[fore_color],sz_mem_usage,[Pos.y],COLUMN1_TEXT_X
; [mem_usage] ; [mem_usage]
stdcall uint2str, [thread_info + THREAD_INFO.mem_usage] stdcall uint2str, [thread_info.used_memory]
stdcall PadBuffSpaces, COLUMN2_MAX_COUNT stdcall PadBuffSpaces, COLUMN2_MAX_COUNT
stdcall DrawText, [back_color],[fore_color],tmpbuffer,[Pos.y],COLUMN2_TEXT_X stdcall DrawText, [back_color],[fore_color],tmpbuffer,[Pos.y],COLUMN2_TEXT_X
call ChangeBackColor call ChangeBackColor
@@ -302,7 +277,7 @@ macro DrawIdentifier {
; sz_identifier ; sz_identifier
stdcall DrawText, [back_color],[fore_color],sz_identifier,[Pos.y],COLUMN1_TEXT_X stdcall DrawText, [back_color],[fore_color],sz_identifier,[Pos.y],COLUMN1_TEXT_X
; [identifier] ; [identifier]
stdcall uint2str, [thread_info + THREAD_INFO.identifier] stdcall uint2str, [thread_info.PID]
stdcall PadBuffSpaces, COLUMN2_MAX_COUNT stdcall PadBuffSpaces, COLUMN2_MAX_COUNT
stdcall DrawText, [back_color],[fore_color],tmpbuffer,[Pos.y],COLUMN2_TEXT_X stdcall DrawText, [back_color],[fore_color],tmpbuffer,[Pos.y],COLUMN2_TEXT_X
call ChangeBackColor call ChangeBackColor
@@ -313,7 +288,7 @@ macro DrawWindowX {
; sz_x ; sz_x
stdcall DrawText, [back_color],[fore_color],sz_x,[Pos.y],COLUMN1_TEXT_X stdcall DrawText, [back_color],[fore_color],sz_x,[Pos.y],COLUMN1_TEXT_X
; [x] ; [x]
stdcall uint2str, [thread_info + THREAD_INFO.x] stdcall uint2str, [thread_info.box.left]
stdcall PadBuffSpaces, COLUMN2_MAX_COUNT stdcall PadBuffSpaces, COLUMN2_MAX_COUNT
stdcall DrawText, [back_color],[fore_color],tmpbuffer,[Pos.y],COLUMN2_TEXT_X stdcall DrawText, [back_color],[fore_color],tmpbuffer,[Pos.y],COLUMN2_TEXT_X
call ChangeBackColor call ChangeBackColor
@@ -324,7 +299,7 @@ macro DrawWindowY {
; sz_y ; sz_y
stdcall DrawText, [back_color],[fore_color],sz_y,[Pos.y],COLUMN1_TEXT_X stdcall DrawText, [back_color],[fore_color],sz_y,[Pos.y],COLUMN1_TEXT_X
; [y] ; [y]
stdcall uint2str, [thread_info + THREAD_INFO.y] stdcall uint2str, [thread_info.box.top]
stdcall PadBuffSpaces, COLUMN2_MAX_COUNT stdcall PadBuffSpaces, COLUMN2_MAX_COUNT
stdcall DrawText, [back_color],[fore_color],tmpbuffer,[Pos.y],COLUMN2_TEXT_X stdcall DrawText, [back_color],[fore_color],tmpbuffer,[Pos.y],COLUMN2_TEXT_X
call ChangeBackColor call ChangeBackColor
@@ -335,7 +310,7 @@ macro DrawWindowSizeX {
; sz_size_x ; sz_size_x
stdcall DrawText, [back_color],[fore_color],sz_size_x,[Pos.y],COLUMN1_TEXT_X stdcall DrawText, [back_color],[fore_color],sz_size_x,[Pos.y],COLUMN1_TEXT_X
; [size_x] ; [size_x]
stdcall uint2str, [thread_info + THREAD_INFO.size_x] stdcall uint2str, [thread_info.box.width]
stdcall PadBuffSpaces, COLUMN2_MAX_COUNT stdcall PadBuffSpaces, COLUMN2_MAX_COUNT
stdcall DrawText, [back_color],[fore_color],tmpbuffer,[Pos.y],COLUMN2_TEXT_X stdcall DrawText, [back_color],[fore_color],tmpbuffer,[Pos.y],COLUMN2_TEXT_X
call ChangeBackColor call ChangeBackColor
@@ -346,7 +321,7 @@ macro DrawWindowSizeY {
; sz_size_y ; sz_size_y
stdcall DrawText, [back_color],[fore_color],sz_size_y,[Pos.y],COLUMN1_TEXT_X stdcall DrawText, [back_color],[fore_color],sz_size_y,[Pos.y],COLUMN1_TEXT_X
; [size_y] ; [size_y]
stdcall uint2str, [thread_info + THREAD_INFO.size_y] stdcall uint2str, [thread_info.box.height]
stdcall PadBuffSpaces, COLUMN2_MAX_COUNT stdcall PadBuffSpaces, COLUMN2_MAX_COUNT
stdcall DrawText, [back_color],[fore_color],tmpbuffer,[Pos.y],COLUMN2_TEXT_X stdcall DrawText, [back_color],[fore_color],tmpbuffer,[Pos.y],COLUMN2_TEXT_X
call ChangeBackColor call ChangeBackColor
@@ -357,7 +332,7 @@ macro DrawThreadState {
; sz_thread_state ; sz_thread_state
stdcall DrawText, [back_color],[fore_color],sz_thread_state,[Pos.y],COLUMN1_TEXT_X stdcall DrawText, [back_color],[fore_color],sz_thread_state,[Pos.y],COLUMN1_TEXT_X
; decoded_thread_state & [thread_state] ; decoded_thread_state & [thread_state]
movzx eax, word [thread_info + THREAD_INFO.thread_state] movzx eax, word [thread_info.slot_state]
push eax ; for "call uint2str" below push eax ; for "call uint2str" below
cmp eax, THREAD_STATE_RUNNING cmp eax, THREAD_STATE_RUNNING
@@ -409,7 +384,7 @@ macro DrawClientX {
; sz_client_x ; sz_client_x
stdcall DrawText, [back_color],[fore_color],sz_client_x,[Pos.y],COLUMN1_TEXT_X stdcall DrawText, [back_color],[fore_color],sz_client_x,[Pos.y],COLUMN1_TEXT_X
; [client_x] ; [client_x]
stdcall uint2str, [thread_info + THREAD_INFO.client_x] stdcall uint2str, [thread_info.client_box.left]
stdcall PadBuffSpaces, COLUMN2_MAX_COUNT stdcall PadBuffSpaces, COLUMN2_MAX_COUNT
stdcall DrawText, [back_color],[fore_color],tmpbuffer,[Pos.y],COLUMN2_TEXT_X stdcall DrawText, [back_color],[fore_color],tmpbuffer,[Pos.y],COLUMN2_TEXT_X
call ChangeBackColor call ChangeBackColor
@@ -420,7 +395,7 @@ macro DrawClientY {
; sz_client_y ; sz_client_y
stdcall DrawText, [back_color],[fore_color],sz_client_y,[Pos.y],COLUMN1_TEXT_X stdcall DrawText, [back_color],[fore_color],sz_client_y,[Pos.y],COLUMN1_TEXT_X
; [client_y] ; [client_y]
stdcall uint2str, [thread_info + THREAD_INFO.client_y] stdcall uint2str, [thread_info.client_box.top]
stdcall PadBuffSpaces, COLUMN2_MAX_COUNT stdcall PadBuffSpaces, COLUMN2_MAX_COUNT
stdcall DrawText, [back_color],[fore_color],tmpbuffer,[Pos.y],COLUMN2_TEXT_X stdcall DrawText, [back_color],[fore_color],tmpbuffer,[Pos.y],COLUMN2_TEXT_X
call ChangeBackColor call ChangeBackColor
@@ -431,7 +406,7 @@ macro DrawClientSizeX {
; sz_client_size_x ; sz_client_size_x
stdcall DrawText, [back_color],[fore_color],sz_client_size_x,[Pos.y],COLUMN1_TEXT_X stdcall DrawText, [back_color],[fore_color],sz_client_size_x,[Pos.y],COLUMN1_TEXT_X
; [client_size_x] ; [client_size_x]
stdcall uint2str, [thread_info + THREAD_INFO.client_size_x] stdcall uint2str, [thread_info.client_box.width]
stdcall PadBuffSpaces, COLUMN2_MAX_COUNT stdcall PadBuffSpaces, COLUMN2_MAX_COUNT
stdcall DrawText, [back_color],[fore_color],tmpbuffer,[Pos.y],COLUMN2_TEXT_X stdcall DrawText, [back_color],[fore_color],tmpbuffer,[Pos.y],COLUMN2_TEXT_X
call ChangeBackColor call ChangeBackColor
@@ -442,7 +417,7 @@ macro DrawClientSizeY {
; sz_client_size_y ; sz_client_size_y
stdcall DrawText, [back_color],[fore_color],sz_client_size_y,[Pos.y],COLUMN1_TEXT_X stdcall DrawText, [back_color],[fore_color],sz_client_size_y,[Pos.y],COLUMN1_TEXT_X
; [client_size_y] ; [client_size_y]
stdcall uint2str, [thread_info + THREAD_INFO.client_size_y] stdcall uint2str, [thread_info.client_box.height]
stdcall PadBuffSpaces, COLUMN2_MAX_COUNT stdcall PadBuffSpaces, COLUMN2_MAX_COUNT
stdcall DrawText, [back_color],[fore_color],tmpbuffer,[Pos.y],COLUMN2_TEXT_X stdcall DrawText, [back_color],[fore_color],tmpbuffer,[Pos.y],COLUMN2_TEXT_X
call ChangeBackColor call ChangeBackColor
@@ -453,7 +428,7 @@ macro DrawWindowState {
; sz_window_state ; sz_window_state
stdcall DrawText, [back_color],[fore_color],sz_window_state,[Pos.y],COLUMN1_TEXT_X stdcall DrawText, [back_color],[fore_color],sz_window_state,[Pos.y],COLUMN1_TEXT_X
; decoded_window_state & [window_state] ; decoded_window_state & [window_state]
movzx eax, byte [thread_info + THREAD_INFO.window_state] movzx eax, byte [thread_info.wnd_state]
push eax ; for "call uint2str" below push eax ; for "call uint2str" below
mov ebx, eax mov ebx, eax
mov [tmpbuffer], byte 0 mov [tmpbuffer], byte 0
@@ -483,7 +458,7 @@ macro DrawEventMask {
; sz_event_mask ; sz_event_mask
stdcall DrawText, [back_color],[fore_color],sz_event_mask,[Pos.y],COLUMN1_TEXT_X stdcall DrawText, [back_color],[fore_color],sz_event_mask,[Pos.y],COLUMN1_TEXT_X
; decoded_event_mask & [event_mask] ; decoded_event_mask & [event_mask]
mov eax, [thread_info + THREAD_INFO.event_mask] mov eax, [thread_info.event_mask]
push eax ; for "call uint2str" below push eax ; for "call uint2str" below
mov ebx, eax mov ebx, eax
mov [tmpbuffer], byte 0 mov [tmpbuffer], byte 0
@@ -537,7 +512,7 @@ macro DrawKeyboardMode {
; sz_keyboard_mode ; sz_keyboard_mode
stdcall DrawText, [back_color],[fore_color],sz_keyboard_mode,[Pos.y],COLUMN1_TEXT_X stdcall DrawText, [back_color],[fore_color],sz_keyboard_mode,[Pos.y],COLUMN1_TEXT_X
; decoded_keyboard_mode & [keyboard_mode] ; decoded_keyboard_mode & [keyboard_mode]
movzx eax, byte [thread_info + THREAD_INFO.keyboard_mode] movzx eax, byte [thread_info.keyboard_mode]
push eax ; for "call uint2str" below push eax ; for "call uint2str" below
cmp eax, KEYBOARD_MODE_ASCII cmp eax, KEYBOARD_MODE_ASCII