BUF♯: различия между версиями

Материал из ПМК вики
Перейти к навигации Перейти к поиску
(Новая страница: «'''X''' — стандартное слово Каллисто. {{нет иллюстраций}} {{заготовка}} Категория:Слова Ка…»)
 
 
(не показано 35 промежуточных версий этого же участника)
Строка 1: Строка 1:
'''X''' — стандартное слово [[Каллисто]].
'''BUF#''' — родная переменная [[Каллисто]]. Номер загруженного [[блок]]а.
BUF#            ( −− a )                            Переменная. Номер блока, загруженного в буфер.
Переменная BUF# содержит номер загруженного [[блок]]а, а слово BUF# кладёт на стек число 15094 — её адрес.
 
Старший (первый) байт переменной BUF# содержит флаг [[UPDATE]], а в младшем хранится номер [[блок]]а, содержимое которого расположено в [[буфер]]е.
 
== Ввод слова BUF# ==
В [[Режим ЛАТ|режиме ЛАТ]] нажмите последовательно клавиши: [[Клавиша В/О|{{Чёрная клавиша|В/О}}]] [[Клавиша 3|{{Серая клавиша|3}}]] [[Клавиша П|{{Чёрная клавиша|П}}]]   [[Клавиша P|{{Синяя клавиша|P}}]] [[Клавиша F|{{Оранжевая клавиша|F}}]] [[Клавиша 3|{{Серая клавиша|3}}]]  
 
Эти нажатия оставляют клавиатуру в [[Режим NUM|режиме NUM]].
 
== История ==
Исторически в Форте переменная BUF# расположена в памяти сразу перед [[буфер]]ом, к которому относится. Поскольку адрес [[буфер]]а в МК-161 фиксирован, адрес BUF# тоже фиксирован и равен 15094. Измениться он может лишь с отказом от [[Единое адресное пространство|единой адресации]] в [[Каллисто 2.0]].
 
Если никакой [[блок]] в [[буфер]] не загружен, переменная BUF# равна нулю. Именно поэтому в Форте и [[Каллисто]] нет [[блок]]а номер ноль.
 
== Реализация ==
<pre>
  66 rrBUFBLK        .EQU    5094                  ; 15094 = 3af6 Номер блока в буфере и признак UPDATE
  67 rlBUFBLK        .EQU    5095
2450 ;#BUFnum
2451 ; BUF#            ( −− a )                            Переменная. Номер блока, загруженного в буфер.
2452 LX:            .DB    4
2453                .TEXT  "BUF#"                  ; ( −− +n )
2454                .DW    LUPDAT
2455 BUFN:          .DW SCONP
2456                .DB 3aH,0f6H                    ; 15094 rrBUFBLK
</pre>
 
=== Советская реализация ===
Слово BUF# произошло от довольно странного [[примитив]]а X из  FORTH ИТЭФ. На входе слово X требовало адрес, где хранится номер [[блок]]а, а в процессе работы сбрасывало флаг [[UPDATE]]. Вот его определение:
<PRE>
            HEAD    201Q,,330Q,X                        ; X
            POP  BX
            AND  [BX],  77777Q
            PUSH [BX]
            NEXT
</PRE>
 
== Ссылки ==
* {{Исходник|BUFnum|BUF#}}
* См. стандартную переменную [[BLK]]
 


{{нет иллюстраций}}
{{нет иллюстраций}}
{{заготовка}}
{{заготовка}}
[[Категория:Слова Каллисто]]
[[Категория:Слова Каллисто]]
[[Категория:Примитивы]]
[[Категория:Работа с внешней памятью Каллисто]]

Текущая версия от 17:30, 9 ноября 2017

BUF# — родная переменная Каллисто. Номер загруженного блока.

BUF#             ( −− a )                             Переменная. Номер блока, загруженного в буфер.

Переменная BUF# содержит номер загруженного блока, а слово BUF# кладёт на стек число 15094 — её адрес.

Старший (первый) байт переменной BUF# содержит флаг UPDATE, а в младшем хранится номер блока, содержимое которого расположено в буфере.

Ввод слова BUF#[править]

В режиме ЛАТ нажмите последовательно клавиши:  В/О   3   П     P   F   3   

Эти нажатия оставляют клавиатуру в режиме NUM.

История[править]

Исторически в Форте переменная BUF# расположена в памяти сразу перед буфером, к которому относится. Поскольку адрес буфера в МК-161 фиксирован, адрес BUF# тоже фиксирован и равен 15094. Измениться он может лишь с отказом от единой адресации в Каллисто 2.0.

Если никакой блок в буфер не загружен, переменная BUF# равна нулю. Именно поэтому в Форте и Каллисто нет блока номер ноль.

Реализация[править]

  66 rrBUFBLK        .EQU     5094                   ; 15094 = 3af6 Номер блока в буфере и признак UPDATE
  67 rlBUFBLK        .EQU     5095
…
2450 ;#BUFnum
2451 ; BUF#             ( −− a )                             Переменная. Номер блока, загруженного в буфер.
2452 LX:             .DB     4
2453                 .TEXT   "BUF#"                  ; ( −− +n )
2454                 .DW     LUPDAT
2455 BUFN:           .DW SCONP
2456                 .DB 3aH,0f6H                    ; 15094 rrBUFBLK

Советская реализация[править]

Слово BUF# произошло от довольно странного примитива X из FORTH ИТЭФ. На входе слово X требовало адрес, где хранится номер блока, а в процессе работы сбрасывало флаг UPDATE. Вот его определение:

            HEAD     201Q,,330Q,X                         ; X
            POP  BX
            AND  [BX],   77777Q
            PUSH [BX]
            NEXT

Ссылки[править]


  У этой статьи нет иллюстраций. Вы можете помочь проекту, добавив их.


  Это заготовка статьи. Вы можете помочь проекту, дополнив её.