
Сообщение от
dk_spb
DISK1.TXT DISK3.TXT
На первом дисковый бейсик, которого пока больше нигде нет. Очень интересует. На втором какие-то самопальные бейсик-программы. Тоже неплохо бы взглянуть. Ну и можно DISKU, если не затруднит.

Сообщение от
dk_spb
Минуточку!!! То есть программка из ПЗУ для выбора дисковода А пишет в 7FF7 значение 0x01 !?!?!?!
А кто, простите, будет MotorON делать!?!?! Надо же писать 0x21 для дисковода А и 0x42 для дисковода B.
Нет, не надо. Запись в 0x7FF7 - это чисто программный сброс ВГ93. Сбрасываются только внутренние регистры, а механика не трогается! Собственно поэтому я долго не мог понять код инициализации - вначале сбрасывают регистры, а затем подают команду "восстановление", основная цель которой - это возврат головок на нулевую дорожку. Но, когда регистры ВГ93 сброшены, то возврата головок не будет, так как контроллер итак считает, что они уже на нулевой дорожке. В общем, поначалу я считал, что код инициализации ошибочным и нерабочим. А потом внимательно присмотрелся к подпрограмме чтения сектора. В ней перед чтением всегда вызывается подпрограмма позиционирования головок. А вот здесь то собака и зарыта:
Код:
ROM:4084 fdd_doSeek:
< cut here - преобразование логического адреса в физический >
ROM:4096 sta drvLines ; drvLines = (physDisk+1) | (physSide << 4)
ROM:4099 call fdd_MotorOn ; <<--- включаем мотор
ROM:409C dcx h ; HL = &nSector
ROM:409D call fdd_BreakCmd
ROM:40A0 mov a, m
ROM:40A1 sta IO_SECTOR
ROM:40A4 ldax d
ROM:40A5 sta IO_TRACK ; номер предыдущей дорожки (для команды поиска)
ROM:40A8 dcx h ; HL = &nTrack
ROM:40A9 mov a, m
ROM:40AA stax d ; обновляем lastTrack[nDisk]
ROM:40AB ora a
ROM:40AC jz do_seek_to_track0 ; <<--- переход на сброс дискогрыза!!!
ROM:40AF sta IO_DATA
ROM:40B2 lda ctrlConfig
ROM:40B5 ori 10h ; команда "поиск"
ROM:40B7 jmp fdd_SendCmd
-------------------------------------------
ROM:43B2 do_seek_to_track0:
ROM:43B2 lda ctrlConfig ; !!!A=0
ROM:43B5 ani 3
ROM:43B7 ori 8 ; команда "восстановление"
ROM:43B9 jmp fdd_SendCmd
То есть, при старте компа происходит загрузка с нулевой дорожки, которая реализована как команда сброса (восстановление) дискогрыза (подпрограмма do_seek_to_track0)! И здесь сброс происходит уже как положенно - при включенном моторе.
В общем, очередное интересное решение от наших предков 
- - - Добавлено - - -

Сообщение от
dk_spb
но на тике нельзя выставить включение мотора по выбору привода, приходится мотор всегда включенным держать.
А зачем включать мотор при выборе привода? Мотор в подпрограммах БИОС всегда включается отдельно, при любых операциях чтения/записи/позиционирования.
У меня похожая проблема с япошкой от писюка. Сектор читает, а дальше сбой. Вынимаешь диск, вставляешь - читает дальше, опять один сектор, после чего опять ошибка. В общем, нужно постоянно вставлять/вынимать диск. Это видимо несоответствие некоторых контактов старых и писюшных дисководов. Я где-то видел решение этого вопроса, но так и не попробовал, поскольку пока нужды не было.