Board.KolibriOS.org

Official KolibriOS board
It is currently Tue May 21, 2019 5:51 am

All times are UTC+03:00




Post new topic  Reply to topic  [ 2 posts ] 
Author Message
 Post subject: Tasm32 пример
PostPosted: Fri Jul 07, 2017 9:26 pm 
Offline

Joined: Sun Oct 30, 2011 6:43 pm
Posts: 1499
Пример на Turbo Assembler.

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

Исходный код(аналогичный коду для JWasm/HJWasm/UASM viewtopic.php?p=55776#p55776):
Spoiler: Show
Code:
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):
Spoiler: Show
Code:
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:
Spoiler: Show
Code:
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

Скриншот окна полученного приложения:
Spoiler: Show
Attachment:
hello from tasm32.PNG
hello from tasm32.PNG [ 4.02 KiB | Viewed 1131 times ]
Attachment:
TASM32(KOS Example).7z [1.23 KiB]
Downloaded 81 times


Top
   
 Post subject: TASM+KolibriOS.lib
PostPosted: Sun Aug 13, 2017 9:28 pm 
Offline

Joined: Sun Oct 30, 2011 6:43 pm
Posts: 1499
Пример использования TASM и KolibriOS.lib.
Просто окно и обработка событий.
Этот пример похож на предыдущий, но с использованием KolibriOS.lib.
Скриншот
Spoiler: Show
Attachment:
1.png
1.png [ 3.57 KiB | Viewed 1054 times ]

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


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 2 posts ] 

All times are UTC+03:00


Who is online

Users browsing this forum: No registered users and 1 guest


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Limited