Я, наконец, закончил доработку проекта по результатам предыдущих обсуждений. Итак, что добавлено.
Самое главное - полностью сделал управление реакцией контроллера на сигнал Control, что так сильно портило жизнь последнее время. Для этого я в API добавил еще одну команду - A1. Для тех, кто не очень понимает, что такое Control и зачем это нужно, привожу цитату из доки по API:
A1 — управление сигналом Control
Сигнал Control, выходящий из бита 7 канала С порта PPI2, используется контроллером Extrom для синхронизации начальной загрузки, а после окончания загрузки используется для определения момента перезагрузки корвета. Дело в том, что несознательные разработчики корвета проявили потрясающее разгильдяйство, не выведя на боковой разъем такой важный сигнал, как Reset. В результате приходится определять перезагрузку корвета по уходу этого сигнала в 0 (что происходит при аппаратном сбросе ВВ55). Но проблема уперлась в то, что некоторые умники, пишущие программы для корвета, считают своим долгом дергать этот сигнал как угодно, даже без определенной цели. В результате контроллер уходит в перезагрузку, а программа, работающая на корвете, теряет доступ к диску. Чтобы избежать этой ситуации, и используется данная команда. В поле TRK указывается 0 — запретить перезагрузку от Control, или 1 — разрешить ее. В режиме запрещения перезагрузки, если нажать кнопку Reset корвета, получим на экране сообщение Ошибка шины. В этом случае надо или отключить и снова включить питание, или нажать кнопку сброса на самом контроллере.
Еще одна проблема того же типа - перенастройка режима ВВ55 некоторыми программами - решается на уровне биоса, записывающего правильное кправляющее слово в ВВ55 при каждом обращении к диску. Правда, при этом может, например, перестать работать цифровой джойстик на канале В. Ну, эту проблему мы как-нибудь решим, когда возникнет.
Далее, я доработал утилиту mount, как тут обсуждалось.
1. Ввел проверку наличия интерфейса Extrom. Теперь, если запустить программу с обычной дискеты, без подключенного интерфейса, то она не виснет, а выводит соответствующее сообщение.
2. Ввел ключ /H - подсказку по командной строке. Для тех, кто не любит читать доки, а таких у нас большинство.
3. Добавил управление линией Control, используя вышеописанное расширение API. Вообще-то, по логике, эта функция собственно к mount (управлению монтированием образов) не особенно относится. Но уж больно не хотелось писать еще одну, отдельную утилиту. Так что пока засунул сюда, а там посмотрим.
MOUNT /K OFF - отключает перезагрузку от Control
MOUNT /K ON - включает ее обратно.
Режим OFF следует включать перед запуском тех программ, которые лезут в интерфейс и самопроизвольно трогают сигнал Control. Если программа в процессе работы вдруг теряет доступ к диску, а лампочка control в контроллере вдруг зажигается - значит, этот режим как раз вам и нужен.
В прошивке контроллера, кроме ввода нового вызова API, я исправил некоторые мелкие ошибки, ввел более тщательную диагностику наличия карты - теперь, в случае отстутствия карты, в терминал выдается сообщение "SD карта не найдена", и вымаргивается ошибка 5. Разрешил даже в ошибочном состоянии прерывание от сигнала Control - это позволяет запустить загрузчик фазы 1 и, таким образом, проверить работу интерфейса ВВ55.
Ну и, самое главное, включил, наконец, режим удвоения частоты SPI - теперь карта работает на максимально возможной скорости. Правда, производительности это добавило только процентов 20 - сказываются тормоза драйвера VinxFS.
Во вложении лежит новая прошивка контроллера, KDI с обновленным mount, и дока по API.
На сегодняшний день состояние проекта такое.
- Схема контроллера полностью готова и проверена мной при двухкратной сборке - на вставной макетке и окончательной плате. Еще ESL скоро доделает свою плату - будет уже три успешных сборки.
- API уже устаканили и по протоколу, и по составу команд. Реализован полностью и в прошивке контроллера, и в эмуляторе. И документация по API уже написана.
- Прошивка контроллера готова и более-менее отлажена. По крайней мере, последние дни я погонял несколько стресс-тестов и ошибок не выловил.
- Клиентская утилита управления образами дисков MOUNT готова и более-менее проверена. К сожалению пока я один только могу ее проверить, но скоро и ESL подтянеся.
- Эмулятор тоже почти готов. В нем еще нет поддержки последнего вызова A1, но ESL его, надеюсь, прикрутит. Я этим заниматься не стал, отлаживал на реальном железе, тем более что оно заработало практически с первого раза.
Ну, вроде бы, и все. Теперь мне надо сесть и написать полную документацию по проекту - наверное, займусь в выходные. А ESL обещал доделать универсальный загрузчик систем, тоже являющийся важной частью проекта. Также ему надо доделать свою плату контроллера, и потестировать мою прошивку у себя. После этого можно объявлять релиз. Интересно, хоть кто-нибудь, кроме меня и ESL, соберет себе такое устройство?
Из дальнейших планов я хочу подправить BIOS для поддержки больших дисков. По первым прикидкам - можно примерно 5Мб диск сделать, на большее не хватит ОЗУ. А то сидеть в 21 веке на мелких 800м образах как-то уже ломает.
Еще тут Marinovsoft высказывал хотелку графической морды над утилитой mount. Может, кто-нибудь возьмется? Я, как старый системщик, не особо умею делать гуи, всю жизнь предпочитал комстроку, за редким исключением. Мне проще прошивки писать, чем интерфейс пользователя.
Вообщем, мы потихонечку подбираемся к концу. Даже грустно немного. Хорошая была тренировка для мозгов.





Ответить с цитированием
Размещение рекламы на форуме способствует его дальнейшему развитию 
