ZX Spectrum для пользователей и программистов 1991 г.

Системные переменные - ZX Spectrum использует так называемые системные переменные, под размещение которых отведена специальная область ОЗУ.


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

Для хранения и обработки служебной информации (значений координат точек, адресов таблиц, текущих
атрибутов и т. п.) операционная система ZX Spectrum использует так называемые системные перемен-
ные, под размещение которых отведена специальная область ОЗУ.

При описании системной переменной вслед за именем указывается
ее десятичный и шестнадцатиричный адрес. Адреса двух- и трехбайтовых переменных записываются через
косую черту, например: 23563/64 (#5С0В/0С) . В этих переменных младший байт числа, как принято в
микропроцессоре Z80, хранится в ячейке с меньшим адресом. Для блока переменных указываются началь-
ный и конечный адреса, разделенные многоточием, например,23552...23559(#5C00...#5C07).

Во время работы интерпретатора Бейсика индексный регистр IY содержит адрес переменной ERR_NR
23610 (#5C3A). и, следовательно, для обращения к системным переменным удобно использовать индекс-
ный метод адресации. Поэтому для каждой переменной приведена величина смещения адреса ее первого
байта относительно значения регистра IY, например, IY—50.

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

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

KSTATE 23552...23559 (#5С00...#5С07)

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

LAST_K_23560 IY-50 (#5C08)

Код последней нажатой клавиши.

REPDEL_23561 IY-49 (#5C09)

Величина задержки (в 1/50 с) между нажатием клавиши и началом автоматического повторения нажа-
тия (автоповтора) .

PEPPER_23562 IY-48 (#5С0А)

Период автоповтора (в 1/50 с) при длительном нажатии на клавишу. Изменяя системные переменные
REPDEL и REPPER, можно настроить клавиатуру под конкретного пользователя.

DEFADD_23563/64 IY-47 (#5С0В/0С)

Адрес первого параметра пользовательской функции, определенной оператором DEF FN, в процессе ее
обработки. Например:

DEF FN n(a,b)=SIN a+COS b
DEF FN In ' | ( la #0E
T

DEFADD

K_DATA_23565 IY-45 (#5C0D)

Код цвета, заданный цифровой клавишей в режиме курсора Е.

TVDATA_23566/67 IY-44 (#5C0E/0F)

Первый байт - код управления, заданный цифровой клавишей в режиме курсора Е. Второй байт - первый
параметр в AT или TAB.

STRMS 23568...23605 IY-42 (#5С10...#5С35)

Область хранения информации о потоках (более подробно см. «Архитектура ZX Spectrum. Каналы и пото-
ки») .

CHARS_23606/07 IY-4 (#5С36/37)

Адрес размещения текущего набора символов. После запуска компьютера адрес стандартного набора
15360.

Поскольку символы с кодами от 0 до 31 являются управляющими и в фонте не определяются, то адрес
действительного положения текущего набора на 256 (32x8) больше, чем указанный системной переменной
CHARS. Например, для назначения текущим фонта, расположенного с адреса 64768, в переменную CHARS
необходимо записать число 64512 (64768-256).

RASP_23608 IY-2 (#5С38)

Число, пропорциональное длительности звукового сигнала, предупреждающего о заполнении буфера ре-
дактора.

PIP_23609 IY-1 (#5С39)

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

ERR NR_23610 IY+0 (#5СЗА)

Число, на единицу меньшее кода сообщения, выдаваемого при ошибке (включая сообщение о нормальном завер-
шении выполнения программы 0 ОК).

FLAGS_23611 IY+1 (#5СЗВ)

Отдельные биты этой переменной используются операционной системой
(см. также переменную FLAGS2).

Бит 0 установлен, если не нужно выводить пробел перед бейсик-оператором. (При выводе на экран или пе-
чати большинства операторов Бейсика перед ними выводится пробел.)

Бит 1 установлен, для вывода используется поток #3 (обычно — принтер).

Бит 2 при вводе символа в режиме курсора L, сброшен при вводе в режиме курсора К.

Бит 3 установлен при ожидании ввода символа в режиме курсора L, сброшен при ожидании ввода в режиме

К.

Бит 4 установлен если комп'ютер работает в режиме ZX-128.

Бит 5 устанавливается при нажатии на любую символьную клавишу. Код клавиши можно прочитать из пере-
менной LAST_K.

Бит 6 установлен при обработке числового выражения, сброшен при обработке символьного.
Бит 7 установлен при выполнении программы, сброшен при проверке синтаксиса введенной строки.

TV FLAG_23612 IY+2 (#5C3C)

Отдельные биты этой переменной используются для управления выводом на экран.

Бит 0 установлен при выводе на служебный экран, сброшен при выводе наосновной экран.
Бит 3 установлен, если режим вывода на экран мог измениться и требуется проверка режима.
Бит 4 установлен при выводе листинга программы.

Бит 5 установлен при необходимости очистить служебный экран (например, перед выводом сообщения).

ERR SP_23613/14 IY+3 (#5C3D/3E)

Адрес, на который устанавливается указатель стека при запуске программы обработки ошибок. Изменив значе-
ние переменной, можно подключить собственные процедуры обработки ошибок (см. «Использование подпрограмм
ПЗУ»).

LIST SP_23615/16 IY+5 (#5C3F/40)

Сохраняет адрес вершины стека в процессе вывода листинга программы.

МОРЕ_23617 IY+7 (#5С41)

Число, определяющее режим ввода с клавиатуры:

0 — очередной символ вводится в режимах курсора К, L или С;

1 — очередной символ вводится в режиме курсора Е;

2 и более — очередной и последующие символы вводятся в режиме курсора G. При значении, превышающем 2,
меняется внешний вид курсора.

NEWPPC_23618/19 IY+8 (#5С42/43)

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

NSPPS_23620 IY+10 (#5C44)

Номер следующего зыполняемого оператора в строке бейсик-программы. Переменные NEWPPC и NSPPS можно ис-
пользовать для перехода к произвольному оператору в бейсик-программе.

РРС_23621/22 IY+11 (#5С45/46)

Номер строки бейсик-программы, в которой расположен выполняемый оператор. При выполнении оператора в не-
посредственном режиме в переменную
записано число 65534 (#FFFE).

SUBPPC_23623 IY+13 (#5С47)

Номер выполняемого оператора в строке бейсик-программы.

BORDCR_23624 IY+14 (#5С48)

Атрибуты служебного экрана. Цветом фона служебного экрана определяется
цвет бордюра.

Е_РРС_23625/26 IY+15 (#5С49/4А)

Номер строки бейсик-программы, отмеченной курсором.

VARS_23627/28 IY+17 (#5С4В/4С)

Адрес начала области переменных бейсик-программы.

DEST_23629/30 IY+19 (#5С4Р/4Е)

Адрес первого символа имени обрабатываемой в данный момент переменной.

CHANS_23631/32 IY+21 (#5C4F/50)

Адрес начала области информации о каналах (см. «Архитектура ZX Spectrum»).

CURCHL_23633/34 IY+23 (#5С51/52)

Адрес первого байта описателя текущего канала в области информации о каналах (см. «Архитектура ZX Spec-
trum»).

PROG_23635/36 IY+25 (#5C53/54)

Адрес начала бейсик-программы. Вычитанием значения системной переменной VARS из значения PROG, вычисля-
ется длина бейсик-программы.

NXTLIN_23637/38 IY+27 (#5C55/56)

Адрес начала следующей строки бейсик-программы.

DATADD_23639/40 IY+29 (#5С57/58)

Адрес последнего считанного оператором READ объекта данных в операторах DATA.

E_LINE_23641/42 IY+31 (#5С59/5А)

Адрес начала редактируемой строки.

K_CUR_23643/44 IY+33 (#5С5В/5С)

Адрес символа редактируемой строки, на который установлен курсор.

СН_АDD_23645/46 IY+35 (#5С5Р/5Е)

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

X_PTR_23647/48 IY+37 (#5C5F/60)

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

WORKSP_23649/50 IY+39 (#5С61/62)

Адрес начала рабочей области бейсик-программы.

STKBOT_23651/52 IY+41 (#5С63/64)

Адрес начала стека калькулятора.

STKEND_23653/54 IY+43 (#5С65/66)

Адрес вершины стека калькулятора.

BREG_23655 IY+45 (#5С67)

Регистр В калькулятора.

MEM_23656/57 IY+46 (#5С68/69)

Адрес области памяти, используемой калькулятором. Как правило, для этих целей используется системная об-
ласть МЕМВОТ.

FLAGS2_23658 IY+48 (#5С6А)

Отдельные биты этой переменной используются операционной системой (см. также переменную FLAGS).
Бит 0 установлен при необходимости очистить основной экран после
ввода строки.

Бит 1 установлен, если буфер принтера уже использовался.
Бит 2 установлен, если основной экран очищен.

Бит 3 установлен при использовании режима курсора С, сброшен при использовании режима курсора L. Из-
менением состояния этого бита можно программно устанавливать режимы регистров клавиатуры С или L.
Бит 4 установлен при использовании режима курсора К.

Биты 5,6,7 используются интерфейсом ZX-LPRINT Ш(при наличии такового) .

DF_SZ_23659 IY+49 (#5C6B)

Количество строк в служебном экране. Число строк в основном экране может быть увеличено до максимума (24
строки) выполнением оператора РОКЕ 23659,0. Однако, если количество строк в служебном экране меньше 2,
то при попытке вывода на него любого сообщения, например, OK или BREAK—CONT repeats, система будет вести
себя самым неприличным образом. Запись в DF_SZ нуля — один из способов защиты бейсик-npoгpaмм от остано-
ва.

S_TOP_23660/61 IY+50 (#5C6C/6D)

Номер строки бейсик-программы, начиная с которой выводится автоматический листинг (по нажатию клавиши
Enter).

OLDPPC_23662/63 IY+52 (#5C6E/6F)

Номер строки бейсик-программы, начиная с которой будет продолжено выполнение программы после ввода опе-
ратора CONTINUE.

OSPCC_23664 IY+54 (#5С70)

Номер оператора в строке бейсик-программы, начиная с которого будет продолжено выполнение программы по-
сле ввода оператора CONTINUE.

FLAGX_23665 IY+55 (#5С71)

Используется при обработке оператора INPUT.

Бит 1 установлен, если оператором INPUT вводится новая переменная.

Бит 5 установлен при работе в режиме ввода оператором INPUT, сброшен — в режиме редактирования бей-
сик-строки.

Бит 6 установлен при обработке строки, введенной оператором INPUT.
Бит 7 установлен, если выполняется оператор INPUT LINE.

STRLEN_23666/67 IY+56 (#5C72/73)

Длина обрабатываемой символьной переменной (ранее определенной) либо идентификатор числовой или новой
символьной переменной (младший байт).

T_ADDR_23668/69 IY+58 (#5С74/75)

Адрес следующего элемента в таблицах синтаксиса, расположенных в ПЗУ.

SEED_23670/71 IY+60 (#5С76/77)

Значение, используемое для вычисления псевдослучайного числа. После выполнения оператора RANDOMIZE, пе-
ременная SEED изменяется в соответствии со введенным параметром. Если RANDOMIZE использовался без пара-
метров, то в переменную SEED копируются два младших байта из переменной FRAMES.

FRAMES 23672/73/74 IY+62 (#5C78/79/7A)

Системный счетчик. После запуска (сброса) компьютера обнуляется. При работе со стандартной процедурой
обработки прерываний значение счетчика каждые 1/50 секунды увеличивается на единицу.

UDG_23675/76 IY+65 (#5С7В/7С)

Адрес начала области, используемой для размещения определяемых пользователем символов (см. «Русификация
ZX Spectrum»).

COORDS_23677/78 IY+66 (#5C7D/7E)

Координаты X и Y последней изображенной на экране точки.

P_POSN_23679 IY+69 (#5C7F)

Содержит значение 33—n, где n — номер следующей позиции печати в буфере принтера.

PR_CC_23680 IY+70 (#5С80)

Младший байт адреса области, используемой в текущий момент под буферпринтера.

NOT_USED_23681 IY+71 (#5С81)

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

При выводе на ZX Printer операционная система подготавливает строку к печати в буфере, расположенном по
адресу, указанному переменными PR_CC и NOT_USED.

ЕСНО_Е_23682/83 IY+72 (#5С82/84)

Позиция (номер строки и колонка) следующего символа вводимой бейсик-строки.

DF_CC_23684/85 IY+74 (#5С84/85)

Адрес байта, соответствующего верхней линии точек знакоместа основного экрана, в которое будет осуществ-
лен вывод следующего символа.

DFCCL_23686/87 IY+76 (#5С86/87)

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

S_POSN_23688/89 IY+78 (#5С88/89)

Координаты следующей позиции вывода на основной экран. Координаты хранятся в виде:
24—nr, 33-nc

где nr — номер строки, пс — номер столбца.

SPONSL_23690/91 IY+80 (#5С8А/8В)

Координаты следующей позиции вывода на служебный экран.

SCR_CT_23692 IY+82 (#5С8С)

Число, на единицу большее количества строк, передвигаемых по экрану вверх без запроса scroll?. Изменени-
ем содержимого этой ячейки можно добиться безостановочного скроллинга экрана при выводе текста.

ATTR_P_23693 IY+83 (#5C8D)

Постоянные атрибуты экрана, задаваемые операторами PAPER, INK, FLASH и
BRIGHT*.

MASK_P_23694 IY+84 (#5C8E)

Маска для разделения постоянных (ATTR_T) и текущих атрибутов при выводе на экран. Если в MASK_P бит ус-
тановлен, то соответствующий бит атрибута при выводе на экран не изменяется.

*)Формат хранения атрибутов соответствует формату их записи в области атрибутов, см. «Архитектура ZX Spectrum».

ATTR_T_23695 IY+85 (#5C8F)

Временные атрибуты, используемые при выводе на экран, например, оператором PRINT INK 7; PAPER 1;"...".

MASK_T_23696 IY+86 (#5C90)

Маска для разделения временных (ATTR_P) и текущих атрибутов при выводе на экран.

P_FLAG_23697 IY+87 (#5C91)

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

Бит 0/1 установлен при использовании OVER 1;
Бит 2/3 установлен при использовании INVERSE 1;
Бит 4/5 установлен при использовании INK 9;
Бит 6/7 установлен при использовании PAPER 9.

МЕМВОТ_23698...23727 (#5C92...#5CAF|

Область, используемая калькулятором для размещения значений, которые
неудобно обрабатывать через стек калькулятора.

NMIADD_23728/29 IY+118 (#5СВ0/В1)

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

*) Интерфейсы некоторых внешних устройств задействуют эту переменную. Например, интерфейс принтера ZX Lprint III хра-
нит в ней значение скорости обмена по последовательному каналу.

RAMTOP_23730/31 IY+120 (#5CB2/B3)

Последний адрес в ОЗУ, разрешенный к использованию интерпретатором Бейсика. Устанавливается оператором
CLEAR.

P_RAMT_23732/33 IY+122 (#5CB4/B5)

Адрес последнего байта физического ОЗУ. Устанавливается при инициализации компьютера после теста доступ-
ной памяти. В исправном компьютере с объемом оперативной памяти 48К переменная должна содержать значение
65535 (#FFFF).

ИСПОЛЬЗОВАНИЕ ПОДПРОГРАММ ПЗУ

Использование подпрограмм ПЗУ ZX Spectrum может значительно облегчить программирование на ассемблере.
Например, почти полностью отпадает необходимость в самостоятельном написании процедур ввода/вывода (при-
бегать к этому приходится только в случаях, когда не удовлетворяет скорость или гибкость стандартных
подпрограмм).

Ниже описаны подпрограммы ПЗУ, наиболее часто используемые на практике. Перед вызовом большинства из
них необходимо настроить регистровую пару HL' на адрес 10082 (#2762) , а в индексный регистр IY записать
адрес системной переменной ERR_NR: 23610 (#5СЗА) .*




СОДЕРЖАНИЕ:


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

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



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

Похожие статьи:
Вступление - Новая оболочка оказалась чрезвычайно неудобной.
.best - лучшие: спектрумист, игра, группа, демо, интро, кодер, писатель, музыкант, художник, журнал.
Вступление - стой, стрелять буду!
Юмор - что такое программист.
Анкета - Mоnаrсh.

В этот день...   19 апреля