СИСТЕМНЫЕ ПЕРЕМЕННЫЕ
Для хранения и обработки служебной информации (значений коор-
динат точек, адресов таблиц, текущих атрибутов и т. п.) операционная
система ZX Spectrum использует так называемые системные переменные, под
размещение которых отведена специальная область ОЗУ.
При описании системной переменной вслед за именем указывается
ее десятичный и шестнадцатеричный адрес. Адреса двух- и трехбайтовых
переменных записываются через косую черту, например: 23563/64
(#5С0В/§С) . В этих переменных младший байт числа, как принято в
микропроцессоре Z80, хранится в ячейке с меньшим адресом. Для блока
переменных указываются начальный и конечный адреса, разделенные мно-
готочием, например, 23552...23559 |#5СМ...#5С17) .
Во время работы интерпретатора Бейсика индексный регистр IY содер-
жит адрес переменной !3RR_NR 2361® (#5СЗА), и, следовательно, для обращения
к системным переменным удобно использовать индексный метод адресации.
Поэтому для каждой переменной приведена величина смещения адреса ее
первого байта относительно значения регистра IY, например, IY—$•.
Учитывая последнее, может возникнуть желание, изменив значение
IY, переместить область системных переменных. Однако авторы операцион-
ной системы, вероятно, не продумали этот вопрос и для обращения к
системным переменным использовали их физические адреса, привязав,
таким образом, область системных переменных к конкретному месту в
памяти.
Ниже следуют три раздела, первый из которых посвящен системным
переменным ZX Spectrum 128, второй освещает системные переменные
основного Бейсика, а в третьем разделе в таблице приведены сведения о
системных переменных TR-DOS.
СИСТЕМНЫЕ ПЕРЕМЕННЫЕ ZX SPECTRUM 128
SWAP_23296..,23315 |#5В00...#5В13)
Эта и следующие 6 областей памяти используются для хранения небольших
подпрограмм, которыми пользуется расширение интерпретатора Бейсика;
подпрограмма SWAP преключает ROM-страницы в разделе микропроцессо-
ра CPUO.
YOUNGER_23316...23324 (#5В14...#5В1С)
Часть подпрограммы, используемой для связи расширения интерпретатора
с основным Бейсиком.
ОМВЧ 23325...23342 |#5B1P...#5B2E)
Подпрограмма ( бр<*ботки ошибок бейсик-интерпретатора,
PIN 23343...2334У |#5B2F...#SB33)
Подпрограмма ввода байта из RS-232 интерфейса.
POUT 23348...23369 (#5В34...#5В49)
Подпрограмма вывода байта по RS-232 интерфейсу.
POUT2_23370...23383 |#5B4A...#5BS7)
Подпрограмма, автоматически используемая при окончании ввода или вы-
вода байта по RS-232 интерфейсу.
TARGET 23384/85 (#SB58/59|
Содержит адрес подпрограммы, вызываемой 12,8-м расширением из основ-
ного Бейсика.
RETAPPR 23386/87 (#5В5А/5В)
Сохраняет адрес возврата в 128-е расширение при выполнении подпрограм-
мы из основного Бейсика.
BANKM_23388 t#5B5C)
Копия содержимого регистра конфигурации компьютера, при записи в порт
с адресом 32765 (#7FFD) система записывает в эту ячейку копию данных.
RAMHST _23389 |#SBSP)
Содержит число #CF — код команды RST 8, при возникновении ошибки в
расширенном интерпретаторе Бейсика сюда передается управление, таким
образом, эта и следующая ячейка памяти образуют вход в программу обра-
ботки ошибок.
BAMERB_ 23390 (#SBSE|
Содержит код ошибки расширенного интерпретатора Бейсика.
BAUP _23391/92 t#SBSF/60|
Значение этой переменной используется для расчета скорости передачи по
последовательному интерфейсу принтера RS-232.
SERFL__23393/94 |#SB6</62|
Младший байт используется как флаг, если при приеме символа по RS-
232 интерфейсу был принят второй байт данных, который при этом поме-
щается в старший байт переменной.
COl_23395 (#5В63)
Номер позиции печатаемого на принтере символа, по достижению значения
переменной WIDTH автоматически будут выведены коды для перевода
печатаемой позиции на начало новой строки.
WIDTH 23394 (#5В64)
Хранит номер максимальной печатной позиции при выводе на принтер, то
есть ширину строки символов.
TVPARS 23397 (#5В65)
Флаг-счетчик, используемый при выводе по RS-232 интерфейсу многобай-
товых управляющих символов, например, AT, TAB.
FLAGS3 23398 (#5В66)
Различные биты этой переменной управляют расширением интерпретатора
Бейсика 128:
Бит 0 сброшен, если работает экранный редактор бейсик-программы,
установлен в режиме калькулятора.
Бит 1 установлен, если для бейсик-программы задай номер строки авто-
запуска.
Бит 2 устанавливается при открытии файла на электронном диске;
Бит 3 сброшен, если используется магнитная лента, яри работе с элект-
ронным диском —• установлен;
Бит 4 установлен для команды Бейсика LOAD;
Бит 5 установлен для команды Бейсика SAVE;
Бит 6 установлен для команды Бейсика MERGE;
Бит 1 установлен для команды Бейсика VERIFY.
NSTR1 23399*..«23488 {#SB67...#SB70)
В этой переменной хранится десятисимволъыое имя файла при работе с
электронным диском, эта и следующие йять переменных образуют блок
управления файлом на электронном диске.
HPJTO__23489 j#5BJ1)
Тип файла:
0 — бейсик-программа,
1 — числовой массив,
2 — символьный массив,
3 — двоичный (кодовый) файл.
HPJ8B __23410/11 (#5872/73)
Длина блока данных.
НР„0Р__23412/13 (#5В74/75)
Адрес расположения блока данных в памяти.
HPJ)F 23414/11 t#5B76/77)
Длина бейсик-программы.
НР__11__23416/17 |#5В78/79)
Номер строки автозапуска для бейсик-программы.
SCJTO 23418 |#5В7А)
Тип файла (см. переменную HD__00 23409), эта и следующие три перемен-
ных образую второй (дополнительный) блок управления файлом на элект-
ронном диске.
SCJ№__23419/20 t#5B7B/7Cj
Длина блока данных.
SC„0Q_ 23421/22 (#5В7Р/7Е|
Адрес расположения блока данных в памяти.
SC_0F _23423/24 |#5B7F/80)
Длина бейсик-программы.
OLPSP_23425/26 (#5881/82}
Сохраняет значение указателя стека интерпретатора Бейсика на время
работы вспомогательных подпрограмм (экранного редактора, меню), при
этом используется временный стек TSTACK.
SFNEXT__ 23427/28 (#5В83/84)
Значение переменной указывает на первый свободный элемент в каталоге
электронного диска.
SFSPACE_ 23429/30/31 t#5B85/86/87)
Количество свободных байт на электронном диске.
ROWQ1_23432 (#5В88)
Образ первого ряда выносной клавиатуры*. Установленные биты соответст-
вуют нажатию на соответствующие клавиши.
ROW23_23433 t#5B89)
Образ второго и третьего рядов выносной клавиатуры.
ROW45__23434 С#5В8А|
Образ четвертого и пятого рядов выносной клавиатуры.
SYNRET_23435/36 (#5B8B/8Ct
Хранит адрес возврата из подпрограммы обработки ошибки бейснк-интер-
претатора.
LASTV_23437...23441 |#5В8Р...#5В91)
Хранит последнее напечатанное в калькуляторе значение.
RNL1NE__ 23442/43 |#5В92/93)
Номер текущей строки при перенумерации строк программы.
RNF1RST___23444/45 (#5В94/95|
Хранит номер начальной строки для перенумерации строк программы.
*) Клавиатура состоит из пяти рядов по четыре клавиши в каждом (из пятого
ряда используются только две клавиши).
RNSTEP_23446/47 {#5896/971
Хранит шаг перенумерации строк программы.
STRIP!_23448...23455 (#5В98...#5ВА5)
Восемь байт используются при выводе первой половины фирменного знака
(скошенные цветные полосы), кроме того, 32 байта начиная с этого адреса
используются при работе электронного диска.
STRIP!_23456-23463 t#5BA6...#5BA7)
Хранит вторую половину фирменного знака.
TSTACK_23464...23551 t#5BA8...#5BFF)
Область временного стека, используемого расширенным интерпретатором
Бейсика во время своей работы.
СИСТЕМНЫЕ ПЕРЕМЕННЫЕ ОСНОВНОГО БЕЙСИКА
KSTATE_23552...23559 (#5С00..#5С07)
Восемь байт составляют два блока, которые используются программой обслу-
живания клавиатуры (см. табл, 7). Для организации работы внешних про-
грамм эти переменные практически не применяются.
IASTJC__23568 1Y--50 (#5С88)
Код последней нажатой клавиши.
REPPEL_ 23561 IY-49 (#5С09)
Величина задержки (в 1/50 с) между нажатием клавиши и началом автома-
тического повторения нажатия (автоповтора).
REPPER_ 23562 8Y-48 (#5С0А)
Период автоповтора (в 1/50 с) при длительном нажатии на клавишу.
Изменяя системные переменные REPDEL и IREPP ЕЯ, можно настроить клавиа-
туру под конкретного пользователя.
PEFAPP_23563/64 1Y-47 (#5C0B/0C)
Адрес первого параметра пользовательской функции, определённой опера-
тором DEF FNi в процессе ее обработки. Например:
DEF FN n(a,b)~S!N a+COS b
[ DEF FN
DEF ADD
КАРАТА _ 23565 IY-45 l#5C0Pl
Код цвета, заданный дафровой клавишей в режиме курсора Е.
TVPATA _23566/67 IY-44 1#5C0E/0F)
Первый байт - код управления, заданный цифровой клавишей в режиме курсора Е.
Второй байт - первый параметр в AT или TAB.
STRMS, 23568...23605 1Y-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 IV—2 t#5C38)
Число, пропорциональное длительности звукового сигнала, предупреждаю-
щего о заполнении буфера редактора,
Р8Р__23609 IY—1 (#5С39)
Число, пропорциональное длительности звучания сигнала при нажатии на
клавишу.
ERR_m 23610 IY+0 (#5СЗА)
Число, на единицу меньшее кода сообщения, выдаваемого при ошибке
(включая сообщение о нормальном завершении выполнения программы 0 ОК).
FLAGS _ 23611 IY+1 (#5СЗВ)
Отдельные биты этой переменной используются операционной системой
(см. также переменную FL AGS2):
Бит 0 установлен, если не нужно выводить пробел перед бейсик-оиератором
(при выводе на экран или печати большинства операторов Бейсика перед
ними выводится пробел.);
Бит i установлен, если для вывода используется поток #3 (обычно —
принтер);
Бит 2 установлен при вводе символа в режиме курсора L, сброшен при
вводе в режиме курсора К?
Бит 3 установлен при ожидании ввода символа в режиме курсора L,
сброшен при ожидании ввода в режиме К;
Бит.4 установлен, если работает расширенный интерпретатор Бейсика в
ZX Spectrum 128; при работе в стандартной конфигурации сброшен;
Бит 5 устанавливается при нажатии на любую символьную клавишу. Код
клавиши можно прочитать из переменной LAST_K;
Бит 6 установлен при обработке числового выражения, сброшен при
обработке символьного;
Бит 7 установлен при выполнении программы, сброшен при проверке
синтаксиса введенной строки.
TVJFIAG 23612 IY+2 (#5СЗС)
Отдельные биты этой переменной используются для управления выводом на
экран:
Бит 0 установлен при выводе на служебный экран, сброшен при выводе на
основной экран;
Бит 3 установлен, если режим вывода на экран мог измениться и требуется
проверка режима;
Бит 4 установлен при выводе листинга программы;
Бит 5 установлен при необходимости очистить служебный экран (напри-
мер, перед выводом сообщения).
ERR_SP_23613/14 IY+3 t#SC3P/3E)
Адрес, на который устанавливается указатель стека при запуске программы
обработки ошибок. Изменив значение переменной, можно подключить собствен-
ные процедуры обработки ошибок (см. «Использование подпрограмм ПЗУ»).
USTJ5P__23615/16 iY-fS t#SC3f/40)
Сохраняет адрес вершины стека в процессе вывода листинга программы.
МОРЕ _ 23617 8YH-7 (#5С41)
Число, определяющее режим ввода с клавиатуры:
0 — очередной символ вводится в режимах курсора К, L или С;
1 — очередной символ вводится в режиме курсора Е;
2 и более — очередной и последующие символы вводятся в режиме кур-
сора G. При значении, превышающем 2, меняется внешний вид курсора.
NEWPPC 23618/19 8Y4-8 (#5С42/43)
Номер строки бейсик-программы, в которой расположен следующий выпол-
няемый оператор.
NSPPS 23626 iY i-10 (#$€44)
Номер следующего выполняемого оператора в строке бейсик-программы.
Переменные NEWPPC и NSPPS можно использовать для перехода к произволь-
ному оператору в бейсик-программе.
РРС 23621/22 IY+11 |#5С45/46)
Номер строки бейсик-программы, в которой расположен выполняемый оператор.
При выполнении оператора в непосредственном режиме в переменную
записано число 55534 (#FFFE).
SUBPPC 23623 IY-H3 t#5C47)
Номер выполняемого оператора в строке бейсик-программы.
BORPCR_ 23624 IY+14 (#5C48)
Атрибуты служебного экрана. Цветом фона служебного экрана определяется
цвет бордюра.
Е_РРС_23625/26 MY+1S |#5С49/4А)
Номер строки бейсик-программы, отмеченной курсором.
YAPS _23627/28 1Y-H7 t#5C4B/4C)
Адрес начала области переменных бейсик-программы.
PEST_23629/38 IY-H9 С#5С4Р/4Е)
Адрес первого символа имени обрабатываемой в данный момент перемен-
ной.
CHANS _23631/32 IY+21 (#5C4F/50)
Адрес начала области информации о каналах (см. «Архитектура
ZX Spectrum»).
CURCHL 23633/34 IY+23 (#5CS1/52)
Адрес первого байта описателя текущего канала в области информации о
каналах (см. «Архитектура ZX Spectrum»).
PROG 23635/36 IY4-2S (#5€S3/S4)
Адрес начала бейсик-программы. Вычитанием значения системной пере-
менной VARS из значения PROG вычисляется длина бейсик-программы.
NXTL8N 23637/38 IY+27 (#505/56}
Адрес начала следующей строки бейсик-программы.
РАТАРР _23639/40 BY+29 f#5CJ7/58j
Адрес последнего считанного оператором READ объекта данных в операторах
DATA.
E_JLINE 23641/42 IY+31 (#5С59/5А)
Адрес начала редактируемой строки.
K_CUR_ 23643/44 SY+33 (#5С5В/5С)
Адрес символа редактируемой строки, на который установлен курсор.
СН„АРР_23645/46 IY-F35 (#5С5Р/5Е)
Адрес следующего обрабатываемого символа в бейсик-программе.
Переменная может быть полезна при использовании внешних процедур
обработки синтаксиса.
X_P¥R_23647/48 IY+37 (#5C5F/6C?
Адрес символа бейсик-строки, вслед за которым установлен знак ? при
обнаружении синтаксической ошибки. В операциях, не связанных с провер-
кой синтаксиса, переменная может использоваться компьютером для времен-
ного хранения другой служебной информации.
WORKSP_23649/50 IY+39 (#5С61/62)
Адрес начала рабочей области бейсик-программы.
STKBOT_23651/52 IY+41 (#5С63/64)
Адрес начала стека калькулятора.
STKENP_23653/54 IY+43 t#5C65/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 установлен при использовании режима курсора К.
PF_SZ__23659 IY+49 (#5С6В)
Количество строк в служебном экране. Число строк в основном экране может
быть увеличено до максимума (24 строки) выполнением оператора РОКЕ
23659,0. Однако если количество строк в служебном экране меньше 2, то при
попытке вывода на него любого сообщения, например, ОК или BREAK — CONT
repeats, система будет вести себя самым неприличным образом. Запись в DF_SZ
нуля — один из способов защиты бейснк-программ от останова.
SJfOP _23660/61 IY+50 t#5C6C/6P)
Номер строки бейсик-программы, начиная с которой выводится автомати-
ческий листинг (по нажатию клавиши £nter).
QLPPPC 23662/63 IY+52 (#5C6E/6F)
Номер строки бейсик-программы, начиная с которой будет продолжено
выполнение программы после ввода оператора CONTINUE.
OSPCC___ 23664 IY+54 (#5С70)
Номер оператора в строке бейсик-программы, начиная с которого будет
продолжено выполнение программы после ввода оператора CONTINUE.
FLAGX_23661 IY+S5 (#5С7«1
Используется при обработке оператора INPUT:
Бит 1 установлен, если оператором INPUT вводится новая переменная;
Бит 5 установлен при работе в режиме ввода оператором INPUT, сброшен
в режиме редактирования бейсик-строки;
Бит Ь. установлен при обработке строки, введенной оператором INPUT;
Бит 7 установлен, если выполняется оператор INPUT LINE.
STRLEN_23666/67 IY+56 }#SC72/73)
Длинна обрабатываемой символьной переменной (ранее определенной) либо
идентификатор числовой или новой символьной переменной (младший
байт).
T_APPR_23668/69 IY+58 |#5С74/75)
Адрес следующего элемента в таблицах синтаксиса, расположенных в ПЗУ.
SEEP__23670/71 1Y+60 |#5С76/77)
Значение, используемое для вычисления псевдослучайного числа. После вы-
полнения оператора RANDOMIZE, переменная SEED изменяется в соответствии
со введенным параметром. Если RANDOMIZE использовался без иах^аметроз, то
в переменную SEED копируются два младших байта из переменной FRAMES.
FRAMES 23672/73/74 BY+62 t#5C78/79/7A|
Системный счетчик. После запуска (сброса) компьютера обнуляется. При
работе со стандартной процедурой обработки прерываний значение счетчи-
ка каждые 1/50 секунды увеличивается на единицу.
UPG 23675/76 IY+65 С#5С7В/7С|
Адрес начала области, используемой для размещения определяемых пользо-
вателем символов (см. «Русификация ZX Spectrum»).
COORPS 23677/78 IY+66 t#5C7P/7E)
Координаты X и Y последней изображенной на экране точки.
PJTOSN __23679 1Y4-69 (#5C7Fj
Содержит значение 33—п, где п -— номер следующей позиции печати в буфере
принтера.
PR_.CC__23688 IY4-79 (#5С80)
Младший байт адреса области, используемой в текущий момент под буфер
принтера.
NOTJJSEP _ 23681 IY+71 (#5С81)
В большинстве описаний эта переменная характеризуется как неиспользуемая
(о чем говорит ее название), но в действительности она содержит старший байт
адреса области, используемой в текущий момент под буфер принтера.
При выводе на ZX Printer операционная система подготавливает строку к
печати в буфере, расположенном по адресу, указанному переменными
WR_CC и NOT_U5B>.
ЕСНО Е__23682/83 IY+72 t#5C82/84)
Позиция (номер строки и колонка) следующего символа вводимой бейсик-строки.
DF_CC_ 23684/85 IY+74 (#5С34/35)
Адрес байта, соответствующего верхней линии точек знакоместа основного
экрана, в которое будет осуществлен вывод следующего символа.
PFCCL_23686/87 IY+76 (#5С86/87)
Адрес байта, соответствующего верхней линии точек знакоместа служебного
экрана, в которое будет осуществлен вывод следующего символа.
S_POSN_13688/89 IY+78 (#5С88/89)
Координаты следующей позиции вывода на основной экран. Координаты
хранятся в виде:
24—пг, 33—пс
где пг — номер строки, пс — номер столбца.
SPONSL_23690/91 IY+80 (#5С8А/8В)
Координаты следующей позиции вывода на служебный экран.
SCR_CT__23692 IY+82 (#5СЗС)
Число, на единицу большее количества строк, передвигаемых по экрану
вверх без запроса scroll?. Изменением содержимого этой ячейки можно
добиться безостановочного скроллинга экрана при выводе текста.
ATTRJ»__ 23693 1У+83 (#5С8Р)
Постоянные атрибуты экрана, задаваемые операторами PAPER, МК, FLASH и
BRIGHT*.
MASKP__23694 IY+84 t#5C8E)
Маска для разделения постоянных (ATTR__T) и текущих атрибутов при выводе
на экран. Если в MASK_P бит установлен, то соответствующий бит атрибута
при выводе на экран не изменяется.
ATTR„T__23695 IY+85 (#5C3Fj
Временные атрибуты, используемые при выводе на экран, например, опе-
ратором PRINT INK 7; PAPER 1;"../'.
MASK T 23696 IY+86 (#5C90)
——5ДЬи I IM—— —— ——■ —
Маска для разделения временных (ATTR_P) и текущих атрибутов при выводе на
экран.
P^FLAG_ 23697 1УЧ-87 (#5С91)
Параметры вывода на экран. Четные биты используются для постоянных
параметров, нечетные — для временных:
Бит 0/1 установлен при использовании OVER 1;
Формат хранения атрибутов соответствует формату их записи в области
атрибутов, см. «Архитектура ZX Spectrum»,
Бит 2/3 установлен при использовании INVERSE 1;
Бит 4/5 установлен при использовании INK 9;
Бит 6/7 установлен при использовании PAPER 9.
МЕМВОТ 23698...23727 (#5C92...#5CAF)
Область, используемая калькулятором для размещения значений, которые
неудобно обрабатывать через стек калькулятора.
NMIAPP__23728/29 IY+118 (#5СВ0/В1)
Не используется. Авторы системы, очевидно, предполагали задействовать эту
системную переменную для обслуживания немаскируемых прерываний, но
из-за допущенной неточности переменная действительно оказалась неис-
пользуемой*.
RAMTOP_ 23730/31 IY+120 (#5СВ2/В3)
Последний адрес в ОЗУ, разрешенный к использованию интерпретатором
Бейсика. Устанавливается оператором CLEAR.
PJtAMT 23732/33 IY+122 (#SCB4/B5)
Адрес последнего байта физического ОЗУ. Устанавливается при инициали-
зации компьютера после теста доступной памяти. В исправном компьютере
с объемом оперативной памяти 48К переменная должна содержать значение
65535 (#FFFF).