ZX Ferrum
#03
27 февраля 2005 |
|
Схемы - "Второе 'окно'" - окно верхней памяти по адресам #8000-#C000.
Решил поместить статью в этот номер. Хотя схема разработана мной уже давно (то забуду о ней, то текст потеряю). Статья здесь несколько дополнена и расширена. Второе окно #8000-#bfff. (с) 2003 Терентьев Дмитрий Сперва о главном, зачем нужна эта схема? Нужна вот и все, об остальном позже и подробнее! Данная разработка позволяет обращаться к верхней памяти компьютера (при чем любого, где установлена данная разработка) не через окно в адресах #c000-#ffff, а в диапазоне #8000-#bfff. То есть как бы открывается второе окно (не зря названа так стат- ья). Что это дает? Увеличение быстродействия программ, которые де- лаю пересылку из одной страницы памяти в другую (за счет того, что не надо использовать нижнюю память под буфер, то есть уско- рение около двух раз), или если нежелательно трогать обычные порты расширения (здесь кстати получается некоторая унификация стандартов памяти для машин > 128кб , сведение в один порт). Еще пример, в странице #5 по адресам расположен диспетчер, который открывает нужные страницы памяти и запускает программы. Ближе к телу, вот схема. Состоит она из нескольких блоков. ┌──────────────────────────────┐ │Вариант для 128-го компьютера.│ ────────────────┴──────────────────────────────┴──────────────── Мультиплексирование окон. ───────────────────────── ЛА3 или любой инвертор KП11 v ┌──────┐ ┌───┐ 14│ mux │12 │ & │ 2D0 ──┤B1│ Q1├── ND0 A15 ───┬─┤ │ ЛА3 11│ │ │9 │ │ o──┐ ┌───┐ 2D1 ──┤B2│ Q2├── ND1 └─┤ │ │ │ & │ 5│ │ │7 │ │ └──┤ │ 2D2 ──┤B3│ Q3├── ND2 └───┘ │ o─── #80 2│ │ │4 A16 ───────────────┤ │ #80 ──┤B4│ Q4├── NEW#C0 │ │ 13├──┤ │ └───┘ OD0 ──┤A1│ │ OD0-2 - данные с порта #7FFD 10│ │ │ с выводов TM9 OD1 ──┤A2│ │ 2D0-2 - данные с порта #78FD 6│ │ │ OD2 ──┤A3│ │ линии с порта #7FFD на мультиплексор (КП11) 3│ │ │ разрезать, #C0 ──┤A4│ │ в разрыв вставить мультиплексор KП11 │ │ │ 1├──┘ │ #C0 - старый сигнал выборки #C000 #80 ──┤S │ NEW#C0 - новый сигнал выборки #C000 │ │ подать на вход мультиплексирования KП11 на 15│ │ плате ┌─┤/E │ старый сигнал отрезать │ │ │ │ └──────┘ #80 - сигнал выборки второго окна ─┴─ по адресам #8000-#BFFF GND Выборка порта #78FD. ──────────────────── ЛА3 ┌───┐ ЛЛ1 │ │ VD1 ┌───┐ A14 ──┤ │ │ │ │ & o───┤>├──┬─────┤ │ A13 ──┤ │ │ │ 1 ├─── #78FD │ │ │ ┌──┤ │ └───┘ │ │ │ │ ┌───┐ │ │ └───┘ │ │ VD2 │ │ A12 ──┤ │ │ │ VD1-VD2 - любые диоды │ & o───┤>├──┘ │ в случае глюков заменить A11 ──┤ │ │ на элемент ЛЛ1 │ │ │ └───┘ │ ┌───┐ │ │ │ ┌───┐ │ блокировка порта #7FFD A15 ──┤ │ │ │ │ ┌───┐ ┌───┐ │ 1 ├─────┤ │ │ │ │ │ │ A10 ──┤ │ │ 1 ├─┴───┤ │ ┌─┤ │ │ │ ┌──┤ │ │ & o──┤ │ & o──> новый сигнал └───┘ │ │ │ ┌──┤ │ └─┤ │ выборки ┌───┐ │ └───┘ │ │ │ │ │ порта #7FFD │ │ │ │ └───┘ └───┘ подать вместо A9 ──┤ │ │ ^ старого │ 1 ├──┘ старый сигнал A8 ──┤ │ выборки │ │ порта #7FFD └───┘ Порт #78FD. ─────────── ТМ8 ┌──┬──┐ 4│ │ │2 D0 ───┤D0│Q0├─── 2D0 5│ │__│6 выход 2D1 инвертируется D1 ───┤D1│Q1o─── 2D1 для того чтобы при сбросе 12│ │ │10 по адресу #8000 устанавливалась D2 ───┤D2│Q2├─── 2D2 страница номер 2. 13│ │ │15 ───┤D3│Q3├─── 9├──┤ │ #78FD───┤C │ │ 1│ │ │ ┌──┤R │ │ │ └──┴──┘ ─┴─ GND ──────────────────────────────────────────────────────────────── ┌────────────────────────────────────────────────┐ │Вариант для компьютеров с памятью больше 128 кб.│ ───────┴────────────────────────────────────────────────┴─────── В мультиплексоре окон добавить еще одну микросхему КП11. KП11 ┌──────┐ 14│ mux │12 ND3,ND4,ND5,ND6 соответствуют памяти 2D3 ──┤D1│ Q1├── ND3 256, 512, 1024, 2048 килобайт. 11│ │ │9 сигналы OD3-OD6 берутся с соответствую- 2D4 ──┤D2│ Q2├── ND4 щих портов расширений (#1FFD,#DFFD и тд) 5│ │ │7 2D5 ──┤B3│ Q3├── ND5 2│ │ │4 2D6 ──┤B4│ Q4├── ND6 13├──┤ │ OD3 ──┤A1│ │ 10│ │ │ OD4 ──┤A2│ │ 6│ │ │ OD5 ──┤A3│ │ 3│ │ │ OD5 ──┤A4│ │ │ │ │ 1├──┘ │ #80 ──┤S │ │ │ 15│ │ ┌─┤/E │ │ │ │ │ └──────┘ ─┴─ GND Порт #78FD можно сделать тогда по схеме: ИР23 ┌──────┐ │ reg │ D0 ──┤D0│ Q1├── 2D0 любой инвертор │ │ │ ┌──┐ D1 ──┤D1│ Q2├────────┤ o── 2D1 │ │ │ └──┘ D2 ──┤D2│ Q3├── 2D2 │ │ │ D3 ──┤D3│ Q4├── 2D3 │ │ │ D4 ──┤D4│ Q5├── 2D4 │ │ │ D5 ──┤D5│ Q6├── 2D5 │ │ │ D6 ──┤D6│ Q7├── 2D6 │ │ │ D7 ──┤D7│ Q8├── 2D7 ├──┘ │ #78FD──┤CS │ │ │ ┌─┤/E │ │ │ │ │ └──────┘ │ ─┴─ GND ─────────────────────────────────────────────────────────────── Немного поясню работу схемы. При попытке высветить по адресам #8000-#BFFF страницу номер 2, мултиплексор КП11 перехватит это, и будет впечатывать по данным адресам страницу с номвром из пор- та #78FD. Программа для проверки: ORG #6000 ;<#8000 LD HL,#8000 LD DE,#C000 LD BC,#7FFD LD (HL),0 LD A,#16 OUT (C),A ;включаем по адресу #c000 страницу #6 LD (DE),A AND %111 ;преобразовываем XOR %010 ;номер страницы всегда надо ксорить по %10 ;bit1 инверсный LD B,#78 OUT (C),A ;включаем по адресу #8000 старницу #6 LD A,(DE) CP (HL) RET Z ;все нормально, работает (есть доработка) RET ;не работает (нет доработки)
Другие статьи номера:
Похожие статьи:
В этот день... 21 ноября