NEWS  
    versions:
4.0b

все версии одним архивом
автор: Борис Курицын (Boris Kuritsin)
страна/город: Украина/Черкассы
годы выпуска: 1993, 1994
минимальные системные требования: ZX Spectrum 48k (Beta Disk Interface необязателен)
исходники: нет
 

Текстовый редактор BK-Write (авторское описание)

Версия 4.0
(C) 1993,94 БОРИС КУРИЦЫН

ТЕКСТОВЫЙ РЕДАКТОР
ДЛЯ SINCLAIR - СОВМЕСТИМЫХ
ПЕРСОНАЛЬНЫХ КОМПЬЮТЕРОВ

Новое в версии 4.0

Новый метод отображения control-символов, позволивший сократить память, занимаемую шрифтом; новый шрифт; небольшие изменения в интерфейсе; новый драйвер клавиатуры PolyGlot v5.4 с возможностью смены клавиатурной раскладки; автоматическое детектирование Kempston-джойстика; исправление некоторых ошибок и др.; удалена команда "Paging", как малоэффективная.

Введение

BK Write (старое название - Speccy Write) является текстовым редактором общего назначения, поддерживающим альтернативную кодировку славянских символов, что позволяет использовать его для подготовки текстов с последующим использованием их на IBM PC - совместимых ПЭВМ.
Редактор работает со стандартным форматом записи на магнитную ленту в компьютерах ZX Spectrum и дисковой системой TR-DOS 5.xx. Рекомендуется также применять джойстик Кэмпстон для более удобного перемещения курсора. Редактор содержит буферизированный драйвер клавиатуры, что существенно повышает комфортность ввода текста.
Драйвер клавиатуры редактора подчиняется системным переменным, определяющим временные и прочие параметры клавиатуры. Таким образом, пользователь может легко настроить клавиатуру "под себя". Драйвер клавиатуры буферизирован, длина буфера 16 символов. Когда Вы вводите текст достаточно быстро, при обработке клавиш не перерисовывается экран, что позволяет обрабатывать Ваш ввод быстрее. Экран будет перерисован, как только Вы сделаете небольшую паузу в наборе.

Память

При загрузке редактор занимает всю доступную в системе память, оставляя в области Бейсика ровно столько памяти, сколько необходимо для работы TR-DOS. В зависимости от версии редактора и загрузчика объем памяти, доступной для редактирования лежит в пределах 29..31 Кб. Объем памяти можно увеличить, используя команду ext sh + H (см. раздел ПРОЧИЕ КОМАНДЫ). Если Вы используете интерфейс принтера, требующий загрузки драйвера, то драйвер следует поместить в буфере ZX-Printer'а (адреса #5B00 .. #5BFF).

Соглашения описания

В настоящем руководстве введены обозначения:
sh + <символ> обозначает нажатие комбинации клавиш Symbol Shift и <символ> для исполнения описываемой операции;
caps + <символ> обозначает нажатие комбинации клавиш Caps Shift и <символ> для исполнения описываемой операции;
ext <символ> обозначает нажатие клавиши Extend или комбинации Caps Shift + Symbol Shift с последующим нажатием клавиши <символ>.

Соглашения редактора

Все вопросы редактора, требующие выбора "Да / Нет", заканчиваются знаком "?". Для положительного ответа на такой вопрос нажмите "y". Любая другая клавиша соответствует отрицательному ответу. Все запросы, связанные с полем ввода (курсор типа "инверсный прямоугольник"), можно прекратить, введя пустую строку (кроме команд ext K, ext sh + K) или нажав sh + Q. Очистить поле ввода для новой строки можно нажатием sh + E. Действие кнопки Кэмпстон джойстика аналогично нажатию клавиши Extend, действие ручки - нажатию клавиш со стрелками. На все разрушающие операции с текстом редактор требует подтверждения, если текущая версия редактируемого файла не была сохранена на внешнем носителе. При невозможности выполнить требуемую операцию по какой-либо причине, редактор выдает непродолжительный звуковой сигнал.
Ответы на вопросы редактора представляют собой нажатие одной клавиши, в одних случаях "Y" или "N", в других - нажатия тех клавиш, которые выделены в меню, например, для выбора опции shell to Dos необходимо нажать клавишу "D". Но в русском режиме это не сработает. Чтобы выбрать опцию в русском режиме вместо одной лишь клавиши "D" нажмите ext D, или, если Вам больше нравится, временно перейдите в латинский режим и нажмите "D".
На время выполнения команд гасится курсор. Его появление является признаком возможности продолжения работы.

Информация на экране

В нижней части экрана расположены информационная и флаговая строки. Первая описывает состояние редактируемого текста, вторая показывает режимы работы редактора и клавиатуры.

Информационная строка:

125| 10|info.txt | * |14710
где: 14710 - длина файла, * - означает, что файл в текущей версии не сохранен, info.txt - текущее имя файла, 10 - колонка, в которой находится курсор, 125 - строка, в которой находится курсор.

Флаговая строка показывает состояние флагов режимов:
v Lck / Lock, обозначающий, что часть текста заблокирована (смотри главу "Блокировка текста");
v Ind / Indent (Смотри описание команды Caps Shift + 9);
v Ins / Insert - показывает, что текст вводится в режиме вставки;
v Nat / National - показывает, что вводятся символы русскогo, украинского и белорусского алфавита;
v Cap / Capitals Lock - показывает, что текст вводится заглавными буквами;
v Ext / Extend mode - показывает, что редактор находится в РАСШИРЕННОМ режиме. С использованием этого режима активируется большинство команд редактора.
Если какой-либо из режимов включен, соответствующий флаг виден на экране.
В правой колонке экрана расположена ЛИНЕЙКА ПРОКРУТКИ. Она служит для наглядного изображения относительного положения курсора в файле. Вся линейка символизирует файл, бегунок на ней - текущее положение курсора в файле. Верхнее положение бегунка на линейке соответствует началу файла. Для повышения быстродействия расчет линейки ведется в усеченных числах, поэтому:
-линейка активна только при длине файла, большей 256;
-количество возможных положений бегунка растет с увеличением длины файла;
Справедливости ради надо отметить, что и необходимость в линейке прокрутки появляется лишь при больших длинах файлов.

Работа на компютере РОБИК версии 3

Компьютеры РОБИК версии 3 (Selto-ROTOR Computer V03) имеют отличия ПЗУ от стандартного, связанные с преимущественно программной реализацией русификации. В частности, они имеют полностью измененную таблицу скен-кодов клавиатуры. С версии редактора 4.0 для работы на РОБИКе версии 03 необходимо подгрузить файл совместомости, как описано в главе "Настройка раскладки клавиатуры".

Команды редактора

А. Перемещение курсора.

caps + 5..8
Перемещение курсора на 1 символ в направлении стрелки.

ext caps + 5/8
Перемещение курсора в начало/конец строки.

ext caps +7/6
Перемещение курсора на страницу вверх/вниз.

Inverse Video (caps + 4)
Перемещение курсора в начало следующего слова. Разделителем слов считается пробел.

True Video (caps + 3)
Перемещение курсора в конец предыдущего слова.

sh + Q
Перемещение курсора в начало текста.

sh + W
Перемещение курсора в конец текста.

Б. Изменение состояния флагов.

sh + I
Режим вставки/замены: при наборе очередной символ или вставляется в позиции курсора, или заменяет текущий. Если в данной позиции заменять нечего, символ вставляется.

Caps Lock (caps + 2)
Флаг режима ввода заглавных букв.

Edit (caps + 1)
Флаг режима ввода славянских символов.

Graphics (Caps + 9)
Флаг режима Indent. В этом режиме при создании новой строки в нее переносятся все пробелы до первого печатного символа из текущей строки, что удобно при наборе текстов программ.

В. Простейшие операции редактирования.

Delete (caps + 0)
Удалить символ слева от курсора, в режиме замены - смещает курсор влево.

ext Delete (ext caps + 0), а также sh + E
Удалить символ в позиции курсора.

В1. Деление текста на строки.

Все символы текста редактор рассматривает как отображаемые. И только один символ имеет специальное назначение - символ конца строки ASCII 13 (CR). Клавиша Enter служит для вставки этого символа в текст.
Таким образом, если Вам необходимо создать новую строку за текущей, поставьте курсор в конец строки и нажмите Enter. Если необходимо существующую строку разбить на две, поставте курсор на первый переносимый символ и нажмите Enter. Если необходимо выполнить обратную операцию - слияние строк, поставьте курсор в начало нижней сливаемой строки и нажмите Delete.

Г. Выход из программы
и внешние операции.

ext Q
Внешние операции и завершение работы. Предлагает на выбор:
shell to Dos - временный выход в TR-DOS; возврат в редактор по команде RETURN. Разумеется, из TR-DOS нельзя пытаться запустить другую программу.

User commands - исполнение программы, определенной пользователем. Эту программу Вы должны внести в файл редактора WRITE.B <B>, в строках 300..7000. Это может быть программа инициализации клавиатуры, инсталляции драйвера принтера и т.п. Естественно, эта программа не может включать оператор CLEAR. Ваша программа должна оканчиваться оператором RUN. От размера программы зависит размер буфера редактирования. Если Вам нужен максимальный буфер, замените существующую программу на:
300 RUN
В дистрибутивном комплекте опция User commands инициализирует интерфейс принтера ZX Lprint III на неинтерпретирующую передачу данных, что необходимо для печати из редактора. После внесения изменений файл должен быть записан командой
SAVE "WRITE.B" LINE 8000 на магнитную ленту или командой
PRINT USR 15619:REM:SAVE "WRITE.B" LINE 8000 на диск.
Предварительно исходную версию файла необходимо или удалить, или переименовать.

Quit editor - выход из редактора. В дисковой версии пытается запустить программу boot с текущего дисковода. В случае неудачи выходит в TR-DOS.

Для запуска опции нажмите соответственно D, U или Q. Любая другая клавиша возвращает к редактированию.

Д. Загрузка и сохранение.

При операциях ввода/вывода появляется панель с названием операции. Вам предлагается ввести или отредактировать имя устройства, с которым будет выполняться операция, как-то: дисководы A,B,C,D и магнитная лента T. Затем необходимо ввести имя файла. Это может быть строка из любых 10-ти символов, но не русских, поскольку на имя, содержащее русские символы, будут "плохо" реагировать большинство программ. Кроме того, при работе с дисководом значимы лишь первые 8 символов имени. Чтобы отличать тексты от других файлов, рекомендуется оканчивать имя псевдорасширением ".t", например, "HELP.T". Редактор проверяет, подключена ли
дисковая система перед обращением к ней, что уменьшает возможность потери данных. Если система подключена, но к ней не было сделано ни одного обращения (и система не создала свой резидентный блок параметров), она считается неподключенной. При записи на диск, если файл с указанным именем существует, редактор предлагает или переписать файл заново, или отказаться от записи.

ext sh + C
Просмотр каталога диска; для возврата нажмите любую клавишу.

ext X
Открыть файл для редактирования; очищает буфер редактирования и загружает указанный файл.

ext L
Догрузка текста в позицию курсора; существующий текст раздвигается.

ext S
Сохранение всего текста в файле.

ext sh + S
Сохранение блока как файла.

Д1. Ошибки внешних устройств.

BK Write перехватывает все ошибочные ситуации устройств, могущие вызвать выход в СОС. Возможно, Вы имеете единственную копию файла, который хотите прочитать, но файл записан с ошибкой. В таком случае:
v для диска - нажмите "I" в ответ на запрос TR-DOS: Disc error. Retry, Abort, Ignore?
v для ленты - нажмите "Y" в ответ за запрос редактора: Tape error. Ignore ?

Е. Блочные операции.

Специально выделенная часть текста, именуемая блоком, рассматривается как одно целое и выделяется на экране красным фоном. Для выполнения операции копирования блока размером N символов, в буфере редактирования должно быть свободно N*2 байт минимум. Когда устанавливается маркер начала блока, текущий блок (если он существует) снимается, но когда маркер начала уже установлен и устанавливается маркер конца, то его (маркер) можно переставлять неоднократно. Если производится попытка выполнить какую-либо команду работы с блоком, в момент, когда блок не отмечен, выдается предупреждение в виде звукового сигнала.

ext B
Установить маркер начала блока, в позиции курсора, если блок существует, он отменяется и переустанавливается в текущей позиции.

ext E
Установить маркер конца блока, блок заканчивается на символе ПЕРЕД курсором; конец блока может быть отмечен только после отметки его начала и только ЗА его началом.

ext V
Отметить часть текущей строки от курсора до ее конца как блок (НЕ включая символ конца строки).

ext sh + V
Отметить часть текущей строки от курсора до ее конца как блок (включая символ конца строки).

ext M
Отметить строки текста как блок. Блок начинается со строки, в которой находится курсор. Перемещением курсора (caps + 6,7 или Kempston joystick'ом) установите нижнюю границу блока и нажмите любую другую клавишу для завершения.

ext D
Удалить блок.

ext C
Скопировать блок в позицию курсора; курсор может также находится в пределах самого блока.

ext R
Снять маркировку блока.

Две следующие операции служат для т. н. индентирования. Суть процедуры в том, что каждая колонка индентируемого текста сдвигается вправо на количество позиций, равное ширине индентирования. Это выполняется посредством вставки в каждую строку индентируемого текста некоторого количества пробелов.
Обратная операция удаляет эти пробелы. Для правильного выполнения операции отмечайте блок так, чтоб он начинался в первой позиции строки. Если строка лишь частично охвачена блоком, она также индентируется. Лучший метод отметить блок для индентирования - использовать команду ext M.

ext O
Индентировать блок. Допустимые значения 0-999.

ext sh + O
Деиндентировать блок. Допустимые значения 0-999.

Смотри раздел ПЕЧАТЬ относительно вывода блока на печать.

Смотри раздел ЗАГРУЗКА И СОХРАНЕНИЕ относительно сохранения блока в виде файла.

Ж. Поиск и замена.

ext F
Поиск и замена по контексту. Предлагается ввести 2 строки: что искать и на что заменять. Если строка замены пустая, выполняется только поиск. Поиск ведется от положения курсора до конца текста. При обнаружении вхождения предлагается:
Change - заменить и продолжить поиск;
change All - заменить это и последующие вхождения;
Next - искать следующее вхождение;
Quit - прекратить поиск.
Прерывается нажатием любой клавиши. Во время выполнения операции линейка прокрутки показывает позицию поиска.

ext G
Продолжение или повторное исполнение команды 'поиск/замена' с параметрами, установленными в последний запуск команды ext F с текущего положения курсора.
Выполнение обоих команд можно остановить, нажав Break.

З. Печать.

Может использоваться любой принтер, подключенный через любой интерфейс стандартным образом на поток #3. Из редактора можно печатать русскоязычные тексты, только если принтер поддерживает альтернативную кодировку символов IBM PC или если в принтер загружен шрифт кодовой страницы 866 (принтеры D100E/PC, Epson и т. п.). Начиная с версии 1.97, редактор поддерживает принтеры, способные печатать текст в кодировке КОИ 8. Поскольку нет общего метода включения кодировки КОИ 8, редактор не реализует это переключение. Выполняйте включение режима "КОИ 8" на принтере до запуска редактора методом, специфичным для Вашего принтера. Действия по включению КОИ 8 Вы можете встроить в редактор через опцию User Commands (см. команду ext Q).

ext W
Печать всего текста на принтере.

ext sh+W
Печать блока на принтере.

ext J
Протяжка страницы на принтере.

ext K
Установка параметров вывода на принтер; ответ на каждый вопрос может быть y("да") или n("нет"); вопросы:
-Send LF ?
определяет, нужно ли передавать на принтер код Line Feed вместе с кодом Carriage Return. Это зависит от драйвера и принтера. Данная установка по смыслу соответствует опции Line Feed в меню Print графического редактора ArtStudio;
-Eject page?
нужно ли выбрасывать страницу из принтера после выполнения команды печати.
- KOI 8 Recoding ?
нужно ли перекодировать текст в КОИ 8. В этом случае все символы, не имеющие отображения в кодировке КОИ 8, выводятся как "*".

И. Блокировка текста.

Нетрудно видеть, что редактор работает несколько замедленно. Этот недостаток является продолжением его достоинств. В редактор введено средство, имитирующее уменьшение длины текста, что позволяет ускорить обработку. Суть команды блокировки ext P в том, что часть текста от его начала до курсора "прячется" в специальном буфере блокировки и на это время перестаeт быть доступной для редактирования. Повторное введение команды разблокирует текст. Узнать длину заблокированного текста можно, используя команду ext U. При блокировке/разблокировке текста сбрасывается отметка блока. При многих операциях (например, операциях ввода/вывода), текст разблокируется (и, как следствие, сбрасывается отметка блока).
Пока текст заблокирован, его часть как бы не существует до разблокировки или до использования одной из разблокирующих операций (например, ext W), поэтому не стоит пугаться, если куда-то исчезло начало файла, посмотрите, может, включен флаг Lck?

К. Форматирование текста.

Функции форматирования применяются при редактировании текстов для придания им эстетичного вида. Функции форматирования редактора BK Write позволяют представить текст в виде определенного количества колонок, с разрывом слов или без него, с выравниванием правого края или без него, с включением левого поля, с созданием абзацного отступа. Также возможно центрировать заголовки. Другими словами, в этой области редактор BK Write не уступает по возможностям наиболее развитому редактору The Last Word 2.
Подробное описание команд форматирования вынесено в ПРИЛОЖЕНИЕ 1.

Л. Прочие команды.

ext U
Показывает объем свободной памяти, размер блокированного текста, размер блока.

ext N
Переход к строке по её номеру. Допустимы значения 0-65535.

ext H
Выдает на экран список команд редактора в краткой форме.

ext sh + H
Удаляет из памяти команду ext H, освобождая тем самым около 900 байт для буфера редактирования дополнительно.

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

ext A
Изменение регистра латинских символов от курсора до конца строки.

ext P
Блокировать текст от начала до курсора; если текст уже блокирован - он разблокируется; смотри раздел "Блокировка текста".

ext Z
Удаляет из буфера весь текст.

Национальные режимы клавиатуры и настройка раскладки клавиатуры

Драйвер PolyGlot v5.4 позволяет менять раскладки клавиатуры. Таблицы для трех раскладок: ЯВЕРТЫ, ЙЦУКЕН и ЦУКЕНГ поставляются вместе с редактором.

Раскладка ЯВЕРТЫ:

+---+---+---+---+---+---+---+---+---+---+
¦ 1 ¦ 2 ¦ 3 ¦ 4 ¦ 5 ¦ 6 ¦ 7 ¦ 8 ¦ 9 ¦ 0 ¦
¦Ю! ¦ю@ ¦Ё# ¦ё$ ¦Ў% ¦ў& ¦ ' ¦ ( ¦ ) ¦ъ_ ¦
+---+---+---+---+---+---+---+---+---+---+-----+
¦Q Я¦W В¦Е Е¦R Р¦T T¦Y Ы¦U У¦I И¦О О¦P П¦enter¦
¦ . ¦ . ¦ < ¦ > ¦ш [¦щ ]¦I ;¦i "¦ . ¦ . ¦enter¦
+---+---+---+---+---+---+---+---+---+---+-----+


LT-+T-+T-+T-+T-+T-+T-+T-+T-+T-+------
¦AА¦SС¦DД¦FФ¦GГ¦HХ¦JЙ¦KК¦LЛ¦
¦Ч~¦Э|¦э\¦Ш{¦Щ}¦ч^¦ -¦ +¦ =¦
LT-+T-+T-+T-+T-+T-+T-+T-+--+¬
¦ZЗ¦XЬ¦CЦ¦VЖ¦BБ¦NН¦MМ¦Symb ¦
¦ :¦Ю`¦Ї?¦ї/¦ *¦ ,¦ .¦Shift¦
---+--+--+--+--+--+--+--+--T---
¦Caps ¦ Space ¦
¦Shift¦ ¦
L-----+---------------------

Раскладка ЙЦУКЕН:

---T--T--T--T--T--T--T--T--T--¬
¦1 ¦2 ¦3 ¦4 ¦5 ¦6 ¦7 ¦8 ¦9 ¦0 ¦
¦Ю!¦ю@¦Ё#¦ё$¦Ў%¦ў&¦ '¦ (¦ )¦ъ_¦
LT-+T-+T-+T-+T-+T-+T-+T-+T-+T-+T-----¬
¦QЙ¦WЦ¦EУ¦RК¦TЕ¦YН¦UГ¦IШ¦OЩ¦PЗ¦Enter¦
¦ ¦ ¦ ¦ <¦ >¦х[¦ж]¦ ¦I;¦i"¦ ¦
LT-+T-+T-+T-+T-+T-+T-+T-+T-+T-+------
¦AФ¦SЫ¦DВ¦FА¦GП¦HР¦JО¦KЛ¦LД¦
¦Б~¦Э|¦э\¦Х{¦Ж}¦б^¦ -¦ +¦ =¦
LT-+T-+T-+T-+T-+T-+T-+T-+--+¬
¦ZЯ¦XЧ¦CС¦VМ¦BИ¦NТ¦MЬ¦Symb ¦
¦ :¦Ю`¦Ї?¦ї/¦ *¦ ,¦ .¦Shift¦
---+--+--+--+--+--+--+--+--T---
¦Caps ¦ Space ¦
¦Shift¦ ¦
L-----+---------------------

Раскладка ЦУКЕНГ:

---T--T--T--T--T--T--T--T--T--¬
¦1 ¦2 ¦3 ¦4 ¦5 ¦6 ¦7 ¦8 ¦9 ¦0 ¦
¦Ю!¦ю@¦Ё#¦ё$¦Ў%¦ў&¦ '¦ (¦ )¦ъ_¦
LT-+T-+T-+T-+T-+T-+T-+T-+T-+T-+T-----¬
¦QЦ¦WУ¦EК¦RЕ¦TН¦YГ¦UШ¦IЩ¦OЗ¦PХ¦Enter¦
¦ ¦ ¦ ¦ <¦ >¦й[¦ж]¦ ¦I;¦i"¦ ¦
LT-+T-+T-+T-+T-+T-+T-+T-+T-+T-+------
¦AФ¦SЫ¦DВ¦FА¦GП¦HР¦JО¦KЛ¦LД¦
¦Б~¦Э|¦э\¦Й{¦Ж}¦б^¦ -¦ +¦ =¦
LT-+T-+T-+T-+T-+T-+T-+T-+--+¬
¦ZЯ¦XЧ¦CС¦VМ¦BИ¦NТ¦MЬ¦Symb ¦
¦ :¦Ю`¦Ї?¦ї/¦ *¦ ,¦ .¦Shift¦
---+--+--+--+--+--+--+--+--T---
¦Caps ¦ Space ¦
¦Shift¦ ¦
L-----+---------------------

Здесь:
г=T=¬
СИМВОЛ ЛАТИНСКИЙ -¦S¦С¦- СИМВОЛ НАЦИОНАЛЬНЫЙ
¦-+-¦
СИМВОЛ НАЦИОН. ---¦Э¦|¦- СИМВОЛ ЛАТИНСКИЙ
ПРИ НАЖАТИИ С L=¦=- ПРИ НАЖАТИИ С
Symbol Shift Symbol Shift

Те символы, которые встречаются в таблице 1 раз, подчиняются флагу Caps Lock. Остальные вводятся заглавными или прописными через отдельные комбинации клавиш.
Для смены раскладки необходимо модифицировать файл WRITE.E, исполнив следующие команды (если Вы работаете с диском, команды ввода/вывода должны даваться для дисковой системы):

CLEAR 65535 (контроль целостности ОЗУ)
CLEAR 40000
LOAD "CF.EXE" CODE

Далее должен быть загружен файл поддержки раскладки:
kt_qw.c, kt_jc.c или kt_cu.c, что соответствует раскладкам:
kt_qw.c - яверты
kt_jc.c - йцукен
kt_cu.c - цукенг

Например,
LOAD "kt_cu.c" CODE

Если у вас компьютер "Selto Rotor Computer v03" (именно версии 03), то необходимо догрузить файл kt_r03.c:
LOAD "kt_r03.c" CODE

Теперь остаётся записать новую версию файла WRITE.E:
SAVE "WRITE.E" CODE 54400,11100
Рекомендуется сохранить предыдущую версию файла (на всякий лучай).
Внимание!
Изменять и сохранять файл WRITE.E необходимо НЕ ЗАПУСКАЯ ЕГО!
При работе с лентой, создав новую копию WRITE.E, создайте (используя её) новую копию WRITE.

Совместимость

Вообще говоря, редактор очень мало зависит от функций ПЗУ и несовместимость на этой почве маловероятна. Все же, ниже приводится полный список областей ПЗУ и системных областей, содержимое которых небезразлично для BK Write:

1. Весь драйвер клавиатуры; от KEY_SCAN (#28E) до (#3B4).
2. Модуль поддержки динамика; от BEEPER (#3B5) до (#3F7).
3. Драйвер магнитной ленты; от SA_BYTES (#4C2) до конца LD_BYTES (#604).
4. Подпрограмма BORDER_A (#2297).
5. Подпрограмма FREE_MEM (#1F1A).
6. Подпрограмма CLS (#D6B).
7. Подпрограмма CH_OPEN (#1601).
8. Прерывание RST #10.
9. Исполнитель системных функций TR-DOS (#3D13).
10.Подпрограмма Break_Key (#1F54).

Версия TR-DOS должна быть не ниже 5.01.

Маленькие хитрости в BK Write

1. Настройка клавиатуры.

Как было указано в инструкции, BK Write использует (хоть и особым образом) части стандартного драйвера клавиатуры и поэтому подчиняется всем системным переменным, устанавливающим параметры клавиатуры.
Клавиатура в ZX Spectrum подчиняется трем системным переменным, называемым RepDel, RepPer и Pip.
Переменная RepDel (адрес 23561, байт) устанавливает задержку до начала автоповтора кода, если клавиша удерживается нажатой длительное время. Автор рекомендует засылать в эту переменную значение 15.
Переменная RepPer (адрес 23562, байт) устанавливает задержку между последовательными опросами портов клавиатуры драйвером на прерывании. Собственно, она задает скорость автоповтора. Автор рекомендует значение 3.
Переменная Pip (адрес 23609, байт) устанавливает длительность звукового сигнала по нажатию клавиши. Автор предпочитает значение 4. Для тех, кто знает ассемблер и систему ZX Spectrum: значение этой переменной рассматривается как длительность, а значение #C8 как высота тона для вызова подпрограммы ПЗУ Beeper (адрес #3B5), когда необходимо отработать звук клавиатуры.
Итак, Вы можете создать маленькую програмку на Бейсике:

10 REM моя любимая клавиатура
20 REM конкретные значения
30 REM указаны для примера
40 POKE 23561,15 : REM RepDel
50 POKE 23562,3 : REM RepPer
60 POKE 23609,4 : REM Pip

Записав ее на ленту командой
SAVE "kbdsetup" LINE 10

или на диск командой
PRINT USR 15619: REM : SAVE "kbdsetup" LINE 10

Вы можете каждый раз, когда включаете компьютер, запускать эту программу. Ее эффект сохраняется и после команды NEW, но, естественно, не сохраняется после нажатия RESET или команды PRINT USR 0.
Учтите, что многие программы (как, скажем, CONVER 3.03) довольно бесцеремонно изменяют эти переменные. Тогда запускайте эту программу непосредственно перед запуском редактора.

2. Редактирование текстов программ для GENS 4.

Несмотря на то, что BK Write не имеет каких-либо специальных средств для редaктирования текстов программ в формате ассемблера GENS 4, это все же задача очень простая.
Необходимо просто набирать метки с первой позиции строки, мнемонику команд с позиции 8, а операнды - после мнемоники через один или несколько пробелов. Например:

; Self-destruction program...
*L+
*C-
*D+
*H Written by Genius...

ORG 50000
ENT $

ENTRY LD A,2
CALL #1601 ;stream open
LD DE,MESSG
LD BC,MESSGL
CALL #203C ; string out
RST 0 ; system reset

MESSG DEFM \Ooooh.. Oooh... \
DEFM \I want to die!!!\
DEFB 13
MESSGL EQU $-MESSG

Теперь отметьте весь текст как блок ( sh+Q, ext B, sh+W, ext E) и проиндентуруйте на 2 символа (ext O 2 {Enter}). На месте этих двух пробелов GENS поставил бы номер строки.
Собственно, файл можно записывать (ext S {имя_устройства} {Enter} {имя_файла} {Enter}) и переходить к работе в GENS'е.
Загрузив файл в GENS'е, первым делом дайте команду расстановки номеров строк (N 1,1 {Enter}). Теперь Вы можете свободно работать с текстом.
Когда Вы вернетесь для продолжения редактирования файла в BK Write, включенный режим Indent (включается
нажатием caps + 9) поможет Вам автоматически поддерживать те самые 2 пробела в начале каждой строки.


ПРИЛОЖЕНИЕ 1
ФОРМАТИРОВАНИЕ ТЕКСТА

А. ФОРМАТИРОВАНИЕ АБЗАЦЕВ

Единицей форматирования является ПАРАГРАФ (абзац) - последовательность строк, отделенная от нижележащей части текста пустой строкой. Обратите внимание, что эта пустая строка не может содержать не только видимые символы, но и пробелы.
Параметрами форматирования являются: ширина строки, левое поле, левое поле для первой строки (абзацный отступ), флаг переноса и флаг выравнивания.
Режим выравнивания: состояние, когда после форматирования строки она равномерно дополняется пробелами, чтобы правая граница всех строк была на одном уровне, определенном параметром <ширина строки>. Режим выравнивания эффективен только если включен режим переноса слов.
Режим переноса: состояние, когда слово, не вмещающееся на текущей строке, переносится на следующую строку ЦЕЛИКОМ. В другом случае на следующую строку переносится лишь часть слова. Режим не действует, если в тексте встречается слово, более длинное, чем ширина строки.
Фактически, текст рассматривается как последовательность слов (групп символов), разделенных группами пробелов и/или символов конца строки. Чтобы текст красиво форматировался, необходимо придерживаться следующих общепринятых правил, которые, кроме прочего, облегчают восприятие текста:
1. Знаки препинания набирайте за словом без пробела.
2. За знаками препинания всегда ставьте пробел.
3. Текст в скобках (или в кавычках) не должен быть отделен от скобок пробелами.
4. Абзацы разделяйте пустой строкой.
5. Если знак "-" обозначает тире - ставьте по пробелу с обоих сторон знака, если дефис - набирайте его слитно со словами.

ext sh + K
Установка параметров форматирования. Последовательно запрашиваются все описанные параметры. Числовые параметры могут быть в пределах 0..255, логичекие вводятся так же, как в команде ext K (см. раздел ПЕЧАТЬ).

ext T
Форматировать параграф. Курсор должен находиться на первом символе параграфа. Концом параграфа считается ближайшая пустая строка. Операция может занять некоторое время.

ext sh + T
Форматировать текст от курсора до конца файла. Текст должен содержать ОДНУ пустую строку в конце каждого предполагаемого параграфа. Операция может занять значительное время. Прерывается нажатием Break. Реакция на нажатие может проявиться не сразу. В процессе форматирования линейка прокрутки показывает позицию обработки. Последний обработанный параграф выделяется как блок.

Б. ЦЕНТРИРОВАНИЕ ЗАГОЛОВКОВ.

ext Y
Центрировать строку. Значимые символы текущей строки размещаются посередине строки. Расчет ведется, исходя из ширины строки и левого поля.

ПРИЛОЖЕНИЕ 2
КОЕ-ЧТО О ПОДКЛЮЧЕНИИ ПРИНТЕРА И НЕ ТОЛЬКО

Автор неоднократно встречался с полным непониманием или извращенным пониманием технологии подключения устройств к компьютерам ZX Spectrum; поэтому в настоящем приложении описано кое-что, касающееся этой темы.

А. Интерфейс
ПРОГРАММА - УСТРОЙСТВО.

ZX Spectrum использует UNIX-подобную концепцию каналов и потоков. В чем же она состоит?
Канал, обозначаемый буквой латинского алфавита, символизирует УСТРОЙСТВО. Например, ZX Spectrum поддерживает следующие стандартные устройства:
K - (Keyboard - клавиатура) нечто, соответствующее понятию "консоль", т.е. пульт управления; нижнее окно дисплея по выводу, клавиатура по вводу; является особенным для ZX Spectrum;
S - (Screen - экран) верхнее окно дисплея по выводу; ввод невозможен;
P - (Printer - принтер) принтер по выводу (именно ZX Printer); ввод невозможен;
R - (RAM - ОЗУ) внутрисистемный канал, предназначенный для повышения эффективности программ; символы, выводимые в этот канал, попадают в БУФЕР РЕДАКТОРА КОМАНДНОЙ СТРОКИ И ВВОДА; т. е. если вывести в этот канал строку символов, а затем вызвать встроенный редактор (тот самый, который реализует оператор INPUT), то эта строка будет предложена пользователю для редактирования в нижнем окне экрана.
Подключение дополнительных устройств расширяет набор каналов.
Каждый канал имеет блок описания - ракорд канала (channel record), который содержит информацию о связывании функций ввода/вывода системы и канала. Все ракорды размещены последовательно в области памяти, адрес начала которой записан в системной переменной CHANS (адрес 23631, слово). За последним ракордом находится маркер конца - байт со значением 80h.
Общий формат ракорда в нотации ассемблера таков:
DEFW print_out
DEFW input_in
DEFB channel_name
DEFW internal1, internal2
DEFW record_length
DEFS record_length-11

Здесь:
PRINT_OUT
Адрес процедуры вывода символа в канал; символ в регистре A; теневой набор регистров не должен разрушаться. Процедура завершается командой RET. Если данный канал не поддерживает вывод информации, процедура вывода заключается в инициации ошибки:
RST 8 ;прерывание ошибки
DEFB 23 ; ошибка Invalid
; stream - неверно
; используется поток

INPUT_IN
Адрес процедуры ввода символа из канала; символ должен помещаться в регистр A, кроме того, должны быть установлены флаги:
CF=1
Символ действительно получен с устройства и передан через регистр A. Иначе флаг CF должен быть сброшен в 0 и установлено:
ZF=1
если устойство не готово дать следующий символ. Иначе
ZF=0
будет означать, что в канале наступила ситуация КОНЕЦ ФАЙЛА, которая обычно индуцируется ошибкой End of file. При необходимости подпрограмма доступа к каналу сама инициирует эту ошибку.
Такая система оповещения предусмотрена для того, чтобы можно было реализовать не только операцию INPUT#, но и ввод без ожидания INKEY$# так, чтоб для канала эти операции никак не отличались.
Если канал на поддерживает ввод, он должен инициировать ошибку (как показано для print_out).

CHANNEL_NAME
Содержит символ имени канала. Естественно, они не должны повторяться.

INTERNAL
Использование этих двух слов в разных реализациях различно. Так, в Interface One они содержат истинные адреса print_out и input_in в дополнительном ПЗУ, а в канале виртуального диска Spectrum 128K первое слово содержит сигнатуру (обозначение) пользовательского канала (число 1234h), а второе - адрес процедуры закрытия канала close. Эти слова можно определить как внутренние.

RECORD_LENGTH
Слово содержит длину ракорда канала (минимум 11). Это позволяет хранить за ракордом буфер и/или любую дополнительную информацию, связанную с каналом. Например, в TR-DOS, в канале "D", связанном с файлом последовательного доступа, хранится буфер для собираемого из символов 256-байтного сектора, счетчик байтов в буфере, указатель места на диске для записи сектора. На приведенной выше схеме ракорда канала эта дополнительная область обозначена как DEFS.
Для указанных выше стандартных каналов ракорд сокращён - он содержит только 3 первые строки вышеприведённой схемы. Эти каналы первые в списке и вставлять свои ракорды можно только за ними, перед маркером конца.
Для создания места в области CHANS с целью помещения туда нового ракорда канала необходимо использовать подпрограмму ПЗУ MAKE_ROOM, для удаления ракорда - подпрограмму RECLAIM_2.
Второй элемент концепции - ПОТОК (stream). Он символизирует поток данных, направляющихся из программы в устройство через канал. Поток обозначается номером от 0 до 15. На самом деле есть еще потоки с номерами -3,-2,-1, но они являются потоками операционной системы и могут переопределяться только со специфическими целями.
Поток подключется к каналу оператором Бейсика
OPEN #stream,channel$
Здесь stream - номер потока, channel$ - символьная переменная с именем канала. Например:

OPEN #6,"K"

подлючит поток 6 к каналу "K". Это можно проверить:

PRINT #6;"Hello, World!":
PAUSE 0

выведет в нижнее окно экрана приветствие. То же самое со вводом:

INPUT #6;"Type line:";
LINE a$: PRINT a$

- от Вас требуется ввести строку, которая будет напечатана на вернем поле экрана. Аналогично можете испробовать INKEY$ #6.
Точно также можно указать поток для LIST:

LIST 200,#6

По окончании работы поток необходимо закрыть:

CLOSE #6

Идея всей этой технологии состоит в том, что программа становится независимой от устройств ввода/вывода - она
просто пользуется потоками. А их можно переназначить на требуемые в данный момент устройства.
Со стандартными каналами связаны "стандартные" потоки: #0 и #1 с "K", #2 с "S" и #3 с "P". Несложно догадаться, что PRINT это тоже самое, что и PRINT #2, LPRINT - PRINT #3, LLIST - LIST #3, INPUT - INPUT #0 и INKEY$ - INKEY$#0.
Состояние потоков описано в ситемной области STRMS (начинается с 23568, длина 19 слов). Каждое слово этой области описывает один поток (-3,-2,-1,0,1,2 и т.д). Оно содержит 0 для закрытого потока или смещение от начала области CHANS до ракорда того канала, к которому подлючен этот поток. Это значение увеличено на 1. Например, описатель потока, подключенного к каналу S, будет содержать значение 6, т.к. канал S - второй в списке с сокращенным ракордом (длиной 5 байт), а 5+1=6.
Необходимо знать, что ошибка в ПЗУ приводит к тому, что нельзя пытаться закрыть (по крайней мере, командой CLOSE#) закрытый поток, или поток, открытый на нестандартный канал.
Также следует учесть, что из Бейсика Вы сможете открыть потоки только на стандартные каналы, поскольку их открытие может сопровождаться специфичными действиями в устройстве. Поэтому TR-DOS имеет свои команды для открытия/закрытия потоков, а ZX Interface One расширяет возможности оператора OPEN.
Для доступа к таблице потоков используется подпрограмма ПЗУ STR_DATA, для установки текущего потока - CH_OPEN, для вывода символа в поток - PRINT_A_1 (RST 16), для считывания символа из потока - WAIT_KEY.
Следует помнить, что подпрограмма CLS заносит адрес совмещенного драйвера каналов K,S,P в ракорд текущего используемого потока. Поэтому при ее вызове обязательно должен быть текущим поток 0,1 или 2.
Адреса и подробную информацию об упомянутых выше и ниже подпрограммах ПЗУ Вы найдете в "Полном дизассемблере ПЗУ Spectrum" Логана и О'Хары.

Б. Конкретно о принтерах.

Вполне нормально в отношении принтера не создавать новый канал, переоткрывать на него поток и т.д.
Ведь есть стандартный канал P, в ракорде которого можно просто подменить адрес print_out. Саму процедуру в большинстве случаев можно разместить в бывшем теперь буфере ZX - принтера (256 байт с адреса 23296).
Нужно учесть, что в ZX Spectrum символ табуляции имеет код 6, а ее размер - 16, в то время как на "нормальных"
принтерах код табуляции 9, а размер - 8. Поэтому процедура print_out, получив код 6, должна передать на принтер вместо него два кода 9. Далее, необходимо перекодировать символ "копирайт" в другой, например, в "@". Токены нужно передать посимвольно, взяв тексты токенов из таблицы в ПЗУ по адресу 95h, или использовав подпрограмму PO_MESSAGE с рекурсивным вызовом драйвера (поскольку сама подпрограмма использует RST 16).
Еще одна проблема: символ CR (код 13). У принтеров есть режим, когда код CR возвращает каретку к началу строки, а LF (код 10) переводит строку. Большинство принтеров имеет DIP-переключатели, позволяющие установить режим, когда оба действия выполняются по коду CR, но некоторые такого режима не имеют. Поэтому лучше такой вариант предусмотреть в драйвере, а принтер оставить в режиме "раздельной реакции".
Наконец, для печати графики из программ необходим вариант драйвера, который не делает никаких перекодировок.

В. Совместимость.

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

Порты устройств компьютеров ZX Spectrum (Адрес, Назначение)

7FFD управление конфигурацией (только 128 кб)

BFFD, музыкальный процессор
FFFD AY-3-8912 или аналог

xxFE по чтению - клавиатура по записи - звук, магнитная лента, BORDER дисплея
1F Kempston Joystick Interface
3F Dk'Tronics Light Pen
FB ZX Printer

Порты ZX Interface 1

EF control status
E7 data
F7 RS-232 / Network

Порты ZX Interface 2

EFFE IF2 joystick 1
F7FE IF2 joystick 2

Порты Beta Disk Interface (доступ блокирован, несовместимости не вызывают)

FF control / state
1F command / status
3F track
5F sector
7F data

Специальный порт

FF этот порт специально не реализован; поскольку на его запрос не отвечает ни одно устройство, он всегда содержит значение системной шины данных в высокоимпедансном состоянии, равное FF. Но в фирменном Sinclair среди значений FF иногда "проскальзывают" значения текущего выводимого на дисплей атрибута, что позволяет играм более точно синхронозироваться с обновлением видеопамяти - именно по этой причине некоторые игры не работают на Sinclair - совместимых моделях.

ПРИЛОЖЕНИЕ 3
Перевод сообщений, выдаваемых редактором.

Untitled
"Неименованный" - текст в поле имени файла, пока оно не установлено.

nn free, mmm locked, zzz marked as block
n байтов памяти свободно, m байтов текста блокировано, z байтов отмечено как блок.

Line number
Введите номер строки

Delete block ?
Удалить блок ?

File not saved. Quit?
Файл не сохранен. Выйти из редактора ?

Changes will be lost ?
Изменения будут потеряны ? (при открытии файла)

Zap text?
Стереть весь текст ?

Find what
Что искать

Change to
На что заменить

Change |change All |Next |Quit
Заменить, заменить все, следующий, выход.

Save block...
Сохранить блок как файл...

Merge file...
Слить файл...

Save file...
Сохранить файл...

Open file...
Открыть файл...

Drive (a..d,t)
Выберите устройство (из
a,b,c,d,t).

Filename
Имя файла

Start tape...
Запустите ленту и нажмите клавишу.

Overwrite file ?
Переписать существующий файл на диске?

I/O error!
Ошибка ввода/вывода!

Found:XXXXXXX loading
Найден файл XXXXXXX - загружается.

Found:XXXXXXX too big
Найден файл XXXXXXX - слишком большой.

File too big
Файл слишком большой.

No such file
Нет такого файла.

Print text?
Печатать текст ?

Print block?
Печатать блок ?

Send LF
Передавать символ перевода строки на принтер ?

Eject page
Выбрасывать последнюю страницу ?

KOI 8 recoding
При выводе на принтер перекодировать в КОИ 8 ?

Printing. BREAK cancels.
Выполняется печать. Нажмите BREAK для прерывания.

No TR-DOS detected!
Интерфейс дисковода не подключен!

Indentation depth
Глубина индентирования.

Unindentation depth
Глубина деиндентирования.

Line length
Ширина строки.

1st margin
Левое поле первой строки
абзаца.

Left margin
Левое поле.

Justify
Выравнивание.

Word wrap
Перенос слов.

Invalid params!
Несовместимые параметры форматирования!

Format from cursor?
Форматировать текст с позиции курсора ?

Remove HELP ?
Удалить комаду HELP(ПОМОЩЬ) из памяти?

Mark lines: Up, Down, Space
Выделите блок строк, используя стрелки и пробел.

Cat of (A..D)
Выберите имя устройства для просмотра каталога.

page number
Номер первой страницы

Page length
Длина страницы

Start paging?
Начать деление на страницы?

Cat of (A..D)
Выберите имя устройства для просмотра каталога.


 

VIEWERS

PROGRAMMING
PACKERS
COMMANDERS
ART'N'GFX
MUSIC
TEXT EDITORS
COPYERS
TESTS
DISK UTILS
NETWORK
GAME CREATORS
MISC
OTHER STAFF
FRIENDLY LINKS

giant demoes archive

virtual tr-dos

 
   
(c) by srs-press, 2013-2014