Пока есть время посмотрел на драйвер электронного диска. Написан криво конечно, но к счастью он маленький
Драйвер обозвали DM, хотя такой драйвер есть стандартный (RK06/RK07), но автор видимо просто не знал этого.
В .DRBEG использован ID, занятый DECовским драйвером (причем не DM).
Зачем-то вместо двух CLR обнуляется отдельный регистр и потом используется как ноль в команде. В загрузчике и вовсе откровенно "MOV #0,..." используется. Да и фиг с ним...
При входе в драйвер проверяется номер блока, однако сравнение делается знаковое и потому проверка в принципе неправильна. Хрен с ним - все-равно эта проверка бесполезна так как ее уже сделал монитор до этого.
При всем при том проверка на номер устройства не делается. Что DM0, что DM7 - ему пофигу.
Размер диска жестко задан 1792. блока, CSR жестко задан 175000, вектор жестко задан 114, но не используется в принципе (вернее используется как признак ошибки). Никаких DMA, все ручным трудом...
Принцип работы такой:
- в CSR заносится номер блока
- CSR+2 обнуляется (адрес внутри блока)
- из/в CSR+4 читаются/пишутся слова данных [при записи конец блока надо занулять вручную]





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