Тема: Пакет MADPascal + MADAssembler
Привет всем!
В дополнению к соседней теме о CC65, но для тех кто предпочитает Pascal, а не С (каковым я и являюсь) возможно заинтерисует кросс-компилятор с паскаля под 6502 - MADPascal.
Разработан польской командой программистов под Atari (http://mads.atari8.info/doc/madpascal.html) на основе реализации языка паскаль от Терешкова В. под x86 (https://habr.com/ru/users/tereshkov/posts/). Представляет из себя транслятор с языка Pascal в ассемблерный код, который затем транслируется в объектный код транслятором с ассемблера 6502 от тойже команды (MADAssembler http://mads.atari8.info/ ).
Реализует подмножество языка Pascal в объёме близкому к TurboPascal 6.0 с некоторыми ограничениями.
Изначально они его разрабатывали для Atari так что напрямую аппаратно зависимые процедуры модулей входящих в комплект использовать не получится, но, если использовать тексты библиотек как основу, можно их модифицировать с учётом аппаратных особенностей АГАТа.
Из достоинств - как и Турбо-Паскаль позволяет создавать проекты как на чистом паскале, так и с ассемблерными вставками в коде и/или с внешними асм-процедурами. Набор текста можно делать в каком-нибудь текстовом редакторе (например Notepad++) или в современной IDE Паскаля (например Lazarus, Delphi или тотже BorlandPascal 7.0). Если использовать IDE, то можно также частично сделать отладку - только надо закомментировать системно-зависимые поцедуры/асм-вставки.
Для примера во вложении программа рисования линий в двух графических режимах АГАТ-9 - МГВР и ЦГВР.
Чтобы откомпилировать пример надо скачать исходники MADPascal с https://github.com/tebe6502/Mad-Pascal,
в корень каталога положить трансляторы MADPascal "mp.exe" и MADAssembler "mads.exe" (также есть во вложении).
компилируем
mp J:\MAD\MADPascal\projects\Primer\LineTest.pas -code:8001 -zpage:58
mads J:\MAD\MADPascal\projects\Primer\LineTest.a65 -b:8001 -l -x -t -i:J:\MAD\MADPascal\base\ -o:J:\MAD\MADPascal\projects\Primer\LT.BIN
где
"J:\MAD\MADPascal\projects\Primer\" - путь с исходниками примера (LineTest.pas и GR.pas);
"J:\MAD\MADPascal\base\" - путь к библиотекам для mads (каталог "base" в корне исходников MADPascal);
"8001" - шестнадцатиричный адрес начала генерации кода;
"-zpage:58" - адрес с которого в нулевой странице будут располагаться необходимые для программы ячейки (адрес $58 - выбрал с учётом того чтобы сильно не мешать ИКП бейсику и дос3.3) - будет занято 24байта под "систему" и 64байта под эмуляцию стека - т.е. в сумме 88байт;
В итоге получаем файл LT.BIN который складываем с помощью утилиты dos33c2w (с этого сайта) в какой-нибудь файл образа диска АГАТ с бейсиком или ИКП по "F9\Импорт\Двоичный B-файл без перекодировки".
Для запуска в бейсике набираем
BRUN LT.BIN,A$8001
(Некоторое замечание по mads - в оригинальной версии от разработчиков в итоговый бинарный файл вначале добавляются два байта "$FFFF". Возможно это имеет значение для Atari, но в случае АГАТа они не нужны, так что во вложении модифицированный файл mads.exe - ничего не добавляющий в префикс результата.)