Как написать этот код для другой ОС?

Тема в разделе "WASM.ASSEMBLER", создана пользователем Zhelezka, 22 июн 2009.

  1. Zhelezka

    Zhelezka New Member

    Публикаций:
    0
    Регистрация:
    21 июл 2008
    Сообщения:
    103
    Как сделать этот-же код, но для другой ОС?
    Например для Linux, Mac OS...

    Код (Text):
    1. format PE GUI 4.0
    2. entry windows32_code
    3. use32
    4.  
    5. include '..\..\..\include\win32a.inc'
    6.  
    7. CBM_INIT = 0x0004
    8. DIB_RGB_COLORS = 0x0000
    9. SRCCOPY = 0xCC0020
    10.  
    11. ;----------------------------------------------------------------------------------------------------;
    12. section 's_data' data readable writeable
    13. wnd_class      db 'Game32',0
    14.   wnd_title      db 'Game',0
    15.   wnd:
    16.   wnd_struct     dd 0x04*0x0C
    17.   wnd_style      dd CS_HREDRAW or CS_VREDRAW or CS_OWNDC
    18.   wnd_proc       dd WndProc
    19.   wnd_clswxtra   dd 0x0000
    20.   wnd_wndextra   dd 0x0000
    21.   wnd_instance   dd 400000h
    22.   wnd_icon32     dd 0x0000
    23.   wnd_cursor     dd 0x0000
    24.   wnd_background dd BLACK_PEN
    25.   wnd_menu       dd 0x0000
    26.   wnd_classptr   dd wnd_class
    27.   wnd_icon16     dd 0x0000
    28.   wnd_dc         dd 0x0000
    29.   wnd_paint      PAINTSTRUCT
    30.  
    31.   wnd_msg        MSG
    32.   wnd_id         dd 0x0000
    33.  
    34.   wnd_info:
    35.   dd             0x0028
    36.   wnd_width      dd 0x0100
    37.   wnd_height     dd 0x0100
    38.   dw             0x0001
    39.   dw             0x0020
    40.   dd             0x0000
    41.   dd             0x0000
    42.   dd             0x0000
    43.   dd             0x0000
    44.   dd             0x0000
    45.   dd             0x0000
    46.   wnd_addr       dd 0x0000
    47.   wnd_size       dd 0x0000
    48. include 'data.asm'
    49. include 'gfx_data.asm'
    50.  
    51.  
    52. ;----------------------------------------------------------------------------------------------------;
    53. section 's_code' code readable executable
    54.  
    55. include 'gfx_code.asm'
    56.  
    57. windows32_code:
    58.   invoke  GetModuleHandle, 0
    59.   mov     [wnd_instance], eax
    60.   invoke  LoadIcon, [wnd_instance], 17
    61.   mov     [wnd_icon32], eax
    62.   mov     [wnd_icon16], eax
    63.   invoke  LoadCursor, [wnd_instance], 27
    64.   mov     [wnd_cursor], eax
    65.  
    66.   invoke  RegisterClassEx, wnd
    67.  
    68.   invoke  GetSystemMetrics, SM_CXSCREEN
    69.   mov     [wnd_width], eax
    70.   mov     [gfx_width], eax
    71.   mul     [const_4]
    72.   mov     [gfx_line], eax
    73.   invoke  GetSystemMetrics, SM_CYSCREEN
    74.   mov     [wnd_height], eax
    75.   mov     [gfx_height], eax
    76.   mul     [gfx_width]
    77.   mov     [gfx_pixs], eax
    78.   mul     [const_4]
    79.   mov     [gfx_size], eax
    80.   mov     [wnd_size], eax
    81.   xor     eax, eax
    82.  
    83.   invoke  CreateWindowEx, WS_EX_TOPMOST, wnd_class, wnd_title, WS_POPUP or WS_VISIBLE, eax, eax, [wnd_width], [wnd_height], eax, eax, [wnd_instance], eax
    84.   mov     [wnd_id], eax
    85.  
    86.   invoke  GetDC, [wnd_id]
    87.   mov     [wnd_dc], eax
    88.  
    89.   invoke  VirtualAlloc, 0x0000, [gfx_size], MEM_RESERVE, PAGE_READWRITE
    90.   invoke  VirtualAlloc, eax,    [gfx_size], MEM_COMMIT,  PAGE_READWRITE
    91.   mov     [gfx_addr], eax
    92.   invoke  VirtualLock, [gfx_addr], [gfx_size]
    93.   invoke  VirtualAlloc, 0x0000, [wnd_size], MEM_RESERVE, PAGE_READWRITE
    94.   invoke  VirtualAlloc, eax,    [wnd_size], MEM_COMMIT,  PAGE_READWRITE
    95.   mov     [wnd_addr], eax
    96.   invoke  VirtualLock, [wnd_addr], [wnd_size]
    97.  
    98.  
    99.  
    100. include 'code.asm'
    101.  
    102.  
    103.  
    104.   invoke VirtualUnlock, [wnd_addr], [wnd_size]
    105.   invoke VirtualAlloc,  [wnd_addr], [wnd_size], MEM_DECOMMIT, PAGE_READWRITE
    106.   invoke VirtualFree,   [wnd_addr], 0x0000,  MEM_RELEASE
    107.   invoke VirtualUnlock, [gfx_addr], [gfx_size]
    108.   invoke VirtualAlloc,  [gfx_addr], [gfx_size], MEM_DECOMMIT, PAGE_READWRITE
    109.   invoke VirtualFree,   [gfx_addr], 0x0000,  MEM_RELEASE
    110.  
    111.   mov     eax, [wnd_msg.wParam]
    112.   invoke  ExitProcess, eax
    113.  
    114.   ret
    115.  
    116.  
    117.   system_update:
    118.     invoke  GetMessage, wnd_msg , 0x0000 , 0x0000 ,  0x0000
    119.     test    eax, eax
    120.     je      @@main_loop_end
    121.  
    122.     invoke  TranslateMessage, wnd_msg
    123.     invoke  DispatchMessage, wnd_msg
    124.   ret
    125.   wnd_draw:
    126.     xor     eax, eax
    127.     sub     eax, [gfx_height]
    128.     cld
    129.     mov     edi, [wnd_addr]
    130.     mov     esi, [gfx_addr]
    131.     add     esi, [gfx_size]
    132.     sub     esi, [gfx_line]
    133.     mov     edx, [gfx_height]
    134.     @@:
    135.       mov     ecx, [gfx_width]
    136.       rep     movsd
    137.       sub     esi, [gfx_line]
    138.       sub     esi, [gfx_line]
    139.     dec     edx
    140.     cmp     edx, 0x00
    141.     ja      @B
    142.  
    143.     invoke  StretchDIBits, [wnd_dc], 0x0000, 0x0000, [gfx_width], [gfx_height], 0x0000, 0x0000, [gfx_width], [gfx_height], [wnd_addr], wnd_info, DIB_RGB_COLORS, SRCCOPY
    144.   ret
    145.   timer_update:
    146.  
    147.     mov     eax, [timer_current]
    148.     mov     [timer_last], eax
    149.  
    150.     invoke  GetTickCount
    151.     mov     [timer_current], eax
    152.     rol     [timer_current], 0x01
    153.  
    154.     mov     eax, [timer_current]
    155.     sub     eax, [timer_last]
    156.     mov     [timer_change], eax
    157.  
    158.   ret
    159.  
    160. proc WndProc, lcl_wnd, lcl_msg, lcl_wParam, lcl_lParam
    161. ;==============================================================================
    162.  
    163.     cmp     [lcl_msg], WM_CREATE
    164.     je      p_wndproc_create
    165.  
    166.     cmp     [lcl_msg], WM_DESTROY
    167.     je      p_wndproc_destroy
    168.  
    169.     cmp     [lcl_msg], WM_PAINT
    170.     je      p_wndproc_paint
    171.  
    172.     cmp     [lcl_msg], WM_KEYDOWN
    173.     je      p_wndproc_keydown
    174.  
    175.     invoke  DefWindowProc, [lcl_wnd], [lcl_msg], [lcl_wParam], [lcl_lParam]
    176.     ret
    177.  
    178.  
    179.   p_wndproc_destroy: ;------------------------------------------
    180.  
    181.     invoke  PostQuitMessage, NULL
    182.     xor     eax, eax
    183.     ret
    184.  
    185.   p_wndproc_create:  ;------------------------------------------
    186.  
    187.     xor     eax, eax
    188.     ret
    189.   p_wndproc_paint:  ;------------------------------------------
    190.  
    191.     xor     eax, eax
    192.     ret
    193.  
    194.   p_wndproc_keydown: ;------------------------------------------
    195.  
    196.     mov     eax, [lcl_wParam]
    197.     cmp     eax, 0x001B
    198.     jne     p_wndproc_notESCAPE
    199.     invoke  SendMessage, [lcl_wnd] , WM_CLOSE , NULL, NULL
    200.     p_wndproc_notESCAPE:
    201.     xor     eax, eax
    202.     ret
    203.  
    204.  endp
    205.  
    206. ;----------------------------------------------------------------------------------------------------;
    207. section 's_import' import data readable writeable
    208. p_import:
    209.  
    210.   library kernel32,'KERNEL32.DLL',\
    211.           user32,'USER32.DLL',\
    212.           gdi32,'GDI32.DLL'
    213.  
    214.   include '..\..\..\include\apia\kernel32.inc'
    215.   include '..\..\..\include\apia\user32.inc'
    216.   include '..\..\..\include\apia\gdi32.inc'
    217.  
    218. ;----------------------------------------------------------------------------------------------------;
    219. section 's_res' resource data readable
    220. p_resource:
    221.  
    222.   directory RT_ICON,icons,\
    223.             RT_GROUP_ICON,group_icons,\
    224.             RT_CURSOR,cursors,\
    225.             RT_GROUP_CURSOR,group_cursors,\
    226.             RT_VERSION,versions
    227.  
    228.   resource icons,\
    229.            48,LANG_NEUTRAL,icon_48,\
    230.            32,LANG_NEUTRAL,icon_32,\
    231.            24,LANG_NEUTRAL,icon_24,\
    232.            16,LANG_NEUTRAL,icon_16
    233.  
    234.   resource group_icons,\
    235.            17,LANG_NEUTRAL,main_icon
    236.  
    237.   resource cursors,\
    238.            2,LANG_NEUTRAL,cursor_data
    239.  
    240.   resource group_cursors,\
    241.            27,LANG_NEUTRAL,main_cursor
    242.  
    243.   resource versions,\
    244.            1,LANG_NEUTRAL,version
    245.  
    246.   icon main_icon,icon_48,'48.ico',icon_32,'32.ico',\
    247.                  icon_24,'24.ico',icon_16,'16.ico'
    248.  
    249.   cursor main_cursor,cursor_data,'cursor.cur'
    250.  
    251.  
    252.   versioninfo version,VOS__WINDOWS32,VFT_APP,VFT2_UNKNOWN,LANG_NEUTRAL,0x00,\
    253.               'FileName','????????????????????',\
    254.               'OriginalFilename','????????????????????',\
    255.               'FileVersion','??.??.??.??',\
    256.               'FileDescription','????????????????????',\
    257.               'IsDebug','??????',\
    258.               'IsPatched','??????',\
    259.               'IsPreRelease','??????',\
    260.               'ProductName','????????????????????',\
    261.               'ProductVersion','??.??.??.??',\
    262.               'Language','????????????????????',\
    263.               'CompanyName','????????????????????',\
    264.               'LegalCopyright','????????????????????',\
    265.               'InternalName','????????????????????',\
    266.               'Comments','????????????????????'
     
  2. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Например, заюзать Qt.
     
  3. Microedition

    Microedition Active Member

    Публикаций:
    0
    Регистрация:
    5 июн 2008
    Сообщения:
    814
    можно написать что-то наподобие run-time библиотеки. Нескольно библиотек с одинаковым
    интерфейсом, но разным кодом для разных ос
     
  4. bendme

    bendme New Member

    Публикаций:
    0
    Регистрация:
    10 мар 2009
    Сообщения:
    179
    Ага, ради ста строк кода, которые создают пустое окно писать библиотеку
     
  5. Zhelezka

    Zhelezka New Member

    Публикаций:
    0
    Регистрация:
    21 июл 2008
    Сообщения:
    103
    Microedition
    Это представлен файл Windows32.asm.
    Он как-раз включает одинаковые для всех code.asm, data.asm, gfx_code.asm и gfx_data.asm.
    Хочется создать файлы наподобие Linux32.asm, MacOs32.asm.

    bendme
    code.asm, data.asm, gfx_code.asm и gfx_data.asm уже далеко не пустые.
    А содержат свой набросок графического движка.

    Great
    Нет, мне нужен просто быстрый код для другой ОС.

    Где можно найти справку по функциям самых известный ОС
    и просто переисать этот код для других ОС.
     
  6. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    Zhelezka
    элементарно! берешь соответствующие справочники, учишь структуру ос, есть ли у нее реестр, какими апи с ним работают, какие структуры заполняются для вызова окна и переписываешь...

    а вообще вопрос звучит примерно так: "ребят, вот у меня кирзовые сапоги - как сделать такие же, только розовые туфельки из милана...". Между словами windows, unix и macos есть только два общих слова в твоем вопросе - ОС и код! Больше ничего общего!
     
  7. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    А-аа.. Ну раз так, тогда попробуй загуглить ман к иксам. И глянь в сторону KDevelop, по-моему, в нем были стандартные проекты.
     
  8. spa

    spa Active Member

    Публикаций:
    0
    Регистрация:
    9 мар 2005
    Сообщения:
    2.240
    MSoft
    posix?
     
  9. Microedition

    Microedition Active Member

    Публикаций:
    0
    Регистрация:
    5 июн 2008
    Сообщения:
    814
    можно opengl использовать. только придется с создавать графический интерфейс.
    зато в разных ос он (интерфейс) будет выглядеть более-менее одинаково.
     
  10. Microedition

    Microedition Active Member

    Публикаций:
    0
    Регистрация:
    5 июн 2008
    Сообщения:
    814
    всмысле, на основе opengl создать кроссплатформенный интерфейс.
    и не заморачиваться с изучением реализаций gui-api разных ос.
     
  11. spa

    spa Active Member

    Публикаций:
    0
    Регистрация:
    9 мар 2005
    Сообщения:
    2.240
    QT рулит, он помоему и в opengl может рендерить.
     
  12. Zhelezka

    Zhelezka New Member

    Публикаций:
    0
    Регистрация:
    21 июл 2008
    Сообщения:
    103
    Microedition
    На этом и заворачиваться ненадо моя программа из функций рисования будет использовать только StretchDIBits.
    Она самостоятельно работает со своим видео-буффером и потом ей нужна только функция вывода на экран.
    OpenGl тоже в таком случае ненужен.
     
  13. Zhelezka

    Zhelezka New Member

    Публикаций:
    0
    Регистрация:
    21 июл 2008
    Сообщения:
    103
    Хотелось-бы узнать где можно найти хорошие справочники по этому.
    Нужны только функции используемые в первом сообщении(все invoke).
     
  14. dendi

    dendi New Member

    Публикаций:
    0
    Регистрация:
    3 сен 2007
    Сообщения:
    233
    макос это и есть никс :)
     
  15. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    MSoft
    Зачёт. Тоже интересует этот вопрос. ^)
     
  16. Zhelezka

    Zhelezka New Member

    Публикаций:
    0
    Регистрация:
    21 июл 2008
    Сообщения:
    103
    Мне нужно узнать только как создать окно,
    эквивалент функции StretchDIBits,
    функции выделения памяти,
    мышь+клавиатура
    и функции таймера.
     
  17. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    MSoft
    Мне только нужно узнать как из кирзовых сапог получить туфельки из милана. А ну быстро колись.
     
  18. Phuntik

    Phuntik New Member

    Публикаций:
    0
    Регистрация:
    4 фев 2008
    Сообщения:
    318
    Zhelezka
    Тогда всё просто. Тебе лишь нужно написать аналоги этой функции для каждой желаемой ОС и использовать их.
     
  19. Phuntik

    Phuntik New Member

    Публикаций:
    0
    Регистрация:
    4 фев 2008
    Сообщения:
    318
    А чего не в своём разделе?
     
  20. friackazoid

    friackazoid New Member

    Публикаций:
    0
    Регистрация:
    4 июн 2009
    Сообщения:
    102
    Товарисчи!!!!
    Вы все забываете одну сильно просту весч. А именно графическая подсистема у виндовса (окошечки и кнопочки) является частью ядра системы. У никсовых систем (линукс макось) все устроено очень сильно по другому. Там есть X-сервер (который конечно демон но все таки никак не часть ядра) и есть всякие высокоуровневые библиотеки (Qt, GTK) которые надстройки над Xlib.
    Так что создание подобных файлов linux32.asm лишено смысла впринципе.
    Топикстартер, скажи чего конкретно хочешь этим добится.