Как стать автором
Обновить

Комментарии 95

Очень круто. Редко кто задумывает использовать графический интерфейс из асм! Можно пользовать как обучалку для студентов вместо классического dosbox

вопрос уважаемому автору - что в вашей IDE требует GUI и не позволяет обойтись текстовым интерфейсом ?

Хм, очень интересный вопрос. Ну, самое главное, GUI предоставляет намного больше пространства. К тому же, он позволяет рисовать линии-разделители между буквами. Как например сделаете эти всплывающие окошки без графики? Да много чего...

Для POSIX есть ncurses...

Есть, но текст остается текстом. Мало в нем плотности.

Хотя, технически, архитектура GUI в freshlib такая, что можно попробовать написать интерфейс к текстовому режиму. ОС зависимый слой там очень тонкий и возможно это будет не так уж и трудно. Я этим вряд ли скоро возьмусь, но если кому-то надо и займется, содействие окажу.

Мало в нем плотности.

шрифт для эмуляций терминала в Х настраивается несколькими способами (~/.Xresources, ком.строка, свой конфиг), зависят от реализации.

шрифты изнутри приложения на ncurses - ну такое. termcap(5), terminfo(5).

ОС зависимый слой там очень тонкий

можно сделать еще тоньше, используя cygwin.

шрифт для эмуляций терминала в Х настраивается несколькими способами (~/.Xresources, ком.строка, свой конфиг), зависят от реализации.

Конечно, но все равно, между символами рисовать нельзя. Я этого имел ввиду, когда говорил что плотность низкая.

между символами рисовать нельзя

а надо ?

когда говорил что плотность низкая.

я про кернинг подумал.

Надо. Иначе нельзя визуально разделить два текста и одновременно поместить их рядом. Можно конечно цветом, но это намного хуже.

Как вы ускорили запуск программ. Вы избавились от Wine? Тоже этот момент жутко бесит.

Так, теперь WINE не нужен – Fresh3 компилируется нативно отдельно под Линукс, отдельно под Windows.

Вот только на 64-битном линуксе не запускается, увы.

openat(AT_FDCWD, "/lib32/tls/i686/sse2/libfreetype.so.6", O_RDONLY|O_LARGEFILE|O_CLOEXEC) = -1 ENOENT (Нет такого файла или каталога)
...
openat(AT_FDCWD, "/usr/lib/libfreetype.so.6", O_RDONLY|O_LARGEFILE|O_CLOEXEC) = -1 ENOENT (Нет такого файла или каталога)
./Fresh3: error while loading shared libraries: libfreetype.so.6: cannot open shared object file: No such file or directory

ln -s /usr/lib/x86_64-linux-gnu/libfreetype.so.6 /usr/lib/libfreetype.so.6

openat(AT_FDCWD, "/usr/lib/libfreetype.so.6", O_RDONLY|O_LARGEFILE|O_CLOEXEC) = 3
./Fresh3: error while loading shared libraries: libfreetype.so.6: wrong ELF class: ELFCLASS64

Ну, для рисования шрифтов используется FreeType. Еще используется libfontconfig и стандартная Си-шная библиотека. Можно инсталлировать 32 битовые библиотеки и все запустится. Я дополню статью об этом...

А куда скидывать замечания и предложения? )
И с Новым Годом! ))

Так сразу здесь и можно.

Хорошо ) Тестил v. 2.7.0 под Windows 7. Что пока заметил (всякую мелочь):
1. Не создается ярлык на рабочем столе после установки.
2. Help- About Fresh.
Сверху мигает курсор. По правому клику - текст можно выделить и допустим , "Установить порядок чтения справа налево". Крестика закрытия окошка нет, закрытие только по Esc.

3. File- открываем файл через диалог. Идем в Ide option, пытаемся загрузить тему- в окне диалога на папка с темами, а папка с последним открытым файлом.

  1. И хоть ты тресни, назад в папку Fresh вернуться можно только вручную диск и папки через окно диалога. Хорошо бы в меню File добавить пункт Examples, по клику на который File dialog открывал бы папку с примерами.

    зы. Ни хрена ЗгтещЫцшесрук PuntoSwitcher не работает d {f,ht , не переключает раскладку автоматом.

Ну, вы уж извините, но я теперь точно v2.x усовершенствовать и исправлять не стану. Особенно в таких мелочах.

Можно посмотреть, как в v3.x, FileDialog реально неудобно. Остальное мелочь конечно.
Еще насчет bookmarks. Оно конечно везде в Дельфи тоже так сделано, но слепые закладки типа bookmark1, bookmark2 - это неудобно же.
Я сделал список именованных закладок

Всё круто кроме заголовка. Он кликбэйтный.

Ну, он может и кликбэйтный, но зато чистая правда. Каждый открытый проект, это подарок обществу, а мой как-то подоспел к новому году. Я этого не добивался, так получилось потому что по праздникам у меня больше свободного времени.

Говорят есть кроссплатформенные библиотеки. Например Wx, Qt
Да и много других.
Зачем делать двойную работу?

Я об этом долго думал, но в конце концов отказался. У этих библиотек слишком высокие требования к системе. И они слишком большие и медленные.

Да ладно! WxWidgets например?
Лишь бы была система. Сам GUI минимальный размер. 2-3 МБ это много? Никаких внешних зависимостей.

Ну у меня 350КБ. 2-3 МБ, выходит много.

К тому же, для KolibriOS, например, не подойдет. А мой вариант запросто подойдет.

Ну, использование какого-либо тулкита позволяет унифицировать приложение (UX/UI и структура проекта в целом), внешний вид и поведение будут нативными всегда вне зависимости от системы.

Если не надо для KolibriOS есть такой проект:

О, это прямо королевский подарок! Спасибо огромное! Много сил и чтобы все задуманное сбывалось в новом году!

Windows 10, установил Fresh IDE 2.7. Как получить пошаговую отладку в IDE ? Или нужен внешний debugger со своим IDE (упомянут OllyDbg) ? Спасибо.

Лучше OllyDbg. Встроенный дебаггер работает так себе... Но все же немножко работает – напишите где нибудь в коде инструкцию int3 и запустите через F9, программа остановится на int3 и сможете исполнять инструкции пошагово, но честно говоря, работает плохо. Я так и не сделал дебаггер до конца, потому что уже было ясно, что придется все переписывать из за переносимости.

Кстати, вот вопрос – Fresh3 для Linux может компилировать, запускать и отлаживать Windows программы.

А вот как в Windows версию сделать так же для Linux программ? Если в Windows установлен WSL, то можно ли просто запустить ELF файл через CreateProcess как это возможно в WINE?

Fresh3 для Linux может компилировать, запускать и отлаживать Windows программы.

А, Wine при этом, предполагаю, должен быть запущен в Linux системе для их проверки или что то подразумевается другое? (т.к. Wine, в каких то моментах, плохо совместим с Windows программами и например какие то i-net браузеры почти не работают под ним)

Конечно через WINE. Конечно это далеко от идеала, но хоть что то. К тому же, есть такой эффект, что если сделать чтобы программа работала хорошо в WINE, то она будет работать хорошо и в Windows, но обратное неверно.

на KDE X11 открылось, а в wayland сессии не работает, даже ошибок никаких не выдало

Я в wayland не разбираюсь. Если там можно запускать другие X11 программы, то Fresh3 нужно исправлять. Если нет вообще X11 сервера, то ждать wayland порт Fresh3. Насчет ошибок – я их выдаю если скомпилировано в отладочном режиме. Надо сделать и в нормальном...

через прослойку Xwayland должны работать иксовые программы. У меня MS Office 2007 в wine на вейланде нормально установился и работает.

Ну, тогда ясное дело, дано тестировать у меня и исправлять... А как запустить этот wayland на Manjaro с xfce? Смотрю он у меня установлен, но работает ли или нет???

XFCE сам по себе еще до конца не поддерживает wayland, они меньше чем год назад начали двигаться в сторону поддержки.

https://wiki.xfce.org/releng/wayland_roadmap

По идее, нужен драйвер, поддерживающий всё необходимое для wayland. Обычно с этим проблемы только у старых официальных Nvidia драйверов (вроде раньше 495 версии не катят).

И соответственно нужна DE, поддерживающая wayland, это или кеды, или гном, остальные - хз точно поддерживают ли, так что там по вики ориентируйтесь.

Тут главная проблема иксов в том, что они deprecated - их никто толком сейчас уже не делает, буквально только исправления безопасности, все в основном стараются портировать код на wayland.

Я инсталлировал KDE plasma и wayland-session. Все запустилось. Но дело в том, что Fresh3 IDE у меня работает прекрасно в wayland-session. Не смог установить что у вас не так...

как скомпилировать с отладочной информацией?

В файле "Fresh3.asm", строка 19, сделайте options.DebugMode=1.

изменил строку, скомпилировал так:

$ cd Fresh3/source/
$ env lib=../freshlib TargetOS=Linux fasm -m 262144 ./Fresh3.asm
flat assembler  version 1.73.30  (262144 kilobytes memory, x64)
I18n strings placeholders: $80A2C14C
7 passes, 2.0 seconds, 365870 bytes.
$ mv Fresh3 ../
$ cd ..

запустил:

$ ./Fresh3 
String handles start from: F599E000
String handles ends on: F799E000
Server connected! Socket: 3
Start request sent!
Error open display.
WARNING: StrDel on pointer: 0809BF7B
                 call from: 0804C156
WARNING: StrDel on pointer: 0809BF9B
                 call from: 0804C156
FTC_Manager_LookupSize error: $27
FTC_Manager_LookupSize error: $27
FTC_Manager_LookupSize error: $27
FTC_Manager_LookupSize error: $27
$ 

не может найти дисплей? Мои переменные дисплея:

$ env | grep DISPLAY
WAYLAND_DISPLAY=wayland-0
DISPLAY=:1

Спасибо, сейчас посмотрю... Получается что программа правильно соединяется с сервером, но не находит файл .Xаuthority или не успевает его распарсить правильно и извлечь правильные данные для обмена с сервером. Какая у вас переменная окружения XAUTHORITY? Существует ли этот файл и какие у него права доступа?

Да, так заработало.
И я походу понял почему так происходит. Не все менеджеры входа (display manager) поддерживают wayland. У меня sddm, он получил поддержку wayland недавно, но конфиг по умолчанию до сих пор запускает его в Xorg на :0 дисплее, а потом Xwayland в KDE запускает еще и свой на :1

$ pgrep -f X | xargs ps -o pid,cmd,etime -p
  PID CMD                             ELAPSED
30658 /usr/libexec/Xorg -nolisten    01:28:28
30711 /usr/bin/Xwayland :1 -auth     01:28:25

То что дисплей №1 не проблема. Проблема была в отсутствующей точке – обычно пишут «1.0». А я строку разбирал неправильно. Сейчас исправлю.

КМК проще было под VSCode плагин написать

VSCode, ASM, KolibriOS.
Помогите Даше найти лишнее =)

Правый и левый бутоны мыши - это "пять". Наверное, я слишком испорчен :)

В смысле не исправлять, что ли?

Мышь с бутонами, вернее, в бутонах

А, теперь понял. Красиво. Но что поделаешь – ложные друзья переводчика. Сейчас исправлю.

Очень круто! Спасибо!

Но, я потратил пол часа времени и не смог осилить сборку FlashAssembler-а, не говоря уже о том чтобы попробовать Ваш проект Fresh3. В репозитории FlatAssembler-а нет ни Makefile-а, ни скрипта для сборки, ни инструкции по сборке. Как клонировать репозиторий и получить исходник ? Что это ? Зачем это ? Зачем он вообще нужен ?

Fasm ассемблер имеет свои уникальные возможности,
и к примеру на нём сделано ядро KolibriOS

P.S. Исходники Fasm написаны на Fasm и собираются Fasm.
Отсюда можно загрузить его текущюю версию
и обычно в репы Linux он тоже включается.

А откуда взялся первоначальный Fasm которым собрали первую версию Fasm ? :) И где расположен скрипт для сборки ? Я грешным делом подумал собрать его для FreeBSD, но теперь понятно, что это не возможно. Точнее, придется дописать кусок Fasm для генерации Фрюшных Эльфов.

Первоначальный FASM был написан на предыдущем ассемблере автора, но он скомпилировал первый FASM, который смог сам себе скомпилировать и умер. Вы так или иначе всегда достигнете такой уровень, что придется кому-то доверять.

Я кстати посмотрел в исходники Fasm, портировать его на фрюху не сложно - требуется составить специфичный для ОС файл system.inc и переделать в нём вызовы менее десятка сисколов.

И где расположен скрипт для сборки ?

Скрипт не нужен. Заходите в fasm/source/[Linux|Win32|DOS] и пишете:

fasm fasm.asm

Он компилируется. Все.

А если уж так не доверяете автору, можете скомпилировать FASM в Fresh3 IDE. Открываете файл fasm.asm в IDE, нажимаете Ctrl+F9 и готово. Компилятор в Fresh IDE скомпилирован не fasm-ом, а Fresh IDE, правда из исходников FASM-a.

Так. Выяснил, что fasm запускается под FreeBSD (Linux ELF), примеры (Hello world) собираются и работают. Используя Ваш скрипт я собрал Fresh3. Получил бинарник (Linux ELF). При его запуске ничего не происходит - программа висит и не завершается. Похоже, что ей нехватает каких-то ресурсов (шрифтов) в моей системе.

Поправка:

  1. Fresh3 потребляет 100% CPU.

  2. Я проинсталлировал его с помощью скрипта install/install-fresh. Возможно этого недостаточно ?

Интересно, что возможно для своей дальнейшей работы программа не может
сформировать файл Fresh3.cfg
Возможное минимльное содержимое этого файла

Layout.WindowState = 0
MRU_projects.Items =
MRU_files.Items =

А в какое место этот конфиг положить ?

Рядом с исполняемым файлом, но далеко не факт, что дело в нём.
У меня, к примеру, такое содержимое этого файла

Environment.Fresh = /root/Fresh3
Environment.FreshHelp = /root/Fresh3/doc
Environment.lib = /root/Fresh3/freshlib
IDE_settings.WebSearchEngine = 'https://duckduckgo.com/html?q=%q+!'
UserSyntax.Registers =
UserSyntax.Instructions = stdcall,ccall,invoke,cinvoke,dispatch,enddispatch,oncase,return,get,set,create,destroy,exec,movx,InitializeAll,FinalizeAll
UserSyntax.AsmDirectives = interface,body,proc,endp,begin,locals,endl,struct,ends,object,endobj,method,param,zalign,getfile,StringTable,IndexedStrings,Sequence,StripText,disp,DispSize,uses,itext,text,var
UserSyntax.PrepDirectives = iglobal,uglobal,endg,module,endmodule@BinaryTypee
Editor.Options = 328207
Environment.TargetOS = Linux
Compiler.PassLimit = 128
Compiler.MinMemoryBuffer = 262144
IDE_settings.WebBrowser = /usr/bin/xdg-open
Layout.WindowState = 0
MRU_projects.Items =
MRU_files.Items =

Запустил под truss, вижу что Fresh3 постоянно пытается получить доступ к несуществующим файлам:

linux_access("/etc/sysconfig/strcasecmp-nonascii",F_OK) ERR#-2 'No such file or directory'
linux_mprotect(0x282b1000,0x2000,0x1)		 = 0 (0x0)
linux_mprotect(0x28479000,0x1000,0x1)		 = 0 (0x0)
linux_mprotect(0x28437000,0x1000,0x1)		 = 0 (0x0)
linux_mprotect(0x28430000,0x2000,0x1)		 = 0 (0x0)
linux_mprotect(0x283c7000,0x1000,0x1)		 = 0 (0x0)
linux_mprotect(0x28408000,0x1000,0x1)		 = 0 (0x0)
linux_mprotect(0x283d9000,0x2000,0x1)		 = 0 (0x0)
linux_stat64("/etc/sysconfig/64bit_strstr_via_64bit_strstr_sse2_unaligned",0xffffa758) ERR#-2 'No such file or directory'
linux_mprotect(0x280e8000,0x1000,0x1)		 = 0 (0x0)
linux_mprotect(0x2836a000,0x4000,0x1)		 = 0 (0x0)
linux_mprotect(0x283af000,0x1000,0x1)		 = 0 (0x0)
linux_stat64("/etc/sysconfig/64bit_strstr_via_64bit_strstr_sse2_unaligned",0xffffa758) ERR#-2 'No such file or directory'
linux_mprotect(0x280c4000,0x1000,0x1)		 = 0 (0x0)

Интересно ещё, что на virustotal в Linuх32 файле ничего не показало,
а для Windows ~24-27 детектов от не основных антивирусов. :)

Хм, попробуйте поменять 19-ую строку Fresh3.asm на 1 и скомпилируйте опять. Авось что-то напечатает. Я под FreeBSD никогда не пробовал запускать что бы то ни было... Вполне вероятно библиотека сходит с ума... Сильно удивлюсь если заработает. :D

После установки Debug=1 выдает следующее:

Switch to 3GB address space.
sys_personality return EAX:0
Stack top address: $FFFFB9E8
Initial personality: $00000000
Switch to 3GB address space.
sys_personality return EAX:0
Stack top address: $FFFFB9E8
Initial personality: $00000000
Switch to 3GB address space.
sys_personality return EAX:0
Stack top address: $FFFFB9E8
Initial personality: $00000000
Switch to 3GB address space.
sys_personality return EAX:0

Т.е. Ваше предположение на счет sys_personaity где-то очень рядом. Хочу поинтересоваться чем вызвана необходимость в sys_personality ?

Оно и есть. Программа просто не может переключится в 3G personality и поэтому бесконечно циклит. Но да, надо сделать обработку ошибки лучше.

Хочу поинтересоваться чем вызвана необходимость в sys_personality ?

Потому что мне нужно чтобы для программы выделялось адресное пространство в 3GB. Дело в том, что там есть библиотека strlib, для работы с динамическими строками. А динамические строки идентифицируются не по адресу, потому что он меняется, а по ID. Но так как я хочу чтобы все функции работали и с динамическими строками и с статическими по адресу, приходится как-то разделят одни от других. Так этот 1GB адресного пространства выделен для идентификаторов строк. А когда все пространство может быть памятью то и определить что динамическая строка, а что статическая никак нельзя.

Извиняюсь, если глупый совет, не силен в ASMах, но в мире яблок строки с адресами от "short value" разделяют младшим битом установленным в 1, т.к. реальный адрес всегда чётный, возможно здесь можно применить схожую схему для разделения?

Я тоже о чем-то таком думал, но здесь нет такого твердого ограничения. Адрес может быть произвольным. Да, обычно адреса выравнены хотя бы на 4 байта, но и исключения встречаются постоянно.

В итоге я сделал как посоветовал @checkbox здесь – выделил адресное пространство без реальной памяти внутри и использую эти адреса в качестве идентификаторов. Должен был и сам догадаться. Это отличное решение и позволяет не терять целый GB памяти.

А, кстати, как FreeBSD поддерживает sys_personality?

Честно говоря не знаю. Если я правильно понял из чтения map 2 personality, то это какая-то жутко специфичная для Linux-а фича, чем-то похожа на фрюшный jail для ограничения процессов. Но судя во всему, в Linuxulator-е (эмуляторе Linux-а) эта фича поддерживается.

personality() is Linux-specific and should not be used in programs in- tended to be portable.

Ну, библиотеке надо чтобы адресное пространство было 3GB. Поэтому и при загрузке переключается вот так:

        DebugMsg "Switch to 3GB address space."

        mov     eax, sys_personality
        mov     ebx, PER_LINUX32_3GB
        int     $80

А что такое "3GB address space" ? Я как-то полагал, что для 32-х битного приложений адресное пространство 4ГБ, а для 64-х битного - 256ТБ. Или тут что-то другое ?

Я прочел про фичу PER_LINUX32_3GB в Linux. Похоже, что единственное для чего она применима это способ отделения 32-х битных указателей от 32-битных хэндлеров. Что-то мне подсказывает, что сама идея хэндлеров, притянутая из винды, является инородным телом. Предлагаю воркараунд - выделить достаточную область памяти через malloc() и использовать это пространство для хэндлеров. Если в эту область памяти ничего не писать, то система по факту её и выделять не будет.

Это кстати был единственный режим в 32 битных версиях Линукса. Потому что 1GB был нужен операционной системе. Это в 64 битный Линукс легко выделить все 4ГБ для приложения.

Кстати, ваша идея неплохая. Подумаю насчет ее...

@checkpoint: Я сделал какие-то изменения, чтобы не зависеть от PER_LINUX32_3GB. Если вам не надоело, попробуйте опять запустить скрипт чтобы скачал изменения и скомпилировал Fresh3 снова. Теперь должно работать у вас. (если я все правильно сделал, конечно).

Попробовал, работает под FreeBSD 13.2. Спасибо!

Интерфейс действительно очень быстрый и компактный, в целом очень приятно выглядит. Попробую что нибудь пописать на Fasm.

А есть ли в вашей IDE встроенный дебаггер/дисассемблер ? Я бы использовал его для дисассемблирования всякой старой всячины. Мне когда-то сильно нравился AFD.

И еще. Сделайте его portable, т.е. чтобы все ресурсы были внутри одного исполняемого файла. В общем-то он и сейчас работает отдельно, но при запуске ругается на отсутствие Help файла.

Интересное пожелание, но думаю это несколько в стороне от базового функционала сделанного во Fresh IDE.

P.S. Мне, например, цветовая схема натолкнула на мысль иметь во вкладках базовый начальный функционал программы Far manager и для того чтобы, к примеру, копировать файлы на панель проекта во Fresh без необходимости открытия дилогового меню отдельно.

На счет Far-а я не уверен, но если это IDE для ассемблера, то встроенный дисассм и отладчик должны быть! :)

Вероятно Вы правы т.к. и используемые отладчики умеют в дизассемблирование отлаживаемого кода, но как понимаю Fresh не затачивается под отладку и сторонних бинарных файлов.

P.S. В близком аспекте мог бы представлять интерес по использованию Fresh в аналогии с Ардуино IDE, но в базисе ассемблера. Может и даже с аспектом отображения программы в виде блок схемы на "одном" большом поле листа и возможностью раскрывать/скрывать подпрограммы и ветки ассемблерного кода при этом.

Попробовал, работает под FreeBSD 13.2. Спасибо!

Спасибо! Теперь смогу утверждать, что Fresh3 работает и в FreeBSD. :D

А есть ли в вашей IDE встроенный дебаггер/дисассемблер ? Я бы использовал его для дисассемблирования всякой старой всячины. Мне когда-то сильно нравился AFD.

Встроенный дебаггер в планах есть. Дело в том, чтобы сделать его универсальным – чтобы работал для всех форматов, которых может компилировать и запускать IDE. И это нетривиальная задача...

Не обязательно делать для всех сразу, достаточно для тех которые генерирует Fasm. Смысл в том, чтобы дебажить написанный в нём же код. Но вообще, я бы не отказался от маленького, юркого дебагера/дисассемблера для всех форматов ELF. В общем, вот Вам направление дальнейшего развития Вашей IDE. :)

PS: Можно начать с добавления HEX просмотрщика, а-ля Hiew.

У меня окно отображается неправильно. И в строках лишние символы, а при вводе новые символы появляются не у курсора, а сильно левее.
Первый раз встречаю такое вот в иксах. Может подскажете, в чем тут дело?

(5.10.0-26-amd64 x86_64 bits: 64 Desktop: Xfce 4.18.1; Device-1: AMD Cypress XT [Radeon HD 5870]; Display: x11 server: X.Org 1.20.11 driver: radeon)

Зайдите в Опции редактора и поменяйте шрифт на Mono вариант.
Вероятно, что это поможет.

Сразу подсказываю – у вас не установлен шрифт который я использую по умолчанию и fontconfig почему-то (хоть и вроде не должен) заменил его на пропорциональный. А редактор хочет чтобы был моноширинный. Решения: От IDE Settings|Editor options выбираете любимый моноширинный шрифт. Или меняете его прямо в Fresh3.cfg - там просто, сразу увидите где и как. Шрифты по умолчанию находятся в install/fonts/ – можете инсталлировать их сами. Скрипт: "install/install-fresh/ их тоже инсталлирует, вместе с подходящими mime-type для асемблерских исходниках и иконками для программы. А потом, install/uninstall-fresh/ их удаляет из системы.

спасибо за советы, всё заработало.

зачем писать серьезную прогу полностью на ассемблере x86? сейчас в ходу 64-битные операционные системы, плюс arm на подходе. на таких системах вашу прогу придется запускать с помощью костылей и эмуляторов. fasm это тоже касается - для запуска в 64-битном линухе его автор во что-то "заворачивал". ну и поддержка и время написания ассемблерной проги тоже хромает.

и еще непонятен выбор X11. насколько я знаю (я виндузятник), X11 сейчас меняют на wayland и похожие протоколы.

На чем автору было удобно и привычно, на том и написал. Если бы перед написанием надо было учить что-то новое, то на написание уже времени бы не осталось. Я не автор, просто озвучил своё имхо по вопросу.

вы очень сильно переоцениваете время изучения языка высокого уровня (c/c++). кроме того, к хорошему быстро привыкаешь.

Думаю, что у автора сложилась "полная" картина возможностей при использовании выбранного направления с использованием ассемблера для разработок и она позволяет делать ему проекты подобные представленному в данной статье, а это важно т.к. примерно в 90% процентах и выше развитие данного проекта автор его будет вести своими силами.

и еще непонятен выбор X11. насколько я знаю (я виндузятник), X11 сейчас меняют на wayland и похожие протоколы.

С wayland до сих пор не всё хорошо, там какие-то странные люди во главе со странной политикой, пока это выходит шило на мыло.

Пробую компилять в Linux:

/home/user/FreshIDE/Fresh3/source# env lib=../freshlib TargetOS=Linux fasm.x64 -m 362144 ./Fresh3.asm

выходит ошибка:

flat assembler version 1.73.32 (362144 kilobytes memory, x64)
./source_editor.asm [3]:
object TSourceFile, TCommonFile
./../freshlib/macros/_realobjects.inc [24] object [10]:
rept parent@countt i:1 \{
./../freshlib/macros/_realobjects.inc [24] match [2]:
rept parent@countt i:1 \{
error: invalid value.

Для "TargetOS=Win32" аналогично.

Очень странно. А откуда у вас этот fasm.x64?

И все ли как надо с исходниками? Что возвращает fossil stat в source/ и в ../freshlib/?

У меня компилируется хорошо что с 32, что с 64 битовым FASM...

johnfound /work/asmwork/FreshFs/Fresh3/source
$env lib=../freshlib TargetOS=Linux ./fasm.x64 -m 362144 ./Fresh3.asm
flat assembler  version 1.73.32  (362144 kilobytes memory, x64)
I18n strings placeholders: $80A1BA48
7 passes, 1.0 seconds, 361930 bytes.

Сорри, это я игрался с параметрами, изначально команда была такая:

env lib=../freshlib TargetOS=Linux fasm -m 262144 ./Fresh3.asm

вывод ошибок такой же:

flat assembler version 1.73.32 (262144 kilobytes memory)
./source_editor.asm [3]:
object TSourceFile, TCommonFile
./../freshlib/macros/_realobjects.inc [24] object [10]:
rept parent@countt i:1 \{
./../freshlib/macros/_realobjects.inc [24] match [2]:
rept parent@countt i:1 \{
error: invalid value.

Насколько понял, ему не нравится тип переменной в макросе.

p.s. Забыл упомянуть, система у меня 64-битная, но все 32-битные либы установлены.

Попробуйте в директориях проекта выполнить:

cd sources
fossil revert
fossil update
cd ../freshlib
fossil revert
fossil update

Точно такое у меня случилось после того как я из-за бага большое количество файлов записалось с длиной 0. Можете посмотреть нет ли у вас исходники с длиной 0 байта.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации