|
Креатив:
Второе окно #8000-#BFFF:
можно любой инвертор
KП11 v
+------+ +---+
| mux | | & |
2d0 --+b1 q1+-- nd0 a15 ---+-+ |
| | | | o--+ +---+
2d1 --+b2 q2+-- nd1 +-+ | | | & |
| | | | +--+ |
2d2 --+b3 q3+-- nd2 +---+ | o--- #80
| | a14 ---------------+ |
#80 --+b4 q4+-- new#c0 | |
|-- | +---+
od0 --+a1 | od0-2 - данные с порта #7ffd
| | с выводов TM9
od1 --+a2 | 2d0-2 - данные с порта #78fd
| |
od2 --+a3 | линии с порта #7ffd на мультиплексор (КП11) разрезать,
| | в разрыв вставить мультиплексор KP11
#c0 --+ |
|-- | #c0 - старый сигнал выборки #c000
#80 --+s | new#c0 - новый сигнал выборки #c000
| | подать на вход мультиплексирования KП11 на плате
+-+/e | старый сигнал отрезать
| | |
| +------+ #80 - сигнал выборки второго окна
|
gnd
ЛА3
+---+ ЛЛ1
| | +---+
a14 --+ | vd1 | |
| & o---|>|--+-----+ |
a13 --+ | | | 1 +--- #78fd
| | | +--+ |
+---+ | | | |
+---+ | | +---+
| | | |
a12 --+ | vd2 | | vd1-vd2 - любые
| & o---|>|--+ |
a11 --+ | |
| | |
+---+ |
+---+ |
| | +---+ | блокировка порта #7ffd
a15 --+ | | | | +---+ +---+
| 1 +-----+ | | | | | |
a10 --+ | | 1 +-+---+ | +-| |
| | +--+ | | & o--+ | & o--> новый сигнал
+---+ | | | +--+ | +-| | выборки
+---+ | +---+ | | | | | порта #7ffd
| | | | +---+ +---+ подать вместо
a9 --+ | | ^ старого
| 1 +--+ старый сигнал
a8 --+ | выборки
| | порта #7ffd
+---+
ИР23
+------+
| reg |
d0 --+d0 q1+-- 2d0 любой инвертор
| | ___ +--+
d1 --+d1 q2+---2d1--+ 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
становится активным сигнал #80 (лог. 0)
этот сигнал подается на мультиплексор КП11, через
который коммутирует биты с порта #7ffd и #78fd, а
так же сигнал #C0 подменяет на #80, чтобы следующий,
мультиплексор (на котором вся верхняя память и держится)
думал, что выборка происходит из адресов #c000-#ffff
и тем самым проецировал окно верхней памяти, но с
адресов #8000-#bfff (подмена сигнала), и то окно
которое в порте #78fd прописано.
Блокировка порта #7ffd нужна, для пентагонов, чтобы
не было конфликтов, но если вы не уверены в том, что
конфликтов не будет (а скорей всего они будут), то
блокировку оставьте, это всего пол микросхемы, и
можно тоже любой инвертор поставить.
Можно было бы проще сделать схему (не сильно), но
я старался, что бы микросхемы использовались
максимально эффективно.
Обращение по порту #78fd с инверсией по bit1, т.е.
XOR #02.
Для пользователей с мегамозгами (больше 128кБ):
Добавляется еще один мультиплексор КП11, и
мультиплексируем оставшиеся биты. Итого через порт
#78fd будет переключаться 4 метра, думаю всем хватит.
P.S.:
Фича уже собрана в одном экземпляре и прекрасно работает!
При возникновении проблем обращаться по адресу редакции или
demon_zx@fromru.com
P.P.S.:
За сдохшие в муках компы, паяльники и т.д. автор
ответственности не несёт, не умеешь держать паяльник
в руках, не лезь.
(c) 2003 Demon / DPC
Небольшой коментарий к схеме разработанной Demon/DPC.
Данная доработка предназначена для любого Spectrum128, дает возможность
манипулировать банками памяти через второе окно проецирования. Само окно
располагается с адреса #8000 по #BFFF. Порт взят из GMX - #78FD, засылаемое
значение соответствует физическому номеру банка памяти, за исключением бита 1,
он должен быть инвертен. Это необходимо для установки банка 2 во втором окне
после запуска или рестарта машины.
Разобраться с самой схемой думаю можно без особого труда, там минимум
деталей, зато такая доработка позволит повысить производительность машины
вдвое. Появляется возможность писать программы, используя эту возможность,
не только для навороченных машин типа Скорпа или АТМ. (Trident - прим. редакции)
|