За это время я переганю через tap.
Вид для печати
Ты перегонишь то,что тебе необходимо,а как же другие пользователи?
Они перегонят, то что им нужно по моей методике, которую я скоро изложу и досконально проверю.
А потом лентяи напишут уже никому ненужный плагин:), когда народ на +3 платформу подвалит...
Кстати, на реальном Cпеке игры идут, я уже пару перегнал. Щас упор в преодолении защиты. На трд дисках игры тоже защищены, но эти защиты описаны! И думаю, что здесь мне тоже что-то подскажут, если сам не доганю...
ох и неймётся-же тебе. решил вместо Синклера поставить Алана Сагара. :mad:
Так, всё, прекращайте плакать про неизвестный формат. Нашелся в гугле по первой же ссылке. elf/2, прошу, пользуйся. Конвертор сделать с твоими знаниями в области плагиностроения проблем по идее составить не должно. Формат простой в принципе, не сложнее теледиска. Попутно он сможет фигачить и CPC версии DSK, у них формат я так понял одинаковый.
Ты открой один образ с файлами любым просмотрощиком кода и тебе возможно сразу все станет понятно. Образ я в треде давал, там 5-ть файлов записано, достаточно, чтобы понять раскладку. Я не думаю, что там что-то сильно отличается от trd. Возможны, конечно, нюансы, но тогда их по ходу и будем разбирать. Описания файловой системы нету, по крайней мере, я не нашел. Возможно, там и работы чуток, просто xtrd планигин чуть переделать!
Вот полное описание +3dos. Там же есть описание как File attributes and headers, так и Disk format and specification. Голосую +1 за xDSK плагин.
Плагин то написан, или мне это сделать?
Сделал набросок читалки. Файлы будут выглядят так:
DISK.10-18.bas
DIZZY4.BAS.10-151.bas
DIZZY4.DAT.24137.bin
DIZZY4.LDR.24500.bin
DIZZY4.MUS.32768.bin
DIZZY4.SCR.16384.bin
Вся полезная информация из 128-байтного заголовка файла включается в расширение файла (тип файла, адрес загрузки, имя переменной, стартовая строка и offsetToProg), а сам заголовок уничтожается. В заголовке вроде ничего полезного нет.
struct Plus3DOSFileHeader {
unsigned char id[9]; // PLUS3DOS\x1A
unsigned char issueNumber, versionNumber;
unsigned int fileLength;
unsigned char type; // Тип данных: 0=basic, 1=numarrray, 2=strarray, 3=code
unsigned short internalLength;
union {
struct {
unsigned short startLine;
unsigned short offsetToProg;
} type0;
struct {
unsigned char null2;
unsigned char name;
unsigned short null3;
} type1or2;
struct {
unsigned short address;
unsigned short null3;
} type3;
};
unsigned char null1[105];
unsigned char crc;
};
P.S. Сделаю еще авто преобразование из TAP в DSK.
Только что произвел автоматический перегон из TAP в DSK 720K. Игра запустилась.
Так же, содержимое DSK можно сохранять на диск и загружать с диска.
Грузятся, если используется программа на Бэйсике (использующая команду LOAD). И в команде LOAD указано имя файла, и имя файла может быть именем файла 3DOS.
Если имя не указано, то необходимо добавить имя. Я то же попробую этот момент автоматизировать.
Ну и игра совместима с Spectrum 128. Например версия Saboteur 2 для 48К глючит (есть рабочая версия для 128К). И игра не должна пытаться с помощью LOAD загрузить данные в дополнительные страницы памяти (как в игре Lode Runner 128K).
vinxru, а ну это только простые незащищенные загрузчики...
В +3 дос синтаксис тап совпадает с диском, надо указывать только устройство, по умолчанию там диск...
Автоматизировать это необязательно, так как простых загрузчиков практически нет.
Лучше сделать, чтобы плагин работал с реальными дисками, так как после перегонски с тап, нужно будет еще образ загнать на диск и хорошо, если это можно будет делать по файлам. Сейчас можно перегнать только весь образ утилитой, которую я в этом разделе постил.
Еще неплохо, если будет работать с дисководом ноутбука через усб. А то обычных дисководов и компов уже почти ни у кого нет...
А может ли ваша утилита работать с USB-дисководами? Собираюсь купить дисковод, но боюсь что это будет зря.
Клонидзе как всегда тупит... Я даже не знаю как подобрать слова... Есть куча утилит которые читают реальные диски и переводят их в образы (и обратно).
Так вот, потом, желательно что бы был бы плагин для фара или ещё для чего, что бы можно было бы легко файлы из образа копировать на ПЦ и обратно. Причём, что бы он понимал бы все корректные для +3 и CPC форматы. Всё! Более ничего не нужно. Для портирования "файлов" трдос в +3, нужен другой плагин. Он должен приклеивать 128-и байтный заголовок к файлу, в котором будут служебные данные. Но это уже другой плагин! Необходим плагин, который позволит обмениваться файлами между образами +3 и файловой системой ПЦ!! Файлы по формату совпадают. И экспорт в ПЦ и обратно импорт в +3ДОС файл не изменит. 100% совместимость. Это и нужно в данный момент. Конверсия из трдос в +3дос это совершенно другой вопрос.
Пока утилита будет в виде отдельной программы.
Запускаешь программу, через меню выбираешь DSK файл (или создаешь новый). Программа отображает список файлов на диске. Далее перетаскиваешь файлы в окно программы (или из окна). Всё как в WinRAR.
В дополнение к сказанному:
1) Переименование файлов, изменение типа файла, параметров бейсика, атрибутов.
2) Программа будет автоматически предлагать добавить или убрать 128-байтный заголовок от файла.
3) При попытке перетащить TAP файл в окно программы, программа предложит добавить его в виде отдельных файлов.
4) Будет дефрагментация файловой системы
5) Бут будет представлен в виде отдельного файла.
6) Будет просмотр бейсик программ, изображений, шестнадцатеричного кода, дизассемблер.
А файлы из trd и scl планируются к перетаскиванию?
Пока нет.
Сделал просмотрщик SCREEN$ файлов (с поддержкой мигания), BASIC-файлов, Z80-дизассемблер. Теперь займусь интерфейсом, операциями с файловой системой (переименование, удаление файлов, дефрагментация, изменение переменных файловой системы (например размера каталога или размера кластера)).
долго разбирался почему эта тема начинается в 2006 году и продолжилась в 2011 :)
Grand мне RT11 нужен был году так в 2000ом :) разобрался сам :)
кстати ссылка битая я бы не отказался для истории
http://grands.land.ru/docs/blk_dev.htm думаю это тоже самое
Vadim, их этой кучи утилит хоть одна работает с usb-дисководами ? Мне так для справки,
может у кого то есть такой опыт.
погуглил http://simonowen.com/fdrawcmd/
вполне неплохая вещь для писания подобных программ
однако с USB флопарями не работает
Я не проверял. Дома есть внешний usb-дисковод, как будет время проверю. Для меня актуальна задача обмена файлами из образа +3 в файловую систему ПЦ. Пишу под эмулем ЦПМ, в ассемблере M80. Файл исполняемый получается не в образе, а на файловой системе ПЦ. Для помещения в образ беру утилиту CPCFS085 и файл-образ диска на 180К. ручками импортирую нужный файл (утилита ключей не поддерживает и за-автоматизировать процесс не получается).
Для перевода игр из TAP неплохо бы сделать соотв. плагин, что бы зашли в tap файл, выбрали файлики и перенесли в +3 образ. Имена придется конечно привести к стандарту +3, но стартовый адрес и подобное сохранятся, а это упрощает адаптацию.
Не так давно хотел написать утилиту для Q-DOS что бы упростить перенос файлов из TRDOS в +3, там это сделать легко. У меня в системе есть псевдодрайвер, для работы с дискетами tr-dos как с fat12. Ставим дискету tr-dos в дисковод A:, но обращаемся к нему по другой букве, на которую он подключился при запуске. И он видит файлы так, как будто там файловая система FAT12. Причем стартовые адреса и др. параметры сохранены. Написать утилиту для копирования в +3 с приклеиванием 128-и байтного заголовка не проблема. Но всё не могу никак собраться и написать.
посмотрел здесь
http://www.426.ch/cgi-bin/moin.cgi/C...t=cpcfs085.zip
в документации написано:
Either call CPCFS in interactive mode:
CPCFS
or in batch mode:
CPCFS [<image>] <commands>...
и список команд
и исходники тоже есть
там же ссылка на это
http://cpctech.cpc-live.com/download/cpcxfs.zip
боле новая версия
кстати в тему у q-dos profidos и прочих СиПиэМ под Профи формат диска боелее менее одинаков ведь?
Начинал свою карьеру в этой области написанием конвертера cpm под профи в tr-dos :)
Да, как и на любом ЦПМ. Существуют 2 формата. Физический и логический. На профи логический формат немного отличается от Роботрона 1715. На роботроне 4 логических дорожки являются системными, на профи 0. У корвета 2 системные дорожки. В остальном лог.формат совпадает. Физический формат профи имеет отличие, на 0 цилиндре, 0-й стороны сектор 5 заменен на сектор 9 (для запуска из трдос).
---------- Post added at 10:18 ---------- Previous post was at 10:17 ----------
с ней больше проблем. Забыл уже что там не так, но я вернулся к версии 085.
У меня срочные неотложные дела появились, поэтому я последние дни не занимался программой и еще неделю не буду. Но потом программу обязательно сделаю.
По прошествии времени адреса изменились... Я уже исправил ссылку в своем сообщении.
http://era-cg.su/grands/doc/dvk/blk_dev.htm - это "онлайн"-версия, а
http://era-cg.su/grands/doc/dvk/blk_dev.zip - версия для печати.
Ныне уже вышел плагин, поддерживающий файловую систему RT11 (и совместимых с ней) в файлах DSK, но не для FAR'а, а для Total Commander'а.
http://www.zx.pk.ru/showthread.php?t=11015
Извиняюсь за то, что опять не по теме... :)
Продолжаю разработку. Через несколько дней выложу первую версию.
Купил себе материнскую плату с FDD и дисковод. Так что попробую засунуть в свою
программу утилиту форматирования, сливания и заливанию образов на флопики
vinxru, ты нас радуешь не по-детски!
Буду тебя крутить, чтобы замутил командер, который сможет работать с реальным диском и файлами на нем.
Но пока делай, как сам запланировал, не буду тебя с толку сбивать.
Я тут заболел, а потом монитор у меня дома умер, а потом я решил обзор ZX Spectum +3 написать (http://emulate-su.livejournal.com/384304.html), а потом блок питания у +3 сломался, так что разработка немного затормозилась.
Но сегодня руки дошли до программы, сделал создание образов с произвольным кол-вом дорожек, секторов, головок, размером корневого каталога, размером кластера и т.п. Проверял на эмуляторе, +3DOS спокойно работает с диском в 255 дорожек или 25 секторов. Главное, что бы размер диска не превышал 720 Кб.
Нафиг надо не знаю, но пусть будет.
Мне осталось интерфейс доделать и разобраться к некоторыми переменными в образе, и выложу версию.
Например, я так и не понял. Есть образы в которых каталог располагается на 0 дорожке 0 стороны и +3DOS понимает такие образы.
Пока я решил эту проблемку так. Пытаюсь загрузить диск 3-мя способами:
1) Расширенное описание диска в t0h0s1. Каталог там, где указано в расширенном описании диска.
2) Каталог в t1h0s1
3) Каталог в t0h0s1
Если срабатывают несколько способов, то предлагается меню с выбором способа.
Еще не могу понять с размером кластера (блока). Эта ФС хранит файлы более 16 кластеров в длину в виде нескольких файлов. Вроде бы размер кластера задается в заголовке диска и может быть произвольным. Но размер каждого файла указывается в 128 байтных блоках и под хранение размера выделено всего 8 бит. То есть, при размере кластера более 1 Кб, я не могу сохранить размер файла.
Так же в документации на файловую систему написано, что если размер файла 80h блоков, значит использованы все 16 кластеров. Это условие верно, только если размер кластера равен 80h*128/16 = 1 Кб.
(Если кластеров больше 255, то используются 16-битные номера кластеров. Файл тогда может быть максимум 8 кластеров и мы приходим к размеру кластера 80h*128/8 = 2 Кб)
Так же косяк с размером сектора. В образе диска есть поле указывающее размер сектора, но оно не заполнено. Мне остается делать версию программы поддерживающую только 512 байтные сектора.
P.S. Купил монитор со SCART-разьемом, надеялся подключать Spectrum. Но SCART не поддерживает RGB! Есть входы YPbPr, при подключении к ним цвета есть, но монитор включает черезстрочный режим 480i и экран жутко дрожит. При подключении через Video вход изображение не дрожит, но без цвета не прикольно. Буду искать PAL/NTSC кодер.
Отвечаю. В общем, описание +3 предполагает, что человек знаком с ФС CP/M. Т.е. её особенности там не описываются, поэтому стоит поискать описание форматов диска в описаниях CP/M. Правда нормального, понятного тому кто читает первый раз про неё я не нашёл. Поэтому попробую сейчас объяснить сам:
>Еще не могу понять с размером кластера (блока). Эта ФС хранит файлы более 16 кластеров в длину в виде нескольких файлов. Вроде бы размер кластера задается в заголовке диска и может быть произвольным.
Размер кластера может быть 2 в степени n записей (по 128 байт). Где 0<n<7 (вроде бы, под рукой описания нет, а точно я не помню пишу по памяти). При n=4 получаем размер блока (кластер в CP/M называется блок) получается 2048 байт (16 записей по 128). Вся поверхность диска разбивается на блоки. Если получается что количество блоков более 255, то номера блоков в описателе файла задаются 16-и битными значениями, иначе - 8-и битными. Описатель файла содержит 32 байта.
Смещение, длина Описание
+0 1 Код области пользователя 0-15
+1 8 Имя файла
+9 3 Расширение
+12 1 Номер экстента
+15 1 Кол-во записей (1-7F)в последнем экстенте или 80h если экстент заполнен
+16 16 Область где хранятся номер блоков занимаемых файлом
Для примера примем, что размер блока равен 2К, то получается, что один описатель файла будет хранить один экстент. Если файл занимает скажем 70К, то всего получится 4 полных экстента и 1 неполный. Номер экстента указывается в 12-м байте описателя.
Далее, если предположить, что размер блока равен уже 4К, что произойдёт? Один описатель файла будет содержать уже 2 экстента. Первый экстент будет в первых 4-х словах, второй в следующих. И кол-во записей в последнем экстенте указывает именно на него.
Все равно не понял, про "+15 1 Кол-во записей" :)
а) Заполненный эксетент 80h
б) Заполненный эксетент 16 блоков по 512 байт = 8192 байта / 128 = 40h
Решил поставить эксперимент.
1) Создал образ с размером блока в 512 байт. Сохранил 3 файла,
с размерами: 200, 6192 и 32000 байт. Команда CAT выводит, что все
файлы нулевого размера и на диске свободно 0 байт. Первые два файла
загружаются нормально. При попытке загрузить последний файл выдается
ошибка "Wrong file type". Вот что записано в образе:
00 46 49 4C 45 31 20 20 20 20 20 20 00 00 00 02 .FILE1..........
04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 46 49 4C 45 32 20 20 20 20 20 20 00 00 00 37 .FILE2..........
05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 11 12 00 00 ................
00 46 49 4C 45 33 20 20 20 20 20 20 01 00 00 7B .FILE3.........{
13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F 20 21 22 ................
E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ееееееееееееееее
E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 E5 ееееееееееееееее
Размер первого файла 2*128 = 256 байт. Размер второго файла 37h*128 =
7040 байт. Третий файл записан некорректно. Он должен занимать 64 блока
и 4 записи в каталоге. А блок всего один. Номера блоков явно из нулевого
экстента. Номер экстента равен 1, а нулевого экстента нет. Размер экстента
указан 7Bh*128 = 15744 байт, но это 31 блок.
Потом я записал с помощью своей программы файл размером 40 Кб. Команда
CAT так же пишет 0 байт, а при попытке загрузить файл выводится ошибка
"End of file foudned"
00 45 4C 49 54 45 20 20 │ 20 44 41 54 00 00 00 40 .ELITE...DAT...@
04 05 06 07 08 09 0A 0B │ 0C 0D 0E 0F 10 11 12 13 ................
00 45 4C 49 54 45 20 20 │ 20 44 41 54 01 00 00 40 .ELITE...DAT...@
14 15 16 17 18 19 1A 1B │ 1C 1D 1E 1F 20 21 22 23 .............!"#
00 45 4C 49 54 45 20 20 │ 20 44 41 54 02 00 00 40 .ELITE...DAT...@
24 25 26 27 28 29 2A 2B │ 2C 2D 2E 2F 30 31 32 33 $%&'()*+,-./0123
00 45 4C 49 54 45 20 20 │ 20 44 41 54 03 00 00 40 .ELITE...DAT...@
34 35 36 37 38 39 3A 3B │ 3C 3D 3E 3F 40 41 42 43 456789:;<=>?@ABC
00 45 4C 49 54 45 20 20 │ 20 44 41 54 04 00 00 40 .ELITE...DAT...@
44 45 46 47 48 49 4A 4B │ 4C 4D 4E 4F 50 51 52 53 DEFGHIJKLMNOPQRS
E5 E5 E5 E5 E5 E5 E5 E5 │ E5 E5 E5 E5 E5 E5 E5 E5 ееееееееееееееее
E5 E5 E5 E5 E5 E5 E5 E5 │ E5 E5 E5 E5 E5 E5 E5 E5 ееееееееееееееее
Короче, размер кластера в 256 байт не поддерживается в +3DOS.
В крайнем случае можно работать с файлами до 8 Кб.
---------- Post added at 10:55 ---------- Previous post was at 10:22 ----------
Эксперимент 2. Размер кластера 4096 байт.
Записал своей программой два файла: 6192 и 40801 байт.
00 45 4C 49 54 45 20 20 20 53 43 52 00 00 00 40 _ELITE___SCR___@
04 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ________________
00 45 4C 49 54 45 20 20 20 44 41 54 00 00 00 40 _ELITE___DAT___@
06 07 08 09 0A 0B 0C 0D 0E 0F 00 00 00 00 00 00 ________________
В итоге, первый файл загружается, второй нет. Команда CAT выводит
корректные размеры файлов (выровненные на 4 Кб), видимо она считает кластеры.
Попробовал записать в "+15 1 Кол-во записей" нули. CAT работает, а вот LOAD перестал.
Сохранил по команде SAVE файл размером 40 Кб. В отличии от моего, этот
файл загрузился по команде LOAD.
00 45 4C 49 54 45 20 20 │ 20 44 41 54 00 00 00 40 _ELITE___DAT___@
04 05 06 07 08 09 0A 0B │ 0C 0D 00 00 00 00 00 00 ________________
00 58 20 20 20 20 20 20 │ 20 20 20 20 02 00 00 3A _X_____________:
0E 0F 10 11 12 13 14 15 │ 16 17 00 00 00 00 00 00 ________________
Наверное экстент рассчитывается по формуле:
экстент = номер_записи_в_каталоге*(ра мер_блока/1024) + (длина+16383)/16384