РЕСТАРТЫ ПЗУ 48 (1982)
(программы и таблицы)
(c) Shaitan/Stars of Keladan
В последнее время очень много ведется
разговоров о том, что Спектрум умирает.
Все говорять, что мало появляется людей
и никто не пытается каким бы то ни было
образом их превлечь. Вот мы и решили за-
полнить этот пробел. Ведь начинающему
программеру надо сначала разобраться с
главными принципами, которые, кстати,
еще ни где не были описаны. Именно
поэтому мы и решили описать ПЗУ со всеми
(или большинством) точками входами и па-
раметрами, необходимыми для создания бо-
лее или менее качественного продукта.
Итак, начнем.
Часть первая
Все числа указаны в шестнадцатиричной
системе.
Сразу оговорюсь, что вся информация бы-
ла взята из периодической прессы, книг
издательств "Питер" и "Солон", а также и
из своих наработок.
0000 START По обращению к этому адресу
производиться первоначальный запуск.
Запрещаются маскируемые прерывания, очи-
щается регистр А, регистровая пара DE
принимает значение FFFF и производится
переход на адрес 11CB. Обратиться к дан-
ной процедуре можно как CALL 0, так и
RST 8
0008 ERROR Обработчик ошибок, для выдачи
собщения в регистре А должен содержаться
порядковый номер сообщения в таблице -1.
Перед началом работы очищается стек и
выдается сообщение. Обращение произво-
диться командой RST 8
0010 Print a Character Данной процедурой
производиться печать символа в текущий
канал, код символа предварительно должен
быть занесен в регистр А. Обращение про-
изводиться командой RST 10. В данном
участке программы производиться переход
на адрес 15F3
0018 Collect character. Обращение произ-
водиться командой RST 18
0020 Collect next character. Обращение
производиться командой RST 20
0028 Calculator Название говорить само
за себя. С помощью данной процедуры вы
сможете производить различные арифмети-
ческие операции над числами. В данном
куске памяти производиться переход на
адрес 335B. Обращение производиться ко-
мандой RST 28
0030 Make BC spacer. Данной прцедурой
производиться выделения участва памяти в
рабочей области. В данном куске произво-
диться переход на адрес 169E. Обращение
производиться командой RST 30
0038 Maskable interrupt. Программа обра-
ботки маскируемых прерываний первого ро-
да. Часы реального времени обновляются и
осуществляется сканирование клавиатуры
по адресу 02BF. Принудительно данную
процедуру можно вызвать командой RST 38
0053 ERRROR 2
0066 Non mask interrupt. Обработчик не-
маскируемых прерываний. В данной проце-
дуре разработчиками была допущена ошиб-
ка. Данная программа должна работать
следующим образом. Если от какого-либо
внешнего устройства пришел сигнал немас-
кируемых прерываний, то, если по адресу
5CB0 содержиться адрес вашей процедуры
обработки немаскируемых прерываний, то
производиться переход н нее, а после ее
выполнения производиться возврат в прер-
ванную процедуру. Если же по данному ад-
ресу содержиться 0, то производить мо-
ментальный выход в прерванную процедуру.
0074 CH-ADD+1
007D Skip - over
0095 Token tables Таблица ключевых слов
0205 Key tables Таблица клавиш. Сущест-
вует 6 таблиц, по 1 на каждый режим. На-
иболее важна 1-ая таблица, которая со-
держит значени в коде ASCII для больших
букв и цифр.
028E Keyboard skanning. Значение клавиши
возвращается в регистровею пару DE. Флаг
Z сбрасывается, если одновреммено было
нажато более 2-х клавиш. Регистр Е ука-
зывает на номер нажатой клавиши (0-27),
а регистр D, на регистр, в каком была
нажата данная клавиша.
02BF KEYBOARD
0310 Repating key
031F K - TEST
0333 Keyboard decoding
Последние 4 процедуры осуществляют воз-
можность повторения и декодируют значе-
ние нажатой клавиши для получения необ-
ходимого кода литеры. Если клавиша нажа-
та, то ее код копируется в системную пе-
ременную LAST-K и бит 5 FLAG устанавли-
вается для сигнализации о нажатии клави-
ши. После считывания кода клавиши, 5-й
бит переменной FLAG необходимо сбросить.
03B5 BEEPER На входе регистровая пара HL
содержит высоту тона трубуемой ноты, а
DE содержит саму ноту, т.е
HL=(437.500/f)-30.125 DE=f*t
где f-частота ноты в Гц, t-время звуча-
ния ноты.
03F8 BEEP Эта процедура аналогична пре-
дыдущей, но в отличается тем, что она
очень активно использует калькулятор
046E Semi-tone table Таблица для получе-
ния полутонов
04C2 SAVE - BYTES Передает количесво
байт, указанных в паре DE, начинай с ад-
реса, хранящегося в регистре IX на маг-
нитофон с начальным адресом и байтом
четности.
053F SAVE LOAD RETURN
0556 LOAD - BYTES Программа считыва-
ния/сравнения данных, количество которых
указанно в паре DE, начиная с адреса,
указанного в IX. Если перед запуском
флаг переноса сброшен, то производиться
сравнение, в противном случае загрузка
данных.
05E3 LOAD - EDGE - 2
0605 S A V E - E T C. Точка входа во все
программ работы с магнитофоном
07CB VERIFY Control
0802 LOAD ( блок данных )
0808 LOAD Control
08B6 MERGE Control
0970 SAVE Control Программа выгрузки
данных. Послеее запуска на экране появ-
ляется надпись о необходимости запуска
ленты и нажатия любой клавиши, после че-
го начнется выгрузка данных с заголовком
09A1 CASSETE MESSAGES Сообщения связан-
ные с работой с магнитофоном
Далее идут программы для работы с экра-
ном и принтером. Если 1-й бит переменной
FLAGS установлен, то работа производить-
ся с принтером, в противном случае с эк-
раном.
09F4 PRINT - OUT Определение управляющих
символов
0A11 Control-character table Таблица уп-
равляющих символов
0A23 CYRSOR Left
0A3D Carriade return
0A5F PRINT COMMAND
0A69 PRINT a guestion mark
0A6D Control character with operand
0AD9 Position table
0ADC Position store Процедура определе-
ния текущей позиции
0B03 Position fetch
0B24 PRINT any character
0B7F PRINT all character
Последние две программы предназначены
для вывода текста на экран/принтер. На
входе в HL содержатся начальные позиции
печати, BC содержат текущие значения
строки и колонки, а регистр А содержит
код символа. Во время работы анализиру-
ются разрешения работы в режимах INVERSE
и OVER.
0BDB Set attribute byte Установка атри-
бутов на символ после его печати
0C0A Messadge printing Программа печати
сообщений. На входе регистровая пара DE
должна содержать адрес начала таблицы
сообщений, а регистр А номер сообщения,
начиная с нуля. Особеностью построения
таблицы является то, что последний печа-
туемый символ должен иметь установленный
старший бит.
0C10 Messadge printing Программа печати
ключевых слов. В регистре А должен со-
держаться номер слова в таблице.
0C3B Position save
0C41 TABLE search
0C55 TEST for scroll Проверка текущей
позиции печати на выход за экран. Если
позиция по строкам вышла за экран, то
выводиться сообщение и ожидается нажатие
любой клавиши
0CF8 "SCROLL?" messadge
0D4D Temporary color items Программа
временных атрибутов.
0D6B CLS Command Выполнение команды CLS,
а также установка текущего потока 1
0D6E CLS2 Программа очищает служебный
экран, атрибуты для которого устанавли-
ваются в соответсвии с системной пере-
менной BORDCR
0DAF Clearning the whole display area
0DD9 CL - SET
0DFE SCROLING2 Программа скролирования
экрана на одну строку
0E00 SCROLLING Программа скроллирования
определенного количества строк, которое
распологается в регитре В.
0E44 Clear lines Очистка определенного
количества строк, которое должно нахо-
дится в регистре В. Отсчет строк начина-
ется сниза экрана
0E88 CL - ATTR
0E9B CL - ADDR
0EAC COPY COMMAND Выполнение команды CO-
PY
0ECD COPY - BUFF Содержимое буфера прин-
тера передается на принтер
0EF4 COPY LINE Собственно работа с прин-
тером
0F2C EDITOR Программа для набора строки
на Бейсике в области редакции. При каж-
дом нажатии клавиши печатаемый символ
или ключевое слово добавляется в редак-
тируемую строку
0F81 ADD - CHAR Программа добавления
символа или ключевого слова в редактиру-
емую строку
0FA0 Editing keys table Таблица клавиш
редактирования
Далее распологаются подпрограммы для
обработки клавиш редактирования и обра-
ботки синтаксиса
0FF3 CURSOR down editing
1007 CURSOR LEFT editing
100C CURSOR RIGHT editing
1015 DELETE editing
101E ED IGNORE
1024 ENTER editing
1031 ED - EDGE
1059 CURSOR up editing
1076 ED SYMBOL
107F ED ERRORS
1097 CLEAR - SP
10A8 Keyboard INPUT Подпрограмма собира-
ет значения из LAST-K до тех пор, пока
бит 5 FLAGS показывает, что нажата новая
клавиша. Если код "печатаемый", то уста-
навливается флаг переноса и флаг Z
10DD Caps Lock key Обработка нажатия
клавиши Caps Lock
10E9 Ext. Input Обработка нажатия клавиш
Ext. Mode, Graphics, Caps/Symbol Shift
10FA Number Key Обработка нажатия цифро-
вых клавиш.
Далее следуют 3 подпрограммы для пост-
роения в редакторской или рабочей облас-
тях редакторской строки или входной
строки, высвечивание ее на экране
111D Lower screen copying
1190 SET - HL
11A7 REMOVE - FP
11B7 NEW Command Выполнение команды NEW.
11CB Main entry (Initioalisation). При
входе если регистр А=0, то производится
полный рестарт, если А=FF, то только вы-
полнение команды NEW
11CC ClearScr Очистка экрана, установка
стандартных атрибут
11D0 Imer Установка стандартного вектора
прерываний
11DA RAM - CHECK. Программа тестирования
памяти на пригодность начиная с адреса
4000 до RAMTOP. На выходе в паре HL на-
ходится адрес последней пригодной к ис-
пользованию ячейки
11F0 Init2 Установка системных перемен-
ных P-RAMT, RASP, PIP, UDG в начальное
состояние. Выполняется при исполнении
команды NEW
1200 Init3 Программа применяется при
первоначальном старте. Копируются симво-
лы UDG в соответствующую область памяти,
переинициализируются системные перемен-
ные PIP, RASP, UDG
1219 Imer3 Установка адреса текушего
шрифта, организуется стек, устанавлива-
ется первый режим прерываний, регистр IY
устанавливается равным 5C3A
1235 Channel Копируется информация о ка-
налах
1244 Systems Устанавливаются некоторые
системные переменные
127C Stream Начальные данные потока ко-
пируются 14 адресов STRMS. Они представ-
ляют потоки от -3 до +3.
1286 Clear Очишает буфер принтера, экран
и выводит фирменное приветствие
12A2 Main execution loop Основной цикл
для ввода программы, проверка синтаксиса
12E2 Execution Интерпритация введеной
строки
1391 REPORT messages Таблица сообщений
об ошибках
1555 Main ADD Программа копирует строки
из области редактора в соответствующее
место в программной области
15AF Initial cannel information Началь-
ная таблица данных канала
15C6 Initial stream data Начальная таб-
лица данных о потоке
15DЕ WAIT - KEY Ожидает нажатия клавиши
15E6 INPUT - AD Анализ нажатой клавиши
15EF Main printing Печать цифры, содер-
жащейся в регистре А в пределах 0...9
15F2 Main printing 2 Печать введеного
ключевого слова или повторно набранного
символа
1601 CHAN - OPEN Открывает канал с номе-
ром, который содержится в регистре А.
1615 CHAN - FLAG
162D Channel code look-up table
1634 Channel K flag
1642 Channel S flag
164D Channel P flag
1652 ONE - SPACE Выделение в рабочей или
редакторской области для строки Бейсика.
1655 MAKE ROOM Выделение участка в памя-
ти начиная с адреса, указанного в HL, с
длиной, указанной в регистровой паре BC.
1664 POINTERS Изменяются некоторые сис-
темные переменные
168F Coll a line number Подпрограмма
сбора номера строки. Для данного адреса
начала строки номер строки собирается в
регистр E.
169E RESERVE Требуемый размер области
делается доступным в рабочей области
16B0 SET - MIN Производиться очистка ре-
дакторской строки, временной рабочей об-
ласти
16C5 SET - MIN 2 Производиться очистка
стека калькулятора
16D4 reclaim the edit line
16DB INDEXER Программа индексации для
поиска данных в таблицах
16E5 CLOSE # Command Выполнение команды
CLOSE #
1716 CLOSE stream look-up table
171E Stream data
1736 OPEN # Command Выполнение команды
OPEN #
177A OPEN stream look-up table
1793 CAT, ERASE, FORMAT, MOVE Command
Выполнение команд CAT, ERASE, FORMAT,
MOVE
1795 LIST '& LLIST Программа вывода лис-
тинга
17D5 AUTO - LIST Программа выработки ав-
томатического листинга
17F5 LLIST Вывод листинга на принтер
17F9 LIST Вывод листинга на экран
1855 PRINT A whole BASIC line Программа
вывода строки
17B6 NUMBER Процедура вывода номера
строки
18C1 PRINT line cursor Программа анализа
необходимости печати курсора строки
18E1 PRINT CURSOR Печать курсора строки
190Е LN - FETCH Процедура поиска началь-
ного адреса строки в области программы
1925 Printing characters in BASIC line
Программа печати непосредственно тела
строки
196E LINE - ADDR
1980 Compare line numbers Процедура
сравнения номеров строк редактируемой и
находящихся непосредственно в теле прог-
раммы
1988 Find each statement
19B8 NEXT - ONE Определяет адрес следую-
щей строки
19DD DIFFERENCE
19E5 RECLAIMING
19FB E - LINE - NO Проверка номера стро-
ки на корректность
1A1B Report '& lint numbers printing
Подпрограмма печати числа, находящегося
в регистровой паре ВС
1A4B SYNTAX table Синтаксическая таблица
команд
1B17 Main parser (Basic Interpreter) Ин-
терпритатор
1B28 Statement loop Проверка синтаксиса
одного оператора
1B52 SCAN - LOOP
1B76 STMT - RET
1B8A LINE-RUN Непосрадственная интерпри-
тация
1B8F SEPARATOR Определение класса коман-
ды
1B9E LINE - NEW Переход к следующей
строке
1BB2 REM Command Выполнение команды REM
1BB3 LINE - END 1 Выход из процедуры
проверки синтаксиса строки
1BBF LINE - USE
1BD1 NEXT - LINE
1BEE CHECK - END
1BF4 STMT - NEXT
1C01 COMMAND Classtable Таблица класса
команд
Далее представленны программы классов
команд
1C0D Command Classes 00,03,05
1C16 JUMP - C - R
1C1F Command Classes 01 , 02 , 04
1C22 VERIABLE in Assignment
1C56 FETCH a VALUE
1C79 Expect numeric/string expressions
1C96 Set permanent colors (class 07)
1CBE Command Classes 09
1CDE Command Classes 0B
1CED FETCH a NUMBER
1CEE STOP Command Выполнение команды
STOP
1CF0 IF Command Выполнение команды IF
1D03 FOR Command Выполнение команды FOR
1D86 LOOK - PROG Просмотр программы в
теле цикла FOR TO NEXT
1DAB NEXT Command Выполнение команды
NEXT
1DDA NEXT - LOOP Переход на начало цикла
с новым параметром
1DEC READ Command Выполнение команды RE-
AD
1E27 DATA Command Выполнение команды DA-
TA
1E39 PASS - BY
1E42 RESTORE Command Выполнение команды
RESTORE
1E4F RANDOMIZE Command Выполнение коман-
ды RANDOMIZE
1E5F CONTINUE Command Выполнение команды
CONTINUE
1E67 GO TO Command Выполнение команды GO
TO
1E7A OUT Command Выполнение команды OUT
1E80 POKE Command Выполнение команды PO-
KE
1E85 TWO - PARAMETERS Подпрограмма счи-
тывания второго параметра
1E94 Find Integer Программа поиска целой
части числа
1EA1 RUN Command Выполнение команды RUN
1EAC CLEAR Command Выполнение команды
CLEAR
1EED GO SUB Command Выполнение команды
GO SUB
1F05 TEST - ROM
1F1A FREE MEMORY Программа определения
наличия свободной памяти для очередной
Бейсик строки
1F23 RETURN Command Выполнение команды
RETURN
1F3A PAUSE Command Выполнение команды
PAUSE В регистровой паре ВС должно со-
держаться количество 1/50-х, на которое
неободимо приостановить программу
1F54 BREAK - KEY Проверка нажатия клави-
ши BREAK. Если клавиша нажата, то уста-
навливается флаг C
1F60 DEF FN Command Выполнение команды
DEF FN
1FC3 UNSTACK - 2
1FC9 LPRINT Command Выполнение команды
LPRINT
1FCF PRINT Command Выполнение команды
PRINT
1FF5 PRINT a carriage RETURN
1FFC PRINT ITEMS