Все, я закончил доработку API. Изменения коснулись 3 файлов - прошивки контроллера, загрузчика 2 фазы LOADER.ASM, и образа системы EXRSYSTEM.ASM. Теперь командный пакет защищен контрольной суммой, и если сумма неправильная - пакет просто игнорируется без каких-либо дополнительных действий. Также введена обратная связь - подтверждение приема контроллером команды.
В окончательном виде API выглядит так.
Формат командного пакета:
Контрольная сумма равна беззнаковой 8-битной сумме всех предыдущих 4 байт минус 1:Код:CMD: DS 1 ; код команды DRV: DS 1 ; номер устройства, 0-A, 1-B TRK: DS 1 ; номер дорожки SEC: DS 1 ; номер сектора (размер сектора всегда 128 байт CSUM: DS 1 ; Контрольная сумма предыдущих 4 байт,
CSUM=CMD+DRV+TRK+SEC-1
Если в команде не используются поля DRV, TRK, SEC, то их значение игнорируется.
Список команд:
После отправки командного пакета контроллер всегда отдает 1 байт подтверждения. Значение этого байта:Код:Команды обмена секторами; 01 - чтение сектора 02 - запись сектора Команды измерителя скорости. F0 - прием 8000h байта мусора F1 - передача 8000h байтов мусора Комадны управления работой контроллера 00 - пустая операция, всегда возвращает ответ ОК (1) A0 - включить/выключить подстановку системных дорожек. DRV всегда 0, TRK=0 - выключить, 1 - включить
0 (error) - ошибка, команда отвергнута
1 (ok) - команда принята.
Если ответ 1, то далее идет обмен данными, как и раньше. Если ответ 0, то обмен данными не происходит, а контроллер ожидает следующего комадного пакета.
Диаграмма взаимодействия корвета и контроллера
Я добавил еще одну команду - 00 (nop), Она всегда возвращает 1 (OK) и может быть использована для проверки функционирования контроллера (не повис ли он).Код:Корвет Контроллер -------------------------------------------------------- командный пакет 0 или 1 -- передача или прием блока данных, если требуется --
Измененные файлы лежат в аттаче. Заодно я вставил в загрузчик новую оптимизированную процедуру GETSEC, чтобы система быстрее грузилась.
ESL, тебе придется доработать эмулятор. Также подправь свои тесты скорости - просто вставь туда новую процедуру SENDCMD из биоса или загрузчика.
Ну, вот и все. Осталось приделать интерфейс для управления монтированием образов (я этим займусь в выходные), и проект будет полностью готов. Останется только потестировать, пооптимизировать, поискать баги, ну и ESL сделает универсальный загрузчик. Я, естественно, помогу чем смогу.
Блин, как-то уж больно быстро все заканчивается...




Ответить с цитированием