Текущая версия |
Ваш текст |
Строка 1: |
Строка 1: |
| '''BUFFER''' (буфер) — стандартное слово [[Каллисто]]. Приписать [[буфер]] к [[блок]]у на электронном диске. | | '''BUFFER''' — стандартное слово [[Каллисто]]. |
| BUFFER ( c −− a ) Приписать буферу блок c и дать адрес буфера.
| | |
| Сам блок с диска не считывать.
| | Резервирует [[блок]] в памяти и приписывает ему номер u (как и [[BLOCK]] ), но сам [[блок]] с диска не считывается. |
| Резервирует [[блок]] в памяти и приписывает ему номер u (как и [[BLOCK]] ), но сам [[блок]] с диска не считывается. Возвращаемый [[Единое адресное пространство|адрес]] a фиксирован и в [[Каллисто|Каллисто 1.0]] всегда равен 15096. | |
|
| |
|
| == Ввод слова BUFFER ==
| |
| В [[Режим ЛАТ|режиме ЛАТ]] последовательно нажмите клавиши [[Клавиша В/О|{{Чёрная клавиша|В/О}}]] [[Клавиша 3|{{Серая клавиша|3}}]] [[Клавиша П|{{Чёрная клавиша|П}}]] [[Клавиша П|{{Чёрная клавиша|П}}]] [[Клавиша ИП|{{Чёрная клавиша|ИП}}]] [[Клавиша ×|{{Серая клавиша|×}}]]
| |
|
| |
|
| == BUFFER в стандарте ANS Forth == | | == BUFFER в стандарте ANS Forth == |
| <pre>
| |
| 7.6.1.0820 BUFFER BLOCK | | 7.6.1.0820 BUFFER BLOCK |
| ( u -- a-addr ) | | ( u -- a-addr ) |
Строка 30: |
Строка 26: |
|
| |
|
| См.: 7.6.1.0800 BLOCK. | | См.: 7.6.1.0800 BLOCK. |
| </pre>
| |
|
| |
| == История ==
| |
| Слово BUFFER появилось в 1970 году, когда Чак Мур перенёс Форт на ассемблер Univac 1108 для программирования системы ввода заказов по сети выделенных линий в Mohasco Industries, Inc ([https://en.wikipedia.org/wiki/Amsterdam_%28city%29,_New_York Amsterdam NY], ''англ.'').
| |
|
| |
|
| BUFFER избегало чтения диска, когда было известно, что желаемый блок пуст.
| |
|
| |
|
| === BUFFER в предыдущем стандарте Forth-83 (англ.) ===
| | == BUFFER в предыдущем стандарте Forth-83 (англ.) == |
| BUFFER u -- addr M,83 | | BUFFER u -- addr M,83 |
| Assigns a block buffer to block u. addr is the address of | | Assigns a block buffer to block u. addr is the address of |
Строка 46: |
Строка 37: |
| block buffer assigned to block u by BUFFER are unspecified. | | block buffer assigned to block u by BUFFER are unspecified. |
|
| |
|
| === BUFFER в стандарте Forth-79 (англ.) ===
| | |
| | == BUFFER в стандарте Forth-79 (англ.) == |
| BUFFER n -- addr 130 | | BUFFER n -- addr 130 |
| Obtain the next block buffer, assigning it to block n. The | | Obtain the next block buffer, assigning it to block n. The |
Строка 56: |
Строка 48: |
| unsigned number. | | unsigned number. |
|
| |
|
| === BUFFER в fig-FORTH Release 1 glossary, май 1979 (англ.) ===
| |
| BUFFER n --- addr
| |
| Obtain the next memory buffer, assigning it to block n. If the
| |
| contents of the buffer is marked as updated, it is written to the
| |
| disc The block is not read from the disc.
| |
| The address left is the first cell within the buffer for data
| |
| storage.
| |
|
| |
| == Реализация ==
| |
| <pre>
| |
| 3483 ;#BUFFER
| |
| 3484 ; BUFFER ( c −− a ) Приписать буферу блок c и дать адрес буфера. Сам блок с диска не считывать.
| |
| 3485 ; Зарезервировать блок в памяти и приписать ему номер u (как и BLOCK ), но сам блок с диска не считывать.
| |
| 3486 LBUFFE: .DB 6
| |
| 3487 .TEXT "BUFFER" ; ( №блока −− 15096 )
| |
| 3488 .DW LFLUSH
| |
| 3489 BUFFE: .DW CALL, BUFN
| |
| 3490 .DW DUP,AT,ZLESS, ZBRAN,BR2 ; Буфер был изменён?
| |
| 3491 .DW BUFN,ONEP,CAT ; Достать номер изменённого блока
| |
| 3492 .DW ZERO,RW ; Записать буфер на диск
| |
| 3493 BR2: .DW STORE ; Сохранить новый номер блока, сбросив флаг UPDATE
| |
| 3494 BR3: .DW LITP
| |
| 3495 .DB 3aH,0f8H ; rrDISKBUF 15096 = 3af8
| |
| 3496 REXIT: .DW EXIT
| |
| </pre>
| |
|
| |
| === Советская реализация ===
| |
| Описание и определение слова BUFFER в ядре ФОРТ-ЕС:
| |
| <PRE>
| |
| BUFFER +N->A ПРИПИСАТЬ БЛОКУ +N БУФЕР 23
| |
|
| |
| Экран номер 25
| |
| ( 31.03.86 +BUF BUFFER BLOCK EMPTY-BUFFERS UPDATE )
| |
|
| |
| : BUFFER ( +N->A) OFFSET @ + USE @ DUP >R ( ИЩЕМ СВОБОДНЫЙ БУФЕР)
| |
| BEGIN +BUF UNTIL USE !
| |
| R@ @ 0< IF ( УСТАНОВЛЕН ПРИЗНАК "UPDATE")
| |
| R@ 2+ R@ @ 32767 AND WBLK THEN R@ ! R@ PREV ! R> 2+ ;
| |
| </PRE>
| |
| Определение слова BUFFER в FORTH ИТЭФ:
| |
| <PRE>
| |
| HEAD 206Q,'BUFFE',322Q,BUFFE,$COL ; BUFFER
| |
| DW USE,AT,TOR,I
| |
| BR1: DW PBUF,ZBRAN,BR1-$,USE,STORE
| |
| DW I,AT,ZLESS,ZBRAN,BR2-$
| |
| DW I,TWOP,I,X,ZERO,RW
| |
| BR2: DW I,STORE,I,PREV,STORE,FROMR,TWOP,SEMI
| |
| </PRE>
| |
|
| |
|
| == Ссылки == | | == Ссылки == |
| * {{Исходник|BUFFER|BUFFER}} | | * [http://forth.sourceforge.net/standard/dpans/dpans7.htm#7.6.1.0820 Слово BUFFER в стандарте ANS Forth] ''(англ.)'' |
| * См. слова [[BLOCK]], [[UPDATE]]
| | * [http://www.forth200x.org/documents/html/block.html#block:BUFFER Слово BUFFER в черновике Forth 200x] ''(англ.)'' |
| * Слово [http://forth.sourceforge.net/standard/dpans/dpans7.htm#7.6.1.0820 BUFFER] в стандарте ANS Forth ''(англ.)''
| |
| * Слово [http://forth-standard.org/standard/block/BUFFER BUFFER] в черновике Forth 200x ''(англ.)'' | |
| * [http://gudleifr.h1.ru/cgi-bin/pilo.cgi?FL=../g9.txt&IS=\6.PERWOISTOTNIKI\LEO%20BRODIE%20STARTING%20FORTH\10.WWOD-WYWOD ВВОД-ВЫВОД] в книге [http://gudleifr.h1.ru/cgi-bin/pilo.cgi?FL=../g9.txt&IS=\6.PERWOISTOTNIKI\LEO%20BRODIE%20STARTING%20FORTH Л.Броуди «Начальный курс программирования на языке Форт»]
| |
|
| |
|
|
| |
|
Строка 116: |
Строка 57: |
| {{заготовка}} | | {{заготовка}} |
| [[Категория:Слова Каллисто]] | | [[Категория:Слова Каллисто]] |
| [[Категория:Слова высокого уровня]]
| |
| [[Категория:Работа с внешней памятью Каллисто]] | | [[Категория:Работа с внешней памятью Каллисто]] |
| [[Категория:Стандартные слова]]
| |
| [[Категория:1994 BLOCK]]
| |
| [[Категория:2012 BLOCK]]
| |