ZX-Ревю 1994 №6 1993 г.

Возвращаясь к напечатанному - некоторые подробности о мониторе TURBO-90.


Некоторые подробности о мониторе TURBO-90

© Игорь Назаров (IWN), г. Нижний Новгород, 1994.

Вначале об аналогах дополни тельных команд монитора TURBO-90, которыми интересовался, в частности, Вадим Бодров.

1. Эквивалент команды "," по лучить не удалось, поскольку при выполнении функции USR addr в регистр А процессора заносится младший байт адреса, а не ноль.

Поэтому придется использовать примитивную программу, которую можно ввести хотя бы в мониторе TURBO-90 (далее - МТ90):

addr AF XOR А

СЗ 1E 39 JP 14622 Вызов программы: RANDOMIZE USR addr

При этом результат выводится в любую часть экрана, то есть:

ВНИМАНИЕ! В РЕВЮ-94, № 4, стр. 27, в схеме на рис.1 не указаны входы элемента D7.3 - должны быть 9 и 10. Кроме того, неправильно указан выход элемента D8.3 - дол жен быть 8, а не 11, как указано на схеме. PRINT: RANDOMIZE USR addr - в верхнюю; PRINT #0: RANDOMIZE USR addr - в нижнюю; LPRINT: RANDOMIZE USR addr - на принтер.

Только вот выдает она результат на 18-25 байтов меньше, чем просто ",". Это связано с длиной строки вызова. Истинное значение свободной памяти будет равно по лученному результату плюс длина информации в командной строке.

2. Эквивалент команды "*". Вход в МТ90:

а). RANDOMIZE USR 132

б). RANDOMIZE USR 96

в). RANDOMIZE USR 14648

3. Эквивалент команды "-". Установка турборежима.

а). РОКЕ 23604,82: РОКЕ 23605,75

б). RANDOMIZE USR 14639

4. Эквивалент команды "+". Отмена турборежима.

а). Достаточно одного POKE 23605,N (N<>75)

б). RANDOMIZE USR 14615

5. Эквивалент команды "("Вывод параметров заголовков файлов при загрузке с ленты.

а). RANDOMIZE USR 14596

б). RANDOMIZE USR 14593

в). POKE 23658,32 - параметры будут выводиться в десятичном виде;

г). РОКЕ 23658,160 - параметры будут выводиться в 16-ричном виде.

6. Эквивалент команды ")". Отмена вывода параметров заголовков файлов.

а). RANDOMIZE USR 14604

б). POKE 23658,0

Результат действия команд "(", ")" (и ещё один эффект) достигаются с помощью системной переменной FLAGS2 (23658):

Бит 7=1 - 16-ричный вид чисел в МТ90 При командах "," и "("

ROMCS-

VD2 КД521

Рис. 3 К555ЛЕ1

Рис. 4

возвфлщяясъ х ЯЯшЧЯШЖШОМУ

Бит 7=0 - десятичный вид чисел.

Бит 6=1 - выключение цифрового дампа памяти, расширенное поле ASCII в МТ90. Бит 6=0- вывод в МТ90 дампа памяти в DEC/HEX виде (в соответствии с битом 7). Бит 5=1- вывод параметров заголовка файла в команде "(". Бит 5=0 - отключение печати параметров файла - команда ")".

Биты 4.. .0 - используются Бейсиком. При установке параметров их можно игнорировать. Режим вывода DEC/HEX можно переключать и так: RAND0MIZE USR 14982

это инвертирует бит 7 переменной FLAGS2, а режим DUMP+ASCII или только ASCII - с помощью:

RAND0MIZE USR 14995

это инвертирует бит 6 переменной FLAGS2.

7. Полный сброс с очисткой памяти происходит при:

а). RAND0MIZE USR 99

б). Нажатие RESET и CAPS SHIFT

в). Нажатие на RESET, если байт по адресу 23568 не равен 1 (подробнее об этом - ниже). В дополнение к статье в ZX-PEВЮ-94, № 3, стр. 21-22, сообщаю:

1. МТ90 хранит адрес начала просматриваемой памяти по адресу #5САА (23722), а это, как всем известно, находится в памяти калькулятора.

МТ90 также портит при вызове слово по адресу #5САС (23724), используя его для хранения указателя на текущий регистр, а также слово по адресу #5САЕ (23726) -для хранения указателя стека SP.

2. Команда МТ90 "(" (SS+8) - возврат в Бейсик без очистки экрана, но с прекращением выполнения программы, то есть операторы, идущие за "*", не выполняются. Это достигается переходом на адрес #1303 из монитора.

3. Команда МТ90 ")" (SS+9) полностью равнозначна: RST 8

DEFB #FD

Это выдача 253-го сообщения из таблицы по адресу #1391, которая содержит всего-то 28 сообщений об ошибках и еще одно, которое выдаётся сразу же после сброса. Неужели создателям не пришло в голову число поменьше?

4. МТ90 при запуске вызывает подпрограмму #1255 (04699), вызывающуюся только при сбросе (в том числе и без очистки памяти), которая :

а). восстанавливает исходное значение системной переменной CHARS - адреса, определяющего символьный

набор;

б). включает режим прерываний IM 1;

в). восстанавливает значение регистра IY;

г). восстанавливает системные переменные REPDEL и REPPER;

д). восстанавливает системную переменную CHANS;

е). копирует из ПЗУ область адресов, подключенных к потокам каналов STRMS, а также область информации

0 каналах, при этом, записывая маркер её конца (#80) не туда, куда надо, изменяя информацию в первом дополнительно созданной блоке информации о канале.

Поэтому, если Вы подключаете новые каналы или имеете программное обеспечение, которое это делает, будьте осторожны при использовании МТ90 и кнопки RESET - при сбросе без очистки памяти также почти все восстанавливается. Однако для предотвращения неприятностей можете создать "пустышку" - неиспользуемый канал.

Кстати, Вам писали, что в ПЗУ TURB0-90 исправлена ошибка обработки немаскируемого прерывания NMI, так посмотрите - и увидите, что это больше походит на рудименты и атавизмы. При нажатии на кнопку "NMI" Вы вывалитесь в МТ90, в большинстве случаев бесполезный или зависающий.

Поток STRMS #FD, что по адресу #5С10 (23568) лучше не переключать, поскольку, если по адресу #5С10 содержится не 1, то, как только Вы нажмете кнопку RESET (даже без CAPS SHIFT), то обнаружите память своего Spectrum^ изумительно чистой, как асфальт после ливня. Отсюда выводы:

ПЕРВЫЙ, и самый главный: монитор TURB0-90 в большинстве реальных случаев бесполезен, но лучше иметь его, чем ничего.

ВТОРОЙ: чтобы образумить любителей щелкать кнопкой RESET, считающих, что в TURB0-90 всё можно, следует переустанавливать STRMS #FD, но не с помощью РОКЕ 23568,250: РОКЕ 23569,184

которые без ножа убивают Бейсик, а с помощью простенькой программки Rock'n'Roll:

1 REM FREEWARE

2 LET a=PEEK 23635+256*PEEK 23636+5

3 FOR b=a TO a+6

4 READ с

5 POKE b, с

6 NEXT b

7 PRINT "Press RESET for Rock'n'Roll"

(ВОЗОФЯЩЯЯСЪ х МЯШЧЯШЖШОМУ

8 DATA 33,250,184,34,16,92,201

9 RANDOMIZE USR a

Вот её дизассемблированный вид:

addr 21 FA B8 LD HL,#B8FA

22 10 5C LD (#5C10),HL C9 RET

А если совместно с ней использовать защиту от остановки программы? Например, отключение BREAK или установка количества строк в нижней части экрана равным нулю. Прощай тогда, основное достоинство прошивки ПЗУ TURBO-90...

Полезные подпрограммы МТ90, которых очень мало: #392F - установка турбо-режима.

#3BF2 - проверка на турбо-режим. Если он установлен, то будет выставлен флаг Z регистра F. #39С7 - печать числа, находящегося в DE, в шестнадцатеричном виде. Если при входе регистр A не равен нулю, то выводится только один байт, находящийся в регистре Е. #38С1 - вывод значения регистра A в 16-ричнвм виде.

#ЗВ03 - очистка экрана, восстановление всех регистров со стека и передача управления по RET. #ЗВЗЗ - INKEY (использует системную переменную LAST-KEY). Если прерывания запрещены, то эта подпрограмма успешно "подвесит" Ваш компьютер.

#3904 - включение режима печати параметров заголовка файла. Оператор "(".

* * *

Все программы, приведённые в этом разделе, были набраны при помощи ассемблера "ZEUS + ", версии V 3.1 ассемблера ZEUS, которую доработал Сергей Ханцис из Ижевска (поставляется в составе дистрибутивной дискеты "Утилиты-2"). Можем сказать, что это самая лучшая полностью дисковая версия из тех, которые нам приходилось встречать.

Стартовый адрес для всех блоков для примера выбран 40000. Естественно, Вы можете задать своё значение.

Для устранения возможных неоднозначностей, для каждой программы приводится шестнадцатеричный дамп с контрольными суммами.




СОДЕРЖАНИЕ:


  Оставте Ваш отзыв:

  НИК/ИМЯ
  ПОЧТА (шифруется)
  КОД



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

Похожие статьи:
От идиоторов - в следующем номере Вы обязательно встретите...
DJ Present - игры от DJ Vovan: Doom 48, Взрыв, Первый Миллион.
HOT GAMES - Лучшая десятка oт Magic Soft.
От авторов - С первым апреля дорогие читатели.
Мозаика - Размышления о рубрике "Видеообзор". Cheat в игре "НЛО - враг неизвестен". О подключении видеопроцессора Dendy к Speccy.

В этот день...   21 ноября