Ketmar писал(а):
накидай простенькое тз, что ли (ну, типа: хочу вот такие фичи, которые должны работать вот так-то). у меня несколько дней есть свободных, я могу написать консольные конвертеры в trd и tap с нужными фичами и собрать под винду (что там писать-то, собрать из моих старых исходников, фактически). на самом ящике вряд ли смогу — я его капитально забыл за кучу лет, но это по первости и не критично, думаю?
ну, или если немного подождёшь, могу попробовать вспомнить ящик, он забавен. и сделать модулями ящика. если найду свой старый редактор под него, потому что оригинальный редактор ящика для меня неюзабелен совершенно. %-)
Здравствуй!
Да, было бы здорово. У меня самого с внутренностями ББ знакомство более чем шапочное, но ты прав — идеологически будет самым правильным делать конвертеры именно на КП, впрочем, если будет сделано прозрачно на Delphi/FPC/Си, тоже хорошо.
Думаю, за основу мы примем BIN (или, если хочешь, даже IHX — это позволит отказаться от услуг утилиты hex2bin (лишний уровень)). Я пробовал обойтись SDCC'овской утилитой makebin, но научить её генерировать правильный BIN не смог, оно сильно заточено под ColecoVision).
Как результат принимаем TAP и TRD (при желании TZX — тоже популярный у буржуев формат). Будет вполне хорошо для начала использовать стандартный бейсик-загрузчик по умолчанию, хотя надо как-то иметь возможность указать утилите стартовый адрес, а, возможно, и другие дополнительные параметры; но если они не заданы, примем по умолчанию). Для TAP пусть будет только кассетный загрузчик, для TRD только дисковый. Мне очень хотелось бы иметь возможность подключить совершенно произвольный загрузчик. Это можно реализовать так: утилита получает на входе имя BAS-файла как параметр и в нём задан бейсик-загрузчик; если параметр-файл BAS не задан, генерируется простой загрузчик по умолчанию (как это делает z88dk). Формат BAS-файла на твоё усмотрение, но хотелось бы иметь возможность в нём задавать символы с произвольным кодом и произвольное значение чисел. Типа:
Код: "EMPTY"
0 CLEAR 0[25999]: RANDOMIZE USR 0[15619]: REM : LOAD "Proj"CODE 0[26000]: PRINT CHR \8: RANDOMIZE USR 0[26000]
Итак, имя утилиты makezx. Параметры:
makezx file[.tap|trd|tzx] := [loader.bas[:start_line]] projname.[bin|ihx.|hex][:start_addr]
Если не задан выходной формат, он по умолчанию TAP; если не задан стартовый адрес, то 26000.
Если расширение входного файла IHX, принимается, что он в формате Intel Hex, в любом другом случае он считается двоичным; адрес 26000 достаточно оптимален для дисковых программ — остаётся память для работы загрузчика).
Дальше аппетит разгорается и появляется соблазн добавить произвольное включение нескольких BIN/IHX-файлов (например, заставка и код игры) в TAP/TRD:
makezx Disk.trd := MyGame.bas:10 MyScreen.bin:4000H MyGame.ihx:7D00H
Формат чисел 0FFFFH принимаем как более соответствующий и Оберонам, и SDCC (формат #FFFF более прижился в других ассемблерах Z80, но запись ProjName:#FFFF мне кажется немножко перегруженной).
Если будешь разрабатывать на Си, я даже могу попробовать протолкнуть твою утилиту в дистрибутив SDCC (у Филиппа Краузе была идея снабдить SDCC поддержкой разных форматов, как в главном конкуренте — z88dk), но тогда код лучше хорошо комментировать и задокументировать на английском.
Вот такое примерное тз. Если не всё нравится или есть идеи как улучшить, конечно предлагай. Спасибо, что отозвался.
С уважением,
Олег