[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]