Дзен компиляции ужасмом, создание трд, и запуск анрила из bat(cmd)-файла
К вопросу (не)умения пользоваться командной строкой виндовс для компиляции и сборки проектов для спекки.
Мой дзен получился в такой последовательности и наборе:
1. Все утилиты и рабочие файлы находятся на одном диске. У меня это диск К:. Все находится в облаке в папочке ZX и командой subst цепляется на диск К: — в результате на любом моем компе все находится по одному пути, хотя в данном конкретном случае это неважно.
2. В корне диска имеем 2 папки: с рабочими проектами и утилитами — в моем случае это _work и вложенной _utils. В данном примере в папке утилит должны лежать ужасм и trdtool.
3. Проекты располагаются в отдельных папках внутри _work
4. Именем проекта (и соответственно именем файла) является имя папки — самая главная фишка этой мутотени.
6. Внутри папки проекта должна содержаться папка sourses и в ней файл main.asm — именно он и компилируется, это основное требование моего метода.
7. Также папка проекта должна содержать файлы make.cmd и make_trd.cmd — об этих файлах подробнее далее.
make.cmd
Строки
соответственно задают путь и имя файла анрила
make_trd.cmd
Сохранение бинарника в main.asm должно выглядеть так
В дальнейшем достаточно копировать эти два батника из проекта в проект и при необходимости менять адрес загрузки при создании трд.
Мой дзен получился в такой последовательности и наборе:
1. Все утилиты и рабочие файлы находятся на одном диске. У меня это диск К:. Все находится в облаке в папочке ZX и командой subst цепляется на диск К: — в результате на любом моем компе все находится по одному пути, хотя в данном конкретном случае это неважно.
2. В корне диска имеем 2 папки: с рабочими проектами и утилитами — в моем случае это _work и вложенной _utils. В данном примере в папке утилит должны лежать ужасм и trdtool.
3. Проекты располагаются в отдельных папках внутри _work
4. Именем проекта (и соответственно именем файла) является имя папки — самая главная фишка этой мутотени.
6. Внутри папки проекта должна содержаться папка sourses и в ней файл main.asm — именно он и компилируется, это основное требование моего метода.
7. Также папка проекта должна содержать файлы make.cmd и make_trd.cmd — об этих файлах подробнее далее.
make.cmd
rem make.cmd
@echo off
setlocal enabledelayedexpansion
set currDir=%cd%
set currDisk=%~d0
cd ..
set PROJECT=!currDir:%cd%\=!
cd %currDir%
:MAIN
@echo Project: %PROJECT%
SET UTILS_PATH=%currDisk%\_Work\_utils\
SET UNREAL_DIR=%currDisk%\_PC\us\u0376_pentevofix\
SET UNR_EXE=emul.exe
SET UNREAL_PATH=%UNREAL_DIR%%UNR_EXE%
ren %PROJECT%.trd tmp.%PROJECT%.trd
del /q %PROJECT%.*
ren tmp.%PROJECT%.trd %PROJECT%.trd
%UTILS_PATH%\sjasmplus.exe --dos866 --lst=%PROJECT%.lst --inc=sources\. sources\main.asm
IF NOT EXIST main.sna GOTO ERROR
ren main.bin %PROJECT%.bin
ren main.sna %PROJECT%.sna
copy %PROJECT%.bin %PROJECT%.C
call make_trd
copy user.l %UNREAL_DIR% > nul
taskkill /im %UNR_EXE% /f > nul
%UNREAL_PATH% %PROJECT%.sna > nul
GOTO END
:ERROR
@echo not exist .sna file
EXIT 1
:END
endlocal
Строки
SET UNREAL_DIR=%currDisk%\_PC\us\u0376_pentevofix\
SET UNR_EXE=emul.exe
соответственно задают путь и имя файла анрила
make_trd.cmd
rem make_trd.cmd
@echo off
setlocal enabledelayedexpansion
set currDir=%cd%
set currDisk=%~d0
cd ..
set PROJECT=!currDir:%cd%\=!
cd %currDir%
:MAIN
SET UTILS_PATH=%currDisk%\_Work\_utils\
IF EXIST %PROJECT%.trd GOTO COPY_FILES
:CREATE_TRD
%UTILS_PATH%\trdtool.exe # %PROJECT%.trd
:COPY_FILES
%UTILS_PATH%\trdetz.exe %PROJECT%.trd del %PROJECT%.C
%UTILS_PATH%\trdtool.exe @ %PROJECT%.trd
%UTILS_PATH%\trdtool.exe + %PROJECT%.trd %PROJECT%.C
%UTILS_PATH%\trdetz.exe %PROJECT%.trd fprop %PROJECT%.C start 32768
GOTO END
:END
endlocal
Сохранение бинарника в main.asm должно выглядеть так
; build
IF (_ERRORS == 0 && _WARNINGS == 0)
LABELSLIST "user.l"
SAVEBIN "main.bin",BEGIN,EOP-BEGIN
PAGE 0
SAVESNA "main.sna",BEGIN
ENDIF
В дальнейшем достаточно копировать эти два батника из проекта в проект и при необходимости менять адрес загрузки при создании трд.
51 комментарий
И не всегда при компиляции требуется запуск (в данному случае просто запуск, но можно как у тебя).
Хороший (насколько я помню, неоптимальный) упаковщик для Hrust сделал lvd: archive.is/mhmt.googlecode.com (я не знаю, где находится современная версия репозитория); там же есть распаковщики. На zx-pk.ru пролетал альтернативный, якобы более оптимальный упаковщик; я его не тестировал.
Вот здесь подборка материалов для Appack: karoshi.auic.es/index.php?topic=2416.0 (изначально это сеговский упаковщик).
Exomizer берут тут: hem.bredband.net/magli143/exo/
ZX7 берут тут: www.worldofspectrum.org/infoseekid.cgi?id=0027996
и зачем ex af,af'?
:)
На стадии написания и отладки В исходнике пишу savesna "%path_to_unreal%/qsave1.sna", start
— и держу наготове уже запущенный унрил. И после компиляции просто нажимаю в нем ALT+F3 — и снапшот сразу же запускается.
f12 (build) в sublime text.
потом батник:
spgbld.exe -b spgbld.ini zifi.spg
просто мне, как мегаленивому и стольже полоротому, лень в текстах писать имя проекта
типа
имя проекта пишу 1 раз, когда создаю папку проекта.
потом ctrl+b, все компиляется с нужными именами, собирается в трдэшник, киляется существующий экземпляр анрила, и запускается новый.
но это мелочи всё.
я говорю о том что в сублим текст с плагом под з80 эти вопросы (батников) уже решены.
Z80Asm > Settings > Build script (win)
тут и батничек уже готовый
этож красивее и умнее можно сделать!))
как минимум проверять на маке. бат и запускать его если имеется, иначе по дефолту сделать как у меня.
/me потирает руки
сборка:
Если нужны дополнительные файлы, размер которых не больше 16384 байт, то удобнее раскидать по страницам и сохранять на .TRD непосредственно при сборке.
Если файл не помещается. поможет Writetrd.exe(наверное)
Просто, для начала стоит давать что-то попроще, не?
Мейкфайл я не пишу каждый раз заново, просто беру предыдущий и немного правлю (это можно заметить по его корявости, хехе). Поэтому особых усилий как бы и нету. Зато я ленивый, рассеянный и люблю часто собирать, ничего не могу с собой поделать ;) Сборка собственно кода времени особо не занимает, да, но вот в пеппе, например, было двадцать с чем-то картинок, которые постоянно подправлялись. После каждой правки — опять конверсия, упаковка и всё такое. А ещё Олежа выдаёт по десять новых версий трека в секунду, когда разойдётся ;) Так что лично мне просто проще один раз написать мейкфайл и потом не париться.
На самом деле, было бы интересно услышать реальные доводы в пользу make, кроме, понятно, привычки, индустриальных стандартов и т.д. На #z80 было несколько баталий, все аргументы которых свелись примерно к тому, что make — это «правильно». Но почему это так в нашем случае — никто так и не узнал.
А вообще, было бы круто создать общую репу со скриптами (я так понимаю, питон?) для сборок(trd, например, хотя я из сжасма делал)/конверсий(форматы, спрайты, гифки:)/генераций табличек(логарифмы/синусы).
даже инструкция внутри ридмика от проекта осталась:
На самом деле, как раз здесь я и использовал принцип «разделяй и властвуй» — делаем одну часть, отлаживаем, затем линкуем с остальной демой, максимально абстрагируясь от внутренней структуры части (главное — войти и потом выйти :).
А вот тасм я недолюбливаю.
я для Altair и проц 8080 писал проги и выходили бинарники:
тогда уж давайте придумаем универсальный скрипт
В общем, все части демы, сколько бы их не было, собираются и пакуются одним сценарием. Чтобы добавить сборку еще одной части, просто добавляю её имя в перечисление. Ну и там контроль наличия файлов, чтобы каждый раз не пересобирались.
gist.github.com/akanyuk/7d98ffeeac1316b42d10917f208b85e2