[an error occurred while processing this directive]
; Файл, содержащий ссылки на слова, определенные в
; базовом FORTH для разработки библиотек и просто
; общего удовлетворения!!!!
;
; Дата написания: 7.94
*********************************************************
; Написание процедур на ассемблере для BForth облегчается
; ассемблерными процедурами описанными ниже.
; Основное соглашение: регистры A, Y всегда могут
; использоваться как угодно,
; регистр X ВСЕГДА должен содержать
; смещение для арифметического стека.
; При выполнении операций со стеком на ассемблере
; Данные помещаются: мл.байт-> A, ст. байт-> Y.
; Более подробные примеры см. SYS*.*
;Название Адрес Комментарии
;----------- ------------- -------------------------------
; Слова для формирования ссылок в CFA-------------------
UserVar equ ¤07f8+FUP Пользовательская переменная ( в поле PFA смещение в 0 стр.)
Cons equ ¤0f2d+FUP Константа( находится в PFA )
Var equ ¤0f57+FUP Переменная( адрес в PFA )
Does equ ¤0f88+FUP Структура <BULDS .. DOES>
; Слова для использования ассемблерными процедурами:
PushNext equ ¤0012+FUP Положить на стек и перейти к следующему слову
Push equ ¤0012+FUP Положить в стек
Pop equ ¤001e+FUP Взять из стека
VremStack equ ¤0027+FUP Поместить слово из VREM+0..1 в стек
StackVrem equ ¤0034+FUP Наоборот
Vrem2Stack equ ¤0041+FUP Поместить слово их VREM+2..3 в стек
StackVrem2 equ ¤004e+FUP Наоборот
GetStream equ ¤0063+FUP Взять текущее слово из потока команд
IncRegs equ ¤0095+FUP Увеличить регистры как слово
DecRegs equ ¤009c+FUP Уменьшить регистры как слово
IncRegsStack equ ¤00a3+FUP Увеличить регистры на содержимое стека
DecRegsStack equ ¤00b6+FUP То же, но уменьшить
IncMemVrem equ ¤01f0+FUP Увеличить VREM+0..1 на MEMADR+0. ..1
NegVrem equ ¤01fe+FUP Изменить знак слова во VREM+0..1
IncVrem equ ¤0222+FUP Увеличить слово во VREM+0..1
GetKey equ ¤022e+FUP Взять или нет байт с клавиатуры ( успешно C=1 )
CursorOff equ ¤0269+FUP Ассемблерное выключение курсора
CursorOn equ ¤027a+FUP ------------ включение курсора
IsCtrlA equ ¤0343+FUP Проверка символа в A на принад- лежность к управляющим( если так, то C= 1 )
DisInt equ ¤034f+FUP Запретить прерывания
EnbInt equ ¤035f+FUP Разрешить прерывания
SysMem equ ¤291c+FUP Адрес начала массива для описа- ния памяти системы
TrueFlag equ ¤0391+FUP Выдать в стек TRUE
FalseFlag equ ¤0397+FUP Выдать в стек FALSE
; Слова для программирования на FORTH-------------------
zequ equ ¤0389+FUP =0
zgreat equ ¤03a0+FUP >0
zless equ ¤03ad+FUP <0
equal equ ¤03ba+FUP =
uless equ ¤0301+FUP u<
ugreat equ ¤03e7+FUP u>
less equ ¤0400+FUP <
great equ ¤042d+FUP >
drop equ ¤043f+FUP
swap equ ¤0449+FUP
dup equ ¤045d+FUP
over equ ¤046c+FUP
pick equ ¤0484+FUP
ddup equ ¤04a3+FUP -dup
dup2 equ ¤04c0+FUP
rot equ ¤04d8+FUP
ddrop equ ¤04f4+FUP -drop
dswap equ ¤0501+FUP
exec equ ¤0526+FUP
dlit equ ¤0532+FUP Слово для взятия из очереди двойного слова и помещения на стек
lit equ ¤0538+FUP Перенести слово из очереди в стек.
zbran equ ¤053e+FUP Ветвление, если на стеке 0 ( в очереди после этого слова находится смещение перехода )
bran equ ¤0548+FUP Безусловное ветвление
nzbran equ ¤055f+FUP Ветвление, если <>0
xdo equ ¤056b+FUP Начнем цикл DO .. LOOP
xloo equ ¤0586+FUP Закончим этот цикл
pfind equ ¤05c7+FUP
digit equ ¤062d+FUP
leave equ ¤0657+FUP
tor equ ¤0675+FUP >r
fromr equ ¤0690+FUP r>
i equ ¤06a7+FUP
srp equ ¤06be+FUP i'
lev equ ¤06cc+FUP
true equ ¤06de+FUP На стек -1
false equ ¤06eb+FUP На стек 0
zero equ ¤06f4+FUP 0
one equ ¤06fd+FUP 1
two equ ¤0706+FUP 2
three equ ¤070f+FUP 3
four equ ¤0718+FUP 4
eight equ ¤0721+FUP 8
blank equ ¤072e+FUP В стандарте BL
t32 equ ¤0739+FUP На стек константу 32( дес. )
t64 equ ¤0744+FUP На стек константу 64( дес. )
sysbuf equ ¤078c+FUP На стек адрес буфера 1 кб.
fence equ ¤0799+FUP
hereadr equ ¤07a8+FUP Вместо DP
holdd equ ¤07b5+FUP
state equ ¤07c2+FUP
csp equ ¤07cd+FUP
tib equ ¤07d8+FUP
base equ ¤07e4+FUP
warning equ ¤07f3+FUP
screenparms equ ¤080d+FUP На стек адрес в 0 странице нача- ла экранных параметров
endpos equ ¤081b+FUP Адрес начала последней строки рабочего окна
begpos equ ¤0829+FUP Адрес начала первой строки рабо- чего окна
currpos equ ¤0838+FUP Текущая позиция для вывода сим- вола
winx equ ¤0844+FUP
winy equ ¤0850+FUP
winwidth equ ¤0860+FUP
windepth equ ¤0870+FUP
posx equ ¤087c+FUP
posy equ ¤0888+FUP
mode equ ¤0894+FUP
atribute equ ¤08a4+FUP
page equ ¤08b0+FUP
screenon equ ¤08c0+FUP
xcoor equ ¤08cd+FUP
ycoor equ ¤08da+FUP
plus equ ¤08e3+FUP +
sub equ ¤08f0+FUP -
minus equ ¤0901+FUP
onep equ ¤091a+FUP 1+
onepstor equ ¤0929+FUP 1+!
twop equ ¤094c+FUP 2+
twopstor equ ¤095e+FUP 2+!
onem equ ¤097b+FUP 1-
onemstor equ ¤098a+FUP 1-!
twom equ ¤09b6+FUP 2-
twomstor equ ¤09c8+FUP 2-!
mul2 equ ¤09ec+FUP 2*
div2 equ ¤09fb+FUP 2/
swab equ ¤0a0c+FUP
abs equ ¤0a1c+FUP
ustar equ ¤0a2b+FUP u*
mstar equ ¤0a47+FUP m*
dminus equ ¤0a81+FUP
dabs equ ¤0a99+FUP
udiv equ ¤0aa8+FUP u/
mdiv equ ¤0ae2+FUP m/
dplus equ ¤0b2b+FUP d+
and equ ¤0b54+FUP
or equ ¤0b6b+FUP
xor equ ¤0b81+FUP
min equ ¤0b97+FUP
max equ ¤0baf+FUP
spat equ ¤0bc3+FUP sp`
spsto equ ¤0bcf+FUP sp!( dropall )
cmove equ ¤0bf0+FUP
fill equ ¤0c24+FUP
erase equ ¤0c56+FUP
blanks equ ¤0c66+FUP Вместо BLANK
hold equ ¤0c73+FUP
pstor equ ¤0c94+FUP +!
togl equ ¤0cb7+FUP
at equ ¤0cc8+FUP @
cat equ ¤0cdd+FUP c@
store equ ¤0ce9+FUP !
cstor equ ¤0cfc+FUP c!
nfa equ ¤0d0d+FUP
lfa equ ¤0d27+FUP
cfa equ ¤0d37+FUP
scsp equ ¤0d42+FUP
here equ ¤0d53+FUP
allot equ ¤0d64+FUP
trav equ ¤0d89+FUP Может быть( TRAVERSE )
lbrac equ ¤0da6+FUP [
rbrac equ ¤0db5+FUP ]
hex equ ¤0dbf+FUP
dec equ ¤0dd4+FUP decimal
dtrail equ ¤0ded+FUP -trail
latest equ ¤0e16+FUP Используется в формате: WordLen Latest( выдает в стек адрес начала последнего слова длиной WordLen )
x equ ¤0e5d+FUP
gettoken equ ¤0e7c+FUP Вместо ?????
cursor equ ¤1038+FUP Переменная- стиль курсора
shift equ ¤1045+FUP Переменная для SHIFT
inwas equ ¤1052+FUP Признак, что ВЫВОД был
outwas equ ¤1060+FUP Признак, что ВВОД был
outchr equ ¤106e+FUP Символ для вывода в OUT
inbufbeg equ ¤107e+FUP Начало кольца буфера ВВОД
inbufend equ ¤108e+FUP Конец кольца буфера ВЫВОД
nmiwas equ ¤109e+FUP Признак NMI было
irqwas equ ¤10aa+FUP Признак IRQ было
intlock equ ¤10b9+FUP Программная блокировка прерыв.
timeroff equ ¤10cc+FUP Переменная, отражающая состоя- ние таймера
flagi equ ¤10d6+FUP Переменная- состояние флага I
inbufadr equ ¤10e6+FUP Вместо TIB
inbuflim equ ¤10f6+FUP Константа- адрес конца буфера ВВОД
nmivect equ ¤1105+FUP Константа адреса вектора на NMI
irqvect equ ¤1114+FUP --------------------------- IRQ
instate equ ¤1123+FUP Слово- выход из IN( последняя процедура цепочки )
getbuf equ ¤113a+FUP Взять из буфера ВВОД
in equ ¤116e+FUP ВВОД
out equ ¤1184+FUP ВЫВОД
inset equ ¤11a5+FUP Установить в цепочку ВВОД проце- дуру, адрес кот. на стеке
outset equ ¤11b6+FUP То же на ВЫВОД
nmiset equ ¤1236+FUP То же на NMI
irqset equ ¤1247+FUP То же на IRQ
ifinwas equ ¤129a+FUP inwas?
ifoutwas equ ¤12ee+FUP outwas?
kbdin equ ¤12ff+FUP Стандартная процедура ВВОД с клавиатуры
cursorstate equ ¤132e+FUP Курсор должен бытьна экране или нет
isctrl equ ¤14c2+FUP Символ в OUTCHR управлюющий?
outctrl equ ¤14da+FUP Вывести управляющий символ в OUTCHR по адресу таблицы упр. клавиш
jumpkeytab equ ¤1506+FUP Стандартная таблица упр. клав.
caps equ ¤156c+FUP Слово- CAPS
swapspar equ ¤1580+FUP Обменять экранные параметры
setscreen equ ¤15c8+FUP Установить режим экрана без по- каза экрана
scrdrivers equ ¤15fd+FUP Массив для хранения переходов по слову SETSCREEN
settext equ ¤1614+FUP
clrwinpar equ ¤16b8+FUP Записать 0 в POSX, POSY, WINX, WINY
showscreen equ ¤16e6+FUP Показать активный экран
on50 equ ¤16f9+FUP Включить таймер
off50 equ ¤170a+FUP Выключить таймер
conout equ ¤1721+FUP Вывод на консолю символа
inreset equ ¤174f+FUP Сбросить ВВОД
outreset equ ¤1762+FUP Сбросить ВЫВОД
nmireset equ ¤1775+FUP Сбросить NMI
irqreset equ ¤1793+FUP Сбросить IRQ
outst equ ¤17ae+FUP Вывести символ по стеку
type equ ¤17c8+FUP
get equ ¤17f7+FUP Ввести байт с ВВОД
gets equ ¤1807+FUP Ввести строку: MEMADR COUNTER
span equ ¤18a9+FUP
strdrivers equ ¤18bb+FUP Массив обработчиков редактора строки
temp1 equ ¤19e8+FUP
offsetbuf equ ¤19f9+FUP Вместо >IN
isbuf equ ¤1a06+FUP Вместо BLOCKS
textadr equ ¤1a15+FUP Вместо ????
cr equ ¤1a1f+FUP
comma equ ¤1a2b+FUP ,
ccom equ ¤1a50+FUP c,
space equ ¤1a73+FUP
pfa equ ¤1a7f+FUP
qerr equ ¤1a94+FUP ?err
qcomp equ ¤1aaa+FUP ?comp
qpair equ ¤1ac3+FUP ?pair
qcsp equ ¤1ad5+FUP ?csp
qexec equ ¤1af1+FUP ?exec
comp equ ¤1b06+FUP
smug equ ¤1b2d+FUP smudge
count equ ¤1b54+FUP
build equ ¤1b46+FUP
outs equ ¤1b78+FUP Вместо COUNT TYPE
pdotq equ ¤1b7e+FUP (.")
pad equ ¤1bee+FUP
word equ ¤1bff+FUP
dfind equ ¤1c59+FUP
error equ ¤1c8d+FUP
errproc equ ¤1ca0+FUP Адрес первой процедуры обработки ошибок
udot equ ¤1e9d+FUP u.
dot equ ¤1eb0+FUP .
spaces equ ¤1ecb+FUP
lastwlen equ ¤1f0a+FUP Переменная- число букв в послед- нем
current equ ¤1f19+FUP
pscode equ ¤1f82+FUP Компилирует в CFA последне- слова ссылку на адрес ко- манды за этим словом
compword equ ¤1fb5+FUP
literal equ ¤1fdc+FUP
dliteral equ ¤1ffb+FUP
forgt equ ¤2082+FUP
interpret equ ¤20d5+FUP
quit equ ¤214b+FUP
abort equ ¤219a+FUP
sdot equ ¤21ed+FUP s.
star equ ¤21fc+FUP *
conv4 equ ¤220a+FUP
slmod equ ¤221e+FUP /mod
slash equ ¤2228+FUP /
mod equ ¤2237+FUP mod
ssla equ ¤225b+FUP */
ssmod equ ¤2262+FUP */mod
number equ ¤2342+FUP
ifnotdig equ ¤2338+FUP Слово переводяшее счетную строку в число двойной длины на стек Формат: 0 0 StrAdr Выход: n1 n2 StrAdr'
create equ ¤2381+FUP
devproc equ ¤25a1+FUP Слово где находится вектор для обработчика текущего УСТРОЙСТВА
DevProc equ ¤25a4+FUP
inprocess equ ¤25b2+FUP
InProcess equ ¤25b5+FUP
systemwait equ ¤25c4+FUP
SystemWait equ ¤25c7+FUP
treaters equ ¤25d4+FUP Адрес начала массива для хране- ния векторов обработчиков
Treaters equ ¤25d7+FUP
clrtrt equ ¤2600+FUP
regtreat equ ¤2616+FUP
qlogdev equ ¤2695+FUP Переменная- число логических устройств
QLogDev equ ¤2698+FUP
currdevno equ ¤26a6+FUP Переменная- номер текущего лог. устройства
CurrDevNo equ ¤26a9+FUP
lastdevno equ ¤26b7+FUP Номер последнего лог. устр- ва
LastDevNo equ ¤26ba+FUP
devtreat equ ¤26c7+FUP Адрес процедуры- обработчика текущего устройства
DevTreat equ ¤26ca+FUP
lastreat equ ¤26d7+FUP Адрес прошлого обработчика
Lastreat equ ¤26da+FUP
workslt equ ¤26e6+FUP Адрес рабочей области текушего устройства
lastslt equ ¤26f5+FUP
LastSlt equ ¤26f8+FUP
outd equ ¤287e+FUP
makechoice equ ¤2895+FUP Процедура для произведения выбора ( SYS01.LIB )
drverr equ ¤28a4+FUP Слово для выдачи сообщения об ошибке устройства
findinbuf equ ¤28ba+FUP ??
sysmem equ ¤2919+FUP Адрес структуры-описателя памяти
execfile equ ¤298b+FUP Исполнить программу из памяти по адресу
makemyerr equ ¤29e1+FUP
[an error occurred while processing this directive]