|
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 ;не работает (нет доработки)
Другие статьи номера:
Похожие статьи:
Слово СисОпу - Интервью с координатором компьютерной сети ZXNet - Алексеем
Ивановым ALEX (Research).
В этот день... 18 ноября