Files
kolibrios/programs/develop/examples/example/trunk/example.asm
T
heavyiron 4daae89053 *kernel - fixes in 15.2 by Mario79 and 67 by mike.dld
updated sysfunc.txt
*programs 
         new icons and logo for CPUID and ICON
         added new version of @ICON and ICONMNGR
         fixes in iconedit and calendar from DedOK
         new algoritm of fill background in pic4
         all apps (fasm-writen only) rewriten to use common macros.inc for easy recompile in fastcall mode (there is a bug in https; run need rewrite to use common macros.inc)
         small fixes in build_all.bat script
         

git-svn-id: svn://kolibrios.org@485 a494cfbc-eb01-0410-851d-a64ba20cac60
2007-05-10 13:48:35 +00:00

159 lines
4.8 KiB
FASM
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
;
; Пример программы для MenuetOS
; озвучивает код нажатой клавиши ;)
;
; Компилировать FASM'ом
;
; См. также:
; template.asm - пример простейшей программы (новый!)
; rb.asm - контекстное меню рабочего стола
; example2.asm - пример меню и дополнительных окон
; example3.asm - пример меню, реализованного по-другому
;---------------------------------------------------------------------
use32 ; включить 32-битный режим ассемблера
org 0x0 ; адресация с нуля
db 'MENUET01' ; 8-байтный идентификатор MenuetOS
dd 0x01 ; версия заголовка (всегда 1)
dd START ; адрес первой команды
dd I_END ; размер программы
dd 0x1000 ; количество памяти
dd 0x1000 ; адрес вершины стэка
dd 0x0 ; адрес буфера для параметров (не используется)
dd 0x0 ; зарезервировано
include 'lang.inc'
include '..\..\..\..\macros.inc' ; макросы облегчают жизнь ассемблерщиков!
;---------------------------------------------------------------------
;--- НАЧАЛО ПРОГРАММЫ ----------------------------------------------
;---------------------------------------------------------------------
START:
red: ; перерисовать окно
call draw_window ; вызываем процедуру отрисовки окна
;---------------------------------------------------------------------
;--- ЦИКЛ ОБРАБОТКИ СОБЫТИЙ ----------------------------------------
;---------------------------------------------------------------------
still:
mcall 10 ; функция 10 - ждать события
cmp eax,1 ; перерисовать окно ?
je red ; если да - на метку red
cmp eax,2 ; нажата клавиша ?
je key ; если да - на key
cmp eax,3 ; нажата кнопка ?
je button ; если да - на button
jmp still ; если другое событие - в начало цикла
;---------------------------------------------------------------------
key: ; нажата клавиша на клавиатуре
mcall 2 ; функция 2 - считать код символа (в ah)
mov [Music+1], ah ; записать код символа как код ноты
; функция 55-55: системный динамик ("PlayNote")
; esi - адрес мелодии
; mov eax,55
; mov ebx,eax
; mov esi,Music
; int 0x40
; или коротко:
mcall 55, eax, , , Music
jmp still ; вернуться к началу цикла
;---------------------------------------------------------------------
button:
mcall 17 ; 17 - получить идентификатор нажатой кнопки
cmp ah, 1 ; если НЕ нажата кнопка с номером 1,
jne still ; вернуться
.exit:
mcall -1 ; иначе конец программы
;---------------------------------------------------------------------
;--- ОПРЕДЕЛЕНИЕ И ОТРИСОВКА ОКНА ----------------------------------
;---------------------------------------------------------------------
draw_window:
mcall 12, 1 ; функция 12: сообщить ОС об отрисовке окна
; 1 - начинаем рисовать
; далее: сначала длинный вариант (закомментированный)
; затем короткий аналог с использованием макросов
; СОЗДАЁМ ОКНО
; mov eax,0 ; функция 0 : определить и отрисовать окно
; mov ebx,200*65536+200 ; [x старт] *65536 + [x размер]
; mov ecx,200*65536+50 ; [y старт] *65536 + [y размер]
; mov edx,0x33aabbcc ; цвет рабочей области RRGGBB,8->color gl
; mov edi,header ; ЗАГОЛОВОК ОКНА
; int 0x40
mcall 0, <200,200>, <200,50>, 0x33AABBCC,,title
; mov eax,4
; mov ebx,3 shl 16 + 8
; mov ecx,0
; mov edx,message
; mov esi,message.size
; int 0x40
mcall 4, <3, 8>, 0, message, message.size
mcall 12, 2 ; функция 12: сообщить ОС об отрисовке окна
; 2, закончили рисовать
ret ; выходим из процедуры
;---------------------------------------------------------------------
;--- ДАННЫЕ ПРОГРАММЫ ----------------------------------------------
;---------------------------------------------------------------------
; Вот такая вот короткая "мелодия".
; Второй байт изменяется нажатием клавишы
Music:
db 0x90, 0x30, 0
;---------------------------------------------------------------------
; интерфейс программы многоязычный
; Вы можете задать язык в MACROS.INC (lang fix язык)
lsz message,\
ru,'Нажмите любую клавишу...',\
en,'Press any key...',\
fr,'Pressez une touche...'
lsz title,\
ru,'ПРИМЕР ПРОГРАММЫ',\
en,'EXAMPLE APPLICATION',\
fr,"L'exemplaire programme"
;---------------------------------------------------------------------
I_END: ; метка конца программы