Текущая версия |
Ваш текст |
Строка 1: |
Строка 1: |
| '''COPY''' (копировать, читается «копи») — встроенное слово [[Каллисто]]. Копирует [[экран]] в новый [[блок]]. | | '''COPY''' — стандартное слово [[Каллисто]]. |
| COPY ( c1 c2 −− ) Копировать блок c1 в блок c2.
| |
| [[Файл:CallistoIndexCopy.png|thumb|right|264px|Пример работы слова COPY]]
| |
| n m COPY копирует [[экран]] n на [[экран]] m
| |
| | |
| == Ввод слова COPY ==
| |
| В [[Режим ЛАТ|режиме ЛАТ]] последовательно нажмите четыре клавиши [[Клавиша С/П|{{Чёрная клавиша|С/П}}]] [[Клавиша 5|{{Серая клавиша|5}}]] [[Клавиша 6|{{Серая клавиша|6}}]] [[Клавиша ,|{{Серая клавиша|1=<span style="position:relative;bottom:3px"> , </span>}}]]
| |
| | |
| == Реализация ==
| |
| В некоторых Фортах это команда редактора, но её удобно иметь в ядре.
| |
| <pre>
| |
| 3898 ;#COPY
| |
| 3899 ; COPY ( c1 c2 −− ) Копировать блок c1 в блок c2.
| |
| 3900 ; n m COPY копирует экран n на экран m
| |
| 3901 ; Часто это команда редактора, но её удобно иметь в ядре.
| |
| 3902 LCOPY: .DB 4
| |
| 3903 .TEXT "COPY" ; ( откуда куда −− )
| |
| 3904 .DW LWORDS
| |
| 3905 COPY: .DW CALL, SWAP, BLOCK,TWOM,STORE, UPDAT, BRAN,RFLUSH
| |
| </pre>
| |
| | |
| === Советская реализация ===
| |
| Юрий Семёнов приводит следующее определение слова COPY (стр. 33), как пример использования слова [[FLUSH]]:
| |
| <PRE>
| |
| : COPY ↔ ( в стеке m n )
| |
| BLOCK ( m и адрес первого байта буфера,
| |
| куда считан экран с номером n)
| |
| 2- ( m и адрес ячейки, где лежит номер
| |
| экрана, хранящегося в буфере)
| |
| ! ( очистка стека, номер экрана n заменён на m)
| |
| UPDATE ( установка флага "спасения")
| |
| FLUSH ; ( запись на диск)
| |
| </PRE>
| |
| Определение слова COPY в FORTH ИТЭФ тоже использует [[FLUSH]]:
| |
| <PRE>
| |
| HEAD 204Q,'COP',331Q,COPY,$COL ; COPY
| |
| DW SWAP,BLOCK,CFA,STORE,UPDAT,FLUSH,SEMI
| |
| </PRE>
| |
| | |
| === colorForth (cf2019.nasm 2019 Sep 14) ===
| |
| <PRE>
| |
| copy_: ; ( blk -- ) \ copy the given block (and shadow) to the currently displayed block (and shadow)
| |
| cmp _TOS_, byte 0x0C ; below block 12 is machine code
| |
| jc abort
| |
| push edi
| |
| push esi
| |
| push ecx
| |
| call blockToCellAddress ; source block
| |
| shl _TOS_, 0x02 ; convert cell address to byte address
| |
| mov esi, _TOS_
| |
| mov _TOS_, [ v_blk ]
| |
| call blockToCellAddress ; destination block
| |
| shl _TOS_, 0x02 ; convert cell address to byte address
| |
| mov edi, _TOS_
| |
| mov ecx, 0x0200
| |
| rep movsd ; copy ecx 32 bit words from ds:esi to es:edi
| |
| pop ecx
| |
| pop esi
| |
| pop edi
| |
| _DROP_
| |
| ret
| |
| </PRE>
| |
| | |
| == Ссылки ==
| |
| * {{Исходник|COPY|COPY}}
| |
| * [http://gudleifr.h1.ru/cgi-bin/pilo.cgi?FL=../g9.txt&IS=\6.PERWOISTOTNIKI\LEO%20BRODIE%20STARTING%20FORTH\03.%20KAK%20RABOTATJ%20NA%20FORTE КАК РАБОТАТЬ НА ФОРТЕ] в книге [http://gudleifr.h1.ru/cgi-bin/pilo.cgi?FL=../g9.txt&IS=\6.PERWOISTOTNIKI\LEO%20BRODIE%20STARTING%20FORTH Л.Броуди «Начальный курс программирования на языке Форт»]
| |
| | |
|
| |
|
| | {{нет иллюстраций}} |
| {{заготовка}} | | {{заготовка}} |
| [[Категория:Слова Каллисто]] | | [[Категория:Слова Каллисто]] |
| [[Категория:Слова высокого уровня]]
| |
| [[Категория:Работа с внешней памятью Каллисто]] | | [[Категория:Работа с внешней памятью Каллисто]] |
| [[Категория:Средства отладки Каллисто]] | | [[Категория:Средства отладки Каллисто]] |