Документация на полезные программы для БК |
Здравствуйте, гость ( Вход | Регистрация )
Документация на полезные программы для БК |
SuperMax |
15.10.2022, 11:05
Сообщение
#1
|
Администратор Группа: Root Admin Сообщений: 6 295 Регистрация: 7.1.2006 Из: Красноярск Пользователь №: 1 |
Очень продвинутый аналог Mirage - PARADISE
Код ──────────────────────────────────── ▓▓▓▓▓▓▓▓▓▓▓▓ Game, Applied & System Programs Inc. ▓▓▓▓▓▓▓▓▓▓▓ ▓ ──────────────────────────────────── ▓ ▓ ▓▓▓▓ ▓▓ ▓▓▓▓ ▓▓ ▓▓▓ ▓▓▓▓▓ ▓▓▓ ▓▓▓▓▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓▓▓▓ ▓ ▓ ▓ ▓ ▓ ▓▓▓ ▓▓▓▓ ▓ ▓ ▓▓▓▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓▓▓▓▓ ▓ ▓ ▓▓▓▓▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓▓▓▓▓ ▓▓▓▓▓ ▓▓▓ ▓▓▓▓▓ ▓ ▓ ▓ ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ ▓ ▓ ▓ P A R A D I S E ▓ ▓ ─────────────── ▓ ▓ Version 1.1d ▓ ▓ ▓ ▓ 20-SEP-1992 ▓ ▓ St.Petersburg ▓ ▓ ▓ ▓ Author: Serge V. Klimenkov ▓ ▓ ▓ ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ ┌─┐ │P│arallel │A│ssembler- │R│eassembler, │A│dvanced │D│ebugger, │I│mproved │S│oftware │E│ditor. └─┘ РУКОВОДСТВО ПОЛЬЗОВАТЕЛЯ ────────────────────────── ВВЕДЕНИЕ За многие годы, прошедшие с тех пор, когда на прилавках по- явились первые БК0010, создано несколько тысяч различных про- грамм. А написать хорошую программу - непростое дело. Особен- но много сложностей возникает при отладке. Программисты хоро- шо знают, что отладить программу и заставить ее работать так, как нужно, значительно труднее, чем написать. В какой-то мере решить эту проблему поможет новая разработка компании "GASP". Как видно из названия, это и ассемблер, и дизассемблер, и от- ладчик, и множество очень полезных функций, об отсутствии ко- торых Вы не раз жалели, работая над своими программами. Автор очень надеется, что 'PARADISE' (англ. - 'РАЙ') оправдает свое название. ИСТОРИЯ СОЗДАНИЯ В 1988 году С. Зильберштейн написал программу MIRAGE, кото- рая по многим параметрам значительно превосходила предыдущие отладчики, но имела некоторые ошибки и недоработки, которые, однако, не помешали программе стать одной из наиболее распро- страненных среди программистов. После нескольких попыток до- работки, в процессе которых в MIRAGE были внесены исправления и новые функции, автор решил написать собственный отладчик. Так появилась программа PARADISE 1.0, которая не была предна- значена для распространения, и представляла собой пробный ва- риант. После этого, учитывая многочисленные замечания, кото- рые часто противоречили друг другу, автор начал работать над новой версией программы. PARADISE 1.1 представляет собой но- вую систему программирования и отладки, по сравнению с про- граммой MIRAGE более мощную и удобную в работе. Автор благодарит: С.Зильберштейна - за MIRAGE26, В.Коренкова - за MICRO.WS, а также всех, кто вносил деловые предложения, давал полезные советы и делал критические замечания. ТЕХНИЧЕСКИЕ ХАРАКТЕРИСТИКИ Программа 'PARADISE': - занимает в памяти ВСЕГО 5 Кбайт; - АБСОЛЮТНО перемещаема; - НЕ ИЗМЕНЯЕТ содержимое стека; - допускает ПОЛНОЕ экранное редактирование; - работает с ДВОИЧНОЙ, ВОСЬМЕРИЧНОЙ, ДЕСЯТИЧНОЙ и ШЕСТНАД- ЦАТИРИЧНОЙ системами счисления, со СЛОВАМИ и БАЙТАМИ, а также с КОДАМИ ASCII и RADIX50; - выводит на экран и на принтер ТЕКСТ ПРОГРАММ в ассемблер- ной мнемонике и ДАМП ПАМЯТИ; - позволяет СОЗДАВАТЬ и РЕДАКТИРОВАТЬ программы; - работает непосредственно с ЯЧЕЙКАМИ ПАМЯТИ и РЕГИСТРАМИ ПРОЦЕССОРА; - поддерживает команды РАСШИРЕННОЙ АРИФМЕТИКИ; - в процессе отладки позволяет выполнять программу в ОБЫЧ- НОМ и ПОКОМАНДНОМ режимах с возможностью контролировать и изменять содержимое памяти и регистров общего назначения; - имеет КАЛЬКУЛЯТОР, выполняющий четыре арифметических дей- ствия; - дает возможность включать в систему НОВЫЕ КОМАНДЫ. ЗАГРУЗКА И ЗАПУСК СИСТЕМЫ 'PARADISE' загружается в любое место ОЗУ монитором БК с по- мощью иоманды: M адрес <ВВОД> Если адрес не указан, то загрузка осуществляется по адресу, указанному в заголовке файла (26000). Запуск производится командой: S <ВВОД> При запуске системы, загруженной в экранную область, систе- ма при возможности переходит в режим расширенной памяти; если это не удается, то на экране появится сообщение: ВВОД ДОГРУЗКИ ЖДУ ИМЯ? Вы должны ввести имя догрузки, позволяющей системе работать в экранной области. (В стандартном пакете - WINDOW.PAR). После запуска в командной строке появляется: PARADISE 1.1d (C) GASP Inc. В левом верхнем углу экрана выводится адрес вершины стека и его содержимое. То же самое происходит при нажатии на клавишу 'СТОП', а также при возникновении прерывания по вектору 4. Содержимое вершины стека позволяет в некоторых случаях оп- ределить место возникновения прерывания. Строкой ниже выводится приглашение, которое показывает, что система готова к приему команд. Приглашение имеет вид: N> ,где N - одна из букв: A,B,D,H,P,R,T,W, которая обоз- начает установленную в данный момент систему счисления. При первом запуске системы установлен формат слова в восьмеричной системе счисления (W). ОПИСАНИЕ ЭКРАННОГО РЕДАКТОРА Система PARADISE, как уже отмечалось, допускает полное эк- ранное редактирование. Вы можете перемещать курсор по всему экрану; при этом работают все клавиши управления курсором. При удерживании клавиши в нажатом положении срабатывает авто- повтор. При нажатии на клавишу 'ВВОД' система считывает с экрана в буфер строку, в которой была нажата клавиша 'ВВОД', проверяет ее на наличие приглашения во второй позиции, и начинает обра- ботку команды. Таким образом, для повторения команд, которые еще находятся на экране, достаточно перевести курсор в строку с командой (неважно, в какой позиции строки будет находиться курсор) и нажать 'ВВОД'. При вводе команд значимыми являются два первых символа. Ос- тальные символы до пробела или другого разделителя могут быть любыми или отсутствовать. При отсутствии имени команды в списке выводится сообщение: ОШИБКА КМ Не рекомендуется делать инверсию экрана и символов, перехо- дить в режим 32 символа в строке - в этих случаях система не сможет определить символ на экране. УПРАВЛЯЮЩИЕ КЛАВИШИ: СБР - очистка экрана; ШАГ - переход в режим 'SS' (Special Symbols), в котором можно вводить символы с кодами 000-037 и 200-237 (см. описа- ние команды DUMP); АР2/СБР (или, что более удобно ШАГ/СБР) - переход в режим РП. Все, что находилось на экране, можно посмотреть, нажав: СУ/Ф - включение режима "записной книжки". В нижней части по- является отображение области памяти 40000-67777, т.е., все, что находилось на экране до перехода в режим РП. Этот режим можно использовать для сохранения нужной ин- формации (вдруг срочно понадобилось что-то записать, и, как назло, под рукой нет ручки или бумаги), а также для визуального контроля за чтением файла с магнитофона при загрузке в экранную область. СУ/А - включение/выключение режима PR - параллельного вывода информации на экран и принтер. КТ - После нажатия этой клавиши при нажатии на клавишу СТОП инициализации экрана не происходит. Режим сохраняется до нажатия любой другой клавиши. ОПИСАНИЕ КОМАНД СИСТЕМЫ 1. Команды установки параметров системы. В системе используются следующие системы счисления: A - ASCII - код ASCII (1 слово - 2 символа); B - BYTE - байт (1 слово - 2 байта); D - DECIMAL - десятичная (1 слово - 5-разрядов); H - HEXADECIMAL - шестнадцатиричная (1 слово - 4 разряда); P - PRIMARY - основная (двоичная) (1 слово - 16 бит); R - RADIX - код RADIX50 (1 слово - 3 символа); T - TEXT - непрерывный текст; W - WORD - слово (восьмеричная) Для изменения системы счисления достаточно изменить букву перед приглашением на любую из вышеперечисленных. При выводе кодов в формате RADIX вместо символа может сто- ять инверсная буква B (Big). Это значит, что при раскодирова- нии получился символ, отсутствующий в коде RADIX50. При выводе кодов в формате A и T символы с кодами 0-37 вы- водятся в виде соответствующих инверсных латинских заглавных букв, а символы с кодами 200-237 - в виде инверсных русских строчных букв. Символы с кодами 200-377 выводятся с точкой в верхнем правом углу для обеспечения различия между латинскими и русскими буквами с одинаковым написанием. IV - Initialize interrupt Vectors - инициализировать вектора прерываний: 10,14,20,24,34,100. Они устанавливаются на начало программы. BE[=address] - BEgin - установить адрес начала рабочей облас- ти (при запуске 1000). EN[=address] - ENd - установить адрес конца рабочей области (при запуске на 1 меньше адреса загрузки). Команды BE и EN без параметров выводят на экран значение ад- реса начала/конца рабочей области. MD[=code] - MoDe - установить режим трассировки и вывода дам- па. Формат слова code в восьмеричной системе: 0 0 X X X X │ │ │ │1 - в режиме TR после исполнения команды вы- │ │ │ │ водится дамп регистров; │ │ │ │0 - не выводится дамп регистров; │ │ │ └──────────────────────────────── │ │ │0 - дамп регистров в восьмеричной системе; │ │ │1 - в установленной системе счисления; │ │ └────────────────────────────────────── │ │0 - в режиме TR следующую команду выводить с но- │ │ вой строки; │ │1 - с начала экрана; │ └──────────────────── │1 - трассировка подпрограмм в покомандном режиме; │0 - как одной команды; └────────────────────── Команда MD без параметров выдает значение текущего режима. Для задания режима используются только младшие биты из каждой тройки битов; остальные 11 бит могут использоваться Вами для своих целей. EX - EXit - выход в монитор. 2. Команды работы с памятью и регистрами процессора. ME address[,data] - MEmory - чтение/запись данных по заданно- му адресу. W>ME 1000,177777 - запись числа 177777 в ячейку 1000. W>ME 1000 - вывод на экран содержимого ячейки 1000. 177777 {R0,R1,R2,R3,R4,R5,SP,PC,PS}[=data] - чтение/запись данных в регистры общего назначения (РОН). W>R0=1000 - запись 1000 в R0. W>R0 - вывод на экран содержимого R0. 1000 При работе с регистром PS (PSW - Processor Status Word) необ- ходимо знать его формат: ┌─────┬────┬─┬─┬─┬─┬─┐ │15..8│7.,5│4│3│2│1│0│ │ │ PR │T│N│Z│V│C│ └─────┴────┴─┴─┴─┴─┴─┘ │ │ │ │ │ коды условий │ └─┴─┴─┴───────────── │приоритет процессора └──────────────────── В программе работа с PS производится в восьмеричной системе счисления. W>PS=10 - установить бит N, остальные сбросить. W>PS=7 - установить биты Z,V,C, бит N сбросить. W>PS=12 - установить биты N и V, биты C и Z сбросить. W>PS 000003 - биты V,C установлены, N,Z - сброшены. CR - Clear Registers - очистить регистры. При этом: R0..R5=0 SP=770 PC - не изменяется PS=0 DR - Dump of Registers - дамп регистров. Система счисления - в соответствии с установленным режимом MD. SP и PC всегда выводятся в восьмеричной системе. PS выводится на экран в виде NZVC, где буква показывает ус- тановленный бит, знак минус - сброшенный. W>DR R0-R5: 001000 000377 000000 000000 000000 000000 SP-PS: 000770 001000 ---- W>PS=4 W>R5=177777 W>←←H <ВВОД> H>MD=10 H>DR R0-R5: 0200 00FF 0000 0000 0000 FFFF SP-PS: 000770 001000 -Z-- DS [address] - Dump of Stack - дамп стека или памяти. На экран выводится адрес и содержимое шести последователь- ных ячеек памяти. Если дана команда DS без параметров, то вы- водится адрес вершины стека и 6 его элементов. W>DS 000750: 001000 177777 003454 077000 022001 100274 DU [address] - DUmp of memory - дамп памяти. На экран выводится таблица, состоящая из двух полей: поля адреса и поля данных. В поле данных располагается содержимое ячеек памяти в установленной системе счисления. По умолчанию address=BEgin. Вы можете просматривать память с помощью клавиш ↑,↓. При достижении границы экрана будет выведена очередная строка та- блицы с большим или меньшим адресом. Все находящееся на экра- не можно редактировать. Измененная строка вводится в память при нажатии в этой строке клавиши 'ВВОД'. Для перехода к дру- гому адресу переведите курсор в поле адреса, измените адрес, и нажмите клавишу 'ВВОД'. Не рекомендуется редактировать оба поля одновременно. При этом измененная строка запишется в па- мять по новому адресу, что может привести к нежелательным по- следствиям. В режимах ввода/вывода кодов ASCII и текста можно использо- вать режим ввода спецсимволов SS. Включение/выключение режима производится с помощью клавиши 'ШАГ'. В данном режиме Вы име- ете возможность ввести символы с кодами 0-37 и 200-237. Для ввода символов с кодами 0-37 используются соответствующие ла- тинские заглавные буквы, а с кодами 200-237 - русские строч- ные. Введенные спецсимволы отображаются в инверсном режиме. Клавиша СБР перемещает курсор в начало поля данных в первой строке. Выход из режима DU по клавише 'КТ'. MO аddress1,аddress2,аddress3 - MOve - побайтная пересылка области, ограниченной address1 и address2, на address3. Об- ласти могут пересекаться. PO address1,address2,code[,B] - POpulate - размножить задан- данное слово или байт в диапазоне адресов. W>PO 1000,1776,125252 - заполнить часть памяти 1000-1776 сло- вом 125252. W>PO 1000,1777,100,B - заполнить часть памяти 1000-1777 бай- том 100. CO address1,address2,address3 - COmpare - сравнить два масси- ва одинаковой длины: один - с адресa address1 по address2; другой - с начальным адресом address3. На экран выводятся не- совпадающие коды и их адреса. W>MO 1000,1777,2000 - переслать массив 1000-1777 на 2000. W>ME 2100,177777 - записать 177777 по адресу 2100. W>CO 1000,1777,2000 - сравнить массивы 1000-1777 и 2000-2777. 001100: 000100 002100: 177777 - несовпадающие слова. FI address1,address2,code[,R][,mask] - FInd - поиск заданного кода или смещения полностью или по маске в заданном диапазоне адресов. R - Relative - указывает на поиск смещения. W>FI 1000,1776,0 - поиск кода 0 в области 1000-1776. W>FI 1000,1776,5000,R - поиск в области 1000-1776 смещения на адрес 5000. W>FI 1000,1776,104000,777 - поиск в области 1000-1776 кодов, начинающихся на 104 (EMT, TRAP). W>FI 1000,1776,4000,R,77 - поиск в области 1000-1776 смещений на адреса 4000-4077. На экран выводятся найденные коды и их адреса. 3. Команды работы с ассемблерной мнемоникой. AS [address] - ASsemble - переход в режим экранного ассембле- ра/дизассемблера. По умолчанию значение address=BEgin. Текст программы нигде не хранится, при вводе команда ассем- блируется, при выводе - дизассемблируется. На экран выводится таблица, состоящая из трех полей: поля адреса, поля команды и поля кодов (при установленной двоичной системе счисления поле кодов пустое). В поле адреса выводится адрес команды, в поле команды - мнемоника, в поле кодов - ко- ды команд в установленной системе счисления. Так же, как для команды DU, все, что находится на экране, доступно для редак- тирования. При дизассемблировании коды, не соответствующие ни одной из команд, выводятся в виде команды WORD. Управляющие клавиши: ↑,↓ - перемещение на команду вперед/назад (при выходе курсо- ра за пределы экрана, выводится новая команда); СБР - перемещение курсора на первую команду экрана; ВС - удаление команды (только в рабочей области); СУ/Т - вставка команды NOP (только в рабочей области); ВВОД - зафиксировать изменения; КТ - выход из режима. Мнемоническое обозначение команды состоит из трех букв (для байтовых команд - из четырех), поэтому написание некоторых команд изменено. Список команд ассемблера: одноадресные: CLR[B], COM[B], INC[B], DEC[B], NEG[B], TST[B], ASR[B], ASL[B], ROR[B], ROL[B], ADC[B], SBC[B], SWA (SWAB), SXT, MFP (MFPS), MTP (MTPS); двухадресные: MOV[B], CMP[B], BIT[B], BIC[B], BIS[B], XOR, ADD, SUB; управления программой: BR, BNE, BEQ, BPL, BMI, BVC, BVS, BGE, BLE, BGT, BLT, BCC=BHS (BHIS), BCS=BLO, BHI, BLS (BLOS), JMP, JSR, CAL (CALL=JSR PC), RTS, RET=RTS PC, MAR (MARK), SOB; прерывания: EMT, TRA (TRAP), IOT, BPT, RTI, RTT; управления машиной: HAL (HALT), WAI (WAIT), RES (RESET); изменения признаков: CLN, CLZ, CLV, CLC, CCC, SEN, SEZ, SEV, SEC, SCC; расширенной арифметики (ассемблером поддерживаются, а при вы- полнении возникает прерывание по вектору 10): MUL, DIV, ASH, ASC (ASHC), FAD (FADD), FSU (FSUB), FMU (FMUL), FDI (FDIV); прочие: NOP, WOR (WORD). ───────────────────────────────────────────────────────────── ЗАМЕЧАНИЕ: С целью упрощения ассемблера в данной системе не- сколько некорректно производится обработка команды MARK. При вводе команды MARK с аргументом больше 100 (такая команда яв- ляется некорректной), транслятор обрабатывает ее. В результа- те получается код несуществующей команды, которая при дизас- семблировании выводится на экран в виде команды MARK. Но, учитывая то, что команда MARK очень редко встречается, с этой особенностью системы Вы, вероятнее всего, не столкне- тесь. ───────────────────────────────────────────────────────────── При вводе команды WORD с параметром, который является кодом какой-либо команды, WORD преобразуется в эту команду. Например, если ввести WOR 10001, то после нажатия на клави- шу ВВОД, эта команда преобразуется в MOV R0,R1. Редактирование возможно в любом поле, но не рекомендуется вносить изменения одновременно в несколько полей. При ошибке в мнемоническом обозначении команды выводится инверсная буква E, а курсор указывает место возможной ошибки. После исправле- ния ошибки буква E (Error) пропадает. Можно вводить команды типа: MOV #'S,R0, где S - любой сим- вол КОИ-8. IM command - IMmediatly - немедленное исполнение ассемблерной команды. W>IM MOV #10,R0 W>R0 000010 W>IM MOV #30,R1 W>R1 000030 W>IM ADD R1,R0 W>R0 000040 4. Команды отладки. TR [address] - TRace - трассировка программы с заданного ад- реса. По умолчанию значение адреса берется из регистра PC. Установленный режим TR индицируется в служебной строке. При включении трассировки происходит вывод на экран очередной ко- манды в таком же формате, как и для ассемблера (т.е. поле ад- реса, поле мнемоники, поле кодов). Строкой ниже система выво- дит приглашение, поэтому можно выполнять все остальные коман- ды системы (производить чтение/запись в память, изменять со- держимое регистров процессора и т.д.). Команда, выведенная на экран, выполняется при нажатии на клавишу ВВОД в пустой стро- ке с приглашением. Команда . (точка) <ВВОД> - пропустить оче- редную команду и перейти к следующей. Продолжить трассировку с другого адреса можно, отдав команду TR с новым адресом, или изменив содержимое PC. Режимы трассировки устанавливаются командой MD (см. описа- ние). MD XXXXX1 - после вывода очередной команды в следующей строке выводится содержимое регистров процессора после выполнения предыдущей команды. MD XXX1XX - после исполнения или пропуска очередной команды, следующая выводится с начала экрана (если этот режим не уста- новлен, то следующая команда выводится с новой строки). MD XX1XXX - трассировка команд JSR и CAL не отличается от ос- тальных команд. Если режим сброшен, то вся подпрограмма будет выполняться как одна команда, т.е. следующей будет считаться команда, расположенная за JSR или CALL. TO - Trace Off - выключить трассировку. RU [address][,J] - RUn - запустить программу с заданного ад- адреса. По умолчанию значение адреса берется из регистра PC. Запускаемой программе передаются значения РОН процессора и признаков условий. Возврат в систему происходит, если в про- грамме выполнилась инструкция RET, либо произошло прерывание по вектору 4. При возврате принимаются значения РОН и призна- ков условий. Символ 'J' определяет порядок передачи управления вызывае- мой программе. Если указан символ J, то управление программе передается инструкцией JMP, если J отсутствует, то инструкци- ей CAL. При передаче управления с помощью JMP возврат в сис- тему возможен только по прерыванию по вектору 4. При выходе в систему по команде RET в регистре PC находится адрес запуска программы; при выходе по прерыванию по вектору 4 - адрес ко- манды, следующей за командой, при выполнении которой произош- ло прерывание. 5. Команды работы с внешними устройствами. LO [address,]'name' - LOad - загрузить файл с магнитофона по адресу address. Если адрес не указан, то загрузка производит- ся по адресу, расположенному в заголовке файла. Для фиктивного чтения можно применять команду LO без пара- метров. Вместо символа ' можно использовать любой символ, кроме цифр 0..7, не использующийся в имени файла. SA address,length,'name' - SAve - сохранить массив с началь- ным адресом address и длиной length на магнитной ленте в ви- де файла с именем name. LP [address1][,address2] - output Listing on Printer - вывод ассемблерного текста на принтер. По умолчанию значения адре- сов address1=BEgin,address2=ENd. В системах счисления ASCII, TEXT и RADIX инверсные символы на принтер выводятся подчерк- нутыми. LP={code,symbol} - вывод кодов на принтер. Операнд считается восьмеричным кодом, если он состоит из цифр 0..7, в против- ном случае он передается на принтер, как символ КОИ-8. Эту команду можно использовать для установки режимов печати. W>LP=33,17,33,60,33,M,1,A,B,C,D,E,F,G Информацию на принтер можно выводить также с помощью режи- ма дублирования PR (включается/выключается клавишей СУ/А). В этом режиме параллельно с выводом на экран происходит передача информации на принтер. Режим PR можно использовать для печати дампа памяти и последовательности выполняемых при трассировке команд. 6. Команды расширения системы. IN [address,]'name' - INstall - загрузить с ленты догрузку и включить ее команды в состав системы. Команды должны быть на- писаны в соответствии с принятым форматом (см. PARSYS.DOC). При несоответствии команды требуемому формату выдается сооб- щение ОШИБКА КП. IN address,length - включить в состав системы команду, распо- ложенную в памяти. address - начальный адрес команды; length - длина для поиска признака конца команды (57537). Если модуль содержит одну команду, должна быть не менее 4; если более одной команды, рекомендуется задавать длину доста- точно большой. Если в заданном диапазоне признак конца не об- наружен, то выдается сообщение ОШИБКА КП. 7. Команды калькулятора. AD code1,code2 - ADd - сложить code1 и code2; SU code1,code2 - SUbtract - вычесть code2 из code1; MU code1,code2 - MUltiply - перемножить code1 и code2; DI code1,code2 - DIvide - разделить нацело code1 на code2. Калькулятор работает только в восьмеричной системе счисления. Если количество операндов не равно двум, то результат, полу- ченный при испонении команды, будет некорректным. ─────────────────────── РЕКОМЕНДАЦИИ АВТОРА И ПОЛЕЗНЫЕ СОВЕТЫ NOTA BENE ! NOTA BENE ! NOTA BENE ! NOTA BENE ! ┌───────────────────────────────────────────────────────────┐ │ АВТОР НАСТОЯТЕЛЬНО СОВЕТУЕТ ВАМ САМОСТОЯТЕЛЬНО НЕ ВНОСИТЬ │ │ ИЗМЕНЕНИЯ В СИСТЕМУ. ЭТО МОЖЕТ ПРИВЕСТИ К НЕПРЕДСКАЗУЕМЫМ │ │ ПОСЛЕДСТВИЯМ. ТЕМ БОЛЕЕ, НЕ СЛЕДУЕТ ПРОСМАТРИВАТЬ СИСТЕМУ │ │ В САМОЙ СЕБЕ С ПОМОЩЬЮ КОМАНД DU И AS. СЛУЧАЙНОЕ НАЖАТИЕ │ │ КЛАВИШИ <ВВОД> В НЕКОТОРЫХ СЛУЧАЯХ МОЖЕТ ВЫВЕСТИ СИСТЕМУ │ │ ИЗ СТРОЯ. ПРИ ЗАПИСИ СИСТЕМЫ КОМАНДОЙ SA, ОНА ЗАПИШЕТСЯ С │ │ ОШИБОЧНОЙ КОНТРОЛЬНОЙ СУММОЙ. О ВСЕХ ОШИБКАХ И НЕДОРАБОТ- │ │ КАХ СООБЩАЙТЕ АВТОРУ, А ТАКЖЕ ВНОСИТЕ ПРЕДЛОЖЕНИЯ О ВНЕ- │ │ СЕНИИ НОВЫХ КОМАНД И ОБ УЛУЧШЕНИИ РАБОТЫ УЖЕ СУЩЕСТВУЮЩИХ │ └───────────────────────────────────────────────────────────┘ NOTA BENE ! NOTA BENE ! NOTA BENE ! NOTA BENE ! * При работе с Вашей программой установите адрес начала ра- бочей области на начало программы (BE=адрес начала). Тогда можно будет вводить команды DU и AS без операнда. * В режимах DU и AS можно реализовать листание по страницам. Для этого поставьте курсор в зону адреса в нижней строке и нажимайте на клавишу <ВВОД>. * В связи с тем, что система при запуске устанавливает прио- ритет процессора 200, не работает клавиша СУ/@ (приостано- вить вывод на экран). Для обеспечения ее работы (если это необходимо) замените в ячейке со смещением 1660 от начала системы (при загрузке на 26000 это будет ячейка 27660) код 200 на код 0 (например, командой ME 27660,0 <ВВОД>). * После чтения файла с магнитофона на экран выводится строка с параметрами файла. Если во второй позиции строки поста- вить символ >, после него SA и немного отредактировать эту строку, то ей же можно воспользоваться для записи файла. * Для записи нескольких копий после записи нажмите клавиши ↑ и <ВВОД>. * Те, кто при работе с программой MIRAGE привык пользоваться разделителем /, могут использовать его - он тоже работает. Также в качестве разделителей могут использоваться символы с кодами 41-57. * В режиме TR при выполнении команд EMT с кодами от 104110 система может сотворить все, что угодно, даже испортиться. Это связано с особенностями написания системного EMT-дис- петчера. Поэтому при трассировке эти команды лучше пропус- тить,а еще лучше вообще не трассировать систему. ╬*═*═*═*═*═*═*═*═*═*═*═*═*═*═*═*═*═*═*═*═*═*═*═*═*═*═*═*═*═*╬ * * ║ На этом фирма 'Game, Applied & System Programs, Inc.' ║ * завершает описание системы 'PARADISE' и желает Вам * ║ приятной и плодотворной работы с нашей программой. ║ * * ║ Good luck ! Buon fortunato !║ * * ║ Feci quod potui, faciant meliora potentes. ║ * * ╬*═*═*═*═*═*═*═*═*═*═*═*═*═*═*═*═*═*═*═*═*═*═*═*═*═*═*═*═*═*╬ PS. В дальнейшем автор собирается написать новую версию сис- темы PARADISE для БК0010, а также начать работу над версией для БК0011. ═════════════════════════════════════════════════════════════ 26 сентября 1992 года Санкт-Петербург Software (C) GASP Inc. Author of this text: Anthony V. Gavrilov ══════════════════════════════════════════════════════════════ ──────────────────────────────────── ▓▓▓▓▓▓▓▓▓▓▓ Game, Applied & System Programs Inc. ▓▓▓▓▓▓▓▓▓▓▓ ▓ ──────────────────────────────────── ▓ ▓ ▓▓▓▓ ▓▓ ▓▓▓▓ ▓▓ ▓▓▓ ▓▓▓▓▓ ▓▓▓▓ ▓▓▓▓▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓▓▓▓ ▓ ▓ ▓ ▓ ▓ ▓▓▓ ▓▓▓▓ ▓ ▓ ▓▓▓▓ ▓▓▓▓▓ ▓ ▓ ▓▓▓▓▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓▓▓▓ ▓▓▓▓▓ ▓▓▓▓ ▓▓▓▓▓ ▓ ▓ ▓ ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ ▓ ▓ ▓ SYSTEM EXTENTION ▓ ▓ ────────────────── ▓ ▓ ADDITIONAL MODULES ▓ ▓ ▓ ▓ St.Petersburg ▓ ▓ ▓ ▓ Authors: Serge V. Klimenkov ▓ ▓ Anthony V. Gavrilov ▓ ▓ ▓ ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ РУКОВОДСТВО ПОЛЬЗОВАТЕЛЯ ════════════════════════ WINDOW.PAR ────────── WINDOW.PAR - догрузка к системе PARADISE, которая позволяет системе работать в экранной области памяти, а также дает воз- можность пользователю работать в двух окнах и выделять на эк- ране рабочую область для размещения программ, данных, и т.п. Загрузить WINDOW.PAR можно двумя способами. 1. При запуске системы PARADISE, загруженной в экран, сис- тема пытается перейти в режим расширенной памяти (РП). Если сделать это не удалось, система выводит на экран сообщение: ВВОД ДОГРУЗКИ ЖДУ ИМЯ? Вы должны ввести имя догрузки (WINDOW.PAR) и нажать <ВВОД>. После этого система загружает и запускает догрузку. 2. Если Вы хотите использовать WINDOW.PAR при работе в пол- ном экране, то загрузка производится из работающей системы с помощью команды LO адрес,'WINDOW.PAR' (см. PAR.DOC). Адрес загрузки определяется путем вычитания из начального адреса системы длины догрузки 2400. Это можно сделать коман- дой SU адрес,2400 (см. PAR.DOC). После загрузки произведите запуск WINDOW.PAR командой RU адрес (см. PAR.DOC). При запуске догрузка производит перехват EMT-диспетчера ос- новной системы, устанавливает на экране необходимое количест- во строк, и включает команды догрузки LN и WI в список команд системы. При работающей догрузке блокируются клавиши переме- щения курсора по диагонали, и запрещается рулонный сдвиг, ко- торый заменяется перемещением содержимого видеопамяти вверх или вниз. В результате этого при попытках перемещения курсора за пределы экрана работа несколько замедляется. Догрузка в своем составе имеет две команды: LN [number] - LiNes - установка заданного количества строк на экране, в пределах которых возможно перемещение курсора. При попытке установить количество строк меньше 2 или больше максимально возможного (в полном экране 30; при работе систе- мы в экране с адреса 66000 - 17) система выдает сообщение: ОШИБКА КС Команда LN без параметров восстанавливает на экране макси- мально возможное число строк. Команда LN блокируется при работе с двумя окнами. Команда LN используется для выделения на экране области для размещения программ, данных, подпрограмм, и т.д. Например: система загружена с адреса 66000, основная часть WINDOW.PAR располагается с адреса 64600. При этом максимально возможное число строк - 17(8). После выполнения команды LN 15 две строки на экране будут недоступны для курсора, и область памяти 61000-64577 Вы можете использовать как угодно. Начальный адрес выделенной области памяти можно рассчитать с помощью команд MU и AD (см. PAR.DOC) следующим образом: MU 1200,n где n - количество строк; затем полученное число сложить с 42000 (адрес первой строки). WI [number] - WIndow - установить второе окно с количеством строк number. Если при заданном количестве строк в верхнем или нижнем ок- не оказывается меньше двух строк, то выдается сообщение: ОШИБКА КС Команда WI без параметров отключает нижнее окно. Переход из одного окна в другое осуществляется при нажатии клавиши СУ/Ф. При этом курсор возвращается на то место, где он находился до перехода в другое окно. В окнах можно произ- водить любые действия, в том числе нажимать клавишу СТОП - на другое окно они не влияют. Можно установить в окнах различные системы счисления, но режим, установленный командой MD, оди- наков в обоих окнах. При включенном нижнем окне команда WI с параметром блокиру- ется. До включения второго окна можно выделить на экране рабочую область командой LN. После отключения окна можно снова уста- новить на экране максимальное количество строк. НЕ РЕКОМЕНДУЕТСЯ ВЫХОД В МОНИТОР ПРИ ВКЛЮЧЕННОМ НИЖНЕМ ОКНЕ ! SEARCH.PAR ────────── SEARCH.PAR - догрузка к системе PARADISE, позволяющая рабо- тать с массивами информации и осуществлять поиск ассемблерных команд в заданном диапазоне. Содержит следующие команды: FM - поиск массива; FC - поиск ассемблерной команды; CH - подсчет контрольной суммы. FM address1,address2,address3,address4 - Find Massive - поиск массива по байтам. address1,address2 - начальный и конечный адреса диапазона поиска; address1,address2 - начальный и конечный адреса эталонного массива; На экран выводятся начальные адреса массивов, совпадающих с эталонным. Например: W>FM 1000,3777,30000,30277 - поиск массива, расположенного с адреса 30000 по адрес 30277 в диапазоне адресов 1000-3777. FC address1,address2,[$]command - Find Command - поиск коман- ды в заданном диапазоне адресов. Символ $ указывает на поиск "скрытых" команд. Например, в программе по адресу 1000 расположена команда: MOV #5302,R1 Она занимает в памяти 2 слова, в которых расположены коды: 012701 005302 Но второе слово, расположенное по адресу 1002, также является командой: DEC R2. При указании символа $ будет осуществляться поиск таких "скрытых" команд. Ассемблерная команда задается в виде: мнемоника <ПРОБЕЛ> операнды При задании мнемоники и операндов можно использовать симво- лы % (процент) и * (звездочка): % - заменяет любой один символ; * - заменяет любые несколько символов. Примеры: W>FC 1000,1776,MOV #1000,R0 - поиск команды MOV #1000,R0 W>FC 1000,1776,MOV #1000,R% - поиск команд MOV #1000,R(0..5) W>FC 1000,1776,MOV *,* - поиск всех команд MOV W>FC 1000,1776,MOV R0,@#*00 - поиск команд MOV R0 в приемник- ячейку с адресом, оканчивающим- ся на 00. W>FC 1000,1776,BR 1%%% - поиск команд BR 1000 - BR 1776 W>FC 1000,1776,B* 10* - поиск команд перехода на адре- са, начинающиеся на 10 W>FC 1000,1776,*B *,* - поиск всех команд, заканчиваю- щихся на B с 2 операндами W>FC 1000,1776,* * - поиск однооперандных команд W>FC 1000,1776,$BR 1000 - поиск "скрытых" команд BR 1000. На экран выводятся найденные команды, адреса и порядковые номера команд. CH address1,address2[,B] - CHeck code - подсчет контрольной суммы массива, расположенного в заданном диапазоне адресов по словам или по байтам (при указании символа B). Например: W>CH 1000,37777,B - подсчет контрольной суммы по байтам. TRACER.PAR ────────── TRACER.PAR - догрузка к системе PARADISE, обеспечивающая дополнительные возможности при трассировке программ. Имеет в своем составе следующие команды: GO - запуск программы с условием останова; PT - работа с точками останова; CP - стереть все точки. GO address[,B],'halt condition' - программа запускается с за- данного адреса и выполняется до тех пор, пока не будет выпол- нено условие останова, которое задается в следующем виде: halt condition = operand1.operation.operand2 operand1,operand2 - любые операнды, допустимые в ассемблерных командах; operation={NE,EQ,GE,GT,LE,LT,PL,MI,VC,VS,CC,CS,HI,HS,LO,LS}. Допустимые в команде GO условия получаются из мнемонических обозначений команд перехода (BNE, BEQ, BGE и т.д.) отбрасыва- нием начальной буквы B. Так же, как и для ассемблера, команды BHIS и BLOS заменяются на BHS и BLS соответственно. При выполнении программы, запущенной командой GO, происхо- дит постоянное сравнение операндов командой CMP или CMPB (при указании символа B). Если условие сравнения выполнилось, про- грамма останавливается, и на экран выдается адрес останова. Примеры: W>GO 1000,'R1.EQ.#100' - выполнение программы с адреса 1000, пока R1 не станет равным 100; W>GO 1000,'(R0).LT.320' - ..., пока содержимое ячейки, адрес которой в R0, не станет меньше, чем содержимое ячейки 320; W>GO 1000,B,'R1.CS.R2' - .., пока при вычитании из младшего байта R1 младшего байта R2 не будет установлен бит переноса C. В УСЛОВИИ ОСТАНОВА НЕЛЬЗЯ ЗАДАВАТЬ РЕГИСТР PC В ЯВНОМ ВИДЕ ! PT [N[,address]] - PoinT - поставить/удалить точку останова с номером N (0-7). Команда PT N,address устанавливает точку останова с номером N на заданный адрес программы. Команда PT N (без указания адреса) стирает точку останова с номером N. Команда PT без параметров выдает список всех установленных точек. При запуске программы командой RU происходит останов по од- ному из заданных адресов и выдается сообщение: Точка.PC=address CP - Clear Points - стереть все точки останова. При установке точки происходит замена вектора прерывания с адресом 14. Если сброшены все точки, то вектор востанавливает свое прежнее значение. Если Вы выходили из системы с установ- ленными точками, то после возврата для предупреждения возмож- ных ошибок отдайте команду PT. ARITHM.PAR ────────── ARITHM.PAR - модуль команд расширенной арифметики, позволя- ющий выполнять программы, содержащие следующие команды: MUL,DIV,FADD,FSUB,FMUL,FDIV,ASH,ASHC. Содержит одну команду AR (ARithmetic extentions). AR ON - включить команды расширенной арифметики. AR OFF - выключить команды расширенной арифметики. При включении команд расширенной арифметики устанавливается вектор прерывания по резервной машинной команде 10, и запре- щается его инициализация командой IV. ARBK11.PAR ────────── ARBK11.PAR - модуль включения команд расширенной арифметики для БК0011(М), использующий то обстоятельство, что на БК0011 в ПЗУ имеется подпрограмма обработки вектора 10. Работа с мо- дулем не отличается от ARITHM.PAR. STRACE.PAR ────────── STRACE.PAR - модуль сохранения системных ячеек монитора при трассировке программ. Содержит команду DT (Data for Trace). DT ON - включить режим сохранения. При этом после выполнения очередной команды текущие значения системных переменных мони- тора, расположенные в ячейках 40-276, запоминаются и восста- навливаются перед исполнением следующей команды. DT OFF - выключить режим сохранения. Команда DT может применяться для трассировки тех программ, в которых используются режимы ГРАФ, ИНВ, и т.д. DISKWR.PAR ────────── DISKWR.PAR - модуль, обеспечивающий обмен логичискими бло- ками с диском. Содержит следующие команды: DK - назначить устройство; BL - установить параметры блока; LD - прочитать блок; SD - записать блок. DK N - DisK - назначить для обмена накопитель с номером N. В начале работы установлено устройство 0 (A:). По команде DK происходит инициализация рабочей области. BL address,length - BLock - установка параметров логического блока. address - aдрес расположения блока в памяти (чтения/записи); length - длина блока. По умолчанию: address=40000 length=400 LD number[,address] - Load from Disk - чтение блока с диска, начиная с физического номера number по заданному адресу или в область памяти, заданную командой BL. SD number[,address] - Save to Disk - запись блока из области памяти, заданной командой BL, или с заданного адреса на диск, начиная с физического номера number. Данный модуль работает с контроллером накопителя на гибких магнитных дисках КНГМД 3.059.014 завода "ЭКСИТОН". SPRITE.PAR ────────── SPRITE.PAR - спрайтовый мини-редактор, позволяющий найти и отредактировать спрайт, расположенный в памяти. Редактор ра- ботает со спрайтами, записанными в стандартном формате: 1 слово - WIDTH # (ширина в байтах); 1 слово - HEIGHT # (высота в строках); (WIDTH*HEIGHT) байт - последовательно расположенные строки спрайта. # - параметр может отсутствовать. Содержит одну команду SE (Sprite Editor). SE address[,width,height] - вход в спрайтовый редактор. address - предполагаемый адрес спрайта. width - ширина спрайта в байтах. (1..100) height - высота спрайта в строках. При входе происходит проверка рулонного сдвига, и, если эк- ран был сдвинут, то выполняется команда EMT 14. Если параметры width и height не указаны, то они берутся из заголовка спрайта (в случае корректных значений). На экран выводится спрайт, ограниченный прямоугольной рам- кой, и его параметры. Редактор имеет 2 режима: ПОИСК и РЕДАКТИРОВАНИЕ. При входе в редактор устанавливается режим ПОИСК. В режиме РЕДАКТИРОВАНИЕ вместо параметров спрайта выводится линза, в которой расположено увеличенное изображение. УПРАВЛЕНИЕ: 1. Режим ПОИСК. → ← - перемещение рамки по памяти на 1 байт вперед/назад. При этом изображение сдвигается по горизонтали. ↓ ↑ - перемещение рамки по памяти на width байт вперед/назад. Изображение сдвигается по вертикали. АР2 стрелка - увеличение/уменьшение размера спрайта. ВВОД - вход в режим РЕДАКТИРОВАНИЕ. КТ - выход в систему. При перемещении рамки по памяти работает автоускорение. Из- менение размеров спрайта ограничено размерами экрана. При ши- рине спрайта более 66 байт на экран будут выведены только 66; остальные можно просмотреть, переместив рамку немного вперед. Редактировать такие спрайты нужно в два этапа. 2. Режим РЕДАКТИРОВАНИЕ. ← → ↑ ↓ - перемещение курсора внутри линзы. При выходе курсо- ра за пределы линзы, линза смещается. АР2 стрелка - перемещение линзы по спрайту. ; (точка с запятой) 1 2 3 - поставить точку: черного, красно- го, зеленого или синего цвета со- ответственно. сдвижка - сдвинуть изображение, расположенное в строке с кур- сором правее курсора, на 1 точку влево. раздвижка - раздвинуть изображение, расположенное в строке с курсором правее курсора, на 1 точку вправо. ВВОД - включение/отключение изображения линзы на спрайте. АР2 ВВОД - переключение цветного/монохромного режимов. ПРОБЕЛ - включение/отключение режима трассировки (при переме- щении курсора остается след цвета последней введен- ной точки). СБР - стереть изображение в линзе. KT - выход в режим ПОИСК с записью отредактированного спрайта на место его расположения. АР2 ВС - выход в режим ПОИСК без записи спрайта. ПРИ ПОПЫТКЕ ЗАПИСИ СПРАЙТА В ПЗУ, ИЛИ ПРИ ВЫХОДЕ ЗА ПРЕДЕЛЫ ПАМЯТИ ПРОИСХОДИТ ПРЕРЫВАНИЕ ПО ВЕКТОРУ 4 И ВОЗВРАТ В СИСТЕМУ Редактор не работает, если рабочая область на экране меньше четырех строк. * * * ВСЕ МОДУЛИ,КРОМЕ WINDOW.PAR., ПОДКЛЮЧАЮТСЯ КОМАНДОЙ IN. ВСЕ МОДУЛИ АБСОЛЮТНО ПЕРЕМЕЩАЕМЫ И МОГУТ БЫТЬ СОВМЕЩЕНЫ С СИСТЕМОЙ 'PARADISE' ПРОГРАММОЙ-КОМПОНОВЩИКОМ PARLINK, КРОМЕ МОДУЛЯ WINDOW.PAR, КОТОРЫЙ НЕ ИМЕЕТ СТРУКТУРЫ КО- МАНДНОГО МОДУЛЯ И ЗАГРУЖАЕТСЯ ОТДЕЛЬНО. ═════════════════════════════════════════════════════════════ Software (C) GASP Inc. St.Petersburg 31-OCT-92 ═════════════════════════════════════════════════════════════ EMIDIS.PAR Даная догрузка используется для коректной работы с дис- ководом на БК010 в среде ANDOS. Она влючает в себя единствен- ную команду ED. Параметров у не нет. Для использования этой догрузки необходимо предварительно подгрузить е PARADISE 1.1 (а еще лучше подлинковать с помощью PARLINK) и перед первым обращением к дисководу выполнить эту команду. Клименков С. В. (C) 1993 ──────────────────────────────────── ▓▓▓▓▓▓▓▓▓▓▓▓ Game, Applied & System Programs Inc. ▓▓▓▓▓▓▓▓▓▓▓ ▓ ──────────────────────────────────── ▓ ▓ ▓▓▓▓ ▓▓ ▓▓▓▓ ▓▓ ▓▓▓ ▓▓▓▓▓ ▓▓▓ ▓▓▓▓▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓▓▓▓ ▓ ▓ ▓ ▓ ▓ ▓▓▓ ▓▓▓▓ ▓ ▓ ▓▓▓▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓▓▓▓▓ ▓ ▓ ▓▓▓▓▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓▓▓▓▓ ▓▓▓▓▓ ▓▓▓ ▓▓▓▓▓ ▓ ▓ ▓ ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ ▓ ▓ ▓ P A R A D I S E ▓ ▓ ───────────────── ▓ ▓ INFO ABOUT THE SYSTEM ▓ ▓ ▓ ▓ 01-OCT-1992 ▓ ▓ St.Petersburg ▓ ▓ ▓ ▓ Author: Serge V. Klimenkov ▓ ▓ ▓ ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ РУКОВОДСТВО СИСТЕМНОГО ПРОГРАММИСТА ═══════════════════════════════════ ВВЕДЕНИЕ ──────── Это описание предназначено для программистов, которые хотят расширить возможности системы PARADISE 1.1 (в дальнейшем P11) путем введения новых команд. Оно раскрывает подход автора при написании системы, оговаривает некоторые неточности и особен- ности написания системы. В некоторых случаях был выбран не лучший алгоритм, но это обусловлено лишь острым недостатком памяти на БК0010. Как Вы уже поняли из документации, P11 имеет функцию вклю- чения команд пользователя. Это очень мощное подспорье в рабо- те программиста. Каждый сможет написать команду, которая по- требовалась для работы и многократно использовать ее. Данная инструкция поможет Вам освоить это. В систему входит интерпретатор командных строк, который оп- ределяет наличие команды в системе, а также выполняет функции передачи параметров. Команда имеет особенный формат и, чтобы написать КОРРЕКТНУЮ команду, необходимо собюдать следующие условия: - команда должна быть АБСОЛЮТНО перемещаемой; - обращения к системным переменным и подпрограммам P11 дол- жны осуществляться ТОЛЬКО с помощью инструкций EMT. При несоблюдении этих требований P11 теряет главное преиму- щество - перемещаемость, а также совместимость версий. Напомню, что включение команды пользователя в P11 произво- дится либо командой IN, либо компоновщиком PARLINK. Данное описание также содержит инструкцию по использованию и описание системных вызовов EMT, которые используются в P11, и могут оказаться полезными для Вас при написании собственных ко- манд. ГЛАВА 1, в которой дается oбщее описание системы. ───────────────────────────────────────────────── Система P11 структурно состоит из восьми частей, которые в памяти последовательно располагаются друг за другом: 1) МОДУЛЬ ОПЕРАЦИОННОГО ИНТЕРФЕЙСА. Предназначен для обес- печения диалогового режима взаимодействия с пользовате- лем. 2) МОДУЛЬ КОМАНД. В нем находятся подпрограммы, реализующие различные команды, входящие в базовый состав P11. 3) МОДУЛЬ АССЕМБЛЕРА И ДИЗАССЕМБЛЕРА, который содержит под- программы, обрабатывающие мнемонику машинных команд про- цессора К1801ВМ1. 4) МОДУЛЬ ВВОДА-ВЫВОДА. В нем расположены подпрограммы, уп- равляющие режимами ввода-вывода на терминал и драйверные подпрограммы. 5) ОБЛАСТЬ СИСТЕМНЫХ ПЕРЕМЕННЫХ. Здесь располагаются адреса рабочих областей, хранится содержимое регистров процессо- ра, и т.п. 6) ОБЛАСТЬ СИСТЕМНЫХ ПРИЗНАКОВ. 7) БУФЕР ВВОДА-ВЫВОДА. Необходим для работы с терминалом, а также с ассемблером-дизассемблером. 8) СТЕК. ГЛАВА 2, которая посвящена системным ячейкам. ───────────────────────────────────────────── В P11 применен несколько специфический доступ к системным ячейкам, что обусловлено желанием сделать его несколько ком- пактнее. Системные ячейки делятся нa системные признаки и си- стемные переменные. ПРИЗНАКИ. Доступ к ним возможен через EMT 151. После него в регистре R5 остается адрес начала буфера. Адреса признаков определяются через смещение относительно начала буфера. ┌──────────────────────────────── смещение │ ┌─────────────────────── символическое имя │ │ ┌───────────────── описание ┌─┴─────┬──┴────┬┴──────────────────────────────────────────┐ │ - 6 │ SSREG │ 377 - включен режим SS (клавиша <ШАГ>) │ │ - 5 │ PRTON │ 377 - включено дублирование на принтер │ │ - 4 │ TRON │ 377 - включена трассировка │ │ - 3 │ TABOFF│ 377 - табуляция (см. описание EMT 140,142)│ │ - 2 │ OUBUF │ 377 - выдача EMT 114 в буфер по R5 │ │ - 1 │ ERROR │ 0 - отсутствие системной ошибки │ │ ├───────┼───────────────────────────────────────────┤ │ 0 │ BUFFER│ БУФЕР РАЗМЕРОМ 100 байт. │ └─.....─┴─.....─┴─.........................................─┘ NB: В системе P11 отрицательные числа должны задаваться в до- полнительном коде, например, -5 = 177773. Пример обращения: EMT 151 ; в R5 адрес признаков; TSTB -5(R5) ; включен ли принтер?; BEQ M1 ; если нет, то перейти на M1; МОV #60,(R5)+ ; записать в буфер число 60; ПЕРЕМЕННЫЕ. Доступ к ним осуществляется через EMT 267, по- добно доступу к признакам. ┌─.....─┬─.....─┬─.........................................─┐ │ 0 │ ABEGIN│ адрес начала рабочей области │ │ 4 │ AEND │ адрес конца рабочей области │ │ 10 │ R0 │ ┐ │ │ 14 │ R1 │ │ │ │ 20 │ R2 │ │ содержимое регистров процессора, переда-│ │ 24 │ R3 │ ├ ваемое программе при запуске по команде │ │ 30 │ R4 │ │ RUN, или РОН при трассировке │ │ 34 │ R5 │ │ │ │ 40 │ SP │ │ │ │ 44 │ PC │ │ │ │ 50 │ PS │ ┘ │ │ 54 │ TRMODE│ переменная, используемая в команде MD │ │ 66 │ BASEPR│ текущая система счисления: │ │ │ │ 2-ASCII 4-TEXT 6-RADIX 10-BYTE 12-WORD │ │ │ │ 14-HEXADECIMAL 16-DECIMAL 20-PRIMARY(BIN) │ └───────┴───────┴───────────────────────────────────────────┘ Пример обращения: EMT 267 ; в R5 адрес блока переменных; MOV 66(R5),-(SP); сохранить текущее BASEPR в стеке; MOV #14,66(R5); установить 16-ричную С.СЧИСЛ.; MOV (R5),R0 ; адрес начала рабочей области в R0; EMT 114 ; вывести R0 на зкран в С.СЧИСЛ.; MOV (SP)+,66(R5); востановить значение BASEPR; ГЛАВА 3, рассказывающая о некоторых EMTах. ────────────────────────────────────────── В процессе 'лепки' своих команд часто нужны подпрограммы, позволяющие сделать процесс програмирования немного проще. И поэтому у автора в процессе работы появились некоторые полез- ные инструкции EMT. Ниже приведено их описание: 122 - сохранение регистров R0-R5 в стеке; 124 - востановление R0-R5 из стека; 126 - востановление R1-R5 из стека. R0 остается прежним, но его значение, сохраненное с помощью EMT 122, из стека убирается; ПРИМЕР: FLUSH: EMT 122 ; сохранить РОН; . . . ; команды п/п FLUSH; TST R0 ; проверить R0; BEQ 1 ; если R0=0, то идти на метку 1; EMT 126 ; востановить РОН без R0; BR 2 ; и возврат из п/п; 1: EMT 124 ; востановить РОН (включая R0); 2: RET ; возврат; 135 - умножение двух 16-разрядных чисел (R1 не сохраняется); вход: R0 - множимое; R2 - множитель; выход: R0 - младшие 16 разрядов результата; 113 - деление двух 16-разрядных чисел; вход: R1 - делимое; R2 - делитель; выход: R0 - целая часть результата; R1 - остаток; 127 - очистка старшего байта R0 (то же, что BIC #177400,R0); 201 - умножение R0 на 100; 203 - -//- на 20; 205 - -//- на 10; 207 - -//- на 4; 211 - деление R0 на 100 нацело (в R0 целая часть результата); 213 - -//- на 20; 215 - -//- на 10; 217 - -//- на 4; 120 - ввод в R5 адреса, заданного смещением; Данная инструкция используется для ввода относительного ад- реса: сравните 3 варианта фрагментов программ, написанных на ассемблере. После выполнения любого из них в R5 остается фи- зический адрес метки STOP: ┌───────────────┬──────────────────────┬────────────────────┐ │ ФИКСИРОВАННЫЙ │ ПЕРЕМЕЩАЕМЫЙ БЕЗ EMT │ ПЕРЕМЕЩАЕМЫЙ С ЕМТ │ ├───────────────┼──────────────────────┼────────────────────┤ │ MOV #STOP,R5 │ MOV PC,R5 │ EMT 120 │ │ │ ADD (PC)+,R5 │ .WORD @STOP │ │ │ .WORD @STOP+2 │ │ ├───────────────┼──────────────────────┼────────────────────┤ │ два слова │ три слова │ два слова │ └───────────────┴──────────────────────┴────────────────────┘ 123 - гашение курсора; 125 - зажигание курсора; ГЛАВА 4. затрагивающая ввод-вывод. ────────────────────────────────── Продолжение описаний EMT: 116 - вывод на экран символа, код которого находится в R0. При этом непечатаемые символы с кодами 0-37 выводятся на экран в виде инверсных латинских заглавных букв, а с ко- дами 200-237 - в виде русских строчных; 114 - то же, что и 116, но при выводе, если установлен OUBUF, то происходит вывод в буфер (адрес которого в R5), если установлн PRTON, то код дублируется на принтере; 117 - вывод кода из R0 на принтер независимо от его готовнос- ти; 115 - на терминал вывести ПРОБЕЛ; 121 - на терминал и принтер вывести символ <ВК> (код 12); 131 - на терминал вывести символ '║'; 251 - сбросить все правее курсора; 165 - очистка экрана ниже позиции курсора; 163 - ввод сканированием в R0 символа, находящегося по теку- щим координатам курсора. Символ берется из видеопамяти, производится его поиск в знакогенераторе, и в R0 зано- сится его код (если символ не обнаружен, то R0=277 (▓). Символ на экране должен быть напечатан в 'худом' кур- соре (64 символа в строке). 112 - ввод в системный буфер строки из 64 символов, сканиро- ванных с экрана по текущей координате Y курсора; 136 - ввод сканированием восьмеричного числа с экрана в R0; 146 - ввод символа в R0 с клавиатуры. Oбеспечивает ввод и ин- дикацию системных клавиш, автоповтор клавиатуры; 144 - обработка кодов нажатых клавиш; вход: R0 - код клавиши; R5 - адрес таблицы кодов; PC - адрес таблицы BR; выход: переход на адрес, заданный командой BR; 1: EMT 146 ; ждать нажатия клавиши; EMT 120 ; ┐ поместить в R5 адрес таблицы кодов; .WORD @TABKEY; ┘ EMT 144 ; обработать код в R0; BR LEFT ; если R0=10 то идти на метку LEFT BR RIGHT ; R0=31 -//- RIGHT BR DOWN ; R0=33 -//- DOWN BR UP ; R0=32 -//- UP BR 1 ; если кнопка не найдена, то повторить; LEFT: ; обработка кнопки 'ВЛЕВО'; RIGHT: UP: DOWN: . . . TABKEY: .BYTE 10,31,33,32,0;таблица кодов (должна иметь бай- .EVEN ;товый формат и заканчиваться ко- ;дом 0). 153 - установка курсора по координатам, заданным байтами пос- ле команды. EMT 153; установить курсор по координатам X,Y; .BYTE X,Y; если X или Y отрицательны, то соответст- ; вующая коодината не изменяется; EMT 153 ; курсор по X поставить в позицию 10; .BYTE 10,200; координату Y не изменять; 130 - вывод на экран R0 в восьмеричном виде; 132 - вывод на экран младшего байта R0 в восмеричном виде; 134 - вывод на экран R0 в формате RADIX50; 140 - вывод на экран R0 по BASEPR. Eсли TABOFF=377, то после вывода числа печатается 1 пробел, если 0, то количество выведенных символов дополняется пробелами до 8; 23456___ - TABOFF=0 23456_ - TABOFF=377; 142 - ввод из буфера (адрес в R5) числа в R0 по BASEPR; Если TABOFF=377, то R5 увеличивается на 1 после вывода, если 0, то дополняется до 8; 171 - вывод R0 в буфер по R5 в восьмеричном виде с подавлением ведущих нулей. R2,R3 не сохраняются. MOV @#160,R0;адрес текущего положения курсора в R0; EMT 151 ;адрес системного буфера в R5; MOV R5,R1 ;R1=R5; EMT 171 ;преобразовать число в буфер; CLRB (R5)+ ;добавить ограничитель - код 0; EMT 151 ;адрес системного буфера в R5; CLR R2 ;будем выводить до кода 0; EMT 20 ;вывести строку; 221 - ввод в R0 восьмеричного числа из буфера (адрес которого в R5); ГЛАВА 5, где открываются таинства подключения. ────────────────────────────────────────────── Наконец, после всех вступительных слов, можно дать структу- ру команд, расположение их в памяти, принципы их обработки и подключения. В памяти команды расположены в виде СПИСКА (тер- мин взят из PASCAL), но вместо адреса следующего элемента ис- пользуется относительное смещение на адрес (.WORD @ADR). ФОРМАТ КОМАНДЫ: ┌─┬───────────────────────────────┬────────────┐ │N│ НАЗНАЧЕНИЕ ПОЛЯ │ ДЛИНА │ ├─┼───────────────────────────────┼────────────┤ │1│ Имя инструкции │ два байта │ ├─┼───────────────────────────────┼────────────┤ │2│ Смещение на следующую команду │ одно слово │ ├─┼───────────────────────────────┼────────────┤ │3│ Машинные инструкции команды │ много слов │ ├─┼───────────────────────────────┼────────────┤ │4│ команда RET (RTS PC) │ одно слово │ └─┴───────────────────────────────┴────────────┘ Если на месте смещения (п.2) находится код "__" (057537), то это означает, что данная команда последняя (список команд за- вершен). Если необходимо подключить одну команду, нужно, что- бы в этой команде в п.2 находился код "__". Если подключается модуль, содержащий несколько команд, то в последней по списку команде должен быть код "__", а все остальные команды должны содержать в п.2 смещение на следующую команду. Поясню : ┌─────┐ ┌─────┐ ┌─────┐ ┌─────┐ │ MO │ ┌─→│ LP │ ─ ──→│ AS │ ┌─→│ DU │ │XXXXX├─┘ │XXXXX├─── ─ │XXXXX├─┘ │ __ │ │. . .│ │. . .│ │. . .│ │. . .│ │ RET │ │ RET │ │ RET │ │ RET │ └─────┘ └─────┘ └─────┘ └─────┘ На этой картинке показан общий принцип расположения команд в памяти БК, и, после подключения новой команды, картинка бу- дет иметь вид: ┌─────┐ ┌─────┐ ┌─────┐ ┌─────┐ ┌─────┐ │ MO │ ┌─→│ LP │ ─ ──→│ AS │ ┌─→│ DU │ ┌─→│ SE │ │XXXXX├─┘ │XXXXX├─── ─ │XXXXX├─┘ │XXXXX├─┘ │ __ │ │. . .│ │. . .│ │. . .│ │. . .│ │. . .│ │ RET │ │ RET │ │ RET │ │ RET │ │ RET │ └─────┘ └─────┘ └─────┘ └─────┘ └─────┘ Причем не обязательно, чтобы команды располагались в памяти последовательно, т.к. смещение определяет полный диапазон ад- ресов, возможных для К1801ВМ1. Мало только подключить команду - необходимо в нее передать параметры. В P11 это реализовано не лучшим способом, но для поставленных задач это более-менее нормально. Интерпретатор P11 может определить три аргумента и записать их в РОН. Тогда, при передаче управления команде, РОН имеют следующие значения: R0 - значение третьего аргумента (по умолчанию 0); R1 - количество интерпретированных операндов (если 15-ый бит установлен в 1, то после имени команды был символ '='); R2 - значение второго аргумента (по умолчанию AEND); R3 - адрес, куда передано управление; R4 - значение первого аргумента (по умолчанию ABEGIN); R5 - значение системного буфера после последнего интерпрети- рованного фрагмента входной строки; После того, как на клавиатуре набрана командная строка (допустим, такая: SAVE 1000,2000,'PROG'), и нажата клавиша <ВК>, интерпретатор начинает ее обработку: а) проверяет, имеется ли в списке имя SA; если нет, то выдает сообщение об ошибке. б) находит операнды (ставит указатель буфера на число 1000); в) проверяет, на число ли указывает R5; если да, то интепре- татор записывает это число в R4. (1000 в R4). г) (в) выполняется для второго и для третьего операнда, ко- торые записываются в R2 и R0 соответственно. (2000 в R2). Интерпретатор обрабатывает только числовые операнды, (но не более трех). Если встретился нечисловой операнд ('PROG'), то интерпретатор установит указатель буфера (R5) на его начало; если количество операндов больше трех, то указатель буфера бу- дет установлен после третьего обработанного операнда. д) управление передается команде. Примеры интерпретации командных строк: ┌──────────────────┬─────┬──────┬──────┬──────┬──────┬──────┐ │ СТРОКА │ R0 │ R1 │ R2 │ R3 │ R4 │ R5* │ ├──────────────────┼─────┼──────┼──────┼──────┼──────┼──────┤ │ IV │ 0│ 0│ AEND│XXXXXX│ABEGIN│IV **│ │ ME 1000 │ 0│ 1│ AEND│XXXXXX│ 1000│1000■ │ │ ME 2000,234 │ 0│ 2│ 234│XXXXXX│ 2000│0,234■│ │ MO 1000,1777,4000│ 4000│ 3│ 1777│XXXXXX│ 1000│4000■ │ │ SA 1000,2000,'PR'│ 0│ 2│ 2000│XXXXXX│ 1000│00,■PR│ │ LP=33 │ 0│100001│ AEND│XXXXXX│ 33│=33■ │ │ LP=200,1,'SAV' │ 0│100002│ 1│XXXXXX│ 200│1,■SAV│ │ FI 100,2000,10,73│ 10│ 3│ 2000│XXXXXX│ 1000│10,■3 │ └──────────────────┴─────┴──────┴──────┴──────┴──────┴──────┘ Примечания: * Значение R5 дается в виде указателя на символ, вместо ко- торого в таблице стоит '■'. То есть, для последней строки таблицы, в R5 будет находится адрес символа '7'. ** Первая строка ( безоперандная команда ) - исключение. В R5 будет находится адрес, приблизительно на 40 больше, чем ад- рес символа 'V'. Это объясняется тем, что в этом диапа- зо- не интерпретатор ведет поиск операндов. Теперь для примера рассмотрим написание команд на языке ас- семблера: .WORD "PR,@LPR-4; заголовок команды PR CODE; PRINT: CMPB R1,#1 ; количество операндов=1 ? BEQ 1 ; если да, то идти на 1; EMT 177 ; иначе сообщение: ОШИБКА ОП; .WORD "ОП ; 1: MOV (R4)+,R0 ; содержимое ячейки, адрес кото- ; рой задан в команде PR - в R0; EMT 121 ; <ВК>; EMT 130 ; напечатать число из R0; RET ; возврат; .WORD "PT,"__ ; команда PT=CODE или PT='TEXT' LPR: TST R1 ; если команда отделена от опе- ; рандов символом '=' BMI 1 ; то - идти на 1; TSTB R1 ; если нет числовых операндов BEQ 2 ; то - идти на 2; 5: EMT 177 ; иначе .WORD "OП ; выдать сообщение об ошибке; 2: MOVB (R5)+,R3 ; символ-ограничитель в R3; 4: MOVB (R5)+,R0 ; следующий символ в R0; CMPB R0,R3 ; если символ - не ограничитель BNE 3 ; то - идти на 3; RET ; иначе возврат; 3: EMT 117 ; напечатать R0 на принтере; BR 4 ; перейти к следущему символу; 1: TSTB R1 ; если нет числовых операндов BNE 5 ; то - идти на 5; MOVB (R5)+,R0 ; символ из буфера в R0; EMT 117 ; напечатать на принтере; RET ; возврат; Как действует EMT 177, из примера понятно, но в добавление можно заметить, что стек при этом может иметь любое значение; при вызове EMT 177 востанавливается значение, бывшее до пере- дачи управления команде. 133 - если содержимое R1 меньше трех, то выдается сообщение: ОШИБКА ОП. ГЛАВА ПОСЛЕДНЯЯ, из которой Вы узнаете о планах автора. ─────────────────────────────────────────────────────── В данной инструкции описаны лишь только наиболее необходи- мые EMTы, а многие ценные остались за ее рамками: такие, как передача в запускаемую программу РОНов, трассировка машинной инструкции, и т.д. С ними Вы разберетесь сами, если возникнет необходимость. Но помните, что не допускается выполнять в командах трасси- ровки EMTы самой системы RARADISE. Это объясняется особенностью написания мною системного EMT-диспетчера и может привести к страшным последствиям. Вообще, сразу замечу, что в результате выбранных алгоритмов работают некорректно: - команда IM с инструкциями типа RET, JMP, BR,.., а также в некоторых случаях JSR RN,.. ( при MD=XX0XXX ). Это происхо- дит потому, что исполняемая команда помещается в буфер, где она должна исполняться. При этом старое значение PC сохра- няется, а новое значение принимает адрес буфера. После вы- полнения инструкции старое значение PC востанавливается из стека, где оно могло быть испорчено исполняемой командой; - команды трассировки при нестандартном использовании стека, т.е. при обращении к его элементам через отрицательное сме- щение. Это происходит из-за того, что выполнение машинной инструкции производится на стеке пользователя с использова- нием прерывания по T-разряду. В настоящий момент автор собирается приступить к написанию новой версии: PARADISE V2.0. Я планирую коренным образом из- менить структуру системы: - отказатся от использования EMT; - ввести оверлейную структуру; - ввести работу с метками в файле типа .OBJ; - постараться сделать экранное редактирование как в тексто- вом редакторе (пересчет BR и JMP при вставке и удалении); - упорядочить работу с представлением чисел в форматах; - сделать систему самонастраиваемой на пользователя; - ввести возможность работы в среде RT-11 и ОСБК11; - для БК11 работа системы в теневой странице; - организовать многооконный интерфейс; - значительно расширить возможности трассировки; - и еще многое другое... Перспективы развития системы зависят от Вашего спроса и Ва- шей в ней необходимости. Вам желает удачи КЛИМЕНКОВ СЕРГЕЙ - 197198, г.Санкт-Петербург ул. Введенская д. 19 кв. 34. *═*═*═*═*═*═*═*═*═*═*═*═*═*═*═*═*═*═*═*═*═*═*═*═*═*═*═*═*═*═* ║ КОММЕРЧЕСКОЕ РАСПРОСТРАНЕНИЕ ПАКЕТА БЕЗ РАЗРЕШЕНИЯ АВТОРА ║ * В О С П Р Е Щ Е Н О ! ! ! * ║ ТЕ, КТО ПОЛУЧИЛ ПАКЕТ У СВОЕГО ДРУГА, ПОСТАВЬТЕ СЕБЯ НА ║ * МЕСТО АВТОРА, ПОЙМИТЕ, СКОЛЬКО СИЛ БЫЛО ОТДАНО ПРОГРАММЕ, * ║ НЕ ПОЛЕНИТЕСЬ - СХОДИТЕ НА ПОЧТУ И ОТПРАВЬТЕ АВТОРУ ТУ ║ * СУММУ, В КОТОРУЮ ВЫ С А М И ОЦЕНИВАЕТЕ ЕГО ТРУДЫ, И ЖЕ- * ║ ЛАНИЕ ПОМОЧЬ ВАМ. ║ * * ║ Привет ! ║ *═*═*═*═*═*═*═*═*═*═*═*═*═*═*═*═*═*═*═*═*═*═*═*═*═*═*═*═*═*═* -------------------- Живы будем - Не помрем !
|
Текстовая версия | Сейчас: 27.9.2024, 2:25 |