|
nedoPC.orgCommunity for electronics hobbyists, established in 2002 |
|
Last visit was: 08 Nov 2024 15:47
|
It is currently 08 Nov 2024 15:47
|
Author |
Message |
Shaos
Admin
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 неубираем...
Last edited by Shaos on 20 Jan 2014 03:55, edited 2 times in total.
|
18 Jan 2014 23:06 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 23398 Location: Silicon Valley
|
Короче идея такая, ВВ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 в случае единицы): P.S. Можно сделать так, что посылка #FF в порт C будет сбрасывать регистр в нули (единичками в битах 6 и 7) и возвращать схему из режима записи, если она там была...
Last edited by Shaos on 19 Jan 2014 11:24, edited 3 times in total.
|
19 Jan 2014 00:15 |
|
|
vovik_vm
Junior
Joined: 05 Dec 2011 23:40 Posts: 7 Location: 46.254.245.97
|
Shaos, Зачем использовать директиву R? Ведь плевое дело накорябать нечто вроде ДОСа.
|
19 Jan 2014 00:29 |
|
|
KolAnVi
Fanat
Joined: 27 May 2011 04:25 Posts: 79 Location: Perm
|
А если значение порта С защелкивать на предмет старших бит в момент прихода на порт B последнего значения из специальной последовательности, например, AA 55 A5 5A 86? Хотя, тут есть сложность, так как схема асинхронная... Распознавание должно происходить в момент смены значения старшего бита, а реальная последовательность записи в порт 2A AA C5 55 25 A5 CA 5A 06 86.
Сложновато, но как концепт...
|
19 Jan 2014 02:02 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 23398 Location: Silicon Valley
|
Для начальной загрузки нечта вроде ДОСа
|
19 Jan 2014 04:16 |
|
|
vovik_vm
Junior
Joined: 05 Dec 2011 23:40 Posts: 7 Location: 46.254.245.97
|
Есть же свободные 6Кб в мониторе.
|
19 Jan 2014 04:50 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 23398 Location: Silicon Valley
|
Для ДОСа их не хватит, да к тому же в оригинальном РК нету свободных 6Кб в мониторе, а хотелось бы заполучить универсальное решение
|
19 Jan 2014 08:35 |
|
|
alexcp
Senior
Joined: 11 Jun 2012 07:30 Posts: 130
|
|
05 Mar 2014 10:41 |
|
|
Rokl
Fanat
Joined: 16 May 2007 01:01 Posts: 93 Location: 212.5.73.205
|
Бессмыслено писать в порт С #FF.
ПЗУ ни коим боком не контактирует с шинами РК и ни с кем не конфликтует. Всё общение с РК через ВВ55. Так что просто ROMдиск имеет максимальный размер 64Кбт. А CS на ПЗУ должен глухо сидеть на общем проводе. Такой вариант логичен и прост для ROMдиска. Скорей всего этот байт #FF (старший разряд D7) должен отключать питание с ROMдиска. Но стоит ли функция отключения питания ПЗУ половины объема ROMдиска? Не стоит, потому и нужно использовать все 64Кбт. А то что потом пишет процик в порт С по барабану и для ПЗУ и для ВВ55.
|
06 Mar 2014 09:55 |
|
|
VituZz
God
Joined: 13 Nov 2010 04:06 Posts: 1344
|
А просто изменить в Мониторе директиву R так, как нужно, под своё железо?
|
06 Mar 2014 10:02 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 23398 Location: Silicon Valley
|
Да действительно - очень похоже Только без возможности записи и номер страницы задаётся младшим байтом адреса вместо старшего: P.S. и тут похоже даже чтение делать не надо, как в описании написано, а просто записать адрес #800X в порты половинок адреса и всё - CLK перескочит с 0 в 1 и совершит запись в регистр, правда записывать адрес надо в правильном порядке - сначала младший байт адреса задав биты страницы, а потом - старший байт адреса #80 (т.е. 2 записи в порты ВВ55) похоже чтобы сделать совместимым с моим вариантом (по чтению), надо на регистр завести биты адреса A8,A9,A10,A11,A12,A13 вместо A0-A3(A4), правда старший байт придётся дважды записать - сначала без единички в старшем бите, а потом с единичкой - т.е. всё равно 2 записи, что у меня, что у винксру так что наверное надо мне для единообразия поддержать вариант vinxru в варианте 1МБ либо допилить у себя запись во флеш, как я и планировал изначально а можно расширить вариант vinxru возможностью записи докидав в схему нужной логики P.P.S. к тому же схема vinxru на 512 кило уже давно поддержана в Emu80 v4 правда по схеме vinxru только для Апогея:хотя через конфиг его и можно подключить в конфигурацию РК, но для поддержки размера 1МБ или больше потребуется изменение исходного кода эмулятора...
You do not have the required permissions to view the files attached to this post.
|
09 Jan 2024 10:03 |
|
|
alexcp
Senior
Joined: 11 Jun 2012 07:30 Posts: 130
|
Хорошая тема, десятилетней выдержки
|
09 Jan 2024 15:26 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 23398 Location: Silicon Valley
|
Пришло время собирать хвосты
|
09 Jan 2024 20:31 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 23398 Location: Silicon Valley
|
у AT49F040 очень хитрая процедура записи запись одного байта осуществляется за время от 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. чтобы "ручной" способ переключения страниц продолжал работать по #FF нельзя обнулять регистр т.к. монитор пошлёт #FF в порт C следом за директивой R8002! Выходит обнуление регистра надо будет делать только по включению питания (и по кнопке сброса на плате расширения)...
You do not have the required permissions to view the files attached to this post.
|
09 Jan 2024 22:21 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 23398 Location: Silicon Valley
|
Проблема с 49F040 состоит в том (кроме очень ограниченного количества циклов перезаписи и невозможности снять защиту с первого 16-килобайтного блока, если она уже установлена), что записывать в неё можно только нули (прожигать), а единички можно записать поверх нулей только стерев весь чип (т.е. дополнять новыми данными уже записанное будет можно, а вот менять старые данные без полного стирания - никак). С другой стороны, если у нас на плате несколько таких чипов, то просто будем считать, что у нас полмеговые сектора Существует ещё одна полумеговая флешина 29F040 (она у vinxru в схеме тоже "перечислена") с секторами по 64К, которые можно стирать независимо друг от друга (гарантируется миллион циклов перезаписи на сектор). Команды у неё несколько иные (хотя вроде частично совпадают в том смысле, что этот чип только 11 младших битов адреса воспринимает при записи команд, в отличие от предыдущего): (в 29F040 защита отдельных секторов от записи возможна только в программаторах, которые способны выдавать высокое напряжение записи) По-идее можно программно определять какие чипы (и сколько) стоят на плате расширения, чтобы включать разные алгоритмы записи/стирания при необходимости...
You do not have the required permissions to view the files attached to this post.
|
10 Jan 2024 21:06 |
|
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
|
|