Speccy - наш выбор!

Speccy - наш выбор! (http://zx-pk.ru/index.php)
-   Эмуляторы отечественных компьютеров (http://zx-pk.ru/forumdisplay.php?f=61)
-   -   Модуль АГАТ-7 для эмулятора Башкирия-2М (http://zx-pk.ru/showthread.php?t=17754)

GARNIZON 4th January 2012 17:19

Модуль АГАТ-7 для эмулятора Башкирия-2М
 
Последние несколько дней обсуждаем с b2m возможность поддержки АГАТ-7 в его эмуляторе.
В данный момент модуль Агата оставляет желать лучшего, просто потому, что автор не был знаком с Агатом в реальности.
Со своей стороны постараюсь предоставить все необходимые подробности и неочевидные тонкости.

Обсуждение решили перенести на форум, в отдельную тему - чтоб не засорять основную.

Вообще эмулятор АГАТов для ОС Windows уже существует - автор Олег Одинцов.
http://deka.ssmu.ru/er/agat/Soft/winEmul.shtml
Он сто процентов совместим со всем софтом.
Однако из-за большОго кол-ва эмулируемых плат/устройств и максимального набора функций - иногда
вызывают сложности в настройке и использовании у рядового пользователя.

Для запуска игрушек и подавляющего большинства прикладных программ - достаточно штатной
комплектации Агата в эмуляторе, без всяких лишних настроек и доп. оборудования.
Поэтому замечательный эмулятор b2m - обещает быть весьма и весьма популярным.

b2m 5th January 2012 16:01

После непродолжительной переписки по мылу, решили продолжать тут. Пока разбираемся с поддержкой образов дисков с сайта GARNIZON-а (как основного источника образов).
Quote:

Originally Posted by GARNIZON
Какой софт брал? Если от девятки, то может и не работать.

Софт от девятки я даже и не пытаюсь брать. Взял .aim из каталога 7 ДОС-эмулятора. В принципе оно работает, но есть ньюанс: копировщик и рапира работают нормально, а вот бейсик весьма требователен к скорости вращения диска. Вообще странно, что там у каждой программы свой драйвер. Получается, что все программы, работающие с дисками, содержали в себе код ДОСа?

Quote:

Originally Posted by GARNIZON
уверен что для семерки это лишнее , однако вот:

AIM:
160 дорожек
Дорожка фиксированного размер $1940 (TrkSize800) слов 16 бит.
Следовательно, размер образа: 2068480 байт.

Байты слов хранятся в обратном порядке. Слова анализируются так:
00xx - обычные данные, через регистры IO передается младшая часть
01xx - синхросбой
02xx - конец дорожки (заворот на начало) [читается, но не записывается]
03xx - индекс начало (1 -> 0)
13xx - индекс конец (0 -> 1)

Про 00хх и 01хх я и сам догадался, а других байтов не видел. Конец дорожки и без того понятен, по размеру дорожки, а индекс я сделал фиксированный, несколько байтов от начала и конца, предположив, что дорожка дампится с диска сразу после индекса. А несколько индексных маркеров на дорожке - это нонсенс :)

GARNIZON 5th January 2012 20:52

Про ДОС:

Ну это фишка и семёрки и девятки ( у Apple этого нету ). В ПЗУ у машины только маленький системный монитор 2 Кбайт.
Системное ПЗУ (грубо - BIOS) содержит программу первоначального запуска машины, конфигрурирования базовой памяти,
процедуру поиска устройства, с которого можно загрузить операционную систему......

Всё остальное грузится с диска. Сами файлы конечно не имеют кода доса, но все системы имеют конечно.
Смысл в чем - что надо и больше подходит для конкретного случая, то и загружу, не обязательно штатную ДОС.
Агат работает с диском очень быстро, для загрузки в память (при включении) : ДОС системы , языка напрмер бейсик со
своим монитором! и стартовой программы на бейсике - сущие секунды.

Скажем надо в Apple игрушки поиграть - грузим Эпл дос,
Крупные пакеты тоже имеют свои собственные ДОС - такие, как лучше для данного случая.
Как раз именно эта гибкость системы и дает свободу, вплоть до вариантов когда агат начинает изображать из себя
другую ЭВМ : http://deka.ssmu.ru/er/agat/Apps/Onix.shtml

Обрати внимание: любой агат уже с рождения имел флоповод. Всё в системе завязанно на ДОС и любые программы
изначально написаны для работы с диском. Магнитофоном никто не пользовался - а зачем есть диск.
Нет, конечно разъем магнитофон был, но он использовался для например таких случаев:
http://deka.ssmu.ru/er/agat/Apps/Fonograf.shtml
http://deka.ssmu.ru/er/agat/Apps/Picler.shtml

Да, код доса и драйверов был индивидуальным. Почему .... Ну, наверное, каждый автор стремился сделать свою
программу наиболее автономной и не надеялся на других разработчиков. НО! Почти всегда эти досы и драйвера имели
исходники с общими корнями, поэтому ковырятся в них легко - всегда есть место чувству deja vu.

Но насчёт привередливости к скорости - это странно. Я бы сказал так: к скорости привередливы некоторые форматтеры,
особенно те, которые создают защищённые от копирования диски. А просто чтение/запись, особенно на 840кб - никаких
проблем быть не должно: они работают по битам готовности дисковода, и я бы не назвал их логику сильно привередливой.
Разве что у них есть таймауты на случай отказа контроллера или дисковода, но это как электрические пробки: пока явно
ножницы в розетку не сунешь - они не должны срабатывать.


Несколько индексных маркеров на дорожке - нонсенс, это понятно. Но:

- дорожка дампится от индекса только для дисков с защитой (точнее, дампится она от балды, но сигнал индекса запоминается и потом может быть перенесён в aim). Обычные агатовские драйвера сигнал индекса не анализируют
http://zx.pk.ru/showthread.php?t=9812&page=9
и поэтому как его отображать - значения не имеет (если диск не защищён).

- в описании формата aim не случайно чётко оговаривается как и когда должен появляться сигнал индекса в виртуальном
дисководе, как при наличии маркера так и при его отсутствии: диски с защитой могут строится как с явным маркером так и
без него - как мне удобнее. Игнорируя эти правила можно попасть в ситуацию, когда отмеченный как живой диск на сайте
в эмуляторе не заработает.

- маркер конца дорожки тоже может иметь существенное значение. Могу заверить, например, что некоторые сборники
http://deka.ssmu.ru/er/agat/Gamez/Compilat32.shtml
не будут загружаться, если маркер конца дорожки не будет обрабатываться. Понятно, что без него можно было бы
обойтись, но я вводил его не для красоты, а потому что бывают ситуации (при прямой конвертации eim -> aim) когда этот
маркер сильно помогает.

Надо сказать что контроллер 840 Кбайт - вообще штука с интересной историей:
http://zx.pk.ru/showpost.php?p=370591&postcount=166

b2m 7th January 2012 03:48

Обновил эмулятор на сайте, добавлена поддержка новых образов дисков:
*.dsk - посекторная копия диска (140 или 840Кб)
*.aim - специальный формат для нестандартных дисков (правда, пока из служебных байт поддерживается только синхросбой).

Запись на диски пока не поддерживается.

Вопрос к GARNIZON-у: судя по FDSPEED скорость эмуляции процессора достаточно точная, т.е. какой период обращения диска я эмулирую, такой он и показывает (максимум на 1% меньше). Однако если эмулировать один оборот за 200мс, то драйверы не читают диски - не успевают к синхросбою метки данных. Если между маркером сектора и вторым синхросбоем три байта AA, то минимальный период 270мс, а если четыре, то 230мс. А сколько на самом деле байт AA записывается при форматировании?

ZEman 7th January 2012 09:43

b2m, а *.NIB и *.IMG образы дисков будут поддерживаться в эмуляторе ?

GARNIZON 7th January 2012 10:38

Я скачал последнюю версию, но там еще нету разделения на
- агат7 +140 в 3 слоте
- агат7 +840 в 5 слоте?

И да, что-то не в порядке ИКП-1 например не грузится автоматом, только после сброса в мониор и C500G...


Щас... Спою..........

Ничего в целом, только по отдельности:

- о каком, на всякий случай, драйвере идёт речь? Чтобы предметнее было. То есть, ИКП-бейсик, РАПИРа, .......... ?

- есть такой вариант: FF&SYNC 95 6a vol track sect 5a aa aa aa aa aa a4 FF&SYNC 6a 95 .....

- там что-то такое было.... В общем, нужно учитывать, что драйвер ждёт синхро, но это ожидание тоже требует времени.

- фрагмент реального диска с ИКП (предположительно форматировался копировщиком ИКП):
AA AA 00+01 00+01 00+01 95 6A 00+00 0B 00+00 5A AA AA AA AA AA A4 00+01 00+01 00+01 6A 95 9B
(числа с "+" - это как бы один шаг: 00+01 - sync, 00+00 - просто ноль)

- фрагмент реального диска (предположительно, форматировался по init hello):
AA AA AA A4 00+01 95 6A FE 27 14 5A AA AA AA AA AA A6 00+01 AA AA AA AA A4 00+01 6A 95

Так что кто как хочет так и форматит.

Тут ещё нужно учитывать, что в реальности, свежеформатированный диск и диск, с перезаписанными полями данных могут отличаться: в т.ч. может проскочить несколько синхро (Тот, который записывался форматтером и при последующей записи. Возможен синхросбой и за счёт разрушения gap-байт).

ИКП-Бейсик-7:

0CFF - A9 20 .. ")." LDA #20
0D01 - 85 26 .. ".." STA 26
0D03 - C6 26 .. "F." DEC 26
0D05 - F0 37 .. "П." BEQ 0D3E
0D07 - 9D 8A C0 "..@" STA C08A, X
0D0A - BD 86 C0 "=.@" LDA C086, X Ждем sync
0D0D - 0A .. .. "." ASL A
0D0E - 30 FA .. ".З" BMI 0D0A
0D10 - BD 84 C0 "=.@" LDA C084, X
0D13 - 20 ED 0A ".М." JSR 0AED Читаем пролог
0D16 - C9 95 .. "I." CMP #95
0D18 - D0 E9 .. "PИ" BNE 0D03
0D1A - 9D 8A C0 "..@" STA C08A, X
0D1D - 20 ED 0A ".М." JSR 0AED
0D20 - C9 6A .. "Iй" CMP #6A
0D22 - D0 DF .. "P_" BNE 0D03
0D24 - A0 02 .. " ." LDY #02
0D26 - 20 ED 0A ".М." JSR 0AED
0D29 - 99 2D 00 "..." STA 2D, Y Читаем поля
0D2C - 88 .. .. "." DEY
0D2D - 10 F7 .. ".В" BPL 0D26
0D2F - 20 ED 0A ".М." JSR 0AED
0D32 - C9 5A .. "Iz" CMP #5A
0D34 - D0 CD .. "PM" BNE 0D03
0D36 - BD 86 C0 "=.@" LDA C086, X Проверяем, что не было сбоя синхро
0D39 - 0A .. .. "." ASL A
0D3A - 10 C7 .. ".G" BPL 0D03
0D3C - 18 .. .. "." CLC
0D3D - 60 .. .. "ю" RTS Выходим, совершенно ничего больше не проверяя и не ожидая


Дальше исполняется примерно 20 команд без обращения к флопу.

Затем ждем поля данных:

0A80 - A0 30 .. " ." LDY #30
0A82 - 9D 8A C0 "..@" STA C08A, X
0A85 - 88 .. .. "." DEY 2 такта
0A86 - F0 56 .. "Пv" BEQ 0ADE 3 такта (или 2 ?)
0A88 - BD 86 C0 "=.@" LDA C086, X 4 такта
0A8B - 0A .. .. "." ASL A 2 такта
0A8C - 30 F7 .. ".В" BMI 0A85 3 такта

Итого, он будет ждать (2 + 3 + 4 + 2 + 3) * 30 = 420 тактов, такт как раз микросекунда, значит столько и ждём. На дорожке обычно байт 7070 примерно, 200000 микросекунд на оборот, получается где-то 30 микросекунд на байт. Получается, за время ожидания может проскочить где-то байт 20, что всяко с запасом при размере GAP в пять-шесть байт. Проверяйте, может я где-то ошибся в цифрах.

---------- Post added at 08:38 ---------- Previous post was at 08:34 ----------

ЗЫ !!! Сейчас сообразил: 7070 байт - это полный цикл форматтера, перекрывающий дорожку (т.е. он пишется не 200, а 203 мкс, чтобы гарантированно переписать старое содержимое).

Размер AIM-дорожки меньше, 6464 байта. Почему так - не помню, но цифра была получена не случайно, я её долго подбирал чтобы работали особо изощренные Бадеровские защиты и креаторы этих защит. Возможно, это связано с тем, что 7070 - это цифра, предполагающая размер синхросбоя как 1 байт, но, возможно, это не так. К сожалению, пока что физический формат записи 840кб дисков никем не описан и не изучен (видимо, кроме разработчика).

b2m 8th January 2012 03:37

Quote:

Originally Posted by ZEman (Post 452864)
b2m, а *.NIB и *.IMG образы дисков будут поддерживаться в эмуляторе ?

Это одно и то-же, *.IMG поддерживаются.

Quote:

Originally Posted by GARNIZON (Post 452870)
Я скачал последнюю версию, но там еще нету разделения на
- агат7 +140 в 3 слоте
- агат7 +840 в 5 слоте?

Да, поленился сделать. Хотелось сначала поддержку образов доделать.

Quote:

Originally Posted by GARNIZON (Post 452870)
И да, что-то не в порядке ИКП-1 например не грузится автоматом, только после сброса в мониор и C500G...

Это который .aim? Он же для девятки вроде? Он у меня и из монитора не грузится. Нулевой сектор грузится, дальнейший блок тоже, а после запуска блока вылетает.

Quote:

Originally Posted by GARNIZON (Post 452870)
о каком, на всякий случай, драйвере идёт речь?

В бейсике.


Quote:

Originally Posted by GARNIZON (Post 452870)
есть такой вариант: FF&SYNC 95 6a vol track sect 5a aa aa aa aa aa a4 FF&SYNC 6a 95 .....

В образах дисков, которые есть у меня, три и четыре байта AA. С пятью будет наверное нормально.

Quote:

Originally Posted by GARNIZON (Post 452870)
Тут ещё нужно учитывать, что в реальности, свежеформатированный диск и диск, с перезаписанными полями данных могут отличаться: в т.ч. может проскочить несколько синхро (Тот, который записывался форматтером и при последующей записи. Возможен синхросбой и за счёт разрушения gap-байт).

Вот тут наверное собака и порылась. Как я понимаю, когда диск переставал читаться в бейсике, его переписывали на чистый отформатированный диск копировщиком (который читает вообще без проблем). А на новом диске перед вторым синхросбоем достаточно байт АА.

Quote:

Originally Posted by GARNIZON (Post 452870)
Получается, за время ожидания может проскочить где-то байт 20, что всяко с запасом при размере GAP в пять-шесть байт.

Там проблема в другом: когда выполнение доходит до ожидания синхросбоя, он (синхросбой) уже пролетел и считывается следующий за ним байт.

GARNIZON 8th January 2012 09:07

> Там проблема в другом: когда выполнение доходит до ожидания синхросбоя, он (синхросбой) уже пролетел и считывается следующий за ним байт.

???? А внимательное чтение документации на контроллер уже имело место?

Синхросбой не может пролететь: это флажек, реализованный RS-триггером. Он устанавливается при обнаружении ошибки чтения контроллером и сбрасывается программно. Драйвер сбрасывает его либо до ожидания sync (перед чтением поля адреса) либо после получения sync (если sync найден, но сигнатура за ним неверна и драйвер ожидает следующий sync), но не потому что пришел "следующий байт".

На всякий случай:
http://deka.ssmu.ru/er/agat/Reading/docs/es5323.txt
http://deka.ssmu.ru/er/agat/Reading/fl800k.shtml


> Это который .aim? Он же для девятки вроде? Он у меня и из монитора не грузится. Нулевой сектор грузится, дальнейший блок тоже, а после запуска блока вылетает.

AIM - формат контроллера 840 кб. Независимо от того, в какую архитектуру он воткнут. Есть порядком загрузочных образов 840 для семёрки. Семёрка в комплектации с 840 кб дисководом была вполне распространена.

> Вот тут наверное собака и порылась. Как я понимаю, когда диск переставал читаться в бейсике, его переписывали на чистый отформатированный диск копировщиком (который читает вообще без проблем). А на новом диске перед вторым синхросбоем достаточно байт АА.

Это находка :) Переписывать не читающиеся диски :)
Не, я -то приводил пример хорошо работающих дисков.

---------- Post added at 07:07 ---------- Previous post was at 07:03 ----------

... В каком виде эмулятор имеет отладку? Мож мне его глянуть живьём, если там по шагам можно пройти драйвер?

GARNIZON 8th January 2012 12:09

Сейчас перечитал вот это:

> Вот тут наверное собака и порылась. Как я понимаю, когда диск переставал читаться в бейсике, его переписывали на чистый отформатированный диск копировщиком (который читает вообще без проблем). А на новом диске перед вторым синхросбоем достаточно байт АА.


Пришла в голову мысль, может тебе показалось что бывают такие случаи когда при многократном стирании\записи
на диск контроллер валяет дурака и портит диск? типа становится недостаточно байт АА :)

НЕТ!!! хоть сколько раз это сделать не испортит. С чего бы бейсику перестать читать диск?

И потом к Агату не подходит выражение "его переписывали на чистый отформатированный диск" ,
Специального режима "форматирование" в контроллере агата нет. Есть режим записи и чтения. Если драйвер не выключает режим записи в течение всего оборота диска и планомерно фигачит подряд все поля, включая синхросбои - это условно называется форматированием. Если же он только находит поля адреса и затем переключается в режим записи, пишет поле данных и затем сразу возвращает контроллер в режим чтения - это называется запись сектора. Разница между операциями довольно условная.
Поэтому на агате были популярны такие штуки, как, например, копировщик дисков (посекторный), которыйформатировал и записывал данные в один проход. Т.е. при форматировании - создании полей адреса - сразу записывались заполненные поля данных. За один оборот диска !

b2m 8th January 2012 16:46

Quote:

Originally Posted by GARNIZON (Post 453145)
???? А внимательное чтение документации на контроллер уже имело место?

Синхросбой не может пролететь: это флажек, реализованный RS-триггером. Он устанавливается при обнаружении ошибки чтения контроллером и сбрасывается программно. Драйвер сбрасывает его либо до ожидания sync (перед чтением поля адреса) либо после получения sync (если sync найден, но сигнатура за ним неверна и драйвер ожидает следующий sync), но не потому что пришел "следующий байт".

Это уже учтено, как раз в последней версии и переделал.
Перед циклом ожидания синхросбоя этот триггер сбрасывается. Но к этому моменту синхросбой уже был. Проблема в том, что в образе только один синхросбой, а реально, перед меткой данных, будет несколько: самый первый - это разрушенный байт AA, а последний - записанный программно. Часть дорожки, от первого синхросбоя перед меткой данных до последнего, в образе отсутствует - её похоже мне и не хватает.

А программно записанный сбой будет на фиксированном расстоянии от конца маркера сектора, т.к. записывается программно. Таким образом мои рассуждения о переписывании на новый диск копировщиком - неверны.

Quote:

Originally Posted by GARNIZON (Post 453145)
AIM - формат контроллера 840 кб. Независимо от того, в какую архитектуру он воткнут. Есть порядком загрузочных образов 840 для семёрки. Семёрка в комплектации с 840 кб дисководом была вполне распространена.

У тебя на сайте есть пункт меню ИКП, оттуда я и скачивал.

Quote:

Originally Posted by GARNIZON (Post 453145)
В каком виде эмулятор имеет отладку? Мож мне его глянуть живьём, если там по шагам можно пройти драйвер?

???? А внимательный просмотр меню уже имел место? :)
По клавишам в отладчике есть подсказка - F1.
В строке статуса отладчика есть пара чисел, могут оказаться весьма полезными: количество тактов от последней точки останова и номер строки от последнего кадрового СИ.


All times are GMT +4. The time now is 02:52.

Powered by vBulletin® Version 3.8.3
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.