__________________________________________
(C) Cardinal/PGC/BDA
__________________________________________
Чтение порта #7FFD
Привет, братки и сестрички! Данная ста-
тья не будет длинной и нудной, я просто
хочу выразить свою мысль, или даже доступ-
но объяснить другую (мысль). Те, у кого
есть SCORPION ZS 256/1024 TURBO+, наверня-
ка читали Зоновскую листовку о том, какой
хороший этот компер, по сравнению с други-
ми и даже с этим же, но ранней версии. Мо-
жет это и так, но мнения у всех разные,и я
не хочу навязывать свое. Ну, это не важно.
Так вот, там упоминается о том, что, цити-
рую: При разработе платы TURBO+ была зало-
жена возможность чтения отдельных разрядов
системных портов #7FFD и #1FFD через порт
музыкального процессора,что необходимо для
более корректной работы теневого сервис-
-монитора при определении текущей конфигу-
рации компьютера в момент нажатия кнопки
Magic. Конец цитаты. А как определять это
состояние я так нигде и не нашел, а может
и не хотел искать. Ну, да Бог с ним. Прош-
ло несколько лет, и я наткнулся на одну
схемку "Эмулятор ПЗУ" или другими словами
Кэш-память вместо ПЗУ. Ну, вы об этом тоже
наверняка, слышали, сейчас это модно, и на
страницах Deja Vu об этом упоминалось.Здо-
рово было бы загрузить вместо теневика STS
и по кнопке Magic в него вываливаться,тог-
да никакая очистка 8-ого банка не поможет.
Тогда и начала появляться проблема о том,
как без особых проблем считать текущее со-
стояние #7FFD и #1FFD. Многие люди делают
чтение системных портов по-разному. Напри-
мер, Diamond/AREASoft на своем супер-наво-
роченном PROFI читает (нечитабельные:-))
порты при помощи ИР-ки. На Скорпе это было
бы, примерно, так:
к выходам DD46 ИР22
и DD47 ┌──┬──┬──┐
════════════════╦─┤D0│RG│Q0├─D0
╠─┤D1│ │Q1├─D1
╠─┤D2│ │Q2├─D2
╠─┤D3│ │Q3├─D3
╠─┤D4│ │Q4├─D4
╠─┤D5│ │Q5├─D5
╠─┤D6│ │Q6├─D6
┌──┐ ╚─┤D7│ │Q7├─D7
/CSFD─┤1 │ ├──┤ │ │
│ ├─────┤EO│ │ │
/RD─┤ │ ┌──┤C │ │ │
└──┘ │ └──┴──┴──┘
+5v───────┘
Названия микросхем даны для TURBO+, у
старой платы это DD48 и DD49. Схема до-
вольно примитивна и показывает только саму
суть, но позволяет "увидеть" любые 8 раз-
рядов портов #7FFD и #1FFD, какие подведе-
те на входы ИР22. Программная поддержка
сего девайса будет, примерно, такой:
IN A,(#FD)
Все просто. Но! Разработчики навесили
на чтение портов #1FFD и #7FFD включение и
выключение турбо-режима. Т.е. команды:
LD A,#1F
IN A,(#FD)
включают турбо-режим, а команды:
LD A,#7F
IN A,(#FD)
выключают турбо-режим. Поэтому не нужно
выставлять перед IN A,(#FD) в аккумуляторе
#7F или #1F, если вы не хотите самопроиз-
вольной смены скорости компьютера. Кстати
говоря,и на других значениях старшего раз-
ряда #FD меняется скорость компьютера из-
-за грубой дешифрации.
Но я завел весь этот разговор вот из-за
какой штуки. В плате TURBO+ всем этим,т.е.
чтением портов #1FFD и #7FFD занимается AY
8910/12. В AY8912 имеется независимый ка-
нал, а в AY8910 даже два, ввода-вывода. В
AY8912 это ноги с 14 по 7(биты от 0 по 7).
В AY8910 другие (см. по схеме). В подавля-
ющем большинстве случаев эти ноги AY8912
висят в свободном состоянии. Но в TURBO+ к
ним подведены следующие биты портов #1FFD
и #7FFD:
нога 14 - бит 0 #7FFD
нога 13 - бит 1 #7FFD
нога 12 - бит 2 #7FFD
нога 11 - бит 3 #7FFD (SCREEN)
нога 10 - бит 4 #1FFD (верхняя память)
нога 9 - бит 4 #7FFD (ROM)
нога 8 - не используется
нога 7 - не используется
Благодаря этому прочитать текущее сос-
тояние компьютера можно таким образом:
LD A,#0E
LD BC,#FFFD
OUT (C),A
IN A,(C)
В аккумуляторе будет информация о сис-
темных портах #7FFD и #1FFD в виде, приве-
денном выше. У AY8912 регистр #0F не дос-
тупен, а у AY8910 он есть. Поэтому, есть
возможность в сумме определять 16 битов
состояния различных портов! Теперь я хочу
подвести итог ко всему вышесказанному. Для
того, чтобы определить текущее состояние
системных портов (не важно каких), которые
не доступны для чтения,можно обойтись все-
го несколькими проводками, а не припаивать
лишнюю логику. Впрочем, это лишь мое субъ-
ективное мнение. Некоторые люди на AY-шку
навешивают мыша, что, конечно, не совсем
стандартно, но тоже хорошо работает, в ZX-
-POWER об этом не раз писалось. В SCORPION
+GMX так, вообще, состояние системных пор-
тов читается через порты: #78FD, #7AFD и
#7EFD, короче, каждый делает, что хочет.
На этом все. Не смотрите,что статья по-
лучилась несколько корявой - как смог, так
и выразился. C U L8R!
P.S. Я нашел применение двум незадейство-
ванным битам, я на них повесил два бита
расширения памяти SCORPION'a до 1024К по
схеме от ERASERа/AREASoft из ZX-LIGHT #0C.
Cardinal/PGC/BDA
------------------------------------------
КП11А │
┌──┬──┬──┐ │
Gnd──2┤A1│MS│Y1├4──2:DD11 │
2:DD11'──3┤B1│ │ │ │
├──┤ │ │ │
13:DD33──5┤A2│ │Y2├7──────────┘
Gnd──6┤B2│ │ │
├──┤ │ │ R1 светодиод
+5v─11┤A3│ │Y3├9──▒▒▒──┤<───Gnd
Gnd─10┤B3│ │ │
├──┤ │ │
─14┤A4│ │Y4├12─
─13┤B4│ │ │
Gnd── ├──┤ │ │
+5v── ───────1┤S │ │ │
тумблер Gnd─15┤E0│ │ │
on/off └──┴──┴──┘
Пояснения к этой длинной схеме:
Т.к. многие ноги с одинаковыми номерами
соединяются вместе, то лучше напаять мик-
росхемы КП12 в три этажа, можете четвертым
этажом напаять и КП11А - будет круто! Жаль
что это мало кто увидит:-(
Светодиод показывает какой режим вклю-
чен в данный момент,если вам это не нужно,
то резистор и светодиод можете не припаи-
вать, а ноги 11 и 10 КП11А никуда не пода-
вать.
К 3-ей ноге КП11А подходит сигнал с до-
рожки, к которой была припаяна 2-ая нога
DD11,поэтому DD11 показана со штрихом. Со-
ответственно,4-ую ногу КП11А нужно цеплять
непосредственно ко 2-ой ноге DD11.
Сигналы MD0-MD5 идут с 14-ых ног микро-
схем РУ7 (DD21-28), они же и подходили к
соответствующим ногам DD33 и DD34 перед
тем, как вы их злостно ампутировали.
К 5-ой ноге КП11А (по схеме) подводится
13-ая нога DD33, на схеме Скорпа отмечен
как сигнал INV. Другими словами,это тот же
MD7, т.е. 7-ой бит FLASH,пропущенный через
мультиплексор.
Сигнал 14MHZ удобнее всего подвести от
3-ей ноги DD2,но можете и от любой другой,
где он есть (см. по схеме Скорпа).
Вместо тумблера можно подвести к 1-ой
ноге КП11А управляющий бит от какого-ни-
будь самопального порта,чтобы щелкать гра-
фическими режимами программно, а не при
помощи трясущейся руки после вчерашней гу-
лянки. Но я не решился придумывать какой-
-то новый порт, их и так в последнее время
расплодилось, как ежиков в лесу.
Не забудьте про питание микросхем: ко
всем 8-ым ногам подвести Gnd, a ко всем
16-ым +5v.
Да, и вот еще. Оставшуюся четвертинку
мультиплексора КП11А (ноги 12,13,14) можно
заюзать следующим образом, не пропадать же
ей зря. Ноги 13 и 14 собрать в кучу и по-
дать на 15 ногу DD46,а на 12-ою ногу КП11А
навесить светодиод через резистор (как по
схеме чуть выше),и тогда у вас будет инди-
катор текущего экрана (5-ый или 7-ой). Ес-
ли светодиод горит, значит в данный момент
показывает 7-ой экран.
Ну, и на последок хочется вас обрадо-
вать, что никаких программ и картинок под
этот девайс нет, поэтому где применить сие
чудо я не знаю:-( Хотя нет! Одна картинка
есть:-) Она в MIRACLE 3. Будущее у данной
доработки очень туманно, если не сказать
большего, и расчитана она на тех,кто очень
любит навешивать на свой комп,которого уже
и так не видно из-за кучи проводов, всякую
шнягу вроде этой:-)
Cardinal/PGC/BDA
------------------------------------------
Other articles: