Редактирование: BUFFER

Перейти к навигации Перейти к поиску
Внимание: Вы не вошли в систему. Ваш IP-адрес будет общедоступен, если вы запишете какие-либо изменения. Если вы войдёте или создадите учётную запись, её имя будет использоваться вместо IP-адреса, наряду с другими преимуществами.

Правка может быть отменена. Пожалуйста, просмотрите сравнение версий ниже, чтобы убедиться, что это нужная вам правка, и запишите страницу ниже, чтобы отменить правку.

Текущая версия Ваш текст
Строка 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]]
Пожалуйста, учтите, что любой ваш вклад в проект «ПМК вики» может быть отредактирован или удалён другими участниками. Если вы не хотите, чтобы кто-либо изменял ваши тексты, не помещайте их сюда.
Вы также подтверждаете, что являетесь автором вносимых дополнений, или скопировали их из источника, допускающего свободное распространение и изменение своего содержимого (см. Pmkwiki:Авторские права). НЕ РАЗМЕЩАЙТЕ БЕЗ РАЗРЕШЕНИЯ ОХРАНЯЕМЫЕ АВТОРСКИМ ПРАВОМ МАТЕРИАЛЫ!

В целях защиты вики от автоматического спама в правках просим вас решить следующую каптчу:

Отменить Справка по редактированию (в новом окне)