Да вот, расковырял у кое-кого в SPDOS... ;)
- - - Добавлено - - -
LeoN65816, изменения DRQ/INTRQ просто так внезапно не случаются, они являются следствием команд от ПО. Так что этот процесс вполне можно контролировать.
Вид для печати
Имеется в виду следующее. Дали команду и ушли на цикл ожидания. Флопик схавал команду не моментально, а значит по коду мы гарантированно успеем уйти на причинный цикл ожидания. Дальше действительно изменения прилетят "внезапно" по меркам ПО (но мы к этому готовы - причинный цикл ожидания), и после этого события никаких самопроизвольных изменений не будет, стало быть у кода будет возможность полностью отработать без "прерываний посреди дороги".
Denn, я тебя понял. согласен.
Ставим КП11 на переключение одного из адресов ПЗУ, допустим A4. КП11 переключает на вход ПЗУ то A4 от КР580, то бит готовности из ВГ93.Цитата:
Сообщение от LeoN65816
Ставим схему совпадений на область, например FFF0...FFFF, и когда процессор читает из этой области, то формируется сигнал на входе SELECT КП11, что приводит к тому, что на A4 ПЗУ поступает сигнал прямо, с обьединённых диодами 38-мой и 39-той ноги ВГ93.
В ПЗУ по адресу FFF0 стоит команда JMP FFF0, т.е процессор зациклен в бесконечной петле. Процессор выдаёт команду в ВГ93 на чтение сектора и затем делает JMP на FFF0, где и зависает в бесконечной петле. При этом на адрес A4 ПЗУ скоммутирован бит готовности с выхода ВГ93. ВГ93 считав байт с дискеты, выставляет готовность (на ногах 38 или 39), отчего на адресе A4 изменяется сигнал. И процессор читая из адресов FFF0...FFFF реально читает содержимое ПЗУ по адресу FFE0, где стоит процедура чтения очередного байта из ВГ93, засылка его по (HL), увеличение HL и снова JMP на FFF0.
Тут есть нюансы с синхронизацией, уровнями и т.п. но основная концепция такая. Я привёл вариант с ПЗУ, т.к именно коммутация ПЗУ обсуждалась, но эта же идея работает если коммутировать не адреса ПЗУ, а всего один бит читаемый из ПЗУ (как младший адрес).
Но все подобные химические варианты громоздки. Достаточно вторым этажом поставить 1 триггер 155 ТМ2, кинуть пару проводков и заменить кварц 8 МГЦ на 9 МГЦ. Одним выстрелом куча зайцев - и CPU скворчит быстрее, и экран целиком влезает в телевизор и НГМД нормально пишет, причем с более простым типовым контроллером от "Корвета", без доп.микросхем для 38-й ноги.
Во-первых, про доступность ВГ93.Цитата:
Сообщение от makbar
В крупных городах были нелегальные радиорынки, где ВГ93 были доступны еще в 1988, когда начали ставить TR-DOS в ZX-Spectrum. Я без всяких проблем купил ВГ93 в 1989. Но для предприятия выпускающего МИКРОШУ получить поставку ВГ93 возможно было проблемой, т.к продукция МЭП распределялась министерствам и заводам поштучно.
Но дело вовсе не в дефицитности или доступности, а в том, что простым способом, т.е заимствуя программу и контроллер от "Корвета" в РК86 дисковод не поставить, т.к в ней стоит идиотский ПДП, который каждые 8 МКСЕК рвёт прогон программы.
Можно конечно отключать ПДП, гасить экран (как при вводе с МГ) и читать из ВГ93, попутно делая каждые 20 команд POP, чтобы ОЗУ регенерировалось. Но сидеть с погашенным экраном по пол-минуты неприятно. Кроме того на DD скоростей РК86 всё-равно не хватало. А те же 400 кб даёт и РК-КНГМД, причём с большей надёжностью.
Поэтому остаётся только вариант с ПДП, и как я ранее указывал, такой вариант работал на РК86 уже в 1989 (один КООП продавал это, но спроса не имел, т.к дисководы ещё стоили очень дорого, более 500 рублей). В общем, проблема была в том, что для РК не нашлось грамотного программиста и аппаратчика, кто бы смог разработать свой вариант с использованием второго канала ПДП. Это смогли сделать (или где-то достали ИНФО) только инженеры завода, где выпускались ПАРТНЁРЫ. Но и там массового выпуска КНГМД не было.
Поэтому фанаты РК86 до 01.1993 сидели без дисковода. Затем появился Е.Седов и решил разом проблемы дисковода и для РК86 и для СПЕЦИАЛИСТА. Хотя СПЕЦИАЛИСТ к тому времени частично "умер", частично был конвертирован в MX, где дисковод уже был по варианту Л.Афанасьева из Барнаула.
- - - Добавлено - - -
Есть ещё один вариант решения скоростной проблемы СПЕЦИАЛИСТА при работе с дисководом.
Это если кому-то обязательно надо сохранить такт CPU ровно в 2 МГЦ. Тогда кроме выше-упомянутых "химических" способов, остаётся только замена КР580 на 1821ВМ85 (8085). В котором есть однобитовый вход, позволяющий быстрее проверять аппаратный флаг готовности ВГ93.
Неужели 64 такта (MFM 250Кбит/с, тактовая 2МГц) или 80 тактов (тактовая 2.5МГц) не хватает на чтение/запись байта и поллинг запроса данных? В АГАТе 32-х тактов свободно хватает.
На Орионе с тактом 2,5 МГц мне удалось "обмануть физику" так:
Причём счёт буквально на единицы тактов МП! Если вместо "ANA C" ставим "ANI 03H", то не успеваем.Код:; PЕГИСТРЫ УПРАВЛЕНИЯ КОНТРОЛЛЕРОМ:
;RG_CMD:EQU 0F700H; Р-Р КОМАНД/СОСТОЯНИЯ
;RG_TRK:EQU 0F701H; Р-Р ДОРОЖКИ
;RG_SEC:EQU 0F702H; Р-Р СЕКТОРА
;RG_DAT:EQU 0F703H; Р-Р ДАННЫХ
LD_SECT:
; I: [BC] - RG_DAT
; [DE] - RG_CMD
; [HL] - АДР.НАЧ. target
JMP LDCIKL
LDCIK0:
MOV M,A
INX H
LDCIKL:
; ЦИКЛ ЧТЕНИЯ СЕКТОРА
LDAX D ; = IN RG_CMD
ANA C ; = ANI 03H
JPO LDCIKL
LDAX B ; = IN RG_DAT
JNZ LDCIK0
...
Везение тут получилось очень удачное, младшая часть адреса регистра данных как раз содержит значение маски нужных битов 03h, в итоге "долгую" команду "ANI 03H" (7 тактов) удалось заменить на равнозначную "быструю" "ANA C" (4 такта), и "пазл сложился".
Ну и игра с флагом чётности тоже очень в кассу.
Если бы не эти два обстоятельства, то иначе не получилось бы разрулить без аппаратного регистра DRQ/INTRQ.
Имхо, регистр на DRQ/INTRQ проще, чем замена проца.
Denn, я на штатном Орионе успевал чуть-чуть более топорно:
Цикл пришлось разбивать из-за того, что обработку двух байт размера уже не успевал (+2 команды). А вот если бы штурманул был плотнее - сделал бы как у тебя. MS-DOS дискеты с FAT12 работали на ура. И да, он не зависла, если RDY снимался - просто забивал буфер последним статусом, который и возвращался для обработки ошибок. ;)Код:;Управление Регистром
CTR:LDA 0F700H
ANI 01H
JNZ CTR
MOV A,C
STA 0F700H
RET
;Запись данных с синхронизацией
DAT:LDA 0F700H
ANI 01H
JNZ DAT
MOV A,C
STA 0F703H
RET
;Чтение сектора SEC-СЕКТОР, TRK-ДОРОЖКА
;Длинной в 512B
INS:PUSH H
PUSH D
PUSH B
LDA TRK
ANI 1H
ORI 0EH
STA 0F602H
LDA TRK
ANI 7EH
RRC
MOV C,A
CALL DAT
MVI C,18H
CALL CTR
LDA SEC
INR A
STA 0F702H
CALL RED
MVI C,80H
CALL CTR
LXI H,BUF
LXI D,0F703H
MVI C,82H
IN0:LDA 0F700H
ANA C
JZ IN0
LDAX D
MOV M,A
INR L
JNZ IN0
INR H
IN1:LDA 0F700H
ANA C
JZ IN1
LDAX D
MOV M,A
INR L
JNZ IN1
LDA 0F700H
POP B
POP D
POP H
RET
HardWareMan, к своему варианту я пришёл перепробовав многое. У меня, к сож, только так работает стабильно.
LDA 0F700H (13 тактов) вместо LDAX D (7 тактов) уже не прокатывает.
Плюс у меня ещё стояла задача не читать лишнего (последний байт за пределами сектора), собственно из-за этого пришлось городить огород с заходом в середину цикла.
П.С. У тебя получается тоже через ANA C, но маска почему-то 82H... имхо, контроль неготовности в цикле чтения не нужен, т.к. таковая по-любому проверяется на предыдущих этапах (позиционирование головок). А вот младший бит чекать надо, емнип он отвечает за окончание процесса (в т.ч. преждевременное, по ошибке).
Если у кого-то есть желание поэкспериментировать в эмуляторе с РК КНГМД на Специалисте, я могу попробовать сделать соответствующий конфиг для Emu80. На первый взгляд это даже не потребует доработки самого эмулятора.
Pyk, желание есть, спасибо большое -)
zx_, ок, тогда нужны конкретные предложения - по каким адресам разместить контроллер и саму РК ДОС, в какой версии Специалиста (наверное обычный, не MX)? Также кому-то нужно будет в перспективе адаптировать РК ДОС или хотя бы для начала написать тесты для проверки работоспособности...
Так в этом-то и прелесть, - ничего менять не надо. Ни адреса RK-DOS, ни сам код RK-DOS. И, естественно, тогда и адрес РК-КНГМД тот же - F000. Это самый тупой лобовой вариант.
Спойлер
Click me
Как недостаток при этом приходится вводить перемычку-конфигуратор переключающую чип-селект ПЗУ F000...F7FF и выборку РК-КНГМД. Можно обойтись и без перемычки, извлекая ПЗУ F000 при вставке в слот РК-КНГМД, и наоборот, вытаскивая из слота плату РК-КНГМД, когда требуется ставить 7-мое ПЗУ. Но обычно шесть ПЗУ хватает.
При необходимости, т.к к адресам РК-КНГМД обращается только DOS и форматёр, то перетранслировав их, легко изменить адрес РК-КНГМД с F000 на FC00 (это типичный адрес КНГМД на СПЕЦИАЛИСТЕ). При этом 7-мое ПЗУ или ОЗУ в адресах F000...F7FF можно будет сохранить.
Другой недостаток в том, что основное ОЗУ используется не по максимуму, а т.к управляющие ячейки DOS на 7500, то даже не считая раб ячейки ПЗУ РК86 (7600...76D0) в СПЕЦИАЛИСТЕ впустую пропадает ОЗУ от 76D0 до RAMTOP СПЕЦИАЛИСТА, т.е 76D0...8F60. Понятно, что труд на 8 секунд перетранслировать на 4 кб выше, получив тем самым, на 4 кб большее TPA.
К сожалению, RK-DOS написана с полным игнорированием мирового опыта по написанию DOS (зато компактная). А именно, она управляется не функциями, как все другие DOS, а ячейками, адреса которых жёстко фиксированы. И все прикладные программы управляют DOS ячейками в области 7500. Если же адреса этих ячеек перенести под RAMTOP, то перестанут работать не только все дисковые программы от РК86, но и командные SYS-файлы.
Учитывая, что для СПЕЦИАЛИСТА программ длиннее 7000 очень мало, то такой лобовой вариант выглядит предпочтительнее, чем DOS с высоким TPA. Точнее разумно иметь две версии RK-DOS. Одну базовую 100% совместимую, а вторую с высоким TPA. А лучше, - эту совместимую RK-DOS, позволяющую грузить программы размером до 28 кб и CP/M, которой можно грузить программы размером до 35.5 кб.
Как плюс такой вариант даёт отстутствие лишнего труда на перетрансляцию для других адресов. В общем-то, базовую RK-DOS в ПЗУ E000...EFFF следует рассматривать лишь как средство отладки системы и средство получить доступ к программам от РК86.
Несколько слов о ПЗУ. Учитывая, что топик стартер будет использовать РК-КНГМД на плате ЭКСПРЕСС, возможны варианты.
Самый простой вариант, когда на плату ставятся 3 ПЗУ РФ2, а в области D800...F7FF не стоит ничего. Тогда RK-DOS можно ставить на плате РК-КНГМД или на плате ЭКСПРЕСС. В обоих этих случаях две РФ2 напаиваются в 2 этажа. На плате ЭКСПРЕСС этот бутерброд ставится в 28-ми ногую панельку (позаботившись, чтобы на 24 и 21 ноге было +5 В).
В области E000...EFFF может стоять ОЗУ, ПЗУ или ничего. Чтобы не возникло конфликта по шине, при установке РК-КНГМД, требуется снимать с основной платы ПЗУ E000 и E800.
Если же используется огромное ПЗУ 27128 установленное в окне 14 кб, то, во-первых, надо обеспечить, чтобы по адресу F000 этого ПЗУ не стояло (на плате "Восточный Экспресс" вероятно для этого достаточно перекусить один диод), потому что чип-селект /F000 подаётся на РК-КНГМД.
Как выше указано, не представляет проблемы перенести адрес КНГМД на FC00 (и я даже могу сделать форматёр автоматически настраивающийся на адрес РК-КНГМД). Также можно сделать и RK-DOS с автонастройкой на адрес РК-КНГМД, но такая версия должна работать в ОЗУ 7800 (грузиться из ПЗУ). Перенос адреса РК-КНГМД на FC00, позволит использовать ПЗУ в полном окне 14 кб, что в случае двух страниц из 27256 даст 28 кб ПЗУ.
[свернуть]
вот именно. что-то подсказывает, что был бы у меня РК а не Специалист тогда... я бы все равно смог прикрутить ВГ93. Мне деваться было некуда, мне надо было хранить образы ПЗУшек.
С другой стороны, я рад , что собрал именно Специалист (а потом прикупил готовую плату Ориона). Потому что для целей программатора их архитектура подходила идеально, включая битовое отображение памяти на экран. Мой софт программатора использовал это, визуально отображая зашиваемую область, так сказать, в процессе)
Pyk, ориентироваться можно на исторические ориентиры -)
«а также на ЭВМ "СПЕЦИАЛИСТ-48К" (ленинградский мони-
тор, имеющий вызовы F800) совместно с КНГМД по схеме из журнала РАДИО N1-2 1993»
«ЭВМ "СПЕЦИАЛИСТ" уже имеет "чип-селекты" E000,E800 и F000
и поэтому установка дешифратора не требуется. »
http://sensi.org/~tnt23/rk86/index.html
и еще , физически это попытка к Специалист Экспресс подключить РК КНГМД, тоесть увидеть возможные неудачи при создании эму былобы супер
рекомендации по подключению , так сказать
Понял, попробую набросать конфиг - посмотрим, что из этого получится...
- - - Добавлено - - -
Вот, сделал конфиг и отдельную сборку с его автозапуском:
http://emu80.org/temp/Emu80_sprkfdc.zip
В РК-ДОС изменил адреса вызовов F803, F809, F812 и F818 на C8xx.
Похоже, что С812 в Специалисте работает немного не так, как F812 на РК - приходится постоянно нажимать Enter, чтобы что-то изменилось на экране.
В общем, в основном работает, но требует дальнейшей доводки:
http://emu80.org/temp/sprkfdc.png
- - - Добавлено - - -
P.S. Exe без изменений, новый только конфиг.
Не понял, зачем переделывать RK-DOS с целью поменять адреса в самой RK-DOS.Цитата:
Сообщение от Pyk
Так конечно будет работать и без узла совместимости с ОРИОНОМ и РК86 (что переадресует адреса F800...F8FF на C800). Но зачем менять программы, их же много, если 2 диода снимают проблему. ИД7 на область F800...FFFF всё-равно ставить, если пользователь хочет иметь В/У. Когда есть совместимость по вызовам F800, то системные программы для RK-DOS для всех 3-х типов компьютеров с ней (РК, ОРИОН, СП-Т) могут использовать одни и те же программы.
В общем, не понял есть ли в эмуляторе уже узел совместимости или нет. Т.е что будет если сделать CALL F803 - завис или ввод с клавиатуры ?
Не помню такого. Т.е не помню, что бы мне пришлось переделывать ROM-BIOS. Правда я использовал другой ROM-BIOS. А вообще орловский монитор левый, у него есть и другие несовместимости.Цитата:
Сообщение от Pyk
F812 на РК если есть нажатие, считывает символ и кладёт его в однобайтовый буфер. Так, якобы, имитируется аппаратная клавиатура. А авторы ПЗУ ОРИОНА и Орлов этого не знали и не имплементировали. Поэтому, когда скорость CPU мала по F812 возвращается флаг о наличии символа в буфере. Получив флаг готовности CPU лезет в F803, чтобы этот символ забрать, но клавиатуру уже отпустили и он подвесает в F803 до следующего нажатия. Это та же самая проблема, что возникает при попытке использовать игры от РК на ОРИОНЕ.
Позднее, возможно попробую написать монитор C800 более совместимый с РК86, а возможно даже встрою туда эмулятор РК86. Я уже делал так на ОРИОНЕ. Для получения совместимости надо "писать в" и реально использовать все раб.ячейки ПЗУ РК86, а Орлов сделал просто халяву, переадресовал на похожие п/п-ммы загрузчика, хотя принципы совершенно разные.
А экранный эмулятор делается так. Любая из следующих п/п-мм ПЗУ F803, F809, F812, F815, F818, F82D проверяет простейший аппаратный таймер, благодаря чему "узнает", что прошло более 0.4-0.8 секунды. И тогда копирует экран РК86 в экран ОРИОНА. Т.е экран ОРИОНА всегда повторяет экран РК86, даже если туда символы попали прямой наглой записью прямо в экранное ОЗУ. Т.о если и ROM-BIOS работает правильно, то получается 100% совместимость с РК86 (за исключением программ идиотов, которые лезут прямо внутрь ПЗУ F800, к сожалению таких придурков довольно много).
Правда, если на ОРИОНЕ, такой эмулятор даёт полную совместимость не только с программами не лезущими в матрицу через ППА, но и при при крошечной переделке (смене адреса порта клав-ры с 8000 на F400) позволяет использовать даже игры лезущие напрямую к матрице клавишш (т.к клавиатуры одинаковые), то на СПЕЦИАЛИСТЕ простейшая замена адреса порта в этом не поможет (надо менять весь алгоритм сканирования РК-матрицы). Но таких игр не так уж много.
Но в общем-то, спасибо. Хотя это ещё не совсем то (по адресации), но уже по крайней мере хоть что-то можно проверять. Т.е делать все системные вызовы на C803,C806,C809... а на адреса F800 перетранслировать уже при трансляции для реала. Это не проблема, если в ассемблере есть условная трансляция.
http://emu80.org/temp/Emu80_sprkfdc_2.zip
Добавил "узел совместимости". Сейчас ППА доступен по адресам FF00-FFFF, а на F800-F8FF дублируется ПЗУ из области C800-C8FF (если я правильно понял суть работы этого модуля).
Соответственно, РК ДОС заменил оригинальной версией.
(ПЗУ пришлось разделить на 2 части из-за бага текущей версии эмулятора, не позволившего задать в конфиге смещение относительно начала ПЗУ).
Проблема с клавиатурой осталась. Подозреваю, в дело в вызове F812 - вроде бы была в нем какая-то несовместимость между РК и Специалистом (хотя могу и ошибаться).
Pyk, еще лениградский монитор вроде нужен, а у вас монитор 2 в эму
лениградский здесь
http://zx-pk.ru/threads/27540-lening...l=1#post906478
подменял в конфиге сам , чот не вышло , ругается на переменную ром 2 и падает -)
Для RK-DOS годится любой монитор. Имеющий входы F803, F809, F812 и F82D.Цитата:
Сообщение от zx_
Ленинградский монитор удобен и полезен именно для МГ-варианта компьютера, т.к он имеет автонастройку на скорость записи и удобный бегущий счетчик в правом верхнем углу, показывающий при вводе, куда грузится очередной байт. Так что сразу видно, что не произошёл улёт, что синхробайт схватился и ввод идёт.
Чтобы было всеядно к ПЗУ и не надо было ставить ИД7 и 2 диода, лучше всего в коде RK-DOS заменить п/п-мму ввода с клавиатуры, она там всего одна. Так, как у меня сделано в версии RK-DOS для ОРИОНА. Также для экономии места там разумно убрать инициализацию ВГ75. Завтра займусь этим и сделаю RK-DOS в нужном виде, причём, чтобы были только только вызовы ROM-BIOS.
Что хорошо тем, что в таком варианте не нужно иметь ПЗУ C800 с монитором, отчего в ПЗУ останется больше свободного места, что можно открыть ОЗУ C800...F7FF размером в 12 кб, доведя полезный объём ОЗУ до 60 кб.
Можно получить без-магнитофонный вариант загрузчика. Для чего достаточно выкинуть из ПЗУ все магнитофонные подпрограммы, а в освободившееся место встроить что-то иное.
Кстати при установке ВИ53 требуется слегка изменять ПЗУ загрузчика C000, т.к из-за того, что в ВИ53 нет входа RESET, он при включении питания верещит, как недорезанный. Чтобы он заткнулся, надо его программно инициализировать.
Адресация В/У СПЕЦИАЛИСТА следующая (все адреса не от балды, а исторические, т.е кто-то когда-то их ввёл и реально поддержал).
FF00 - ППА клавиатуры
FE00 - доп.ППА для УФ-прошивателя, принтера и SD-карты
FD00 - гуделка 580 ВИ53
Эти адреса ввёл и поддерживал SP580. Позднее были добавлены следующие адреса:
FC00 - контроллер НГМД на базе ВГ93 по схеме Корвета
Теперь разумно добавить
FB00 - РК-КНГМД (чтобы как в РК не тратить 2 кб F000...F7FF на его чип-селект)
FA00 - управление режимом экрана (mode 0/mode 1/mode 2)
F900 - D0...D6 переключение банок по 48/60 кб, FULL RAM битом D7 (факультатив)
F800 - в плате с большим ПЗУ переключение 8-ми страниц 27512 в окне C000...DFFF
Адреса для винчестера и AY-8912 уже не осталось. Но т.к типов КНГМД двое, то незадействованный чип-селект и пойдёт на винчестер. А AY-8912 не нужен одновременно с ВИ53, т.е или ВИ53 или AY-8912.
Боюсь, что с ленинградским монитором могут быть проблемы при чтении файлов rks из-за процедуры автонастройки скорости.
Будет время - поэкспериментирую с ним...
Это не проблема, т.к настройка на скорость - это подпрограмма CALL CNST. Достаточно этот CALL забить, например код CALL, т.е байт CDH перепрошить в байт 21H (или все 3 байта заменить на нули), тогда при вводе с МГ ячейка CLD останется той, что инициализируется по сбросу (3CH для 2 МГЦ, 4CH для 2.5 МГЦ). Удаление процедуры автонастройки освободит в ПЗУ загрузчика 89 байтов для других нужд.Цитата:
Сообщение от Pyk
Кстати, в эмуляторе B2M с этим проблем не было, работало оригинальное ПЗУ. Вот процедура определения константы чтения по пилотону.
Код:; ОПРЕДЕЛЕНИЕ КОНСТ.ЧТЕНИЯ
; (C) В.ИВИНСКИХ
; ЛЕНИНГРАД - 1988
.8080
cseg
PORTB EQU 0FF01H
CLD EQU 08FFFH
CNST: MVI D,150 ; КРИТЕРИЙ ЗАХВАТА - 150
CNS2: MOV B,C ; ОТМЕТОК ПОДРЯД
CALL CNS10
JZ CNST
MOV A,C
SUB B
JNC CNS3
CMA
INR A
CNS3: CPI 8 ; КРИТЕРИЙ ПРОПУСКА ОТМЕТКИ
JNC CNST
DCR D
JNZ CNS2
CNS4: LXI H,0 ; ПОЙМАЛИ ПИЛОТОН
MOV B,L
MVI D,178 ; ДЛИНА УЧАСТКА ПОДСЧЕТА
CNS5: CALL CNS10
JZ CNS4
DAD B
DCR D
JNZ CNS5
;* РАСЧЕТ КОНСТАНТЫ ЧТЕНИЯ
DAD H
MOV A,H
SUI 3
MOV L,A
ORA A
RAR
ADD L
STA CLD ; КОНСТАНТА ЧТЕНИЯ
RET
CNS10: LDA PORTB ; ПОИСК 0 И 2-Х ПЕРЕПАДОВ
CPI 80H
JC 0C800H
RRC
JC CNS10
MVI E,0
MVI C,0
CALL CNS11
CNS11: INR C
RZ
LDA PORTB
RRC
XRA E
JP CNS11
MOV A,E
CMA
MOV E,A
RET
END
думаю это не правильно, в оригинале написано про доп дешифратор на F800
как в SP580
вот , нашел конфигурацию ему для SP580
http://zx-pk.ru/threads/15172-spetsi...l=1#post581476
мож к нему попробовать подключить, без узла совместимости
с монитором SP580
zx_, ну вот, я этот дешифратор и реализовал. После этого
А на SP580 не только без модуля подключить не получится, но даже и с этим модулем - распределение адресов портов другое, как я вижу, проще сделать на оригинальном Специалисте. Адреса ППА, обслуживающего клавиатуру и магнитофон, пересекаются с адресами контроллера РК НГМД.Цитата:
ППА доступен по адресам FF00-FFFF, а на F800-F8FF дублируется ПЗУ из области C800-C8FF
и как это сделать? только саму ДОС пересобирать под другие адреса?
или аппаратно както можно
Pyk,
Если я правильно понял в своём предыдущем посте Pyk говорил о варианте SP580, где другая адресация В/У, чем в классическом СПЕЦИАЛИСТЕ. И что адрес порта РК-КНГМД для оригинала RK-DOS равный F000 с чем-то там совпадает.
А у классического СПЕЦИАЛИСТА, по крайней мере в самом базовом виде, т.е без доп.ППА на адресе F000 ничего не должно стоять. Иногда на F000 ставят 7-мое ПЗУ РФ2 (но это бывает редко, т.к нечего прошивать), а иногда когда из внешних устройств лишь два ППА, то из экономии дешифратор на область F800...FFFF не ставят, а чип-селект F000 используют для подключения доп.ППА (предназначенного для принтера, УФ-прошивателя и ROM-диска).
Таким образом имеют хождение два адреса для подключения доп.ППА - это FE00 и F000. Именно потому во всех грамотных программах обслуживания УФ-прошивателя адрес доп.ППА запрашивается.
Да, Вы совершенно правы. Это типичная проблема, что всегда возникает при конверсии РК-игрушек на ОРИОН.Цитата:
Сообщение от Pyk
RK-DOS после вывода очередного сивола на CONOUT таким типовым для РК (но не для ОРИОНА) образом проверяет не нажал ли пользователь ^C (или F4). Если нажато ^C то делается переход на адрес из ячейки BREAK. Для исправления достаточно сразу после CALL COUT (т.е F809) поставить RET. Ну а чтобы всё-же осталась реакция на ^C надо сделать вот такую коррекцию. В комменте оставлен оригинальный вариант п/п-ммы.
Скрытый текст
Код:.
OUTCON: CALL COUT ; здесь для ОРИОНА д.быть переделка
LD A, C
CP 13
RET NZ
LD C, 10
CALL COUT
CALL XF81B
CP 3
RET NZ
JP AE5BE
.comment \ это исходный вариант подпрограммы
OUTCON: CALL COUT ; здесь для ОРИОНА д.быть переделка
LD A, C
CP 13
RET NZ
LD C, 10
CALL COUT
CALL STAT
OR A
RET Z
AECEB: CALL CONIN
CP 20H
JP Z, AECEB
CP 3
RET NZ
JP AE5BE
\
[свернуть]
Проблемы есть. Уже хотя бы с цветом. Этот монитор использует свободные биты ППА не для цвета, а для других целей. Поэтому в мониторе цвет оказывается синим. А в орловском мониторе цвет нормальный, белый. Есть и другие проблемы. Не работает чтение с магнитофона.Цитата:
Сообщение от Pyk
Вот RK-DOS
Это файл RK-DOS для "Специалиста" (с простейшей доработкой, о которой писал выше.). Прошивается в ПЗУ E000...EFFF. Адрес РК-КНГМД F000...F3FF (не меньше). По коду это практически оригинал, хотя адреса меток сдвинуты. Т.е не будет работать на Z80 и не будет работать в системе, где КР580 с ВК28.
Так как вывод в одну колонку по DIR это полный хоккеизм, то здесь вывод по DIR изменён, чтобы выводилось в три колонки.
Будет работать и на РК86. Проверено только в эмуляторе В.Пыхонина, в реале не проверялось.
Скопируйте эти файлы в каталог test_sprkfdc в версии EMU80 с поддержкой РК-КНГМД для адреса F000 (что в посте #63) и запускайте EMU80.EXE. После выхода в монитор вводите GE000<ВК>.
Теперь кто-нибудь может заняться формирование (виртуальных) дисков с играми СПЕЦИАЛИСТА. Это можно делать вручную считывая с МГ-ленты и делая SAVE на диск или воспользоваться программой Е.Седова для считывания с ленты на диск.
Попозже, переделаю эту же версию для СПЕЦИАЛИСТА на Z80 (что получается заменой команд OUT на команды LD). А также форматёр и ту же RK-DOS, но для адреса порта FB00.
Возможности улучшений
Т.к сверху объём кода RK-DOS ограничивает адрес РК-КНГМД, то больше в таком объёме кода в 4 кб ничего улучшить нельзя. Чтобы получить больший объём пространства, можно или раздвинуть код вниз, т.е занять адреса D800...DFFF, или же вверх, заняв адреса F000...F7FF. В последнем случае адрес РК-КНГМД надо перенести в другое место. Это не особо вредно, т.к напрямую в порт РК-КНГМД лезет только DOS, форматёр дискет и программа контроля скорости колеса, так что перетранслировать их на другой адрес это дело одной минуты.
У меня нет РК-КНГМД, поэтому проверять я могу только в эмуляторе. Если уважаемый Pyk перенесёт адрес РК-КНГМД в область портов СПЕЦИАЛИСТА, а также расширит ПЗУ для DOS до 8 кб на область D800...F7FF, то я сделаю более качественную версию RK-DOS. Которая будет отличаться тем, что для неё будут годиться дисководы без READY и наиболее часто используемые команды DOS, оформленные сейчас в виде SYS-файлов, будут встроены в код DOS, что избавит от излишних хлопот.
Однако лучше, в связи с применением большого ПЗУ 27512 на платах ЭКСПРЕСС, ввести страничное ПЗУ в области C000...EFFF, коммутируемое портом F800. И "открыть ОЗУ" в области E000...F7FF. Тогда DOS может работать в верхнем ОЗУ, загружаясь туда из одной из 8-ми страниц ПЗУ.
Если же ПЗУ на 4-х РФ2 и никаких страниц, то тоже можно уместить RK-DOS размером до 5 кб в ПЗУ C000...EFFF, если выкинуть из ROM-BIOS ненужные вещи, сократив объём с 4 кб до 3 кб. Тогда в оставшиеся 5 кб, можно уместить RK-DOS.
Ещё хотелось бы в эмулятор хотя бы одну баночку ОЗУ, коммутируемую также как в ОРИОНЕ портом F900 (или по OUT F9). Это позволило бы иметь RAM-диск в RK-DOS. RAM-диск в 160 кб встроен во все версии RK-DOS для ОРИОНА и на реале это существенно облегчает копирование на одном НГМД. Но главное, тогда у меня на реале и в эмуляторе была бы одинаковая система.
Если Вы введёте прерывания или тик 5 ГЦ на МГ-входе, то в ROM-BIOS можно включить программно-аппаратные часы, время будет отображаться в правом верхнем углу. В моих всех драйверах ОРИОНА это есть и работает и без тика, но тогда погрешность хода велика.
[свернуть]
barsik, заказал плату РК КНГМД у tnt23, надо думать как сформировать реальную дискету
только посредством магнитофона это возможно?
попробовать только завтра смогу , руки чешутся ) спасибо большое
В принципе, да, только с магнитофона. Если не считать ещё приём файлов из проводной линии или набор их дампов с клавиатуры, что совсем не смешно. Там были программы, кажется, TAPE.SYS или TAPE2.SYS - они читают файлы с МГ и записывают на дискету. Можете потренироваться в создании дисков с файлами в этом в эмуляторе.
Форматёр я пока в эмуляторе не проверял. Даже если он в эмуляторе не работает, то он не особо и нужен. Можно скопировать имеющуюся виртуальную дискету (назвав файл другим именем), а затем в эмуляторе поудалять все файлы. А после сделать с файла этой дискеты нужное число копий, получив большое количество чистых форматированных дискет. Я так делал в эмуляторе B2M для КНГМД на базе ВГ93, т.к в том эмуляторе форматёр не работает.
В ближайшее время странслирую CHKDSK для RK-DOS, а затем CP/M с очень низким TPA, не для использования, а просто для знакомства. TPA будет всего 24...28 кб (в зависимости от того какой драйвер применю). А когда будет эмулятор с "открытым верхним ОЗУ", то можно сделать CP/M с бОльшим TPA до 35 кб.
А затем займусь Нортоном для РК-ДОС. Раз уж цвет есть в эмуляторе, то, естественно, буду делать сразу в цвете. Жалко только, что цвет убогий, без раскраски PAPER. Окна с таким цветом получатся плохо.
barsik, спасибо, полезная вещь получилась, еще бы в железе это попробовать (тем более, что доработки для подключения дисковода требуются на первый взгляд минимальные).
Можно действительно сформировать образы дискет с программами для использования в эмуляторе, но немного смущает одна вещь: в программах могут встречаться обращения к портам клавиатуры не по адресам FFxx, а, например, F8xx. Тогда эти программы придется слегка адаптировать (в основном, наверное, игры).
Форматёр по идее должен бы работать, но я это не проверял. (Для форматирования нужно подсунуть эмулятору пустой файл размером 500000 байт.)
Что же касается доработок - в эмуляторе можно много что сделать, а вот нужно ли? В уже реализованной минимальной конфигурации я вижу практическую пользу - можно подключить дисковод к Специалисту и загружать оттуда файлы, даже в эмуляторе это не помешает. А вот насчет дальнейших доработок... Я могу в конфиге перенести адреса контроллера и расширить ПЗУ, добавить 16-цветный режим из MX, а, доработав эмулятор, также сделать страничное ПЗУ и верхнее ОЗУ с банками, вопрос только - что с этой никогда не существовавшей в реале конфигурацией планируется делать? Будет ли это реализовано потом в реале? Что будем делать потом с той же перенесенной на Специалист CP/M? Или это просто ради искусства - попробовать запустить CP/M на этом компьютере? В любом случае я готов попробовать сделать конфигурацию, нужно только точно определиться, по каким адресам что размещать...
в программах могут встречаться обращения к портам клавиатуры не по адресам FFxx, а, например, F8xx. Тогда эти программы придется слегка адаптировать (в основном, наверное, игры).
«»
а есть ли способ разделить дешифрацию РК ДоС и ППА клавиатуры Специалиста с « помощью двух диодов «. (С). ?
чтобы не модифицировать ДОС
Спасибо не мне, а Е.Седову, - я лишь три байта изменил.Цитата:
Сообщение от quote
Скрытый текст
Не напрягайтесь, а сделайте лишь то, что можно сделать быстро, просто дописав конфиг за 10 минут. Я не знаю, что конфиг может, а что нет. Потому напишу всё, что желательно.
1. Верхнее ОЗУ. D000...F7FF или в случае если есть страничное ПЗУ, то E000...F7FF. Этот кусок всегда ОЗУ
2. Страничное ПЗУ в окне C000...DFFF. В этом окне в 8 кб читается тот 8-ми килобайтовый кусок ПЗУ 27512, чей номер записан по адресу F800 (кроме бита D7).
3. Если страничное ПЗУ невозможно, то - лишь базовое ПЗУ C000...CFFF, а D000...F7FF всегда открытое ОЗУ. Но в этом случае становится очень желательным ROM-диск. Точто такой же как в ОРИОНЕ, читаемый через доп.ППА. Адрес доп.ППА в СПЕЦИАЛИСТЕ FE00. Назначение портов - то же, через PA читаем, а в PB,PC записываем адрес командой LD (port_B),HL.
4. Адрес РК-КНГМД также надо перенести на FB00, чтобы освободить F000. На F000 никто не лезет. Т.к в варианте без дешифратора на область В/У здесь ставят доп.ППА для УФ-прошивателя.
Это минимум, что позволяет что-то уже делать. Причём это реал, - именно то что будет у всех на платах ЭКСПРЕСС. Т.е большое страничное ПЗУ и верхнее ОЗУ.
Но ещё лучше дать мне хоть одну дополнительную банку, а лучше 8 или даже 16 банок. Коммутация банок идентична ОРИОНУ - портом F900 (или по OUT F9). Отличие в том, что в ОРИОНЕ банка 60 кб, здесь 48 кб (это без верхнего ОЗУ, но его можно не коммутировать).
Если не вводить режим FULL RAM, то каждая банка это 48 кб сплошного ОЗУ. В реале, если открыто верхнее ОЗУ E000...F7FF, то оно тоже в каждой банке своё. Т.е переключается как окно 0...BFFF, так и участок верхнего ОЗУ E000...F7FF. Так это в реале.
Но это не обязательно. Если сделаете, то смогу это использовать, - VDISK будет бОльшего размера, - в каждой банке будет не 48 кб, а 54 кб.
Адреса портов я уже приводил в посте #65. Адресация В/У СПЕЦИАЛИСТА следующая (все адреса не от балды, а исторические, т.е кто-то когда-то их ввёл и реально поддержал).
FF00 - ППА клавиатуры
FE00 - доп.ППА для УФ-прошивателя, принтера, SD-карты и ROM-диска
FD00 - таймер 580 ВИ53 (второй DB53 может быть на FD80)
Эти адреса ввёл и поддерживал SP580. Позднее были добавлены следующие адреса:
FC00 - контроллер НГМД на базе ВГ93 по схеме Корвета
Теперь разумно добавить
FB00 - РК-КНГМД (чтобы как в РК не тратить 2 кб F000...F7FF на его чип-селект)
FA00 - управление режимом цвета (журнальный/расширенный)
F900 - D0...D6 переключение банок по 48/62 кб,
..........FULL RAM битом D7 (факультатив).
F800 - переключение 8-ми страниц ПЗУ 27512 в окне C000...DFFF. Бит D7 отключает ПЗУ совсем
В порту F900 бит D7 пусть включает прерывания 50 Гц, вызывая исполнение RST 38. FULL RAM (т.е отключение блока ПЗУ C000...DFFF битом F800/D7) пока "не горит", но пусть позже было бы неплохо это иметь.
Адреса для винчестера и AY-8912 уже не осталось. Но т.к типов КНГМД двое, то незадействованный чип-селект и пойдёт на винчестер. А AY-8912 не нужен одновременно с ВИ53, т.е или ВИ53 или AY-8912.
Тест для отладки как эмулятора, так и проверки железа в реале написать не проблема. Сделаю это в ближайшие дни.
[свернуть]
Возможно могут быть такие программы. Это тех авторов, кто не дизассемблировал ROM-BIOS и не видел адресации, а ориентировался по принципиальной схеме.Цитата:
Сообщение от zx_
Исправить несложно. Такие игры несложно найти. Запускайте их в этой последней версии эмулятора. И те игры, что не реагируют на клавиши, а в старой версии реагируют присылайте мне.
Вопрос не понял.Цитата:
Сообщение от zx_
М.быть Вы имеете ввиду, разделить чтение ПЗУ C800 в области F800...F8FF от адресации ППА на F800. Т.е вопрос в том, что есть ли способы использовать вышеупомянутые игры с адресацией на F800, если такие найдутся, в СПЕЦИАЛИСТЕ с дешифратором В/У на область F800.
Это можно, то тогда утратится совместимость с ОРИОНОМ и РК86 по вызовам F803, F806, F809... А это гораздо важнее, чем несколько игр, исправить которые не проблема. Чтобы игра адресующая ППА клавиатуры как F800 работала в машине с дешифратором ИД7, достаточно убрать диоды (или ЛИ1) дающие совместимость с РК и поставить два диода объединив чип-селект F800...F8FF (7 нога ИД7) и чип-селект FF00...FFFF. Тогда ППА будет адресоваться в обоих областях, что используются программами. Хотя мне кажется, что программ для ППА F800 мало.
создал пустой файл fsutil file createnew c:\500.rkdisk
создался , подключил в эмуляторе alt b
FORMAT B:
бла бла , потом
FORMATING DISK ...
I/O ERROR
не форматирует почемуто
бейсик плюс работает
судя по конфиг файлу ЕМU в Специалисте вообще никаких изменений для работы с РК ДОС 2.9/S. от barsik,
SE не работает
Даже во времена начала бума ZX ВГ75 стоила на рынке 25р., в тоже время комплект ПЗУ на ZX стоял 75р. В общем можно было смело вкладываться тогда в ZX. Поправка - если память меня не подводит.
- - - Добавлено - - -
И видимо я стал счастливым обладателем RK, только благодаря купленному конструктору КР-02 (чуть ранее на год, два).
Думаю, что не сильно подводит.
(А вообще жалею, что не записывал свои мысли и события тех бурных лет, ибо сейчас и не вспомнить и много вранья про то время, как минимум про причинно следственность событий)
Я же школьником выписывал МК, еще и поэтому нацелился тогда на Специалист. Спектрумов сильно не касался, мне не игровая нужна была консоль, а что-то родное. Только иногда помогал приятелям отладить, да и зашил наверно несколько тысяч EPROM для них ))