Pentagon by Northwood
|
|
Black_Cat | Дата: Среда, 01.07.2020, 16:12 | Сообщение # 1 |
Координатор
Группа: Координаторы
Сообщений: 730
Статус: Offline
| 1. Сигналы DOS/, IODOS/ для NemoBus v.1.2
Цепи DOS/, DOS на выходе DD29 идущие на дешифрацию портов разорвать, и в разрыв врезать схему. Цепи, идущие на выборку ПЗУ оставить как есть.
"Трудно найти чёрную кошку в тёмной комнате.. ...особенно, если её там нет", "Forever!". "Я никогда не причиняю им зла. Я говорю им правду, и они думают, что это - зло." Гарри Трумэн
|
|
| |
Northwood | Дата: Суббота, 29.08.2020, 01:00 | Сообщение # 101 |
80h
Группа: Пользователи
Сообщений: 131
Статус: Offline
| Цитата Black_Cat ( ) Ну получается всё равно корпус на адрес, и корпус на маску, и тут уже всё равно какой этот корпус - ТМ2 или ИР35, в любом случае корпуса два! И ещё два корпуса на коммутацию экранов - 5 бит = 5 логических элементов. Итого 4 корпуса, что является непозволительной роскошью на переполненной плате.
А если минимальный размер ОЗУ для задачи уменьшить до 256 КБ, то можно будет обойтись всего 1 корпусом ИР35 - регистр адреса и маски по 4 бита на то и другое. И один корпус на коммутацию экранов. Итого всего 2 корпуса. В этом случае нужно вводить дополнительный сигнал - ограничение в 128КБ, который можно завести на один из старых портов BIOS.
Сообщение отредактировал Northwood - Суббота, 29.08.2020, 01:01 |
|
| |
Black_Cat | Дата: Суббота, 29.08.2020, 01:34 | Сообщение # 102 |
Координатор
Группа: Координаторы
Сообщений: 730
Статус: Offline
| Это всё частности, потеряв голову, о шапке не жалеют. :) Будет где разместить нужные микрухи - вся эта экономия на спичках просто будет не нужна :) Добавлено (29.08.2020, 13:41) --------------------------------------------- Такой вот нескромный вопрос, а ИР38 и АП5 ты достать можешь?
"Трудно найти чёрную кошку в тёмной комнате.. ...особенно, если её там нет", "Forever!". "Я никогда не причиняю им зла. Я говорю им правду, и они думают, что это - зло." Гарри Трумэн
|
|
| |
Northwood | Дата: Суббота, 29.08.2020, 14:16 | Сообщение # 103 |
80h
Группа: Пользователи
Сообщений: 131
Статус: Offline
| Цитата Black_Cat ( ) Такой вот нескромный вопрос, а ИР38 и АП5 ты достать можешь? АП5 и АП6 в зарубежном аналоге серии 74F достал без проблем на AliExpress и eBay. Не ИР38, а ИР35, ещё не искал.
|
|
| |
Black_Cat | Дата: Суббота, 29.08.2020, 14:27 | Сообщение # 104 |
Координатор
Группа: Координаторы
Сообщений: 730
Статус: Offline
| Не, именно ИР38. Интеграловские микрухи у вас в доступе?
"Трудно найти чёрную кошку в тёмной комнате.. ...особенно, если её там нет", "Forever!". "Я никогда не причиняю им зла. Я говорю им правду, и они думают, что это - зло." Гарри Трумэн
|
|
| |
Northwood | Дата: Воскресенье, 30.08.2020, 09:33 | Сообщение # 105 |
80h
Группа: Пользователи
Сообщений: 131
Статус: Offline
| У нас в Днепре один из самых худших радиорынков в стране, хотя когда-то можно было купить всё. А из микросхем мелкой логики, у нас продают остатки, но кое что можно найти в интернет магазинах. Жаль, я потерял контакты продавца в Харькове, я 4 года назад был на том радиорынке, который был шикарный в то время, и у того продавца был большой ассортимент микросхем 1533 и 1531 серии, по дешёвым ценам.
Поэтому конкретно по ИР38 сейчас не скажу, я давно не был на радиорынке и пока не знаю, когда снова туда попаду. У нас он распался на несколько частей в разных частях города.Добавлено (30.08.2020, 10:53) --------------------------------------------- Кстати, для полноценной реализации многозадачности на материнке, совсем не обязательно ставить триггер адреса расположения задачи, достаточно ограничиться только триггером маски. Гораздо выгодней сделать так: в режиме BIOS выставляем нужный адрес, используя порты менеджера памяти - #7FFD и #1FFD, а при выходе из BIOS, маской блокируем изменения нужных разрядов триггеров менеджера памяти.
|
|
| |
Northwood | Дата: Воскресенье, 30.08.2020, 21:00 | Сообщение # 106 |
80h
Группа: Пользователи
Сообщений: 131
Статус: Offline
| Вот что получилось:
На схеме полная реализация многозадачности, т.е. память можно выделять размером 128 КБ, 256 КБ, 512 КБ, 1 МБ, 2 МБ и 4 МБ. Т.е. у нас 5-битная маска, сигналы маски - RMS17, RMS18, RMS19, RMS20 и RMS21. Сигнал RMS21 по совместительству выполняет функции "ALL_RAM", т.е. заодно отключает блокировку D5 #7FFD и разрешает этот бит как расширение памяти FD_A19.
Обрати внимание, что не смотря на то, что сигналы маски на схеме не обозначены как инверсные, но они инверсные, т.к. не хочу ради этого ставить ещё один корпус микросхемы ЛН1. Я и так не уверен, что всё это теперь поместится на плату. Инвертирование маски буду делать программно. Т.е. пользователю маска будет представлена на экране, как 0 = запрет расширения ОЗУ, а 1 = разрешение расширения. На схеме всё в точности до наоборот = RMSx = 0 разрешает расширение ОЗУ.
Как я говорил выше, я решил не ставить дополнительный порт как адрес расположения задачи в ОЗУ, а использовал существующий менеджер памяти:
Если сигнал маски RMSx = 0: а) соответствующий бит порта расширения будет доступен на запись; б) сигнал A14&A15 будет проходить на соответствующий элемент ЛИ1, т.е. в адресах < #C000 соответствующий бит расширения ОЗУ будет = 0, а в адресах >=#C000 будет равен значению порта; в) на соответствующий вход мультиплексора видеоконтроллера SCR_Ax (17...21) будет подан 0.
Если сигнал маски RMSx = 1: а) соответствующий бит порта расширения будет заблокирован на запись, но его значение будет определять бит адреса расположения задачи в ОЗУ; б) сигнал A14&A15 будет заблокирован на соответствующем элементе ЛИ1, т.е. во всём адресном пространстве с #0000 по #FFFF, соответствующий бит расширения ОЗУ будет равен значению порта; в) на соответствующий вход мультиплексора видеоконтроллера SCR_Ax (17...21) будет проходить этот же бит порта расширения, переключая экраны на соответствующую область ОЗУ.
Обеспечивать неразрывность единиц маски буду программно. Обеспечение объёма ОЗУ по-умолчанию в 2МБ или меньше, это я буду делать программно.
Дополнительный корпус микросхемы под маску с целью экономии я выделять не стал, а использовал уже имеющийся порт BIOS #FC37. Все описанные решения являются компромиссом исходя из лимита имеющегося пространства на плате.
Добавлено (31.08.2020, 10:39) --------------------------------------------- Осталось решить две проблемы: 1) переключение между загруженными задачами, 2) предоставление пользователю выбора, куда надо попасть по кнопке NMI - в Кеш или в менеджер задач в BIOS.
Проблема 1) Само по себе попадание в ПЗУ BIOS сделать будет легко - достаточно при нажатии на NMI сбрасывать порт #FF37. Но вернуться в прерванную задачу, не используя ОЗУ, будет невозможно. Нельзя, находясь в одном ПЗУ, взять и переключить на другое ПЗУ - код тут же поменяется и всё рухнет с непредсказуемым результатом. Всё равно что, стоя на стуле, выбить себе стул из под ног. Поэтому нужно перейти в ОЗУ и делать переключения ПЗУ оттуда, а значит в ОЗУ нужно скопировать небольшую резидентную программу. Для того, чтобы не уничтожить никаких системных переменных и не испортить код задачи, поместить его лучше в область начала экрана, лучше немного подпортить экран без фатальных последствий. Точно так же сейчас у меня на реальном Спектруме всегда происходит переход из BIOS в обычный режим - в адреса с #4000 копирую маленький резидент, а он уже включает нужное ПЗУ и выполняет RST0 либо JP #3D2F.
Проблема 2) Как обеспечить пользователям выбор, куда попадать по кнопке NMI - в КЕШ для всяких там Cash Remember и прочего, или в BIOS для управления задачами ?
Вариант-1 - горячая клавиша в момент нажатия NMI без использования резидентной программы в ОЗУ не получится: Если никакую клавишу не удерживаем, то попадаем в КЕШ, а если удерживаем клавишу, то в диспетчер задач в BIOS: После нажатия NMI необходимо однозначно включить ПЗУ BIOS и попасть именно туда, потому что только там можно сделать проверку нажатой горячей клавиши, это будет сделано аппаратно, и мы окажемся в адресе #0066. Допустим, если пользователю нужно в КЕШ, то нужно отключить ПЗУ BIOS и таким образом включится КЕШ. Но не получится потому, что при опросе клавиатуры и переключения ПЗУ мы потеряем значения регистров процессора AF и BC. Если предварительно регистры сохранить в стеке, то потом их нужно восстановить из стека, а только потом переключить ПЗУ, всё-равно потеряв значения регистров. Если попытаться сделать наоборот - сначала отключить ПЗУ BIOS, тем самым включив КЕШ, то потом мы не восстановим регистры - мы тут же окажемся в КЕШе, где не будет необходимого кода. Причём, не будет проблемой обеспечить переход в КЕШ именно на адрес #0066 - для этого в ПЗУ BIOS достаточно будет лишь в адресе #0066 выполнить JR на более ранние адреса так, чтобы код заканчивался ДО адреса #0066. Но из-за проблем с невозможностью сохранить и восстановить значения регистров процессора, этот вариант отпадает.
Вариант-2 - горячая клавиша в момент нажатия NMI с использованием резидентной программы в ОЗУ: Если никакую клавишу не удерживаем, то попадаем в КЕШ, а если удерживаем клавишу, то в диспетчер задач в BIOS, реализация: После нажатия NMI необходимо однозначно аппаратно включить ПЗУ BIOS и попасть именно туда, потому что только там можно сделать проверку нажатой горячей клавиши, и мы окажемся в адресе #0066. Сразу сохраняем в стеке регистры AF и проверяем нажатие горячей клавиши. Допустим, пользователю нужно в КЕШ, то нужно затем сохранить в стеке регистры HL, DE, BC, скопировать в экранную область резидентную программу, перейти в неё. В ней нужно отключить ПЗУ BIOS и включить КЕШ, затем восстановить регистры BC, DE, HL и AF и перейти на адрес #0066. Да, немного подпортится экран, но пользователю не нужно будет через BIOS-Setup выбирать, чем ему пользоваться - прогой Cash Remember или диспетчером задач в BIOS-е, а сможет делать выбор на лету с помощью горячей клавиши. Но с другой стороны, программа Cash Remember будет привязана к одному блоку памяти (к одной нашей задаче), поэтому остаётся вопрос, а есть ли в этом смысл ? Ведь если пользователь в одной задачей начал пользоваться прогой Cash Remember, а потом переключится на другую задачу, то после этого попытка снова воспользоваться Cash Remember приведёт к падению оного.
Вариант-3 - опция в BIOS, которую пользователь должен будет выбирать заранее: куда попадать по NMI - в КЕШ или в диспетчер задач, тогда переключать или не переключать ПЗУ BIOS будет зависеть от этой опции и пользователь не сможет в режиме многозадачности пользоваться такими программами, как Cash Remember. Но этот вариант хотя бы будет работать. Т.е. пользователю придётся выбирать: или запуск нескольких задач, или использование Cash Remeber.
Добавлено (31.08.2020, 11:42) --------------------------------------------- Перезалил схему в этом сообщении. В ней маленькие доработки с портами BIOS.
Сообщение отредактировал Northwood - Вторник, 01.09.2020, 13:34 |
|
| |
Northwood | Дата: Вторник, 01.09.2020, 15:44 | Сообщение # 107 |
80h
Группа: Пользователи
Сообщений: 131
Статус: Offline
| Сделал включение ПЗУ по кнопке NMI:
1. Для этого предварительно проинвертировал сигнал RESGLK с порта BIOS #FF37, чтобы избежать сброса триггера "Gluk" при нажатии на кнопку "Magic". В прошивке BIOS всё что нужно будет изменить, это добавить при старте с #0000 команду сброса триггера Gluk. Иначе потом из резидента в ОЗУ будет намного сложнее вернуться в нужное ПЗУ (нужно будет сначала из ОЗУ перейти в ПЗУ Gluk, а оттуда обратно в ОЗУ, поэтому инвертирование сигнала RESGLK избавляет от этого геморроя).
2. Порт #FF37 сбрасывается по нажатию на "Magic" только в том случае, если в настройках BIOS-Setup отключена КЕШ-память. Т.е. через BIOS-Setup пользователь сможет выбирать, с чем ему работать по кнопке "Magic" - с КЕШем или с диспетчером задач.Добавлено (01.09.2020, 22:43) --------------------------------------------- Все микросхемы удалось разместить на плате. Посмотрим, получится ли разводка платы. Но ещё требуется оптимизация - может где поменять местами логические элементы для сокращения длины соединений.
Сообщение отредактировал Northwood - Вторник, 01.09.2020, 16:08 |
|
| |
Black_Cat | Дата: Среда, 02.09.2020, 02:31 | Сообщение # 108 |
Координатор
Группа: Координаторы
Сообщений: 730
Статус: Offline
| Цитата Northwood ( ) Осталось решить две проблемы: 1) переключение между загруженными задачами, 2) предоставление пользователю выбора, куда надо попасть по кнопке NMI - в Кеш или в менеджер задач в BIOS. Решается просто: есть кнопка, или комбинация кнопок на клаве для вызова ядра. При нажатии только этой кнопки помимо NMI на шине выставляется режим ядра DOS/=IODOS/=0. Все остальные левые прибамбасы, что ты понапихал генерят токо NMI, и в ядро не попадают никаким образом.
Цитата Northwood ( ) Все микросхемы удалось разместить на плате. Посмотрим, получится ли разводка платы. Но ещё требуется оптимизация - может где поменять местами логические элементы для сокращения длины соединений. Не спеши, я пожалуй внесу разлад в твоё твочество, подкинув своё схемотехническое видение, выгодно отличающееся от твоего и по быстродействию, и по экономичности :)
"Трудно найти чёрную кошку в тёмной комнате.. ...особенно, если её там нет", "Forever!". "Я никогда не причиняю им зла. Я говорю им правду, и они думают, что это - зло." Гарри Трумэн
|
|
| |
Northwood | Дата: Среда, 02.09.2020, 08:18 | Сообщение # 109 |
80h
Группа: Пользователи
Сообщений: 131
Статус: Offline
| Цитата Black_Cat ( ) Решается просто: есть кнопка, или комбинация кнопок на клаве для вызова ядра.
Ты видимо не вник в суть проблемы, которую я описал. Ты не понимаешь, что ты не сможешь просто так взять и переключить ПЗУ BIOS на КЕШ, выполняя код в ПЗУ BIOS ? Сделать это сможет только резидент, находящийся в ОЗУ в адресах >=#4000. Т.е. при таком подходе придётся немного портить экран либо область системных переменных, выбор экрана очевиден. В моём варианте портить экран не придётся, т.к. не нужно опрашивать клавиатуру, а значит включить ПЗУ BIOS, когда пользователю нужно в КЕШ, не нужно. А как иначе ты сделаешь опрос комбинации кнопок на клавиатуре ?
И остаётся резонным вопрос: а зачем вообще во время нажатия кнопки NMI давать возможность выбора КЕШ или диспетчер задач ? Для чего пользователю может понадобится выбрать КЕШ ? Для того, чтобы прервать задачу, покопаться в ней STS-монитором, что-то изменить в коде и продолжить выполнение. Но STS-монитор должен быть предварительно загружен в основное ОЗУ с адреса #DB00, а в КЕШе могут быть сохранены разные переменные, связанные именно с этой задачей. Поэтому если пользователь переключится на другую задачу, эти сохранённые переменные в КЕШе будут неактуальны, результат будет непредсказуем. Эта ситуация усугубляется с программой Cash Remember, которая использует 512 КБ ОЗУ для своих целей. Переключение задачи и потом ошибочный выход в КЕШ убьёт Cash Remeber и саму задачу. Таким образом, использование КЕШа в режиме многозадачности становится не применимым, и решение определять, куда выходить по NMI, в КЕШ или в диспетчер задач, только добавляет вероятности убить систему из-за ошибочных действий пользователя.
Цитата Black_Cat ( ) При нажатии только этой кнопки помимо NMI на шине выставляется режим ядра DOS/=IODOS/=0. Все остальные левые прибамбасы, что ты понапихал генерят токо NMI, и в ядро не попадают никаким образом.
У меня нет никаких левых прибамбасов. Если ты с чем-то не разобрался, не означает, что они левые.
Добавлено (02.09.2020, 08:52) ---------------------------------------------
Цитата Black_Cat ( ) При нажатии только этой кнопки помимо NMI на шине выставляется режим ядра DOS/=IODOS/=0
Судя из твоей схемы "Сигналы DOS/, IODOS/ для NemoBus v.1.2", которую ты сам привёл в шапке этой темы, этого сделать из материнки невозможно и не нужно по определению. Невозможно, потому что когда активируется сигнал DOS/ и он становится = 0, его не инверсная версия DOS будет = 1. Он у тебя подаётся на выв.12 элемента ИЛИ DD63:4. Соответственно на входе ~OE элемента DD50:3 будет запрещающий уровень 1, а значит сигнал *IODOS/ на NemoBus тоже будет = 1, независимо от сигнала IODOS/ на выходе порта #EFF7 D7. Т.е. выдавать 1 в D7 #EFF7 будет бессмысленно, т.к. это не повлияет на сигналы на шине NemoBus. Да и ненужно это, потому что комбинация из двух активных сигналов на шине DOS/ = IODOS/ = 0 нужна для того, чтобы одна карта расширения сообщила всем остальным картам расширения, что она уже заняла шину и чтобы остальные карты не пытались занимать шину. У нас же реализация многозадачности выполнена на материнской плате, а не на карте, а материнка не может и не должна по своей инициативе запрещать картам расширения занимать шину.
Единственный минус данного решения в том, что в режиме многозадачности карта расширения может занять абсолютно любой адрес памяти во всех 4 МБ и ей будет плевать на многозадачность. Но как сделать так, чтобы материнка указала карте расширения, в какой области ОЗУ ей работать, не ясно. Если сделать так, чтобы материнка выставляла этот адрес на шине минуя резисторы, тогда придётся запрещать картам расширения выставлять свой адрес, потому что мы не можем запретить картам расширения доступ к отдельным адресным битам, и этот режим вообще не предусмотрен по причине невозможности выставления по инициативе материнки комбинации сигналов DOS/=IODOS/=0. Не всё хорошо в датском королевстве :)
Сообщение отредактировал Northwood - Среда, 02.09.2020, 09:41 |
|
| |
Black_Cat | Дата: Среда, 02.09.2020, 10:25 | Сообщение # 110 |
Координатор
Группа: Координаторы
Сообщений: 730
Статус: Offline
| Цитата Northwood ( ) У меня нет никаких левых прибамбасов. "Левые" - значит не нужные для работы ядра, генерящие сторонние NMI, которые не воспринимаются и не обрабатываются как вызовы ядра.
Цитата Northwood ( ) Судя из твоей схемы "Сигналы DOS/, IODOS/ для NemoBus v.1.2", которую ты сам привёл в шапке этой темы, этого сделать из материнки невозможно и не нужно по определению. Мы просто до этой реализации не дошли, предполагается доп триггер, фиксирующий нажатие кнопки вызова ядра, и приводящий в действие индикацию режима ядра на шине. Не спеши, всему будет дано объяснение и найдено адекватное решение :)
"Трудно найти чёрную кошку в тёмной комнате.. ...особенно, если её там нет", "Forever!". "Я никогда не причиняю им зла. Я говорю им правду, и они думают, что это - зло." Гарри Трумэн
|
|
| |
Northwood | Дата: Среда, 02.09.2020, 10:28 | Сообщение # 111 |
80h
Группа: Пользователи
Сообщений: 131
Статус: Offline
| Но на плату больше ни одной новой микросхемы не взелет. Свободное пространство осталось только слева от слотов, но оттуда тянуть дорожки может оказаться сильно затратно.
Добавлено (02.09.2020, 10:31) --------------------------------------------- P.s. и остаётся не ясным вопрос, а зачем вообще выставлять на шине эти два сигнала при использовании многозадачности ? И в какой момент ты хочешь выставлять их и в какой момент снимать ?Добавлено (02.09.2020, 10:34) --------------------------------------------- P.p.s. предполагаю, что устанавливать эти два сигнала ты хочешь в момент нажатия на NMI и снимать по возвращению в задачу ?
Сообщение отредактировал Northwood - Среда, 02.09.2020, 10:32 |
|
| |
Black_Cat | Дата: Среда, 02.09.2020, 11:18 | Сообщение # 112 |
Координатор
Группа: Координаторы
Сообщений: 730
Статус: Offline
| Цитата Northwood ( ) P.p.s. предполагаю, что устанавливать эти два сигнала ты хочешь в момент нажатия на NMI и снимать по возвращению в задачу ? Да, эти сигналы индицируют режим ядра, и именно, и только этот режим открывает доступ к портам ядра, а не какие-то разряды в твоих регистрах #xx37. Напомню, что в ядро (и твой сетап тоже, как его часть) можно войти токо двумя способами - аппаратным сбросом, и специальной кнопкой вызова ядра. Никакие левые приблуды в ядро влезть не могут. При сбросе, твоё ПЗУ ядра, проводит диагностику, и если юзеру не надо зайти в сетап, то по завершении диагностики режим ядра завершается установкой конфигурации по умолчанию - комп с 2Мб ОЗУ. Если же, например как и в PC, по кнопке F8 или Del во время диагностики, юзер входит в сетап, то он может задать собственную конфигурацию оборудования и АВМ.
Добавлено (02.09.2020, 11:21) --------------------------------------------- Объясни логику использования сигналов MODE_3+ и BLK_BUSN.
"Трудно найти чёрную кошку в тёмной комнате.. ...особенно, если её там нет", "Forever!". "Я никогда не причиняю им зла. Я говорю им правду, и они думают, что это - зло." Гарри Трумэн
|
|
| |
Northwood | Дата: Среда, 02.09.2020, 12:11 | Сообщение # 113 |
80h
Группа: Пользователи
Сообщений: 131
Статус: Offline
| В моём случае 3 порта из 4х должны оставаться открытыми:
#FF37 - через него можно попадать в ПЗУ BIOS и использовать готовые процедуры для работы с HDD через точки входа RST #18, RST #20 и RST #28. Более того, есть замечательная версия ПЗУ TR-DOS 5.30, автор которой ZET-9, которое позволяет к любой букве дисковода A, B, C или D привязывать образ дискеты на HDD, но для этого требуется модифицированная базовая версия ПЗУ BASIC-48, в которой он разместил процедуры HDD в ущерб совместимости с ПЗУ Menu-128 с BASIC-128. Проблема связана с тем что в ПЗУ BASIC-48, в которой реализована поддержка 128-го режима, недостаточно места для процедур HDD, необходимых для работы TR-DOS 5.30.
У меня есть готовое и рабочее решение этой проблемы: Я все процедуры HDD перенёс из модифицированной ПЗУ BASIC-48 в свою ПЗУ BIOS, и модифицировал ПЗУ TR-DOS 5.30 до версии 5.31, которое для процедур HDD обращается к BIOS-у. Соответственно, ПЗУ BASIC-48 можно шить любой версии, например, оригинальную с поддержкой Menu-128, что позволило вернуть назад стандартное меню-128 со 128-м бейсиком. А заодно я написал в ПЗУ BIOS свои подпрограммы инициализации HDD, чтения о HDD служебной информации, чтения и загрузки необходимого количества секторов HDD в заданный пользователем адрес ОЗУ через RST #18, #20 и #28. А значит, возможность включения ПЗУ BIOS из стандартного режима, должна оставаться всегда.
#FE37 - порт дополнительных опций видеорежимов. Прежде всего позволяет включать или выключать цветной режим в разрешении 512x192 пикселей, а так же включать или выключать режим FlashColor и аппаратный авто-GigaScreen. Можно в загрузчике того же Мелона, к примеру, добавить отключение цвета в режиме 512x192, поэтому этот порт тоже должен оставаться открытым.
#FD37 - используя этот порт, можно включать и отключать режим загрузки прошивок ПЗУ в любые страницы теневого ОЗУ для эмуляции ПЗУ, в этом режиме теневое ОЗУ проецируется в адреса #C000 в режиме чтения и записи, что позволяет пользователю легко написать самому процедуру загрузки прошивок ПЗУ в теневое ОЗУ и вызывать её из любого места. Готовый рабочий пример у меня тоже есть. Поэтому этот порт тоже нужен открытым.
Про блокировку шин я тебе уже рассказывал. Если включаем режим "+3", то шину NemoBus блокируем для избежания конфликтов карты DivIDE с картами General Sound или NeoGS. Или не блокируем шину, если так хочет пользователь в BIOS Setup. Аналогично в стандартном режиме блокируем шину "ZX-Bus+3" для избежания конфликта карты General Sound или NeoGS с картой DivIDE. Или не блокируем, если так хочет пользователь в BIOS Setup.
Сообщение отредактировал Northwood - Среда, 02.09.2020, 12:27 |
|
| |
Black_Cat | Дата: Среда, 02.09.2020, 14:51 | Сообщение # 114 |
Координатор
Группа: Координаторы
Сообщений: 730
Статус: Offline
| Наобходимо разделить функционал ядра, к которому относится и SETUP, от функционала BIOS, Глюка или TR-DOS, процедуры которых могут использовать программы. Ядро - это отдельная страница ПЗУ.
Цитата Northwood ( ) Про блокировку шин я тебе уже рассказывал. Если включаем режим "+3", то шину NemoBus блокируем для избежания конфликтов карты DivIDE с картами General Sound или NeoGS. Или не блокируем шину, если так хочет пользователь в BIOS Setup.Аналогично в стандартном режиме блокируем шину "ZX-Bus+3" для избежания конфликта карты General Sound или NeoGS с картой DivIDE. Или не блокируем, если так хочет пользователь в BIOS Setup. Это делается проще, и для этого не нужен никакой левый слот +3, который надо либо совсем удалить и на его месте доразвести микрух, либо переделать в четвёртый слот NemoBus (100% нахрен не нужный, если есть уже три). Делаем переходник с противоположных концов которого краевые разъёмы, с одной стороны для NemoBus, с другой для ZXBus для подключения divIDE. Полюбому этот переходник придётся делать, дык почему по ходу не добавить на него несколько микрух. На этой плате размещаем дешифратор порта #33, разряд D4=0 которого используем для блокировки divIDE, а так же генератор IORQGE адресов портов divIDE, которого у западников нет. Дык вот, при D4=0 блокируется прохождение IORQGE divIDE на NemoBus, IORQ/ на divIDE, а так же адресная линия A15, идущая на divIDE устанавливается принудительно в единицу. Достаточно в сетапе записать D4=1 #33, чтоб разблокировать divIDE. А т.к. порт #33 доступен всегда, то разблокировать divIDE можно хоть из бейсика, но при аппаратном сбросе он о5 заблокируется, поэтому после разблокировки из бейсика надо использовать RANDOMIZE USR0 для его инициализации. При этом divIDE надо ставить в слот с более высоким приоритетом, чем GS.
"Трудно найти чёрную кошку в тёмной комнате.. ...особенно, если её там нет", "Forever!". "Я никогда не причиняю им зла. Я говорю им правду, и они думают, что это - зло." Гарри Трумэн
|
|
| |
Northwood | Дата: Четверг, 03.09.2020, 08:32 | Сообщение # 115 |
80h
Группа: Пользователи
Сообщений: 131
Статус: Offline
| С чем связан выбор порта именно #33 и его разряда именно D4 ? Не нашёл в описании портов этот как стандартный, но выбор конкретного бита именно D4 намекает на какойто существующий стандарт.
|
|
| |
Black_Cat | Дата: Четверг, 03.09.2020, 09:20 | Сообщение # 116 |
Координатор
Группа: Координаторы
Сообщений: 730
Статус: Offline
| Цитата Northwood ( ) С чем связан выбор порта именно #33 и его разряда именно D4 ? Не нашёл в описании портов этот как стандартный, но выбор конкретного бита именно D4 намекает на какойто существующий стандарт. Этот порт есть в NGS и ZXM-GS, но D4 есть токо в ZXM-GS. По D4=1 у ZXM-GS отключается дешифрация и IORQGE #B3, #BB. Кроме того у NGS по D7=1 сбрасывается проц, по D6=1 включается какой-то ужас, а по D5=1 включается светодиод :)
"Трудно найти чёрную кошку в тёмной комнате.. ...особенно, если её там нет", "Forever!". "Я никогда не причиняю им зла. Я говорю им правду, и они думают, что это - зло." Гарри Трумэн
|
|
| |
Northwood | Дата: Четверг, 03.09.2020, 15:18 | Сообщение # 117 |
80h
Группа: Пользователи
Сообщений: 131
Статус: Offline
| Цитата Black_Cat ( ) Наобходимо разделить функционал ядра, к которому относится и SETUP, от функционала BIOS, Глюка или TR-DOS, процедуры которых могут использовать программы. Ядро - это отдельная страница ПЗУ.
Что в твоём понимании "функционал BIOS" ? Процедуры HDD, предоставляемые программам и TR-DOS-у ? Или что-то ещё ? И что в твоём понимании "ядро" ? Мне кажется, сам термин "ядро" здесь не совсем уместен, т.к. оно не является основой, на которой построена работа ZX-Spectrum, в отличии от ядра ОС Windows, Linux, Android и т.д. Здесь есть BIOS (Basic Input Ouput System), которое осуществляет аппаратную диагностику и на основе результата которой, можно осуществить некое аппаратное конфигурирование компьютера. Дополнительно предоставляются процедуры HDD для использования в пользовательских программах.
На всё про всё доступно 3 страницы ПЗУ, 4-я страница, если считать от 1, отдана для ZX-LPrint. Версия BIOS 3.02, которая сейчас работает на моём реальном Спектруме, поместилась в 1 страницу ПЗУ. Новая версия BIOS для нового проекта уже потребует 2 страницы, и ещё одна остаётся доступной на всякий случай.
Сообщение отредактировал Northwood - Четверг, 03.09.2020, 15:20 |
|
| |
Black_Cat | Дата: Четверг, 03.09.2020, 15:25 | Сообщение # 118 |
Координатор
Группа: Координаторы
Сообщений: 730
Статус: Offline
| Да, и внезапно в дешифрацию #xx37 придётся добавлять A2, т.к. wr#33 не выставляет IORQGE. И до кучи, глянул твою верхнюю плату - сигнал DOS в NemoIDE уже давно не замешивается, я лично приложил к этому лапу, когда делали Феникс :) , и к кстати, к убиранию DOS из SMUC, тоже приложил лапу я :) .
"Трудно найти чёрную кошку в тёмной комнате.. ...особенно, если её там нет", "Forever!". "Я никогда не причиняю им зла. Я говорю им правду, и они думают, что это - зло." Гарри Трумэн
|
|
| |
Northwood | Дата: Четверг, 03.09.2020, 15:40 | Сообщение # 119 |
80h
Группа: Пользователи
Сообщений: 131
Статус: Offline
| Цитата Black_Cat ( ) сигнал DOS в NemoIDE уже давно не замешивается В принципе да, можно не замешивать, поскольку конфликтов с FDD не будет благодаря A1 = A2 = 0 в дешифраторе NemoIDE, которые в FDС портах = 1.
|
|
| |
Black_Cat | Дата: Четверг, 03.09.2020, 16:02 | Сообщение # 120 |
Координатор
Группа: Координаторы
Сообщений: 730
Статус: Offline
| Цитата Northwood ( ) Мне кажется, сам термин "ядро" здесь не совсем уместен, т.к. оно не является основой, на которой построена работа ZX-Spectrum, в отличии от ядра ОС Windows, Linux, Android и т.д. Да, щаз сам юзер выполняет роль ОС, коммутируя задачи. Но т.к. ядро - это та же самая АВМ, то в перспективе ничего не мешает запускать там именно ядро ОС, которая автоматически будет создавать и удалять АВМ и обеспечивать взаимодействие кода разных АВМ :) . Т.е. ядро, это АВМ имеющая доступ к портам ядра, к которым никакие другие АВМ доступа не могут иметь принципиально.
Цитата Northwood ( ) Здесь есть BIOS (Basic Input Ouput System), которое осуществляет аппаратную диагностику и на основе результата которой, можно осуществить некое аппаратное конфигурирование компьютера. Это POST, его уместно оставить в ПЗУ ядра, а вот API работы с винтом - это уже функционал сугубо BIOS. В Спектруме роль BIOS выполняет SOS48/SOS128/TR-DOS/Service и т.д., вот куда-то туда это и надо размазать, как это сделано в +3e DOS c API divIDE/divMMC.
Цитата Northwood ( ) На всё про всё доступно 3 страницы ПЗУ, 4-я страница, если считать от 1, отдана для ZX-LPrint. Реально, LPrint это заплатка на SOS48, и занимает не полную страницу 2к, просто сэкономили на дешифрации, остальное место можно вполне использовать для чего-то полезного, если улучшить дешифрацию подключения этой заплатки.
"Трудно найти чёрную кошку в тёмной комнате.. ...особенно, если её там нет", "Forever!". "Я никогда не причиняю им зла. Я говорю им правду, и они думают, что это - зло." Гарри Трумэн
|
|
| |
|