nedoPC.org

Community for electronics hobbyists, established in 2002
Last visit was: 08 Nov 2024 15:47
It is currently 08 Nov 2024 15:47



 [ 27 posts ]  Go to page 1, 2  Next
Квазидиск для Радио-86РК 
Author Message
Admin
User avatar

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

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

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

_________________
https://mastodon.social/@Shaos :dj:
https://www.youtube.com/@Shaos1973


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



18 Jan 2014 23:06 WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 23398
Location: Silicon Valley
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) и возвращать схему из режима записи, если она там была...

_________________
https://mastodon.social/@Shaos :dj:
https://www.youtube.com/@Shaos1973


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



19 Jan 2014 00:15 WWW
Junior

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


19 Jan 2014 00:29
Fanat

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


19 Jan 2014 02:02
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 23398
Location: Silicon Valley
Post 
vovik_vm wrote:
Shaos, Зачем использовать директиву R?...

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

_________________
https://mastodon.social/@Shaos :dj:
https://www.youtube.com/@Shaos1973


19 Jan 2014 04:16 WWW
Junior

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


19 Jan 2014 04:50
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 23398
Location: Silicon Valley
Post 
vovik_vm wrote:
Есть же свободные 6Кб в мониторе.

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

_________________
https://mastodon.social/@Shaos :dj:
https://www.youtube.com/@Shaos1973


19 Jan 2014 08:35 WWW
Senior
User avatar

Joined: 11 Jun 2012 07:30
Posts: 130
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 10:41 WWW
Fanat

Joined: 16 May 2007 01:01
Posts: 93
Location: 212.5.73.205
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 09:55
God
User avatar

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


06 Mar 2014 10:02
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 23398
Location: Silicon Valley
Post Re:
alexcp wrote:
Вот тут 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.
В начале каждой страницы ПЗУ записана программа загрузчик. Это что бы пользователю не приходилось выбирать номер страницы вручную. Загрузчик предлагает пользователю в удобной форме выбрать нужную программу. Затем программа включает нужные страницы ПЗУ, загружает программу в ОЗУ и запускает её.

Да действительно - очень похоже :)

Только без возможности записи и номер страницы задаётся младшим байтом адреса вместо старшего:

Attachment:
Apogey_bk01_romdisk4.jpg

P.S. и тут похоже даже чтение делать не надо, как в описании написано, а просто записать адрес #800X в порты половинок адреса и всё - CLK перескочит с 0 в 1 и совершит запись в регистр, правда записывать адрес надо в правильном порядке - сначала младший байт адреса задав биты страницы, а потом - старший байт адреса #80 (т.е. 2 записи в порты ВВ55)
похоже чтобы сделать совместимым с моим вариантом (по чтению), надо на регистр завести биты адреса A8,A9,A10,A11,A12,A13 вместо A0-A3(A4), правда старший байт придётся дважды записать - сначала без единички в старшем бите, а потом с единичкой - т.е. всё равно 2 записи, что у меня, что у винксру :roll:
так что наверное надо мне для единообразия поддержать вариант vinxru в варианте 1МБ :)

Attachment:
apogey_cart_sh.jpg

либо допилить у себя запись во флеш, как я и планировал изначально

а можно расширить вариант vinxru возможностью записи докидав в схему нужной логики ;)

P.P.S. к тому же схема vinxru на 512 кило уже давно поддержана в Emu80 v4 :)

Attachment:
Screenshot from 2024-01-10 21-55-14.png

правда по схеме vinxru только для Апогея:

Attachment:
Screenshot from 2024-01-10 22-56-12.png

хотя через конфиг его и можно подключить в конфигурацию РК, но для поддержки размера 1МБ или больше потребуется изменение исходного кода эмулятора...


You do not have the required permissions to view the files attached to this post.

_________________
https://mastodon.social/@Shaos :dj:
https://www.youtube.com/@Shaos1973


09 Jan 2024 10:03 WWW
Senior
User avatar

Joined: 11 Jun 2012 07:30
Posts: 130
Хорошая тема, десятилетней выдержки ;)


09 Jan 2024 15:26 WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 23398
Location: Silicon Valley
alexcp wrote:
Хорошая тема, десятилетней выдержки ;)

Пришло время собирать хвосты :lol:

_________________
https://mastodon.social/@Shaos :dj:
https://www.youtube.com/@Shaos1973


09 Jan 2024 20:31 WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 23398
Location: Silicon Valley
у AT49F040 очень хитрая процедура записи :idea:

Attachment:
Screenshot from 2024-01-09 21-04-40.png

запись одного байта осуществляется за время от 10 до 50 микросекунд (порядка 20 килобайт в секунду?),
а полная очистка чипа потребует 10 секунд (при этом флеш выдерживает до 10000 циклов перезаписи)

при чтении /WE=1, а /CE и /OE ходят в 0 вместе

при записи же /OE=1 и теперь /CE с /WE ходят в 0 вместе (и потом ещё надо будет опять читать, чтобы понять когда запись закончилась)

как я и планировал 10 лет назад 6м битиком регистра можно переключать A15 с /OE на /WE, а при записи #FF в старший байт адреса (как это делает директива R по окончанию своей работы) регистр будет сбрасываться в ноль (можно это делать по наличию единичек в битах C7 и C6), переставляя активную страницу в нулевую и отменяя режим записи

если идти по пути vinxru, то номер страницы будет задаваться младшим байтом (порт B), из которого будут браться 6 бит для записи в регистр 74LS174 - 5 старших битов адреса A15-A19 и 1 бит управления записью, но тут можно заложить расширение на будущее, поставив бит управления записью самым старшим B7, оставив битики 5 и 6 незадействованными, чтобы в будущем была возможность расширить память до 4 МБ (т.е. 128 страниц по 32КБ вместо теперешних 32 страниц), а пока запись адреса #8000 будет означать дальнейшее обращение к нулевой странице первого чипа 49F040, а запись адреса #8020 будет означать дальнейшее обращение к нулевой странице второго чипа 49F040, а вот если записать адрес #8080, то это уже будет означать режим записи с выбором нулевого окна первого чипа (все управляющие команды этой флеши пишутся 15-битным адресом т.е. как раз в нулевую страницу). Для записи придётся вручную перепрограммировать на запись порт A, записав туда байт, который надо будет передать во флеш и далее записав скажем адрес #5555 в порты B и C мы произведём запись во флеш по этому адресу, при этом правда придётся далее снова записать адрес #80XX, чтобы закончить строб /WE, что также перезапишет регистр в новый режим XX, который может повторять предыдущий режим, а может и не повторять...

P.S. может ещё спец-режим чтения сделать для того чтобы понять сколько мегабайт на плате расширения? типа при чтении с адреса #FFFF (можно даже дерективой R это делать) выдавать байт с количеством чипов 49F040 на плате расширения - 1,2,4 или 8 (на самом деле это всё также можно делать 2 битиками C7 и C6 - оно будет отключать флешины от порта A и подключать к порту A идентификатор платы: #F1, #F2, #F4 или #F8)

P.P.S. чтобы "ручной" способ переключения страниц продолжал работать
Quote:
R8002 (Выбор банка 2)
R3200,45F4,100 (Загрузить область ПЗУ 3200-45F4 в ОЗУ 100-14F4)
по #FF нельзя обнулять регистр т.к. монитор пошлёт #FF в порт C следом за директивой R8002!
Выходит обнуление регистра надо будет делать только по включению питания (и по кнопке сброса на плате расширения)...


You do not have the required permissions to view the files attached to this post.

_________________
https://mastodon.social/@Shaos :dj:
https://www.youtube.com/@Shaos1973


09 Jan 2024 22:21 WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 23398
Location: Silicon Valley
Проблема с 49F040 состоит в том (кроме очень ограниченного количества циклов перезаписи и невозможности снять защиту с первого 16-килобайтного блока, если она уже установлена), что записывать в неё можно только нули (прожигать), а единички можно записать поверх нулей только стерев весь чип (т.е. дополнять новыми данными уже записанное будет можно, а вот менять старые данные без полного стирания - никак). С другой стороны, если у нас на плате несколько таких чипов, то просто будем считать, что у нас полмеговые сектора ;)

Существует ещё одна полумеговая флешина 29F040 (она у vinxru в схеме тоже "перечислена") с секторами по 64К, которые можно стирать независимо друг от друга (гарантируется миллион циклов перезаписи на сектор). Команды у неё несколько иные (хотя вроде частично совпадают в том смысле, что этот чип только 11 младших битов адреса воспринимает при записи команд, в отличие от предыдущего):

Attachment:
Screenshot from 2024-01-10 19-50-55.png
(в 29F040 защита отдельных секторов от записи возможна только в программаторах, которые способны выдавать высокое напряжение записи)

По-идее можно программно определять какие чипы (и сколько) стоят на плате расширения, чтобы включать разные алгоритмы записи/стирания при необходимости...


You do not have the required permissions to view the files attached to this post.

_________________
https://mastodon.social/@Shaos :dj:
https://www.youtube.com/@Shaos1973


10 Jan 2024 21:06 WWW
 [ 27 posts ]  Go to page 1, 2  Next

Who is online

Users browsing this forum: Claude AI [Bot] 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

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