Глава 10. Калькулятор.
======================
В любое время, когда программа находится в режиме ввода текста, Вы
можете ее использовать как калькулятор для выполнения любых арифмети-
ческих или математических вычислений, если Вы запишете выражение, соот-
ветствующее Вашим требованиям. Результат Ваших вычислений может быть
присвоен одной из БЕЙСИКовских числовых переменных от М0 до М9, как будто
калькулятор имеет десять регистров памяти.
Когда калькулятор вызывается - [E] SS "C" - страница опускается на
две строки и высвечивается слово ASSES : В высвеченной зоне Вы можете те-
перь записать какое-либо выражение. Это может быть численное выражение,
результат которого тоже число, например 4 * 3 + 8 * 5, а может быть набор
чисел, функций, логических операций, имен переменных, операций над стрин-
гами. Если, например, Вы запишете выражение в виде стринга:
LET C$="m1+125.5*(INT(m2/m3)*(1+VAT)"
то Вы можете выполнить и VAL C$, если все входящие переменные М1, М2,
М3,
VAT и т.п. существуют и определены. Если результат не может быть получен
по какой-либо причине, т.е. вычисления прервутся, Вы получите вопрос
WHAT? и выражение, которое Вы записали, будет на экране до нажатия ка-
кой-либо другой клавиши.
Если результат будет выдан, перед Вами есть выбор запомнить его в
БЕЙСИКовской переменной от М0 до М9, для этого просто нажмите цифру от 0
до 9. Любая другая клавиша приведет Вас к другому тройному выбору - "U",
чтобы использовать результат, т.е. ввести его в текст, как будто он был
набран с клавиатуры; "N" - опустить результат, опустить и повторить ко-
манду, "Q" - отбой команды. Ваш текст не изменится, если Вы не нажимали
клавишу "R".
Имейте в виду, что не надо пытаться использовать результат, если
курсор стоит или приближается к строке нулевой длины. Напрямую вставить
текст туда невозможно, для этого надо использовать оператор INSERT.
Если в соответствии с какой-либо специфической ситуацией Вам необхо-
дима особенная последовательность выражений, Вы можете иметь ее на кассе-
те и впоследствии перезагрузить в TLW, когда необходимо. Однако, пре-
дусмотрите, чтобы не были при этом выполнены CLEAR или RUN, иначе те пе-
ременные, которые существуют у Вас могут быть потеряны.
ПРИЛОЖЕНИЕ 1. Технические данные.
=================================
Хотя эти данные и не нужны при нормальном использовании программы,
для серьезного пользователя мы их приводим, чтобы он имел возможность из
БЕЙСИКа определить значения некоторых системных переменных TLW.
Таблица адресов некоторых системных переменных.
===============================================
Блок TLW в машинных кодах от 5100 до 65535
Адрес вызова 5100
Адрес возврата во время печати 65200
Режим работы процессора прерывистый режим 2
Размер текстового файла от 0 до 25К в зависимости от RAMTOP.
Файл операторов управления печатью.
===================================
Формат: 24 различных оператора, каждый состоит из:
Байты от 1 до 5 - байты операторов ASCII
Байты от 6 до 9 - байты кодов, их значения от 0 до
254 / 255 - пробел/
Стандартный префикс - от 0 до 254 51219, один байт.
Блок кодов интерфейса принтера от 65176 до 65199 вкл.
Память калькулятора 10 БЕЙСИК переменных
от М0 до М9.
Переменные калькулятора Все БЕЙСИК переменные.
Длина включаемых стрингов соответствии с БЕЙСИКом.
Имена включаемых стринговых переменных от A$ до Z$.
Некоторые системные переменные:
Установка таймера 65203, 1 байт.
Вершина пространства текст. файла 65207, 2 байта.
Начало текстового файла 65209, 2 байта (RAMTOP+1).
Байт "возврат каретки" 65255, 1 байт.
Байт заполнения строки 65256, 1 байт.
Величина разбивки экрана 65270, 1 байт.
Адрес обращения к строчному принт. 65271, 1 байт.
Число байтов в буфере клавиатуры 65277, 1 байт.
Вершина текстового файла 65284, 2 байта.
Адрес курсора в файле 65286, 2 байта.
Колонка курсора в тексте 65288, 1 байт.
Строка курсора в тексте 65290, 2 байта.
Левое поле 65295, 1 байт.
Правое поле 65296, 1 байт.
Интервал между строками при печати 65299, 1 байт.
Количество печатаемых копий 65300, 1 байт.
Значение табуляции 65303, 1 байт.
Буфер клавиатуры 65514, 2 байта.
Все перечисленные данные могут быть вычислены через БЕЙСИК:
PRINT PEEK ADRESS для однобайтных переменных.
PRINT PEEK ADRESS + 256 * PEEK(ADRESS+1) для двухбайтных.
Копирование файла операторов управления принтером.
==================================================
На кассете с TLW записана программа, которая может дать Вам распе-
чатку операторов управления принтером. Ее имя - "TLW - tokens". Она может
оказаться полезной для пользователя. Сводка этих операторов не включена в
кодовый блок TLW из соображений экономии памяти, но в случае потребности
в них, прилагаемая программа вполне достаточна.
Приложение 2
============
Сводка команд
=============
Группа 1. Перемещение курсора
=============================
Вправо на позицию CS "8"
Влево на позицию CS "5"
Вверх на строку CS "7"
Вниз на строку CS "6"
Вправо на величину табуляции CS "1"
Вправо на слово CS "4"
Влево на слово CS "3"
Вправо на предлож. SS "W"
Вправо до конца строки [E] SS "8"
Влево к началу строки [E] SS "5"
Вверх влево на этой странице [E] SS "7"
Влево вниз на этой странице [E] SS "6"
Влево вверх на след.страницу [E] "D"
Влево вверх на послед.странице [E] "U"
К началу файла [E] "A"
К концу файла [E] "Z"
К заданной строке [E] "N"
Страницу вверх на строку [E] SS "3"
Группа 2. Обработка текста
==========================
Стереть символ CS "0"
Стереть строку до конца CS "9"
Стереть до конца файла [E] SS "9"
Стереть весь текст [E] SS "Z"
Переключатель INSERT/OVERWRITE
(вставить/переписать) [E] "1"
Сдвинуть текст влево SS "Q"
Сдвинуть текст вправо SS "E"
Централизовать текст в строке [E] "H"
Выровнять данную строку [E] SS "J"
Сжать строку [E] SS "L"
Переоформить текст до конца абзаца [E] SS "R"
Вставить оператор управления печатью SS "1"
Вставить символ копирайт [E] SS "К"
Повторить блок текста [E] "R"
Уничтожить блок текста [E] "K"
Найти/заменить текст [E] "X"
Группа 3. Утилиты и структурные команды
=======================================
Вкл/выкл.выравнивания строк [E] "J"
Вкл/выкл.переноса строк [E] "W"
Переключения регистра печати
на одну строку [E] SS "2"
Включить БЕЙСИК-стринг [E] SS "1"
Вкл/выкл.контурную линию [E] "O"
Вкл/выкл.видеомаркеры [E] "V"
Верхний/нижний регистр CS "2"
Изменение левого поля [E] "M"
Изменение правого поля [E] SS "M"
Изменить разбивку экрана [E] SS "V"
Изменить величину табуляции [E] SS "T"
Изменение цвета бордюра [E] SS "B"
Изменение цвета хэдера [E] SS "H"
Подсчет слов/байт [E] SS "W"
Калькулятор [E] SS "C"
Установка таймера [E] SS "X"
Отбой команды SS "Q"
Возврат в БЕЙСИК [E] "B"
Группа 4. Команды печати
========================
Вызов меню печати [E] "G"
Вызов файла операторов управления
принтером [E] "T"
Напечатать текст [E] "P"
Группа 5. Команды ввода/вывода
==============================
Загрузить текст [E] "L"
Записать текст [E] "S"
Отформатировать картридж [E] "F"
Раскаталогизировать картридж [E] "C"
Стереть картридж [E] "E"
Приложение 3.
=============
Подключение принтера.
=====================
Существует много типов принтерных интерфейсов, приемлемых для Спект-
румов, большинство из них по-своему преобразуют сигналы, которые поступа-
ют через разъем компьютера в форму, необходимую для работы принтера. TLW
хорошо оснащена для того чтобы работать со многими из интерфейсов. Эта
глава посвящена настройке программы для работы с разнообразными интер-
фейсами.
В TLW применен общепринятый подход, согласно которому вывод на экран
производится по 2 каналу, а выход на строчный принтер - по третьему кана-
лу. В то же время, ZX-принтер работает через генератор символов по каналу
2 и сильно отличается от строчного принтера. Интерфейс, который Вы
используете, может быть вполне самообеспечен, т.е. необходимости в специ-
альных кодах для его запуска нет, но может для своей работы потребовать
дополнительные коды либо внутри TLW, либо где-нибудь в RAM. Тогда эта
последовательность кодов будет служить связующим звеном между компьютером
и принтером при всяком обращении к принтеру. Она может, например, просто
перезадать адрес вызова 3 канала так, чтобы задействовалась стандартная
инструкция "Restart 10", которую TLW использует для выдачи символа, со-
держащегося в регистре А микропроцессора на канал принтера, или можно
просто заменить байт "Restart 10" какой-то другой процедурой, удовлетво-
ряющей требованиям принтера другим способом. Информация, приведенная ни-
же, позволяет Вам решить, что сделать в конкретной ситуации или как моди-
фицировать программу, чтобы достичь желаемого результата.
После того как Вы сделаете необходимые изменения в программе и убе-
дитесь, что принтер работает нормально, Вам надо вернуться в БЕЙСИК и за-
писать модифицированную программу TLW на внешний носитель для дальнейшего
использования без переналадки. После того как Вы "персонализировали" сво-
ими изменениями программу, Вам надо задать "базовое" время таймера, а за-
тем записать программу используя строку 220 (для ленты) или 320 (для мик-
родрайва).
А. Интерфейс ZXLPRINT III.
==========================
(Дополнительных кодов не надо).
Для работы этого интерфейса необходимо, до первого обращения, выпол-
нить в БЕЙСИКе определенную последовательность выражений, в результате
которых любое обращение к 3 каналу естественным образом пойдет на строч-
ный принтер. Это может быть выполнено в любое время, желательно при пер-
вой загрузке программы. Вам может быть также потребуется ввести адрес с
длиной строки, которую Вы хотите печатать (до 132). В программе управле-
ния печатью (п. 6.4.1.) введите адрес вызова "0" и пересмотрите, если не-
обходимо, байты "возврат каретки" и "перевод строки", а затем введите 1 в
качестве стандартного префикса к операторам управления печатью.
Б. Интерфейс типа TASPRINT.
===========================
(Необходим собственный кодовый блок).
Этот тип интерфейса работает от собственного блока кодов, который
должен быть установлен в буфере ZX-принтера до начала работы интерфейса.
Этот блок задает адрес вызова канала 3 при обращении по адресу 23296 и,
хотя ему это необходимо только один раз, более просто и надежнее обра-
щаться к нему всякий раз при обращении к принтеру. Этот кодовый блок на-
зывается "TASBUFF" и загружается через БЕЙСИК до TLW. Адрес вызова 23296
вводится в программу управления печатью (п.6.4.1.). Введите также в соот-
ветствии с требованиями принтера байты "возврат каретки" и "перевода
строки" и установите стандартный префикс операторов управления печатью -
27.
В. Интерфейс типа KEMPSTON.
===========================
Коды для этого интерфейса уже записаны в TLW, но необходимо выпол-
нить небольшие изменения для того, чтобы они работали вместо байта
"RESTART 10", предназначенного для вызова принтера по установленному ка-
налу. Фактически два первых байта кемпстоновских кодов забиты байтами
"RESTART 10" и "RETURN", поэтому все, что Вам надо сделать - это вер-
нуться в БЕЙСИК после загрузки программы и выполнить два прямых ввода:
POKE 65176,245: POKE 65177,1 .
Теперь интерфейс будет работать правильно. Введите 0 в программу управле-
ния печатью (п.6.4.1.) и стандартные байты "возврат каретки" и "перевод
строки" для Вашего принтера. Вам также надо определить значение префикса,
чтобы наиболее просто использовать операторы управления печатью.
Г. Интерфейс типа MOREX.
========================
Коды для этого интерфейса не содержатся в TLW, но те 18 байтов, ко-
торые Вам потребуются, легко вводятся в пространство, занимаемое кемпсто-
новскими кодами, см. выше. Вам надо написать простую БЕЙСИК-программу и
запустить ее после загрузки.
Например такую:
10 DATA 245, 219, 251, 230, 1, 32, 250, 241
20 DATA 211, 251, 62, 1, 211, 127, 175, 211, 126, 201
30 DATA FOR N=0 TO 17: READ A: POKE 65176 + N,A
40 NEXT N: STOP
Теперь Вам надо установить адрес вызова "0" в программе управления
печатью (п.6.4.1.) и задать байты "возврат каретки" и "перевод строки" в
соответствии с требованиями принтера. Можно также для удобства ввести
префикс операторов управления печатью.
Д. Другие интерфейсы. Общий обзор.
==================================
Если у Вас есть интерфейс, который не вошел в вышеприведенное описа-
ние, то Вам необходимо выполнить некоторые приготовления для его работы в
соответствии с литературой, прилагающейся к нему. Вы можете использовать
два основных способа. Вы можете использовать 256 байтное пространство бу-
фера ZX-принтера для размещения некоторых кодов, которые будут работать
как посредники между компьютером и интерфейсом (это пространство - от
23295 до 23551 включительно) или Вы можете для этой цели использовать
пространство, занимаемое кемпстоновскими кодами. Важным при этом является
принять байт "RESTART 10" в 65176 или его отвергнуть. Этот байт является
первым в последловательности из 27 байтов. При этом помните, что всякий
байт, подлежащий передаче на принтер, будет хранится в регистре А про-
цессора Z80 и обращение по этому адресу использует этот байт и вернется в
TLW.