Сообщение от
SYR-ALEX
Прочтите тему ещё раз . По которой схеме собирали ? Какие дисководы использовали ?
Прочитал и не раз. толку =0. внятного ответа нет, правильного - тем более. схемы пробовал все, благо на плис оно просто, дисководы тоже все что есть в наличии. без костылей ничего не работает. пришлось как всегда разбираться самому.
краткое ИТОГО - несмотря на то что в железе есть все для нормальной работы без костылей - в имеющемся софте оно не поддержано никак. поэтому приходится использовать костыль в виде #FFF1, с ним софт работает, но постоянно крутящийся двигатель дисковода меня несколько напрягает (а выключать его некому - костыль в софте не поддержан)
далее - программа рекалибровки для дисководов с DC - полумера. простой пример - запускаем MX_DOS_4.EXE с целью форматнуть дискету - оно говорит "диск защищен", вытаскиваем дискету, снимаем защиту, суем обратно - и приплыли - "нет дискеты". потому как в этой программе рекалибровки нет. где и как еще это может вылезти - предсказать не возьмусь.
ну да ладно. если интересно - вот мой вариант патча ПЗУ (по количеству байт совпадает с оригиналом, включает в себя рекалибровку и костыль, у меня стабильно работает)
на основе исходника отсюда:
https://zx-pk.ru/threads/18006-spets...l=1#post966377
Код:
MK1 ld b, a
ld a, #01
ld (#fff1), a ; включить мотор
ld (Cek), a ; сектор 1
call #C891 ; ждем отсутствия занятости контроллера
ld a,#58 ; команда step in
call #C887 ; посылаем команду и ждем выполнения (проверить что по адресу #C887 все нормально!)
call #C885 ; команда восстановления
xor a
ld (SID), a ; установить сторону диска =0
; подпрограмма чтения секторов
; вход: [HL] - адрес буфера
ld hl, Dos ; куда грузить
ld a, #90 ; m=1 - код чтения группы секторов
VOK ld (Kom), a ; запустить команду
VOU ld a, (Coc) ; ждать начала выполнения команды
rla ; выделить бит готовности НГМД
ret c ; если нет
rra
rra ; выделить бит ЗАНЯТО
jp nc, VOU ; если еще нет
ld c, #13 ; (B+1) - число блоков по 256 байтов
;ПП выдачи команды
BAP ld (ZAP), a ; запрос готовности байта
ld a, (Dan) ; принять байт
ld (hl), a ; и в буфер
inc l ; шаг в буфере
jp nz, BAP ; если не конец блока буфера
inc h ; перейти на следующий блок
dec c ; проверить длину фрагмента
jp p, BAP
ld a, (Coc)
xor #01 ; выставить флаги, если все нормально - будет Z
ld a, #d0 ; и прервать работу
ld (Kom), a ; контроллера
jp nz, T0C ; если ошибка чтения
dec hl ; проверить опознаватель
ld a, (hl)
dec hl
inc (hl)
cp (hl)
jp nz, T0C ; ошибка
ld a, b
call Dos ; если да
ret
; подпрограмма переключения дисководов
;M0D ld a, (#C7FD)
; xor #01
; ld (#C7FD), a ; номер дисковода
; ld (#fff3), a ; номер дисковода
;LC885 ld a, #08 ; надо 08 или 09-0a-0b, не 01
;LC887 ld (Kom), a ; регистр команды
;LC88A ld a, (Kom) ; регистр состояния
; rra ; сдвиг вправо аккумулятора
; jp nc, LC88A ; ждем busy
;LC891 ld a, (Kom) ; регистр состояния
; rra
; jp c, LC891 ; ждем !busy;
; ret
Далее - по схеме отсюда:
https://zx-pk.ru/threads/18006-spets...l=1#post966226
если перемычку поставить в положение DC - то состояние дисковода перестает отслеживаться, при включении мотора по #FFF1 по цепи 8.1 на 5 ногу D9.2 прилетает 0 и состояние цепи 22 перестает иметь значение.
Ну и чтобы два раза не вставать - дисковод 1.2М (5" 360rpm) с кварцем 9.6МГц почти работает. то есть чтение и запись в MXDOS - без проблем, форматирование - на 2МГц тактовой виснет, на 2.5 - работает.
попутные наблюдения - MX_DOS_4.EXE - не работает на Z80, виснет после первой дорожки. на 8085 все ок.
- - - Добавлено - - -
Сообщение от
fifan
Извини за задержку, замотался. Просматриваю исходники. Удаляем сейчас неактуальные подпрограммы. Выложу код позже.
- - - Добавлено - - -
Всё, сделал. Прошивай. Мапер МХ.
Странно, но в эмуляторе по F6 не читается дискета, а тупо окрашивается экран синим.
Наверное пока не прошивай, я вставляемые коды наверное в прошивку неправильно вставил.
Нет, ничего хорошего не происходит - в эмуляторе всё виснит. На такое я пойтить не могу
(из Джентльменов удачи).
можно тупой вопрос?
мне кажется или вот здесь
https://zx-pk.ru/threads/18006-spets...l=1#post966378
Код:
MK1 pop af
call RKALIBR
push af
перепутаны push и pop?