‗RW: различия между версиями
AtH (обсуждение | вклад) |
AtH (обсуждение | вклад) |
||
(не показано 5 промежуточных версий этого же участника) | |||
Строка 1: | Строка 1: | ||
'''_RW''' — | '''_RW''' — системное слово [[Каллисто]]. Низкоуровневый ввод/вывод [[блок]]а. | ||
_RW ( c1 c2 −− ) Чтение/запись (c2=1/0) блока номер c1. | _RW ( c1 c2 −− ) Чтение/запись (c2=1/0) блока номер c1. | ||
c1 − номер [[экран]]а ([[блок]]а), к которому происходит обращение | c1 − номер [[экран]]а ([[блок]]а), к которому происходит обращение | ||
Строка 8: | Строка 8: | ||
== Ввод слова _RW == | == Ввод слова _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-Форта, но в [[Каллисто]] адрес буфера постоянен и, как параметр, не передаётся. К сожалению, имя 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 относительно стандартно, опираясь на R/W из fig-Форта, сложно придумать сценарий, в котором разработчику пришлось бы обращаться к нему напрямую. При необходимости заголовок _RW можно исключить, освободив 6 байт в [[Память программ|памяти программ]]. | ||
=== R/W в fig-FORTH Release 1 glossary, май 1979 (англ.) === | === R/W в fig-FORTH Release 1 glossary, май 1979 (англ.) === | ||
Строка 24: | Строка 24: | ||
== Реализация == | == Реализация == | ||
<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-Форта, симулирующий блоки в ОЗУ: | |||
<PRE> | |||
HEX | |||
4000 CONSTANT LO ( начало буферной области ) | |||
6800 CONSTANT HI ( эквивалент 10 экранов ) | |||
: _RW >R ( сохранить boolean ) | |||
B/BUF × LO + ↑ | |||
HI > 6 ?ERROR ( проверка диапазона ) | |||
R> IF ( чтение ) ↔ ENDIF | |||
B/BUF CMOVE ; | |||
</PRE> | |||
=== Советская реализация === | |||
В ФОРТ-ЕС общением с диском занимались [[примитив]]ы RBLK и WBLK | В ФОРТ-ЕС общением с диском занимались [[примитив]]ы RBLK и WBLK | ||
Строка 39: | Строка 77: | ||
</PRE> | </PRE> | ||
Определение слова R/W в FORTH ИТЭФ: | Определение слова R/W в FORTH ИТЭФ: | ||
<PRE> | <PRE> |
Текущая версия от 09:46, 3 февраля 2019
_RW — системное слово Каллисто. Низкоуровневый ввод/вывод блока.
_RW ( c1 c2 −− ) Чтение/запись (c2=1/0) блока номер c1.
c1 − номер экрана (блока), к которому происходит обращение
c2=0 запись блока: №блока 0 _RW
c2=1 чтение блока: №блока 1 _RW
Ввод слова _RW[править]
В режиме ЛАТ последовательно нажмите клавиши ШГ→ × В↑
История[править]
Слово _RW имеет своим прототипом слово R/W из Форт ИТЭФ и fig-Форта, но в Каллисто адрес буфера постоянен и, как параметр, не передаётся. К сожалению, имя R/W конфликтует со словом R/W из стандартов ANS FORTH и Форт-2012.
Подчёркивание часто ставится в начале имён служебных или системно-зависимых библиотечных функций. Хотя слово _RW относительно стандартно, опираясь на R/W из fig-Форта, сложно придумать сценарий, в котором разработчику пришлось бы обращаться к нему напрямую. При необходимости заголовок _RW можно исключить, освободив 6 байт в памяти программ.
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.
Реализация[править]
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 ; Запретить все дисковые операции
Пример реализации 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 ;
Советская реализация[править]
В ФОРТ-ЕС общением с диском занимались примитивы 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 в 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$'
Ссылки[править]
У этой статьи нет иллюстраций. Вы можете помочь проекту, добавив их. |
Это заготовка статьи. Вы можете помочь проекту, дополнив её. |