![]() |
Модуль АГАТ-7 для эмулятора Башкирия-2М
Последние несколько дней обсуждаем с b2m возможность поддержки АГАТ-7 в его эмуляторе.
В данный момент модуль Агата оставляет желать лучшего, просто потому, что автор не был знаком с Агатом в реальности. Со своей стороны постараюсь предоставить все необходимые подробности и неочевидные тонкости. Обсуждение решили перенести на форум, в отдельную тему - чтоб не засорять основную. Вообще эмулятор АГАТов для ОС Windows уже существует - автор Олег Одинцов. http://deka.ssmu.ru/er/agat/Soft/winEmul.shtml Он сто процентов совместим со всем софтом. Однако из-за большОго кол-ва эмулируемых плат/устройств и максимального набора функций - иногда вызывают сложности в настройке и использовании у рядового пользователя. Для запуска игрушек и подавляющего большинства прикладных программ - достаточно штатной комплектации Агата в эмуляторе, без всяких лишних настроек и доп. оборудования. Поэтому замечательный эмулятор b2m - обещает быть весьма и весьма популярным. |
После непродолжительной переписки по мылу, решили продолжать тут. Пока разбираемся с поддержкой образов дисков с сайта GARNIZON-а (как основного источника образов).
Quote:
Quote:
|
Про ДОС:
Ну это фишка и семёрки и девятки ( у 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 |
Обновил эмулятор на сайте, добавлена поддержка новых образов дисков:
*.dsk - посекторная копия диска (140 или 840Кб) *.aim - специальный формат для нестандартных дисков (правда, пока из служебных байт поддерживается только синхросбой). Запись на диски пока не поддерживается. Вопрос к GARNIZON-у: судя по FDSPEED скорость эмуляции процессора достаточно точная, т.е. какой период обращения диска я эмулирую, такой он и показывает (максимум на 1% меньше). Однако если эмулировать один оборот за 200мс, то драйверы не читают диски - не успевают к синхросбою метки данных. Если между маркером сектора и вторым синхросбоем три байта AA, то минимальный период 270мс, а если четыре, то 230мс. А сколько на самом деле байт AA записывается при форматировании? |
b2m, а *.NIB и *.IMG образы дисков будут поддерживаться в эмуляторе ?
|
Я скачал последнюю версию, но там еще нету разделения на
- агат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кб дисков никем не описан и не изучен (видимо, кроме разработчика). |
Quote:
Quote:
Quote:
Quote:
Quote:
Quote:
Quote:
|
> Там проблема в другом: когда выполнение доходит до ожидания синхросбоя, он (синхросбой) уже пролетел и считывается следующий за ним байт.
???? А внимательное чтение документации на контроллер уже имело место? Синхросбой не может пролететь: это флажек, реализованный 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 ---------- ... В каком виде эмулятор имеет отладку? Мож мне его глянуть живьём, если там по шагам можно пройти драйвер? |
Сейчас перечитал вот это:
> Вот тут наверное собака и порылась. Как я понимаю, когда диск переставал читаться в бейсике, его переписывали на чистый отформатированный диск копировщиком (который читает вообще без проблем). А на новом диске перед вторым синхросбоем достаточно байт АА. Пришла в голову мысль, может тебе показалось что бывают такие случаи когда при многократном стирании\записи на диск контроллер валяет дурака и портит диск? типа становится недостаточно байт АА :) НЕТ!!! хоть сколько раз это сделать не испортит. С чего бы бейсику перестать читать диск? И потом к Агату не подходит выражение "его переписывали на чистый отформатированный диск" , Специального режима "форматирование" в контроллере агата нет. Есть режим записи и чтения. Если драйвер не выключает режим записи в течение всего оборота диска и планомерно фигачит подряд все поля, включая синхросбои - это условно называется форматированием. Если же он только находит поля адреса и затем переключается в режим записи, пишет поле данных и затем сразу возвращает контроллер в режим чтения - это называется запись сектора. Разница между операциями довольно условная. Поэтому на агате были популярны такие штуки, как, например, копировщик дисков (посекторный), которыйформатировал и записывал данные в один проход. Т.е. при форматировании - создании полей адреса - сразу записывались заполненные поля данных. За один оборот диска ! |
Quote:
Перед циклом ожидания синхросбоя этот триггер сбрасывается. Но к этому моменту синхросбой уже был. Проблема в том, что в образе только один синхросбой, а реально, перед меткой данных, будет несколько: самый первый - это разрушенный байт AA, а последний - записанный программно. Часть дорожки, от первого синхросбоя перед меткой данных до последнего, в образе отсутствует - её похоже мне и не хватает. А программно записанный сбой будет на фиксированном расстоянии от конца маркера сектора, т.к. записывается программно. Таким образом мои рассуждения о переписывании на новый диск копировщиком - неверны. Quote:
Quote:
По клавишам в отладчике есть подсказка - 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.