COLD: различия между версиями
AtH (обсуждение | вклад) Нет описания правки |
AtH (обсуждение | вклад) Нет описания правки |
||
(не показано 6 промежуточных версий этого же участника) | |||
Строка 1: | Строка 1: | ||
'''COLD''' («холодный» старт) — | '''COLD''' («холодный» старт) — фортовское слово [[Каллисто]]. «Холодная» перезагрузка. | ||
COLD ( −− ) Холодная перезагрузка, со сбросом словаря. | COLD ( −− ) Холодная перезагрузка, со сбросом словаря. | ||
[[Словарь]] приводится в исходное состояние. Все слова, определённые после стандартного слова [[TASK]], удаляются. COLD не возвращает управление назад. | [[Словарь]] приводится в исходное состояние. Все слова, определённые после стандартного слова [[TASK]], удаляются. COLD не возвращает управление назад. Символы, идущие во входном потоке после COLD, игнорируются. | ||
== Ввод слова COLD == | == Ввод слова COLD == | ||
Строка 7: | Строка 7: | ||
== Детали реализации == | == Детали реализации == | ||
COLD это первая словарная статья. Это [[примитив]], то есть COLD написан на [[ЯМК]]. COLD инициализирует [[Регистр памяти данных|регистры ЭКВМ]], использующиеся [[Каллисто]], включая оба словаря — [[Словарь|двоичный]] и [[Десятичный словарь|десятичный]], после чего передаёт управление на адресный интерпретатор, который начинает исполнение шитого кода. | COLD это первая словарная статья. Это [[примитив]], то есть COLD написан на [[ЯМК]]. COLD инициализирует [[Регистр памяти данных|регистры ЭКВМ]], использующиеся [[Каллисто]], включая оба словаря — [[Словарь|двоичный]] и [[Десятичный словарь|десятичный]], после чего передаёт управление на [[адресный интерпретатор]], который начинает исполнение [[Шитый код|шитого кода]]. | ||
Высокоуровневая часть COLD выводит на | Высокоуровневая часть COLD выводит на [[индикатор]] номер версии [[Каллисто]], после чего передаёт управление слову [[WARM]]. | ||
== 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 | ||
Строка 19: | Строка 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> | ||
Строка 66: | Строка 175: | ||
* {{Исходник|COLD|COLD}} | * {{Исходник|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 Перезагрузка в Википедии] | ||
Строка 73: | Строка 183: | ||
[[Категория:Слова Каллисто]] | [[Категория:Слова Каллисто]] | ||
[[Категория:Примитивы]] | [[Категория:Примитивы]] | ||
Текущая версия от 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
Ссылки[править]
- Исходный текст слова COLD в Каллисто Классик 1.0
- См. статью Начальная загрузка Каллисто
- См. слова QUIT, ABORT и BYE
- См. также WARM — «горячий» старт.
- Перезагрузка в Википедии
У этой статьи нет иллюстраций. Вы можете помочь проекту, добавив их. |