COPY: различия между версиями
Перейти к навигации
Перейти к поиску
AtH (обсуждение | вклад) Нет описания правки |
AtH (обсуждение | вклад) |
||
(не показаны 3 промежуточные версии этого же участника) | |||
Строка 2: | Строка 2: | ||
COPY ( c1 c2 −− ) Копировать блок c1 в блок c2. | COPY ( c1 c2 −− ) Копировать блок c1 в блок c2. | ||
[[Файл:CallistoIndexCopy.png|thumb|right|264px|Пример работы слова COPY]] | [[Файл:CallistoIndexCopy.png|thumb|right|264px|Пример работы слова COPY]] | ||
n m COPY копирует экран n на экран m | n m COPY копирует [[экран]] n на [[экран]] m | ||
== Ввод слова COPY == | == Ввод слова COPY == | ||
В [[Режим ЛАТ|режиме ЛАТ]] последовательно нажмите четыре клавиши [[Клавиша С/П|{{Чёрная клавиша|С/П}}]] [[Клавиша 5|{{Серая клавиша|5}}]] [[Клавиша 6|{{Серая клавиша|6}}]] [[Клавиша ,|{{Серая клавиша|1=<span style="position:relative;bottom:3px"> , </span>}}]] | В [[Режим ЛАТ|режиме ЛАТ]] последовательно нажмите четыре клавиши [[Клавиша С/П|{{Чёрная клавиша|С/П}}]] [[Клавиша 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]]: | Юрий Семёнов приводит следующее определение слова COPY (стр. 33), как пример использования слова [[FLUSH]]: | ||
<PRE> | <PRE> | ||
Строка 26: | Строка 36: | ||
HEAD 204Q,'COP',331Q,COPY,$COL ; COPY | HEAD 204Q,'COP',331Q,COPY,$COL ; COPY | ||
DW SWAP,BLOCK,CFA,STORE,UPDAT,FLUSH,SEMI | 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> | </PRE> | ||
Текущая версия от 18:37, 30 июня 2021
COPY (копировать, читается «копи») — встроенное слово Каллисто. Копирует экран в новый блок.
COPY ( c1 c2 −− ) Копировать блок c1 в блок c2.
![](/images/CallistoIndexCopy.png)
n m COPY копирует экран n на экран m
Ввод слова COPY[править]
В режиме ЛАТ последовательно нажмите четыре клавиши С/П 5 6 ,
Реализация[править]
В некоторых Фортах это команда редактора, но её удобно иметь в ядре.
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
Советская реализация[править]
Юрий Семёнов приводит следующее определение слова COPY (стр. 33), как пример использования слова FLUSH:
: COPY ↔ ( в стеке m n ) BLOCK ( m и адрес первого байта буфера, куда считан экран с номером n) 2- ( m и адрес ячейки, где лежит номер экрана, хранящегося в буфере) ! ( очистка стека, номер экрана n заменён на m) UPDATE ( установка флага "спасения") FLUSH ; ( запись на диск)
Определение слова COPY в FORTH ИТЭФ тоже использует FLUSH:
HEAD 204Q,'COP',331Q,COPY,$COL ; COPY DW SWAP,BLOCK,CFA,STORE,UPDAT,FLUSH,SEMI
colorForth (cf2019.nasm 2019 Sep 14)[править]
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
Ссылки[править]
- Исходный текст слова COPY в Каллисто Классик 1.0
- КАК РАБОТАТЬ НА ФОРТЕ в книге Л.Броуди «Начальный курс программирования на языке Форт»
![]() |
Это заготовка статьи. Вы можете помочь проекту, дополнив её. |