‗RW: различия между версиями
Перейти к навигации
Перейти к поиску
AtH (обсуждение | вклад) |
AtH (обсуждение | вклад) Нет описания правки |
||
Строка 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 | |||
; Открытие файла | |||
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$'
У этой статьи нет иллюстраций. Вы можете помочь проекту, добавив их. |
Это заготовка статьи. Вы можете помочь проекту, дополнив её. |