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

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

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

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


== Ввод слова COLD ==
В [[Режим ЛАТ|режиме ЛАТ]] последовательно нажмите четыре клавиши [[Клавиша С/П|{{Чёрная клавиша|С/П}}]] [[Клавиша 5|{{Серая клавиша|5}}]] [[Клавиша -|{{Серая клавиша|−}}]] [[Клавиша K|{{Синяя клавиша|K}}]]


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


Высокоуровневая часть COLD выводит на [[индикатор]] номер версии [[Каллисто]], после чего передаёт управление слову [[WARM]].
Программа INIT целиком написана на [[ЯМК]] и не является словом [[Каллисто]]. Её задача — запустить [[Каллисто]] с помощью слова COLD или [[WARM]]. Решение принимается на основании содержимого регистра 19. Если R19 совпадает с номером запущенной версии [[Каллисто]], INIT его сразу обнуляет и первым исполненным словом будет [[WARM]], то есть написанная или загруженная пользователем программа сохраняется. С помощью R19 и переменной [[AUTOEXEC]] программа на [[Каллисто]] может запускать себя при включении ЭКВМ (например, после сбоя питания) или после загрузки с электронного диска словом [[LOAD"]].


== История ==
Если в R19 расположено любое другое число, первым исполняется слово COLD, то есть [[словарь]] приводится в исходное состояние.
=== COLD в fig-FORTH Release 1 glossary, май 1979 (англ.) ===
 
== COLD в fig-FORTH Release 1 glossary, май 1979 (англ.) ==
  COLD
  COLD
         The cold start proceedure to adjust the dictionary pointer to
         The cold start proceedure to adjust the dictionary pointer to
Строка 18: Строка 24:
         May be called from the terminal to remove application programs and
         May be called from the terminal to remove application programs and
         restart.
         restart.
== Реализация ==
В [[Каллисто|Каллисто 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 начинается с ассемблерного кода, после чего инициализирует регистры и переходит исполнению шитого кода:
<pre>
      ASSUME  CS:ARRAY, DS:ARRAY, ES:ARRAY, SS:STACK
  $INI      PROC    FAR
            JMP  ENT
  ; ** PRIMITIVES **
            HEAD    203Q,'IN',311Q,INIT                  ;INI
  ENT:      MOV  CX, ARRAY
            MOV  DS, CX          ; Установка DX
            MOV  ES, CX
            MOV  BX, $US
            MOV  AX, $STI        ; Восстановление словаря
            LEA  SI, FORTH+6
            MOV  [SI], AX
            MOV  SI, $BUF
            MOV  CX, 1730        ; Установка счетчика
  XXX:      MOV  WORD PTR [SI],0 ; Обнуление массивов
            ADD  SI, 2
            LOOP  XXX
  ; INIT 'OFFSET, USE, PREV
            MOV  CX, $BUF        ; TO 'USE'
            MOV  [BX]+72Q,CX
            MOV  [BX]+74Q,CX      ; ?
            MOV  CX, 14Q          ; Установка счетчика USER
            MOV  DI, $US          ; Запись адреса области USER
            ADD  DI, 6
            LEA  SI, $STK        ; Запись начального адреса
  REP      MOVS  WORD PTR ES:[DI],HORD PTR DS:[SI]
            MOV  BP, $RS          ; Установка начального значения
            MOV  DI, $US          ; указателя стека возвратов
            MOV  WORD PTR [DI+32Q],7  ; Установка цвета
            MOV  WORD PTR [DI+42Q],0  ; Сброс флага печати
            LEA  SI, G0$
            NEXT
  G0$:      DW SPSTO,DEC,FORTH,DEFIN,ONE,LOAD
  $INI      ENDP
            ...
  END        $INI
</pre>


== Ссылки ==
== Ссылки ==
* {{Исходник|COLD|COLD}}
* См. статью [[Начальная загрузка Каллисто]]
* См. слова [[QUIT]], [[ABORT]] и [[BYE]]
* См. также [[WARM]] — «горячий» старт.
* См. также [[WARM]] — «горячий» старт.
* [https://ru.wikipedia.org/wiki/%D0%9F%D0%B5%D1%80%D0%B5%D0%B7%D0%B0%D0%B3%D1%80%D1%83%D0%B7%D0%BA%D0%B0 Перезагрузка в Википедии]
* [https://ru.wikipedia.org/wiki/%D0%9F%D0%B5%D1%80%D0%B5%D0%B7%D0%B0%D0%B3%D1%80%D1%83%D0%B7%D0%BA%D0%B0 Перезагрузка в Википедии]
Строка 182: Строка 32:
{{нет иллюстраций}}
{{нет иллюстраций}}
[[Категория:Слова Каллисто]]
[[Категория:Слова Каллисто]]
[[Категория:Примитивы]]
[[Категория:Описание бета-версии Каллисто]]
Пожалуйста, учтите, что любой ваш вклад в проект «ПМК вики» может быть отредактирован или удалён другими участниками. Если вы не хотите, чтобы кто-либо изменял ваши тексты, не помещайте их сюда.
Вы также подтверждаете, что являетесь автором вносимых дополнений, или скопировали их из источника, допускающего свободное распространение и изменение своего содержимого (см. Pmkwiki:Авторские права). НЕ РАЗМЕЩАЙТЕ БЕЗ РАЗРЕШЕНИЯ ОХРАНЯЕМЫЕ АВТОРСКИМ ПРАВОМ МАТЕРИАЛЫ!

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

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