COLD: различия между версиями

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


COLD это первая словарная статья. Это примитив, то есть COLD написан на [[ЯМК]]. COLD инициализирует регистры ЭКВМ, использующиеся [[Каллисто]], включая оба словаря — двоичный и десятичный, после чего начинает исполнение высокоуровневого кода [[Каллисто]].
== Ввод слова COLD ==
В [[Режим ЛАТ|режиме ЛАТ]] последовательно нажмите четыре клавиши [[Клавиша С/П|{{Чёрная клавиша|С/П}}]] [[Клавиша 5|{{Серая клавиша|5}}]] [[Клавиша -|{{Серая клавиша|−}}]] [[Клавиша K|{{Синяя клавиша|K}}]]


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


== COLD в fig-FORTH Release 1 glossary, май 1979 (англ.) ==
Высокоуровневая часть COLD выводит на [[индикатор]] номер версии [[Каллисто]], после чего передаёт управление слову [[WARM]].
 
== История ==
=== 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
Строка 12: Строка 18:
         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 Перезагрузка в Википедии]




{{нет иллюстраций}}
{{нет иллюстраций}}
{{заготовка}}
[[Категория:Слова Каллисто]]
[[Категория:Слова Каллисто]]
[[Категория:Примитивы]]

Текущая версия от 06:18, 14 января 2018

COLD («холодный» старт) — фортовское слово Каллисто. «Холодная» перезагрузка.

COLD           ( −− )                               Холодная перезагрузка, со сбросом словаря.

Словарь приводится в исходное состояние. Все слова, определённые после стандартного слова TASK, удаляются. COLD не возвращает управление назад. Символы, идущие во входном потоке после COLD, игнорируются.

Ввод слова COLD[править]

В режиме ЛАТ последовательно нажмите четыре клавиши  С/П   5      K 

Детали реализации[править]

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

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

История[править]

COLD в fig-FORTH Release 1 glossary, май 1979 (англ.)[править]

COLD
       The cold start proceedure to adjust the dictionary pointer to
       the minimum standard and restart via ABORT.
       May be called from the terminal to remove application programs and
       restart.

Реализация[править]

В Каллисто 1.0 слово COLD начинается на языке МК, инициализирует переменные USER и переходит на исполнение шитого кода:

 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 (оптимизация)

Советская реализация[править]

Каллистянское слово COLD в FORTH ИТЭФ называется INI (первые три буквы английского слова initialization, инициализация). INI начинается с ассемблерного кода, после чего инициализирует регистры и переходит исполнению шитого кода:

       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

Ссылки[править]


  У этой статьи нет иллюстраций. Вы можете помочь проекту, добавив их.