Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ZX Spectrum для пользователей и программистов.doc
Скачиваний:
56
Добавлен:
28.09.2019
Размер:
1.92 Mб
Скачать

Ожидание ввода: call 5598 (#15de)

Подпрограмма осуществляет ввод из текущего потока. По окончании ввода одного байта процедура проверяет флаг переноса CY. Если он установлен, происходит выход из подпрограммы, в противном случае проверяется флаг нуля Z. Если Z установлен, процедура ввода повторяется. При условии Z=0 управление передается операционной системе, которая выдает сообщение 8 End of file.

Если текущим установлен поток 1 (обычно — канал "К"), подпрограмма осуществляет опрос клавиатуры, и после нажатия клавиши помещает ее код в аккумулятор. Однако существует сложность: если бит 3 системной переменной TVFLAG (23612) установлен, то параллельно вводу символов с клавиатуры на служебном экране будет отображаться содержимое буфера редактора.

Звуковой сигнал: CALL 949 (#О3В5)

Перед вызовом подпрограммы в регистровые пары HL и DE помещаются числа (0...65535), пропорциональные, соответственно, частоте звукового сигнала и его длительности. При этом нужно учитывать линейную зависимость между частотой и длительностью — чем выше тон, тем короче звук. Необходимые значения рассчитываются следующим образом:

HL = (437500/f)-30.125 DE = f * t

где f — частота в Гц, t — время в сек.

Например, для воспроизведения в течении 1 секунды ноты «ДО» первой октавы (частота примерно 261 Гц) в HL необходимо поместить число 1646, а в DE — число 261.

Печать сообщений: CALL 3082 (#ОСОА)

Для выполнения этой подпрограммы в регистровую пару DE загружается начальный адрес таблицы сообщений, в регистр А — номер сообщения в ней. Первое сообщение имеет номер 0. Первым байтом в таблице должен стоять код 128 (#80). Для задания конца сообщения старший бит его последнего байта должен быть установлен в единицу.

Пример:

LD А,0 ;печать первого

CALL PR_MES ;сообщения в таблице

...

PR_MES LD DE,MES_TAB

CALL 3082 ;вывод сообщения на основной экран

RET

...

MES_TAB DEFB #80 ;начало таблицы

DEFM "ENTR" ;начало сообщения "ENTRY"

DEFB "Y"@#80 ;конец сообщения

DEFM "ENTRY " ;второе сообщение "ENTRY 2"

DEFB "2"@#80

Изображение окружности: call 9005 (#232d)

Параметры кружности предварительно помещаются в стек калькулятора в следующем порядке: X, Y (координаты центра окружности) и Z (радиус). Сделать это можно с помощью специальной подпрограммы, размещенной по адресу 11560 (#2D28), которая заносит в стек калькулятора содержимое аккумулятора.

Следует учитывать, что процедура изображения окружности изменяет значение системной переменной COORDS (23677/78).

В качестве примера приведем следующую программу:

LD НL,(23677) ;запоминаем текущие

PUSH HL ;координаты (COORDS)

LD А,Х ;координата X (от 0 до 255)

CALL #2D28 ;запись аккумулятора в стек

LD A,Y ;координата Y (от 0 до 175)

CALL #2D28 ;запись аккумулятора в стек

LD А,Z ;Z - радиус

CALL #2D28 ;запись аккумулятора в стек

CALL #232D ;изображение окружности

POP HL ;восстанавливаем

LD (23677),HL ;координаты (COORDS)

...