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

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

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

Текущая версия Ваш текст
Строка 1: Строка 1:
'''BUFFER''' (буфер) — стандартное слово [[Каллисто]]. Приписать [[буфер]] к [[блок]]у на электронном диске.
'''BUFFER''' (буфер) — стандартное слово [[Каллисто]].
BUFFER        ( c −− a )                          Приписать буферу блок c и дать адрес буфера.
 
                                                    Сам блок с диска не считывать.
Резервирует [[блок]] в памяти и приписывает ему номер u (как и [[BLOCK]] ), но сам [[блок]] с диска не считывается.
Резервирует [[блок]] в памяти и приписывает ему номер u (как и [[BLOCK]] ), но сам [[блок]] с диска не считывается. Возвращаемый [[Единое адресное пространство|адрес]] a фиксирован и в [[Каллисто|Каллисто 1.0]] всегда равен 15096.


== Ввод слова BUFFER ==
== Ввод слова BUFFER ==
Строка 8: Строка 7:


== 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: Строка 28:


         См.: 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: Строка 39:
           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: Строка 50:
     unsigned number.
     unsigned number.


=== BUFFER в fig-FORTH Release 1 glossary, май 1979 (англ.) ===
 
== BUFFER в fig-FORTH Release 1 glossary, май 1979 (англ.) ==
  BUFFER          n --- addr
  BUFFER          n --- addr
         Obtain the next memory buffer, assigning it to block n. If the
         Obtain the next memory buffer, assigning it to block n. If the
Строка 63: Строка 58:
         The address left is the first cell within the buffer for data
         The address left is the first cell within the buffer for data
         storage.
         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}}
* См. слова [[BLOCK]], [[UPDATE]]
* Слово [http://forth.sourceforge.net/standard/dpans/dpans7.htm#7.6.1.0820 BUFFER] в стандарте ANS Forth ''(англ.)''
* Слово [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://www.forth200x.org/documents/html3/block/BUFFER.html 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: Строка 67:
{{заготовка}}
{{заготовка}}
[[Категория:Слова Каллисто]]
[[Категория:Слова Каллисто]]
[[Категория:Слова высокого уровня]]
[[Категория:Работа с внешней памятью Каллисто]]
[[Категория:Работа с внешней памятью Каллисто]]
[[Категория:Стандартные слова]]
[[Категория:Слова Каллисто без стековых диаграмм]]
[[Категория:1994 BLOCK]]
[[Категория:2012 BLOCK]]
Пожалуйста, учтите, что любой ваш вклад в проект «ПМК вики» может быть отредактирован или удалён другими участниками. Если вы не хотите, чтобы кто-либо изменял ваши тексты, не помещайте их сюда.
Вы также подтверждаете, что являетесь автором вносимых дополнений, или скопировали их из источника, допускающего свободное распространение и изменение своего содержимого (см. Pmkwiki:Авторские права). НЕ РАЗМЕЩАЙТЕ БЕЗ РАЗРЕШЕНИЯ ОХРАНЯЕМЫЕ АВТОРСКИМ ПРАВОМ МАТЕРИАЛЫ!

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

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