Код
────────────────────────────────────
▓▓▓▓▓▓▓▓▓▓▓▓ 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.
*═*═*═*═*═*═*═*═*═*═*═*═*═*═*═*═*═*═*═*═*═*═*═*═*═*═*═*═*═*═*
║ КОММЕРЧЕСКОЕ РАСПРОСТРАНЕНИЕ ПАКЕТА БЕЗ РАЗРЕШЕНИЯ АВТОРА ║
* В О С П Р Е Щ Е Н О ! ! ! *
║ ТЕ, КТО ПОЛУЧИЛ ПАКЕТ У СВОЕГО ДРУГА, ПОСТАВЬТЕ СЕБЯ НА ║
* МЕСТО АВТОРА, ПОЙМИТЕ, СКОЛЬКО СИЛ БЫЛО ОТДАНО ПРОГРАММЕ, *
║ НЕ ПОЛЕНИТЕСЬ - СХОДИТЕ НА ПОЧТУ И ОТПРАВЬТЕ АВТОРУ ТУ ║
* СУММУ, В КОТОРУЮ ВЫ С А М И ОЦЕНИВАЕТЕ ЕГО ТРУДЫ, И ЖЕ- *
║ ЛАНИЕ ПОМОЧЬ ВАМ. ║
* *
║ Привет ! ║
*═*═*═*═*═*═*═*═*═*═*═*═*═*═*═*═*═*═*═*═*═*═*═*═*═*═*═*═*═*═*
▓▓▓▓▓▓▓▓▓▓▓▓ 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.
*═*═*═*═*═*═*═*═*═*═*═*═*═*═*═*═*═*═*═*═*═*═*═*═*═*═*═*═*═*═*
║ КОММЕРЧЕСКОЕ РАСПРОСТРАНЕНИЕ ПАКЕТА БЕЗ РАЗРЕШЕНИЯ АВТОРА ║
* В О С П Р Е Щ Е Н О ! ! ! *
║ ТЕ, КТО ПОЛУЧИЛ ПАКЕТ У СВОЕГО ДРУГА, ПОСТАВЬТЕ СЕБЯ НА ║
* МЕСТО АВТОРА, ПОЙМИТЕ, СКОЛЬКО СИЛ БЫЛО ОТДАНО ПРОГРАММЕ, *
║ НЕ ПОЛЕНИТЕСЬ - СХОДИТЕ НА ПОЧТУ И ОТПРАВЬТЕ АВТОРУ ТУ ║
* СУММУ, В КОТОРУЮ ВЫ С А М И ОЦЕНИВАЕТЕ ЕГО ТРУДЫ, И ЖЕ- *
║ ЛАНИЕ ПОМОЧЬ ВАМ. ║
* *
║ Привет ! ║
*═*═*═*═*═*═*═*═*═*═*═*═*═*═*═*═*═*═*═*═*═*═*═*═*═*═*═*═*═*═*