From e3272c4b2d66e82c9a10e265ed0f2a99e61d91dd Mon Sep 17 00:00:00 2001 From: Burer Date: Sat, 7 Mar 2026 11:04:40 +0200 Subject: [PATCH] apps/piano: fix CWD path, refactor code --- programs/media/piano/piano.asm | 86 +++++++++++++++++++++------------- 1 file changed, 54 insertions(+), 32 deletions(-) diff --git a/programs/media/piano/piano.asm b/programs/media/piano/piano.asm index 35afd6acc..4003ff9c9 100644 --- a/programs/media/piano/piano.asm +++ b/programs/media/piano/piano.asm @@ -19,7 +19,7 @@ dd I_END dd MEM dd STACKTOP dd 0 -dd 0 +dd app_path_buf ; ==================================================================== @@ -31,6 +31,7 @@ include "../../encoding.inc" START: mcall SF_KEYBOARD, SSF_SET_INPUT_MODE, 1 + call build_keymap_path call load_keymap jmp redraw @@ -135,27 +136,44 @@ play: ; ======================================================================= -load_keymap: - call load_default_keymap +build_keymap_path: + ; build path: app_dir + 'piano.map' + lea esi, [app_path_buf + 2] + lea edi, [app_path_buf] + .copy: + lodsb + stosb + test al, al + jnz .copy + ; edi is one past '\0'; scan backward to the last '/' + .find_slash: + dec edi + cmp byte [edi], '/' + jne .find_slash + inc edi - mcall SF_FILE, keymap_file + ; add 'piano.map' to the path + mov eax, 'pian' + stosd + mov eax, 'o.ma' + stosd + mov eax, 'p' + stosd + ret + +; ======================================================================= + +load_keymap: + mcall SF_FILE, keymap_info test eax, eax jnz .notify cmp ebx, 256 je .done .notify: - call load_default_keymap mcall SF_FILE, notify_info .done: ret -load_default_keymap: - mov esi, default_keymap - mov edi, keymap - mov ecx, 256 - rep movsb - ret - ; ======================================================================= redraw: @@ -290,10 +308,10 @@ help_thread: ; draw all help text in rows .help_text_loop: - cmp edi, help_texts_end - jae .help_text_loop_done - mov edx, [edi] + test edx, edx + jz .help_text_loop_done + mcall ; draw text add ebx, RT_HELP.H @@ -308,6 +326,9 @@ help_thread: sc system_colors +mw_pos dd 0 +hw_tid dd 0 + WN_MAIN RECT 32, 32, BT_WHITE.W * 15 + 10, BT_WHITE.H * 2 + (5 + 4) BT_WHITE RECT 0, 4, 48, 100 @@ -449,13 +470,15 @@ help_texts: dd lb_help4 dd lb_help5 dd lb_help6 -help_texts_end: + dd 0 ; ======================================================================= BAD_NOTE = 0xFF -default_keymap: +melody db 0x90, 0x30, 0 + +keymap: db BAD_NOTE ; 0x00 db BAD_NOTE ; 0x01 db 0x21 ; 0x02 '1' -> note 0x31 @@ -514,23 +537,9 @@ default_keymap: db 0x19 ; 0x34 '.' -> note 0x29 db 0x1A ; 0x35 '/' -> note 0x2A - times 256-($-default_keymap) db BAD_NOTE + times 256-($-keymap) db BAD_NOTE -keymap_file: - dd SSF_READ_FILE - dd 0 - dd 0 - dd 256 - dd keymap - db 'piano.map', 0 -; ======================================================================= - -melody db 0x90, 0x30, 0 -keymap rb 256 - -mw_pos dd 0 -hw_tid dd 0 ; ======================================================================= @@ -544,11 +553,24 @@ notify_info: ; ======================================================================= +keymap_info: + dd SSF_READ_FILE + dd 0 + dd 0 + dd 256 + dd keymap + +; ======================================================================= + I_END: + +app_path rb 1024 ; = keymap_info + 20: acts as SF_FILE path field + help_stack: rb 512 help_stack_top: rb 1024 align 512 + STACKTOP: MEM: