Программирование на Бейсик 48/128 для ZX-Spectrum 1993 г.

SPECTRUM-бейсик - системные переменные. Системный счетчик. Запись в память. Невидимая точка на экране. Окраска экрана. Другие операции с экраном.


СИСТЕМНЫЕ ПЕРЕМЕННЫЕ

Интерпретатору Бейсика для «служебного пользования» в ком-
пьютере отводится специальная область оперативной памяти. В
ячейках этой области хранятся настроечные параметры интерпре-
татора, а также данные, необходимые для обработки бейсик-про-
грамм. Читая содержимое этих ячеек, можно узнать много интерес-
ного о состоянии компьютера. Записывая же в них необходимые
нам значения, можно влиять на работу компьютера.

Эти ячейки памяти называют системными переменными. У каж-
дой из переменных есть свое имя и фиксированное положение в
памяти*.

Наверное, нет необходимости пояснять, что системные переменные ничего обще-
го не имеют с переменными бейсик-программ.

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

Чтение содержимого памяти

РЕЕК

Память ZX Spectrum состоит из множества отдельных ячеек, в
каждой из которых может быть записано число от 0 до 255 (байт).
Всего ячеек 65535. Для того чтобы различать ячейки, каждой из
них приведено в соответствие число от 0 до 65535, называемое
адресом. С помощью оператора РЕЕК прямо из Бейсика можно
читать содержимое любых ячеек памяти. Выполним в непосредст-
венном режиме оператор

print реек 23560
13

По сути, мы выяснили, что в ячейке памяти с адресом 23560
записано число 13. «Зациклим» считывание этой ячейки:

10 print реек 23560
20 go то 10
run
13

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

Итак, мы познакомились с системной переменной LAST_K (ад-
рес 23560), в которой постоянно хранится код последней нажатой
клавиши.

В некоторых случаях пользоваться системной переменной
LAST_K предпочтительнее, чем функцией inkey$. Ведь inkey$ воз-
вращает символ клавиши, нажатой именно в момент ее выполне-
ния, и требует обязательного «зацикливания» программы на опро-
се клавиатуры. Переменная LAST_K сохраняет код клавиши и
после ее отпускания. Это позволяет после завершения программой
каких-либо действий проверить, была ли нажата клавиша в мо-
мент выполнения этих действий.

Системный счетчик

Системный счетчик — внутренние часы ZX Spectrum. Под него
в памяти компьютера отведено три ячейки памяти с адресами

23672/7 3/74*. Они носят общее название «системная переменная
FRAMES».

После включения или сброса компьютера содержимое всех трех
ячеек обнуляется. По прошествии 1/50 секунды в ячейку 23762
записывается число 1. И далее, через каждые 1/50 секунды ее
содержимое увеличивается на 1. При достижении значения 255
ячейка 23762 обнуляется, а содержимое ячейки 23673 увеличива-
ется на 1. И, соответственно, когда переполняется ячейка 2367 3
(записанное в ней значение достигает 255), к содержимому ячейки
23674 прибавляется 1. Следовательно, в нашем распоряжении
имеются часы, отсчитывающие время с момента включения компь-
ютера с точностью в 1/50 секунды непрерывно в течение

(255+255х256+255х256x256)/50=335544,3 секунд,

то есть 3 суток и еще 21 часа. Потом все сначала.

Для определения числа полных секунд, прошедших с момента
включения или сброса компьютера, нужно рассчитать следующее
выражение:

LET T=INT((65536*PEEK 23674+256+РЕЕК 23673+РЕЕК 23672)/50)

Таким образом можно смоделировать на компьютере часы:

10 INPUT "Час ";hour
20 INPUT "Минуты ";min

30 POKE 23674,0: POKE 23673,0: POKE 23672,0

40 LET t=PEEK 23672+2569+PEEK 23673+65536+PEEK 23674+

hour* 180000+min*3000
50 LET h=INT (t/180000)
60 LET h$=STR$ h

70 IF LEN h$=l THEN LET h$="0"+h$
80 LET h$=h$( TO 2)+":"
90 LET m=INT ((t-h*180000)/3000)
100 LET m$=STR$ m

110 IF LEN m$=1 THEN LET m$="0"+m$
120 LET m$=m$( TO 2)+":"
130 LET s=INT ((t—h*180000—m*3000)/50)
140 LET s$=STR$ s

150 IF LEN s$=1 THEN LET s$="0"+s$
160 LET s$=s$( TO 2)
170 PRINT AT 20,24;h$;m$;s$
180 GO TO 40

Эти «часы» можно включить в любую программу. Следует толь-
ко учитывать, что на время ожидания ввода данных операторами
INPUT вывод времени на экран будет остановлен**. Чтобы задержка
была не так заметна, лучше из программы, моделирующей часы,

В таком виде мы будем приводить адреса системных переменных, занимающих
более одной ячейки. В данном случае это адреса 23672, 23673, 23674.

** Это относится и к другим операторам, приостанавливающим выполнение про-
граммы (LOAD, SAVE, PAUSE).

исключить строки 130...160 и убрать переменную s$ из строки
170, то есть не выводить на экран секунды.

Запись в память_

РОКЕ

Запись чисел в память производится с помощью оператора
РОКЕ. Вслед за ним через запятую располагаются два значения:
адрес от 0 до 65535 и заносимое в память по указанному адресу
число от 0 до 255.

Невидимая точка на экране_

Оператор draw начинает чертить отрезок линии или дуги от
последней выставленной на экране точки. Координаты этой точки
он берет из системной переменной COORDS. В ячейках с адресами
23677 и 23678 этой переменной хранятся, соответственно, значе-
ния координат х и у последней выставленной на экран точки. Зная
это, можно, не выставляя точки с помощью оператора PLOT, запи-
сывать начальную координату для draw сразу в переменную
COORDS:

10 роке 23677,100: роке 23678, 100
20 draw 50, 50

Другое полезное применение в программе переменной
COORDS — это получение из нее с помощью РЕЕК информации о
координатах последней выставленной точки.

Окраска экрана

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

Например, в Бейсике нет оператора, изменяющего все атрибу-
ты служебного экрана (оператор border устанавливает только цвет
фона). Задать их можно только, записывая соответствующие значе-
ния в системную переменную BORDCR (адрес 23624). Число,
которое необходимо записать по этому адресу, формируется по
принципу, изложенному в описании функции attr (см. стр. 55).

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

Точно также, выполнив лишь один оператор
роке 23693, x

- можно задать атрибуты и основного экрана (вместо привычных
ink, paper, flash и bright). 23693 — это адрес системной перемен-
ной ATTR_P, значение которой определяет «окрас» основного экра-
на. X — число, которым зашифрованы атрибуты. Может, этот
способ сложнее, но он короче и изящнее.

Другие операции с экраном

Оперируя системными переменными, можно менять привыч-
ные характеристики Бейсика ZX Spectrum. Например, можно уве-
личить основной экран: занять под него все 24 строки. Для этого
нужно модифицировать содержимое системной переменной DF_SZ
(адрес 23659), задающей количество строк в служебном экране:

роке 23659,0

Правда, в этом случае следует исключить в программе вывод на
служебный экран, иначе не оберешься беды. Когда же без служеб-
ного экрана не обойтись (при работе с оператором input или при
ожидании вывода сообщения, например, о завершении работы
программы) необходимо восстановить содержимое DF_SZ:

роке 23659,2

Существует системная переменная SCR_CT (адрес 23692), зада-
ющая количество строк текста, передвигаемых вверх по экрану без
запроса scroll?. Требуемое значение этой переменной устанавлива-
ется только из программы (изменить SCR_CT в непосредственном
режиме невозможно).




СОДЕРЖАНИЕ:


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

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



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

Похожие статьи:
Chaos Construction 2001 - интервью с минским спектрумистом Equator/PHD.
СС'99 - интервью: Вячеслав Медноногов/Copper Feet (о Черном Вороне 2).
Ликбез - Cheat'ы : Sex Reversy, Ascent demo, The Last Courier, Mine Layer, Faultless 9, Чёрный Ворон. 12 Тайный книг: Люди и змей (о игре).

В этот день...   14 декабря