‗RW: различия между версиями

Материал из ПМК вики
Перейти к навигации Перейти к поиску
Нет описания правки
Строка 11: Строка 11:
         R/W determines the location on mass storage, performs the read-write
         R/W determines the location on mass storage, performs the read-write
         and performs any error checking.
         and performs any error checking.
== История ==
Слово _RW взято из Форт ИТЭФ и 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].
Подчёркивание часто ставится в начале имён служебных или системно-зависимых библиотечных функций.


== Реализация ==
== Реализация ==
Строка 29: Строка 34:


Пример реализации R/W из fig-Форта, симулирующий блоки в ОЗУ:
Пример реализации R/W из fig-Форта, симулирующий блоки в ОЗУ:
<PRE>
  HEX
  HEX
  4000 CONSTANT LO ( начало буферной области )
  4000 CONSTANT LO ( начало буферной области )
Строка 37: Строка 43:
     R> IF ( чтение ) ↔ ENDIF
     R> IF ( чтение ) ↔ ENDIF
     B/BUF CMOVE ;
     B/BUF CMOVE ;
</PRE>
Определение слова R/W в FORTH ИТЭФ:
<PRE>
            HEAD    203Q,'R/',327Q,RW                    ; R/W


== История ==
  ; Открытие файла
Слово _RW взято из Форт ИТЭФ и 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].


Подчёркивание часто ставится в начале имён служебных или системно-зависимых библиотечных функций.
            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>





Версия от 07:48, 28 марта 2016

_RW — стандартное слово Каллисто.

Ввод слова _RW

В режиме ЛАТ последовательно нажмите клавиши  ШГ→   ×   В↑ 

R/W в fig-FORTH Release 1 glossary, май 1979 (англ.)

R/W           addr blk f --
       The fig-FORTH standard disc read-write linkage. addr specifies the
       source or destination block buffer, blk is the sequential number of
       the referenced block; and f is a flag for f=O write and f=l read.
       R/W determines the location on mass storage, performs the read-write
       and performs any error checking.

История

Слово _RW взято из Форт ИТЭФ и fig-Форта. К сожалению, имя R/W конфликтует со словом R/W из стандартов ANS FORTH и Форт-2012.

Подчёркивание часто ставится в начале имён служебных или системно-зависимых библиотечных функций.

Реализация

В ФОРТ-ЕС общением с диском занимались примитивы RBLK и WBLK

Вот их описания и «болванки» определений:

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

Пример реализации R/W из fig-Форта, симулирующий блоки в ОЗУ:

 HEX
 4000 CONSTANT LO ( начало буферной области )
 6800 CONSTANT HI ( эквивалент 10 экранов )
 : _RW >R ( сохранить boolean )
     B/BUF × LO + ↑
     HI > 6 ?ERROR ( проверка диапазона )
     R> IF ( чтение ) ↔ ENDIF
     B/BUF CMOVE ;

Определение слова R/W в FORTH ИТЭФ:

             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$'


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


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