С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Какие новости проекта? Как там с производством плат?
Пришлось сделать ряд значительных изменений в менеджер памяти, а так же пересмотреть поддержку карты DivIDE:
По менеджеру памяти:
В этом проекте будет поддержка псевдо-многозадачности, позволяющая загружать одновременно до 31 программ. Как это будет выглядеть:
По-умолчанию будет доступен некий объём ОЗУ (1 МБ, 2 МБ или все 4 МБ, это нужно будет решить в ходе написания новой BIOS, т.к. определяться будет прошивкой BIOS).
Допустим, пользователь хочет загрузить сразу несколько программ. Пользователь нажимает кнопку "Magic", попадает в меню управления задачами. Там он выбирает объём памяти для задачи, расположение задачи в памяти будет выбираться автоматически, сохраняет, выходит в стандартный режим Меню-128, TR-DOS, Basic-48 или Gluk, где может загрузить программу. Далее снова нажимает кнопку "Magic", там он может создать новую задачу, выбрав для неё объём памяти, или переключиться на ранее созданную задачу, выходит либо в Меню-128, TR-DOS, Basic-48, Gluk для загрузки новой программы, или в прерванную ранее программу. Т.е. всегда выполняется только одна текущая задача, пользователь сможет в любой момент через кнопку Magic переключаться между задачами или создавать новые, если ещё есть свободная память.
Доступные объёмы памяти для задачи: 128 КБ, 256 КБ, 512 КБ, 1 МБ, 2 МБ или однозадачный режим - все 4 МБ. Соответственно, если всем задачам выделить по 128 КБ, то поместится 31 программа, а если по 1 МБ, то до 3-х задач объёмом 1 МБ + задачи с выделенным для них меньшего объёма ОЗУ (последние 128 КБ будут использоваться в многозадачном режиме для хранения карты занятой памяти, регистров процессора для каждой задачи, значения портов #7FFD, #DFFD, #1FFD и #EFF7 (в схеме не хватает чтения порта #EFF7, это необходимо, если программы используют расширенные видеорежимы), а так же для сохранения экрана 0-й задачи, который будет использоваться для диалога с пользователем). Экранная область в многозадачном режиме будет привязана к выбранной области ОЗУ.
Аппаратно многозадачный режим реализован новым менеджером памяти, схему которого я привёл прошлый раз, и 5-битной маской старших разрядов номера страницы ОЗУ, посредством порта BIOS #FC37.
Если определённый бит маски = 0, то соответствующий ему бит номера страницы ОЗУ доступен для свободного переключения программой, этот бит стандартно проецируется только на верхние адреса в пространстве #C000-#FFFF, и соответствующий бит проецирования экрана в видеоконтроллере = 0.
Если определённый бит маски = 1, то соответствующий ему бит номера страницы ОЗУ блокируется в заранее заданном состоянии, определяя расположение задачи в ОЗУ, этот бит проецируется на всё адресное пространство #0000 - #FFFF, а так же он поступает на видеоконтроллер для нацеливания экранов на эту область ОЗУ.
Дополнительно сделал одну доработку в самом менеджере памяти, позволяющую командами короткой адресации OUT (#FD), A управлять 256 КБ ОЗУ через порт #7FFD. Раньше через короткую адресацию было доступно только 128 КБ, т.е. теперь дополнительно доступен D6 #7FFD.
Сложность была с тем, чтобы определиться, как дать пользователям возможность выбора, куда попадать по кнопке Magic - в управление задачами или стандартно в КЕШ. В данной ревизии я решил воспользоваться опцией отключения доступа к КЕШ-памяти по кнопке Magic, которую я сделал ранее. Если в BIOS-Setup включить доступ к КЕШ-памяти, то по кнопке Magic будем попадать в КЕШ, соответственно, управление многозадачностью будет недоступно. Если в BIOS-Setup доступ к КЕШ-памяти по кнопке Magic отключить, тогда по этой кнопке будем попадать в управление задачами, обработчик по адресу #0066 которого будет находиться в ПЗУ BIOS.
Я рассматривал варианты сделать горячую клавишу во время нажатия Magic, но потом отказался от этой идеи потому, что в этом варианте появляется проблема, что клавишу опрашивать по Magic нужно, а значит это должен делать обработчик в ПЗУ BIOS, и если пользователь выберет КЕШ, то надо каким-то образом отключить ПЗУ BIOS и включить КЕШ, и сделать это возможно только использовав резидентную программу, которую необходимо скопировать в ОЗУ, а значит придётся немного подпортить либо область системных переменных, что недопустимо, либо экран, что хоть и не катастрофично, но тоже плохо. Поэтому этот вариант я и отбросил. Если пользователю не нужна многозадачность, он может включить в BIOS Setup доступ к КЕШ-памяти по Magic, и по этой кнопке будет сразу попадать в КЕШ не портя ни одного байта в ОЗУ.
По поддержке карты DivIDE:
Ради неё я делал отдельный слот ZX-Bus+3. Но мне дали спецификацию этой карты, из которой стало ясно, что она не только не заработала бы, а вообще препятствовала бы старту компьютера. Из документации на DivIDE, эта карта отслеживает переходы процессора на адреса #0000, #0008, #0038, #0066, #04C6, то DivIDE подключает своё ПЗУ вместо основного. Соответственно, DivIDE будет нормально работать в режиме "+3" с соответствующей прошивкой, но не даст компьютеру запуститься в стандартном режиме. Разумеется, блокировка одного IORQ на слот ZX-Bus+3 не помогла бы. Поэтому для решения задачи, в стандартном режиме нужно блокировать не только IORQ, а ещё M1.
Для разрешения конфликта DivIDE с картами General Sound, ZXM General Sound и NeoGS, которые используют те же порты #B3 и #BB, нужно блокировать IORQ. Как оказалось, на карте ZXM-General Sound для этого есть дополнительный порт #33, который через D4 позволяет заблокировать карту. Карта NeoGS тоже содержит порт #33, но блокировка карты не предусмотрена. Классический General Sound этого порта не имеет вообще.
В предыдущей ревизии платы была блокировка IORQ на шину NemoBus и ZX-Bus+3, но будет лучше, если на NemoBus не делать блокировки IORQ, которая даёт задержку этого сигнала около 6 нс и полностью изменить концепцию поддержки DivIDE. Я убрал слот ZX-Bus+3, заменив его на 4-й слот NemoBus, а вместо платки краевого слота +3 будет переходник, позволяющий подключать карту DivIDE в слот NemoBus. На этом переходнике будет реализован порт #33 для блокировки карты через D4, а так же формирование сигнала IORQCE, который будет блокировать порты компьютера, если будет идти обращение к DivIDE, когда работа этой карты разрешена через порт #33.
Когда карта DivIDE будет запрещена, для неё будут блокироваться сигнал M1, чтобы карта не перехватывала переходы по списку адресов и не подключала своё ПЗУ, сигнал IORQ и блокироваться генерация сигнала IORQCE.
Для того, чтобы карты General Sound и NeoGS не мешали работать карте DivIDE, последняя должна быть установлена через свой переходник в более приоритетный слот NemoBus. Если будет использоваться карта ZXM-General Sound, то с ней будет без разницы, какую карту в какой слот установить.
Кроме этого, карты DivIDE, как оказалось, выпускались с разным конструктивом слота, как вдоль платы, так и перпендикулярно, поэтому в предыдущей ревизии материнской платы ещё не каждую карту DivIDE удалось бы воткнуть физически. Сделать универсальный переходник под разные конструктивы DivIDE будет проще, чем сделать эту универсальность на материнской плате.
![]()
Последний раз редактировалось Northwood; 11.09.2020 в 16:38.
С уважением, Александр
На плате и сейчас уже нет места для чего-то нового, куда-там DivIDE ещё разводить. На верхней плате тоже места может не хватить. Кроме этого, DivIDE далеко не всем будет нужен. На принципиальной схеме DivIDE, карта содержит 3 микросхемы ПЛМ, ПЗУ ёмкостью 8 КБ и статическое ОЗУ ёмкостью 32 КБ, и 3 микросхемы логики (два буфера и ещё что-то, не разбирался, что).
С уважением, Александр
которые наверно цепляются в адресное пространство z80
а на плате уже есть своя рама и по моему даже кеш...
да и пзу-шку можно было заюзать спековскую....
ну это конечно придется перелапачивать этот дивиде...
вопрос так сильно ли нужен дивиде? чтоб грузить с него тапы?
- - - Добавлено - - -
и не по теме
а как щелкают страницы? (в классическом 32к варинате)
через 7ffd?
так понимаю
FB вкл
7B выкл
DivIDE он же DivMMC заюзан в Карабас нано , ПЗУ его сидит в 0 банке основного ПЗУ , ОЗУ юзается за пределами первого мегабайта , за подробностями к andykarpov
Отправлено с моего HRY-LX1T через Tapatalk
Скрытый текст
Специалист "УЦА" +SD-Vinxru +PS/2-Vinxru
PLM-X 128 + AY -эмуль на 8меге
Profi V3.2 - 768+Color-CP/M+ProfiExtender Solegstar
Profi V3.2 -1024 Sim30+Color-CP/M+ProfiExtender Solegstar
Pentagon 1024SL 1.42 - работает не совсем стабильно
ZXM-Phoenix V06
ZX-Evolition Rev C2 White FSP-MItX
Sprinter 2000 v.Zorel
Karabas128 + ZX-Taper by TrolSoft +DivSD +ScanDoubler
ZX-UNO v4.1 2М с 4 переключаемыми флешками
Поиск-1 - ждет ремонта
Корвет ПК8010 up to 8020
MisT 1.31
Galaksija + SMD
[свернуть]
Так и есть. Страница переключается через порт #7FFD D4, т.е. через бит, который переключает страницы ПЗУ Menu-128 / Basic-48. Так же сделано и в этом проекте.
Ну а включается либо по кнопке Magic (если в BIOS Setup включена соответствующая опция) либо программно чтением из порта #FB, выключается программно чтением из порта #7B.
В этой ревизии я так же немного доработал управление теневым ОЗУ. Т.к. его можно использовать для эмуляции основного ПЗУ и эмулировать можно хоть все 4 страницы сразу, поэтому было сделано так: КЕШ использует 0 и 2 страницы теневого ОЗУ. Эмуляция страниц ПЗУ TR-DOS (страница 1) и Basic-48 (страница 3) не влияет на доступность КЕШ. Если включена эмуляция ПЗУ Menu-128 (страница 2), то в качестве КЕШ становилось доступна только одна 0-я страница. А если включена эмуляция ПЗУ Gluk (страница 0), тогда КЕШ становился не доступным, даже если будет свободна страница 2 теневого ОЗУ.
Доработка устранила это ограничение: Если включена эмуляция ПЗУ Menu-128 (страница 2), то будет доступна одна 0-я страница КЕШ. А если включена эмуляция ПЗУ Gluk (страница 0), тогда будет доступна одна 2-я страница КЕШ. И только если будет включена эмуляция двух страниц ПЗУ Menu-128 и Gluk одновременно, тогда только КЕШ станет недоступным.
С уважением, Александр
NEO SPECTRUMAN(11.09.2020), Rusazar(12.09.2020)
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)