
Сообщение от
Impartial
сделаем (на досуге) поддержку дисковода
Предлагаю первым делом реализовать поддержку псевдоустройства HD, позволяющего подключать к эмулятору образы любых размеров.
В приложении - исходник драйвера HD.SYS для RT-11 и образ загрузочного диска HD с тестами TMOS для платы МС1201.
Для поддержки устройства HD эмулятор должен обслуживать его регистры HDCSR = 0177720 и HDDATA = 0177722.
Драйвер HD передаёт в HDCSR следующие команды:
Код:
SetUni = 1 ; Set HD unit number
SetBlk = 2 ; Set HD block number
SetBuf = 3 ; Set memory buffer address
SetWCn = 4 ; Set operation word count
CmdRea = 5 ; Execute READ on HD
CmdWri = 6 ; Execute WRITE on HD
GetSiz = 7 ; Get HD size in blocks.
Если после получения команды эмулятор установит старший бит HDCSR - это будет признак ошибки.
"memory buffer address", записываемый драйвером HD в регистр HDDATA перед выдачей в HDCSR команды 3 ( Задать адрес в памяти ) - это адрес эмулируемой памяти ДВК, начиная с которого эмулятор должен читать или писать данные, при получении в HDCSR команды 5 (Читать образ диска в память) или 6 (Писать память в образ диска).
Смещение от начала образа диска для команд чтения и записи (в блоках по 512 байт) задаётся содержимым HDDATA при получении эмулятором в HDCSR команды 2 ( Задать номер блока ).
При получении в HDCSR команды 7 ( Сообщить размер образа ) эмулятор должен записать в HDDATA размер файла образа (в блоках по 512 байт), подключенного к приводу, заданному до того командой 1 ( Задать номер привода ), или 0, если к этому приводу образ диска в эмуляторе не подключен. При выполнении команды 7 признак ошибки не устанавливается.
Устройство HD должно выполнять команды "мгновенно" для обслуживаемого процессора, поэтому на время выполнения команд HD - процессор надо останавливать.