Soviet Union ZX Spectrum CommunityВоскресенье, 24.11.2024, 22:46
Вы вошли как Гость | Группа "Гости" | RSS
 [ · Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Pentagon by Northwood
Black_CatДата: Среда, 01.07.2020, 16:12 | Сообщение # 1
Координатор
Группа: Координаторы
Сообщений: 730
Статус: Offline
1. Сигналы DOS/, IODOS/ для NemoBus v.1.2



Цепи DOS/, DOS на выходе DD29 идущие на дешифрацию портов разорвать, и в разрыв врезать схему. Цепи, идущие на выборку ПЗУ оставить как есть.
Прикрепления: 8323490.png (30.3 Kb)


"Трудно найти чёрную кошку в тёмной комнате.. ...особенно, если её там нет", "Forever!".
"Я никогда не причиняю им зла. Я говорю им правду, и они думают, что это - зло."
Гарри Трумэн
 
NorthwoodДата: Среда, 19.08.2020, 14:19 | Сообщение # 41
80h
Группа: Пользователи
Сообщений: 131
Статус: Offline
Исправил в мультиплексорах с А13 на А14. 



Я хочу в своём проекте использовать свою схему, поэтому буду допиливать её, а не использовать полностью готовое твоё решение.
 
Black_CatДата: Среда, 19.08.2020, 14:51 | Сообщение # 42
Координатор
Группа: Координаторы
Сообщений: 730
Статус: Offline
Цитата Northwood ()
Я хочу в своём проекте использовать свою схему, поэтому буду допиливать её, а не использовать полностью готовое твоё решение.

Какая разница, лишь бы результат был оптимальным.

Добавлено (19.08.2020, 22:24)
---------------------------------------------
Прежде чем продолжать перекраивать схему давай немного отвлечёмся. Как ты думаешь, зачем Спектруму 4Мб ОЗУ? Я говорю об обычном Спектруме, а не о каких-то видеокартах расширения с тайлово-спрайтовыми ускорителями, с ОЗУ забитыми мегабайтами тайлов и спрайтов. Спектрумовской программе очень редко когда требуется более 128к, так зачем нужны аж 4Мб ОЗУ? В Спектруме в основном лишнее ОЗУ используется как электронный диск, и как правило для хранения образа дискеты. В 90х годах именно для хранения образа дискеты расширяли ОЗУ до 1Мб. А зачем сейчас остальные 3Мб? Для компьютера основной потребитель памяти - это ОС, которой в Спектруме нет, если не считать CP/M, которой при наличии диска достаточно 64к. Теоретически, можно предположить возможность создания некой ОС, использующей всю память. Но смысл создания такой ОС практически нулевой ввиду полного отсутствия под неё софта. Таким образом, фактически получается, что на сегодня для Спектрума больше 1Мб ОЗУ и даром не нужно. Так чем же оправдать увеличение ОЗУ до 4Мб? Единственным оправданием для такого количества ОЗУ может быть возможность одновременно держать в ОЗУ несколько образов программ, с возможностью переключения между ними. Вот такая возможность действительно имеет смысл, и может оправдать увеличение ОЗУ до 4Мб. Но что бы такая возможность стала реальностью, должна так же существовать аппаратная поддержка такой возможности. В чём заключается такая поддержка? Необходимо чтоб имелась аппаратная возможность:
1) прерывать программу по NMI, с соответствующим обработчиком в ПЗУ, сохраняющим состояние регистров процессора;
2) считывать состояние системных портов;
3) аппаратно ограничивать доступную программе область в ОЗУ;

При наличии подобного аппаратного обеспечения, пользователь, может без какой-либо ОС, практически мгновенно переключаться между таким количеством уже существующих спектрумовских программ, какое количество их образов поместится в ОЗУ компьютера.
Дык вот вопрос на засыпку - раз компьютер в стадии разработки, то может есть смысл предусмотреть всё необходимое для аппаратной поддержки такой потенциальной возможности? Ведь по большому счёту там и нужны-то небольшие изменения.


"Трудно найти чёрную кошку в тёмной комнате.. ...особенно, если её там нет", "Forever!".
"Я никогда не причиняю им зла. Я говорю им правду, и они думают, что это - зло."
Гарри Трумэн
 
NorthwoodДата: Среда, 19.08.2020, 23:41 | Сообщение # 43
80h
Группа: Пользователи
Сообщений: 131
Статус: Offline
Для начала расскажу, откуда у меня вообще с самого начала взялась идея расширить память до 4 МБ.

А возникла она у меня, когда ещё лет 20 назад я случайно купил два модуля SIMM 30 pin по 4 МБ фирмы Motorolla. Модули 3-чиповые. На одной из фидошных поинтовок, где наш фидошный босс был одновременно боссом и сети ZX-Net, я как-то рассказал, что хочу попробовать в свой Пентагон-128 поставить метр памяти (до этого он уже был расширен до 512 КБ с помощью 16 шт 565РУ7Г, и тут мне босс предложил поставить SIMM 30 pin, и тут слух о том, что мне нужен модуль SIMM 30 pin дошёл до одного поинта, который, который как раз продавал по частям свой старенький PC, и у него были именно 2 шт 4-метровых модуля. У меня от слова "4 метра" загорелись глаза и я с радостью купил оба модуля, и они у меня пылились в ящике очень долгое время, параллельно кто-то мне подарил 1-метровый SIMM, который пылился рядом с 4-метровыми модулями. Потом на плату случайно попало 220в от оторвавшегося сетевого кабеля, в результате получился бабах и погорело всё, включая дисковод Robotron. Через месяц, когда я отошёл от шока, с платы отпаял всю паутину МГТФ, состриг все микросхемы и начал собирать Пентагон с нуля. Но уже вместо РУшек сразу же поставил модуль SIMM 30 pin 1МБ, сразу же сделав минимальные доработки для того, чтобы просто получить рабочий компьютер. Далее глюканул блок питания, который вместо 5в выдал почти 8в, и Пентагон-128, расширенный до метра, снова умер. Умерли 2 проца Z84C0010PEC, присланных мне В.Г.Скутиным из Питера вместе с купленным у него GS, найти новые такие я не смог, поэтому GS отправился в ящик, умерла ПЗУ, его я заменил, но затем плата вообще перестала работать - сначала умер контроллер FDD, а затем и вовсе комп перестал работать. На тот момент было не реально ни достать 10-МГцовые процессоры, ни разобраться в своей же паутине МГТФ, вспоминая, как реализована схема всех доработок, поэтому ZX-Spectrum я забросил, а там дома начался ремонт, всё в побелке, дискеты нормально хранить было не где, они тоже пострадали, ремонт меня додавил морально и Пентагон вместе с кучей повреждённых дискет ушёл в мусорный бак, остались только модули SIMM, парочка ПЗУ 27C512 и GS без процессора.

О Спектруме я вспомнил в 2009 году, когда мне ночью приснилось, как я работаю за Спектрумом, как я что-то набираю в STS-мониторе. Проснулся я с дикой ностальгией, и тут на форуме как раз принимали заявки на платы Пентагон-1024 1.4 от KoE. Собрав комп, у меня снова появился спортивный интерес получить на нём целых 4 метра. Что с ними делать, на тот момент меня не сильно волновало, главное, эти 4 метра получить, а как их потом использовать, думал оставить на потом. Комп снова начал постепенно обрастать МГТФ, и в первую очередь мне нужно было убедиться в нормальной работоспособности всей памяти 4МБ, поэтому для максимально быстрого получения доступа ко всем 4МБ, я просто добавил 2 триггера порта #7FFD - бит 6 и 5, таким образом, получил комбинацию #1FFD биты 4, 7 + #7FFD биты 6,7,5. Дальше турбировал память и процессор, дальше сделал расширенные видеорежимы, подключил теневое ОЗУ и сделал BIOS. И тут я пожалел, что когда-то выбросил все старые дискеты, вместе с исходниками BIOS, поэтому его пришлось переписать полностью с нуля. Но МГТФа и бутербродов стало на столько много, что уже сейчас продолжать новые эксперименты уже опять стало не реально. Поэтому родилась идея разработать новую плату.

По поводу RAM-диска в ОЗУ: Периодически про него я вспоминал, но опять же, с нынешней старой платы с паутиной МГТФ я уже зашёл в тупик, поскольку копаться в этом МГТФе и вспоминать, где какая микросхема в 4-х этажных бутербродах и за что отвечает, стало крайне сложно. Но у меня такое представление:

а) Основному ПО всё-таки отдать 1 метр памяти. Это нужно для комфортного копирования дискет, если дисковод всего один, чтобы вся дискета копировалась в 1, максимум в 2 прохода. Благо, почти все boot-ы, оснащённые функционалом для копирования файлов, поддерживают 512...1024 КБ ОЗУ.
б) И по одному метру отдать на RAM-диски, которых можно сделать до 3-х штук.

В нынешней реализации менеджера памяти на том живом железе, который у меня собран сейчас, это почти не реально сделать, поскольку разные копировщики могут использовать разные стандарты расширения ОЗУ, а значит отформатированный RAM-диск умрёт при первом же копировании файлов. Реализация, сделанная KoE, когда в защищённом режиме для ПО отдаётся только 128 КБ ОЗУ, чтобы остальные 768 КБ отдать под RAM-диск, меня тоже не прельщает. А вот новый менеджер памяти позволит сделать так, чтобы под основное ПО отдать весь метр памяти, и сделать защищённый режим, когда остальные 3 метра ОЗУ будут доступны только из под TR-DOS.
Пожалуй, эту реализацию стоит сделать.

Но только нужно выбрать порт и его разряд, которым будет включаться защищённый режим. И наверно позже придётся сделать свои доработки прошивки ПЗУ TR-DOS, который будет этими метровыми RAM-дисками управлять, т.е. чтобы TR-DOS поддерживал все 4 МБ ОЗУ.

Добавлено (20.08.2020, 01:09)
---------------------------------------------
Посмотрел ещё раз схемы Scorpion ZS-256 и KAY-1024, распиновку порта #1FFD:

Scorpion ZS-256:

бит 0 - отключает ПЗУ, в CPU0 включает ОЗУ;
бит 1 - включение в ПЗУ страницы с теневым монитором (в Скорпионе другое расположение страниц ПЗУ);
бит 2 - не задействован;
бит 3 - формирование сигнала TxD для какого-то внешнего разъёма;
бит 4 - расширение памяти до 256 КБ;
бит 5 - строб принтера;
бит 6 - не задействован;
бит 7 - не задействован.

KAY-1024:

бит 0 - отключает ПЗУ, в CPU0 включает ОЗУ;
бит 1 - какой-то сигнал Q8/ на принтер - контакт 25 разъёма LPT;
бит 2 - сигнал SLCTIN принтера - контакт 17 разъёма LPT;
бит 3 - инвертирование A15 ПЗУ;
бит 4 - расширение ОЗУ до 256 КБ;
бит 5 - строб принтера;
бит 6 - какой-то сигнал Q6/ на принтер - контакт 23 разъёма LPT;
бит 7 - расширение ОЗУ до 1024 КБ.

Т.е. ни в Скорпионе, ни в Кае, не предусмотрен защищённый режим ОЗУ для поддержки RAM-диска.

В Пентагоне-1024 1.4 от KoE защищённый режим включает бит 1 порта #1FFD, т.е. это отсебятина КоЕ.

В новом же проекте Пентагона-4096, весь порт #1FFD уже расписан полностью, воткнуться уже некуда:

бит 0 - отключает ПЗУ, в CPU0 включает ОЗУ;
бит 1 - включение 0-й страницы ПЗУ;
бит 2 - переключение страницы ПЗУ для режима +3 (в стандартном режиме не используется);
бит 3 - инвертирование A15 ПЗУ;
бит 4 - расширение ОЗУ до 256 КБ;
бит 5 - расширение ОЗУ до 4 МБ;
бит 6 - расширение ОЗУ до 2 МБ;
бит 7 - расширение ОЗУ до 1024 КБ.

Добавлено (20.08.2020, 01:31)
---------------------------------------------
P.s. из описания порта #EFF7, в котором бит 2 отключает память > 128 КБ, могу предположить, что это нужно для поддержки RAM диска. Если это так, тогда я этим и воспользуюсь, только отключать буду память > 1 МБ.
В идеале неплохо было сделать так:

Если установлен модуль SIMM 4 МБ, то D2 #EFF7 запрещает память > 1 МБ. А если установлен модуль 1 МБ, тогда запрещает > 128 КБ. Джампер, определяющий объём модуля памяти, предусмотрен, им же можно будет  и определять объём ОЗУ, доступный в защищённом режиме для свободного доступа. Или вынести эту опцию в настройки BIOS.


Сообщение отредактировал Northwood - Четверг, 20.08.2020, 11:38
 
Black_CatДата: Четверг, 20.08.2020, 11:21 | Сообщение # 44
Координатор
Группа: Координаторы
Сообщений: 730
Статус: Offline
Цитата Northwood ()
P.s. из описания порта #EFF7, в котором бит 2 отключает память > 128 КБ, могу предположить, что это нужно для поддержки RAM диска.

Не стоит искать в аппаратном творчестве AloneCoder'а какие-то глубокие мысли, и вообще какие-то мысли :) . Все его аппаратные инновации были довольно бездумно почерпнуты им из FIDO, при том, что сам он тогда пребывал в столь юном возрасте, что даже не подозревал о существовании закона Ома, и того, что TTL выходы низзя замыкать на землю :) .

Цитата Northwood ()
В идеале неплохо было сделать так:

"Тому не нужно далеко искать чёрта, у кого чёрт - за плечами." Вечера на хуторе близ Диканьки :)

Насамделе все предпосылки для реализации механизма ограничения адресного пространства у тебя уже появились вместе с поддержкой NemoBus v.1.2 :) Объясню как это реализуется. Т.к. ты всё равно собираешься реализовывать DMA USC, и надеюсь, в предложенном мною варианте на краевой разъём, который ты ещё не прикрутил, но надеюсь таки прикрутишь :) . Дык вот, к DMA USC надо будет добавить два регистра доступных только в режиме ядра (у тебя это режим BIOS'а): регистр старших адресов размещения программы, и регистр маски старших адресов. Как это применяется объясню на примере. Допустим ты хочешь выделить под задачу третий из четырёх мегабайт всего ОЗУ. Для этого в регистре старшего адреса чтоб задать третий мегабайт ты выставляешь A20'=0, A21'=1, а в регистре маски выставляешь маскирование (единицы) для всех разрядов регистра адреса кроме A20', A21', тем самым ограничивая программе доступный объём ОЗУ. Маскированные разряды регистра адреса будут переведены в Z-состояние, и никак не повлияют на адресную шину старших разрядов ОЗУ NemoBus, а вот немаскированные пойдут на адресные линии A20', A21', и принудительно заблокируют программу в третьем мегабайте из четырёх. Соответственно, в других мегабайтах ОЗУ можно разместить другие программы, при том, что они никак не смогут выйти за пределы отведённого им ОЗУ, и вааще не будут знать о существовании памяти сверх выделенной им, т.к. не смогут изменить A20', A21', и соответственно, не смогут повредить в чужой памяти информацию. Вот, вкратце, принцип защиты памяти при реализации аппаратной многозадачности :)


"Трудно найти чёрную кошку в тёмной комнате.. ...особенно, если её там нет", "Forever!".
"Я никогда не причиняю им зла. Я говорю им правду, и они думают, что это - зло."
Гарри Трумэн
 
NorthwoodДата: Четверг, 20.08.2020, 11:59 | Сообщение # 45
80h
Группа: Пользователи
Сообщений: 131
Статус: Offline
С DMA USC всё понятно, он будет в виде внешнего устройства, поэтому эта доработка будет непосредственно на его плате. Оно может быть воткнуто в слот, а может отсутствовать.
Но вот по поводу RAM-диска, нужно где-то включать защищённый режим и продумать концепцию, как сделать так, чтобы были доступны и RAM-диски и DMA USC, и как сделать так, чтобы можно было гибко распределять, кому какие метры отдать.
 
Black_CatДата: Четверг, 20.08.2020, 13:26 | Сообщение # 46
Координатор
Группа: Координаторы
Сообщений: 730
Статус: Offline
Как я уже говорил, концепция модульности заложена в Спектрум изначально ещё его разработчиком Ричардом Альтвассером, и при развитии NemoBus я придерживался этой концепции. Концепция модульности предполагает возможность сделать себе такой компьютер, какой нужно, путём наращивания его возможностей с помощью дополнительных модулей подключаемых к шине NemoBus. В частности, мною предполагалось, что кому нужен минимальный компьютер, тот покупает голую мамку, а кому надо ещё DMA и аппаратная многозадачность, тот докупает плату системного расширения, подключаемую к краевому разъёму. Соответственно, если тебе такое системное расширение нужно, то ты прикручиваешь на свою мамку краевой разъём, и цепляешь на него плату системного расширения, а не стремишься впихнуть в свою плату все расширения, что только придуманы для Спектрума :) . Я понимаю, что спектрумовская концепция модульности ломает твой стереотип мышления, выразившийся в впихивании в мамку невпихиваемого, и цеплянию нестандартных дочек, вместо того, чтоб вынести это всё на платы расширения NemoBus :) . Никто же не запрещает тебе добавлять все эти устройства, просто оформи их в виде периферийных плат расширения, и выпусти вместе с твоей мамкой, в тех количествах, которые нужно (мож кому-то вааще нужен токо голый Пентагон с механической клавой :) ), ведь к NemoBus можно подключить в этажерку 100500 таких плат даже к одному единственному слоту, как я показал на рисунках выше :)

"Трудно найти чёрную кошку в тёмной комнате.. ...особенно, если её там нет", "Forever!".
"Я никогда не причиняю им зла. Я говорю им правду, и они думают, что это - зло."
Гарри Трумэн
 
NorthwoodДата: Четверг, 20.08.2020, 15:25 | Сообщение # 47
80h
Группа: Пользователи
Сообщений: 131
Статус: Offline
Цитата Black_Cat ()
Т.е. предлагаю добавить в схему так же мультиплексор на триггер D4 #DFFD = D0 #1FFD с блокировкой D5 #7FFD.

Сделал это. Но пытаюсь решить, как будет лучше поступить с блокировкой D5 #7FFD:
a) Чтобы отключить блокировку и разрешить расширение памяти через D5 #7FFD, нужно в BIOS-е это разрешить И включить D4=1 #DFFD либо D0=1 #1FFD. Если в BIOS-е отключить эту опцию, то через D4 #DFFD или D0 #1FFD это сделать будет нельзя;
б) Чтобы отключить блокировку и разрешить расширение памяти через D5 #7FFD, нужно включить это в BIOS-е ИЛИ включить D4=1 #DFFD либо D0=1 #1FFD. Если в BIOS-е включить эту опцию, то она будет включена всегда, независимо от D4 #DFFD или D0 #1FFD;
в) Вообще не делать опцию блокировки D5 #7FFD в BIOS-е, её можно включать и отключать только с помощью D4 #DFFD либо D0 #1FFD.

Добавлено (20.08.2020, 16:27)
---------------------------------------------
Последняя версия схемы, с D4 #DFFD и через него с отключаемой блокировкой D5 #7FFD:

Добавлено (20.08.2020, 16:58)
---------------------------------------------
Впрочем, я уже знаю ответ. Нужно делать вариант Б), иначе не будет работать демка Nedodemo без влезания в её загрузчик.

 
Black_CatДата: Четверг, 20.08.2020, 18:09 | Сообщение # 48
Координатор
Группа: Координаторы
Сообщений: 730
Статус: Offline
Цитата Northwood ()
Но пытаюсь решить, как будет лучше поступить с блокировкой D5 #7FFD

:) Так, как я сделал в своём менеджере :) . Обрати внимание, что там ДВА! триггера отвечают за значение D5 #7FFD :) - в этом вся фишка :) . Сигнал с триггера в составе ТМ9 порта #7FFD блокируется либо при отключении ПЗУ сигналом BL/, либо сигналом AllRAM/, когда для программ открывается доступ к A21'. Но сам A21' берётся совсем с другого триггера, доступного по D5 #1FFD и #7FFD, но запись в него возможна только либо в режиме AllRAM, либо в режиме ядра(BIOS).  Чтение этих регистров тож разное: с ТМ9 читается D5 #7FFD, а второй триггер читается токо как D5 #1FFD. Такое разделение нужно чтоб при сохранении значения регистров, можно было отделить спектрумовскую блокировку порта от значения адреса, т.е. блокировка читается из D5 #7FFD, а A21' из D5 #1FFD.
И что бы тебе было более понятно объясню логику режима ядра (Kernel(BIOS) mode). В режим ядра можно попасть токо двумя способами: либо по аппаратному сбросу, либо по специальной кнопке NMI.
При сбросе подключается специальное ПЗУ, и начинаются стандартные проверки памяти и наличия оборудования, а так же опрашивается клавиша клавиатуры, отвечающая за вход пользователя в настройки ядра. Если пользователь не успел нажать эту клавишу, то режим ядра прекращается, подключается спековское ПЗУ, и даётся RST0, а дальше уже либо в бейсик, либо в TR-DOS. При этом, по умолчанию, после сброса программе доступно токо 2Мб ОЗУ.

Если же юзер после сброса успел нажать кнопку входа в ядро, то ему открывается доступ к регистру маски адреса, где можно задать объём ОЗУ доступный программе, и регистру адреса, где задаётся положение программы в адресном пространстве компьютера. Возможно задать следующие доступные программе объёмы ОЗУ/значения маски: 8k/#FF, 16k/#FE, 48k/#FC, 128k/#F8, 256k/#F0, 512k/#E0, 1Mb/#C0, 2Mb/#00, 4Mb/#80. При сбросе автоматически выставляется маска #00, а значение старшего разряда регистра маски = сигналу AllRAM.

Так же, попасть в ядро можно при нажатии кнопки NMI во время исполнения программы (в режиме TR-DOS кнопка заблокирована). При этом происходят следующие действия: подключается ПЗУ ядра, и исполняется обработчик NMI, который сохраняет в области ОЗУ ядра значения регистров процессора и системных портов, включая регистры портов и маски, после чего пользователю предоставляется возможность задать объём ОЗУ и положение в памяти для следующей программы. После этого стандартно выходим из ядра в бейсик с RST0, стандартно загружаем новую программу, а дальше по кнопке NMI можем о5 выйти в ядро, и либо добавить ещё одну программу, либо переключиться с одной программы на другую. При этом перед возвратом в программу, восстанавливаются сохранённые в памяти ядра её значения портов и регистров процессора.

Режим ядра индицируется на шине сигналами DOS/=IODOS/=0.

P.S. И в режиме AllRAM твоя любимая дема прекрасно будет работать (если там конечно  обращение к #7FFD не через out(#fd),a :)), токо будет размазана ровным слоем по всем 4Мб :) , но для однозадачного режима это и без разницы :) .


"Трудно найти чёрную кошку в тёмной комнате.. ...особенно, если её там нет", "Forever!".
"Я никогда не причиняю им зла. Я говорю им правду, и они думают, что это - зло."
Гарри Трумэн
 
NorthwoodДата: Четверг, 20.08.2020, 19:27 | Сообщение # 49
80h
Группа: Пользователи
Сообщений: 131
Статус: Offline
Всё это описанное тобой реализовано на практике ? Если да, то как называется комп, можешь снять это на видео ?
Ну разбивать память на куски по 8 КБ, это уже извращение, хотя позволяет при этом запихнуть в ОЗУ очень много мелких программ :) Но здесь появляется проблема - программы, работающие в старших адресах ОЗУ, не смогут достучаться к экрану. И здесь кроме выставления старших разрядов ОЗУ и маски, нужно перенацеливать и два экрана,  на эту область.
По-моему, гораздо проще минимальный объём ОЗУ делать всё-таки 128 КБ, тогда и экраны перенацеливать проще. При этом в 4 МБ памяти уже поместятся 32 программы, чего будет хватать с головой.

Добавлено (20.08.2020, 19:42)
---------------------------------------------
И при переключении задач, не мешало бы глушить AY, иначе после одной программы, которая проигрывала музыку, придётся слушать зависший рёв, если другая программа не использует AY :)

Добавлено (20.08.2020, 20:49)
---------------------------------------------
Я сейчас в раздумьях, взвешиваю все за и против решений с многозадачностью и с RAM дисками.

Если делать многозадачность, то в моём случае, имхо, целесообразно её сделать в упрощённом виде - программам отдавать всегда фиксированный объём ОЗУ 1 МБ, тогда можно будет загружать до 4-х программ.
Это потребует выполнить биты 5 и 6 #1FFD на отдельных триггерах, которые будут доступны только в режиме BIOS, выходы этих триггеров через коммутатор нужно будет подать на мультиплексоры DD137 выв.10 (бит 6) и на DD124 выв.6 (бит 5), что перенацелит экраны на выбранный мегабайт. Указанный коммутатор будет пропускать эти два бита #1FFD (перенацеливать экраны) только в режиме "Спектрум", а в режиме BIOS экраны всегда будут привязаны только к 0-му мегабайту. Т.е. это потребует только 2 корпуса микросхем.

Если же делать поддержку RAM-дисков, то на них будут работать те программы, которые работают с TR-DOS только через стандартную точку входа #3D13. Все программы, в которых реализовано прямое программирование ВГ93, улетают в сад. А практической пользы от RAM-диска я для себя не вижу, особенно учитывая, что живую дискету нужно предварительно скопировать на RAM-диск.


Сообщение отредактировал Northwood - Четверг, 20.08.2020, 20:50
 
Black_CatДата: Четверг, 20.08.2020, 20:53 | Сообщение # 50
Координатор
Группа: Координаторы
Сообщений: 730
Статус: Offline
Цитата Northwood ()
Всё это описанное тобой реализовано на практике ?

Нет! :) Вам нипанятна логика работы? :)

Цитата Northwood ()
Но здесь появляется проблема - программы, работающие в старших адресах ОЗУ, не смогут достучаться к экрану. И здесь кроме выставления старших разрядов ОЗУ и маски, нужно перенацеливать и два экрана,  на эту область.

Да, ничего не поделаешь, бывают в жизни огорченья :) . Придётся впихивать регистр адреса и регистр маски в мамку. Возможно в упрощённом виде, на небольшое количество виртуальных машин. Хотя тут можно ещё подумать :)


"Трудно найти чёрную кошку в тёмной комнате.. ...особенно, если её там нет", "Forever!".
"Я никогда не причиняю им зла. Я говорю им правду, и они думают, что это - зло."
Гарри Трумэн
 
NorthwoodДата: Четверг, 20.08.2020, 20:55 | Сообщение # 51
80h
Группа: Пользователи
Сообщений: 131
Статус: Offline
Цитата Black_Cat ()
Нет! :) Вам нипанятна логика работы? :)
Логика работы мне полностью понятна, но было бы интересно увидеть её на практике.

Добавлено (20.08.2020, 21:13)
---------------------------------------------
Мне только не понятно, какую роль для попадания в ядро играют сигналы /IODOS и /DOS, Если ПЗУ BIOS включается по аппаратному сбросу или по нажатию на NMI ?

 
Black_CatДата: Четверг, 20.08.2020, 22:16 | Сообщение # 52
Координатор
Группа: Координаторы
Сообщений: 730
Статус: Offline
Цитата Northwood ()
было бы интересно увидеть её на практике.
На практике, в TR-DOS можешь увидеть код для сохранения регистров процессора по магику. Добавь сохранение портов, и получишь искомое в некотором приближении :)

Добавлено (20.08.2020, 22:40)
---------------------------------------------
Цитата Northwood ()
Мне только не понятно, какую роль для попадания в ядро играют сигналы /IODOS и /DOS, Если ПЗУ BIOS включается по аппаратному сбросу или по нажатию на NMI ?
Сигналы DOS/=IODOS/=0, это предупреждение на шине всем желающим подключить свою ПЗУ по сигналу сброс, или NMI (например те же divIDE/MMC), что они в пролёте, т.к. главный приоритет у ядра. :) Ну и устройства, работающие в режиме ядра могут быть и на мамке, и на слотах расширения, и им надо как-то дать знать, что включен режим ядра.

Добавлено (21.08.2020, 12:29)
---------------------------------------------
Northwood, если низзя давать схему в пдф с поиском, то мож хоть поблочно разделить? Типо как у меня - блок дешифраторов, блок менеджера памяти, и т.д., а то искать сигналы у тя на схеме это тот ещё квест.


"Трудно найти чёрную кошку в тёмной комнате.. ...особенно, если её там нет", "Forever!".
"Я никогда не причиняю им зла. Я говорю им правду, и они думают, что это - зло."
Гарри Трумэн
 
NorthwoodДата: Пятница, 21.08.2020, 14:14 | Сообщение # 53
80h
Группа: Пользователи
Сообщений: 131
Статус: Offline
Цитата Black_Cat ()
если низзя давать схему в пдф с поиском, то мож хоть поблочно разделить? Типо как у меня - блок дешифраторов, блок менеджера памяти, и т.д., а то искать сигналы у тя на схеме это тот ещё квест.

По запросу дам в любом формате, могу и в PDF.
 
Black_CatДата: Пятница, 21.08.2020, 19:32 | Сообщение # 54
Координатор
Группа: Координаторы
Сообщений: 730
Статус: Offline
Ну, было бы неплохо схему в пдф с поиском вместо картинки.

Добавлено (22.08.2020, 10:58)
---------------------------------------------

У тебя есть готовая таблица дешифрации всех твоих портов?

Цитата Northwood ()
Исправил в мультиплексорах с А13 на А14.

Неправильно. :) Как ты думаешь, почему я юзал чипселект, а не A14? :) Потому что с A14 не будет корректно работать при out(#fd),a . :)

Цитата Northwood ()
Впрочем, я уже знаю ответ. Нужно делать вариант Б), иначе не будет работать демка Nedodemo без влезания в её загрузчик.


О5 неправильно :) . Защёлка D5 #7FFD может быть активирована в любой конфигурации менеджера - в КАЕвской, Профийной, Пентовой 512, и обозначать она должна именно защёлку, а не A19'.
Не надо изобретать велосипеды, мой менеджер памяти - это единственно возможное, корректно работающее решение! Просто скопируй, у нас же тут не соревнование в писькометрии, есть ещё куча других задач, которые надо решать, и куча других ошибок, которые надо исправлять!


"Трудно найти чёрную кошку в тёмной комнате.. ...особенно, если её там нет", "Forever!".
"Я никогда не причиняю им зла. Я говорю им правду, и они думают, что это - зло."
Гарри Трумэн
 
NorthwoodДата: Суббота, 22.08.2020, 11:46 | Сообщение # 55
80h
Группа: Пользователи
Сообщений: 131
Статус: Offline
Цитата Black_Cat ()
Неправильно. :) Как ты думаешь, почему я юзал чипселект, а не A14? :) Потому что с A14 не будет корректно работать при out(#fd),a . :)

При OUT(#FD), A все порты расширения памяти выше 128 КБ блокируются, поэтому на мультиплексоры можно запросто подавать просто A14 и A15 - они вообще не участвуют в работе во время выполнения команды короткой адресации к портам.
Я вряд ли буду разбивать память меньше чем на 1МБ, это позволит упростить схему и оставить A14 и A15 на мультиплексорах.

Был немного занят, освободился, сделал экспорт в PDF, проверил, поиск по тексту работает.
Прикрепления: MainBoard-v8.0-.pdf (655.2 Kb)


Сообщение отредактировал Northwood - Суббота, 22.08.2020, 11:49
 
Black_CatДата: Суббота, 22.08.2020, 12:08 | Сообщение # 56
Координатор
Группа: Координаторы
Сообщений: 730
Статус: Offline
Цитата Northwood ()
При OUT(#FD), A вся память выше 128 КБ блокируется

Зачем? А как же программы под Пент-512? Ведь они могут юзать out(#fd),a :) . И решается эта проблема регистром маски адреса программ, выставляемым в ядре, который и ограничивает доступную программе память. Юзер, при создании виртуальной машины сам выбирает сколько памяти дать задаче. Для программ под классический Спек 128 он задаст 128к, и ессно проги под Пент512 там не смогут работать, а исключительно для таких Пентовых прог юзер задаст ограничение в 512к, и ессно, там не будут корректно работать проги под классический Спек128, юзающие out(#fd),a .


"Трудно найти чёрную кошку в тёмной комнате.. ...особенно, если её там нет", "Forever!".
"Я никогда не причиняю им зла. Я говорю им правду, и они думают, что это - зло."
Гарри Трумэн
 
NorthwoodДата: Суббота, 22.08.2020, 12:18 | Сообщение # 57
80h
Группа: Пользователи
Сообщений: 131
Статус: Offline
Как-то многовато мороки для пользователей, перед запуском каждой программы входить в специальное меню, подумать, сколько памяти нужно выделить проге и задать маску. Всё это оставим для тех, кто хочет юзать многозадачность. Если пользователь не собирается пользоваться многозадачностью, то его не нужно озадачивать какими-то масками, всё должно работать прозрачно без лишних телодвижений.
По поводу юзания 256 КБ через OUT (#FD), A (ведь нельзя через короткое обращение к #7FFD управлять 7-м битом), я подумаю, как сделать лучше. Кстати, а много имеется таких программ, которые через OUT (#FD),A управляют 6-м битом порта ?
 
Black_CatДата: Суббота, 22.08.2020, 12:18 | Сообщение # 58
Координатор
Группа: Координаторы
Сообщений: 730
Статус: Offline
Цитата Northwood ()
Я вряд ли буду разбивать память меньше чем на 1МБ, это позволит упростить схему и оставить A14 и A15 на мультиплексорах.

Увы, но для универсального менеджера памяти это невозможно, минимальное возможное ограничение должно быть хотя бы 128к.

Добавлено (22.08.2020, 12:35)
---------------------------------------------
Цитата Northwood ()
Как-то многовато мороки для пользователей, перед запуском каждой программы входить в специальное меню, подумать, сколько памяти нужно выделить проге и задать маску.

А что поделаешь? Не я был теми безграмотными ламерами, кто придумал использовать D5,D6 #7FFD в менеджере памяти :) . А теперь всем приходится расхлёбывать безграмотные аппаратные решения этих ламеров.

Цитата Northwood ()
Кстати, а много имеется таких программ, которые через OUT (#FD),A управляют 6-м битом порта ?

Сколько их не знаю, но out(#fd),a  в них не редкость. И хорошо ещё если юзается токо половина памяти, и A15 правильно выставляется.


"Трудно найти чёрную кошку в тёмной комнате.. ...особенно, если её там нет", "Forever!".
"Я никогда не причиняю им зла. Я говорю им правду, и они думают, что это - зло."
Гарри Трумэн
 
NorthwoodДата: Суббота, 22.08.2020, 12:40 | Сообщение # 59
80h
Группа: Пользователи
Сообщений: 131
Статус: Offline
Цитата Black_Cat ()
И хорошо ещё если при этом A15 правильно выставляется.

За это можно не переживать, потому что при D7=1 в аккумуляторе, A15 становится = 1, в этом случае порт #7FFD становится недоступным от слова совсем и прога просто не увидит расширенную память. С такой ошибкой прога просто не заработает у самого автора программы.
 
Black_CatДата: Суббота, 22.08.2020, 12:47 | Сообщение # 60
Координатор
Группа: Координаторы
Сообщений: 730
Статус: Offline
Цитата Northwood ()
С такой ошибкой прога просто не заработает у самого автора программы.

Я уже говорил об этом, что у некоторых авторов программ для Пента512 стоял тумблер, отключавший старшие адреса в дешифраторе #7FFD :) . К счастью, таких программ не так много, и поддерживать такое решение не нужно и вредно, т.к. out(#fd),a юзался не токо с менеджером памяти, но и вполне законно с AY при записи в #BFFD, именно поэтому в моём дешифраторе блокирование A14 с помощью ловушки разрешено токо при A15=0.


"Трудно найти чёрную кошку в тёмной комнате.. ...особенно, если её там нет", "Forever!".
"Я никогда не причиняю им зла. Я говорю им правду, и они думают, что это - зло."
Гарри Трумэн
 
Поиск:

Copyright MyCorp © 2006Сайт управляется системой uCoz