PC-01 Lviv
http://pc01.lviv.ua/forum/

Ещё один ассемблер для i8080
http://pc01.lviv.ua/forum/viewtopic.php?f=20&t=311
Page 1 of 1

Author:  nickname [ 03 Jul 2014, 12:49 ]
Post subject:  Ещё один ассемблер для i8080

Друзья, здравствуйте!

У меня лежит недопиленный ассемблер для i8080. Пока болел - пилил, было интересно с камнем 8080 разобраться.
Но сейчас там ещё нету, но будет: SET, EQU, ORG.
Нету макросов, но пока что для себя я их и не планирую реализововать.

Уже есть:
все инструкции
лейбы (вперед и назад)
там, где ожидаеться непосредственное значение можно написать выражение типа
LXI B, $+3*-4^3
(правда, скобки в выражениях не поддерживаються)

Сам ассемблер написан на С. У меня только линукс есть. Но, надеюсь, его не будет проблемой собрать
на любой платформе поддерживающей ansi C.

На данный момент он в качестве аргументов принимает имена файлов.
Но, объектный кот "плюет" просто на экран в шестнадцатиричном виде.

Писал я его в самообразовательных целях, плюс асма для 8080 не нашел под линукс.
Мне не хочеться его оставлять на пол пути.

Единственный вопрос, это в каком формате вы хотите видеть вывод? В виде Intel HEX или же что-то родное для lviv-pc?
Сам код на github'е:
http://github.com/vni/i8080

По мере желания и времени все-же хочу его довести до какого-то логически законченного состояния.
Спасибо!

Author:  Zelya [ 03 Jul 2014, 13:07 ]
Post subject:  Re: Ещё один ассемблер для i8080

Добрый день!
Это же просто прекрасно, иметь внятный асм для ПК-01! Думаю, сейчас сюда "набежит" Олег с пожеланиями, а я пока выскажу свое видение. Думаю, было б прекрасно, кроме HEX-а уметь формировать еще и бинарь. В таком случае, добавлением нехитрого недера в начале файла, мы можем получить готовый lvt файл. При этом, нужно чтобы ассемблер обязательно имел инструкцию, которая б задала стартовый адрес.

ПС И еще от себя, безобразного лентяя, хотел добавить, что хорошо б на мажорные релизы иметь подборочку скомпиленых бинарей :).

Author:  nickname [ 03 Jul 2014, 22:05 ]
Post subject:  Re: Ещё один ассемблер для i8080

Первым делом сделаю ORG.
Quote:
ПС И еще от себя, безобразного лентяя, хотел добавить, что хорошо б на мажорные релизы иметь подборочку скомпиленых бинарей :).
Прости пожалуйста, не понял. В какие мажорные релизы и какие бинари? : )

Да, и спасибо быстрый ответ! : )

Author:  Zelya [ 03 Jul 2014, 23:25 ]
Post subject:  Re: Ещё один ассемблер для i8080

Мажорные релизы, это более менее, прилизанные версии ассемблера (у которых major версия меняется). Сейчас Вы предлагаете только сорсы, которые нужно компилить, а ленивый я (тем более под Виндой) скорее всего этого не будет делать. А вот exe файл - самое оно :).

Author:  nickname [ 04 Jul 2014, 07:38 ]
Post subject:  Re: Ещё один ассемблер для i8080

Понял, тогда пока что добавляю функционал.
Тем более, что без того же ОРГ он не особо полезен.
Потом придумаю, как под винду собрать.
У меня её просто и близко нет. : )

Вообщем, об изменениях буду сообщать здесь. : )

Author:  Zelya [ 04 Jul 2014, 10:41 ]
Post subject:  Re: Ещё один ассемблер для i8080

Quote:
Понял, тогда пока что добавляю функционал.
Тем более, что без того же ОРГ он не особо полезен.
Потом придумаю, как под винду собрать.
У меня её просто и близко нет. : )

Вообщем, об изменениях буду сообщать здесь. : )
Да да, и без EQU тоже никуда! Вобще-то, если выйдет что-то, что понравится людям (это не мне, это еще и другим), то под Винду я смогу собирать время от времени.

Author:  nickname [ 21 Jul 2014, 15:29 ]
Post subject:  Re: Ещё один ассемблер для i8080

Прошу прощения за столь долгое отсутсвие...
Наконец-то. Сел за него. Вообщем, добавил EQU, тестовый пример с Pretty 8080 Assembler он собирает.
(Попутно понаходил ошибок, исправил.)
Ура.

Ах, да, также добавлена поддержка выдачи результата в бинарном виде.
Флажок --binary или -b.

Там ещё нету ни SET, ни EQU.

У меня есть несколько вопросов.
Читая мануал, у меня создалось впечатление, что имя для SET и EQU - это не лейбел. Тоесть, не может заканчиваться двоеточием.
Знаю, что некоторые ассемблеры для SET и EQU используют тот-же лейбел.

Мне тоже было бы удобнее добавить в ассемблер поддержку SET и EQU через лейбел.
(Чтобы не вводить туда отдельного понятия имени для псевдо-операций)
Что-то типа
ADDR: SET 5
NLEN: EQU 10
вместо
ADDR SET 5
NLEN EQU 10

Также есть ещё вопросы:
Лейбы было бы лучше иметь чувствительные к регистру или нет?
Также в том, что я читал было ограничение на длинну лейбы - 5 (или 6?) символов.

Стоит ли лейбы ограничивать по длинне?

Спасибо! ; -)

Author:  Zelya [ 21 Jul 2014, 16:21 ]
Post subject:  Re: Ещё один ассемблер для i8080

Quote:
Ах, да, также добавлена поддержка выдачи результата в бинарном виде.
Флажок --binary или -b.

Там ещё нету ни SET, ни EQU.
Жаль. Тогда, пока, я не потещу. Честно говоря, вывод не в бинарь практического смысла мало имеет. В любом случае бинарь можно запихать в HEX-редактор. Жду обновки!
Quote:
У меня есть несколько вопросов.
Читая мануал, у меня создалось впечатление, что имя для SET и EQU - это не лейбел. Тоесть, не может заканчиваться двоеточием.
Знаю, что некоторые ассемблеры для SET и EQU используют тот-же лейбел.

Мне тоже было бы удобнее добавить в ассемблер поддержку SET и EQU через лейбел.
(Чтобы не вводить туда отдельного понятия имени для псевдо-операций)
Что-то типа
ADDR: SET 5
NLEN: EQU 10
вместо
ADDR SET 5
NLEN EQU 10
Стоп-стоп. Двоеточие двоеточием, а лейба лейбой. Двоеточие же не есть частью названия, а просто указывает, что это лейба. Грубо говоря:
Code:
label1: nop
jmp label1
Сначала с двоеточием, а потом без - просто по имени. В таком окнтексте NLEN: EQU 10 - это ошибка компиляции. А вот с точки зрения использования констант и лейб, разницы, по идеи никакой. Грубо говоря, если у меня на 10000 строке стоит лейба label1, и есть константа const1, которой присвоено 10000, я могу лупить в коде и то и то, куда захочу, а компилятор поменяет их на 10000.
Quote:
Лейбы было бы лучше иметь чувствительные к регистру или нет?
Интересный вопрос. Я стараюсь писать код, чтобы любой вариант его компилил. Но думаю, все-таки, что пусть лучше будут нечувствительны. Как бы сами команды-мнемоники (MOV, ADD и т.д.) нечувствительны, поэтому пусть лучше все будет все нЕчУвСтВиТеЛьНыМ.
Quote:
Также в том, что я читал было ограничение на длинну лейбы - 5 (или 6?) символов.
А вот отграничивать - не нужно. И так код трудночитаемый ))).

Author:  nickname [ 23 Jul 2014, 15:27 ]
Post subject:  Re: Ещё один ассемблер для i8080

Такс, чуток подправил.
Теперь он читает файлы, указанные в виде аргументов. Выдает бинарь в файлах с теми же именами, только с разширением obj.
Quote:
Стоп-стоп. Двоеточие двоеточием, а лейба лейбой. Двоеточие же не есть частью названия, а просто указывает, что это лейба. Грубо говоря:
Код:
label1: nop
jmp label1
Это понятно. Имелось в виду, что перед SET и EQ может (или должно) стоять ИМЯ. ИМЯ - это просто ИМЯ без ':'. А лейба - это ИМЯ с ':'.
Поэтому и вопрос был.

Касательно чувствительности к регистру понял. Будут не чувствительны. Касательно длинны тоже понял. Ограничу чем-то вроде 32х символов (это будет константа, которую можно будет легко и безболезненно менять хоть на 128, хоть на 4096)

; -)

Author:  Zelya [ 23 Jul 2014, 17:39 ]
Post subject:  Re: Ещё один ассемблер для i8080

Quote:
Такс, чуток подправил.
Теперь он читает файлы, указанные в виде аргументов. Выдает бинарь в файлах с теми же именами, только с разширением obj.
Чудесно! А теперь еще линкер хочем ))))
Quote:
Это понятно. Имелось в виду, что перед SET и EQ может (или должно) стоять ИМЯ. ИМЯ - это просто ИМЯ без ':'. А лейба - это ИМЯ с ':'.
Поэтому и вопрос был.
это ИМЯ с ':' - это объявление лейбы. Дельше лейба кругом тоже без двеоточия используется.
Quote:
Касательно чувствительности к регистру понял. Будут не чувствительны. Касательно длинны тоже понял. Ограничу чем-то вроде 32х символов (это будет константа, которую можно будет легко и безболезненно менять хоть на 128, хоть на 4096)
Круть! Нужно будет попробовать!

Author:  nickname [ 23 Jul 2014, 18:21 ]
Post subject:  Re: Ещё один ассемблер для i8080

Quote:
Чудесно! А теперь еще линкер хочем ))))
Касательно линкера. Насколько он актуален? Насколько часто проэкты состоят из множества объектников?
Я имею ввиду те, которые для i8080 предназначены и lvov-pc01 в частности.
Да и как его делать? Есть какие нибудь reference documents которые хотя-бы описывают объектные форматы
и конкретно описывают, что линкер должен делать, чтобы я мог придумать, как это реализовать. : )

Но сначала в любом случае должен быть доведен до какой-то логической точки ассемблер.
На сейчас задача минимум - добавить ещё SET и EQ. Чтоб хотя-бы для себя поставить некую "точку" на этом.
А потом можно и дальше развивать. Но меня уже не будет так грызть чувство незавершенности. : )

Author:  Zelya [ 24 Jul 2014, 11:10 ]
Post subject:  Re: Ещё один ассемблер для i8080

Quote:
Касательно линкера. Насколько он актуален? Насколько часто проэкты состоят из множества объектников?
Я имею ввиду те, которые для i8080 предназначены и lvov-pc01 в частности.
Вобщем-то не актуален :). Но только с учетом, что Ваш ассемблер сможет собирать один obj из нескольких файлов, которые имеют референсы друг на друга.

Author:  liberation [ 09 Jan 2015, 16:41 ]
Post subject:  Re: Ещё один ассемблер для i8080

Quote:
На сейчас задача минимум - добавить ещё SET и EQ. Чтоб хотя-бы для себя поставить некую "точку" на этом.
А потом можно и дальше развивать. Но меня уже не будет так грызть чувство незавершенности. : )
Кстати, автор как-то скромно умолчал, что и SET и EQU уже добавлены в транслятор.

Page 1 of 1 All times are UTC+03:00
Powered by phpBB® Forum Software © phpBB Limited
https://www.phpbb.com/