timyr9801 | Дата: Пятница, 30 Августа 2013, 23:10 | Сообщение # 1 |
почетный гость
Сейчас нет на сайте
| Всем привет. Как работать с исходником Kolibri OS?.
|
|
| |
Akyltist | Дата: Четверг, 21 Ноября 2013, 10:03 | Сообщение # 2 |
заслуженный участник
Сейчас нет на сайте
| timyr9801, странно видеть такой вопрос на джисе) прежде всего необходимо иметь в закладках http://wiki.kolibrios.org/wiki/Ru/api/kernel использование различных компиляторов: http://diamond.kolibrios.org/hll/hll.htm по всем вопросам, собственно и с этим вопросом лучше на форум данной ОС) там подскажут по любому вопросу!
Ну на этот вопрос отвечу и тут: берем FASM (родной компилятор), можно из под Win, или Linux (значения не имеет) берем example.asm
Компиляция через командную строку: fasm.exe example.asm (ну или проще создать bat или sh файл)
Разберемся с самим исходным кодом: Код use32 org 0x0
; HEADER ====================================================================== db 'MENUET01' dd 0x01 dd START dd I_END dd 0x7000 dd 0x7000 dd 0x0 dd 0x0
START: ; EVENT ======================================================================= red: call draw_window still: mov eax,10 ; функция 10 - ждать события int 0x40 ; прерывание (вызов функции)
cmp eax,1 ; перерисовать окно ? je red ; если да - на метку red cmp eax,2 ; нажата клавиша ? je key ; если да - на key cmp eax,3 ; нажата кнопка ? je button ; если да - на button jmp still ; если другое событие - в начало цикла ;end_still
key: ; нажата клавиша на клавиатуре mcall 2 ; функция 2 - считать код символа (в ah) jmp still ; вернуться к началу цикла ;end_key
button: mcall 17 ; 17 - получить идентификатор нажатой кнопки cmp ah, 1 ; если нажата кнопка с номером 1, jz bexit ; выходим jmp still bexit: mcall -1 ; иначе конец программы ;end_button
; DRAW ======================================================================== draw_window: mov eax,12 ; функция 12: означает, что будет рисоваться окно mov ebx,1 ; 1,начало рисования int 0x40 ; Прерывание
mov eax,48 ; Функция 48 - стили отображения окон mov ebx,3 ; Подфункция 3 - получить стандартные цвета окон. mov ecx,sc ; Указатель на буфер размером edx байт, под структуру mov edx,sizeof.system_colors ; Размер таблицы цветов (должен быть 40 байт) int 0x40 ; Прерывание
mov eax,48 ; Функция 48 - стили отображения окон. mov ebx,4 ; Подфункция 4 - возвращает eax = высота скина. int 0x40 ; Прерывание mov ecx,eax ; Запоминаем высоту скина
xor eax,eax ; Очищаем eax (mov eax,0) (Функция 0) mov ebx,200 shl 16+160 ; [координата по оси x]*65536 + [размер по оси x] add ecx,200 shl 16+60 ; Высота скина + [координата по y]*65536 + [размер по y] mov edx,[sc.work] ; Видимо стиль окна по дефолту or edx,0x34000000 ; Или окно со скином фиксированных размеров mov edi,title ; Заголовок окна int 0x40 ; Прерывание
mov eax,12 ; функция 12: означает, что будет рисоваться окно mov ebx,2 ; 1,начало рисования int 0x40 ; Прерывание
ret
; DATA ======================================================================== sc system_colors title db 'DEMO REC',0
I_END: http://akyltist.ucoz.org/kolibri/example.zip
Если что не понятно спрашивай, сорцы прокомментировал в принципе. Список событий для 10-той функции можно посмотреть тут: EVENTS
PS: нам нужны разработчики, так что было бы желание.
|
|
| |