ZXMAK, попробуйте zmac.) Он может hex на выходе. И у него много разных фишек.
Вид для печати
ZXMAK, попробуйте zmac.) Он может hex на выходе. И у него много разных фишек.
В данном случае я компилировал патч для клавиатуры к jetpac. Пишется org и команды который нужно скомпилить. Далее следующий org и следующие команды. Между концом команд предыдущего org и нового в памяти лежит код, поэтому писать туда ничего нельзя.
Кстати оказалось, jetpac вполне играбельный при использовании нормальных кнопок управления QAOP SPACE. Помню с дефолтными кнопками у меня не хватало терпения даже одну ракету собрать :)
В аттачменте патч в hex файле. Использовать так - ставим точку останова на #6000, загружаем jetpack из tap, когда окажемся на точке останова загружаем hex патч. Можно играть. В аттачменте также уже пропатченый szx снэпшот.
похоже то, что нужно - понимает нормальный синтаксис Z80 асма :)
Правда есть много разных модификаций zmac.
Удивительно, насколько старый и мощный ассемблер и так малоизвестен, был написан еще в 1978 году Bruce Norskog...
Насколько понимаю последняя версия оригинала подчищенная и доработанная тут: http://www.tim-mann.org/trs80/zmac13.zip
Наиболее близкий к этой версии более современный вариант, в нём только мелкие фиксы: https://gitlab.com/jengun/zmac
Мне эта версия понравилась, на ARM64 исполняемый файл всего 80 кБ, недокументированные инструкции понимает,правда hex не умеет писать, но думаю это не проблема поправить.:)
Update: чтото я недосмотрел, оказывается в оригинале есть вывод в hex, опция -h.
Есть еще вот такой вариант: https://github.com/gp48k/zmac
В нем есть много других доработок, но мне она не нравится тем, что в неё напихали кучу всякого мусора вроде записи WAV файлов и т.п.
Я считаю таким фичам не место в ассемблере, WAV и снэпшоты можно сделать отдельными программами.
Да, я именно этот имел ввиду, как наиболее свежий. Извиняюсь что сразу не дал ссылку: http://48k.ca/zmac.html).
а поддерживает ли zmac макросы с переменным числом аргументов?
например:
можно это сделать одним макросом print_code, который при наличии v2 будет делать дополнительный вызов rst #10?Код:print_code1 macro vcode,v1
ld a,vcode
rst #10
ld a,v1
rst #10
endm
print_code2 macro vcode,v1,v2
ld a,vcode
rst #10
ld a,v1
rst #10
ld a,v2
rst #10
endm
M80 это можно делать через ifb/ifnb. Тут этого нет. Можно попробовать через if (!)nul &v2, но не уверен. Как то по каличному.)
Наверно if !nul &v2. Это я так написал "с ! или без". Или if nul &v2 exitm.
Не поленился, проверил. Работает. Только у меня rst $10 или 10h.