3.4.3 Системные переменные 128К
В режиме 128К в области с #5B00 по #5BFF также
используются системой. Там находятся системные переменные.
Существует некоторая разница между областями системных
переменных в режимах 128К и 48К. В 48К все переменные по
адресу ниже #5C00 не существуют. Вместо этого там находится
буфер принтера, но многие хранят там маленькие программы и
если одна из них будет запущена в режиме 128К, то призойдет
сбой в системе. Поэтому большинство программ рекомендуется
запускать из режима 48К (хотя сначала лучше проверить
работает она или нет в 128К-режиме).
SWAP, 20 байт, #5B00, R, 23296
Подпрограмма смены страниц памяти:
PUSH AF
PUSH BC
LD BC,#7DDF
LD A,(#5B5C)
XOR #10
DI
LD (#5B5C),A
OUT (C),A
EI
POP BC
POP AF
RET
YOUNGER, 9 байт, #5B14, R, 23316
Подпрограмма обмена страниц памяти
ON_ERR, 18 байт, #5B19, R, 23325
Подпрограмма обмена страниц в случае ошибки.
P_IN, 5 байт, #5B2F, R, 23343
Подпрограмма ввода с RS232
P_OUT, 22 байта, #5B34, R, 23348
Подпрограмма вывода в RS232
P_OUT2, 14 байт, #5B4A, R, 23370
Подпрограмма вывода 1 байта в RS232
TARGET, слово, #5B58, N, 23384
Адрес вызываемой подпрограммы из Бейсик-ПЗУ (старое ПЗУ).
RETADDR, слово, #5B5A, X, 23386
Адрес возврата в ПЗУ-128К, после вызова процедуры.
BANK_M, байт, #5B5C, X, 23388
Копия последнего байта посланного в порт #7FFD
RAMRST, байт, #5B5D, X, 23389
Здесь храниться код инструкции Z80 RST 8
RAMERR, байт, #5B5E, N, 23390
Код ошибки Бейсик-ПЗУ.
BAUD, слово, #5B5F, , 23391
Скорость передачи данных для RS232. Храниться как битовый
период в виде Т/26. Храниться сначала старший байт, потом
младший.
SERF, 2 байта, #5B61, N, 23393
Флаг состояния, принимаемого с RS232 значения и само
значение.
COL, байт, #5B63, N, 23395
Текущая колонка печати на принтере
WIDTH, байт, #5B64, , 23396
Ширина страницы принтера
TVPARS, байт, #5B65, , 23397
Код параметра ожидаемого с RS232
FLAGS3, байт, #5B66, , 23398
Флаговый байт
N_STR, 10 байт, #5B67, N, 23399
Имя файла, записываемого в RAM-DISK
HD00, байт, #5B71, N, 23409
Тип файла, записываемого в RAM-DISK
HD0B, слово, #5B72, N, 23410
Длина файла, записываемого в RAM-DISK
HD0D, слово, #5B74, N, 23412
Адрес, с которого был записан в RAM-DISK
HD0F, слово, #5B76, N, 23414
Длина бейсик-программы, записанной в RAM-DISK. Отняв
HD0F от HD0B получите размер области переменных записанных в
RAM-DISK
HD11, слово, #5B78, N, 23416
Номер строки, с которой будет запускаться бейсик-программа
при считывания RAM-DISKа
SC00, байт, 5B7A, N, 23418
Тип файла
SC01, слово, #5B7B, N, 23419
Длина файла
SC08, слово, #5B7D, , 23421
Начало загрузки
SC0F, слово, #5B7F, , 23423
Длина программы
OLDSP, слово, #5B81, X, 23425
Здесь временно сохраняется регистр SP при использовании
TSTRACK.
SFNEXT, слово, #5B83, X, 23427
Указатель свободного места в директории
SFSPACE, 3 байта, #5B85, X, 23429
Размер свободной памяти RAM-DISKа
ROW01, байт, #5B88, , 23432 малая клавиатура +1 ряд
ROW02, байт, #5B89, , 23433 2+3 ряд
ROW03, байт, #5B8A, , 23434 4+5 ряд
Недокументированные ячейки, назначение их неясно.
(Возможно, они предпологались для обслуживания клавиатуры с
последователеной передачей данных, как в IBM PC)
SYSRET, слово #5B8B, X, 23435
Адрес возврата для процедуры ON_ERR-32767
LAST_V, 5 байт, #5B8D, , 23437
Последнее значение введенное в калькуляторе
RNLINE, слово, #5B92, , 23442
Текущая перенумеруемая строка
RNFIRST, слово, #5B94, , 23444
Новый номер первой строки при перенумерации. Хранить сначала
старший байт, потом младший.
RNSTEP, слово, #5B96, , 23446
Приращение номера строки при перенумерации. Хранить сначала
старший байт, потом младший.
STRPI1, 8 BAJT, #5B98, N, 23448
Полоска первой карты битов
STRIP2, 8 байта, #5BA0, N, 23456
Полоска второй карты битов
TSTACK, ,,X,
Область временного стека, начинающегося с адреса #5BFE и
растет вниз по памяти.
3.4.4 Системные переменные TR-DOS
Дисковой операционной системе также необходимо где-то
хранить информацию о дисководах и режимах работы, файлах и
т.п.
Для этого она используется область начиная с адреса
#5CB6 (23734)
Для системных переменных TR-DOS еще не сложились имена в
технической литературе (точнее говоря их вообще никто не
давал), поэтому я здесь наберусь наглости дать эти имена
сам.
UNIT_F, байт, #5CB6, X, 23734
Используется при наличии INTERFACE 1. Если значение
равно #F4, то область остается на старом месте. Если байт
равен 0, то происходит проверка байта #5D18 и
соответствующая операция.
S_RET, байт, #5CC2, , 23746
Содержит код команды RET. Используется TR-DOS для вызова
подпрограмм Бесйик-ПЗУ.
MODE_A, байт, #5CC8, ,23752
Код режима работы дисковода А.
бит 7=1, если дисковод 80-ти дорожечный.
бит 1=1, если дисковод двухсторонний
бит 0=0, если 80-ти дорожечный дисковод используется как 40
дорожечных
MODE_B, байт, #5CC9,X, 23753
Код режима работы дисковода В. См MODE_A
MODE_C, байт, #5CCA,X, 23754
Код режима работы дисковода С. См MODE_A
MODE_D, байт, #5CCB,X, 23755
Код режима работы дисковода D. См MODE_A
C_SERD, байт, #5CCC, X, 23756
Текущий сектор при чтении каталога
READY, байт, #5CCD, X, 23757
Содержит #80 при готовности текущего дисковода.
TRMODE, байт, #5CCE,X, 23758
Режим работы:0 чтение/#FF запись
DOS_ER, байт, #5CD6, X, 23766
Содержит #FF, если команда не выполнена
X_BYTE, слово, #5CD7, X, 23767
Для файлов типа BASIC или BYTE - адрес старта. Также
содержит число дорожек сразу после тестирования дисковода.
CHADD2, слово, #5CD9, X, 23769
Внутренний аналог CH_ADD. Также примежуточная длина файла
типа BYTES или BASIC
LENPRG, слово, #5CDB, X, 23771
Длина бейсик программы
NAME_F, 8 байт, #5CDD, , 23773
Имя файла
TYPE_F, байт, #5CE5, , 23781
Тип файла
PAR_F, слово, #5CE6, , 23782
Параметры файла:
Для Бейсика - длина бейсик программы без переменных
Для кодов - стартовый адрес
LEN_F, слово, #5CE8, , 23784
Для файла
SEC_F, байт, #5CEA, , 23786
Размер файла в секторах
FIR_SE, байт, #5CEB, , 23787
Номер первого сектора файла
FIR_TR, байт, #5CEC, , 23788
Номер первой дорожки файла
A_UNIT, байт, #5CEF, X, 23791
Содержит 1 если есть INTERFACE 1
CUR_SEC, байт, #5CF4, X, 23796
Номер текущего сектора
T_DRV, байт,#5CF6, , 23798
Дисковод для временной операции (от 0 до 3). Например LOAD
"A:HELP.ASM" CODE
DOS_ON, слово, #5CF7, , 23799
Обнуляется при возврате из TR-DOS
DBLDRV, байт, #5CF8, , 23800
Дисковод при операциях с двумя дисководами, в
противном случае #FF.
DBLMOD, байт, #5CF9, , 23801
Режим работы при работе с двумя дисководами (признак
операции READ/VERIFY). #FF - VERIFY, 00 READ. Сюда также
заноситься номер дискова при внутренней операции 7 (CAT).
TIME_A, байт, #5CFA, , 23802
Время перемещения головки дисковода А.
TIME_B, байт, #5CFB, ,23803
Время перемещения головки дисковода В.
TIME_C, байт, #5CFC, , 23804
Время перемещения головки дисковода С.
TIME_D, байт, #5CFD, ,23805
Время перемещения головки дисковода D.
WG_CODE, байт, #5CFE, X, 23806
Код команды для контроллера дисковода ВГ93
SEC_WRK, байт, #5CFF, X, 23807
Номер сектора для подпрограмм записи, чтения
BUF, слово, #5D00, X, 23808
Текущий адрес буфера
HID_HL,слово,#5D02, X,23810
Временно хранит HL при необходимости
HID_DE, слово, #5D04, X, 23812
Временно хранит DE при необходимости
CH_NAME, байт, #5D06, , 23814
Количество символов, по которым осущесвляется поиск имени
файла. Нормальное значение - 9, но вы можете его уменьшить.
Увеличивать не рекомендую.
DELF, байт, #5D07, X, 23820
Количество удаленных файлов
DELN,байт,#5D08,X,23816
Первый символ удаленного файла
WRKBUF, слово,#5D0C,X,23820
Флаф наличия рабочего буфера TR-DOS (257 байт с адреса
23846):
FF - отсутствует
00 - существует
FL_COM,байт,#5D0E,X,23822
Флаг принадлежности команд бейсика
FF - бейсик,
любое другое значение - TR-DOS
ER_FL,байт,#5D0F,X,23823
Код ошибки TR-DOS. При равенстве 0 выводит пустую строку,
иначе пустую строку (подпрограмма по адресу #20EF)
ER_HIGH,байт,#5D10,X,23824
Старший байт ошибки. При переходе в TR-DOS обнуляется. При
вызове подпрограмм TR-DOS следует обнулять принудительно.
COMADD,слово,#5D11,X,23825
Адрес строки команды TR-DOS. При вызове:
15616 - хранит E_LINE
15619 - хранит CH_ADD
ERRSP2, слово,#5D13,X,23827
Копия ERR_SP.При равенстве старшего байта АА выполняется
команда RUN "boot" и в #5D18 заноситься #FE
MES_ON,байт,#5D15,X,23829
При равенстве 00 печатает сообщения TR-DOS, иначе не
печатает.
SYSREG,байт,#5D16,,23830
Копия системного регистра (Микросхема 555ТМ9)
X_FL,байт,#5D17,,23831
При не равенстве АА рисует заставку, при равенстве FF не
попадает на ошибку при чтениее неверного адресного маркера.
INT_ON,байт,#5D18,X,23832
Используется при подключенном INTERFACE1. Если равно FF, то
меняются блоки в памяти по адреса 23747 и 23959 длиной в 45
байт. При вызове TR-DOS заноситься FF
DRVDEF,байт,#5D19,,23833
Дисковод по умолчанию (0-3)
RETADD,слово,#5D1C,X,23834
Адрес процедуры завершения. Нормальное значение #0201
HID_SP,слово,#5D1C,X,23836
Временно сохраняет регистр SP
TRLINE,3 байта,#5D20,,23840
Первые три символа введенной строки
Системные переменные BETA-BASIC
E_PPC,слово, ,23635
После ввода команды LIST PROC содержит номер первой строки
процедуры
LST_LN,слово, ,N,56358
После ввода команды LIST PROC содержит номер последней
процедуры.
OVER2T,байт,,,57362
Времеенные атрибуты для OVER2
OVER2P,байт,,,57363
Постоянные атрибуты для OVE2
X,байт,,,57364
Х координата печати на экране
Y,байт,,57365
Y координата печати на экране
XRIGHT,,,57366
Минимальная по Х граница окна
XLEFT,,,57367
Максимальная по Y граница окна
YTOP,байт,,,57368
Максимальная координата окна по Y
YBOT,байт,,,57369
Минимальная координата окна по Y
CURWIN,байт,,,57376
Номер текущего окна. Дла 0 - содержит 0, иначе номер окна +
127
PRETTY,байт,,,57381
Содержит 1,если необходимо структуировать "лесенкой"
LNSQ,байт,,,57382
Содержит 0,если не нужно выводить номера строки
KYWD,байт,,,57383
Входной режим, зависит от WINDOW и CSIZE
CH_WGH,байт,,,57391
Число знаков на строку
NET_CMP,байт,,,57395
Число компьтеров в сети
UNIT_CO,байт,,,57396
Код устройства (T, M, B, N.)
CLCK_PS,2 байта,,,61316
Позиция на экране для вывода часов
CLCK_SP,байт,,,56866
Число 1/50 - скорость течения времени
CLCK_ST,айт,,56870
Число 54(60) или 58(100) пропоршиональное шагу часов
INT_CH,байт,,,23729
Прин Н<87916 содержит для INTEFACE 1 ширину знаков
INT_CH2,байт,,,57500
То же, но при N>87916
3.4.6 Другие системные переменные
Многие программы имеют сови системные переменные,
которые могут представлять маленький интерес. Но имеются
некоторые аппаратные средства, которые могут использовать
стандартные переменные под свои "нестандартные" нужды.
Например NMIADD испозуется BETA-BASIC, AMX-MOUSE, а также
ZX-LPRINT III
3.5 Маркеры, идентефицирующие версию ПЗУ и машины
Программы BIOS фиксированны в памяти поэтому в тех
случаях, когда возникает необходимость в их дополнении и
исправлении, эти программы нелегко изменить. Это означает,
что перед записью в ПЗУ такие программы должны быть
тщательно протестрованы. Фирма Sinclair Research Ltd.
достигли в этом больших успехов: до сих пор в ПЗУ
компьютеров было обнаружены только необльшие и сравнительно
незначительные ошибки.
Различные версии программного обеспечения ПЗУ могут
вызывать нокоторые затруднение у программистов, которые
могут обнаружить, что эти различия влияют на рабочие
характеристики их программ. Однако еще большую сложность для
программ использующих стандартный знакогенератор для вывода
сообщениий. При различных прошитых символах на экране
появляется всакая абракодабра, как например, в игре RAINBOW
ISLAND или FLIGHT MASTER. Больше всего от монитор 90 года
пострадал язык Си.
Для определения типа комьпютера можно написать
программы, которые будут "гонять" компьютер, проверять
память, сканировать порты, подсчитывать контрольные суммы.
Но проще использовть маркер находящийся в ПЗУ и показывающий
год выпуска и название фирмы, выпустившей компьютер. (Это
всегда одна и таже)
Дата выпуска ПЗУ можно найти по адресу . Эта область
содержит символы ASCII и означают год. Дата выпуска служит
только для идентефикации версии ПЗУ. Эта информация может
использоваться только тогда, когда возникает необходимость
работать с различными версиями ПЗУ. Эта дата представляет
собой часть сообщения, которую вы можете увидеть после
включения комьпютера.
Ниже представлены основные варианты:
82 Исходный компьютер
86 128К - ПЗУ редактора
90 Модифицированный вариант ПЗУ.
Конечно существует множество других версий. Наприме мне
известно около 10 других вариантов. Длее находяться всякие
буковки, которые вы можете увидеть при вклюхениее
компьютера. Почти всегда это Sinclair Research Ltd.
3.6 Бейсик, записанный в ПЗУ
Теперь перейдем к третьему элементу ПЗУ - Бейсику. Он
используется для двух целей. Во-первых, он ялвяется ядром
языка Бейсик. Дисковыя версии Бейсика, BETA BASIC или LASE
BASIC, при совей работе самым существенным образом
используют Бейсик в ПЗУ. Во-первых, Бейсик - ПЗУ
обеспечивает диалог с пользователем, когда комьпютер
запускается без диска.
Каждый раз, когда мы используем один из интерпритируюий
Бейсиков, мы обязательно используем и бейсик в ПЗУ. В тоже
время откомпилированные программы на языка Бейсик также его
используют.
3.7 Расширения ПЗУ
Эта часть ПЗУ больше относиться к конструкции Спектрума,
чем к содержимому его памяти. Конструкция компьютера
позволяет подклюхить на системный разъем любую схему,
которая сможет перехватывать все управление компьютером.
Постоянные расширения ROM-BIOS Это программы работающие
подобно встроенным программам ROM-BIOS, однако добавляющие
такие функции, которые не поддерживаются стандартным ПЗУ.
Обычно это программы, поддерживающие новые переферийные
устройства. Наилучшим примером может служить TR-DOS,
дисковая операционная система фирмы TECHNOLOGI RESEARCH LTD.