Как писать на Паскале-Си или ассемблер для Intel 8080

Рассмотрим фрагмент кода:

BEGIN
   if (Hi(Code) == 0)
    BEGIN
     BAsmCode[0] = Lo(Code); CodeLen = 1;
     return True;
    END
   else if (MomCPU <= CPU1802)
    BEGIN
     WrError(1500);
     return False;
    END
   else
    BEGIN
     BAsmCode[0] = Hi(Code); BAsmCode[1] = Lo(Code); CodeLen = 2;
     return True;
    END
END

(взято из code1802.c).

Если честно, то сходу не совсем понятно, что это за язык. Это, конечно, С, но изначально исходник был на Паскале, потом автор решил перейти на С, оставив основную часть кода практически без изменений.

Проект называется “Macro-assembler AS”, автор Альфред Арнольд. Я его использую как макро-ассемблер для Intel 8080, который собирается на Маке, Линуксе и Windows. Лучшего я пока ничего не нашел.

Как пишет сам автор, изначально проект был на Турбо-Паскале, но потом автор был вынужден перейти на С, так как Борланд остановил развитие досовских версий, и нормального Паскаля для Линукса тогда еще тоже не было. В итоге автор сконвертировал исходники в С и продолжил развивать проект в нового ключе. Несмотря на всю сомнительность затеи, по мне, сделал он это весьма удачно, и проект не умер, как это часто бывает в случаях полного переписывания большого проекта. Но хотя я склонировал проект для себя, собрал на Маке и радостно использую, не испытываю жгучего желания что-либо контрибьютить, так как для соблюдения стиля надо писать на этом гремучем Паскале-Си. Увы, это неизбежное следствие конверсии, иначе проект превратится в помойку. Если поелозить по исходникам, можно найти много интересных трюков типа “как сделать так, чтобы Си работал как Паскаль”.

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

P.S.

У нас в компании была похожая ситуация. Часть нашего продукта - это бейсикоподобный язык (DSL), ориентированный на работу с базами данных. На нем пишется бизнес-логика банковского продукта.

Язык был разработан не вчера и поэтому немного старомоден. Но на нем написаны мириады строк кода лидирующего на рынке продукта. Разные попытки “заменить” язык на что-то “более новое и современное” и затем сконвертировать основную кодовую базу, к счастью, не получили хода. Сейчас мы прекрасно компилируем наш язык в Си, Яву и даже .NET, и очень, очень постепенно вносим крайне взвешенные незначительные изменения в сам язык. И это работает удивительно хорошо.


Disclaimer

Комментарии