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
Другие статьи номера:
Похожие статьи:
В этот день... 4 декабря