Текущая версия |
Ваш текст |
Строка 1: |
Строка 1: |
| '''BUFFER''' (буфер) — стандартное слово [[Каллисто]]. Приписать [[буфер]] к [[блок]]у на электронном диске. | | '''BUFFER''' — стандартное слово [[Каллисто]]. |
| BUFFER ( c −− a ) Приписать буферу блок c и дать адрес буфера.
| |
| Сам блок с диска не считывать.
| |
| Резервирует [[блок]] в памяти и приписывает ему номер u (как и [[BLOCK]] ), но сам [[блок]] с диска не считывается. Возвращаемый [[Единое адресное пространство|адрес]] a фиксирован и в [[Каллисто|Каллисто 1.0]] всегда равен 15096.
| |
|
| |
|
| == Ввод слова BUFFER ==
| | Резервирует [[блок]] в памяти и приписывает ему номер u (как и [[BLOCK]] ), но сам [[блок]] с диска не считывается. |
| В [[Режим ЛАТ|режиме ЛАТ]] последовательно нажмите клавиши [[Клавиша В/О|{{Чёрная клавиша|В/О}}]] [[Клавиша 3|{{Серая клавиша|3}}]] [[Клавиша П|{{Чёрная клавиша|П}}]] [[Клавиша П|{{Чёрная клавиша|П}}]] [[Клавиша ИП|{{Чёрная клавиша|ИП}}]] [[Клавиша ×|{{Серая клавиша|×}}]]
| |
|
| |
|
| == BUFFER в стандарте ANS Forth ==
| |
| <pre>
| |
| 7.6.1.0820 BUFFER BLOCK
| |
| ( u -- a-addr )
| |
| a-addr - адрес первого символа блочного буфера назначенного блоку
| |
| u. Содержание блока не определено. Неопределенная ситуация
| |
| существует, если u - не доступный номер блока.
| |
|
| |
| Если блок u - уже в блочном буфере, a-addr - адрес этого блочного
| |
| буфера.
| |
|
| |
| Если блок u - уже не в памяти и есть свободный буфер, a-addr -
| |
| адрес этого блочного буфера.
| |
|
| |
| Если блок u - уже не в памяти и нет никаких свободных блочных
| |
| буферов, освобождает блочный буфер. Если для блока в этом буфере
| |
| было выполнено UPDATE, перемещает блок в запоминающее устройство.
| |
| a-addr - адрес этого блочного буфера.
| |
|
| |
| При завершении операции, блочный буфер указанный a-addr - текущий
| |
| буфер блоков и назначен на u.
| |
|
| |
| См.: 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 u -- addr M,83
| |
| Assigns a block buffer to block u. addr is the address of
| |
| the first byte of the block within its buffer. This
| |
| function is fully specified by the definition for BLOCK
| |
| except that if the block is not already in memory it might
| |
| not be transferred from mass storage. The contents of the
| |
| block buffer assigned to block u by BUFFER are unspecified.
| |
|
| |
| === BUFFER в стандарте Forth-79 (англ.) ===
| |
| BUFFER n -- addr 130
| |
| Obtain the next block buffer, assigning it to block n. The
| |
| block is not read from mass storage. If the previous
| |
| contents of the buffer has been marked as UPDATEd, it is
| |
| written to mass storage. If correct writing to mass storage
| |
| is not possible, an error condition exists. The address left
| |
| is the first byte within the buffer for data storage. n is an
| |
| 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: |
Строка 12: |
| {{заготовка}} | | {{заготовка}} |
| [[Категория:Слова Каллисто]] | | [[Категория:Слова Каллисто]] |
| [[Категория:Слова высокого уровня]]
| |
| [[Категория:Работа с внешней памятью Каллисто]] | | [[Категория:Работа с внешней памятью Каллисто]] |
| [[Категория:Стандартные слова]]
| |
| [[Категория:1994 BLOCK]]
| |
| [[Категория:2012 BLOCK]]
| |