nedoPC.org

Community of electronics hobbyists established in 2002

...
Atom Feed | View unanswered posts | View active topics It is currently 15 Jul 2018 22:48



Reply to topic  [ 10 posts ] 
Квазидиск для Радио-86РК 
Author Message
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 16702
Location: Colorado
Reply with quote
Как известно, классический РК-86 имеет в своём мониторе команду R, которая считывает байты из ROM-диска, подключенного ко второму ВВ55 (адреса #Axxx). Классическая схема подразумевает, что порт А запрограммирован на ввод и подключен к шине данных внешних ПЗУх, а порты B и C запрограммированы на вывод и формируют младший байт адреса и старший байт адреса соответственно, причем C7 идёт на OE ПЗУх, т.е. перебираемых адресов всего 32К (хотя монитор не глядя посылает все 16 бит в качестве адреса, правда после окончания передачи, он всегда пишет #FF в порт C).

Есть разные схемы, преодолевающие 32К лимит, например со счётчиком, кнопкой и 7-сегментным индикатором (см. тут) - при этом пользователь вручную переключает странички, или схема с регистром, защёлкивающим порт B, несовместимая с командой монитора R, т.к. много битов порта C являются управляющими сигналами (см. тут)...

Хотелось бы получить такой вариант, который был бы на 100% совместим с классическим монитором, но в тоже время позволял бы программно переключать страницы. Первая мысль была выкинуть ВВ55 и заменить её одним буфером и тремя регистрами, при этом по адресу #A002 стало бы возможным записывать третий байт адреса, однако такой вариант не был бы совместимым с классической РК, в которой ВВ55 неубираем...

_________________
:eugeek: https://twitter.com/Shaos1973


Last edited by Shaos on 20 Jan 2014 04:55, edited 2 times in total.



19 Jan 2014 00:06
Profile WWW
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 16702
Location: Colorado
Reply with quote
Post 
Короче идея такая, ВВ55 при сбросе устанавливает все порты на ввод (причём будучи перепрограммированным на вывод, порт сразу же выдаст нули), а монитор этот ВВ55 не перепрограммирует пока не будет вызывана команда R, хотя и пишет #FF по адресу #A002 при инициализации и после выполнения каждой команды.

Мы берём тот же C7, которым управляется выход OE ПЗУх, подтягиваем его резистором к +5В и пускаем его как CLK на регистр со сбросом 74174, защёлкивающий 6 младших битов порта C при переходе С7 от 0 к 1. Если я всё правильно понимаю, сразу после инициализации, в этом регистре будет 0, который будет там оставаться при первом вызове команды монитора R (т.к. монитор пошлёт #FF в порт C только по окончании команды R), т.е. по умолчанию, R будет работать с нулевым 32К окном. Далее, чтобы сдвинуться скажем в первое окно, надо записать по адресу #A002 байт #01 и следом за ним #81 туда же, что должно защёлкнуть 000001 в регистре, сдвинув окно. Из этих 6 битов младшие 5 будут формировать адреса A15, A16, A17, A18, A19, покрывая 1 мегабайт (2 флешины по 512K), а старший бит будет включать режим записи (переподавая C7 на WE вместо OE в случае единицы):
Code:
C5R C7 | OE WE
--------------
 0  0  |  0 1
 0  1  |  1 1
 1  0  |  1 0
 1  1  |  1 1

P.S. Можно сделать так, что посылка #FF в порт C будет сбрасывать регистр в нули (единичками в битах 6 и 7) и возвращать схему из режима записи, если она там была...

_________________
:eugeek: https://twitter.com/Shaos1973


Last edited by Shaos on 19 Jan 2014 12:24, edited 3 times in total.



19 Jan 2014 01:15
Profile WWW
Junior

Joined: 06 Dec 2011 00:40
Posts: 7
Location: 46.254.245.97
Reply with quote
Post 
Shaos, Зачем использовать директиву R? Ведь плевое дело накорябать нечто вроде ДОСа.


19 Jan 2014 01:29
Profile
Fanat

Joined: 27 May 2011 05:25
Posts: 79
Location: Perm
Reply with quote
Post 
А если значение порта С защелкивать на предмет старших бит в момент прихода на порт B последнего значения из специальной последовательности, например, AA 55 A5 5A 86? Хотя, тут есть сложность, так как схема асинхронная... Распознавание должно происходить в момент смены значения старшего бита, а реальная последовательность записи в порт 2A AA C5 55 25 A5 CA 5A 06 86.
Сложновато, но как концепт...


19 Jan 2014 03:02
Profile
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 16702
Location: Colorado
Reply with quote
Post 
vovik_vm wrote:
Shaos, Зачем использовать директиву R?...

Для начальной загрузки нечта вроде ДОСа :)

_________________
:eugeek: https://twitter.com/Shaos1973


19 Jan 2014 05:16
Profile WWW
Junior

Joined: 06 Dec 2011 00:40
Posts: 7
Location: 46.254.245.97
Reply with quote
Post 
Есть же свободные 6Кб в мониторе.


19 Jan 2014 05:50
Profile
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 16702
Location: Colorado
Reply with quote
Post 
vovik_vm wrote:
Есть же свободные 6Кб в мониторе.

Для ДОСа их не хватит, да к тому же в оригинальном РК нету свободных 6Кб в мониторе, а хотелось бы заполучить универсальное решение :)

_________________
:eugeek: https://twitter.com/Shaos1973


19 Jan 2014 09:35
Profile WWW
Novelist
User avatar

Joined: 11 Jun 2012 08:30
Posts: 46
Reply with quote
Post 
Вот тут vinxru, кажется, реализовал что-то похожее по идеологии:

http://zx-pk.ru/wiki/ROM-%D0%B4%D0%B8%D1%81%D0%BA_%D0%B4%D0%BB%D1%8F_%D0%BA%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80%D0%B0_%D0%90%D0%BF%D0%BE%D0%B3%D0%B5%D0%B9-%D0%91%D0%9A01

http://zx-pk.ru/showthread.php?t=17316

Quote:
Апогей умеет работать только с ПЗУ объемом 64 Кб. Для подключения картриджа объемом 1 Мб потребуется меппер. Меппер я придумал простой, один регистр. При обращении к адресам 8000h, 8001h, 8002h, 8003h..., будет выбираться страница. Размер страницы 32 Кб.

Из монитора Апогея загрузка будет выглядеть так

R8002 (Выбор банка 2)
R3200,45F4,100 (Загрузить область ПЗУ 3200-45F4 в ОЗУ 100-14F4)

Что бы не помнить для всех программ этих цифр, я написал загрузчик. Он загружается простой и запоминающейся командой: "R0,1000". Далее пользователь выбирает стрелками нужную программу и нажимает Enter.
Quote:
Помимо ПЗУ, эта схема ROM-диска содержит микросхему К555ТМ9 и два конденсатора.
ПЗУ разделено на 16 страниц по 32 Кб. Микросхема К555ТМ9 хранит номер выбранной страницы. То есть выход микрсохемы ТМ9 подключен к линиям адреса A15,A16,A17,A18 ПЗУ. Запись номера страницы в ТМ9 осуществляется чтением адресов 8000h-800Fh.
В начале каждой страницы ПЗУ записана программа загрузчик. Это что бы пользователю не приходилось выбирать номер страницы вручную. Загрузчик предлагает пользователю в удобной форме выбрать нужную программу. Затем программа включает нужные страницы ПЗУ, загружает программу в ОЗУ и запускает её.


05 Mar 2014 11:41
Profile WWW
Fanat

Joined: 16 May 2007 02:01
Posts: 81
Location: 212.5.73.205
Reply with quote
Shaos wrote:
Как известно, классический РК-86 имеет в своём мониторе команду R, которая считывает байты из ROM-диска, подключенного ко второму ВВ55 (адреса #Axxx). Классическая схема подразумевает, что порт А запрограммирован на ввод и подключен к шине данных внешних ПЗУх, а порты B и C запрограммированы на вывод и формируют младший байт адреса и старший байт адреса соответственно, причем C7 идёт на OE ПЗУх, т.е. перибераемых адресов всего 32К (хотя монитор не глядя посылает все 16 бит в качестве адреса, правда после окончания передачи, он всегда пишет #FF в порт C)....

Бессмыслено писать в порт С #FF.
ПЗУ ни коим боком не контактирует с шинами РК и ни с кем не конфликтует. Всё общение с РК через ВВ55. Так что просто ROMдиск имеет максимальный размер 64Кбт. А CS на ПЗУ должен глухо сидеть на общем проводе. Такой вариант логичен и прост для ROMдиска. Скорей всего этот байт #FF (старший разряд D7) должен отключать питание с ROMдиска. Но стоит ли функция отключения питания ПЗУ половины объема ROMдиска? Не стоит, потому и нужно использовать все 64Кбт. А то что потом пишет процик в порт С по барабану и для ПЗУ и для ВВ55.


06 Mar 2014 10:55
Profile
God
User avatar

Joined: 13 Nov 2010 05:06
Posts: 1291
Reply with quote
Post 
А просто изменить в Мониторе директиву R так, как нужно, под своё железо?


06 Mar 2014 11:02
Profile
Display posts from previous:  Sort by  
Reply to topic   [ 10 posts ] 

Who is online

Users browsing this forum: No registered users and 1 guest


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Group
Designed by ST Software.