Оберон-клуб «ВЄДАsoft»

Твердыня модульных языков
Текущее время: 18 июн 2025, 22:19

Часовой пояс: UTC + 2 часа




Начать новую тему Ответить на тему  [ Сообщений: 7 ] 
Автор Сообщение
 Заголовок сообщения: Линкер/конвертер для ZXDev в TAP, TZX, TRD
СообщениеДобавлено: 24 окт 2012, 08:45 
Не в сети
Аватара пользователя

Сообщения: 1019
Откуда: Днепропетровская обл.
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), но тогда код лучше хорошо комментировать и задокументировать на английском.

Вот такое примерное тз. Если не всё нравится или есть идеи как улучшить, конечно предлагай. Спасибо, что отозвался.

С уважением,
Олег


Вернуться к началу
 Профиль  
Ответить с цитатой  
СообщениеДобавлено: 15 июн 2013, 06:11 
Не в сети

Сообщения: 104
here is my script to get a tap file from oberon

Bin/sdcc/bin/sdcc -mz80 --code-loc 26000 --opt-code-size --no-std-crt0 Obj/hi.c -L Lib/z80 -I Lib -I Obj Basic.lib
Bin/hex2bin hi.ihx
Bin/bin2tap -b -a 26000 -c 25999 -r 26000 -o hi.tap hi.bin


I can give you hex2bin and bin2tap if you want them


Вернуться к началу
 Профиль  
Ответить с цитатой  
СообщениеДобавлено: 15 июн 2013, 15:14 
Не в сети
Аватара пользователя

Сообщения: 1019
Откуда: Днепропетровская обл.
We already have a good hex2bin:
hex2bin v1.0.10, Copyright (C) 2012 Jacques Pelletier & contributors, do you use another?

But we need a good bin2tap, especially if it is cross-platform and open source.
If you have such an utility, then give a link or do attach, please.

I came across a bunch of such tools and converters, but almost all of them were bad designed, with poor error handling and quick-n-dirty coded. Now I'm working on my binary-to-tape converter, and I want to do it thoroughly, so I spend time on design and accurate coding.


Вернуться к началу
 Профиль  
Ответить с цитатой  
СообщениеДобавлено: 15 июн 2013, 18:59 
Не в сети

Сообщения: 104
oh yes I think I am using your hex2bin

here is the bin2tap

http://zeroteam.sk/bin2tap.html

here is the command line:
bin2tap -b -a 26000 -c 25999 -r 26000 -o LaserDemo.tap LaserDemo.bin

assuming that your code is at 26000


Вернуться к началу
 Профиль  
Ответить с цитатой  
СообщениеДобавлено: 15 июн 2013, 19:37 
Не в сети
Аватара пользователя

Сообщения: 1019
Откуда: Днепропетровская обл.
Thank you! Useable tool. Sorry I did not find it sooner.

I'll not be in a hurry to transfer XDev ​​to work with this tool, but I looked sources. You then will check and compare the sources of this utility and of the mine. ;) However, I am sure that you understand the advantages of Oberon language.


Вернуться к началу
 Профиль  
Ответить с цитатой  
СообщениеДобавлено: 15 июн 2013, 22:54 
Не в сети

Сообщения: 104
ok here is the final command line:

/root/ofront/linux2/bin/ofront Mod/$1.mod -m -l
Bin/sdcc/bin/sdcc -mz80 --code-loc 26000 --opt-code-size --no-std-crt0 Obj/$1.c -I Lib -I Obj Lib/z80/Basic.lib
Bin/hex2bin $1.ihx
Bin/bin2tap -b -a 26000 -c 25999 -r 26000 -o $1.tap $1.bin
fuse-gtk $1.tap

$1 puts the parameter into the script

for some reason it only works if the source '.c' is in the Obj folder, not sure why


Вернуться к началу
 Профиль  
Ответить с цитатой  
СообщениеДобавлено: 16 июн 2013, 18:19 
Не в сети
Аватара пользователя

Сообщения: 1019
Откуда: Днепропетровская обл.
Maybe it's because the working directory when invoking the script is Obj?


Вернуться к началу
 Профиль  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 7 ] 

Часовой пояс: UTC + 2 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Создано на основе phpBB® Forum Software © phpBB Group
© VEDAsoft Oberon Club