crypt of decay [entries|archive|friends|userinfo]
ketmar

[ userinfo | ljr userinfo ]
[ archive | journal archive ]

пост для желающих помочь мне материально [Oct. 7th, 2032|04:48 am]
уважаемый анонимус всё‐таки убедил меня, что сделать такой пост стоит. итак.

это верхний пост для тех, у кого образовался избыток денег и очень хочется их кому‐нибудь (мне) отдать; или для тех, кому просто по каким‐либо причинам хочется мне помочь деньгами на жизнь. под катом реквизиты украинского приватбанка, на которые вы можете это сделать. а если вы по каким‐то причинам хотите помочь в USD или EUR, то это, в принципе, тоже решаемо, пишите в каменты. к сожалению, другие платёжные системы нит. извините.

каменты скринятся. если хотите расскрина — напишите это прямо в каменте.

также здесь будет текущий статус: жив, жопа приближается, полный пиздец, такое вот. это на тот случай, если вы хотите помогать на выживание, но предпочитаете выпить пива, если мне не критично. «жив» — это значит, что на текущий месяц мне хватит на еду, коммуналку и интернеты (а больше мне не надо). «жопа приближается» — это значит, что подходит конец месяца, а на следующий запасов ёк. это я постараюсь вешать за неделю‐полторы до. «полный пиздец» — это значит, что нужно прямщазсрочно, времени осталось в обрез считаные дни, потому что случилось что‐то непредвиденное (или никто не спас вовремя от приближающейся жопы).


статус: пиздец 5/10.
если кто удивляется долгой несмене статуса — так это потому что Стабильность.


спасибо тем, кто поддерживает (и/или поддерживал), и тем, кто просто не гадит здесь в каменты.

p.s.: спрятан. можно почитать в коде страницы. также уважаемый анонимус предложил повесить сюда CV, но я нафиг не знаю, что там писать. тупо список умений будет огромный и бессмысленный, а чем я хочу заниматься завтра — я и сам не сильно в курсе. это может быть каждый день разное, предсказать невозможно.

просто и удобно всё сделать через btc:
bitcoin: 3KiBU1Rk7Bny1CQKbrQ7WgaCo52fkBgNH8

Read more... )
Link251 абырвалг|абырвалг!

для матюгов [May. 5th, 2024|09:23 am]
оказывается, у меня был верхний пост для матюгов, а потом куда‐то проебался. искать лень, поэтому сделаю новый. каменты торадиционно скринятся.

загляни под кат, ну чего ты в самом деле? )
Link504 абырвалг|абырвалг!

k8vavoom, мой форк Vavoom [Dec. 28th, 2021|01:04 am]

idea by wrkq, artwork by ar888

ах, да. возможно, вы не знаете, что такое Vavoom. так вот: Vavoom — это один из сурспортов (движков) для игры в Doom. тот самый оригинальный дум почти тридцатилетней давности. да-да, он живее всех живых, и на думворлде каждую неделю появляется минимум один топик с анонсом новой карты.

репа вавум-форка тут.

и тема на DoomWorld. сайта у меня нет.

много текста подкотэ )
Link166 абырвалг|абырвалг!

странные дела творятся, однако [Sep. 14th, 2020|06:54 pm]
погонял урфортом бенчмарк от Forth Inc. в целом, UrForth примерно в 1.8 раз медленней, чем bigForth. учитывая, что bigForth генерит машинный код — результат меня вполне устраивает. а вот с SP-Forth вышло что-то странное: он почти не быстрее UrForth (т.е. значительно медленнее bigForth). это очень удивительно, потому что там тоже машинный код, и весьма навороченый оптимизатор. очевидно, я сделал что-то не так, потому что включение/выключение оптимизатора не повлияло ни на что. похоже, что в dev-сборке он сломан, и на выходе получается тупой лобовой stc. который да, не будет так уж сильно быстрее — почти все преимущества native code проебайтунг из-за щёлканья стеками.

в любом случае — меня такая скорость устраивает. я, конечно, мог бы переключиться на генерацию native code, но особого смысла в этом нет. а код усложнится весьма сильно (потому что без оптимизатора выигрыш будет никакой, так что оптимизатор тоже пришлось бы делать). в практическом смысле скорость отличная.

по ходу добавил поддержку floating point (с очень уёбищными парзером и печаталкой, которые не обеспечивают roundtrip), и даже собрал шахматную программку TSCP. на удивление — она заработала (после небольшой рихтовки).
Link2 абырвалг|абырвалг!

о бедном глобале замолвите слово... [Sep. 14th, 2020|12:08 am]
[Tags|]

«хороший стиль программирования» — вещь местами очень зависимая от языка. например, выносить одно короткое выражение в отдельную функцию на сишечке — редко когда будет хорошим стилем. в форте всё примерно наоборот. (ну, плюс-минус погода на луне, как и с любым общим утверждением.)

то же самое относится и к глобальным переменным: принято считать, что глобалы — это плохо. хотя опять же: смотря какие. глобальные переменные уровня модуля, например, уже не всегда считаются абсолютным злом: это, вроде как, внутреннее дело реализации, находится в более-менее контролируемом окружении, поэтому не так страшно. у форта есть средства организации модулей (словари), но на деле программа обычно представляет из себя группы в пол-десятка/десяток слов, которые по сути являются независимыми модулями, но обычно не выносятся в отдельный словарь (потому что с этим больше хлопот, чем профитов). поэтому в форте намного чаще используют глобалы — и ничего страшного в этом нет.

собственно, я как раз о том, что не бойтесь создать глобальную переменную, если форт-код просто напрашивается на это. если вы разбивали-разбивали слово на кучку других, но всё ещё приходится таскать за собой сито на палке по всему этому коду — оно так и просится быть положеным в глобальную переменную. как и во многих других вещах, понять, когда вы просто неправильно разбили, а когда просится глобал — дело скорее опыта и чутья, чем каких-то формальных правил. но если явно видно, что один глобал сделает весь код понятней и чище — не сомневайтесь, делайте глобал. только не надо пытаться реюзнуть какой-то временный глобал, который уже есть в другой части программы: если вам нужен глобал именно здесь — и объявите его именно здесь. даже на восьмибитках это было дёшево, а сейчас и тем более.

если же вдруг есть переживания по поводу того, что вдруг придётся потоки тащить, а мы уставшие и с глобалом — то для этого в форте придуманы user variables. аналог thread locals. если понадобится — замените вашу variable на user-variable, и все дела.

да, в форте можно делать локальные переменные (элементарно добавляются в компилятор), но никаких особенных выигрышей они не дают. наоборот, способствуют написанию плохого форт-кода, потому что позволяют вместо разбивания большого плохо контролируемого слова на части поменьше зафигачить огромную простыню. это не то, как имеет смысл писать на форте. именно поэтому в UrForth из коробки локалов нет: мне не нужно. и глобалов там тоже очень мало, но в Стратегических Местах я спокойно их создаю и использую. а, и ещё локалы медленней глобалов, потому что требуют пролога и эпилога, уменьшая этим преимущество разбиения на маленькие слова.
Link2 абырвалг|абырвалг!

в удобной позе значительно приятней! [Sep. 8th, 2020|07:03 am]
с рабочим метакомпилятором пилить значительно удобней, однако. хоть фасмовый исходник и был похож на форт благодаря макросам, но всё же не оно. починил несколько мелких ошибок, заодно добавил в метакомпилятор возможность создавать новые словари. в фасме это тоже можно было сделать, но хлопотно. а поделить систему на дополнительные словари — удобно. заодно докинул реализацию search order wordset из стандарта. который наглухо ёбнутый всё равно: вот зачем FIND принимает не обычные «адрес длина», а byte-counted string? у меня такое было в самом начале — потому что тяжёлое наследие FIG. и я быстро от этого избавился. а они до сих пор тащуть.

также должен сказать, что я уже несколько отвык от того, что пока я отпускаю enter и вдупляю, что должно быть, система уже три раза успевает себя пересобрать, и два раза прогнать тесты. потому что сборка идёт так: «эталонный» компилер собирает новый, новый собирает ещё один новый, сравниваются их хэши, и оба этих новых прогоняют тесты.
Link2 абырвалг|абырвалг!

всё, переехал на полный селфхост [Sep. 7th, 2020|09:27 am]
исходники level 0 переместил в отдельный каталог (пусть лежат, вдруг с фасма бутстрапиться придётся когда-то, гыг). всё, что из того ядра повытаскивал наружу — затащил обратно в ядро level 1. время сборки версией с отладчиком — около 180 миллисекунд, без отладчика — около 120.

ну да, отладчик добавляет один indirect jump. в принципе, можно патчить напрямую «doforth» (разогрев интерпретатора форт-слов), тогда никаких тормозов не будет вообще. но потеряется простая и изящная реализация step/step-over: придётся впатчивать брейкпоинты.

в принципе, меня пока устраивает как есть, тормоза не такие большие (60 мсек на ~250 кб смешаных исходников на форте и асме). возможно потом реализую вариант с хотпатчингом как дополнительную опцию. посмотрим. тащемта, пора переходить к созданию Репла Мечты. но это долгое дело, я ещё даже не полностью уверен, каким именно я его видеть хочу.
Link16 абырвалг|абырвалг!

как и было предсказано [Sep. 7th, 2020|05:22 am]
йа дабил! то есть, я это много раз кричал, пока правил тупые баги, но наконец СЛУЧИЛОСЬ! UrForth level 0 собрал UrForth level 1. а потом UrForth level 1 снова собрал UrForth level 1 с нуля. и у них совпали md5. теперь UrForth официально self-hosting.

в level 1 портировано абсолютно всё, включая отладчик (который я думал выкинуть, но в свете того, что он систему почти не тормозит, а ещё не раз пригодится, пока я буду пилить нормальный repl — оставил).
Linkабырвалг!

faster than light [Sep. 6th, 2020|07:42 pm]
благодаря моему охуительно высокому интеллекту (который я никогда не использую ни вовремя, ни вообще), instrumented urforth (то есть, с отладчиком) теперь медленнее версии без отладчика всего лишь в ~1.5 раз. соответственно, сборка новой системы метакомпилятором занимает вместо секунды с лихуем всего лишь двести миллисекунд (ну, ближе к триста, но 9.99 -- это же не 10!). в принципе, поиск меток там сделан тупо по линейному списку, так что ешё раза в полтора-два можно ускорить, если перейти на хэш-таблички, но пусть сначала оно заработает.

ах, да. перенёс весь код в метакомпилятор, и оно даже собирается. правда, созданый бинарник выдаёт в терминал какой-то абырвалг и падает; но в принципе — со стороны это не очень сильно отличается от обычной форт-сессии. судя по тому, что оно пытается там нарисовать — это segfault handler на что-то намекает, но невнятно.
Link7 абырвалг|абырвалг!

почти прилетели [Sep. 6th, 2020|02:28 am]
портировал почти весь код урфорта под метакомпилятор (который, кстати, смержил с основной репой). конечно, оно ещё вылетает на неотрезолвленых форвардах, да и в метакомпиляторе наверняка куча багов, но волшебными пассами проверил размер — уже почти 40 кб бинаря собирает. а базовое ядро — 54 примерно. естественно, после того как заработает — я обратно в ядро затащу всё, что повытаскивал, чтобы было толстое и красивое. потому что я вытаскивал только затем, что портировать поменьше будет.

в общем, если мне не будет лень, то завтра же должна взлететь селф-хост версия, ака UrForth level 1. под неё надо будет чуть-чуть рихтануть асм (я по дороге пару изменений сделал) — и можно сладко течь от бесконечного цикла, в котором урфорт собирает новый урфорт, чтобы собрать новый урфорт, чтобы…
Link6 абырвалг|абырвалг!

целевая компиляция [Sep. 4th, 2020|12:42 pm]
идею использовать системный компилятор заодно и как целевой я выкинул. нет, она потенциально рабочая, но если я вдруг захочу поменять какую-то часть системы или кодогена — то, очевидно, не смогу. и всё равно придётся делать отдельный целевой компилятор. а поскольку я обязательно захочу, то лучше уже сразу.

в общем, ассемблер уже генерит рабочий код в целевом буфере, и весьма существенная часть компилятора портирована: создание заголовков слов, поддержка структуры словаря, conditional и loops. всё пытается делать код в целевом пространстве. больше половины метакомпилятора сделано. заодно можно использовать урфорт просто как ассемблер: он создаёт вполне рабочие бинари без лишнего мусора, если не определять форт-слова.

в общем-то, создание целевого компилятора сводится к добавлению ко всем словам работы с памятью префикса «tc-». можно было обойтись и без этого: просто создав словарь с подменёнными определениями и пересобрав с ним обычный компилятор. может, потом я так и сделаю. а пока мне удобней глазами видеть, где у меня tc. когда система сможет себя пересобрать в такую же рабочую систему — тогда и буду улучшать и чистить. а пока задача — со всей этой хуйнёй хоть как-то взлететь.
Link3 абырвалг|абырвалг!

начинаем начинать [Sep. 2nd, 2020|09:27 pm]
потихоньку начал выносить из фасм-исходников урфорта слова, которые ядро не использует, и может при запуске догрузить из внешних сырцов. получилось забавно: система взлетает даже без if/else/begin/while. вообще. первым делом компиляет из исходников if/else, потом использует их, чтобы скомпилять begin/while, которые использует, чтобы скомиплять break/continue… мало какому языку удаётся начинать бутстрапиться даже без условных операторов, гыг.

жаль, вынести из ядра весь компилятор не выйдет…а хотя… в «CREATE» одно условие, которое можно заменить умножением, в «:» вообще условий нет, в «;» одно, но оно только для вставки дебаг-инфы, это можно добавить потом… кажется, можно поднять компилятор даже без рабочего компилятора, по запчастям. ;-)
Link1 абырвалг|абырвалг!

сисколы и эльфы [Sep. 2nd, 2020|02:26 pm]
сделал, наконец, Очень Сложный Сискол sys_clock_gettime. и сразу же померял скорость компиляции исходников, конечно. 173 кб форт-кода (дизасм и асм) грузится и компилируется за 65 миллисекунд. без хэш-таблички почти в два раза дольше — около 115. fasm собирает исходники системы где-то около 300 мсек, кстати, и требует 42 мегабайта памяти.

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

заодно повыкидывал фасмовые макросы для создания динамик-эльфов, и сделал то же самое руками. потому что мне не нужно универсальное. в итоге оказалось, что сделать эльф с динамической линковкой ни разу не сложнее, чем сделать статический. что приводит нас к отвратительной документации по формату. реально отвратительной. судя по тому, что обычно люди первым делом пишут статику (а потом часто даже не пытаются динамику), и по моему личному опыту — мы все спотыкаемся об одно и то же: охуительно переусложнённые описания формата, с секциями импорта, секциями секций, секциями таблиц, таблицами секций, таблицами таблиц и прочей хуетой. которая вся, скопом, вместе со всей дебильной механикой секций — не нужна вообще. однако про это если где-то и упоминают, то очень вскользь, и так, чтобы читатель точно не заметил. в итоге скрафтить такого эльфа даже проще, чем PE. видимо, если про это написать нормальными словами, то будет несолидно: что это за говноформат такой, в котором всё сразу понятно и просто? я всё ещё считаю, что формат переусложнён, но то, что почти всё говно там опционально — радует. если бы только кто-то озаботился это ещё и нормально документировать…

p.s.: забавно, upx может запаковать бинарь урфорта, но не может распаковать. видимо, пакеру насрать, а депакер не готов к радикальному минимализму.
Link10 абырвалг|абырвалг!

UrForth, словари [Sep. 1st, 2020|12:57 am]
поскольку количество слов в ядре перевалило за 700, запилил вместо тупого линейного поиска хэш-табличку. в принципе, даже линейный поиск был быстрый, потому что длина имени хранится явно, и early reject по ней отбраковывает кучу слов. но с хэш-табличкой ещё лучше. 256 байт на словарь, folded elf hash, и получилось вот так:

VOC: FORTH — 806 words, 64/64 buckets, 4 min, 21 max, average per bucket: 12
VOC: DISX86 — 318 words, 64/64 buckets, 1 min, 12 max, average per bucket: 6
VOC: ASMX86 — 221 words, 63/64 buckets, 1 min, 9 max, average per bucket: 5
VOC: LEXER — 37 words, 28/64 buckets, 1 min, 3 max, average per bucket: 2
VOC: INSTRUCTIONS — 392 words, 64/64 buckets, 2 min, 13 max, average per bucket: 7
VOC: ASM-LABMAN — 60 words, 45/64 buckets, 1 min, 4 max, average per bucket: 2
VOC: ASM-META — 5 words, 5/64 buckets, 1 min, 1 max, average per bucket: 1

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

кстати, ~170 кб исходников асма и дизасма компилятся быстрее, чем fasm собирает сам UrForth (~280 кб сырцов). справедливости ради — фасмовые сырцы настолько плотно обмазаны макросами, что там чистого асм-кода, пожалуй, меньше чем макро.
Link7 абырвалг|абырвалг!

о, одно к одному [Aug. 31st, 2020|03:29 pm]
дегенераты исследуют дегенератов. кстати, хороший пример того, что являет собой современная «наука». да, автор не особо учёный-хуёный, но Типа Большие Учёные — точно такие же жопорукие уебаны, никакой разницы вообще. точнее, разница есть: они ещё хуже.
Link3 абырвалг|абырвалг!

почему писать на форте «сложно» [Aug. 30th, 2020|04:24 pm]
[Tags|]

помимо претензий к RPN (которые мы отметаем как несостоятельные), к форту обычно предъявляют ещё одну претензию: «надо же постоянно за стеком следить, постоянно ним жонглировать, это сложно, ошибаешься на раз!» как только вы слышите такую претензию — сразу можете быть уверены, что человек форта не знает, и писать на нём не умеет.

нет, он может знать синтаксис (ну, насколько он в форте есть вообще), и даже помнить кучу слов. но языка он не знает, и писать не умеет. потому что если в коде на форте начинаешь «путаться в стеке и жонглировать им» — всё, ты уже всё делаешь неправильно.

форт — это не язык типа сишечки. слово форта, которое состоит всего из трёх-пяти других слов — это не исключение, это единственно правильный способ писать на форте. и вот когда в форт приходит человек с опытом других языков, он автоматически начинает вместо кучи мелких слов делать огромных монстров на кучу экранов — в которых, натурально, ебанёшься следить за стеком. не надо так, это неправильно и неудобно.

в отличие от «обычных» языков, создание нового слова («слово» в форте — это примерно то же самое, что «процедура» или «функция» в других языках) не требует никакого большого синтаксического сахара. и вызов тоже. если в сишечке, например, надо объявлять параметры, и потом упорно их передавать явным перечислением, то в форте это всё не нужно. и накладных расходов на вызов слова в форте намного меньше, кстати.

то есть, разбиение большой функции на более мелкие в «обычных» языках помимо намного большей писанины ещё и добавляет расходов на постоянное заталкивание в стек параметров и доставание их оттуда. (да, современные компиляторы умеют передавать параметры в регистрах, но кардинально это сути не меняет.) в форте этого нет, слова можно просто вызывать цепочкой, никаких накладных расходов на постоянную передачу параметров не существует: параметры просто лежат себе спокойно на стеке и ждут, пока их используют.

под катом длинный и нудный пример как не надо и как надо.
резать тут )
Link58 абырвалг|абырвалг!

иетакомпилятор [Aug. 30th, 2020|12:13 pm]
подумал, что метакомпилятор для UrForth — это ведь на самом деле точно тот же самый код, который уже работает там компилятором. по сути, всё, что надо, чтобы сделать из него мета — по необходимости подменять ALLOT, CREATE, да пару слов, которые правят адреса переходов. для чего запилил слово OVERRIDE, которое позволяет system-wide подменить одно фортовое слово на другое, с возможностью позвать старое. все слова, которые генерят адреса переходов, в конце концов используют для этого три-четыре базовых слова, которые и надо подменить. ну, и немного мелочёвки типа LATEST. и тогда простым движением руки обычный компилятор превращается в метакомпилятор, и обратно. если менять формат словарной статьи — ещё одно слово поиска по словарю подменить. или вообще тупо читернуть и создать отдельный скрытый словарь, где будут создаваться просто форварды. видимо, таким путём и пойду.

кстати, теперь, с OVERRIDE, можно кучу слов обратно девиртуализировать. нет никакого смысла делать их как defer, когда их спокойно можно оверрайднуть (или вообще сделать REPLACE).
Linkабырвалг!

...обязательно влезет говноед... [Aug. 29th, 2020|07:40 pm]
интересный вопрос. и, как полагается, в первых же каментах сразу влезли два говноеда. один с «In sum, 85% of the time, individuals never matter. Teams hit their targets or they don't, as individuals come and go» (поэтому я ебал вашу «работу в команде»: если я неважен, то «команда» мне тоже похуй); другой с «the entire compiler and/or runtime would be a few thousand lines of code — small enough that one person could hold the entire thing in their head. No longer. Such a language today would be considered a toy, even by the low standards of a college student working on a term project.» — тоже нахуй идёт, вместе с уёбищным жирным дерьмом, которое он считает «неигрушечным».

к сожалению, это не единичные эксцессы. то есть, такие уёбки зачем-то читают ltu (довольно нишевый гиковский ресурс), и даже пишут туда комментарии. в других местах таких уебанов вообще подавляющее большинство. поэтому всяческое «айти» давно сдохло и отвратительно смердит, разлагаясь.
Link25 абырвалг|абырвалг!

секс и эльфы [Aug. 28th, 2020|10:37 am]
выебал эльфа намедни. отчасти закрывая старую травму: я уже пытался когда-то, но, сука, решил по всему официальному этикету начать. а там пиздец, хуй поймёшь что после чего и что массировать первым — особенно если хочешь динамику. однако же мне надо — потому что UrForth во-певых, должен уметь записывать свой работающий образ обратно на диск, а во-вторых, метакомпилятор вообще такой образ с нуля должен строить.

UrForth, как известно всему миру, пока собирается fasm-ом. fasm же умеет делать эльфов-миджетов, хирургическим путём усекая всё лишнее. да, в интернетах типа дохуя таких примеров, но все они делают static linking. а мне надо dynamic, с импортом libdl. и fasm умеет как раз такое. эльф вообще без секций, безо всяких там гот-плт, из четырёх сегментов, минимальней некуда. самое интересное то, что даже таблица импортов (а она у эльфов весьма ебанутая) формируется макросами, написаными на самом фасме, а не захардкоженым обработчиком.

в общем, в таком минимальном виде даже понятно, как оно всё получается. вообще, что эльф, что PE — это упражнения в сферическом ебанатизме: во все стороны торчит легаси, которое приходится носить с обой По Историческим Причинам, незаживающие язвы Гениальных Идей По Будущим Расширениям, и опиздинительно мутированые переусложнённые простые вещи. потому что если делаешь один формат, который может использоваться для хранения нескольких совершенно разных штук — ты уже на этой стадии проебался. и эльф, и pe могут хранить как исполняемые бинари, так и объектные файлы для линкера. при всей соблазнительности идеи: «да это же частные виды одного и того же процесса!» — оно совсем не так. (и это поняли даже авторы, предпочтя в итоге для объектников другие форматы.) что в эльфах, что в pe от такого решения валяются бесполезные ошмётки, которые затрудняют как понимание, так и реализацию. в эльфах, чтобы не было скучно, ещё добавили деление на сегменты и секции — потому что зачем ограничиваться одной сущностью там, где можно ввести две?! в импортах и экспортах вообще адский ад с кучей вариантов, ехал индирект через индирект индирект индирект индирект. это всё настолько уёбищно, что авторам пришлось придумывать механизм внешних загрузчиков: динамические импорты в эльфах обрабатываются не ядерным загрузчиком, а отдельным юзерленд-бинарём, полный путь к которому задаётся в исходном бинаре. иначе, видимо, их уёбищные космосферические фантазии никто реализовывать не хотел. и не надо сказок про: «это же охуеть круто, расширяемость!» это засраный костыль, чтобы говноформат не послали сразу нахуй.

весь этот прискорбный катаклизм от того, что форматы сочиняли ебаные «комитеты». которые завсегда «чтобы расширяемо и универсально», а в итоге выходит намного хуже, непонятней, неудобней и нерасширяемей, чем если бы всю херню сдизайнили один-два инженера без оглядки на идиотов. всё, что дизайнят «комитеты» — говно. если только «комитет» не заставляют стандартизировать то, что уже де-факто используется, и было сделано одним умным человеком (как IEEE floats).

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

а UrForth уже имеет полноценный ассемблер, да. с поддержкой локальных и глобальных меток в стиле fasm (потому что мне фасмовый код транслировать). правда, однопроходный, поэтому для forward references всегда генерируются длинные варианты команд. похуй, меня устраивает, нет смысла ради этих байтов ебаться с многопроходностью — весь мой асм-код написан в Охуенно Оптимальном Стиле Z80 (я даже сделал частичную поддержку синтаксиса Z80), поэтому самое время оптимайзить переходы, ага.

p.s.: всё это, кстати, затевалось для того, чтобы написать игру на спекки. go figure.
Link5 абырвалг|абырвалг!

медленно, но неотвратимо... [Aug. 22nd, 2020|06:14 pm]
…двигаюсь к UrForth level 1. дизасм уже был, теперь запилен и отлаживается асм. с нормальным синтаксисом, а не йода-стайл. уже знает кучу команд, и умеет компилить сложности типа «lea ebx,[edx*4+6]» (то есть, универсальный sib/mod/rm). когда допроверю «mov» и несколько других спецкоманд, можно будет потихоньку пилить метакомпилятор.

вообще, level 0 планировался минимальным, а основная разработка должна была быть в level 1, но каким-то образом в level 0 образовалось больше шестисот слов, и он проходит все актуальные тесты ans (после правок под специфику моей системы). оно, конечно, не страшно: всё перейдёт в level 1, не пропадёт мой скорбный труд. но чота я дофига увлёкся нулевым уровнем.
Link5 абырвалг|абырвалг!

navigation
[ viewing | most recent entries ]
[ go | earlier ]