похоже на старое новьё ?
Вид для печати
похоже на старое новьё ?
Надо б почитать, гы.
goodboy, положи сюда.
кусок журнального кода выполняется некорректно. мне пока трудно понять кто виноват: некорректный FDIобраз или эмуляция ВГшки.
знатоки объясните что тут делается
DOS это выполнение программы в ПЗУtrdos по-адресу в IX.Код:PUSH HL
PUSH BC
PUSH DE
XOR A
LD C,#3F
LD IX,#2A53 ; out (c),a
CALL #DOS ; ret
LD A,#0A
LD C,#5F
LD IX,#2A53 ; out (c),a
CALL #DOS ; ret
LD D,#01
LD IX,#3F33 ; ???
CALL #DOS
LD A,#02
LD C,#3F
LD IX,#2A53 ; out (c(a)
CALL #DOS ; ret
LD A,B
POP DE
POP BC
POP HL
AND #1F
CP #08
JP Z,NEXT
ERROR
goodboy, а на реале пробовал?
ну а вдруг?)
goodboy, дык выложи сюда - мы проверим.. на реале..
goodboy, выложи в FDI. на реале FDI можно записать на реальную дискету в WDC.
Те кто защищал свои программы - преступники! К стенке! Сколько заработали? Да ничего! А продукт потерян... Сколько добра потеряли из за барыг и скупердяев.
Я не знаток, но прокомментировал в коде.
Надо ставить точку останова на ERROR, и смотреть, что в аккумуляторе и запостить сюда. Еще интересно знать, какую команду выполняла ВГэйка.
Посмотреть в анриле. Запостить.
Как? На скриншоте выделено. Красный квадратик - код команды ВГ, желтый квадратик состояние ВГ.
P.S. Желательно отключить trap и no_delay в анриле.
Там делается попытка прочитать первый попавшийся заголовок сектора на дорожке и ожидается, что будет ошибка контрольной суммы, так как ожидается, что сектора записаны с ошибкой (как на оригинальной дискете с журналом). А в эмуляторе получается не "ошибка КС", а "сектор не найден". Потому и не работает журнал.
Надо смотреть, правильно ли считана дискета (ковырять данные в образе fdi).
Дело не в 0 дорожке и 10-м секторе.
Там для проверки защиты головка флопика позиционируется не на 0 дорожку, а на 45-ю. И производится чтение первого встреченного (сиречь произвольного) заголовка сектора на этой 45-й дорожке.
То, что засылается затем в регистры дорожки и сектора при чтении состояния ВГ - не важно (пусть 0 дорожка и 10 сектор). На это не обращай внимания.
Дело в 45й дорожке, которая в твоем fdi вообще отсутствует. Именно она была основой защиты. И видимо, не считалась при создании образа. Нельзя ли попробовать теледиск? Или редактором файлов.fdi создать на этой дорожке один битый сектор (с испорченной КС).
Такая же ситуация со вторым номером.
Ага получилось, вот только не сектор с ошибочной CRC, а ID сектора с ошибочной CRC.
И ещё образ пришлось в формат udi сконвертировать.
В fdi можно тоже сделать, но меня проблемы совместимости пугают, не все эмуляторы проверяют флаг правильности CRC в fdi файлах.
Дело в том что формат fdi не хранит саму CRC, а только флаг правильная она или нет, да и то с оговоркой это возможно.
Далеко не факт что все эмули этого придерживаются.
Вот цитата из оригинальной спецификации.Код:bit 0-5: флаги CRC. Единица в одном из разрядов означает, что
при считывании этого сектора на длину 128,256,1024,2048 или
4096 байт получается правильная контрольная сумма. Если во всех
разрядах 0 - сектор записан с ошибкой контрольной суммы.
bit 6: В данной версии всегда 0. Возможно, 1 в данном разряде
будет обозначать адресный маркер без области данных.
А вот и сами образы.
А первого номера не сохранилось?
Тот что на VT в формате trd лежит. Если он там взломанный, то было бы неплохо и его в оригинальном виде с защитой сделать для полноты коллекции.
В этом листинге приведен классический алгоритм процедуры чтения регистра состояний #1f ("ZX-Spectrum & TR-DOS Для пользователей и программистов" А.Ларченко и Н.Родинов. Питер'93, с.211:
На выходе, в регистре b будет находиться значение регистра состояний #1f, т.е. таким способом эмулируется команда in b,(#1f). Однако, при выполнении данной процедуры будут запорчены регистры дорожки #3f и сектора #5f, поэтому, при необходимости, следует восстановить в них исходные значения.Код:(c) Andrew MOA Larchenko
in_1f out (#3f),0
out (#5f),#a
ld d,#01
jp #3f33
Расшифровка данных из регистра b, полученных после чтения регистра состояний #1f:
http://abzac.retropc.ru/images/i15_10.gif
Если я правильно понял Faster, то ошибка контрольной суммы это как раз наш случай?
OpenIT. Дорожка 154, похоже, ожидается сектор 1. А там на всей дорожке в образе - только сектора с номерами 2 и 3. Нельзя ли перечитать дискету теледиском в td0 ?
Ну, буду еще разбираться, это только предварительные выводы.
P.S.
Да, образ OpenIT считан некорректно. Исправить без перечитывания сложно, так как со 154 трека должен загружаться исполняемый код, а у тебя там вместо машинного кода:
один сектор с номером 3, в котором записан кусок разметки дорожки, а также восемь секторов с номером 2, одинаковые по содержанию. В которых содержится привет хакеру Крису:
Hello Chris! Is it you? I give up. I know about UFO. It's horror! I already pity myself.
Короче, надо перечитывать 154 трек заново.
1. Ожидать или не ожидать перечитанный образ OpenIT?
2. Чем ты считываешь дискеты, какой утилитой на PC?
3. Пока занимаюсь Полем Чудес. Выводы чуть позже.
Если не трудно, считай образ вот этим: http://www.chrysocome.net/downloads/rawwritewin-0.7.zip и выложи на ф/о.
А если вот этим попробовать считать?
Жаль...
Лично я бы загружался с usb flash drive (cd/dvd) в чистый ms-dos и юзать teledisk? Unreal понимает образы td0, и есть конвертеры в udi, fdi.
Но не будем превращать топик в чат.
---------- Post added at 00:46 ---------- Previous post was at 00:24 ----------
Поле Чудес:
отсутствует сектор 1 на дорожке 0, а там находится исполняемый код.
Перечитать.
TeleDisk под WinXP ничего не считает, т.к. система блокирует прямой доступ к диску для всех приложений (как DOS, так и Win32 и Win64).
Прямой доступ к диску есть только у драйверов, причём стандартный драйвер умеет читать только диски 720Кб и 1.44Мб, для чтения прочих форматов (TR DOS, iS-DOS и т.д.) нужен софт работающий через драйвер FDRAWCMD. Однако те программы что под этот драйвер написаны (ZXDiskStudio) как правило хитрозащищённые диски не читают.
Единственный вариант вручную восстанавливать защиту из неполноценных образов, как мы делали в случае жураналом.
Есть ещё такой вариант попробовать прочитать диск утилитой MakeFDI 1.2 (http://vtrdos.ru/pcutilz/MAKEFDI.ZIP), там надо правильно ключи указать чтобы создать udi файл вместо fdi. Только для этого надо в DOS загружаться, можно например с Live CD.
Тут еще все зависит на каком дисководе писали дискету. Как правило под голым DOS Teledisk у меня был способен прочитать дискеты только те, что и так прекрасно читались makefdi. И наоборот, если makefdi выдает ошибку что не может найти первый сектор, то и teledisk в пролете.
Это ещё одна особенность формата TR-DOS, и дисковод тут не причём.
Дело в том что если дискета изначально форматировалась в чистом TR DOS 5.03 (а не в ломанных 6.xx или 5.1x) то такая дисткета имеет одну особенность, первый сектор находится слишком близко к началу дорожки т.е. индексному отверстию (размер зазора GAP4 слишком мал). Контроллер BetaDisk определяет начало дорожки по переднему фронту индексного сигнала, в вот котроллер Intel по заднему фронту, и поэтому он не успевает прочитать первый сектор.
Всё вышексказанное не относится к дискетам отформатиронным в DCU и подобным форматировалкам либо отформатированных командой FORMAT в ломанных версиях TR DOS как напрмер 6.xx. Дискеты отформатиронные этими средствами нормально читаются на PC, поскольку первый сектор находится на нужном расстоянии от начала дорожки.
Выход такой: если диск не защищённый то можно сделать с него копию (естественно на реале) на диск, который предварительно отформатирован "правильной" форматировалкой. Этот скопированный диск уже можно нормально прочитать на PC.
Можно ещё услышать совет сделать диску с нечитаемымыми первыми секторами restore в любой форматировалке, но я этого делать не комендую, т.к. в случае с защищёнными дискетами можно потерять ключевые метки.
В OpenIT немного изменилось положение в лучшую сторону:) На 154 треке уже 2 сектора, как и должно быть, только вместо ожидаемого 1-го сектора идет сектор с номером 101, который содержит вместо данных разметку дорожки. 2й сектор, судя по всему, подходящий.
P.S.В общем, стало понятно, на чем строится оригинальная защита:
1) В буфер по адресу, допустим, c000 cначала грузится со 154 дорожки сектор номер 2 (512 байт).
2) Потом в этот же буфер по этому же адресу c000 грузится сектор номер 1, который записан с ошибкой. Сектор 1 загружается в буфер не целиком, а столько, сколько успело считаться до ошибки, естественно. Допустим, 194 байта.
(Если сектор считан БЕЗ ОШИБКИ, то это считается ненормальным и программа переходит в п.1)
Таким образом, получается, что в буфере с адреса с000 будет лежать считанный кусок (194 байта) 1го сектора и остаток до 512 байт заполнен окончанием второго сектора. Потом автором подсчитывается контрольная сумма половины буфера, и сохраняется, и сравнивается с ожидаемой. Если совпало, то ОК, переходим в буфер на выполнение кода, загруженного из "битого" сектора номер 1 (ксорка). Иначе возврат в п.1
Вывод: сектор 1 желательно считать :)
P.P.S. И отсылаю Гудбоя к нему же: http://zx.pk.ru/showpost.php?p=582455&postcount=4
P.P.S. И еще вот сюда отсылаю: http://zx.pk.ru/showpost.php?p=14608&postcount=12
Нет, драйвера ей точно не нужны. Она хоть и способна запускаться под Windows, но работать с ней надо под чистым MS-Dos как Teledisk.
---------- Post added at 01:04 ---------- Previous post was at 01:01 ----------
Вот это интересная идея. А то я раньше считывал такие дискеты только заклеивая частично индексное отверстие. Но это не всегда помогало.
еще можно сделать нашлепку на пц кабель
у автора fdrawcmd.sys в faq по samdisk есть такая фраза
Sectors positioned too close to the index hole cannot be accessed at all. This is known to affect some TRS-80 and BetaDisk (TR-DOS) disks, where there is insufficient gap4a padding at the start of the track. Disks that aren't index-synchronised (including some 8-bit Atari formats) may also be affected by this. SAMdisk will usually warn if it suspects the first sector is missing, and supports use of an index-halving cable to access them.
и ссылка http://www.trs80.nl/trs80hw1.htm
у меня сработало,
правда с этим кабелем не работал скан секторов
но зато чтение работало прекрасно ;)
разобравшись в конструкции дисковода понял что проще передвигать платку (тем более это предусмотрено ( у mitsumi, на teac датчик жёстко вмонтирован в плату)) вместо экспериментов с перекрытием отверстия на дискете. сейчас начну пробовать
Естественно не нужны. Приложения для DOS работают напрямую с железом без каких-либо драйверов. У makefdi надо правильно ключи в командной строке выставить чтобы результат был.
А драйвер нужен только для Windows приложений.
---------- Post added at 14:46 ---------- Previous post was at 14:39 ----------
Я так понимаю сектор 1 записан с использованием перерванной записи, поэтому чтение происходит до момента рассинхронизации MFM. К сожалению даже UDI формат такое эмулировать не может.
Выход один убирать защиту совсем.