Помогло, спасибо!!!
Вид для печати
Вопрос к пользователям sjasm: пользуетесь ли вы директивой OUTPUT и ключом командной строки --raw примерно для того же самого?
Суть в том, что эта директива работает неправильно при использовании директивы ORG. Есть идея выпилить ее нафиг, изрядно упростив код.
Vitamin, а что делает эта директива?
Неконтролируемо. ORG может быть неявный (в макросе/дефайне).
Да.
Ну почему же. При разворачивании циклов вполне себе ок:
Ну он свою задачу делает. Правда лично у меня некоторая неприязнь к смешиванию функций генератора кода и билдсистемы.Код:dup 8
ld a,(hl)
ld (de),a
inc h
inc d
edup
org $-2
...
http://bash.im/quote/432151
Код:xxx: "Если ваша программа заработала с первого раза, обратитесь к системному программисту — он исправит ошибку в компиляторе."
xxx: В общем, SjASM для Z80 не компилит структуры без меток.
xxx: Но это у всех. У меня теперь компилит.
yyy: Поправил компилятор потому что он не компилит то, что ты хочешь? Красава!
Это я с товарищем обсуждал :)
известность !
Идем далее:)
Кто пользуется директивами MAP/ENDMAP и полями? Судя по документации, это какой-тотреш,угар и содомияаналог структур для бедных.
Да - активно пользуюсь, например если нужно ассемблировать z80 код, но не для спектрума.
Типичное начало кода:
В чём именно проявляется ? - я много пользовался косяков не заметил.Код:output rom.bin
display "Size of ROM is: ",/a,endprog
MACRO PORG addr
IF $ < addr
BLOCK addr-$
ENDIF
ORG addr
ENDM
PORG 0
jp reset
PORG $38
MIH ;main interrupt handler
reti
PORG $66 ;NMI handler
retn
PORG $100
reset
di
ld sp,$3fff
...
Это директива ORG работает не так как привыкли пользователи других ассемблеров для z80, а именно она не дополняет нулями пространство между ORG'ами. Кстати этот макрос и написан в доке как раз для того чтобы поведение директивы ORG сделать более "привычным".
Кстати такое же поведение директивы ORG есть и в ассемблере NASM для х86 машин.
Так как в доке к sjasm про это ничего не написано, приведу ссылку на доки к NASM, там этот момент более освещён.
http://www.nasm.us/xdoc/2.11.06/html...#section-7.1.1
Я таки окончательно извратился. Для загрузчиков это будет полезно - присваивает метке длину в секторах указаного файла:Проверил, работает... Память, конечно, портит.Код:MACRO fileSect lb,nm
org 0x8000
incbin nm
align 256
lb equ high $ - 0x80
ENDM
; пример использования
fileSect p3size,"obj/page3.hr1"
То есть вот так у тебя прям никак не прокатывало?
А, я понял, ты ж в трд пишешь своим mctrd. Я-то запихиваю прямо средствами sjasm, чтобы работало везде, после того, как загрузчик скомпилился и записался (т.е. пофиг на память уже)...Цитата:
ld b, high (dehrust_len+255)
Код:page 0
org #4000
dehrust
INSERT "dehrust.bin"
dehrust_
SAVETRD "SIP.trd","dehrust.C",dehrust,dehrust_-dehrust
dehrust_len equ dehrust_-dehrust
Ну я, по крайней мере, сходу не соображу как так изголиться, чтобы SAVETRD создал в каталоге файл длиной n байтов и записал в него n + 3 байта. Если только внешней тулой. У RC8 есть возможность писать бэйсики с автостартом, но сам он у меня не взлетел.
Я, кстати, обычно в процессе отладки пишу бэйсик "boot.B", а перед релизом обрабатываю trd напильником.
Всё запихивает по методу тасма. Что нагенерил = то и запихал. У меня всё так собирается, кроссплатформенно работает, удобно, без дополнительных манипуляций.
Автостарт да, Rc7 не пишет. Но вот как раз автостарт не главное, я его перед релизом своей тулзой трд обрабатываю, которая как раз прописывает автостарт и блоки в один .B собирает. Главное что сборка сама кроссплатформенная, без дополнительный программ.
---------- Post added at 11:45 ---------- Previous post was at 11:45 ----------
Он только в разобранном виде вроде был.
поддерживаю, было бы неплохо вообще выпилить всякие savebin, trd, sna и тп из генератора кода - это делает невозможным использование ассемблера для полноценных билд скриптов. Такие вещи лучше перенести в опции линкера
Как пример, одно время нужно было часто компилить код в разные форматы, приходилось каждый раз править исходник.
Раз вы не делаете под спектрум - лучше себе заведите отдельную ветку для таких модификаций типа SjasmMinus и выпиливайте там. Не надо это в основной тащить, где все привыкли и к Луа, и к savetrd.
именно под спектрум :)
Была идея сделать некое подобие студии под sjasm, с билд скриптами. Но вот наличие всех этих savetrd вгоняет в ступор, как это совместить с привычным управлением билда через параметры непонятно, не делать же парсер исходников с модификацией на лету во время компиляции?
получается перемешивание исходного кода и билд скриптов. когда исходник вмешивается в процесс билда это ограничивает возможности линкера. отсутствие таких конструкций в исходнике дает большую гибкость при сборке, зачем модифицировать исходник, когда можно просто указать параметры сборки?
Можно конечно в ассемблер добавить директивы для запуска эмулятора, для имитации нажатия кнопок, но зачем всем этим захламлять исходный код, ведь гораздо удобнее иметь один исходник и отдельные скрипты для разных конфигураций билда
С другой стороны все эти примочки захламляют код компилятора, повышая количество багов. ведь чем проще код, тем надежнее и лучше он работает. На мой взгляд логично было бы разделить задачу сборки билда и задачу генерации кода. Решать эти задачи по отдельности гораздо проще и дает большую гибкость
Жизненный пример: нужно один и тот-же исходник скомпилить с разными параметрами в разные трд. Вместо того чтобы указать эту логику в билд скрипте, приходится модифицировать исходнники...
Пойми, вас таких сборщиков на студиях по пальцам одной руки пересчитать. Остальным надо включил, текст написал, асму скормил - sna/trd получил. Всё. Это у вас с Витамином профессиональная деформация. Кто-то например в тыще файлов код пишет, потому что он так привык. Кто-то например к Action Script 3 привык, тоже не нравится ни так ни так.
Большинство людей, пишущих на асм, привыкли к спектрумскому асму как раз. И как в спектрумских асмах привыкли - так sjasmplus и работает. Всё правильно, так и должно быть. Делайте отдельные ветки, если вас так не устраивает, не надо лезть туда, где уже всё и так хорошо. Баги лучше поправьте.
Долго думал как обрулить это. Надо поддержать передачу define через командную строку, как в нормальных компиляторах.
---------- Post added at 13:06 ---------- Previous post was at 13:04 ----------
В спековских асмах это было сделано от бедности. И в sjasm этого изначального не было.
Ну, так дорабатывайте изначальный sjasm, верно? Или сделай опцию, которая отключается эти б-гомерзкие команды.
В проекте очень нужен ключ -DUSE_LUA, очень настаиваю :), т.к. давно использую lua-5.3.0 и по этой причине есть проблемы со сборкой sjasmplus :(