Board.KolibriOS.org

Официальный форум KolibriOS
Текущее время: Сб авг 19, 2017 9:25 pm

Часовой пояс: UTC+03:00




Начать новую тему  Ответить на тему  [ 2 сообщения ] 
Автор Сообщение
 Заголовок сообщения: Tasm32 пример
СообщениеДобавлено: Пт июл 07, 2017 9:26 pm 
Не в сети

Зарегистрирован: Вс окт 30, 2011 6:43 pm
Сообщения: 934
Пример на Turbo Assembler.

Необходимые инструменты:
Код:
tasm32   — Turbo Assembler
link     — линкер от Microsoft
ld       — GNU линкер
objcopy  — утилита для преобразования объектных файлов

Исходный код(аналогичный коду для JWasm/HJWasm/UASM viewtopic.php?p=55776#p55776):
Спойлер: Показать
Код:
COMMENT * ----------------------------------+
|                                           |
|  Example for KolibriOS on Turbo Assembler |
|                                           |
+------------------------------------------ *

P586
MODEL Flat, StdCall
OPTION CaseMap: none

PUBLIC @Main

; Event Constants
REDRAW_EVENT        = 1
KEY_EVENT           = 2
BUTTON_EVENT        = 3
MOUSE_EVENT         = 6

; Window Style Constants
WS_SKINNED_FIXED    = 4000000H
WS_SKINNED_SIZABLE  = 3000000H
WS_FIXED            = 0000000H
WS_SIZABLE          = 2000000H
WS_FILL_TRANSPARENT = 40000000H
WS_FILL_GRADIENT    = 80000000H
WS_COORD_CLIENT     = 20000000H
WS_CAPTION          = 10000000H

; Caption Style Constants
CS_MOVABLE          = 00000000H
CS_IMMOVABLE        = 01000000H

; Event Mask Constants
EM_REDRAW           = 01H
EM_KEY              = 02H
EM_BUTTON           = 04H
EM_MOUSE            = 020H

.DATA

szHello:
        db     "Hello from Turbo Assembler!",0


.CODE

@Main:
        call   SetEventMask, EM_REDRAW + EM_BUTTON
        .REPEAT
          call DrawWindow, 200, 150, 300, 250, WS_SKINNED_FIXED + WS_COORD_CLIENT + WS_CAPTION + WS_FILL_GRADIENT, 07777FFH, OFFSET szHello, CS_MOVABLE
          call WaitEvent
        .UNTIL eax != REDRAW_EVENT
        call   ThreadTerminate

; *********************************************************************************** ;
WaitEvent PROC
        mov    eax, 10
        int    64
        ret
ENDP
; *********************************************************************************** ;
SetEventMask PROC EventMask:Dword
USES ebx
        mov    eax, 40
        mov    ebx, EventMask
        int    64
        ret
ENDP
; *********************************************************************************** ;
DrawWindow PROC L:Dword, T:Dword, W:Dword, H:Dword, Style:Dword, BackColor:Dword, Caption:Ptr, CapStyle:Dword
USES ebx, esi, edi
; BeginDraw
        mov    eax, 12
        mov    ebx, 1
        int    64
; DrawWindow
        xor    eax, eax
        mov    ebx, L
        shl    ebx, 16
        add    ebx, W
        mov    ecx, T
        shl    ecx, 16
        add    ecx, H
        mov    edx, Style
        or     edx, BackColor
        mov    edi, Caption
        mov    esi, CapStyle
        int    64
; EndDraw
        mov    eax, 12
        mov    ebx, 2
        int    64
        ret
ENDP
; *********************************************************************************** ;
ThreadTerminate PROC
        mov    eax, -1
        int    64
ENDP
; *********************************************************************************** ;

END

Линкер-скрипт для ld(аналогичный тому, что используется для Delphi viewtopic.php?f=33&t=3469):
Спойлер: Показать
Код:
PATH_SIZE   = 1024;
PARAMS_SIZE =  256;
STACK_SIZE  = 1024;

SECTIONS
{
  .all : {
    LONG(0x554e454D);
    LONG(0x31305445);
    LONG(1);
    LONG("@Main");
    LONG(END);
    LONG($END + PATH_SIZE + PARAMS_SIZE + STACK_SIZE);
    LONG($END + PATH_SIZE + PARAMS_SIZE + STACK_SIZE);
    LONG($END + PATH_SIZE);
    LONG($END);
    . = ALIGN(16);
    *(.text)
    . = ALIGN(16);
    *(.data)
END = .;
    . = ALIGN(16);
    *(.bss)
    . = ALIGN(16);
$END = .;
  }
}

make.bat:
Спойлер: Показать
Код:
Set NAME=test

tasm32 %NAME%.asm
link -edit %NAME%.obj
LD -T LScript.x %NAME%.obj -o %NAME%.kex
objcopy -O binary -j .all %NAME%.kex

Del %NAME%.obj

Pause

Скриншот окна полученного приложения:
Спойлер: Показать
Вложение:
hello from tasm32.PNG
hello from tasm32.PNG [ 4.02 КБ | 130 просмотров ]
Вложение:
TASM32(KOS Example).7z [1.23 КБ]
6 скачиваний


Вернуться к началу
 Заголовок сообщения: TASM+KolibriOS.lib
СообщениеДобавлено: Вс авг 13, 2017 9:28 pm 
Не в сети

Зарегистрирован: Вс окт 30, 2011 6:43 pm
Сообщения: 934
Пример использования TASM и KolibriOS.lib.
Просто окно и обработка событий.
Этот пример похож на предыдущий, но с использованием KolibriOS.lib.
Скриншот
Спойлер: Показать
Вложение:
1.png
1.png [ 3.57 КБ | 53 просмотра ]

Для сборки нужны те же самые инструменты(tasm32, link, ld, objcopy) и сама KolibriOS.lib, которую можно взять из темы Delphi7 examples viewtopic.php?f=33&t=3469
Вложение:
TASM+KolibriOS.lib.7z [1.1 КБ]
0 скачиваний


Вернуться к началу
Показать сообщения за:  Поле сортировки  
Начать новую тему  Ответить на тему  [ 2 сообщения ] 

Часовой пояс: UTC+03:00


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Limited
Русская поддержка phpBB