(примечание gid: Эта статья была сравнена с аналогичной статьёй в журнале ИНФО №5 1989, и дополнена и исправлена в соответствии с ней, поэтому она имеет вид не совсем тот, что был в журнале. Так же были исправлены ошибки, опубликованые в ИНФО №3 1990, а так же в журнале "ВТ и её П" №9 1989 (не распознавалось))
Использование только ФОКАЛа иногда препятствует эффективному решению задач на ЭВМ. Это особенно проявляется при программировании динамических графических изображений или при управлении внешними устройствами. Некоторые задачи вообще невозможно решить, оставаясь в рамках ФОКАЛа, например, создание алфавита пользователя или программирование звуковых эффектов. Однако с помощью ФОКАЛа можно создавать разнообразные программы как чисто вычислительного, так и игрового характера, используя при этом графические возможности и доступ к порту ЭВМ.
С. ГВОЗДЕВ, Г. ЭРНЕСТСОНС
Использование плавающей арифметики ФОКАЛа в БК-0010
Микро-ЭВМ «Электроника БК-0010», получившая у нас большое распространение, оснащалась до последнего времени интерпретатором с языка ФОКАЛ [1], выполненным в микросхеме К1801РЕ2-018 (или К1801РЕ2-084 в комплекте с классом КУВТ-86). С помощью Фокала можно создавать разнообразные программы как чисто вычислительного, так и игрового характера, используя графические возможности и доступ к порту БК.
Однако использование только Фокала иногда препятствует эффективному решению задачи на ЭВМ. Это особенно проявляется при программировании динамических графических изображений или при управлении внешними устройствами. Некоторые задачи вообще невозможно решить, оставаясь в рамках Фокала, например создание алфавита пользователя или программирование звуковых эффектов.
Применение подпрограмм пользователя в рамках так называемого FOCODa (автор В.Н. Андреев, Москва) для названных задач не всегда даёт желаемый результат. Для этого предпочтительнее программировать исключительно в кодах ЭВМ, полностью отказываясь от ФОКАЛа, получая в качестве компенсации в своё распоряжение все возможности БК-0010.
Программирование в кодах позволяет не только повысить скорость исполнения программы, но и сэкономить память, тем более что этот ресурс в БК-0010 крайне ограничен.
Однако, отказываясь от ФОКАЛа приходится считаться с отсутствием в системном программном обеспечении ЭВМ арифметики чисел с плавающей запятой и библиотеки подпрограмм для вычисления стандартных функций.
Вниманию читателей предлагается простой способ доступа на уровне кодов ЭВМ к находящимся в ПЗУ ФОКАЛ-арифметике и встроенным функциям ФОКАЛа. В этом случае удаётся сэкономить память ЭВМ, затраты которой были бы значительными, если в неё вводить собственный вариант программ для работы с числами с плавающей запятой. Так объём программ в ПЗУ, реализующих ФОКАЛ-арифметику, составляет 2,7 кбайт.
Как уже отмечалось выше, программирование в кодах позволяет получить выигрыш при решении задачи относительно её реализации на Фокале. Для иллюстрации рассмотрим пример, часто встречающийся при сборе данных. Предположим, что некоторое устройство, например, измеритель температуры, подключено к порту БК-0010 и по приказу ЭВМ выдаёт на него двоичные числа, пропорциональные значению температуры. Таким приказом является установка младшего бита порта на короткое время в единицу. Пусть необходимо произвести 1000 измерений и поместить их значения в массив Т(i). Программа на ФОКАЛе, производящая указанные действия, будет выглядеть следующим образом.
10.10 X FP(1,177777); С Очистка регистра вывода 10.20 S N=1000; С Установка числа измерений 10.30 F I=1,N; X FP(2,1); X FP(1,1); S T(I)=FP(0,177777) 10.40 Q
В этой программе около 95% машинного времени уходит на интерпретацию программы. Соответствующая программа в машинных кодах работает в 40-50 раз быстрее. Кроме увеличенной скорости, мы имеем выигрыш в памяти. Дело в том, что для хранения числа в ФОКАЛе отводится 8 байтов, в то время как фактически число размещается в 4 байтах. Таким образом, выигрыш при хранении данных равняется 4 байтам на каждое число.
Отметим что выигрыш в скорости тем значительнее, достигая 2-3 порядков, чем более просты математические операции, которые используются в ФОКАЛ-программе. Однако даже для вычисления сложных функций, типа FSIN(X), программа в кодах работает в 1,5 раза быстрее.
Программу в кодах, аналогичную ФОКАЛ-программе, мы приведём ниже, после разбора арифметики чисел с плавающей запятой.
ФОКАЛ-арифметика
В связи с отсутствием в публикациях сведений о ФОКАЛ-арифметике дадим краткий обзор на эту тему. Будем считать, что читателю известна архитектура ЭВМ и элементы программирования на АССЕМБЛЕРЕ (см., например [2]).
В ФОКАЛЕ реализована арифметика вещественных чисел с плавающей запятой одинарной точности. В памяти ЭВМ числа представлены в двухсловном формате. Порядок записывается в одном байте, а мантисса занимает 3 байта. Отрицательный порядок и мантисса кодируются в дополнительном коде.
младшие разряды мантиссы |
порядок |
старшие разряды мантиссы |
Арифметические операции с числами производятся в трёхсловном сумматоре, реализованном программно и размещённом в памяти ЭВМ в адресах 1710, 1712, 1714.
Кодирование операций осуществляется с помощью псевдокоманд, при встрече которых в тексте программы происходит прерывание по вектору 10 (прерывание по коду резервной команды) и управление передаётся на обработку этих команд.
Арифметические операции в ФОКАЛе можно условно разделить на двухместные (сложение, умножение) и одноместные (целая часть, абсолютная величина).
Первым операндом в двухместных операциях является содержимое сумматора, второй операнд выбирается из памяти ЭВМ в зависимости от метода адресации. Результат операции всегда помещается в сумматор.
Двухместная операция кодируется четырёхзначным восьмеричным числом 70XY, где X и Y - восьмеричные цифры, означающие: X - код операции, Y - метод адресации операнда (табл. 1,2). При описании арифметических операций и функций используются следующие обозначения: S - сумматор, oр - операнд.
Код Х |
Операция |
Мнемоника |
---|---|---|
0 |
ор → S |
FGET |
1 |
S + ор → S |
FADD |
2 |
S - ор → S |
FSUB |
3 |
S / ор → S |
FDIV |
4 |
S * ор → S |
FMUL |
5 |
S ¬ ор → S |
FPOW |
6 |
S → ор |
FPUT |
Код У |
Адрес операнда |
Мнемоника |
---|---|---|
0 |
Адрес в следующем слове |
@#op |
1 |
Адрес в R2 |
(R2) |
2 |
(R2)+4, адрес в R2 |
+(R2) |
3 |
Операнд в вершине стека |
(SP) |
4 |
Адрес в вершине стека |
@(SP) |
5 |
Операнд в следующих двух словах |
# op |
6 |
Не работает |
|
Типы адресации достаточно очевидны и ясны из обозначений табл. 2. Однако есть нюансы относительно традиционных методов адресации в архитектуре ЭВМ. Так, использование адресации с кодом 2 (автоинкрементная адресация) имеет ту особенность, что изменение содержимого регистра R2 производится до операции, а не после, как обычно при выполнении машинных команд. При размещении операнда в стеке (адресация с кодом 3) программист сам должен следить за указателем стека.
Псевдокоманды с кодом 707Y задают одноместные операции, выполняющиеся над содержимым сумматора (табл. 3).
Команда |
Операция |
Мнемоника |
---|---|---|
7070 |
Нормализация числа в S |
FNOR |
7071 |
Целая часть S → R1 |
FINT |
7072 |
Sgn(S) → S |
FSGN |
7073 |
Abs(S) → S |
FABS |
7074 |
-S → S |
FNEG |
7075 |
Перевод числа, заданного символьной строкой в S |
FREAD |
7076 |
Вывод S на экран R2 - формат вывода |
FPRINT |
7077 |
0 -> S |
FZERO |
При выполнении псевдокоманд содержимое регистров сохраняется, кроме тех случаев, когда изменение содержимого регистров обусловлено самой псевдокомандой. Необходимо отметить, что признаки NZVC после выполнения псевдокоманд не устанавливаются в соответствии с результатом операции.
Проиллюстрируем на примерах использование описанных операций. Программы в кодах ЭВМ приводятся в соответствии с мнемоникой, принятой в АССЕМБЛЕРе. В приводимых примерах значащими являются только столбцы с адресом памяти и содержимым слова по данному адресу. Поля с мнемоникой команд и комментарием приводятся только в целях облегчения понимания.
Загрузка сумматора некоторым числовым значением производится с помощью операции FGET:
Адрес Содержимое Мнемоника Комментарий 002000 007000 FGET @#А ; Операция FGET. 002002 002100 ; Адрес операнда. ------------------------------------------------------- 002100 000002 А: ; Число 2.0 в формате 002102 040000 ; с плавающей запятой.
Та же самая операция возможна с адресацией через регистр R2.
002000 012702 MOV #A,R2 ; Загружаем адрес 002002 002100 ; переменной А в R2. 002004 007001 FGET (R2) ; А в сумматор.
Адресация через регистр R2 особенно эффективна, когда переменные занимают смежные участки памяти ЭВМ. В этом случае удобно использовать автоматическую модификацию индексного регистра, так называемую автоиндексацию. Рассмотрим пример, в котором применяется автоиндексация. Пусть у нас есть фрагмент ФОКАЛ-программы:
10.10 S С=2.0+3.0 10.20 Т С; Q
Программа в кодах может выглядеть следующим образом:
002000 012702 MOV #<A-4>,R2 ; Адрес массива перемен- 002002 002014 ; ных с учётом автомати- ; ческого наращивания. 002004 007002 FGET +(R2) ; Занести в сумматор 2.0 002006 007012 FADD +(R2) , Добавить к сумматору 3.0 002010 007062 FPUT +(R2) ; Результат запомнить в С. 002012 005002 CLR R2 ; Подготовиться к выводу. 002014 007076 FPRINT ; Вывести сумматор на экран 002016 000000 HALT 002020 000002 А: ; 2.0 002022 040000 002024 000002 В: ; 3.0 002026 060000 002030 С: ; Здесь будет результат.
В приведённом примере в переменных А и В записаны константы в формате чисел с плавающей запятой. В данном случае перевод в нужный вид был сделан вручную. Иногда такое преобразование можно поручить ЭВМ. Очевидно, что в процессе решения задач возникают ситуации, требующие преобразования чисел из одного вида в другой. Например, целые числа при программировании в кодах гораздо удобнее. Но, перед тем как обратиться к ФОКАЛ-арифметике, целое число надо преобразовать в нормальный двухсловный формат. Целое число, расположенное по адресу А, можно поместить в сумматор при помощи следующего фрагмента программы:
002000 012737 MOV #17,@#1710 ; Порядок целого числа 002002 000017 ; равен 15. 002004 001710 002006 013737 MOV @#А,@#1712 ; Записали целое число 002010 002100 ; в виде ненормализован- 002012 001712 ; ной мантиссы. 002014 005037 CLR @#1714 ; Незначащие разряды в 0. 002016 001714 002020 007070 FNOR ; Нормализовали сумматор
В дальнейшем значение сумматора можно или использовать непосредственно в вычислениях, или записать в память ЭВМ.
В практике часто приходится вводить числовые данные с клавиатуры ЭВМ. При этом в памяти ЭВМ образуется последовательность байтов, в которой находится число в символьном виде в коде КОИ-8. Для перевода числа в двоичный вид можно воспользоваться операцией FREAD. Символьная строка предварительно должна быть перекодирована, так как в ФОКАПе для некоторых символов используются коды, отличные от стандартных кодов КОИ-8. При записи числа, в частности, необходимы символы «-» (минус) и «+» (плюс) В ФОКАЛе для этих символов употребляются восьмеричные коды 202 и 201 соответственно вместо 55 и 53. Признаком конца символьной строки является код 217. В следующем примере с клавиатуры вводится число, коды клавиш «+», «-» и «ВВОД» перекодируются. Затем число переводится в плавающий формат и записывается в сумматор.
002000 012701 MOV #A,R1 ; Поместить адрес символьной 002002 002100 ; строки в R1. 002004 104016 4¤: ЕМТ 6 ; Ввести код с клавиатуры в R0 ;EMT 16 ; вывести эхо на экран 002006 120027 СМРВ R0,#'+ ; Ввели"+"? 002010 000053 002012 001003 BNE 1¤ ; Нет. 002014 112700 MOVB #201, R0 ; Да. Заменить код. 002016 000201 002020 000413 BR 2¤ 002022 120027 1¤: СМРВ R0,#'- ; Ввели"-"? 002024 000055 002026 001003 BNE 3¤ ; Нет 002030 112700 MOVB #202,R0 ; Да. 002032 000202 002034 000405 BR 2¤ 002036 120027 3¤: СМРВ R0,#12 ; Нажали "ВВОД"? 002040 000012 002042 001002 BNE 2¤ ; Нет. 002044 112700 MOVB #217,R0 ; Код завершения строки. 002046 000217 002050 110021 2¤: MOVB R0,(R1)+ ; Записали символ в буфер. 002052 120027 СМРВ R0,#217 ; Если закончили ввод, 002054 000217 ; то выполнить перевод. 002056 001352 BNE 4¤ ; Иначе ввести следующий символ. 002060 012703 MOV #А, R3 ; Для перевода надо поместить 002062 002100 ; адрес символьной строки в R3. 002064 112737 MOVB #20,@#1723 ; Обязательно заполнить. 002066 000020 002070 001723 002072 112304 MOVB (R3)+, R4 ; Обязательно поместить первый ; символ в R4. 002074 007075 FREAD ; Поместить число в сумматор. 002076 000000 HALT 002100 А: ; Буфер ввода.
Если символьная строка не требует перекодировки, то для перевода числа в плавающий формат необходимы строки программы, записанные в адресах 2060 по 2074.
Операция FREAD вводит в сумматор всегда положительное число. Если символьная строка задаёт отрицательное число, то после можно воспользоваться операцией FNEG для правильного представления числа в сумматоре.
В списке операций ФОКАЛа отсутствует операция для перевода числа из плавающей формы в символьный вид. Однако операция FPRINT позволяет вывести на экран содержимое сумматора. Регистр R2 содержит при этом требуемый формат. Восьмеричная константа 4012 соответствует формату ФОКАЛа %8.04. Если R2 равен нулю, то число будет выведено в экспоненциальной форме. При использовании FPRINT необходимо иметь в виду, что операция не сохраняет содержимое сумматора.
Завершим рассмотрение операций ФОКАЛа фрагментом программы в кодах ЭВМ, соответствующей ФОКАЛ-программе, которая приведена в начале статьи.
002000 012705 MOV #1000., R5 ; Число измерений 1000 002002 001750 002004 012702 MOV #<T-4>, R2 ; Адрес массива измерений. 002006 002050 002010 012701 MOV #177714, R1 ; Адрес порта ввода/вывода. 002012 177714 002014 005011 CLR (R1) ; Очистить регистр вывода. 002016 052711 1¤: BIS #1, (R1) ; Произвести измерение 002020 000001 002022 042711 BIC #1, (R1) 002024 000001 002026 012737 MOV #17, @#1710 002030 000017 002032 001710 002034 011137 MOV (R1), @# 1712 ; Записать измерение 002036 001712 ; в сумматор 002040 005037 CLR @#1714 002042 001714 002044 007070 FNOR ; Перевести в плавающий формат 002046 007062 FPUT +(R2) ; Записать в массив Т(). 002050 077516 SOB R5, 1¤ ; Следующее измерение. 002052 000000 HALT 002054 T: ; Массив измерений Т.
Данная программа иллюстрирует ещё один источник экономии памяти при программировании в кодах. Несмотря на довольно длинную запись, программа в кодах занимает в памяти ЭВМ примерно в 2 раза меньше места, нежели чем её прототип на ФОКАЛе. В среднем, как показывает опыт программирования в кодах, данная пропорция сохраняется для достаточно длинных и содержательных программ.
Встроенные математические функции ФОКАЛа
Обращение к встроенным функциям ФОКАЛа производится как к обычным подпрограммам, в качестве регистра возврата используется счётчик команд PC (или R7), т.е.
JSR PC, <адрес функции в ПЗУ ФОКАЛа>
Адреса встроенных функций для микросхемы К1801РЕ2-018 приведены в табл. 4. Для микросхемы K1801PE2-084 адреса, естественно, другие. Полный перечень адресов для микросхемы -084 будет приведён в приложении.
Адрес |
Функция |
Мнемоника |
---|---|---|
126550 |
int(S) → S |
FITR |
132260 |
cos(S) → S |
FCOS |
132250 |
sin(S) → S |
FSIN |
132122 |
кв. корень (S) → S |
FSQT |
132550 |
случ. число → S |
FRAN |
126554 |
sign(S) → S |
FSGN |
126540 |
|S| → S |
FABS |
134132 |
lg(S) → S |
FLOG10 |
134156 |
ln(S) → S |
FLOG |
134416 |
exp(S) → S |
FEXP |
133702 |
tg(S) → S |
FTAN |
134632 |
arctg(S) → S |
FATAN |
133656 |
arccos(S) → S |
FACOS |
133402 |
arcsin(S) → S |
FASIN |
При использовании встроенных функций программист должен сам побеспокоиться о сохранении регистров ЭВМ.
Программа начальной инициализации
Опишем сейчас действия, которые надо проделать, прежде чем воспользоваться ФОКАЛ-арифметикой или встроенными функциями. Связь с программным обеспечением, находящимся в ПЗУ, осуществляется через векторы прерывания. Выше уже упоминалось, что при встрече кодов псевдокоманд происходит прерывание по резервной команде (вектор прерывания 10). При обработке псевдокоманд ФОКАЛ использует внутренние обслуживающие подпрограммы. Служебные подпрограммы выполняют такие действия, как работа со строками, ввод-вывод символьной информации, вычислительные действия, выдача сообщений об ошибках. Часть служебных подпрограмм вызывается с помощью TRAP-запросов. Вектор прерывания для TRAP-запросов содержится в ячейке 34.
Следовательно, для успешной работы с программным обеспечением, размещённом в ПЗУ ФОКАЛа, необходимо создать соответствующую рабочую среду. В принципе если программа пользователя написана без единой ошибки, то для правильной обработки псевдокоманд достаточно перед их выполнением заменить содержимое ячеек 10 и 34 на адреса связи с ФОКАЛом 125636 и 121136 соответственно. Однако в этом случае программа пользователя беззащитна перед любыми ненормальными ситуациями, происходящими при работе обслуживающих подпрограмм ФОКАЛа. Например, невозможно гарантировать, что в процессе решения задачи не возникнет попытка деления на нуль, или попытка извлечь корень из отрицательного числа, или попытка перевести из символьного в двоичный формат нечисловую информацию. В этом случае при любой ошибке управление передаётся ФОКАЛу, который в «наказание» стирает как программу пользователя, так и все данные.
Предлагаемая вспомогательная программа осуществляет корректный интерфейс между программой пользователя в кодах ЭВМ, обслуживающими подпрограммами ФОКАЛа и монитором из которого был произведён запуск программы пользователя. В любом случае вход в программу пользователя происходит из вспомогательной программы, которую мы будем называть в дальнейшем программой начальной инициализации ПИФ
Основные функции программы ПИФ:
- сохранение области векторов прерывания монитора, из которого производится пуск программы;
- создание необходимой рабочей среды для ФОКАЛа,
- перехват всех TRAP-запросов и анализ их корректности;
- обработка ошибочных TRAP-запросов;
- возврат в монитор, из которого был произведён запуск программы.
Область памяти 1000-1777 используется программой ПИФ и рабочими ячейками ФОКАЛа. Приведём распределение адресного пространства.
1000 |
Стартовый адрес программы. Сохранение области векторов прерывания, заполнение рабочих ячеек ФОКАЛа, установка векторов прерывания, установка указателя стека |
1060 |
«Ловушка» для TRAP-запросов |
1120 |
Обработка недействительных TRAP-запросов. |
1142 |
Выход в вызывающий монитор восстановление векторов прерывания сообщение о месте останова. |
1160 |
Свободная область. |
1200 |
Адреса обработки TRAP-запросов с 200 по 262. |
1264 |
Резерв для использования TRAP с 264 по 376. |
1400 |
П/П для сохранения и восстановления векторов прерывания, область сохранения. |
1500 |
Рабочие ячейки ФОКАЛа. |
2000 |
Первая команда программы пользователя. |
Программа пользователя в кодах должна размещаться в памяти ЭВМ, начиная с адреса 2000. Более того, по адресу 2000 должна располагаться первая исполняемая команда программы. Однако пуск программы производится через ПИФ, т.е. с адреса 1000. Завершаться программа пользователя может традиционной командой HALT. При этом адрес останова находится в регистре R5. Естественно, результат при нажатии на клавишу «СТОП» будет точно такой же.
Выше речь уже шла об ошибочных ситуациях при исполнении операций ФОКАЛа или при вычислении стандартных функций. В этом случае ПИФ обеспечивает нормальный останов программы с выдачей дополнительно некоторого диагностического сообщения. Например, если произошла ошибка деления на нуль, то на экран выдаётся:
ПОПЫТКА ДЕЛЕНИЯ НА НУЛЬ 002450 : 104635
Для недопустимых TRAP-запросов выдаётся только вторая строка. В обоих случаях программа завершает работу таким же образом, как описано выше.
Чётные номера TRAP-запросов с кодами 264-376 свободны и могут быть использованы программистом для обращения к своим подпрограммам с помощью программного прерывания TRAP. Область памяти с адресами 1264-1376 зарезервирована для соответствующих адресов подпрограмм пользователя. Если подпрограмму, расположенную начиная с адреса SUBPR, пользователь захочет вызвать с помощью, например, запроса TRAP 264, то предварительно необходимо адрес подпрограммы поместить в слово с адресом 1264. Возврат из подпрограммы производится через регистр R5.
MOV #SUBPR, @#1264 ; Адрес, подпрограммы ; пользователя в таблицу ; TRAP – запросов . . . . . . . . . . . . . . . . . . . . . . . . . TRAP 264 ; Вызов подпрограммы . . . . . . . . . . . . . . . . . . . . . . . . . SUBPR: ; Начало подпрограммы, RTS R5 ; Возврат.
Кроме того, программист может включать в свою программу и некоторые служебные TRAP-запросы ФОКАЛа, в частности запросы с номерами 0-177, которые выдают на экран символ, код которого соответствует номеру запроса.
Для тех, кто захочет воспользоваться средствами, описанными в данной статье, мы приводим текст ПИФ. Для экономии места даётся только образ памяти в восьмеричном виде. Пользователь должен будет ввести эту программу в память ЭВМ с помощью любого монитора, начиная с адреса 1000.
Текст программы начальной инициализации ПИФ
004767 000374 012737 125636 000010 012737 001060 000034 012767 001032 000210 000137 120056 012706 001000 012737 001152 000004 012767 001120 000164 104004 000137 002000 106466 000002 010566 000002 011605 016516 177776 106216 100402 000137 121502 103404 106116 162716 103400 013607 012706 001000 004437 110346 014501 103013 104412 016101 014211 005002 104020 000407 011605 012706 001000 004437 110346 004767 000232 004437 110362 000000 000000 000000 121572 121624 122134 122074 132064 132052 122360 001120 121520 121640 121752 001120 124134 001120 122250 001120 001120 122012 122040 125326 122056 122022 121556 125556 001120 001120 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 005000 012701 001430 012702 000040 112021 077202 000207 005001 012700 001430 000767
Вариант из ИНФО 89'05, как выяснилось позже - работоспособный вариант
004767 000374 012737 125636 000010 012737 001060 000034 012767 001032 000210 000137 120056 012706 001000 012737 001142 000004 012767 001120 000164 104004 000137 002000 106466 000002 010566 000002 011605 016516 177776 106216 100402 000137 121502 103404 106116 162716 103400 013607 012706 001000 014501 103005 104412 016101 014211 005002 104020 104412 104407 012706 001000 004767 000242 000000 000000 000000 000000 000000 000000 000000 000000 000000 121572 121624 122134 122074 132064 132052 122360 001120 121520 121640 121752 001120 124134 001120 122250 001120 001120 122012 122040 125326 122056 122022 121556 125556 001120 001120 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 005000 012701 001430 012702 000020 012021 077202 000207 005001 012700 001430 000767
В заключение отметим, что указанный подход применим и в том случае, когда используется микросхема с другим языком, например, с БЕЙСИКОМ. Правда, в этом случае можно воспользоваться только идеей. К сожалению, ни завод-изготовитель, ни разработчики языков не представляют пользователям ЭВМ достаточной информации о программе, записанной в ПЗУ. Это приводит к тому, что пользователи вынуждены проводить свои исследования, подобно этому.
ПРИЛОЖЕНИЕ
Приложение содержит все изменения, которые надо внести в текст программы ПИФ или учесть при использовании ФОКАЛа, находящегося в микросхеме К1801РЕ2-084
Адрес |
Функция |
Мнемоника |
Адрес для микросхемы "018" |
---|---|---|---|
126672 |
int(S) → S |
FITR |
126550 |
132262 |
cos(S) → S |
FCOS |
132260 |
132252 |
sin(S) → S |
FSIN |
132250 |
132124 |
кв.корень (S) → S |
FSQT |
132122 |
132552 |
случ.число → S |
FRAN |
132550 |
126666 |
sign(S) → S |
FSGN |
126554 |
126662 |
|S| → S |
FABS |
126540 |
134134 |
lg(S) → S |
FLOG10 |
134132 |
134160 |
ln(S) → S |
FLOG |
134156 |
134420 |
exp(S) → S |
FEXP |
134416 |
133704 |
tg(S) → S |
FTAN |
133702 |
134634 |
arctg(S) → S |
FATAN |
134632 |
133660 |
arccos(S) → S |
FAGOS |
133656 |
133404 |
arcsin(S) → S |
FASIN |
133402 |
- Адреса встроенных функций для микросхемы К1801РЕ2-084.
- Значение векторов прерывания 10 и 34 должны быть равны 125760 и 121300 соответственно.
- В программе ПИФ должны быть изменены значения ячеек 1006, 1104 и 1140 на 125760, 121654 и 014313.
- В программе ПИФ изменяется таблица TRAP-запросов, расположенная начиная с адреса 1200. Для микросхемы -084 значения этой таблицы следующие:
121744 121776 122306 122246 132012 132000 122532 001120 121672 122012 122124 001120 124256 121414 122622 001120 001120 122164 122212 125450 122230 122174 121730 125700
Список литературы
- Писаревский А.Н., Осетинский Л.Г., Осетинский М.Г. ФОКАЛ - диалоговый язык для мини-ЭВМ. - Л. Машиностроение, 1985. - 195 с., ил.
- Вигдорчик Г.В., Воробьев А.Ю., Праченко В.Д. - Основы программирования на ассемблере для СМ ЭВМ. - М.: Финансы и статистика, 1983 - 256 с., ил.