С любовью к вам, 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)