Black Crow
#03
27 июня 2000 |
|
Очумелые ручки - Реализация кэша.
(С) 1999 Макс/Compu-Sudio Ltd ----------------------------------------- Добрый день! Сегодня я вам расскажу о самой классной доработке Спектрума в пла- не программирования и взлома программ за всё время существования нашего компьюте- ра. Предидущим достижением такого плана было изобретение теневика на Скорпионе. Теперь все не-Скорпионщики могут сделать себе данное приспособление и при наличии соответствующего программного обеспечения стать в один ряд с продвинутыми кодерами и хакерами. Это устройство не ново - ещё в старом- добром Spectrofon`е 17 знаменитый В.М.Г. предлагал. Но тогда данное устройство не вызвало ажиотажного спроса. Теперь же, по мере написания программ "под кеш", нали- чие этого устройства становится всё более необходимым. И даже престижным. Данный текст уже морально устарел, но учитывая то, что многие по-прежнему отре- заны от сетей, а значит - и от "цивилизо- ванного рынка информации", да ещё в при- дачу ко всему схема от В.М.Г. имеет глюки в работе, то я счёл необходимым затронуть эту тему в своём издании. Для начала перечислю все те плюсы, ко- торыми изобилует этот аппаратный апгрейд: 1) 16К сверхбыстрой памяти в адресном пространстве ПЗУ; 2) теневой принцип нахождения в схеме компьютера; 3) программно доступны все адреса, ко- торые вызываются командами RST. Можно са- мому использовать в своих целях, например тот же RST 8 или даже RST 0; 4) самый, что ни есть, полный доступ к портам ВГ93, что открывает потрясающие с точки зрения программиста возможности ра- боты с диском! Чего только стоит свобод- ное чтение регистра #1F ВГ-шки на предмет качества выполнения операции; 5) по адресу 102 или #66 (кто как при- вык) можно разместить свой обработчик на- жатия на magic, что несомненно упростит взлом любой программы, не использующей в своих целях кеш и не убивающих его; 6) любители писать свои новые ОС и на- хрен никому не нужные виндовсы теперь мо- гут убраться нахрен из основного ОЗУ ком- па в кеш, а точки входа в свои маздайные оболочки сделать по-человечески - через RST`шки! Как в is-dos, например, но при этом использовать их все, а не только на- бивший оскомину RST 16; 7) много всяких-всяких возможностей... Минусы наличия кеша: некоторые маздай- ные программы (в основном старьё) любили делать LPRINT txt, что приводит к медита- ции всей системы. Выход из этого - сделай перед работой инсталляцию Lprint`овой ПЗУ методом считывания с диска прошивки и пе- реброски её в кеш. Не забудь при этом от- крыть/закрыть кеш ;) Итак, привожу ИСПРАВЛЕННУЮ схему кеша, которую любезно предоставил Master. После переделки схемы всё стало корректно рабо- тать и не напрягать схему компьютера.На схеме есть тумблер, который перево- дит нажатие magic`а в кеш или обычный дос и которым удобно пользоваться в различных жизненных ситуациях. У меня, правда, одна ситуация - кешем ломаю или отлаживаю про- ги, которые ковыряю или пишу. Теперь немного информации о методе ра- боты с кеш и пример его применения. Блин, всё гениальное просто: DI IN A,(#FB) ;кеш открыт! CALL nn ;программа user`а IN A,(#7В) ;кеш закрыт! EI ;ну, если это нуж- RET ;но... И всё! Нет никаких дурацких LD ВС,#nnn и OUT (С),n и прочей ерунды, которая при- водилась в DEJA VU 7 и других изданиях, приводивших примеры "расширения ОЗУ" на 16/32К. Тоже, конечно, хорошо, но зачем делать то, под что проблематично писать софт? Хотя это чисто моё мнение, не пре- тендующее ни на что. А вот кэш - это кру- то! И самое интересное - все возможности "в одном флаконе"! Возможности программиста. Они ограни- чиваются только объёмом кеша: 2, 4, 8 или 16 килобайт реализовано в одной странице, или сколько? Проверить это можно по-раз- ному. Самый примитивный способ мой, кото- рый позволяет грубо подсчитать количество кило в кеше или определить его отсутствие вообще. DI ;без прерываний! IN A,(#FB) ;open кеш LD HL,#0000 LD DE,#0001 LD ВС,#ЗFFF LD (HL),L PUSH HL ;очистка кеша LDIR РОР HL LD A,#01 ;байт контроля любой, LD (HL),A ;кроме #F3! СР (HL) ;есть ОЗУ, или нет? JR NZ,NO_CACHE;нет, а жаль... LD ВС,#ЗFFF;1бКб размер страницы INC HL ;с адреса #0001 ищем CPIR ;возможные повторения LD HL,EXIT ;выход из теста PUSH HL ;так короче ;) LD A,Н ;адрес, где есть сов- LD Е,#08 ;падения с контролем СР Е RET Z ;кеш на 2К LD Е,#10 СР Е RET Z ;на 4К LD Е,#20 СР Е RET Z ;на 8К РОР HL LD Е,#40 ;нет совпадений, зна- EXIT IN A,(#7В) ;чит кеш 16К. Rulez! LD A,Е ;результат теста для EI ;дальнейшего примене- RET ;ния. NO_CACHE LD Е,0 ;нет кеша вовсе! JR EXIT Как видите - ничего сложного здесь нет и быть не может. Память кеша организова- на таким образом, что можно ставить любую рушку без риска "улететь". И использовать можно всё адресное пространство вне зави- симости от объёма ОЗУ кеша. Допустим, что вам надо сделать обращение к диску, но у вас, как на зло, всего 2К кеш. Ничего нет страшного в этом! Главное, чтобы драйвер дисковых операций небыл безмерно раздут. Так как порты доса доступны при обращении к окну #3D00-#ЗDFF, то и драйвер дисковых операций можно положить туда же. Откройте кеш, ldir`ните под адрес #3D00 свой драй- вер и можете свободно его использовать в своих целях. Имейте ввиду, что порты доса будут доступны только, если РС бегает по кешу в любом месте (естественно, если вы вошли в кеш через окно), а для доступа к портам "ZX" надо сделать выход в основное ОЗУ. Не забывайте это при написании своих программ, которые предполагается частично или полностью размещать в кеше! В приложении к журналу есть программа, которая поможет вам определиться с нали- чием или отсутствием кеша, а также с его объёмом. Это "MAGIC INSTALLER". Она, ко- нечно, не идеал, но при наличии у вас до- полнительного ОЗУ по любому из известных стандартов памяти, позволит почувствовать себя крутым хакером. Для установки кеша можно использовать как советские микросхемы РУ10 или РУ17, а также и буржуйскими аналогами. Крайне ре- комендую микросхему HY62256ALP-10 на 32Кб объёмом. У меня стоит именно она. Но мар- кировка может быть и другой. Главное - её объём! Здесь, правда, появляется "проблема": а куда девать остальные 16К, неиспользо- ванных в предидущей схеме? Ведь руки так и чешутся приспособить лишний RAM. Давай- те обратим свои взоры к FIDO и поищем там ответы на интересующие нас вопросы. Слово предоставляется первому попавшемуся чело- веку, рассуждения которого, по-моему, за- служивают всеобщего внимания. Итак, (С) 1999 Roman Milukov (2:4616/14.29) ----------------------------------------- Здравствуй, All! Возникли у некоторых вопросы по поводу кеша-32К. Дескать, не работает. Закидываю подправленую схему. Если это не зарабо- тает, значит ошибка в монтаже. Порт #CFF7. Не знаю как у кого, но после появления аналогичной схемы от ARC, я теперь обяза- тельно сделаю блокировку этого порта в своём компе! И включена она будет пос- тоянно. И ещё раз: Не заводить на этот порт RESET - идея не из лучших. При этом хоть и отпадает необходимость записывать в не- го при каждом перезапуске нужное значе- ние, но появляются другие проблемы: 1. что делать, если какой-то нехороший программер полез к нему без разрешения и вписал туда чего ему захотелось? 2. что делать, если произошёл сбой в ре- зультате мощной импульсной помехи? - а в ОЗУ была важная информация! САСНЕ = 62256 ============= В Пентагоне очень легко поставить CACHE-ОЗУ на 537РУ10. Схема от ВМГ опуб- ликована в Спектрофоне-17. И не только для Пентагона. Но с 2К мало от него поль- зы. Вот 16К - другое дело! Там же расска- зано, как сделать и 16К - на двух 537РУ17 - их надо напаивать "бутербродом" друг на друга. Но гораздо удобнее взять одну бур- жуйскую микросхему статического ОЗУ - 62256 (разные фирмы называют их по разно- му, у меня стоит НМб2256LP). Вот тут появляется "серьезная" проб- лема - 62256 имеет объем 32К. Ну 16К за- действуем как положено. А куда б приме- нить остальные 16К? Сразу приходит мысль адресовать их битом 4 #7FFD. Но весь су- ществующий софт под кеш писался с учетом того, что при любом значении этого бита имеем один и тот же кеш! Иногда такое необходимо! Поэтому _нельзя_ просто 1-ую ногу цеплять на бит 4 #7FFD! Я решил сделать в своем компе вот что: (рис.1)Привязка дана к микросхемам Пентаго- на! Сигналы: /DOSEN - 11н. D83 (1н. ПЗУ 27512); ROM - 12н. D62. Не забудьте на 26-ую ногу 62256 за- вести А13 (шина А0-А15) с Z80, на 2-ую - А12, на 23-ю - А11. (На 22-ой должен быть /RD. А остальные ноги подключаются как и у ПЗУ.) 28-ая нога - питание, если подавать его как указано, то информация в стат.ОЗУ при выключеном питании будет сохраняться пока не сядет батарейка. А потребляет статическое ОЗУ в режиме хранения ОЧЕНь мало. (Именно поэтому применена 1SSЛЛ2!). Для не-Пентагона есть одна тонкость. Вот схема В.М.Г.:Здесь последний элемент ЛЛ1 надо заме- нить на элемент 1SSЛЛ2 и резистор на 1К (у ЛЛ2 выход - открытый коллектор), и соединить его выход с одноименным выходом схемы, показаной на рис.1. Или можно тут применить элемент ЛП8, как в Пентагоне. а 13-ую и 10-ую ноги КП11 (рис.1) надо по- давать сигнал с 6-ой ноги ТМ2, на 1-ую ногу ЛЛ2 (рис.1) - подавать с 3-ей ноги ЛЛ1. Вместо серии 1533 можно поставить 555. Можно, конечно, поставить тумблера на 1- ую и 15-ую ноги КП11 и работать руками, но лучше сделать так: bit1 и /bitЧ - это биты порта #CFF7, получены вот таким образом:У кого собраны GLUK-часы по доработа- ной схеме, дешифратор уже есть. (И пита- ние на 62256 можно взять оттуда.) Теперь, если порт сброшен, имеем прос- той CACHE 16К (1-ая страница 62256). Нор- мальный! Если установить бит 4 в порту #CFF7, то имеем CACHE-32К, где старший адрес - бит 4 #7FFD. Если в нормальный CACHE-16К загрузить, к примеру, TR-DOS 5.04Т (в ПЗУ у меня си- дит TR-DOS 5.12F by REANIMATOR), то уста- новив биты 4 и 1 #CFF7, можно юзать проги критичные к версии ТР-ДОСа. При этом у Вас будет и кеш - подключится 0-ая стра- ница! Бит 0 порта #CFF7, будучи установлен, запретит прогам доступ к этому порту до нажатия на RESET (если надо). Есть еще одна интересная возможность - подключить ноги 2 и 11 КП11 (рис.1) вот таким образом:Тогда можно загрузить в страницы CACHE- 32К, к примеру, NeOS и свой вариант бей- сика-48, установить бит 2 #CFF7, и они станут на места бейсика-128 и стандартно- го бейсика-48. Запись при этом в них ста- нет невозможна. ------- Макс: до сих пор нет единого стандарта по кеш-32К, поэтому каждый более-менее шаря- щий в электронике изобретает свой велоси- пед. ------- Вариация на тему CMOS=часы по Глюку. Пришлось набить схемку, по которой я сделал себе часы. Смотрите - может кому и пригодится. Прошу обратить внимание на то, что это НЕ ЯВЛЯЕТСЯ ещё одним стан- дартом! Адресация по стандарту Глюка, только чуть жёстче, что, на мой взгляд, полезно. CMOS-часы. Рекомендую к применению.Сигналы с ног 2 и 3 ТМ8 можно подавать на схему дополнительного графического ре- жима 512*192 pix. Тогда от той схемы ос- таётся только КП11 и ИР23. Вообще-то схемка подключения ног 18, 20, 22 немного некорректна, но оно и так работает. Так было у Глюка, и себе я сде- лал так - лень было сделать как надо. (Правда, у Глюка часы питаются ТОЛьКО от батарей 4.5V) А по хорошему надо так:Всего хорошего. С уважением Roman Milukov.
Другие статьи номера:
Похожие статьи:
В этот день... 21 ноября