From 8a0107ea337253327cf5471629a1ea1c5431ce47 Mon Sep 17 00:00:00 2001 From: "Kirill Lipatov (Leency)" Date: Mon, 6 May 2019 08:47:59 +0000 Subject: [PATCH] mousecfg: load COM-mouse driver option piano: upload to SVN minimp3: reupload to SVN and add it to ISO git-svn-id: svn://kolibrios.org@7646 a494cfbc-eb01-0410-851d-a64ba20cac60 --- data/Tupfile.lua | 1 + data/common/media/minimp3 | Bin 0 -> 23595 bytes programs/cmm/mousecfg/mousecfg.c | 75 ++- programs/media/piano/Tupfile.lua | 2 + programs/media/piano/build.bat | 3 + programs/media/piano/piano.asm | 959 +++++++++++++++++++++++++++++++ 6 files changed, 1018 insertions(+), 22 deletions(-) create mode 100644 data/common/media/minimp3 create mode 100644 programs/media/piano/Tupfile.lua create mode 100644 programs/media/piano/build.bat create mode 100644 programs/media/piano/piano.asm diff --git a/data/Tupfile.lua b/data/Tupfile.lua index f03ce45ad9..339ec27ffb 100644 --- a/data/Tupfile.lua +++ b/data/Tupfile.lua @@ -239,6 +239,7 @@ extra_files = { {"kolibrios/lib/i915_dri.drv", "common/lib/i915_dri.drv"}, {"kolibrios/media/fplay", "common/media/fplay"}, {"kolibrios/media/fplay_run", "common/media/fplay_run"}, + {"kolibrios/media/minimp3", "common/media/minimp3"}, {"kolibrios/media/updf", "common/media/updf"}, {"kolibrios/media/vttf", "common/media/vttf"}, {"kolibrios/media/zsea/zsea.ini", PROGS .. "/media/zsea/zSea.ini"}, diff --git a/data/common/media/minimp3 b/data/common/media/minimp3 new file mode 100644 index 0000000000000000000000000000000000000000..e76b106b465877ca76571ac8a1500dae89ca1980 GIT binary patch literal 23595 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 break; - mouse_frame.w = - mouse_frame.x * 2 + Form.cwidth; - DefineButton(mouse_frame.x, mouse_frame.y, mouse_frame.w, + mouse_frame.w = - FRAME_X * 2 + Form.cwidth; + DefineButton(FRAME_X, FRAME_Y, mouse_frame.w, mouse_frame.h, 99+BT_NOFRAME, 0xF0F2F3); //needed to handle mouse_up and refresh mouse image - WriteText(mouse_frame.x + 110, mouse_frame.y + 25, 0x90, 0x2C343C, CHECK_MOUSE_1); - WriteText(mouse_frame.x + 110, mouse_frame.y + 45, 0x90, 0x2C343C, CHECK_MOUSE_2); + WriteText(FRAME_X + 110, FRAME_Y + 25, 0x90, 0x2C343C, CHECK_MOUSE_1); + WriteText(FRAME_X + 110, FRAME_Y + 45, 0x90, 0x2C343C, CHECK_MOUSE_2); DrawMouseImage(0,0,0,0); DrawControls(); } @@ -132,26 +145,26 @@ void DrawMouseImage(dword l,r,m,v) { void DrawControls() { incn y; - y.n = mouse_frame.y+115; - pointer_speed.draw(mouse_frame.x, y.inc(30)); - acceleration.draw(mouse_frame.x, y.inc(30)); - double_click_delay.draw(mouse_frame.x, y.inc(30)); - emulation.draw(mouse_frame.x, y.inc(33)); - madmouse.draw(mouse_frame.x, y.inc(27)); + y.n = FRAME_Y+115; + pointer_speed.draw(FRAME_X, y.inc(30)); + acceleration.draw(FRAME_X, y.inc(30)); + double_click_delay.draw(FRAME_X, y.inc(30)); + emulation.draw(FRAME_X, y.inc(33)); + madmouse.draw(FRAME_X, y.inc(27)); + com_mouse.draw(FRAME_X, y.inc(27)); } void LoadCfg() { - acceleration.value = ini.GetInt("acceleration", GetMouseAcceleration()); - pointer_speed.value = ini.GetInt("speed", GetMouseSpeed()); - double_click_delay.value = ini.GetInt("double_click_delay", GetMouseDoubleClickDelay()); + acceleration.value = GetMouseAcceleration(); + pointer_speed.value = GetMouseSpeed(); + double_click_delay.value = GetMouseDoubleClickDelay(); + com_mouse.checked = ini.GetInt("com_mouse", 0); madmouse.checked = CheckProcessExists("MADMOUSE"); emulation.checked = CheckProcessExists("MOUSEMUL"); } void ExitApp() { - ini.SetInt("acceleration", acceleration.value); - ini.SetInt("speed", pointer_speed.value); - ini.SetInt("double_click_delay", double_click_delay.value); + ini.SetInt("com_mouse", com_mouse.checked); ExitProcess(); } @@ -161,4 +174,22 @@ void ApplyCfg() { SetMouseDoubleClickDelay(double_click_delay.value); } +void EventClickComMouse() +{ + if (!com_mouse.checked) + { + if (RunProgram("/sys/loaddrv", "COMMOUSE")>=0) { + notify(COMMOUSE_LOADED); + com_mouse.click(com_mouse.id); + } + else { + notify("'Error running LOADDRV' -E"); + } + } + else + { + notify(COMMOUSE_CAN_NOT_UNLOAD); + } +} + stop: diff --git a/programs/media/piano/Tupfile.lua b/programs/media/piano/Tupfile.lua new file mode 100644 index 0000000000..798fc76452 --- /dev/null +++ b/programs/media/piano/Tupfile.lua @@ -0,0 +1,2 @@ +if tup.getconfig("NO_FASM") ~= "" then return end +tup.rule("piano.asm", "fasm %f %o " .. tup.getconfig("KPACK_CMD"), "piano") diff --git a/programs/media/piano/build.bat b/programs/media/piano/build.bat new file mode 100644 index 0000000000..bcfe7ec327 --- /dev/null +++ b/programs/media/piano/build.bat @@ -0,0 +1,3 @@ +@fasm.exe piano.asm piano + +pause \ No newline at end of file diff --git a/programs/media/piano/piano.asm b/programs/media/piano/piano.asm new file mode 100644 index 0000000000..6e34d48e91 --- /dev/null +++ b/programs/media/piano/piano.asm @@ -0,0 +1,959 @@ +; Простой пример программы для KolibriOS +; озвучивает код нажатой клавиши +; +; Компилировать FASM'ом +; Можно открыть example.asm через программу FASM (её ярлык есть +; на рабочем столе) +; А можно просто нажать F9 в Tinypad'е. Лог компиляции +; отображается на доске отладки (программа BOARD) +; +; Что важно знать при программировании под Колибри: +; Номер функции помещается в регистр eax. +; Вызов системной функции осуществляется командой "int 0x40". +; Все регистры, кроме явно указанных в возвращаемом значении, +; включая регистр флагов eflags, сохраняются. +; +; Пример: +; mov eax, 1 ;Функция 1 - поставить точку в окне +; ;список сисфункций см. в DOCPACK - sysfuncr.txt +; mov ebx, 10 ; координата x=10 +; mov ecx, 20 ; координата y=10 +; mov edx, 0xFFFfff ;цвет точки +; int 0x40 ;вызвать функцию +; +; Тоже самое с использованием макроса: +; mcall 1, 10, 20, 0xFFFfff +;--------------------------------------------------------------------- + + use32 ; включить 32-битный режим ассемблера + org 0 ; адресация с нуля + + db 'MENUET01' ; 8-байтный идентификатор MenuetOS + dd 1 ; версия заголовка (всегда 1) + dd START ; адрес первой команды + dd I_END ; размер программы + dd MEM ; количество памяти + dd STACKTOP ; адрес вершины стэка + dd 0 ; адрес буфера для параметров + dd 0 ; зарезервировано + +include "../../macros.inc" ; макросы облегчают жизнь ассемблерщиков! + +;--------------------------------------------------------------------- +;--- НАЧАЛО ПРОГРАММЫ ---------------------------------------------- +;--------------------------------------------------------------------- + +START: + +red: ; перерисовать окно + + call draw_window ; вызываем процедуру отрисовки окна + +;--------------------------------------------------------------------- +;--- ЦИКЛ ОБРАБОТКИ СОБЫТИЙ ---------------------------------------- +;--------------------------------------------------------------------- + +still: + ;mcall 10 ; функция 10 - ждать события + mov eax, 10 + int 0x40 + + cmp eax,2 ; нажата клавиша ? + je key ; если да - на key + cmp eax,3 ; нажата кнопка ? + je button ; если да - на button + cmp eax,1 ; перерисовать окно ? + je red ; если да - на метку red + + jmp still ; если другое событие - в начало цикла + + + +;--------------------------------------------------------------------- + + + key: ; нажата клавиша на клавиатуре + mcall 2 ; функция 2 - считать код символа (в ah) + + + cmp ah, 0x41 ; A - if Caps Lock ON + jnz @f + jmp _07 + @@: + cmp ah, 0x5a ; Z + jnz @f + jmp _08 + @@: + cmp ah, 0x53 ; S + jnz @f + jmp _09 + @@: + cmp ah, 0x58 ; X + jnz @f + jmp _0a + @@: + cmp ah, 0x44 ; D + jnz @f + jmp _0b + @@: + cmp ah, 0x43 ; C + jnz @f + jmp _0c + @@: + cmp ah, 0x56 ; V + jnz @f + _01: + mov ah, 0x01 + jmp p + @@: + cmp ah, 0x47 ; G + jnz @f + _02: + mov ah, 0x02 + jmp p + @@: + cmp ah, 0x42 ; B + jnz @f + _03: + mov ah, 0x03 + jmp p + @@: + cmp ah, 0x48 ; H + jnz @f + _04: + mov ah, 0x04 + jmp p + @@: + cmp ah, 0x4e ; N + jnz @f + _05: + mov ah, 0x05 + jmp p + @@: + cmp ah, 0x4d ; M + jnz @f + _06: + mov ah, 0x06 + jmp p + @@: + cmp ah, 0x4b ; K + jnz @f + _07: + mov ah, 0x07 + jmp p + @@: + cmp ah, 0x3c ; < + jnz @f + _08: + mov ah, 0x08 + jmp p + @@: + cmp ah, 0x4c ; L + jnz @f + _09: + mov ah, 0x09 + jmp p + @@: + cmp ah, 0x3e ; > + jnz @f + _0a: + mov ah, 0x0a + jmp p + @@: + cmp ah, 0x3a ; : + jnz @f + _0b: + mov ah, 0x0b + jmp p + @@: + cmp ah, 0x3f ; ? + jnz @f + _0c: + mov ah, 0x0c + jmp p + @@: + cmp ah, 0x22 ; " + jnz @f + jmp _11 + @@: + cmp ah, 0x21 ; key !------- + jnz @f + jmp _0c + @@: + cmp ah, 0x51 ; key Q + jnz @f + _11: + mov ah, 0x11 + jmp p + @@: + cmp ah, 0x40 ; key @ + jnz @f + _12: + mov ah, 0x12 + jmp p + @@: + cmp ah, 0x57 ; key W + jnz @f + _13: + mov ah, 0x13 + jmp p + @@: + cmp ah, 0x23 ; key # + jnz @f + _14: + mov ah, 0x14 + jmp p + @@: + cmp ah, 0x45 ; key E + jnz @f + _15: + mov ah, 0x15 + jmp p + @@: + cmp ah, 0x52 ; key R + jnz @f + _16: + mov ah, 0x16 + jmp p + @@: + cmp ah, 0x25 ; key % + jnz @f + jmp _17 + @@: + cmp ah, 0x54 ; key T + jnz @f + jmp _18 + @@: + cmp ah, 0x5e ; key ^ + jnz @f + jmp _19 + @@: + cmp ah, 0x59 ; key Y + jnz @f + jmp _1a + @@: + cmp ah, 0x26 ; key & + jnz @f + jmp _1b + @@: + cmp ah, 0x55 ; key U + jnz @f + jmp _1c + @@: + cmp ah, 0x49 ; key I + jnz @f + jmp _21 + @@: + cmp ah, 0x28 ; key ( + jnz @f + jmp _22 + @@: + cmp ah, 0x4f ; key O + jnz @f + jmp _23 + @@: + cmp ah, 0x29 ; key ) + jnz @f + jmp _24 + @@: + cmp ah, 0x50 ; key P + jnz @f + jmp _25 + @@: + cmp ah, 0x7b ; key { + jnz @f + jmp _26 + @@: + cmp ah, 0x2b ; key + + jnz @f + jmp _27 + @@: + cmp ah, 0x7d ; key } + jnz @f + jmp _28 + @@: + cmp ah, 0x7c ; key | + jnz @f + jmp _29 + @@: + cmp ah, 0x61 ; a - if Caps Lock OFF + jnz @f + _17: + mov ah, 0x17 + jmp p + @@: + cmp ah, 0x7a ; z + jnz @f + _18: + mov ah, 0x18 + jmp p + @@: + cmp ah, 0x73 ; s + jnz @f + _19: + mov ah, 0x19 + jmp p + @@: + cmp ah, 0x78 ; x + jnz @f + _1a: + mov ah, 0x1a + jmp p + @@: + cmp ah, 0x64 ; d + jnz @f + _1b: + mov ah, 0x1b + jmp p + @@: + cmp ah, 0x63 ; c + jnz @f + _1c: + mov ah, 0x1c + jmp p + @@: + cmp ah, 0x76 ; v + jnz @f + _21: + mov ah, 0x21 + jmp p + @@: + cmp ah, 0x67 ; g + jnz @f + _22: + mov ah, 0x22 + jmp p + @@: + cmp ah, 0x62 ; b + jnz @f + _23: + mov ah, 0x23 + jmp p + @@: + cmp ah, 0x68 ; h + jnz @f + _24: + mov ah, 0x24 + jmp p + @@: + cmp ah, 0x6e ; n + jnz @f + _25: + mov ah, 0x25 + jmp p + @@: + cmp ah, 0x6d ; m + jnz @f + _26: + mov ah, 0x26 + jmp p + @@: + cmp ah, 0x6b ; k + jnz @f + _27: + mov ah, 0x27 + jmp p + @@: + cmp ah, 0x2c ; , + jnz @f + _28: + mov ah, 0x28 + jmp p + @@: + cmp ah, 0x6c ; l + jnz @f + _29: + mov ah, 0x29 + jmp p + @@: + cmp ah, 0x2e ; . + jnz @f + _2a: + mov ah, 0x2a + jmp p + @@: + cmp ah, 0x3b ; ; + jnz @f + _2b: + mov ah, 0x2b + jmp p + @@: + cmp ah, 0x2f ; / + jnz @f + _2c: + mov ah, 0x2c + jmp p + @@: + cmp ah, 0x27 ; ' + jnz @f + _31: + mov ah, 0x31 + jmp p + @@: + cmp ah, 0x60 ; key ` + jnz @f + jmp _2c + @@: + cmp ah, 0x09 ; key tab + jnz @f + jmp _31 + @@: + cmp ah, 0x31 ; key 1 + jnz @f + _32: + mov ah, 0x32 + jmp p + @@: + cmp ah, 0x71 ; key q + jnz @f + _33: + mov ah, 0x33 + jmp p + @@: + cmp ah, 0x32 ; key 2 + jnz @f + _34: + mov ah, 0x34 + jmp p + @@: + cmp ah, 0x77 ; key w + jnz @f + _35: + mov ah, 0x35 + jmp p + @@: + cmp ah, 0x65 ; key e + jnz @f + _36: + mov ah, 0x36 + jmp p + @@: + cmp ah, 0x34 ; key 4 + jnz @f + _37: + mov ah, 0x37 + jmp p + @@: + cmp ah, 0x72 ; key r + jnz @f + _38: + mov ah, 0x38 + jmp p + @@: + cmp ah, 0x35 ; key 5 + jnz @f + _39: + mov ah, 0x39 + jmp p + @@: + cmp ah, 0x74 ; key t + jnz @f + _3a: + mov ah, 0x3a + jmp p + @@: + cmp ah, 0x36 ; key 6 + jnz @f + _3b: + mov ah, 0x3b + jmp p + @@: + cmp ah, 0x79 ; key y + jnz @f + _3c: + mov ah, 0x3c + jmp p + @@: + cmp ah, 0x75 ; key u + jnz @f + _41: + mov ah, 0x41 + jmp p + @@: + cmp ah, 0x38 ; key 8 + jnz @f + mov ah, 0x42 + jmp p + @@: + cmp ah, 0x69 ; key i + jnz @f + mov ah, 0x43 + jmp p + @@: + cmp ah, 0x39 ; key 9 + jnz @f + mov ah, 0x44 + jmp p + @@: + cmp ah, 0x6f ; key o + jnz @f + mov ah, 0x45 + jmp p + @@: + cmp ah, 0x70 ; key p + jnz @f + mov ah, 0x46 + jmp p + @@: + cmp ah, 0x2d ; key - + jnz @f + mov ah, 0x47 + jmp p + @@: + cmp ah, 0x5b ; key [ + jnz @f + mov ah, 0x48 + jmp p + @@: + cmp ah, 0x3d ; key = + jnz @f + mov ah, 0x49 + jmp p + @@: + cmp ah, 0x5d ; key ] + jnz @f + mov ah, 0x4a + jmp p + @@: + cmp ah, 0x5c ; key \ + jnz @f + mov ah, 0x4b + jmp p + @@: + cmp ah, 0x08 ; key backspace + jnz @f + mov ah, 0x4c + jmp p + @@: + cmp ah, 0x0d ; key enter + jnz @f + mov ah, 0x51 + jmp p + @@: + cmp ah, 0x66 ; key f + jnz @f + mov ah, 0x01 + jmp p + @@: + cmp ah, 0x6a ; key j + jnz @f + mov ah, 0x05 + jmp p + @@: + cmp ah, 0x33 ; key 3 + jnz @f + mov ah, 0x08 + jmp p + @@: + cmp ah, 0x37 ; key 7 + jnz @f + jmp _11 + @@: + cmp ah, 0x30 ; key 0 + jnz @f + jmp _15 + @@: + cmp ah, 0xb4 ; key home + jnz @f + mov ah, 0x10 + jmp p + @@: + cmp ah, 0xb5 ; key end + jnz @f + _70: + mov ah, 0xfc + jmp p + @@: + cmp ah, 0xb8 ; key Page Up + jnz @f + mov ah, 0x20 + jmp p + @@: + cmp ah, 0xb7 ; key Page Down + jnz @f + jmp _70 + @@: + cmp ah, 0xff ; key F12 + jnz @f + mov ah, 0x00 + jmp p + @@: + cmp ah, 0xb6 ; key Del + jnz @f + jmp _70 + @@: + + p: + mov [M+1], ah ; записать код символа как код ноты + + ; функция 55-55: системный динамик ("PlayNote") + ; esi - адрес мелодии + + mov eax,55 + mov ebx,eax + mov esi,M + int 0x40 + + ; или коротко: + ;mcall 55, , , , Music + + jmp still ; вернуться к началу цикла + + +;--------------------------------------------------------------------- + + button: + mcall 17 ; 17 - получить идентификатор нажатой кнопки + + cmp ah, 0xa1 ; button 1 + jnz @f + jmp _01 + @@: + cmp ah, 0x02 ; button 2 + jnz @f + jmp _02 + @@: + cmp ah, 0x03 ; button 3 + jnz @f + jmp _03 + @@: + cmp ah, 0x04 + jnz @f + jmp _04 + @@: + cmp ah, 0x05 + jnz @f + jmp _05 + @@: + cmp ah, 0x06 + jnz @f + jmp _06 + @@: + cmp ah, 0x07 + jnz @f + jmp _07 + @@: + cmp ah, 0x08 ; button 8 + jnz @f + jmp _08 + @@: + cmp ah, 0x09 + jnz @f + jmp _09 + @@: + cmp ah, 0x0a ; button 10 + jnz @f + jmp _0a + @@: + cmp ah, 0x0b + jnz @f + jmp _0b + @@: + cmp ah, 0x0c ; button 12 + jnz @f + jmp _0c + @@: + + cmp ah, 0x11 + jnz @f + jmp _11 + @@: + cmp ah, 0x12 + jnz @f + jmp _12 + @@: + cmp ah, 0x13 + jnz @f + jmp _13 + @@: + cmp ah, 0x14 + jnz @f + jmp _14 + @@: + cmp ah, 0x15 + jnz @f + jmp _15 + @@: + cmp ah, 0x16 + jnz @f + jmp _16 + @@: + cmp ah, 0x17 + jnz @f + jmp _17 + @@: + cmp ah, 0x18 + jnz @f + jmp _18 + @@: + cmp ah, 0x19 + jnz @f + jmp _19 + @@: + cmp ah, 0x1a + jnz @f + jmp _1a + @@: + cmp ah, 0x1b + jnz @f + jmp _1b + @@: + cmp ah, 0x1c + jnz @f + jmp _1c + @@: + + cmp ah, 0x21 ; button 1 + jnz @f + jmp _21 + @@: + cmp ah, 0x22 + jnz @f + jmp _22 + @@: + cmp ah, 0x23 ; button 3 + jnz @f + jmp _23 + @@: + cmp ah, 0x24 + jnz @f + jmp _24 + @@: + cmp ah, 0x25 ; button 5 + jnz @f + jmp _25 + @@: + cmp ah, 0x26 + jnz @f + jmp _26 + @@: + cmp ah, 0x27 ; button 7 + jnz @f + jmp _27 + @@: + cmp ah, 0x28 + jnz @f + jmp _28 + @@: + cmp ah, 0x29 ; button 9 + jnz @f + jmp _29 + @@: + cmp ah, 0x2a + jnz @f + jmp _2a + @@: + cmp ah, 0x2b ; button 11 + jnz @f + jmp _2b + @@: + cmp ah, 0x2c + jnz @f + jmp _2c + @@: + cmp ah, 0x31 + jnz @f + jmp _31 + + @@: + cmp ah, 0x32 + jnz @f + jmp _32 + @@: + cmp ah, 0x33 + jnz @f + jmp _33 + @@: + cmp ah, 0x34 + jnz @f + jmp _34 + @@: + cmp ah, 0x35 + jnz @f + jmp _35 + @@: + cmp ah, 0x36 + jnz @f + jmp _36 + @@: + cmp ah, 0x37 + jnz @f + jmp _37 + @@: + cmp ah, 0x38 + jnz @f + jmp _38 + @@: + cmp ah, 0x39 + jnz @f + jmp _39 + @@: + cmp ah, 0x3a + jnz @f + jmp _3a + @@: + cmp ah, 0x3b + jnz @f + jmp _3b + @@: + cmp ah, 0x3c + jnz @f + jmp _3c + @@: + cmp ah, 0x41 + jnz @f + jmp _41 + @@: + + cmp ah, 1 ; если НЕ нажата кнопка с номером 1, + jne still ; вернуться + + .exit: + mcall -1 ; иначе конец программы + + +;--------------------------------------------------------------------- +;--- ОПРЕДЕЛЕНИЕ И ОТРИСОВКА ОКНА ---------------------------------- +;--------------------------------------------------------------------- + +draw_window: + + mcall 12, 1 ; функция 12: сообщить ОС о начале отрисовки + + mcall 48, 3, sc,sizeof.system_colors + + ; далее: сначала длинный вариант (закомментированный) + ; затем короткий аналог с использованием макросов + +; mov eax,0 ; функция 0: определить окно +; mov ebx,200*65536+300 ; [x старт] *65536 + [x размер] +; mov ecx,200*65536+150 ; [y старт] *65536 + [y размер] +; mov edx, [sc.work] ; цвет фона +; or edx, 0x33000000 ; и тип окна 3 +; mov edi,header ; ЗАГОЛОВОК ОКНА +; int 0x40 + + mov edx, [sc.work] ; цвет фона + or edx, 0x33000000 ; и тип окна 3 + mcall 0, <0,760>, <200,250>, , ,title + + mcall 8, <0,50>, <0,100>, 0x21, 0xff7a74 + mcall 8, <50,50>, <0,100>, 0x23, 0x907040 + mcall 8, <100,50>, <0,100>, 0x25, 0xa08050 + mcall 8, <150,50>, <0,100>, 0x26, 0xb09060 + mcall 8, <200,50>, <00,100>, 0x28, 0xc0a070 + mcall 8, <250,50>, <00,100>, 0x2a, 0xd0b080 + mcall 8, <300,50>, <0,100>, 0x2c, 0xe0c090 + mcall 8, <350,50>, <0,100>, 0x31, 0xffa97c + mcall 8, <400,50>, <0,100>, 0x33, 0xaf8d8d + mcall 8, <450,50>, <0,100>, 0x35, 0xbf9d9d + mcall 8, <500,50>, <0,100>, 0x36, 0xcfadad + mcall 8, <550,50>, <00,100>, 0x38, 0xdfbdbd + mcall 8, <600,50>, <00,100>, 0x3a, 0xefcdcd + mcall 8, <650,50>, <0,100>, 0x3c, 0xffdddd + mcall 8, <700,50>, <0,100>, 0x41, 0xffe558 + + mcall 8, <35,30>, <0,50>, 0x22, 0x221100 + mcall 8, <85,30>, <0,50>, 0x24, 0x221100 + mcall 8, <185,30>, <0,50>, 0x27, 0x221100 + mcall 8, <235,30>, <0,50>, 0x29, 0x221100 + mcall 8, <285,30>, <0,50>, 0x2b, 0x221100 + mcall 8, <385,30>, <0,50>, 0x32, 0x221100 + mcall 8, <435,30>, <0,50>, 0x34, 0x221100 + mcall 8, <535,30>, <0,50>, 0x37, 0x221100 + mcall 8, <585,30>, <0,50>, 0x39, 0x221100 + mcall 8, <635,30>, <0,50>, 0x3b, 0x221100 + + mcall 8, <0,50>, <100,100>, 0xa1, 0x702050 + mcall 8, <50,50>, <100,100>, 0x03, 0x683638 + mcall 8, <100,50>, <100,100>, 0x05, 0x784648 + mcall 8, <150,50>, <100,100>, 0x06, 0x885658 + mcall 8, <200,50>, <100,100>, 0x08, 0x986668 + mcall 8, <250,50>, <100,100>, 0x0a, 0xa87678 + mcall 8, <300,50>, <100,100>, 0x0c, 0xb88688 + mcall 8, <350,50>, <100,100>, 0x11, 0x880040 + mcall 8, <400,50>, <100,100>, 0x13, 0x90622b + mcall 8, <450,50>, <100,100>, 0x15, 0xa0723b + mcall 8, <500,50>, <100,100>, 0x16, 0xb0824b + mcall 8, <550,50>, <100,100>, 0x18, 0xc0925b + mcall 8, <600,50>, <100,100>, 0x1a, 0xd0a26b + mcall 8, <650,50>, <100,100>, 0x1c, 0xe0b27b + mcall 8, <700,50>, <100,100>, 0x21, 0xff7a74 + + mcall 8, <35,30>, <100,50>, 0x02, 0x221100 + mcall 8, <85,30>, <100,50>, 0x04, 0x221100 + mcall 8, <185,30>, <100,50>, 0x07, 0x221100 + mcall 8, <235,30>, <100,50>, 0x09, 0x221100 + mcall 8, <285,30>, <100,50>, 0x0b, 0x221100 + mcall 8, <385,30>, <100,50>, 0x12, 0x221100 + mcall 8, <435,30>, <100,50>, 0x14, 0x221100 + mcall 8, <535,30>, <100,50>, 0x17, 0x221100 + mcall 8, <585,30>, <100,50>, 0x19, 0x221100 + mcall 8, <635,30>, <100,50>, 0x1b, 0x221100 + + + ; вывод текстовой строки + mov ecx, [sc.work_text] ; цвет фона + or ecx, 0x90000000 ; и тип строки + mcall 4, <50, 205>, , message + mcall 4, <10, 235>, , message1 + mcall 4, <10, 260>, , message2 + mcall 4, <10, 285>, , message3 + mcall 4, <10, 310>, , message4 + mcall 4, <15, 185>, , message5 + mcall 4, <65, 185>, , message6 + mcall 4, <115, 185>, , message7 + mcall 4, <165, 185>, , message8 + mcall 4, <210, 185>, , message9 + mcall 4, <265, 185>, , message10 + mcall 4, <315, 185>, , message11 + mcall 4, <365, 185>, , message5 + + mcall 12, 2 ; функция 12.2, закончили рисовать + + ret ; выходим из процедуры + + +;--------------------------------------------------------------------- +;--- ДАННЫЕ ПРОГРАММЫ ---------------------------------------------- +;--------------------------------------------------------------------- + + +; Второй байт в M (Music) изменяется нажатием клавиши + +M: + db 0x90, 0x30, 0 + + +sc system_colors + +message db 'Справка: щёлкните 2 раза на заголовке.',0 +message1 db 'Нажмите любую клавишу в английской раскладке - ',0 +message2 db 'должен звучать динамик компьютера.',0 +message3 db 'Нота "До" - клавиши V,Tab,U,Enter, при включении',0 +message4 db 'Caps Lock - клавиши V,Q,I.',0 +message5 db 'ДО',0 +message6 db 'РЕ',0 +message7 db 'МИ',0 +message8 db 'ФА',0 +message9 db 'СОЛЬ',0 +message10 db 'ЛЯ',0 +message11 db 'СИ',0 +title db 'Детское пианино',0 + +;--------------------------------------------------------------------- + +I_END: ; метка конца программы + rb 4096 ; память для стека +align 16 +STACKTOP: ; метка вершины стека (при заполнении стек + ; растет в сторону уменьшения адресов, потому + ; память для него в коде программы встречается + ; раньше чем его вершина) +MEM: ; метка указывающая на конец программы плюс + ; размер используемой ею оперативной памяти +; Адрес метки MEM всегда должен быть больше чем адрес метки I_END. +; Метка STACKTOP должна располагается после метки I_END и перед меткой +; MEM. STACKTOP может находится и перед I_END, но это не правильно. +; Имена меток могут быть с любыми названиями, главное соблюдать +; правильный порядок их расположения. \ No newline at end of file