Редактирование: EMIT

Перейти к навигации Перейти к поиску
Внимание: Вы не вошли в систему. Ваш IP-адрес будет общедоступен, если вы запишете какие-либо изменения. Если вы войдёте или создадите учётную запись, её имя будет использоваться вместо IP-адреса, наряду с другими преимуществами.

Правка может быть отменена. Пожалуйста, просмотрите сравнение версий ниже, чтобы убедиться, что это нужная вам правка, и запишите страницу ниже, чтобы отменить правку.

Текущая версия Ваш текст
Строка 1: Строка 1:
'''EMIT''' (испустить, выдать) — стандартное слово [[Каллисто]].
'''EMIT''' (испустить, выдать) — стандартное слово [[Каллисто]].
  EMIT          ( c −− )                            Отобразить литеру.
  EMIT          ( c −− )                            Отобразить символ.
[[Файл:CallistoXorIdotRegQEmitHex.png|thumb|right|264px|Пример работы слова EMIT]]
[[Файл:CallistoXorIdotRegQEmitHex.png|thumb|right|264px|Пример работы слова EMIT]]
Отображает на [[индикатор]]е [[Знакогенератор|литеру]], код которой находится в [[Стек данных|стеке]].
Отображает на [[индикатор]]е [[Знакогенератор|символ]], код которого находится в [[Стек данных|стеке]].


== Ввод слова EMIT ==
== Ввод слова EMIT ==
Строка 37: Строка 37:


=== EMIT в предыдущем стандарте Forth-83 (англ.) ===
=== EMIT в предыдущем стандарте Forth-83 (англ.) ===
<PRE>
       EMIT        16b --                        M,83
       EMIT        16b --                        M,83
           The least-significant 7-bit ASCII character is displayed.
           The least-significant 7-bit ASCII character is displayed.
Строка 52: Строка 51:
       other than zero is an environmentally dependent usage.  EMIT must
       other than zero is an environmentally dependent usage.  EMIT must
       display as many bits as can be sent.
       display as many bits as can be sent.
</PRE>


=== EMIT в стандарте Forth-79 (англ.) ===
=== EMIT в стандарте Forth-79 (англ.) ===
Строка 64: Строка 62:


== Реализация ==
== Реализация ==
<pre>
984 ;#EMIT
985 ; EMIT            ( c −− )                            Отобразить литеру.
986 LEMIT:          .DB    4
987                .TEXT  "EMIT"
988                .DW    LEMI
989 EMIT:          .DW    JEMIT
990 JEMIT:          PKRM03  PGSB CHPUT              ; Отобразить на экране литеру, код которого находится в стеке.
991                PGOTO CHPUTC3
1000 CHPUTC3:        KGRPH
1001                PGOTO JDROP
2052 JDROP:          1                              ; Да, это обработчик DROP
2053 NDROP:          RM3 + M3                        ; А сюда сваливается 2DROP
2054                KGOTO9
</pre>
Реализация из SP-Forth 4.20:
<pre>
: EMIT ( x -- ) \ 94
\ Если x - изображаемый символ, вывести его на дисплей.
\ Программы, использующие управляющие символы, зависят от окружения.
  >R RP@ 1 TYPE
  RDROP
;
</pre>
=== Советская реализация ===
Слово EMIT в ФОРТ-ЕС и FORTH ИТЭФ также было [[примитив]]ом. Вот его описание и опубликованная часть определения из ядра ФОРТ-ЕС:
Слово EMIT в ФОРТ-ЕС и FORTH ИТЭФ также было [[примитив]]ом. Вот его описание и опубликованная часть определения из ядра ФОРТ-ЕС:
<PRE>
<PRE>
Строка 129: Строка 99:
             JMP  TYPE$
             JMP  TYPE$
   ERMES4:  DB  ' PRINTER ERROR $'
   ERMES4:  DB  ' PRINTER ERROR $'
</PRE>
=== colorForth (cf2019.nasm 2019 Sep 14) ===
<PRE>
clip1:
    mov  edi, [ v_xy ]
    mov  ecx, edi
    test cx, cx
    jns  .forward
    xor  ecx, ecx
.forward:
    and  ecx, 0x0000FFFF
    mov  [ v_yc ], ecx
    imul ecx, ( scrnw1 * BYTES_PER_PIXEL )
    sar  edi, 16
    jns  .forward2
    xor  edi, edi
.forward2:
    mov  [ v_xc ], edi
    lea  edi, [ edi * BYTES_PER_PIXEL + ecx ]
    add  edi, [ vframe ]
    ret
bit16:                    ; write a 16 x 24 glyph to the graphic screen
    lodsw                ; load the 16 bit value pointed to by SI into  ax
    xchg al, ah            ; eax_TOS_
.back:
    shl ax, 0x01            ; eax_TOS_
    jnc  .forward
    mov  [ edi ], dx        ;
    jmp .forward2
.forward:
    ror edx, 0x10          ; use the background colour, in the high 16 bits
;    mov [ edi ], dx        ;
    ror edx, 0x10          ; return to the foreground colour, in the low 16 bits
.forward2:
    add edi, byte BYTES_PER_PIXEL
    loop .back
    ret
; write the background after the glyph
bit16Background:          ; number of pixels to write in  ecx ,  screen address in  edi , colours in edx
    ror edx, 0x10          ; use the background colour, in the high 16 bits
.back:
;    mov [ edi ], dx        ;
    add edi, byte BYTES_PER_PIXEL
    loop .back
    ror edx, 0x10          ; return to the foreground colour, in the low 16 bits
    ret
emit1:      ; ( c -- )  \ display a single width and height character
    call qcr
    push esi
    push edi
    push edx
    imul _TOS_, byte 16*24/8
    lea esi, [ _TOS_ + font16x24 ]
    call clip1
    mov edx, [ v_foregroundColour ]
    mov ecx, 0x18  ; 24 lines
.back:
    push ecx
    mov ecx, 0x10
    call bit16
    mov ecx, 0x04
    push edi
    call bit16Background
    pop edi
    pop ecx
    add edi, ( scrnw1 - 16 ) * BYTES_PER_PIXEL  ; address of the next line of the glyph
    loop .back      ; next horizontal line
    mov ecx, 0x04  ; 4 background lines
.back2:
    push ecx
    mov ecx, 0x10
    call bit16Background
    mov ecx, 0x04
    push edi
    call bit16Background
    pop edi
    pop ecx
    add edi, ( scrnw1 - 16 ) * BYTES_PER_PIXEL  ; address of the next line of the glyph
    loop .back2      ; next horizontal line
    pop edx
    pop edi
    pop esi
    _DROP_
space1:
    add dword [ v_xy ], iconw1 * 0x10000 ; 22 horizontal pixels
    ret
clip2:
    mov  edi, [ v_xy ]
    mov  ecx, edi
    test cx, cx
    jns  .forward
    xor  ecx, ecx
.forward:
    and  ecx, 0x0000FFFF
    mov  [ v_yc ], ecx
    imul ecx, ( scrnw2 * BYTES_PER_PIXEL )
    sar  edi, 16
    jns  .forward2
    xor  edi, edi
.forward2:
    mov  [ v_xc ], edi
    lea  edi, [ edi * BYTES_PER_PIXEL + ecx ]
    add  edi, [ vframe ]
    ret
emit2:      ; ( c -- )  \ display a single width and height character
    call qcr
    push esi
    push edi
    push edx
    imul _TOS_, byte 16*24/8
    lea esi, [ _TOS_ + font16x24 ]
    call clip2
    mov edx, [ v_foregroundColour ]
    mov ecx, 0x18  ; 24 lines
.back:
    push ecx
    mov ecx, 0x10
    call bit16
    mov ecx, 0x04
    push edi
    call bit16Background
    pop edi
    pop ecx
    add edi, ( scrnw2 - 16 ) * BYTES_PER_PIXEL  ; address of the next line of the glyph
    loop .back      ; next horizontal line
    mov ecx, 0x04  ; 4 background lines
.back2:
    push ecx
    mov ecx, 0x10
    call bit16Background
    mov ecx, 0x04
    push edi
    call bit16Background
    pop edi
    pop ecx
    add edi, ( scrnw2 - 16 ) * BYTES_PER_PIXEL  ; address of the next line of the glyph
    loop .back2      ; next horizontal line
    pop edx
    pop edi
    pop esi
    _DROP_
space2:
    add dword [ v_xy ], iconw2 * 0x10000 ; 22 horizontal pixels
    ret
emit_:
    cmp byte [ displayMode ], 0
    jz emit1
    jmp emit2
</PRE>
</PRE>


Строка 300: Строка 106:
* Слово [http://forth.sourceforge.net/standard/dpans/dpans6.htm#6.1.1320 EMIT] в стандарте ANS Forth ''(англ.)''
* Слово [http://forth.sourceforge.net/standard/dpans/dpans6.htm#6.1.1320 EMIT] в стандарте ANS Forth ''(англ.)''
* Слово [http://forth-standard.org/standard/core/EMIT EMIT] в черновике Forth 200x ''(англ.)''
* Слово [http://forth-standard.org/standard/core/EMIT EMIT] в черновике Forth 200x ''(англ.)''
* [http://gudleifr.h1.ru/cgi-bin/pilo.cgi?FL=../g9.txt&IS=\6.PERWOISTOTNIKI\LEO%20BRODIE%20STARTING%20FORTH\01.OSNOWY%20FORTA ОСНОВЫ ФОРТА], [http://gudleifr.h1.ru/cgi-bin/pilo.cgi?FL=../g9.txt&IS=\6.PERWOISTOTNIKI\LEO%20BRODIE%20STARTING%20FORTH\07.TISLO%20TIPOW%20TISEL ЧИСЛО ТИПОВ ЧИСЕЛ] и [http://gudleifr.h1.ru/cgi-bin/pilo.cgi?FL=../g9.txt&IS=\6.PERWOISTOTNIKI\LEO%20BRODIE%20STARTING%20FORTH\10.WWOD-WYWOD ВВОД-ВЫВОД] в книге [http://gudleifr.h1.ru/cgi-bin/pilo.cgi?FL=../g9.txt&IS=\6.PERWOISTOTNIKI\LEO%20BRODIE%20STARTING%20FORTH Л.Броуди «Начальный курс программирования на языке Форт»]
* [http://gudleifr.h1.ru/cgi-bin/pilo.cgi?FL=../g9.txt&IS=\6.PERWOISTOTNIKI\LEO%20BRODIE%20STARTING%20FORTH\01.OSNOWY%20FORTA ОСНОВЫ ФОРТА] в книге [http://gudleifr.h1.ru/cgi-bin/pilo.cgi?FL=../g9.txt&IS=\6.PERWOISTOTNIKI\LEO%20BRODIE%20STARTING%20FORTH Л.Броуди «Начальный курс программирования на языке Форт»]
* [http://www.forth.com/starting-forth/sf1/sf1.html Fundamental Forth], [http://www.forth.com/starting-forth/sf7/sf7.html A Number of Kinds of Numbers] и [http://www.forth.com/starting-forth/sf10/sf10.html I/O and You] в книге [http://www.forth.com/starting-forth/ Leo Brodie Starting Forth] ''(англ.)''
* [http://gudleifr.h1.ru/cgi-bin/pilo.cgi?FL=../g9.txt&IS=\6.PERWOISTOTNIKI\LEO%20BRODIE%20STARTING%20FORTH\07.TISLO%20TIPOW%20TISEL ЧИСЛО ТИПОВ ЧИСЕЛ] в книге [http://gudleifr.h1.ru/cgi-bin/pilo.cgi?FL=../g9.txt&IS=\6.PERWOISTOTNIKI\LEO%20BRODIE%20STARTING%20FORTH Л.Броуди «Начальный курс программирования на языке Форт»]
* [http://gudleifr.h1.ru/cgi-bin/pilo.cgi?FL=../g9.txt&IS=\6.PERWOISTOTNIKI\LEO%20BRODIE%20STARTING%20FORTH\10.WWOD-WYWOD ВВОД-ВЫВОД] в книге [http://gudleifr.h1.ru/cgi-bin/pilo.cgi?FL=../g9.txt&IS=\6.PERWOISTOTNIKI\LEO%20BRODIE%20STARTING%20FORTH Л.Броуди «Начальный курс программирования на языке Форт»]
* [http://www.forth.com/starting-forth/sf1/sf1.html Fundamental Forth] в книге [http://www.forth.com/starting-forth/ Leo Brodie Starting Forth] ''(англ.)''
* [http://www.forth.com/starting-forth/sf7/sf7.html A Number of Kinds of Numbers] в книге [http://www.forth.com/starting-forth/ Leo Brodie Starting Forth] ''(англ.)''
* [http://www.forth.com/starting-forth/sf10/sf10.html I/O and You] в книге [http://www.forth.com/starting-forth/ Leo Brodie Starting Forth] ''(англ.)''




Строка 308: Строка 118:
[[Категория:Примитивы]]
[[Категория:Примитивы]]
[[Категория:Терминальный ввод/вывод Каллисто]]
[[Категория:Терминальный ввод/вывод Каллисто]]
[[Категория:Стандартные слова]]
[[Категория:1994 CORE]]
[[Категория:2012 CORE]]
Пожалуйста, учтите, что любой ваш вклад в проект «ПМК вики» может быть отредактирован или удалён другими участниками. Если вы не хотите, чтобы кто-либо изменял ваши тексты, не помещайте их сюда.
Вы также подтверждаете, что являетесь автором вносимых дополнений, или скопировали их из источника, допускающего свободное распространение и изменение своего содержимого (см. Pmkwiki:Авторские права). НЕ РАЗМЕЩАЙТЕ БЕЗ РАЗРЕШЕНИЯ ОХРАНЯЕМЫЕ АВТОРСКИМ ПРАВОМ МАТЕРИАЛЫ!

В целях защиты вики от автоматического спама в правках просим вас решить следующую каптчу:

Отменить Справка по редактированию (в новом окне)
Источник — https://pmk.the-hacker.ru/EMIT