Code: Select all
:dword IO::readKPACK(dword path1)
{
EAX = 68;
EBX = 27;
ECX = path1;
$int 0x40;
FILES_SIZE = EDX;
buffer_data = EAX;
return buffer_data;
}Code: Select all
:dword IO::readKPACK(dword path1)
{
EAX = 68;
EBX = 27;
ECX = path1;
$int 0x40;
FILES_SIZE = EDX;
buffer_data = EAX;
return buffer_data;
}Эм... Что имелось ввиду? Добавить ещё пятую и шестую октавы?Leency wrote:Ноты
Code: Select all
:byte panels_img_data[] = FROM "mouse_image.raw";
#define red 0xff0000
#define yellow 0xfff600
#define white 0xffffff
#define dgrey 0x2d353d
:struct IMG_PAL{ dword back, shad1, contour, left, right, middle, mwhite; }
pal = { 0xF0F2F3,0xABB0B2, dgrey, white, white, dgrey, white };
void DrawMouseImage(dword l,r,m,v) {
#define IMG_W 59
#define IMG_H 101
IF (l) pal.left = red;
IF (m) pal.middle = red;
IF (r) pal.right = red;
IF (v) pal.middle = yellow;
PutPaletteImage(#panels_img_data,IMG_W,IMG_H,18+30,18+15,8,#pal);
pal.left = pal.right = white;
pal.middle = dgrey;
IF (v) {
pause(10);
DrawMouseImage(l,r,m,0);
}
}Пропустил эту версию. Думаю, программа готова для добавления в дистрибутив. Уже залил на SVN: /programs/media/pianoAntonio wrote:Новая версия. PIANO4
Code: Select all
; Простой пример программы для KolibriOS
; озвучивает код нажатой клавиши
;
;---------------------------------------------------------------------
use32
org 0
db 'MENUET01'
dd 1
dd START
dd I_END
dd MEM
dd STACKTOP
dd 0
dd 0
include "lang.inc" ; Language support for locales: ru_RU (CP866), en_US.
include "../../macros.inc"
include "../../KOSfuncs.inc"
START:
red: ; перерисовать окно
call draw_window ; вызываем процедуру отрисовки окна
still:
mcall SF_WAIT_EVENT
cmp eax,2 ; нажата клавиша ?
je key ; если да - на key
cmp eax,3 ; нажата кнопка ?
je button ; если да - на button
cmp eax,1 ; перерисовать окно ?
je red ; если да - на метку red
jmp still ; если другое событие - в начало цикла
;---------------------------------------------------------------------
key: ; нажата клавиша на клавиатуре
mcall SF_GET_KEY ; считать код символа (в ah)
cmp ah, 'z' ; First
jnz @f
mov ah, 0x01
jmp p
@@:
cmp ah, 's'
jnz @f
mov ah, 0x02
jmp p
@@:
cmp ah, 'x'
jnz @f
mov ah, 0x03
jmp p
@@:
cmp ah, 'd'
jnz @f
mov ah, 0x04
jmp p
@@:
cmp ah, 'c'
jnz @f
mov ah, 0x05
jmp p
@@:
cmp ah, 'v'
jnz @f
mov ah, 0x06
jmp p
@@:
cmp ah, 'g'
jnz @f
mov ah, 0x07
jmp p
@@:
cmp ah, 'b'
jnz @f
mov ah, 0x08
jmp p
@@:
cmp ah, 'h'
jnz @f
mov ah, 0x09
jmp p
@@:
cmp ah, 'n'
jnz @f
mov ah, 0x0a
jmp p
@@:
cmp ah, 'j'
jnz @f
mov ah, 0x0b
jmp p
@@:
cmp ah, 'm'
jnz @f
mov ah, 0x0c
jmp p
@@:
cmp ah, 'Z' ; Second
jnz @f
mov ah, 0x11
jmp p
@@:
cmp ah, 'S'
jnz @f
mov ah, 0x12
jmp p
@@:
cmp ah, 'X'
jnz @f
mov ah, 0x13
jmp p
@@:
cmp ah, 'D'
jnz @f
mov ah, 0x14
jmp p
@@:
cmp ah, 'C'
jnz @f
mov ah, 0x15
jmp p
@@:
cmp ah, 'V'
jnz @f
mov ah, 0x16
jmp p
@@:
cmp ah, 'G'
jnz @f
mov ah, 0x17
jmp p
@@:
cmp ah, 'B'
jnz @f
mov ah, 0x18
jmp p
@@:
cmp ah, 'H'
jnz @f
mov ah, 0x19
jmp p
@@:
cmp ah, 'N'
jnz @f
mov ah, 0x1a
jmp p
@@:
cmp ah, 'J'
jnz @f
mov ah, 0x1b
jmp p
@@:
cmp ah, 'M'
jnz @f
mov ah, 0x1c
jmp p
@@:
cmp ah, '<'
jnz @f
mov ah, 0x21
jmp p
@@:
cmp ah, 'q' ; Third
jnz @f
mov ah, 0x21
jmp p
@@:
cmp ah, '2'
jnz @f
mov ah, 0x22
jmp p
@@:
cmp ah, 'w'
jnz @f
mov ah, 0x23
jmp p
@@:
cmp ah, '3'
jnz @f
mov ah, 0x24
jmp p
@@:
cmp ah, 'e'
jnz @f
mov ah, 0x25
jmp p
@@:
cmp ah, 'r'
jnz @f
mov ah, 0x26
jmp p
@@:
cmp ah, '5'
jnz @f
mov ah, 0x27
jmp p
@@:
cmp ah, 't'
jnz @f
mov ah, 0x28
jmp p
@@:
cmp ah, '6'
jnz @f
mov ah, 0x29
jmp p
@@:
cmp ah, 'y'
jnz @f
mov ah, 0x2a
jmp p
@@:
cmp ah, '7'
jnz @f
mov ah, 0x2b
jmp p
@@:
cmp ah, 'u'
jnz @f
mov ah, 0x2c
jmp p
@@:
cmp ah, 'Q' ; Fourth
jnz @f
mov ah, 0x31
jmp p
@@:
cmp ah, '@'
jnz @f
mov ah, 0x32
jmp p
@@:
cmp ah, 'W'
jnz @f
mov ah, 0x33
jmp p
@@:
cmp ah, '#'
jnz @f
mov ah, 0x34
jmp p
@@:
cmp ah, 'E'
jnz @f
mov ah, 0x35
jmp p
@@:
cmp ah, 'R'
jnz @f
mov ah, 0x36
jmp p
@@:
cmp ah, '%'
jnz @f
mov ah, 0x37
jmp p
@@:
cmp ah, 'T'
jnz @f
mov ah, 0x38
jmp p
@@:
cmp ah, '^'
jnz @f
mov ah, 0x39
jmp p
@@:
cmp ah, 'Y'
jnz @f
mov ah, 0x3a
jmp p
@@:
cmp ah, '&'
jnz @f
mov ah, 0x3b
jmp p
@@:
cmp ah, 'U'
jnz @f
mov ah, 0x3c
jmp p
@@:
cmp ah, 'I'
jnz @f
mov ah, 0x41
jmp p
@@:
jmp still
p:
mov [M+1], ah ; записать код символа как код ноты
; функция 55-55: системный динамик ("PlayNote")
; esi - адрес мелодии
mov eax,SF_SPEAKER_PLAY
mov ebx,eax
mov esi,M
int 0x40
; или коротко:
;mcall SF_SPEAKER_PLAY, , , , Music
jmp still ; вернуться к началу цикла
;---------------------------------------------------------------------
button:
mcall SF_GET_BUTTON
cmp ah, 0xa1 ; button 1
jnz @f
mov ah, 0x01
jmp p
@@:
cmp ah, 0x02 ; button 2
jnz @f
jmp p
@@:
cmp ah, 0x03 ; button 3
jnz @f
jmp p
@@:
cmp ah, 0x04
jnz @f
jmp p
@@:
cmp ah, 0x05
jnz @f
jmp p
@@:
cmp ah, 0x06
jnz @f
jmp p
@@:
cmp ah, 0x07
jnz @f
jmp p
@@:
cmp ah, 0x08 ; button 8
jnz @f
jmp p
@@:
cmp ah, 0x09
jnz @f
jmp p
@@:
cmp ah, 0x0a ; button 10
jnz @f
jmp p
@@:
cmp ah, 0x0b
jnz @f
jmp p
@@:
cmp ah, 0x0c ; button 12
jnz @f
jmp p
@@:
cmp ah, 0x11
jnz @f
jmp p
@@:
cmp ah, 0x12
jnz @f
jmp p
@@:
cmp ah, 0x13
jnz @f
jmp p
@@:
cmp ah, 0x14
jnz @f
jmp p
@@:
cmp ah, 0x15
jnz @f
jmp p
@@:
cmp ah, 0x16
jnz @f
jmp p
@@:
cmp ah, 0x17
jnz @f
jmp p
@@:
cmp ah, 0x18
jnz @f
jmp p
@@:
cmp ah, 0x19
jnz @f
jmp p
@@:
cmp ah, 0x1a
jnz @f
jmp p
@@:
cmp ah, 0x1b
jnz @f
jmp p
@@:
cmp ah, 0x1c
jnz @f
jmp p
@@:
cmp ah, 0x21 ; button 1
jnz @f
jmp p
@@:
cmp ah, 0x22
jnz @f
jmp p
@@:
cmp ah, 0x23 ; button 3
jnz @f
jmp p
@@:
cmp ah, 0x24
jnz @f
jmp p
@@:
cmp ah, 0x25 ; button 5
jnz @f
jmp p
@@:
cmp ah, 0x26
jnz @f
jmp p
@@:
cmp ah, 0x27 ; button 7
jnz @f
jmp p
@@:
cmp ah, 0x28
jnz @f
jmp p
@@:
cmp ah, 0x29 ; button 9
jnz @f
jmp p
@@:
cmp ah, 0x2a
jnz @f
jmp p
@@:
cmp ah, 0x2b ; button 11
jnz @f
jmp p
@@:
cmp ah, 0x2c
jnz @f
jmp p
@@:
cmp ah, 0x31
jnz @f
jmp p
@@:
cmp ah, 0x32
jnz @f
jmp p
@@:
cmp ah, 0x33
jnz @f
jmp p
@@:
cmp ah, 0x34
jnz @f
jmp p
@@:
cmp ah, 0x35
jnz @f
jmp p
@@:
cmp ah, 0x36
jnz @f
jmp p
@@:
cmp ah, 0x37
jnz @f
jmp p
@@:
cmp ah, 0x38
jnz @f
jmp p
@@:
cmp ah, 0x39
jnz @f
jmp p
@@:
cmp ah, 0x3a
jnz @f
jmp p
@@:
cmp ah, 0x3b
jnz @f
jmp p
@@:
cmp ah, 0x3c
jnz @f
jmp p
@@:
cmp ah, 0x41
jnz @f
jmp p
@@:
cmp ah, 1 ; если НЕ нажата кнопка с номером 1,
jne still ; вернуться
.exit:
mcall SF_TERMINATE_PROCESS ; иначе конец программы
;---------------------------------------------------------------------
;--- ОПРЕДЕЛЕНИЕ И ОТРИСОВКА ОКНА ----------------------------------
;---------------------------------------------------------------------
WHITE_W=48 ; While key width
BLACK_W=30 ; Black key width
BLACK_X=34 ; Black key X offset
draw_window:
mcall SF_REDRAW, SSF_BEGIN_DRAW ; сообщить ОС о начале отрисовки
mcall SF_STYLE_SETTINGS, SSF_GET_COLORS, sc,sizeof.system_colors
mov edx, [sc.work] ; цвет фона
or edx, 0x33000000 ; и тип окна 3
mcall SF_CREATE_WINDOW, <20,WHITE_W*15+9>, <200,250>, , ,caption
mcall SF_DEFINE_BUTTON, <WHITE_W*0,WHITE_W>, <0,100>, 0x21, 0xff7a74
mcall , <WHITE_W*1,WHITE_W>, <0,100>, 0x23, 0x907040
mcall , <WHITE_W*2,WHITE_W>, , 0x25, 0xa08050
mcall , <WHITE_W*3,WHITE_W>, , 0x26, 0xb09060
mcall , <WHITE_W*4,WHITE_W>, , 0x28, 0xc0a070
mcall , <WHITE_W*5,WHITE_W>, , 0x2a, 0xd0b080
mcall , <WHITE_W*6,WHITE_W>, , 0x2c, 0xe0c090
mcall , <WHITE_W*7,WHITE_W>, , 0x31, 0xffa97c
mcall , <WHITE_W*8,WHITE_W>, , 0x33, 0xaf8d8d
mcall , <WHITE_W*9,WHITE_W>, , 0x35, 0xbf9d9d
mcall , <WHITE_W*10,WHITE_W>, , 0x36, 0xcfadad
mcall , <WHITE_W*11,WHITE_W>, , 0x38, 0xdfbdbd
mcall , <WHITE_W*12,WHITE_W>, , 0x3a, 0xefcdcd
mcall , <WHITE_W*13,WHITE_W>, , 0x3c, 0xffdddd
mcall , <WHITE_W*14,WHITE_W>, , 0x41, 0xffe558
mcall , <WHITE_W*0+BLACK_X,BLACK_W>, <0,50>, 0x22, 0x221100
mcall , <WHITE_W*1+BLACK_X,BLACK_W>, , 0x24,
mcall , <WHITE_W*3+BLACK_X,BLACK_W>, , 0x27,
mcall , <WHITE_W*4+BLACK_X,BLACK_W>, , 0x29,
mcall , <WHITE_W*5+BLACK_X,BLACK_W>, , 0x2b,
mcall , <WHITE_W*7+BLACK_X,BLACK_W>, , 0x32,
mcall , <WHITE_W*8+BLACK_X,BLACK_W>, , 0x34,
mcall , <WHITE_W*10+BLACK_X,BLACK_W>, , 0x37,
mcall , <WHITE_W*11+BLACK_X,BLACK_W>, , 0x39,
mcall , <WHITE_W*12+BLACK_X,BLACK_W>, , 0x3b,
mcall , <WHITE_W*0,WHITE_W>, <100,100>, 0xa1, 0x702050
mcall , <WHITE_W*1,WHITE_W>, , 0x03, 0x683638
mcall , <WHITE_W*2,WHITE_W>, , 0x05, 0x784648
mcall , <WHITE_W*3,WHITE_W>, , 0x06, 0x885658
mcall , <WHITE_W*4,WHITE_W>, , 0x08, 0x986668
mcall , <WHITE_W*5,WHITE_W>, , 0x0a, 0xa87678
mcall , <WHITE_W*6,WHITE_W>, , 0x0c, 0xb88688
mcall , <WHITE_W*7,WHITE_W>, , 0x11, 0x880040
mcall , <WHITE_W*8,WHITE_W>, , 0x13, 0x90622b
mcall , <WHITE_W*9,WHITE_W>, , 0x15, 0xa0723b
mcall , <WHITE_W*10,WHITE_W>, , 0x16, 0xb0824b
mcall , <WHITE_W*11,WHITE_W>, , 0x18, 0xc0925b
mcall , <WHITE_W*12,WHITE_W>, , 0x1a, 0xd0a26b
mcall , <WHITE_W*13,WHITE_W>, , 0x1c, 0xe0b27b
mcall , <WHITE_W*14,WHITE_W>, , 0x21, 0xff7a74
mcall , <WHITE_W*0+BLACK_X,BLACK_W>, <100,50>, 0x02, 0x221100
mcall , <WHITE_W*1+BLACK_X,BLACK_W>, , 0x04,
mcall , <WHITE_W*3+BLACK_X,BLACK_W>, , 0x07,
mcall , <WHITE_W*4+BLACK_X,BLACK_W>, , 0x09,
mcall , <WHITE_W*5+BLACK_X,BLACK_W>, , 0x0b,
mcall , <WHITE_W*7+BLACK_X,BLACK_W>, , 0x12,
mcall , <WHITE_W*8+BLACK_X,BLACK_W>, , 0x14,
mcall , <WHITE_W*10+BLACK_X,BLACK_W>, , 0x17,
mcall , <WHITE_W*11+BLACK_X,BLACK_W>, , 0x19,
mcall , <WHITE_W*12+BLACK_X,BLACK_W>, , 0x1b,
; вывод текстовой строки
mov ecx, [sc.work_text] ; цвет фона
or ecx, 0x90000000 ; и тип строки
mcall SF_DRAW_TEXT, <50, 205>, , message
mcall , <10, 235>, , message1
mcall , <10, 260>, , message2
mcall , <10, 285>, , message3
mcall , <10, 310>, , message4
mcall , <16, 185>, , t_notes
mcall SF_REDRAW, SSF_END_DRAW ; закончили рисовать
ret
;---------------------------------------------------------------------
;--- ДАННЫЕ ПРОГРАММЫ ----------------------------------------------
;---------------------------------------------------------------------
; Второй байт в M (Music) изменяется нажатием клавиши
M:
db 0x90, 0x30, 0
sc system_colors
if lang eq ru_RU
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
t_notes db 'ДО РЕ МИ ФА СОЛЬ ЛЯ СИ ДО',0
caption db 'Детское пианино',0
else ; Default to en_US
message db 'Click twice on the window header to see help.',0
message1 db 'Press any key in English keyboard layout - ',0
message2 db 'so you will hear the sound from the PC-speaker (Beeper)',0
message3 db 'Note "C" is the key V,Tab,U,Enter',0
message4 db 'and when Caps Lock is on then the keys V,Q,I.',0
t_notes db 'C D E F G A B C ',0
caption db 'Toy piano',0
end if
;---------------------------------------------------------------------
I_END:
rb 4096
align 16
STACKTOP:
MEM:Users browsing this forum: No registered users and 12 guests