Вход

Просмотр полной версии : SpectrumProgress#3



goodboy
22.01.2014, 22:11
похоже на старое новьё ?

Crash Nicker
22.01.2014, 23:04
Надо б почитать, гы.

baxter
22.01.2014, 23:13
goodboy, положи сюда.

goodboy
22.01.2014, 23:25
кусок журнального кода выполняется некорректно. мне пока трудно понять кто виноват: некорректный FDIобраз или эмуляция ВГшки.
знатоки объясните что тут делается


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

DOS это выполнение программы в ПЗУtrdos по-адресу в IX.

John North
22.01.2014, 23:30
goodboy, а на реале пробовал?
ну а вдруг?)

goodboy
22.01.2014, 23:36
goodboy, а на реале пробовал?
ну а вдруг?)у меня сейчас один рабочий дисковод (mitsumi), я пол-дня колдовал с перемычками и в итоге заставив его работать на PC снял образ с помощью zxDiskStudio под XP. образ под эмулем я в итоге запустил (правя на ходу код). снимать дисковод на реал сейчас затруднительно.

John North
22.01.2014, 23:39
goodboy, дык выложи сюда - мы проверим.. на реале..

John North
23.01.2014, 00:12
там в основном 1024*4
это чего такое??
ты сам то как такое смотришь/открываешь?

goodboy
23.01.2014, 00:14
это чего такое??
ты сам то как такое смотришь/открываешь?
на дорожке 4ре сектора по килобайту, а не 16 по 256

solegstar
23.01.2014, 00:29
goodboy, выложи в FDI. на реале FDI можно записать на реальную дискету в WDC.

Blade
23.01.2014, 00:36
объясните что тут делается

Чтение порта #1F ВГ93.

Лас
23.01.2014, 00:57
кусок журнального кода выполняется некорректно. мне пока трудно понять кто виноват: некорректный FDIобраз или эмуляция ВГшки.
знатоки объясните что тут делается


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

DOS это выполнение программы в ПЗУtrdos по-адресу в IX.
ТС, проверь, защищен ли диск (образ) от записи.

Rindex
23.01.2014, 01:09
у меня ещё и второй номер нашёлся.
похоже что рабочий (на вирте оригинал помечен что с ошибками) проверяйте что-к-чему.

Нерабочий. Загружаю статью, а обратно в меню уже не выйти, не получается. Где-то виснит, где-то сбрасывается. Пробовал Унрилом 0.38.1, в Спекуляторе 8 такая же шляпа.

AAA
23.01.2014, 01:32
Те кто защищал свои программы - преступники! К стенке! Сколько заработали? Да ничего! А продукт потерян... Сколько добра потеряли из за барыг и скупердяев.

Лас
23.01.2014, 01:37
знатоки объясните что тут делается


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 ;иначе ERROR
;варианты прихода сюда:
;1. ошибок ВГ не было, а это не ожидается.
;2. была ошибка, и это не ошибка КС

DOS это выполнение программы в ПЗУtrdos по-адресу в IX.

Я не знаток, но прокомментировал в коде.

Надо ставить точку останова на ERROR, и смотреть, что в аккумуляторе и запостить сюда. Еще интересно знать, какую команду выполняла ВГэйка.
Посмотреть в анриле. Запостить.
Как? На скриншоте выделено. Красный квадратик - код команды ВГ, желтый квадратик состояние ВГ.
P.S. Желательно отключить trap и no_delay в анриле.

AndTorp
23.01.2014, 01:44
Где-то виснит, где-то сбрасывается. Пробовал Унрилом 0.38.1, в Спекуляторе 8 такая же шляпа.Тоже попробовал разными эмуляторами. Не работает.
Связь с авторами потеряна?

Лас
23.01.2014, 12:27
Там делается попытка прочитать первый попавшийся заголовок сектора на дорожке и ожидается, что будет ошибка контрольной суммы, так как ожидается, что сектора записаны с ошибкой (как на оригинальной дискете с журналом). А в эмуляторе получается не "ошибка КС", а "сектор не найден". Потому и не работает журнал.

Надо смотреть, правильно ли считана дискета (ковырять данные в образе fdi).

Лас
23.01.2014, 13:30
Дело не в 0 дорожке и 10-м секторе.
Там для проверки защиты головка флопика позиционируется не на 0 дорожку, а на 45-ю. И производится чтение первого встреченного (сиречь произвольного) заголовка сектора на этой 45-й дорожке.

То, что засылается затем в регистры дорожки и сектора при чтении состояния ВГ - не важно (пусть 0 дорожка и 10 сектор). На это не обращай внимания.

Дело в 45й дорожке, которая в твоем fdi вообще отсутствует. Именно она была основой защиты. И видимо, не считалась при создании образа. Нельзя ли попробовать теледиск? Или редактором файлов.fdi создать на этой дорожке один битый сектор (с испорченной КС).

Такая же ситуация со вторым номером.

Alexandr Medvedev
23.01.2014, 15:59
производится чтение первого встреченного (сиречь произвольного) заголовка сектора на этой 45-й дорожке.
редактором файлов.fdi создать на этой дорожке один битый сектор (с испорченной КС)Ага получилось, вот только не сектор с ошибочной CRC, а ID сектора с ошибочной CRC.
И ещё образ пришлось в формат udi сконвертировать.
В fdi можно тоже сделать, но меня проблемы совместимости пугают, не все эмуляторы проверяют флаг правильности CRC в fdi файлах.
Дело в том что формат fdi не хранит саму CRC, а только флаг правильная она или нет, да и то с оговоркой это возможно.
Далеко не факт что все эмули этого придерживаются.
Вот цитата из оригинальной спецификации.
bit 0-5: флаги CRC. Единица в одном из разрядов означает, что
при считывании этого сектора на длину 128,256,1024,2048 или
4096 байт получается правильная контрольная сумма. Если во всех
разрядах 0 - сектор записан с ошибкой контрольной суммы.
bit 6: В данной версии всегда 0. Возможно, 1 в данном разряде
будет обозначать адресный маркер без области данных.

Alexandr Medvedev
23.01.2014, 16:22
А вот и сами образы.

Alexandr Medvedev
23.01.2014, 22:36
А первого номера не сохранилось?
Тот что на VT в формате trd лежит. Если он там взломанный, то было бы неплохо и его в оригинальном виде с защитой сделать для полноты коллекции.

Rindex
23.01.2014, 22:50
А вот и сами образы.

Если честно второй номер работает также как и раньше, т.е. из раздела не выходит. А третий грузит квадратики.

Rindex
23.01.2014, 23:10
ты там файлы не попутал, у меня всё пучком unreal 0.38.1

Да, в Унриле работает. Я пробовал Спекулятором 8. Там ничего не изменилось.

Faster
24.01.2014, 16:14
кусок журнального кода выполняется некорректно. мне пока трудно понять кто виноват: некорректный FDIобраз или эмуляция ВГшки.
знатоки объясните что тут делается


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

DOS это выполнение программы в ПЗУtrdos по-адресу в IX.
В этом листинге приведен классический алгоритм процедуры чтения регистра состояний #1f ("ZX-Spectrum & TR-DOS Для пользователей и программистов" А.Ларченко и Н.Родинов. Питер'93, с.211 (http://vtrdos.ru/book/ZXSPECTR.ZIP):


(c) Andrew MOA Larchenko
in_1f out (#3f),0
out (#5f),#a
ld d,#01
jp #3f33
На выходе, в регистре b будет находиться значение регистра состояний #1f, т.е. таким способом эмулируется команда in b,(#1f). Однако, при выполнении данной процедуры будут запорчены регистры дорожки #3f и сектора #5f, поэтому, при необходимости, следует восстановить в них исходные значения.

Расшифровка данных из регистра b, полученных после чтения регистра состояний #1f:
http://abzac.retropc.ru/images/i15_10.gif

Faster
24.01.2014, 16:53
Faster, спасибо.
как я понял наш случай 2^3=8 ошибка crc
Типа того :)

Лас
24.01.2014, 20:43
Если я правильно понял Faster, то ошибка контрольной суммы это как раз наш случай?

снял ПолеЧудес от OutLand и OpenIT из Питера, работают чуть-чуть, надо разбираться

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 трек заново.

Лас
24.01.2014, 22:02
1. Ожидать или не ожидать перечитанный образ OpenIT?
2. Чем ты считываешь дискеты, какой утилитой на PC?
3. Пока занимаюсь Полем Чудес. Выводы чуть позже.

Лас
24.01.2014, 23:31
у меня под XP работает только ZXDStudio
дискету перечитал - толку никакого.
как вариант могу считать нужный сектор на реале. (так скорее всего и сделаю, только не сию минуту)
Если не трудно, считай образ вот этим: http://www.chrysocome.net/downloads/rawwritewin-0.7.zip и выложи на ф/о.

SoftLight
25.01.2014, 00:21
А если вот этим (http://simonowen.com/samdisk/) попробовать считать?

Лас
25.01.2014, 00:46
не получается.
Жаль...
Лично я бы загружался с 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, а там находится исполняемый код.
Перечитать.

Vadim
25.01.2014, 07:43
Лично я бы загружался с usb flash drive (cd/dvd) в чистый ms-dos и юзать teledisk?
Teledisk неправильно работает, когда мы грузим MS-DOS через эмуляцию дискеты с CD/DVD или flash drive. Как именно я в данный момент не помню, но проблема была.

Alexandr Medvedev
25.01.2014, 10:17
teledisk под xp часа два мурыжил диск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.

SoftLight
25.01.2014, 16:31
Тут еще все зависит на каком дисководе писали дискету. Как правило под голым DOS Teledisk у меня был способен прочитать дискеты только те, что и так прекрасно читались makefdi. И наоборот, если makefdi выдает ошибку что не может найти первый сектор, то и teledisk в пролете.

Alexandr Medvedev
25.01.2014, 20:29
если makefdi выдает ошибку что не может найти первый сектор, то и teledisk в пролетеЭто ещё одна особенность формата TR-DOS, и дисковод тут не причём.
Дело в том что если дискета изначально форматировалась в чистом TR DOS 5.03 (а не в ломанных 6.xx или 5.1x) то такая дисткета имеет одну особенность, первый сектор находится слишком близко к началу дорожки т.е. индексному отверстию (размер зазора GAP4 слишком мал). Контроллер BetaDisk определяет начало дорожки по переднему фронту индексного сигнала, в вот котроллер Intel по заднему фронту, и поэтому он не успевает прочитать первый сектор.
Всё вышексказанное не относится к дискетам отформатиронным в DCU и подобным форматировалкам либо отформатированных командой FORMAT в ломанных версиях TR DOS как напрмер 6.xx. Дискеты отформатиронные этими средствами нормально читаются на PC, поскольку первый сектор находится на нужном расстоянии от начала дорожки.

Выход такой: если диск не защищённый то можно сделать с него копию (естественно на реале) на диск, который предварительно отформатирован "правильной" форматировалкой. Этот скопированный диск уже можно нормально прочитать на PC.

Можно ещё услышать совет сделать диску с нечитаемымыми первыми секторами restore в любой форматировалке, но я этого делать не комендую, т.к. в случае с защищёнными дискетами можно потерять ключевые метки.

Лас
26.01.2014, 00:34
В 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

SoftLight
26.01.2014, 01:04
а для makefdi драйвера нужны ?
(а то она у меня под досом даже стандартную дискету не читает)
teledisk заработал, снял образ OpenIT
(но в нём те-же проблемы как и с ZXDStudio)

Нет, драйвера ей точно не нужны. Она хоть и способна запускаться под Windows, но работать с ней надо под чистым MS-Dos как Teledisk.

---------- Post added at 01:04 ---------- Previous post was at 01:01 ----------



Выход такой: если диск не защищённый то можно сделать с него копию (естественно на реале) на диск, который предварительно отформатирован "правильной" форматировалкой. Этот скопированный диск уже можно нормально прочитать на PC.

Вот это интересная идея. А то я раньше считывал такие дискеты только заклеивая частично индексное отверстие. Но это не всегда помогало.

esl
26.01.2014, 02:17
еще можно сделать нашлепку на пц кабель

у автора 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

у меня сработало,
правда с этим кабелем не работал скан секторов
но зато чтение работало прекрасно ;)

goodboy
26.01.2014, 14:39
разобравшись в конструкции дисковода понял что проще передвигать платку (тем более это предусмотрено ( у mitsumi, на teac датчик жёстко вмонтирован в плату)) вместо экспериментов с перекрытием отверстия на дискете. сейчас начну пробовать

Alexandr Medvedev
26.01.2014, 14:46
а для makefdi драйвера нужны ?
(а то она у меня под досом даже стандартную дискету не читает)Естественно не нужны. Приложения для DOS работают напрямую с железом без каких-либо драйверов. У makefdi надо правильно ключи в командной строке выставить чтобы результат был.
А драйвер нужен только для Windows приложений.

---------- Post added at 14:46 ---------- Previous post was at 14:39 ----------


Сектор 1 загружается в буфер не целиком, а столько, сколько успело считаться до ошибки, естественно.Я так понимаю сектор 1 записан с использованием перерванной записи, поэтому чтение происходит до момента рассинхронизации MFM. К сожалению даже UDI формат такое эмулировать не может.
Выход один убирать защиту совсем.

goodboy
26.01.2014, 15:41
Приложения для DOS работают напрямую с железом без каких-либо драйверов. У makefdi надо правильно ключи в командной строке выставить чтобы результат был.
как я понял обычная trdos дискета читается без параметров (я только менял data transfer rate - без толку)

goodboy
26.01.2014, 17:39
сектор 1 желательно считать
вот он, с реала
(получается стандартный - 256b, ксорка по буквам из текста)

Hello hacker!
I think it is not very hard to crack my defence.
But what the reason?
Don't waste your time. Send me a letter.
(My adress is in the end of the scroll.)

чё-то я стормозил (реал уже убрал) надо было посмотреть реальную структуру дорожки.

сдвиг платки (я так и не понял на ней приёмник или передатчик) реально помогает, в ZXDstudio сразу видно как смещаются сектора. программа реально полезная и работает ещё на win2k

Лас
26.01.2014, 19:58
Естественно не нужны. Приложения для DOS работают напрямую с железом без каких-либо драйверов. У makefdi надо правильно ключи в командной строке выставить чтобы результат был.
А драйвер нужен только для Windows приложений.
Раскажите это файлу mouse.com

---------- Post added at 19:58 ---------- Previous post was at 19:44 ----------


вот он, с реала
(получается стандартный - 256b, ксорка по буквам из текста)
Он расксорен уже, что ли, тобою. Нужен просто сектор с дискеты без преобразований. Во вложении то, что нужно?

Лас
27.01.2014, 01:39
Удалось починить OpenIT из образа td0, что выкладывал Гудбой...

Как стало ясно ранее, на 154 треке было всего 2 сектора, один исправный, вместо другого в образ считалась "каша".

Сконвертировал td0 в fdi - просто мне так проще редактировать.
В редакторе вместо сектора с "кашей" вставил тот сектор, что удалось считать Гудбою на реале.
Пометил этот сектор сбойным (как задумано автором) с помощью флага КС в .fdi.
Наконец, исправил нумерацию секторов на 154 треке. Должны были быть сектора с номерами 2 и 3, а не 101 и 2, как было считано.

Больше ничего не трогал. Авторские проверки на 154 треке отрабатывают как надо.
Работоспособность игры не проверял - загрузил, увидел игровое поле, выключил.

goodboy
27.01.2014, 11:29
ох уж эти Петербуржцы, один ставит защиту - другой её ломает, а я так и не понимаю откуда берётся сектор с нужными данными :v2_confu:
(скрины с реала)

Alexandr Medvedev
27.01.2014, 13:39
Раскажите это файлу mouse.comРассказываю :-) .
mouse.com (запущенный под WinXP) работает напрямую с виртуальной мышью, эмулируемой VDM подсистемой (http://en.wikipedia.org/wiki/Virtual_DOS_machine) для DOS приложений.
When a DOS program running inside a VDM needs to access a peripheral, Windows will either allow this directly (rarely), or will present the DOS program with a Virtual Device Driver which emulates the hardware using operating system functions.Это типа маленький встроенный mini VirtualBOX.
Для DOS приложений можно ещё и виртуальный SoundBlaster настроить см. %windir%/config.nt, %windir%/autoexec.nt . Однако на реальном компе может стоять любая звуковая карта.

Лас
27.01.2014, 18:36
не понимаю откуда берётся сектор с нужными данными :v2_confu:
(скрины с реала)

Сектор 3 - привет хакеру Крису - загружается автором первым. С нормальным crc.
Сектор 2 - привет неизвестному хакеру, ксорка - загружается поверх третьего сектора. Это "битый" сектор (с обязательной ошибкой считывания, это ключевой момент защиты от копирования). Контроллер состояния ВГ должен указывать на ошибку после чтения этого сектора, автор это проверяет. Еще автором затем проверяется контрольная сумма того, что считалось.
Их всего 8 штук на дорожке, этих вторых секторов, они все одинаковые. Причуда автора.
В образе td0 на 154 дорожке при создании образа было 2 ошибки - сектор 2 шел под 101-м номером и содержал не полезные данные, а разметку дорожки. А сектор 3 шел в образе td0 под 2-м номером, но прочитался правильно.

Я не ломал ничьих защит. Изучил логику загрузки. Взял считанный тобой на реале 2-й сектор, пихнул его в fdi вместо 101-го и пометил его сбойным. А также исправил номер 3го сектора, который изначально в образе td0 был 2-м.
Всё. Ну, можно еще на 154 дорожке продублировать 2й сектор еще 7 раз.

---------- Post added at 16:58 ---------- Previous post was at 16:53 ----------

Alexandr Medvedev, mouse.com это драйвер мыши или нет?

---------- Post added at 17:18 ---------- Previous post was at 16:58 ----------


Их всего 8 штук на дорожке, этих вторых секторов, они все одинаковые. Причуда автора.
Или не причуда. На Спектруме не знаю, как проверить.
Возможно, что там на 154 дорожке семь секторов №2 записаны нормально, а восьмой сектор №2 - записан с ошибкой. После считывания 3-го сектора, перед тем, как перейти к считыванию сбойного сектора №2, автором сделана задержка сколько-то мс. Вероятно, для того, чтобы диск успел повернуться на определенный угол, к нужному сектору из "одинаковых".

На спектруме сложно проверить эту версию - копировщики встретят нормальный сектор №2 и отрапортуют, что считан ОК. Что, кстати, видно на скрине Гудбоя - сканированием дорожки получена её карта, а вот сбойных секторов №2 там нет.

---------- Post added at 18:36 ---------- Previous post was at 17:18 ----------

Вообще я тут поспешных выводов наделал, похоже. Надо вечером сесть с нуля разбираться. Похоже, там немного иначе автор задумал...

goodboy
27.01.2014, 19:58
Вообще я тут поспешных выводов наделал, похоже. Надо вечером сесть с нуля разбираться. Похоже, там немного иначе автор задумал... помучал на реале этот кусок. как я понял содержимое сектора d=154,e=2 совершенно не важно (я для примера грузил его в 0),
наверно от его загрузки требуется только позиционирование головки, а вот дальнейшая пауза важна, иначе потом загрузится блок с приветом Крису.
после загрузки второго блока с=4 и подсчёт контрольной суммы верный. то есть загрузка этих блоков больше не повторяется.

Лас
28.01.2014, 01:43
Вобщем, загрузка идет не так, как я думал ранее...

А вот как:
Первым грузится сектор 3. Функция его одна - это начало отсчета угла поворота диска.
Далее пауза на поворот диска на определенный угол, с которого затем происходит считывание определенного сектора №2, записанного, как верно заметил Alexandr Medvedev:

с использованием перерванной записи, поэтому чтение происходит до момента рассинхронизации MFM
Как указал goodboy, после чтения этого сектора:

после загрузки второго блока с=4
рег. С=4 это при команде чтения сектора установленный бит D2 - потеря данных. Всё сходится.

Этот сбойный сектор с №2 спрятан среди других семи секторов с номером 2 (фальшивые, с приветом Крису). При трассировке отладчиком (или копировании трековым копировщиком после сканирования трека) считан будет другой сектор (с вероятностью 1 к 8 ?). Так как точный поворот на угол от начала отсчета не будет выдержан отладчиком (или копировщиком).

Структура 154 трека:

-индексное отверстие
-сектор 3 - хлам типа байтов разметки дорожки, читается ОК
-сектор 2 - фальшивый, привет крису, читается ОК
-сектор 2 - настоящий, нужные данные, сбойный (читается 512 байт, потом рассинхронизация данных)
-сектор 2 - фальшивый, привет крису, читается ОК
-сектор 2 - фальшивый, привет крису, читается ОК
-сектор 2 - фальшивый, привет крису, читается ОК
-сектор 2 - фальшивый, привет крису, читается ОК
-сектор 2 - фальшивый, привет крису, читается ОК
-сектор 2 - фальшивый, привет крису, читается ОК

В результате экспериментов выяснилось:
UnrealSpeccy при включенной опции перехват процедур TR-DOS ("Trap tr-dos r/w") жульнически грузит первый встреченный от индексного отверстия сектор 2 (таким образом, попадая на фальшивый).
При отключенной опции перехват процедур TR-DOS ("Trap tr-dos r/w")
UnrealSpeccy за время задержки "поворачивает диск" и честно грузит настоящий сектор №2.

Если, в целя эксперимента, увеличивать программную задержку на время поворота диска, то UnrealSpeccy грузит сектор №2 дальше от индексного отверстия.

Вопрос: нужно ли делать "честный" образ с этой игрой, которая будет грузиться и запускаться в UnrealSpeccy отключенными ловушками и неизвестно, будет ли работать в других эмуляторах? Или достаточно того, что я уже выкладывал.

Спасибо всем, кто участвовал. Лично мне было очень интересно поковыряться в этой узкоспециальной теме.

Alexandr Medvedev
29.01.2014, 13:34
В результате экспериментов выяснилось:
UnrealSpeccy при включенной опции перехват процедур TR-DOS ("Trap tr-dos r/w") жульнически грузит первый встреченный от индексного отверстия сектор 2 (таким образом, попадая на фальшивый).А если фальшивые сектора №2 перенумеровать например 5 вместо 2 (оставив с номером 2 только настоящий) чтобы не мешались и не сбивали с толку эмулятор?
Вопрос: нужно ли делать "честный" образ с этой игрой, которая будет грузиться и запускаться в UnrealSpeccy отключенными ловушками и неизвестно, будет ли работать в других эмуляторах?Думаю нужно.
Будет неплохой тест на качество эмуляции.

Лас
29.01.2014, 16:34
А если фальшивые сектора №2 перенумеровать например 5 вместо 2 (оставив с номером 2 только настоящий) чтобы не мешались и не сбивали с толку эмулятор?
Это уже сделано. Я выше выложил версию, где на дорожке только сектор 2 и 3. Должно работать в любом эмуляторе с поддержкой fdi.

goodboy
31.01.2014, 01:26
5. Все сектора на дорожке имеют одинаковый номер и содержимое, кроме одного в середине! При попытке считать содержимое сектора будет читаться первый сектор с таким номером. При работе защищенного диска программа даёт команду ВГ93 на раскрутку диска, потом выжидает определенное количество милисекунд и тут же дает команду считать сектор, если всё нормально, то считывается именно тот сектор, который требуется. Пример: игра Open-It. Повторить удалось только вручную сформировав дорожку со всем её содержимым.

3. Дорожка нестандартной длины. Программа считывает дорожку целиком и проверяет сколько байтов информации физически помещается на дорожке. Если это число больше или меньше, то программа не запускается. Пример: первые номера журнала ZX-Format. Эту защиту повторить я не смог, но предполагаю, что такие дорожки форматировались и записывались на разрегулированных дисководах, где скорость вращения диска отличалась от стандартной. Обходилось заменой одного байта в программе.
получается что всё разгадано до нас :v2_dizzy_aaaaa:

Лас
31.01.2014, 08:36
Где же ты был раньше? :)
Но всё равно было интересно.