Текущая версия |
Ваш текст |
Строка 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: |
| {{заготовка}} | | {{заготовка}} |
| [[Категория:Слова Каллисто]] | | [[Категория:Слова Каллисто]] |
| [[Категория:Слова высокого уровня]]
| |
| [[Категория:Низкоуровневый ввод-вывод Каллисто]] | | [[Категория:Низкоуровневый ввод-вывод Каллисто]] |
| | [[Категория:Слова Каллисто к переименованию]] |
| | [[Категория:Слова Каллисто без стековых диаграмм]] |