Kirill Lipatov (Leency) 09488af869 KolSPForth12 uploaded to SVN
git-svn-id: svn://kolibrios.org@4867 a494cfbc-eb01-0410-851d-a64ba20cac60
2014-04-21 19:22:58 +00:00

61 lines
1.9 KiB
Forth
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

( Компиляция чисел словарь.
ОС-независимые определения.
Copyright [C] 1992-1999 A.Cherezov ac@forth.org
Преобразование из 16-разрядного в 32-разрядный код - 1995-96гг
Ревизия - сентябрь 1999, март 2000
)
: RDROP ['] C-RDROP INLINE, ; IMMEDIATE
: 2RDROP ['] C-2RDROP INLINE, ; IMMEDIATE
: 3RDROP ['] C-3RDROP INLINE, ; IMMEDIATE
5 CONSTANT CFL \ длина кода, компилируемого CREATE в сегмент CS.
\ USER DOES>A \ временная переменная - адрес для DOES>
: SET-CURRENT ( wid -- ) \ 94 SEARCH
\ Установить список компиляции на список, идентифицируемый wid.
CURRENT !
;
: GET-CURRENT ( -- wid ) \ 94 SEARCH
\ Возвращает wid - идентификатор списка компиляции.
CURRENT @
;
: IS-TEMP-WL ( -- flag )
\ проверяет, является ли текущий словарь компиляции временным (внешним)
GET-CURRENT CELL- @ -1 =
;
0 [IF]
: DP ( -- addr ) \ переменная, содержащая HERE сегмента данных
IS-TEMP-WL
IF GET-CURRENT 6 CELLS + ELSE (DP) THEN
;
[THEN]
: ALLOT ( n -- ) \ 94
\ Если n больше нуля, зарезервировать n байт пространства данных. Если n меньше
\ нуля - освободить |n| байт пространства данных. Если n ноль, оставить
\ указатель пространства данных неизменным.
\ Если перед выполнением ALLOT указатель пространства данных выровнен и n
\ кратно размеру ячейки, он остается выровненным и после ALLOT.
\ Если перед выполнением ALLOT указатель пространства данных выровнен на
\ границу символа и n кратно размеру символа, он остается выровненным на
\ границу символа и после ALLOT.
DP +!
;
: , ( x -- ) \ 94
\ Зарезервировать одну ячейку в области данных и поместить x в эту ячейку.
DP @ 4 ALLOT !
;
: C, ( char -- ) \ 94
\ Зарезервировать место для символа в области данных и поместить туда char.
DP @ 1 ALLOT C!
;
: W, ( word -- )
\ Зарезервировать место для word в области данных и поместить туда char.
DP @ 2 ALLOT W!
;