Inferno #01
31 декабря 2000

For Coderz - Про ПЗУ 48k Спектрума (#0000-#1FFF).

    РЕСТАРТЫ ПЗУ 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




Другие статьи номера:

Others - обзор компьютера Profi и ОС CP/M.

Others - Анкетирование: Обмен полезной информацией.

Others - Russian Rulez: ЭЛЬБРУС - описание нового процессора разработанного русскими инженерами.

Интервью - Jerri/Alien Factory: как появилась игра Walker.

For Coderz - Порты компьютера Profi.

For Coderz - Муза from PC (описание форматов звуковых файлов).

For Coderz - Про ПЗУ 48k Спектрума (#0000-#1FFF).

For Coderz - Про ПЗУ 48k Спектрума (#2000-#3FFF).

Шелезяка - Приставка к телефону: усилитель сигнала телефонной линии.

Шелезяка - АЦП изнгутри: простой аналогоцифровой преобразователь.

Gameland - обзор игры Project-X.

Inferno - Авторы.

Inferno - Вступление.

Inferno - Управление жуналом.

Softинка - ZX Word Updated: новый, но не совсем, текстовый редактор.

Softинка - Extractor: программа для извлечения спектрумовских файлов из эмуляторских форматов.

Softинка - обзор программ для тестирования дисководов, а также настройке магнитных головок дисководов.

Humor - Unfiltered: маразматические реальные объявления и высказывания людей, как известных так и не очень из журнала "Крокодил".

Мыльница - Пена: почтовый раздел.


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

Похожие статьи:
Мнение - Phantom Lord рассказывает что же такое "настоящая музыка".
INTRO - С наступлением лета.
Новости - Новости от FLASH на 22.06.97 года.

В этот день...   19 июля