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

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

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

Текущая версия Ваш текст
Строка 1: Строка 1:
'''_RW''' — системное слово [[Каллисто]]. Низкоуровневый ввод/вывод [[блок]]а.
'''R/W''' — стандартное слово [[Каллисто]]. Конфликтует со [http://forth.sourceforge.net/standard/dpans/dpans11.htm#11.6.1.2056 словом R/W] из стандартов ANS FORTH и [http://www.forth200x.org/documents/html3/file/RDivW.html Форт-2012].
_RW            ( c1 c2 −− )                        Чтение/запись (c2=1/0) блока номер c1.
c1 − номер [[экран]]а ([[блок]]а), к которому происходит обращение


c2=0 запись блока: №блока 0 _RW
== Ввод слова R/W ==
В [[Режим ЛАТ|режиме ЛАТ]] последовательно нажмите клавиши [[Клавиша ×|{{Серая клавиша|×}}]]   [[Клавиша P|{{Синяя клавиша|P}}]] [[Клавиша F|{{Оранжевая клавиша|F}}]] [[Клавиша ÷|{{Серая клавиша|÷}}]]   [[Клавиша Р-ГРД-Г|{{Чёрная клавиша|Р-ГРД-Г}}]] [[Клавиша В↑|{{Серая клавиша|В↑}}]]


c2=1 чтение блока: №блока 1 _RW
== R/W в fig-FORTH Release 1 glossary, май 1979 (англ.) ==
 
== Ввод слова _RW ==
В [[Режим ЛАТ|режиме ЛАТ]] последовательно нажмите клавиши {{ШГ→}} [[Клавиша ×|{{Серая клавиша|×}}]] [[Клавиша В↑|{{Серая клавиша|В↑}}]]
 
== История ==
Слово _RW имеет своим прототипом слово R/W из Форт ИТЭФ и fig-Форта, но в [[Каллисто]] адрес буфера постоянен и, как параметр, не передаётся. К сожалению, имя R/W конфликтует со [http://forth.sourceforge.net/standard/dpans/dpans11.htm#11.6.1.2056 словом R/W] из стандартов ANS FORTH и [http://www.forth200x.org/documents/html3/file/RDivW.html Форт-2012].
 
Подчёркивание часто ставится в начале имён служебных или системно-зависимых библиотечных функций. Хотя слово _RW относительно стандартно, опираясь на R/W из fig-Форта, сложно придумать сценарий, в котором разработчику пришлось бы обращаться к нему напрямую. При необходимости заголовок _RW можно исключить, освободив 6 байт в [[Память программ|памяти программ]].
 
=== R/W в fig-FORTH Release 1 glossary, май 1979 (англ.) ===
  R/W          addr blk f --
  R/W          addr blk f --
         The fig-FORTH standard disc read-write linkage. addr specifies the
         The fig-FORTH standard disc read-write linkage. addr specifies the
Строка 23: Строка 12:
         and performs any error checking.
         and performs any error checking.


== Реализация ==
<pre>
4099 ;#lowRW
4100 ; _RW              ( c1 c2 −− )                        Считать/записать (c2=1/0) блок номер c1.
4101 ; c1 − номер экрана (блока)
4102 ; c2 − флаг "чтение−запись" (c2=1 для чтения, c2=0 для записи)
4103 LRW:            .DB    3
4104                .TEXT  "_RW"                  ; ( bl# flg −− )
4105                .DW    LLORW
4106 RW:            .DW CALL
4107 RRW:            .DW DUP,ZEQU, ZBRAN,RW1, SAVETEXT
4108 RW1:            .DW SWAP
4109                .DW DUP,ONEM,ABS, LITB
4110                .DB 60
4111                .DW SLASH,LITB
4112                .DB 3
4113                .DW MIN,LITB
4114                .DB 49
4115                .DW PLUS,KAT                    ; Выбрать нужный каталог
4116                .DW BDIGS, DIG,DIG,DIG, LITB
4117                .DB 66
4118                .DW HOLD, EDIGS, DROP          ; Состряпать имя файла "Bxxx"
4119                .DW SWAP, LORW                  ; Считать/записать
4120                .DW DISKOFF, EXIT              ; Запретить все дисковые операции
</pre>


Пример реализации R/W из fig-Форта, симулирующий блоки в ОЗУ:
== Пример реализации R/W из fig-Форта, симулирующий блоки в ОЗУ ==
<PRE>
  HEX
  HEX
  4000 CONSTANT LO ( начало буферной области )
  4000 CONSTANT LO ( начало буферной области )
  6800 CONSTANT HI ( эквивалент 10 экранов )
  6800 CONSTANT HI ( эквивалент 10 экранов )
  : _RW >R ( сохранить boolean )
  : R/W >R ( сохранить boolean )
     B/BUF × LO +
     B/BUF × LO + DUP
     HI > 6 ?ERROR ( проверка диапазона )
     HI > 6 ?ERROR ( проверка диапазона )
     R> IF ( чтение ) ↔ ENDIF
     R> IF ( чтение ) ↔ ENDIF
     B/BUF CMOVE ;
     B/BUF CMOVE ;
</PRE>
=== Советская реализация ===
В ФОРТ-ЕС общением с диском занимались [[примитив]]ы RBLK и WBLK
Вот их описания и «болванки» определений:
<PRE>
RBLK    *  А,+N-> ПРОЧЕСТЬ ЭКРАН +N ПО АДРЕСУ A                6
WBLK    *  A,+N-> ЗАПИСАТЬ ЭКРАН +N ИЗ АДРЕСА A              6
                    Экран номер 6
( 09.09.86 KEY CR EMIT TYPE (EXPECT/ RBLK MBLK )
(  следующие определения дают только имена процедур)
CODE  RBLK  ( A,N-> ПРОЧИТАТЬ ЭКРАН N В БУФЕР  A) END-CODE
CODE  WBLK  ( A,N->  ЗАПИСАТЬ ЭКРАН N ИЗ БУФЕРА А ) END-CODE
</PRE>
Определение слова R/W в FORTH ИТЭФ:
<PRE>
            HEAD    203Q,'R/',327Q,RW                    ; R/W
  ; Открытие файла
            MOV  DX, OFFSET FCB
            MOV  AH, 0FH
            INT  21H
            CMP  AL, 0FFH
            JE    ERR0
            POP  BX  ; R/W - флаг
            POP  AX  ; Номер блока
            POP  DX  ; Адрес буфера
            DEC  AX
            MOV  CL, 3
            SAL  AX, CL  ; (BLOCK#-1)*8
            MOV  RANDREC,AX
            MOV  RANDREC+2,0
            CMP  BX, 0
            JNE  RED
  ; WRITE
            MOV  BX, DX
            MOV  CX, 8      ; Номер записи
  WR:      MOV  DX, BX
            MOV  AH,1AH    ; Запись адреса буфера
            INT  21H
            MOV  DX,OFFSET FCB
            MOV  AH, 22Н    ; Запись RECORD
            INT  21H
            CMP  AL, 0
            JNE  ERR1
            INC  RANDREC    ; Коррекция адреса буфера
            ADD  BX, 80H
            LOOP  WR
            JMP  OUT
  RED:      MOV  CX, 8
            MOV  BX, DX
  RD:      MOV  DX, BX
            MOV  AH, 1AH    ; Запись адреса буфера
            INT  21H
            MOV  DX, OFFSET  FCB
            MOV  AH, 21Н
            INT  21H
            CMP  AL, 0
            JNE  ERR3
            INC  RANDREC    ; Коррекция адреса
            ADD  BX, 80H
            LOO  RD
  OUT:      MOV  DX, OFFSET  FCB  ; Закрытие файла
            MOV  AH, 10H
            INT  21H
            CMP  AL, 0
            JNE  ERR2
  EXIT:    NEXT
  ERR0:    MOV  DX, OFFSET  ERMESO
            JMP  DONE
  ERR1:    MOV  DX, OFFSET  ERMES1
            JMP  DONE
  ERR2:    MOV  DX, OFFSET  ERMES2
            JMP  DONE
  ERR3:    MOV  DX, OFFSET  ERMES3
  DONE:    MOV  AH, 9Н
            INT  21H
            JMP  EXIT
            ...
  FCB      LABEL WORD
  DRIVE    DB    1
  FN        DB    'FORTH  '
  EXT      DB    'DAT'
  CURBLK    DW    0          ; Относительное начало файла
  RECSIZE  DW    80H
  FILESIZE  DW    5000,0
  DATE      DB    0,0
            DB    0,0,0,0,0, 0,0,0,0,0
  CURREC    DB    0
  RANDREC  DW    0,0
  ERMES0    DB    'ERR OPENING FILE$'
  ERMES1    DB    'ERR WRITING FILE$'
  ERMES2    DB    'ERR CLOSING FILE$'
  ERMES3    DB    'ERR READING FILE$'
</PRE>
== Ссылки ==
* {{Исходник|lowRW|_RW}}




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

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

Отменить Справка по редактированию (в новом окне)
Источник — https://pmk.the-hacker.ru/‗RW