Посмотрел схему ADR.JPG. Сначала увидел /IORQ и решил, что Вы эксклюзивно включили РК-КНГМД в область В/У, т.е с ним можно работать ТОЛЬКО командами IN/OUT? Но RK-DOS и программы для неё работают командами LD, т.к в реальности РК-КНГМД включён в области памяти, а не в области В/У. Если так сделать, то придётся корректировать все программы, в том числе и RK-DOS. Причём эта коррекция очень сложна. Как заменить конструкцию вида LD A,(HL), где HL меняется по INC или ещё как-то. Сделать так, было бы "самовредительством". Т.к команды OUT Е.Седов применил лишь в тех местах, где идёт прямая адресация. Но в основном RK-DOS работает с РК-КНМД с помощью команда LD A,(HL) и LD (HL),A. К тому же Е.Седов использует некорректную команду INC (HL), когда HL указывает в ППА. Это единственная в мире попытка инкрементировать порт. ППА для этого не предназначен. Он нуждается в паузе между двумя командами записи в него (порядка 1 МКСЕК), оттого этот трюк работает только на скорости 1.77 МГЦ.Сообщение от Vladimir_S
Однако в итоге, заметил, что выходы дешифратора портов объединяются на ЛИ1 с какими то сигналами. Предположительно, выборками портов в памяти. Такая конструкция должна работать.
Vladimir_S и Pyk. Вот пожалуйста. Самая близкая к оригиналу версия RK-DOS для Z80. Содержит полностью идентичный оригиналу код, за исключением того, что команды IN/OUT заменены на LD. Эта версия просто обязана работать. Если работает версия для КР580, то точно будет работать и эта версия.
NB: Если у Вас порт доп.ППА (D14) стоит не на F100, то Вам надо корректировать адрес порта на реальный. Иначе, если дешифратора нет, то адрес F100 эквивалентен адресу F000, где стоит ППА платы РК-КНГМД. А так как при старте ДОС эти порты программируются по разному, то в этом случае порт РК-КНГМД окажется запрограммированным, как порт принтера, и естественно RK-DOS работать не будет. В этой версии, я на всякий случай изменил адрес доп.ППА на оригинальный A000 и тем самым при работе RK-DOS ОЗУ по этому адресу будет портиться (поэтому не транслируйте RKDOS в этот адрес). Это справедливо для моих версий RK-DOS, версия Е.Седова вообще не инициализирует порт принтера (считая, что он уже инициализирован при старте монитора).
Здесь, чтобы выиграть 25 байтов, мне пришлось забить вывод на принтер. Теперь при печати на принтер вывод пойдёт на экран. Эта версия будет работать и при Z80 и при КР580.
Но! Сигнал READY здесь, как и в оригинале должен быть аппаратным. В крайнем случае закоротите READY на землю. Если будут сбои из-за медленной раскрутки, то и сигнал START закоротите на землю. Тогда колесо будет всегда вращаться, поэтому на сигнал START лучше поставить тумблер и отключать вращение колеса при ненадобности. Такая проблема возможна на старом DD-дисководе 5.25". Дисководы 3.5" и HD-5.25" (включённые перемычками в режим DD, чтобы скорость колеса была 300 об/мин) разгоняются быстро и т.к делается 10 попыток чтения перед признанием сектора дохлым, то на них всё работает.
Относительно версий RK-DOS для Z80 полученных из версий ОРИОНА и выложенных 3 дня назад, в которых у Вас не работала команда DIR. Я визуально просмотрел текст команды DIR и глюков не обнаружил. Зато обнаружил, что в исходнике файла с именем RKDOS сохранён оригинальный код DIR, выводящий в одну колонку. Чтобы получить версию с "родным" DIR, достаточно откомментировать оригинальный DIR и закомментировать DIR, что выводит файлы в 3 колонки. Чтобы проверить процедуру DIR я взял и целиком подставил её в версию RK-DOS работающую в моём эмуляторе РК86 на ОРИОНЕ. Там процедура чтения/записи сектора работает не с РК-КНГМД, а с ОЗУ ОРИОНА, но для DIR это без разницы. И всё работало. Так что в команде DIR ошибок нет.Сообщение от Pyk
При выводе DIR имена файлов выводятся на консоль, а возврат каретки выводится подпрограммой OUT_13, которая выводит код 13 в канал (т.е вызывается подпрограмма, адрес которой в векторе канала на вывод). Вывод кода 13 (что собственно перевод строки) в РК86 автоматически как бы дополняется кодом 10 (что и есть перевод строки), т.е производится переход на другую строку. Это идиотское свойство, которого нет в других компьютерах (для перехода в начало следующей строки там надо выводить на консоль и код ВК и код ПС). Чтобы проверить, что неверно инициализирован канал вывода, замените 'CALL OUT_13' на 'LD C,13 : CALL 0F809H' (только в процедуре DIR ) и посмотрите не будет ли выводиться возврат каретки в команде DIR. Впрочем, я это тоже сделал для Вас.
Прилагаю те же самые версии RK-DOS, но в них введена условная трансляция по ключу
DIRORG. Если этот флаг не нулевой, то транслируется полностью оригинальный DIR, иначе
DIR с выводом в 3 колонки.
Ключ NO_KAN заменяет в командах DIR вывод кода 13 в канал вывода - на вывод кода 13 на MCOUT (F809).




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