Адресный интерпретатор: различия между версиями
AtH (обсуждение | вклад) |
AtH (обсуждение | вклад) |
||
Строка 15: | Строка 15: | ||
== Реализация == | == Реализация == | ||
В [[Каллисто|Каллисто 1.0]] адресный интерпретатор способен исполнять [[шитый код]] как из [[Регистры | В [[Каллисто|Каллисто 1.0]] адресный интерпретатор способен исполнять [[шитый код]] как из [[Регистры байтовых данных|памяти данных]], так и из [[Память программ|памяти программ]] [[МК-161|«Электроники МК-161»]]. | ||
=== NEXT === | === NEXT === |
Версия от 06:36, 14 января 2018
Адресный интерпретатор (англ. address interpreter) — интерпретатор косвенного шитого кода.
Адресный интерпретатор Каллисто 1.0 использует единое адресное пространство, что позволяет исполнять шитый код как из байтовой памяти, так и из памяти программ.
Если поток исполнения команд уподобить току крови, адресный интерпретатор — сердце Каллисто. Каждая передача управления от одного примитива к другому проходит через адресный интерпретатор. Именно он «гонит кровь» через определения высокого уровня, «оживляя» шитый код и заставляя его работать.
К сожалению, сейчас (по состоянию на июнь 2016 года) адресный интерпретатор написан на языке МК, что сильно ограничивает быстродействие Каллисто. Оптимизация адресного интерпретатора по быстродействию, как и прошивка его в ПЗУ микроконтроллера является задачей, важной для успеха Каллисто.
История
Впервые косвенный шитый код (англ. indirect-threaded code) появился в Форте 1971-73 годах, когда Чак Мур перенёс транслятор на DEC PDP-11 в National Radio Astronomy Observatory (англ., Шарлотсвилл). С тех пор разные варианты шитого кода применяется в подавляющем числе различных реализаций Форта.
Первый адресный интерпретатор для PDP-11 представлял из себя 2-словный макрос на форт-ассемблере:
: NEXT IP )+ W MOV W )+ ) JMP ;
Реализация
В Каллисто 1.0 адресный интерпретатор способен исполнять шитый код как из памяти данных, так и из памяти программ «Электроники МК-161».
NEXT
Действие NEXT — основное в адресном интерпретаторе, передача управления от одного токена в цепочке шитого кода к следующему. Его не следует путать с каллистянским словом NEXT.
2476 NEXTD: ; NEXT для шитого кода из памяти данных. 2477 KRM6 RME ∗ KRM6 + M7 ; W := MEMW[RI++] считать шитый код 2478 1 EE 4 − FX>=0 NEXTPP ; Слово из памяти программ? 2479 NEXTDD: M7 M5 KRM7 RME ∗ KRM5 + ; Считать MEMW[W], это должно быть CFA очередного слова в шитом коде 2480 M8 KGOTO8 ; передать управление на адрес, записанный в CFA … 2499 NEXTP: ; NEXT для шитого кода из памяти программ. 2500 PPRM 9044 RME ∗ PPRM 9044 + 2501 DOEXECRX: M7 ; W := MEMW[RI++] считать шитый код 2502 1 EE 4 − FX<0 NEXTDD ; Слово из области двоичных данных? 2503 NEXTPP: RM7 KPRGM RME ∗ RM7 1 + KPRGM + ; Считать MEMW[W], это должно быть CFA очередного слова в шитом коде 2504 M8 KGOTO8 ; передать управление на адрес, записанный в CFA
EXECUTE
Слово EXECUTE считывает из стека токен, после чего передаёт управление на его обработчик. Эту работу выполняет код, начиная с метки DOEXECRX — см. его выше, в описании NEXT.
2506 JEXEC: ; Обработчик EXECUTE 2507 RM3 M8 1 + M3 KRM8 ; POP RX 2508 PGOTO DOEXECRX ; W := RX, JMP MEMW[W]
CALL / RETURN
Действие CALL / RETURN позволяют шитому коду исполнять не только последовательность примитивов, но также использовать слова высокого уровня — образуя своего рода вложенность. Этим двум действиям соответствуют каллистянские слова : и EXIT.
2467 CALLD: ;∗∗ CALL, когда управление передаётся в память данных 2468 KGSBC ; RPUSH RI ; RX := W, адрес поля кода нового слова 2469 1 + ; RX := PFA−1, передать в указатель шитого кода R6=RI−1 2470 SETRIDAT: 2471 M6 ; RI := RX 2472 SETDAT: .NUMT RPUSHRID 2473 MC ; RC := RPUSHRID ;∗∗ Следующий вызов −− из памяти данных 2474 .NUM NEXTD 2475 M9 ; R9 := NEXTD ;∗∗ 2476 NEXTD: ; NEXT для шитого кода из памяти данных. … 2481 ; 2482 RETURN: ; Обработчик EXIT 2483 RM2 1 − M5 3 + M2 2484 KRM5 RME ∗ KRM5 + 2485 PPM 9042 ; Регистр, увы, мучаем в любом случае 2486 10001 − 2487 FX<0 SETRIDAT 2488 GOTO SETPRG 2489 ; 2490 CALL: ;∗∗ CALL, когда управление передаётся в память программ 2491 KGSBC ; RPUSH RI ; RX := W, адрес поля кода нового слова 2492 2 + ; Теперь RX указывает на его тело 2493 SETRIPRG: 2494 PPM 9042 ; R9042 := RX 2495 SETPRG: .NUMT RPUSHRIP 2496 MC ; RC := RPUSHRIP ;∗∗ Следующий вызов −− из памяти программ 2497 .NUM NEXTP 2498 M9 ; R9 := NEXTP ;∗∗ 2499 NEXTP: ; NEXT для шитого кода из памяти программ. …
Форт-процессоры
Первая попытка построить форт-компьютер была предпринята John Davies в Англии в 1973 году. Примерно в это время английская обсерватория Джодрелл Бэнк открыла для себя Форт. Подход Davies заключался в переделке компьютера Ferranti (который перестал выпускаться), чтобы оптимизировать его набор инструкций под Форт. Получившийся форт-компьютер был очень быстрый для своего времени.
В 1976 году форт-компьютер выпустила калифорнийская компания Standard Logic (в других источниках General Logic). Dean Sanderson, главный программист Standard Logic (позже он перешёл работать в FORTH Inc.) смог аппаратно реализовать точную инструкцию NEXT, которую адресный интерпретатор Форта использует для перехода от одной высокоуровневой команды к следующей. Их систему широко использовала Почтовая Система США (US Postal System).
В начале 1980'ых фирма Rockwell выпустила микропроцессор Rockwell AIM 65F11 с примитивами Форта в ПЗУ, находящемся на чипе. Эту микросхему успешно использовали во встроенных приложениях.
В 1981 году разработкой форт-процессора занялся Чак Мур — сперва работая в FORTH Inc., а затем создав старт-ап Novix. Основная разработка была завершена в 1984 году, первые прототипы были представлены в начале 1985 года. Разработка Мура была куплена и адаптирована фирмой Harris Semiconductor Corp., став основой их линейки процессоров RTX.
Начав в ранних 1980'ых, группа в Лаборатории прикладной физики штата Мэрилэнд (John Hopkins Applied Physics Laboratory in Maryland) разработала серию экспериментальных форт-профессоров для использования в космосе. Самый успешный из них, названный SC-32 фирмой Silicon Composers в Пало-Альто (Калифорния), использовался для управления ультрафиолетовым телескопом (англ. Hopkins Ultraviolet Telescope), который полетел в шаттле Колумбия в ноябре-декабре 1990 года.
Чак Мур, автор языка Форт, отказался от участия в разработке стандарта ANSI для языка Форт, чтобы посвятить всё своё время разработке «железного» процессора, достойного языка Форт. Эволюция Форта в программно-аппаратную систему привела к возникновению языка colorForth и мультикомпьютерной микросхемы GA144 (англ.).
Защищённый от радиации форт-процессор RTX2010 (англ.) основан на разработках Чака Мура и десятилетиями используется в зарубежных космических аппаратах. В частности, RTX2010 использовался в спускаемом аппарате «Филы» КА «Розетта» (миссия к комете 67P/Чурюмова — Герасименко), работавшего на поверхности кометы с 12 ноября 2014 года по 19 июня 2015 года. Это первая в истории посадка на комету, драматичная и довольно захватывающая, но в целом успешная.
В России разработаны и выпускаются отечественные форт-процессоры, например K1881BE1T и К1894ВГ1Т. Перенос Каллисто на один из этих микропроцессоров позволит достичь максимальной производительности.
Ссылки
- Адресный интерпретатор Каллисто Классик находится в теле слова :, см. метки NEXTP и NEXTD
- Форт в железе! Форт-процессор Дофин-1620 (кодировка Windows)
- Форт-процессор EQUINOX и его обсуждение на форуме
- Randy Dumse, "The R65F11 FORTH Chip," "FORTH Dimensions", Vol.5, No.2, p.25.
У этой статьи нет иллюстраций. Вы можете помочь проекту, добавив их. |
Это заготовка статьи. Вы можете помочь проекту, дополнив её. |