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

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

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

Текущая версия Ваш текст
Строка 1: Строка 1:
'''COLD''' («холодный» старт) — фортовское слово [[Каллисто]]. «Холодная» перезагрузка.
'''COLD''' («холодный» старт) — фортовское слово [[Каллисто]]. «Холодная» перезагрузка.
  COLD          ( −− )                              Холодная перезагрузка, со сбросом словаря.
  COLD          ( −− )                              Холодная перезагрузка, со сбросом словаря.
[[Словарь]] приводится в исходное состояние. Все слова, определённые после стандартного слова [[TASK]], удаляются. COLD не возвращает управление назад. Символы, идущие во входном потоке после COLD, игнорируются.
[[Словарь]] приводится в исходное состояние. Все слова, определённые после стандартного слова [[TASK]], удаляются. COLD не возвращает управление назад. Всё, идущее после COLD, игнорируется.


== Ввод слова COLD ==
== Ввод слова COLD ==
Строка 7: Строка 7:


== Детали реализации ==
== Детали реализации ==
COLD это первая словарная статья. Это [[примитив]], то есть COLD написан на [[ЯМК]]. COLD инициализирует [[Регистр памяти данных|регистры ЭКВМ]], использующиеся [[Каллисто]], включая оба словаря — [[Словарь|двоичный]] и [[Десятичный словарь|десятичный]], после чего передаёт управление на [[адресный интерпретатор]], который начинает исполнение [[Шитый код|шитого кода]].
COLD это первая словарная статья. Это [[примитив]], то есть COLD написан на [[ЯМК]]. COLD инициализирует [[Регистр памяти данных|регистры ЭКВМ]], использующиеся [[Каллисто]], включая оба словаря — [[Словарь|двоичный]] и [[Десятичный словарь|десятичный]], после чего передаёт управление на адресный интерпретатор, который начинает исполнение шитого кода.


Высокоуровневая часть COLD выводит на [[индикатор]] номер версии [[Каллисто]], после чего передаёт управление слову [[WARM]].
Высокоуровневая часть COLD выводит на экран номер версии [[Каллисто]], после чего передаёт управление слову [[WARM]].


== История ==
== История ==
Строка 20: Строка 20:


== Реализация ==
== Реализация ==
В [[Каллисто|Каллисто 1.0]] слово COLD начинается на [[Язык МК|языке МК]], инициализирует [[USER|переменные USER]] и переходит на исполнение [[Шитый код|шитого кода]]:
<pre>
122 ; Эта часть переменных инициализируется в COLD
123 ;
124 nbEmpty        .EQU      126                  ; 126 сколько байт обнулит COLD перед инициализацией _FONT и далее
125
126 ; Описание активного шрифта
127 ; Порядок полей важен, они заполняются словом FONT!
128 ;
129 pFONT          .EQU      126                  ; 11126  _FONT − Структура терминала, описывающая активный шрифт
130 rrCHW          .EQU    1126                  ; 11126  +0  максимальная ширина литеры при выводе на индикатор
131 rrCHH          .EQU    1127                  ; 11127  +1  высота литеры при выводе на индикатор
132 rrBSW          .EQU    1128                  ; 11128  +2  ширина курсора и средней литеры для BS
133 rrSCRLN        .EQU    1129                  ; 11129  +3  на сколько линий поднять экран при прокрутке
134 rrSCRLFIX      .EQU    1130                  ; 11130  +4  на сколько строк поднять курсор после прокрутки
135
136 rrS0            .EQU    1131                  ; 11131  S0 − Указатель начала стека параметров
137 rlS0            .EQU    1132
138 pS0            .EQU      131
139 rrR0            .EQU    1133                  ; 11133  R0 − Указатель начала стека возвратов
140 rlR0            .EQU    1134
141 pR0            .EQU      133
142 rrDDP          .EQU    1135                  ; 11135  ДH − Указатель на первую свободную ячейку десятичного словаря
143 rlDDP          .EQU    1136
144 pDDP            .EQU      135
145 rrDP            .EQU    1137                  ; 11137  H − Указатель на первую свободную ячейку словаря H @ = HERE
146 pDP            .EQU      137
147 rlDP            .EQU    1138
148 rrVOCLINK      .EQU    1139                  ; 11139  VOC−LINK − Переменная связи наборов слов
149 pVOCLINK        .EQU      139
150 rrAUTOEXEC      .EQU    1141                  ; 11141  APP − код отсюда будет выполняться сразу после WARM
151 pAUTOEXEC      .EQU      141
152 rlAUTOEXEC      .EQU    1142
420 ;#COLD
421 ; COLD            ( −− )                              Холодная перезагрузка, со сбросом словарей.
422 ;−−−−−−−−−−−−−−−−−−−−−−−−
423 ; Первая словарная статья
424 ; Слово COLD может использоваться, как более суровый вариант FORGET TASK
425 LCOLD:          .DB    4                      ; NFA: байт−счётчик 4 − длина имени
426                .TEXT  "COLD"                  ; Имя слова, длина переменная и записана в байте счётчика
427                .DW    0                      ; LFA: Поле связи равно 0, завершающее слово набора FORTH
428 COLD:          .DW    JCOLD                  ; CFA: Поле кода ссылается на поле параметров, слово на ЯМК
429 JCOLD:                                          ; PFA: Поле параметров содержит программу на ЯМК
430                2 PPM 9010                      ; Инициализация графического экрана, шрифт 0
431                256 ME                          ; В RE всегда 256, экономит память и время
432                .NUMT  nbEmpty                ; Столько байт предстоит обнулить
433                M0
434                999 M5                          ; Начиная с R1000, прединкримент
435                Cx
436 COLD0:          KM5  FL0 COLD0                  ; Обнулить их все!
437                .NUMT  SSTR
438                PPM 9042                        ; Читать шитый код из памяти программ
439                44 M0                          ; Всего 17+27 байт
440 CLDCPY:        PPRM 9044 KM5  FL0 CLDCPY      ; Копировать в байтовую область переменные USER + заготовку словаря
441                PGOTO SETPRG                    ; Начать исполнять код из памяти программ
442
443 SSTR:
444 ; Теневая таблица для инициализации _FONT и шести переменных USER (5+12=17 байт)
445
446                .DB 8,8,6,1,0                  ; 11126..11130 rrCHW, rrCHH, rrBSW, rrSCRLN, rrSCRFIX для шрифта 0
447 ;
448 ;                  S0        R0        ДH      H        VOC−LINK  APP
449 ;                  1131      1133      1135    1137      1139    1141 ∗
450 ;              .DW rrXS0,    rrXR0,    10020,  rrXDP,  rrXVOC,    QUIT
451 ;              .DW 10998,    15090,    10020,  11170,    11159,    QUIT ∗
452                .DB 2aH,0f6H, 3aH,0f2H, 27H,24H, 2bH,0a2H, 2bH,97H
453                .DW QUIT                ; APP
454
455 ; Эти две статьи (27 байт) COLD переносит в словарь в области двоичных регистров
456 ; Их поле данных сможет меняться
457 ;
458 ;#FORTH
459 ; FORTH            ( −− )                              Сделать набор слов FORTH контекстным.
460 ; LFORTH:
461                .DB    5                      ; 11143 = 2b87 = LFORTH:
462                .TEXT  "FORTH"                ; 11144:
463                .DW    LLOADQ                  ; 11149:
464                .DW    SDOEP                  ; 11151 = 2b8f = FORTH: (xt)
465                .DW DOVOC                      ; 11153: Обработчик VOCABULARY для DOES>
466                .DB 1,20H                      ; 11155: псевдозаголовок первого слова
467                .DB 2bH,99H                    ; 11157: ссылка на LTASK в новой адресации
468
469                                                ; Этим адресом инициализируется VOC−LINK
470                .DW    0                      ; 11159 = 2b97 = XVOC: Это должно быть уже в байтовой памяти
471
472 ;#TASK
473 ; TASK            ( −− )                              Последнее слово ядра Каллисто.
474 ; В Форте слово TASK чаще всего используется оператором FORGET для сброса словаря в начальное состояние.
475 ;LTASK:
476                .DB    4                      ; 11161 = 2b99 = LTASK
477                .TEXT  "TASK"                  ; 11162:
478                .DB    2bH,87H                ; 11166: 11143 rrDict, ссылка на LFORTH в единой адресации
479                .DW    JNOP                    ; 11168 = TASK: (xt)
480                                                ; 11170 = 2ba2: этим адресом инициализируется H
481
482 ; Отсюда, из памяти программ, запускается шитый код −− сразу после "болванки" для инициализации USER и словаря.
483 ;
484                .DW SPSTO,RPSTO                ; Инициализировать оба стека
485                .DW DARK,PDOTQ                  ; Вывести название и версию транслятора
486                .DB 22                          ; Длина первой строки
487 strForthM1:    .DB 12                          ; Начать с CLS
488                .TEXT "Каллисто Классик 1.0"    ; Фраза означает, что Каллисто удалила словарь разработчика
489                .DB 10                          ; Закончить LF
490                .DW BRAN,RWARM                  ; Передать управление WARM (оптимизация)
</pre>
=== Советская реализация ===
[[Каллисто|Каллистянское]] слово COLD в FORTH ИТЭФ называется INI (первые три буквы английского слова ''initialization'', инициализация). INI начинается с ассемблерного кода, после чего инициализирует регистры и переходит исполнению шитого кода:
[[Каллисто|Каллистянское]] слово COLD в FORTH ИТЭФ называется INI (первые три буквы английского слова ''initialization'', инициализация). INI начинается с ассемблерного кода, после чего инициализирует регистры и переходит исполнению шитого кода:
<pre>
<pre>
Пожалуйста, учтите, что любой ваш вклад в проект «ПМК вики» может быть отредактирован или удалён другими участниками. Если вы не хотите, чтобы кто-либо изменял ваши тексты, не помещайте их сюда.
Вы также подтверждаете, что являетесь автором вносимых дополнений, или скопировали их из источника, допускающего свободное распространение и изменение своего содержимого (см. Pmkwiki:Авторские права). НЕ РАЗМЕЩАЙТЕ БЕЗ РАЗРЕШЕНИЯ ОХРАНЯЕМЫЕ АВТОРСКИМ ПРАВОМ МАТЕРИАЛЫ!

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

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