Доброго дня!
Пытался гуглить, возможно плохо, но не нашел.
Можно ли чем-нибудь на PC выдать +3DOS заголовок к бейсик-файлу, чтобы тот мог прозрачно грузиться из esxDOS?
Доброго дня!
Пытался гуглить, возможно плохо, но не нашел.
Можно ли чем-нибудь на PC выдать +3DOS заголовок к бейсик-файлу, чтобы тот мог прозрачно грузиться из esxDOS?
Люблю компьютеры на Z80, не люблю срачи на пустом месте.
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Приду домой, подскажу
Личка заполнена! И чистить я ее не буду! Пользуйтесь адекватными средствами связи! Спасибо.
Seamos realistas y hagamos lo imposible!
Ernesto Che GuevaraПереехал сюда: SteinBlume (ex ATM CP/M Explorer)
http://era-cg.su
а что мешает сохранить программу из бейсика ?
Да. Такой вопрос:а откуда дровишки?откуда файлик без заголовка взялся?
Личка заполнена! И чистить я ее не буду! Пользуйтесь адекватными средствами связи! Спасибо.
Seamos realistas y hagamos lo imposible!
Ernesto Che GuevaraПереехал сюда: SteinBlume (ex ATM CP/M Explorer)
http://era-cg.su
В общем для начала кусочек теории. На всякий случай, лишней не будет поди.
Чтоб получить рабочий файлик, по сути нам требуется знать три параметра:
- Длина (всего) файла в байтах,
- Номер строки автостарта (если надо),
- Длина программы без переменных.
По идее на пц все это можно узнать, просто посмотрев tap-файл в хексе. Вот формат (нас интересует то, что выделено жирным):
Формат TAP
Код:.TAP-файлы: ----------- Эти файлы содержат блоки данных, сохраненных как бы на ленту. Все блоки начинаются с двух байтов, в которых указано сколько байтов за ними следует (не считая этих двух байтов). Затем идут сами данные, включающие флаговый байт и байт контрольной суммы. Байт контрольной суммы получается в результате последовательной операции XOR для всех байтов, включая флаговый байт. Например, если вы захотите выгрузить пару байтов из ПЗУ командой: SAVE "ROM" CODE 0,2, то получите в результате: |-----Данные, генерируемые Спектрумом--| |---------| 13 00 00 03 52 4f 4d 7x20 02 00 00 00 00 80 f1 04 00 ff f3 af a3 ^^^^^...... длина первого блока (19б.=17б.хэдер+флаг+контр.сумма) ^^... флаговый байт (00 для хэдера, ff для блока данных) ^^ первый байт хэдера, указывающий на тип данных имя файла ..^^^^^^^^^^^^^ информация в хэдере.......^^^^^^^^^^^^^^^^^ к.с. хэдера.................................^^ длина второго блока............................^^^^^ флаговый байт 2-го блока..............................^^ первые два байта ПЗУ....................................^^^^^ контрольная сумма первых двух байтов и флагового байта........^^ Эмулятор всегда считывает байты с начала блока. Если загружается меньше байтов, чем есть в наличии, то лишние байты пропускаются и последний загруженный байт рассматривается как контрольная сумма. Если запрашивается на загрузку больше байтов, чем есть в наличии, то загружающая процедура прерывается с включением флага, свидетельствующего об ошибке ввода с ленты. Обработку ошибки производит вызываемая Z80 процедура. Обратите внимание на то, что можно объединять .ТАР-файлы простым "пристегиванием" их друг к другу, например так: COPY /B FILE1.TAP + FILE2.TAP ALL.TAP Для полноты картины я включу сюда же и структуру хэдера. Он всегда состоит из 17 байтов: Байт Длина Описание 0 1 Тип файла (0,1,2 или 3) 1 10 Имя файла (если меньше 10 символов, вставляются пробелы ) 11 2 Длина блока данных 13 2 Параметр 1 15 2 Параметр 2 Тип файла 0,1,2,3 соответствует: программе, числовому массиву, символьному массиву, блоку кодов. Экранные файлы SCREEN$ рассматриваются как файлы кодов, начинающиеся в 16384 и имеющие длину 6912 байтов. Если файл является программой, то параметр-1 содержит номер строки автостарта или число, большее, чем 32768, если номер строки автостарта не указан. параметр-2 содержит смещение адреса программных переменных относительно адреса начала программы. Для блока кодов параметр-1 содержит адрес, из которого этот блок выгружался, а параметр 2 содержит число 32768. Для файлов данных (массивов) байт, расположенный в позиции 14 содержит имя переменной.[свернуть]
Далее идем сюда: http://www.worldofspectrum.org/ZXSpe...pter8pt27.html
Там видим доку по +3 DOS, а в ней:
иФормат заголовка +3 DOS файла
Код:The format of the header record is as follows: Bytes 0...7 - +3DOS signature - 'PLUS3DOS' Byte 8 - 1Ah (26) Soft-EOF (end of file) Byte 9 - Issue number Byte 10 - Version number Bytes 11...14 - Length of the file in bytes, 32 bit number, least significant byte in lowest address Bytes 15...22 - +3 BASIC header data Bytes 23...126 - Reserved (set to 0) Byte 127 - Checksum (sum of bytes 0...126 modulo 256)[свернуть]Этой информации достаточно, чтобы сваять простенькую утилитку.Еще чуть-чуть
Код:+---------------+-------+-------+-------+-------+-------+-------+-------+| BYTE | 0 | 1 | 2 | 3 | 4 | 5 | 6 | +---------------+-------+-------+-------+-------+-------+-------+-------+ | Program 0 file length 8000h or LINE offset to prog | | Numeric array 1 file length xxx name xxx xxx | | Character array 2 file length xxx name xxx xxx | | CODE or SCREEN$ 3 file length load address xxx xxx | +-----------------------------------------------------------------------+ (xxx = doesn't matter)[свернуть]
Однако, если интересует именно готовое решение, то есть два пути:
- Простой - поискать что-то подходящее на wos (думаю, там что-то есть),
- Простой для меня - воспользоваться утилитой, ссылка на которую у меня в подписи. Но это такое себе решение.
Про второй вариант подробнее.
Длинный мануал. Achtung! Много букаф
- Скачиваем утилиту отсюда: http://era-cg.su/steinblume/#downloads в понравившемся виде (должно быть достаточно light-комплекта в zip-архиве, потом удалите),
- Запускаем сие,
- Идем в "Опции - Настройки" на вкладку "+3 DOS",
- Снимаем галочку "Вырезать заголовки...",
- Ставим галочку "Добавлять заголовки...",
- Жмем "ОК",
- Идем в "Файл - Создать",
- Выбираем слева "Amstrad DSK",
- Жмем "OK" (что выбрано сверху не важно, так как сам образ нам нужен не будет),
- Получился пустой +3,
- Мышью кидаем в него наш "безголовый" файл,
- Жмем "Да",
- Кликаем по файлу в образе, на панели станет активной кнопочка "+3",
- Щелкаем по ней,
- Откроется редактор заголовков +3 DOS,
- Там ставим галку "Разрешить редактирование",
- Выбираем тип "Program" и вводим "Размер без переменных",
- Жмем "OK", получаем файл с правильным заголовком,
- Посмотреть, вышло ли правильно, можно, просмотрев файл по F3,
- Если все нормально, вытягиваем полученный "головастый" файл наружу (в проводник, TC...) мышью,
- Радуемся (или пишем мне с матами, что ничего не пашет).[свернуть]
Личка заполнена! И чистить я ее не буду! Пользуйтесь адекватными средствами связи! Спасибо.
Seamos realistas y hagamos lo imposible!
Ernesto Che GuevaraПереехал сюда: SteinBlume (ex ATM CP/M Explorer)
http://era-cg.su
Отлично! Спасибо за столь подробную информацию!
Люблю компьютеры на Z80, не люблю срачи на пустом месте.
ZXBlockEditor позволяет менять заголовки для tap/dsk/trd/scl
http://zx-modules.de/
Личка заполнена! И чистить я ее не буду! Пользуйтесь адекватными средствами связи! Спасибо.
Seamos realistas y hagamos lo imposible!
Ernesto Che GuevaraПереехал сюда: SteinBlume (ex ATM CP/M Explorer)
http://era-cg.su
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)