Игра life2 - Conway's life
Единственный пример программы на BorlandC++
http://websvn.kolibrios.org/listing.php ... c9bc90d7ba
life2
-
Last edited by maxcodehack on Tue Nov 03, 2020 5:39 pm, edited 1 time in total.
Попробуй строки с equ в начало файла перекинуть.Хотя таким подобный способом helloworld из статьи diamond'а собрался.
Еще нужно настроить автосборку life2 на сервере
Code: Select all
@@Kolibri@ReadCommonColors$qpui equ @Kolibri@ReadCommonColors$qpui
@@Kolibri@GetPid$qv equ @Kolibri@GetPid$qv
@@Kolibri@Lock$qp14Kolibri@TMutex equ @Kolibri@Lock$qp14Kolibri@TMutex
...
@@Kolibri@GetMouseButton$qv equ @Kolibri@GetMouseButton$qv
Попробую.
Только на сервере это как-то нужно обойти.
И чтобы новый fasm работал
UPD
Да, заработало, спасибо.
Только на сервере лучше обойти нормально.
Еще заметил что title у окна какой то неправильный, маленький. Хотя в том примере diamond'а заголовок нормальный
И еще, удалить бы экзешники с сервера. Они на сервере не нужны для сборки. t2fasm отлично пересобирается для linux, а вот что делать с bmp2h
Только на сервере это как-то нужно обойти.
И чтобы новый fasm работал
UPD
Да, заработало, спасибо.
Только на сервере лучше обойти нормально.
Еще заметил что title у окна какой то неправильный, маленький. Хотя в том примере diamond'а заголовок нормальный
И еще, удалить бы экзешники с сервера. Они на сервере не нужны для сборки. t2fasm отлично пересобирается для linux, а вот что делать с bmp2h
Новый fasm не работает по 2-м причинам:maxcodehack wrote:И чтобы новый fasm работал
1) в коде есть макрос define, которым программа t2fasm обделывает все функции из полученного *.asm файла.
В новых версиях fasm появилась команда define, которая совпадает с именем макроса и потому компиляция не идет.
По этой причине я в (rev 8129) в подключаемых *.inc файлах заменил макрос define на макрос proc, однако осталась проблема с программой t2fasm.
2) в коде который создает bcc32 имена некоторых меток начинаются со знака $.
А в новых версиях fasm имена меток не могут начинаться со знака $.
Т.е. для компиляции нужно исправить эти проблемы.
Предлагаю такой вариант решения:
Создаем *.asm файл с таким содержанием:
Spoiler:
Code: Select all
;Crack for Borland C++ 5.5.1
use32
file 'bcc32.exe':0,0x4a8f
dd 0x90909090,0x90909090 ;fix end proc
db 0xb8
dd 0x4a626b
file 'bcc32.exe':0x4a9c,0x5753-0x4a9c
dd 0x4b2472 ;fix label byte
file 'bcc32.exe':0x5757,0x575a-0x5757
dd 0x4b2472 ;fix proc near
file 'bcc32.exe':0x575e,0x5761-0x575e
dd 0x4b2472 ;fix label word
file 'bcc32.exe':0x5765,0x5768-0x5765
dd 0x4b2472 ;fix label dword
file 'bcc32.exe':0x576c,0x576f-0x576c
dd 0x4b2472 ;fix label qword
file 'bcc32.exe':0x5773,0x5776-0x5773
dd 0x4b2472 ;fix label tbyte
file 'bcc32.exe':0x577a,0x56216-0x577a
db '_' ;fix '$' to '_'
file 'bcc32.exe':0x56217,0xd4400-0x56217
;0x4b2472 - ':',13,10,0
;0x4a626b - 13,10,0
Может получилось еще сложнее и более накручено, но зато у меня компилируется новым fasm-ом. Кряк компилятору делается одноразово и должен подходить к компиляции разных *.cpp файлов.
А вот исправить define и $ можно
Попробовать надо
скоро будет готова?
это не half life 2
Это https://ru.m.wikipedia.org/wiki/%D0%98% ... 1%8C%C2%BB
Это https://ru.m.wikipedia.org/wiki/%D0%98% ... 1%8C%C2%BB
Last edited by maxcodehack on Thu Nov 05, 2020 7:48 am, edited 1 time in total.
Думаю можно заменить define на define_f что-бы не совпадало. А заменить $ без кряка будет сложновато, нужно находить все метки в коде в программе t2fasmmaxcodehack wrote:А вот исправить define и $ можно
Пока что у нас нет выбора.maxcodehack wrote:По мне как то кряк использовать не очень хорошо
rev 8133
Убрал еще немного Menuet-а из кода.
Оказалось что файлы menuet.h в life2 и в примере "Hello word" разные ... Настроить работу нового примера "Hello word" пока не получается. Компилируется но не печатает текст, потому как diamond ввел новую функцию MenuetOnDraw и изменил алгоритм рисования.
Spoiler:
Code: Select all
#include <kolibri.h>
#include <kos_heap.h>
#include <kos_file.h>
using namespace Kolibri;
const char header[] = "HelloWorld test";
const char string[] = "Hello, World!";
bool KolibriOnStart(TStartData &me_start, TThreadData /*th*/)
{
me_start.Left = 10;
me_start.Top = 40;
me_start.Width = 150;
me_start.Height = 80;
me_start.WinData.Title = header;
return true;
}
void KolibriOnPaint(void)
{
DrawText(30,10,0,string);
}
bool KolibriOnClose(TThreadData /*th*/)
{return true;}
int KolibriOnIdle(TThreadData /*th*/)
{return -1;}
void KolibriOnSize(int /*window_rect*/[], TThreadData /*th*/)
{}
void KolibriOnKeyPress(TThreadData /*th*/)
{GetKey();}
void KolibriOnMouse(TThreadData /*th*/)
{}
Spoiler:
Code: Select all
<<<<<<< .mine
macro _define x,[link]
||||||| .r8129
macro define x,[link]
=======
macro define_f x,[link]
>>>>>>> .r8133
___________________
Крякнул компилятор, компилирую фасмом:
Code: Select all
flat assembler version 1.71.57 (16384 kilobytes memory)
kos_cdlg.inc [45]:
mov ebx,[ebp+MENUET_THREAD_DATA_X*4]
processed: mov ebx,[ebp+MENUET_THREAD_DATA_X*4]
error: undefined symbol 'MENUET_THREAD_DATA_X'.
А когда пробую helloworld собрать новым фасмом:
Code: Select all
flat assembler version 1.71.57 (16384 kilobytes memory)
include\me_func.inc [80]:
nextdef MenuetEntryPoint
include\me_start.inc [85] nextdef [3]:
end if
processed: end if
error: unexpected instruction.
Такое бывает если пользователь делает изменения в файле и на svn также делаются изменения в этом же месте. Например ты заменил макрос define на _define, а я заменил define на define_f. При обновлении файла svn не хочет удалять твои правки и пишет сразу 3 версии кода, что было, твою версию и что стало на svn. Можно попробовать просто удалить файл и загрузить его снова, должна загрузиться последняя версия.maxcodehack wrote:<<<<<<< .mine
macro _define x,[link]
||||||| .r8129
macro define x,[link]
=======
macro define_f x,[link]
>>>>>>> .r8133
это я забыл файл kos_cdlg.inc обновить, потому не работало, скинул его в rev 8134maxcodehack wrote:flat assembler version 1.71.57 (16384 kilobytes memory)
kos_cdlg.inc [45]:
mov ebx,[ebp+MENUET_THREAD_DATA_X*4]
processed: mov ebx,[ebp+MENUET_THREAD_DATA_X*4]
error: undefined symbol 'MENUET_THREAD_DATA_X'.
helloworld у меня пока что не работает, потому для него нужен другой файл kolibri.inc я пока не знаю как с этим быть ложить 2 файла сразу не хочется, а в один файл пока свести не могу. Получается или будет life2 работать или helloworld смотря какой файл положить.
Теперь осталась только одна проблема - с equ
И конечно полностью избавится от менуэт, и слиять код диамонда и yogev ezra
И конечно полностью избавится от менуэт, и слиять код диамонда и yogev ezra
Last edited by maxcodehack on Thu Nov 05, 2020 6:53 pm, edited 1 time in total.
Файлы для компиляции обновленного Hello word от diamond-а положил в архив.
Для компиляции нужно взять недостающие новые файлы из папки life. Разница там в стилях окна и в функции рисования, потому пока свести к общему знаменателю не получается.
для этого нужно доработать перестановку этих строк в t2fasm.maxcodehack wrote:Теперь осталась только одна проблема - с equ
Еще один вопрос. Не нравится мне, что все лежит в папке с игрой. Вдруг вот еще на нем программы будут, что копировать? По мне можно в contrib создать папку kos32-bcc, и там будет лежать t2fasm, патч, и helloworld, и набор библиотек. Тогда путь указывать к одной папке.
Только это можно сделать тогда, когда слияем набор инклудников
grep'нул. Поможет полностью избавится от менуэта:
Только это можно сделать тогда, когда слияем набор инклудников
grep'нул. Поможет полностью избавится от менуэта:
Spoiler:
Code: Select all
maxim@maxim-pc:~$ grep -r Menuet /media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/include/kos_func.inc:Menuet_SegmentInit:
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/include/kos_func.inc:Menuet_SegmentExit:
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/include/kos_func.inc:Menuet_SegmentInitEnd:
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/include/kos_func.inc:Menuet_SegmentExitEnd:
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/include/kos_func.inc:macro Menuet_Put_MovEaxVal_Ret address,val
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/include/kos_func.inc: Menuet_Put_MovEaxVal_Ret @Kolibri@GetPid$qv,edx
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/include/kos_func.inc:if defined MenuetHeapInit
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/include/kos_func.inc: call MenuetHeapInit ; Initialize a dynamic heap and create new memory in its begin.
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/include/kos_func.inc:if defined MenuetHeapFreeAndThreadFinish
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/include/kos_func.inc: call MenuetHeapFreeAndThreadFinish ; Free the given memory and finish the thread,
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/include/kos_func.inc: Menuet_Put_MovEaxVal_Ret @Kolibri@GetThreadData$qv,esp
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/include/kos_func.inc:if defined Menuet_SegmentInit & defined Menuet_SegmentInitEnd
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/include/kos_func.inc: push Menuet_SegmentInitEnd
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/include/kos_func.inc: push Menuet_SegmentInit
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/include/kos_func.inc:if defined Menuet_SegmentExit & defined Menuet_SegmentExitEnd
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/include