ZX Review #7-8-9-10
08 ноября 1997

Этюды - Программа - каталогизатор дисков.

(c) Kettle, Лен.обл., п.Совет-
ский

   Я долго не  решался  написать
вам. Но вот зашел  в  тупик, мне
просто не с кем  посоветоваться.
Все, кого я знаю, и у кого  име-
ется  Спектрум, не  продвигаются
дальше игрушек. Я же прошел Бей-
сик и теперь пробую свои силы  в
ассемблере. Я второй год выписы-
ваю ваш журнал "ZX-Ревю" и  счи-
таю, что в вашем лице нашел луч-
шего собеседника  и  учителя.  И
вот теперь прошу помочь.
   Дело в том, что я долго искал
нормальный каталогизатор. Но бе-
зуспешно  -  один "виснет", дру-
гой не сортирует, третий не ищет
программу, четвертый не маркиру-
ет и т.д. Тогда я взялся  писать
сам. Программу я  хотел  сделать
максимально удобной и, как гово-
рится, дружественной, более  то-
го, с автопоиском на диске. Что-
бы даже  первоклассник  смог  ее
без подсказки использовать.
   Дело вроде бы пошло. Я разме-
тил  память, написал  процедуры,
обозначил буфер, почти  закончил
логическую  часть...  Но  тут  я
увидел, что памяти 48 Кб  (вмес-
те с программой) мне хватит  для
обработки лишь 16-20 дисков. Хо-
чется, чтобы  обрабатывались  не
только бейсик-блоки, а все  фай-
лы, или на выбор - любые.  А на-
до добавить, что  у  меня  более
50-ти дискет (купил оптом у быв-
шего синклериста, пересевшего на
IBM), и на этом я  не  собираюсь
останавливаться.
   Но, согласитесь, это смешно -
загружать данные с диска по час-
тям и не  использовать  всю  па-
мять - 256 Кб!!!  Да, да, да.  Я
подошел  к  главному  -  у  меня
"СКОРПИОН"! Но я, к своему вели-
кому стыду и к  великой  досаде,
не  умею  использовать  эту  чу-
до-машину "на  все  сто".  Ни  в
бейсике, ни  в  кодах.  Прочитал
кучу литературы и всюду натыкал-
ся на загадочные намеки на  порт
#7FFD. Извините, поэксперименти-
ровать не смог - мой GENS-4D  не
принимает команды с  полной  де-
шифрацией порта вывода.  Есть  у
меня еще TASM 4.0, но тот  поче-
му-то  не  отгружает   объектный
код. Через теневой монитор  тоже
пытался кодировать прямо  в  па-
мять,  но,  дизассемблируя  свои
коды, вижу  только  OUT (#FD),A.
Что делать? В книгах и  брошюрах
эта тема настолько сжата и  про-
тиворечива, что я  вконец  запу-
тался. Кроме того, в режиме 128-
бейсика есть  три  подпрограммки
обмена  страниц  памяти, но  вот
вопрос - как их использовать?
   Дорогая редакция! Надеюсь, вы
поняли мои затруднения и не  ос-
тавите без внимания мой  вопрос.
Буду весьма признателен. Подска-
жите, можно ли организовать  об-
работку данных в цикле из  одно-
го банка ОЗУ с  переброской  ре-
зультатов в другой? Какие  банки
и в какие адреса  можно  устано-
вить? Как это выполнить из  бей-
сика и из машинного кода?  Какие
конфликты предусмотреть?  Конеч-
но же, меня в первую очередь ин-
тересует "СКОРПИОН-256".
   А теперь немного  расскажу  о
моей идее  автопоиска  файлов  с
данными. При  входе  в  програм-
му-каталог она  запрашивает  те-
кущую дату:  6 цифр, либо  можно
организовать меню с  интерфейсом
и  наглядным выбором даты, имею-
щим в итоге все те  же  6  цифр.
При сбросе файла данных на  диск
эти цифры войдут в имя файла ав-
томатически. При  следующем  за-
пуске программы  не  надо  будет
вспоминать имя файла или дату  -
программа  сама  найдет  его  по
принципу  "больше-меньше", един-
ственное - после 1999 года  надо
будет сменить дискету.
   Ну вот, пожалуй, и все.  Буду
с надеждой ждать вашего отклика,
равно как и помощи других  чита-
телей best magazine "ZX-РЕВЮ"!

   Прим ред.: Да, рано или  поздно  кто-то
должен был задать подобный вопрос.  И  вот
наконец-то появился повод полностью  осве-
тить на страницах нашего журнала работу со
страницами. Итак, начнем  по  порядку.  Во
всех машинах  с  ОЗУ  128 Кб  присутствует
порт расширения с адресом #7FFD. Его стру-
ктура такова:

биты

 7 - не используется
 6 - не используется
 5 - защелка. При записи в этот бит 1 порт
     блокируется. Это необходимо для пере-
     вода машины в 48 Кб режим.  Блокиров-
     ка снимается только по сбросу кнопкой
     Reset.
 4 - выбор ПЗУ.  При записанном  туда  0 -
     впечатано ПЗУ бейсика-48.  Если  туда
     записать 1, то впечатывается ПЗУ бей-
     сика-128 и  одновременно  блокируется
     возможность включения  туда  ПЗУ  TR-
     DOS. Это необходимо, т.к. на  адресах
     #3D00 - #3DFF в  этом  ПЗУ  находится
     программа. При включенном ПЗУ  бейси-
     ка-48 блокировка TR-DOS снимается.
 3 - выбор экрана. В этих машинах есть две
     экранные области. 0 - это стандартный
     экран с адреса #4000. 1 - второй  эк-
     ран, находящийся в банке 7. Он  может
     быть впечатан  с  адреса  #C000.  Его
     структура полностью совпадает с обыч-
     ным.
 2 - Выбор страниц ОЗУ. Страница с  задан-
     ным  номером  (0-7)  впечатывается  с
     адреса #C000. Но!!! Страницы с  номе-
     рами  2 и 5  также  фиксированно  на-
     ходятся  по  адресам:  2 - #8000, 5 -
     #4000. То есть 0 экран по  сути  дела
     находится в странице 5.  Таким  обра-
     зом, при  работе  с  расширенной  па-
     мятью  надо  обходить  эти  страницы,
     поскольку они уже использованы.

   Но, как вы уже заметили, 8  страниц  по
16 Кб - это 128 Кб. Но у Скорпиона 256 Кб.
Как же быть с остальной памятью?  Для это-
го в Скорпионе введен еще один порт расши-
рения, которого не было в 128-ых  машинах.
Его адрес - #1FFD. Вот какова его структу-
ра:

биты

 7 - не используется
 6 - не используется
 5 - Стробирование Centronix. Этот  сигнал
     используется при работе с  принтером.
     Кратковременная установка его в 1 го-
     ворит принтеру, что на него  поступи-
     ли данные.
 4 - Самый важный бит. С его помошью и уп-
     равляется дополнительная память. Если
     он установлен в 0, то по порту  #7FFD
     переключаются  страницы  0 - 7; когда
     он установлен в  1, то  переключаются
     страницы 8 - 15. Итого 256 Кб. Только
     следует учесть, что восьмая  страница
     используется теневым монитором.  Если
     запортить ее  содержимое, то  монитор
     окажется неработоспособен, и по нажа-
     тию Magic машина просто зависнет.
 3 - вывод RS232, Через этот бит передают-
     ся данные для некоторых типов принте-
     ров.
 2 - не используется
 1 - установка этого бита в 1  приводит  к
     тому, что бит 4 порта #7FFD перестает
     работать, а с адреса 0  впечатывается
     ПЗУ теневого монитора. Установка это-
     го бита в 0 вернет все на места.
 0 - Очень интересная вещь.  При  поданной
     туда 1 с адреса 0 впечатывается нуле-
     вая страница ОЗУ. Очень  полезно  для
     тестирования своих версий ПЗУ, а так-
     же с его помощью можно  получить  не-
     посредственный доступ к портам  ВГ93!
     Идея такая. Мы устанавливаем этот бит
     в 1 и делаем переход по адресу в диа-
     пазоне #3D00 - #3DFF. Сработает логи-
     ка контроллера, которая должна подме-
     нить ПЗУ на TR-DOS и переключить пор-
     ты. Порты-то переключаются, а  ПЗУ-то
     не работает... И мы попадаем в  пред-
     варительно подготовленную  программу,
     которая имеет полный доступ к  портам
     ВГ93 до тех пор, пока  управление  не
     выйдет за адрес #3FFF.  При  переходе
     этого предела порты переключатся  об-
     ратно. Установка этого бита в 0  вер-
     нет все на привычные места.

   Итак, приводим пример процедуры, впеча-
тывающей с  адреса  #C000  страницу, номер
которой (0-15) вы поместите в регистр A:
140.
        PUSH AF       ;сохраняем номер страницы
        AND  #07      ;выделяем младшие биты
        OR   #10      ;чтобы включилось ПЗУ 3бейсика-48
        LD   BC,#7FFD ;установка порта #7FFD
        OUT  (C),A
        POP  AF       ;восстанавливаем номер страницы
        AND  #08      ;выделяем старший бит.
                      ;Он является номером группы страниц.
        RLA           ;в порту это будет 4 бит, а не 3.
        LD   B,#1F    ;меняем адрес порта на #1FFD
        OUT  (C),A    ;устанавливаем порт #1FFD.
2
   Естественно, стек и сама  процедура  не
должны  находиться  выше  #C000.  Обратите
внимание на команды  OUT (C),A!  Очевидно,
вы пытались набрать  OUT (#7FFD),A.  Такой
команды нет.  Адрес порта в этой команде -
только один байт. Для обращения  к  порту,
адрес которого задан  двумя  байтами, надо
использовать  команду  OUT (C),A, загрузив
предварительно адрес порта в BC.
   Теперь о том, как работать из  Бейсика.
Абсолютно так же. В принципе, бейсик вооб-
ще не приспособлен для работы со страница-
ми. Бейсик-128 использует  их  только  как
Ram-диск и дополнительный буфер.  Те  под-
программы, о которых  вы  упомянули, абсо-
лютно бесполезны. Они используются  бейси-
ком-128 для обмена ПЗУ при вызове подпрог-
рамм из бейсика-48. Внимание! На эти  под-
программы управление передается  также  по
прерываниям, если  включено  ПЗУ  бейсика-
128. Так что не впечатывайте его при  раз-
решенных прерываниях, если вы не уверены в
их наличии. Это может иметь место, если вы
запускались  из  48-го  бейсика.  А  лучше
вообще не трогать его, поскольку  полезно-
го в нем ничего нет.
   По этой же причине есть еще один нюанс.
Если вы переключаете порты из  Бейсика, то
перед тем, как  заслать  значение  в  порт
#7FFD, обязательно поместите его в  ячейку
#5B98. Без этого вы не сможете переключить
страницу - первое же прерывание вернет  на
место старую. То же самое  относится  и  к
ассемблеру, если уж вы  решили  залезть  в
ПЗУ 128-го бейсика при разрешенных  преры-
ваниях. Хотя с этим лучше  не  связываться
при работе с портом #1FFD. ПЗУ бейсика-128
не знает  о  его  существовании  и  крайне
удивится, когда на месте 7 страницы, кото-
рая используется ей для хранения  каких-то
своих переменных, вдруг окажется  15.  Вот
вроде и все, что можно  сказать  по  этому
поводу.

          *   *   *




Другие статьи номера:

TR-DOS для начинающих - Окончание.

Компьютерная новелла - Prince of Persia.

Компьютерная новелла - Лазерная бригада (по игре Laser Squad).

Перекресток драконов - Игра Rapscallion.

Перекресток драконов - Игра The Runes of Zendos.

Перекресток драконов - Игра The Saga.

Перекресток драконов - Игра Witch's Cauldron.

Перекресток драконов - Создаём Адвентюру. Обзор редакторов.

Перекресток драконов - Создаём словарь к Адвентюрной игре.

Программы, которые мы выбираем - Возможные последствия использования недокументированных команд.

Программы, которые мы выбираем - О замеченных шероховатостях в работе некоторых программ и пожелания к следующим версиям.

Программы, которые мы выбираем - Предложение ко всем авторам программ, печатающих дамп памяти. Программистам, использующим защиту дисков от копирования.

Программы, которые мы выбираем - Несколько предложений по усовершенствованию ассемблера.

Программы, которые мы выбираем - Предложения по доработке ZX Word v2.5.

Программы, которые мы выбираем - Программа "Эмулятор Спектрума" v1.2.

Программы, которые мы выбираем - Что хотелось бы иметь в идеальном ассемблере.

Ретро - 40 лучших процедур: Копирование данных в памяти.

Ретро - 40 лучших процедур: Обмен токена.

Ретро - 40 лучших процедур: Определение адреса БЕЙСИК-строки.

Ретро - 40 лучших процедур: Определение длины БЕЙСИК-программы.

Ретро - 40 лучших процедур: Определение размера свободной памяти.

Ретро - 40 лучших процедур: Поиск и замещение строки.

Ретро - 40 лучших процедур: Поиск подстроки.

Ретро - 40 лучших процедур: Поиск строки.

Ретро - 40 лучших процедур: Составление списка переменных.

Ретро - 40 лучших процедур: увеличение и копирование экрана.

Ретро - 40 лучших процедур: Удаление REM-строк.

Ретро - 40 лучших процедур: Удаление блока программы.

Советы экспертов - Игра Fredloader.

Советы экспертов - Игра Robin of Sherwood: The Touchstones of Rhianon.

Советы экспертов - Игра Scorpions: Die Machines.

Советы экспертов - Игра Terropods.

Страничка iS-DOS - Описание рестартов системы IS DOS.

Форум - Алгоритм распознавания символов.

Форум - Время выполнения недокументированных команд процессора Z80.

Форум - Концепция экрана высокого цветового разрешения.

Форум - Несколько Pokes к играм. Программа Hacman96.

Форум - По поводу новых DOS и BIOS для Спектрума.

Форум - Программа Multicolor на любой модели компьютера. Использование 2-го экрана для Multicolor'а. Демонстрация текста. Электронные журналы.

Форум - Проект ZX Config.

Форум - Усовершенствование Art Studio. Идеи относительно компрессии файлов.

Форум - Эмулятор ZX Spectrum на IBM. По поводу шестнадцатеричной системы счисления. Программа ZX-Stars. Странности в Elita

Форум - Эффекты на бордюре и Multicolor.

Читатель-читателю - ZX Spectrum 128 - новые возможности, новые проблемы.

Читатель-читателю - Группа 'Light'. Спектрум и экспертная система.

Читатель-читателю - Драйвер принтера для Scorpion'а.

Читатель-читателю - Печать чисел в различных системах счисления.

Читатель-читателю - Программирование аркадной игры со скроллингом экрана.

Читатель-читателю - Процедура печати меток ассемблера XAS для монитора-отладчика STS 4.3.

Этюды - Атрибутная бегущая строка. "Гасилка" экрана. Упрощенный вариант процедуры "Занавес". Процедура гащения картинки. Процедура проявления картинки по точкам.

Этюды - Графический эффект "цветные полосы".

Этюды - Драйвер экрана для печати по 64 символа в строке.

Этюды - Комплект защит загрузчиков.

Этюды - Обращение к диску в режиме IM 2. Работа с диском нестандартного формата.

Этюды - Печать символа, увеличенного в 8 раз. Программа "наливания" экрана. Процедура гашения экрана по точкам. Очистка экрана как в Terminator'е. Поиск последовательности символов в памяти. Система перекодировки символьного набора.

Этюды - Программа - каталогизатор дисков.

Этюды - Программа вывода значений амплитуды каналов муз. сопроцессора на бордюр.

Этюды - Программа вывода картинки.

Этюды - Программа зажигания спрайта.

Этюды - Программа очистки заданного окна экрана.

Этюды - Программа сортировки массива по возрастанию. Процедура заполнения экрана заданным атрибутом. Процедура проявления картинки. Эффект летящих навстречу звезд. "Душ", идущий из верхнего левого угла экрана. Процедура "осыпания" картинки по пиксельным линиям. Программа "вытягивания" картинки под углом в 45 градусов. Три процедуры "Scroll".

Этюды - Процедура печати чисел.

Этюды - Процедура прорисовки символа с помощью атрибутов.

Этюды - Процедура проявления картинки. Fade-OUT эффект (картинка уходит за края экрана). Графический эффект "Фонтан". Fade-OUT эффект, имитирующий выключение телевизора. Процедура "зажигания" картинки. Программа плавной прорисовки картинки.

Этюды - Процедура рисования линии.

Этюды - Процедура составления оптимальной таблицы символов.

Этюды - Скроллинг строк текста в заданном окне. Атрибутный скроллер. Диагональный скроллинг.

Этюды - Спрайтовый скроллер. Процедуры проявления экрана.

Этюды - Укороченная процедура индикации амплитуды каналов муз. сопроцессора. Способ вычитания константы из регистровой пары HL.

Этюды - Формула для вычисления дня недели.


Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
Обо всём - ONLINE.
Гости - О перспективах развития SPECCY.
Система - Многие пользователи не понимают зачем нужен IS-DOS, если есть tr-dos.

В этот день...   21 апреля

Релизов не было :(