ASAM Compiler By Rob F. / Entire Group ...
Я тут так подумал ... Вижу, что люди заинтересовались моим компилятором !!!
Надеюсь на вашу помощь, в нахождениее недочётов и ваши пожелания. Сейчас там много всяких возможностей, если что, готов рассмотреть и ваши предложения !!!
Кратко:
- Есть макросы
- Сохранение в TRD и TAP
- Создание готовых лоадеров с любым кодом внутри
- Возможность запустить во внутреннем эмуляторе только что скомпилированную программу и её данные использовать при дальнейшей компиляции
- Понятно, что есть INCLUDE, количестко которых соизмеряется памятью в вашем ПиЦи
- Можно загружать файлы прямо из TRD или TAP'ов
- Можно "не отходя от кассы" запаковать то, что откомпилировали
- Конечно же есть поддержка страниц, вам хватит 64 ???
- Сохранение в извращённом формате HEX созданный Intel'ом, так поставляются прошивки ПЗУ
- Виртуальная адресация
- Прямое копирование кусков памяти
- И что-то там ещё, я уже забываю ...
Вот на него ссылка http://www.entire.nm.ru/coding/asam.zip
Вообще-то, у меня есть ещё и эмулятор, только он ДОСовский, но эмулирует с точностью до пикселя на бордюре, плюс комманды которые не эмулируют другие эмули ... =)
Очередная версия ASAM'а ...
Ну вот ... Теперь добавил DUP !!! Только не извращайтесь, а пишите в разных строках !!! Он, конечно, понимает через двоеточие, но всё же мне кажется что где-то не замеченный баг, а то с этими двоеточиями пришлось политику асма менять !!! Я имею в виду не стоит писать "DUP 6:LD A,0:EDUP" !!!
Цитата:
Сообщение от Shadow Maker
Роб, реально, теперь ассемблируется :) только надо было написать в документации, что имя файла надо в кавычках писать. Да, еще бага:
у тебя почему-то обязательно надо писать в командах с IX/IY смещение, например LD (IY),4 - не прокатит, а вот LD (IY+0),4 - прокатит. Поправь плиз, а то дико неудобно.
Да, а почему нельзя например LD A,%11001100, то есть чтобы битами? Может добавишь? Или уже есть, только другой синтаксис?
По поводу LD (IX),x я знаю, просто не дописал табличку команд, я доделаю, но это мелочь, в сравнении с глобальными ошибками !!!
BIN то же работает, только не вначале % а в конце "B" - LD A,11001100B, но я сделаю и вначале !
Качайте: http://www.entire.nm.ru/coding/asam.zip
Если найдёте баги, сообщите !!! Кстати, из TASM'а он всё понимает, я сам всю жизнь писал в TASM'е и переводил свои работы.
Спасибо за помощь в поисках "света" ...
Цитата:
Сообщение от Shadow Maker
Есть просьб - можно добавить команду некоего немного извратного INCLUDE, при котором метки будут не глобальные, а локальные? То есть этот INCLUDE, назовем его INCLOCAL к примеру, будет работать таким образом - когда встречается INCLOCAL, компилятор ассемблирует подинклудиемый файл, но с его собственными метками, которые не передаются основной программе.
То есть выглядит так: есть 1.asm, в котором есть INCLOCAL 2.asm.
Это аналогично тому, как если бы мы сначала отассемблировали файл 2.asm, а потом его подгрузили в 1.asm как бинарник.
Ибо меня еси честно уже достало, что я называю по привычке в разных кусках программы одними и теми же метками, а при INCLUDE естессно ругается что двойная метка, вот и приходится сначала ассемблировать, а потом грузить бинарником.
Да ... Над INLOCAL я уже думал ... Но так и не сделал ... Нужно сделать ... Но вообще-то, это можно реализовать и сейчас, только думаю это не очень вам понравится, поскольку для этого нужно перелопачивать исходники ... Просто перед каждой меткой нужно поставить @, и тогда он будет думать, что это метка для макроса, после в середине INCLUD'а поставить в самом начале ".1", а в конце "..", что будет указанием на исполнение макроса, в данном случае это будет повторение один раз ... Но конено это не удобство с точки зрения дописывания этих пресловутых @ !!! Но сегодня вечером я сделаю то что вы хотите, только пусть это называется не INLOCAL, а команда AddToLabel, что будет означать к каждой метке приписать имя некоего проекта, который будет указваться в AddToLabel. Если у вас будет метка PRINT а имя проекта SuperPuper.Ofiget, то в компиляторе он её запомнит как SuperPuper.Ofiget.PRINT. После да же из вне можно будет делать ссылки на любые метки !!!
Спасибо за помощь в поисках "света" ...
Цитата:
Сообщение от Shadow Maker
Роб, бага что ли опять...
Сохраняет не 37 байт, как надо, а 36, все, что дальше 8,7,1 игнорируется в дуст. Грубо говоря длина строки DB получается 36 байт максимум. Так? Если так, то чего компилер не ругается Too long line, неясно. Молча игнорирует, подлец, и все. То есть поделить строчку на 2 можно конечно, только об этом надо знать, а компилер ошибку не выдает...
Да, что еще хотелось бы - чтобы компилер прекратил наконец издеваться и выдавать только одну первую ошибку. А то у меня на Атлоне 2000XP+ прога какая-то моя старинная в 5300 строк компилится секунд 9-10 - задалбывает такое каждый раз. Пускай до конца ассемблирует, и все ошибки либо сразу на экран выводит, либо в файл кладет errors.txt например... А лучше и туда и туда.
Ну и кроме того, по поводу вышеописанного локального INCLUDE. Можно сделать как в sjAsm MODULE (aprisobal описывал в теме про SjASMPlus).
Да, и вопрос. Листинг компилируемой программы можно как-нибудь получить? В стандартном виде "АДРЕС КОДЫ АССЕМБЛЕРНЫЙ ТЕКСТ"?
А то я что-то не увидел в хелпе такого... А может просто меня в 3 ночи плющит :)
Точно баг ... Я и вправду не проверяю на переполнение в размере строки !!! Вообще-то, её размер 256 байт, но при компиляции он прописывает вместо каждого числа или любой метке в списке оных шесть байт, как бы переводя их с фиксированный размер ... Поэтому 37 байт получились аж 222 да плюс команда ... Вообщем баг мой, я разберусь ...
У всех прошу прощение за маленькую скорость компиляции ... Я половину написал на асме а остальные добавления оставил на высоком уровне ... Как только разберёмся с багами, переведу всё на асм и будет скорость - глазом не мргнёте ... Если взять версию где-то 12-ую, то на моём 266 десять тысяч строк компилятся 5-6 секунд, теперь еонечно куча добавлений, которые затормозили скорость ... Но не волнуйтесь в итоге будет всё на высшем уровне !!!
Со списком ошибок я то же поработаю ... Там есть такая команда SaveAllLabel ... Я в этот листинг вставлю и список ошибок ... Или может сделать команду SaveAllErrors, за одно и OpenCompileResult, но эту команду нужно будет делать в самом начале асемблируемого текста !!!
Спасибо за помощь в поисках недостатков !!!