Programming
Assembler
Reverse engineering
Old hardware
Comments 12
UFO landed and left these words here
0
А чего там не понятного? Формат хранения данных. Это просто побайтовая копия секторов диска этого файла, к которым также добавлен заголовок.
+1
Файл в TR-DOS состоит из 2 частей: 16 байт описателя в каталоге на 0-й дорожке + собственно данные в секторах на диске. Фактически, формат hobeta это склеенные вместе эти два блока данных.
0
В какой-то момент пытался восстановить свои старые 5.25" диски для Spectrum. Некоторые утилиты написал на Python, некоторые выложил на GitHub. Есть там и парсер Hobeta со встроенной справкой о формате.

Времени катастрофически не хватает развивать этот проект, но он не заброшен. Пул-риквесты приветствуются.
UFO landed and left these words here
0
Насколько я помню, программа для Spectrum состояла из двух файлов — загрузчика, написанного на Basic, и самой программы в машинных кодах. На дискетах эти файлы, соответственно, были доступны через некий файл-менеджер, не знаю как назывался, но это был файл boot. Т.е. чтобы загрузить дискету со списком файлов, нужно было на эту самую дискету скопировать boot. А вот загрузчик программ на Basic для кассет отличался от загрузчика программ для дискет. И когда у меня появился дисковод и TR-DOS, естественно я начал переносить программы с кассет на дискеты, но для того чтобы они работали в TR-DOS, «кассетные» загрузчики приходилось переписывать на Basic адаптируя к работе с дискетами. Деталей не помню, а может быть вообще не так всё помню, я школьником был начальных классов.
+1
Всё правильно. В простешем случае нужно было просто перед всеми `LOAD` добавить `RANDOMIZE USR 15619: REM:`, но этого было достаточно далеко не всегда. В этой и других статьях будут как раз детали.
0
Не. Этого мало. Недостаточно было везде перед LOAD «name» CODE добавлять RANDOMIZE USR 15619: REM:
ОБЯЗАТЕЛЬНО надо чтобы стоящий далее оператор LOAD был последним в бейсик-строке.
То есть если у меня, например, если загрузчик кассетной версии был таким:
10 LOAD «1» CODE: LOAD «2» CODE: LOAD «3» CODE: RANDOMIZE USR 32768
То сделав так:
10 RANDOMIZE USR 15619: REM: LOAD «1» CODE: RANDOMIZE USR 15619: REM: LOAD «2» CODE: RANDOMIZE USR 15619: REM: LOAD «3» CODE: RANDOMIZE USR 32768
Я получу НЕРАБОТАЮЩИЙ загрузчик. Мало того что он ничего не запустит, но он не загрузит даже одного кодового блока.
А написав вот так:
10 RANDOMIZE USR 15619: REM: LOAD «1» CODE
20 RANDOMIZE USR 15619: REM: LOAD «2» CODE
30 RANDOMIZE USR 15619: REM: LOAD «3» CODE
40 RANDOMIZE USR 32768
мы получим рабочий загрузчик для дисковода, с учетом того, что загружаемые блоки не будут пересекаться с загрузочной программой.
Операторы INK, PAPER, BORDER и CLEAR с CLS в загрузчике не писал по соображениям ненужности и не касаемости самого процесса загрузки. Хотя CLEAR стоило бы, чтобы опустить стек и случайно не затереть его при загрузке данных.
+1
Отличная тема! Автор, а вы оставите ссылку на книгу Н. Родионова «Адаптация программ к системе TR-DOS»?
Only those users with full accounts are able to leave comments. , please.