|
nedoPC.orgElectronics hobbyists community established in 2002 |
|
Author |
Message |
b2m
Devil
Joined: 26 May 2003 06:57 Posts: 864
|
Между прочим, наличие у PDP-8 автоинкрементной индексации позволяет сделать форт с прямым шитым кодом, который будет гораздо эффективнее того, что реализовано Джоном. Здесь мы имеем такой код (предположим скомпилированы слова WORD1 WORD2): В конце каждого слова идет вызов JMS I [RET0], исходный код этих процедур я приводить не буду, но действий там не мало. А теперь рассмотрим гипотетический прямой шитый код: Предположим, что текущий указатель на форт-программу у нас в INDEX1. Тогда адресный интерпретатор сократится лишь до 4-х команд: Эти команды нужно ставить в конце ассемблерных слов вместо RET, ну или оформить в виде процедуры NEXT. Конечно, как и в любом форте с прямым шитым кодом, форт-слово будет начинаться вызовом JMS I [CALL], а завершаться словом EXIT. Но учитывая, что в конечном счёте чаще всего будут вызываться ассемблерные слова, в которых этих вызовов конечно нет, то исполнение будет гораздо быстрее. И это не учитывая того, что прямой шитый код в два раза компактнее.
_________________Страничка эмулятора наших компьютеров
http://bashkiria-2m.narod.ru/
|
23 May 2020 05:22 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
К сожалению, я не нашел никакой другой FORTH под PDP-8, хотя и потратил на это достаточно времени. Вот этот вариант: https://github.com/larsbrinkhoff/xForth/tree/master/target/pdp8from Lars Brinkhoff, на мой взгляд, представляет меньший практический интерес с той точки зрения, как реализовать стековый язык на принципиально бесстековой машине.
_________________ iLavr
|
23 May 2020 13:16 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Ну это у тебя простенько получилось... подшаманил TTY и форт запустился! А я голову ломаю: ну почему Форт из 1984 года под PDP-8 норовит разговаривать на русском языке? А это автор эмулятора - некий Brian J. Shelburne (др.Пх.) - оказался редким юмористом! Надо будет посмотреть, не англичанин ли он, с таким чувством юмора... У него PDP-8 работает в современной кодировке ASCII и про вот эту таблицу ровным счетом ничего не знает! Фразу Forth-8 by John Wilson это уже я подправил, а то ведь сплошной родной абсценный язык был! Но упакованные фразы Форта я, видимо, никак исправить не смогу... Нет, ну я понимаю, написал бы честно, что кодировка современная, чтобы студентам головы не морочить... А то ведь на голубом глазу рассказывает вот такие "правдивые" вещи: А на проверку через пол-дня выясняется, что в образе ленты самый обычный HEX, причем автор умудряется называть его ASCII , а вот то, что он называет BIN - это как раз образ ленты, но только ASCII-строками... Ну ладно... так-то в принципе на "поиграться в PDP-8" эмулятор довольно-таки неплохой, если не знать некоторые подробности о PDP-8 в оригинале... Что касается FORTH-8, то видимо, он работоспособен в той степени, в какой это пообещал John Wilson, и я догадываюсь по исходнику, что он мне хочет сказать "по-русски", но продуктивно поиграть в этот FORTHу меня вряд ли получится... P.S. Ну и хоть один приятный опыт из всей этой суеты: я впервые запустил программу на PDP-8 с помощью RIM-загрузчика! RIM-LOADER Да-да! Эта та самая программка или желтенькая бумажечка, которая присутствует на "мордах" большинства PDP и "Саратов-2".
_________________ iLavr
|
24 May 2020 19:17 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
И положу-ка я здесь, пожалуй инструменты, на случай, если снова понадобится PDP-8. А то, как показал поиск, материалов по PDP-8 в сети становится всё меньше, по сравнению с тем временем, когда я активно занимался поисками "Саратов-2". Эмулятор PDP-8 от Brian J. Shelburne вобще пришлось извлекать с интернет-помойки, а там в комплекте - хорошее описание и PDP-8, и как на ней работать. Ну и кросс-ассемблер PAL от Gary A. Messenbrink мне попался очень хороший - собирается и под DOS и под Win. Работает без каких-либо нареканий, то есть - весьма хорошо! Оба продукта тестировал под Win-7 - всё совместимо безо всяких DOS-боксов.
_________________ iLavr
|
24 May 2020 19:48 |
|
|
kozzdo
Writer
Joined: 03 Aug 2020 20:18 Posts: 22
|
Всем привет! вот же удивительно, я с весны увлекся идеями реализации форта на имеющихся у меня железках, а тут смотрю дискуссия вполне живая, нынешнего года.
Форт мне нужен по большей части для ардуинок и прочей подобной мелочевки, но поскольку у меня еще живы в железе рк-86, орион-128 и бк0010, то было бы неплохо поиграться и на них.
просто, в двух словах, хочу реализовать собственную версию форта по старым книжкам 70х годов с тем, чтобы в деталях понять, как форт работает изнутри. установил себе эмулятор рк-86, вроде как поднял на нем весь пакет для ассемблирования и т.п. , мал помалу надеюсь освоить на старости лет.
|
03 Aug 2020 20:23 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Форт, что я выкладывал в начале топика - вполне рабочий и с исходным кодом - на повод поиграться на рк-86, орион-128. Для бк0010 он, естественно, не подойдёт. Хотя вроде ж был у БК-шников свой Форт, но точно сказать не могу. Я, кстати, тоже заинтересовался Фортом из-за простоты написания компилятора. Форт от Н. ШИХОВа меня вполне удовлетворил, как размером, так и реализацией самой идеи.
_________________ iLavr
|
06 Aug 2020 03:11 |
|
|
askfind
Doomed
Joined: 04 Jan 2016 09:15 Posts: 657 Location: Russia, S.- Peterburg
|
Можно здесь посмотреть интересный проект http://www.retroforth.org/ | | | | Quote: RETRO has been built and used on many systems including DOS, Windows, Linux, FreeBSD, NetBSD, Haiku, macOS, and iOS. Tested host CPU architectures include x86 (16 and 32 bit), x86-64, ARM, and PowerPC.
SMALL RETRO is small, in both source and binaries. A minimal C implementation of the VM is 250 lines (without comments). The full implementation is 2,376 lines. On FreeBSD x86-64, the binaries can range from 55k to 128k in size depending on configuration.
| | | | |
FORTH написан на чистом Си. По сравнению с реализацией на ASM, легче понять ядро системы. P.S. Скачал. Собрал в linux. Запустил. Дальше по документации.
_________________ "Ученье свет, а неученье — тьма. Дело мастера боится, и коль крестьянин не умеет сохою владеть — хлеб не родится." (С)
|
06 Aug 2020 06:20 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Вобще, как выяснилось, приличный FORTH фортеры пишут на чистом FORTH-е. Поэтому у меня большие сомнения, что на чистом Си легче понять ядро системы по сравнению с ASM...
_________________ iLavr
|
06 Aug 2020 11:37 |
|
|
kozzdo
Writer
Joined: 03 Aug 2020 20:18 Posts: 22
|
Ну да, он мне показался довольно добротно сделанным, а его кажущаяся простота является мнимой. Вообще жаль, конечно, что он прошел не особо замеченным в свое время... Начал понемногу ковыряться в этом форте изнутри (спасибо за дизассемблированный листинг!) и на данном этапе хочу для начала попробовать разобраться, как работает эта форт-машина и запускать небольшие кусочки шитого кода в неинтерактивном режиме, тупо в отладчике. Я уже пробовал играться с фортом для ардуинок, еФорт и амФорт, так-то оно как раз, что надо, но без понимания внутренней структуры форт-машины все это бесполезные бирюльки с миганием светодиодом. Интересно также запустить минималистичную форт-машину на attiny контроллерах которые вот эти в восьминожечном корпусе )))) предварительно отладив на ардуинке в интерактивном режиме.
|
08 Aug 2020 15:57 |
|
|
kozzdo
Writer
Joined: 03 Aug 2020 20:18 Posts: 22
|
Ребята, вы кто-нибудь ковыряли этор РК-Форт дальше? Я попытался найти где у него внешний интерпретатор, но увяз в догадках.
Небольшое лирическое отступление - после некоторого перерыва я вернулся к попыткам понять и скомпилить простенький форт на минималках, но уперся в то, что совсем не могу решить, с чего начать.
Интуиция подсказывает мне, что надо начать с внешнего интерпретатора, чтобы хоть что-то на выходе получить, но чето както не идет.
|
08 Aug 2021 23:48 |
|
|
b2m
Devil
Joined: 26 May 2003 06:57 Posts: 864
|
Если вопрос про форт Шихова, то в нём есть слово INTERPRET, его и смотри. Так понятнее?
_________________Страничка эмулятора наших компьютеров
http://bashkiria-2m.narod.ru/
|
10 Aug 2021 10:12 |
|
|
kozzdo
Writer
Joined: 03 Aug 2020 20:18 Posts: 22
|
Да, форт Шихова. Тэксь, поковыряю этот кусок, ага. Еще нашел какое-то старое системное руководство о форт-83, там некая блок-схема есть, описывающая текстовый интерпретатор, надо попробовать нарисовать такую же. Шихов если не врет, он идеи из того форта черпал. Ладнысь, будем пробовать. Может по ходу еще и дойдет до меня, как там организован внутренний интерпретатор. Хдето должны быть кусочки его когда тоже. Там же подпрограммный шитый код, поэтому NEXT в явном виде как-то не присутствует. UPD никакого NEXT конечно же нет... оно там косвенно, в виде возвратов из подпрограмм...
|
10 Aug 2021 19:46 |
|
|
kozzdo
Writer
Joined: 03 Aug 2020 20:18 Posts: 22
|
Что интересно, вновь создаваемые слова представляют собой список вызываемых подпрограмм: Возникает мысль, что написанную на этом форте программу можно запустить извне из какого-нибудь простенького кода, и потом в этот же код и вернуться. Все еще не до конца понятно, как это оно просто вызывает через call куски кода и совсем не заботится о сохранении регистров и т.п. Но уже становится интереснее.
|
10 Aug 2021 22:01 |
|
|
b2m
Devil
Joined: 26 May 2003 06:57 Posts: 864
|
Ну так это и называется "подпрограммный шитый код". Это потому, что назначение регистровых пар BC и HL жёстко определено. HL указывает на стек данных, но не на самый верхний элемент, а на следующий за ним. А вот самый верхний элемент стека хранится в BC. Такая вот оптимизация. Однако, работа по загрузке и сохранению BC перекладывается на DUP/DROP. Вот, например DUP
_________________Страничка эмулятора наших компьютеров
http://bashkiria-2m.narod.ru/
|
12 Aug 2021 01:41 |
|
|
kozzdo
Writer
Joined: 03 Aug 2020 20:18 Posts: 22
|
b2m, Да, я заметил в отладчике, что значения в паре BC и память, на которую указывает HL определенно связаны. Еще сегодня смотрел код amforth для контроллеров atmel, там шитый код тоже подпрограммный, и вот какой интересный там есть кусочек, называемый внутренним интерпретатором: DO_COLON: push XH push XL ; PUSH IP movw XL, wl adiw xl, 1
DO_NEXT: brts DO_INTERRUPT movw zl, XL ; READ IP readflashcell wl, wh adiw XL, 1 ; INC IP
DO_EXECUTE: movw zl, wl readflashcell temp0,temp1 movw zl, temp0 ijmp
DO_INTERRUPT: ; here we deal with interrupts the forth way clt ldi wl, LOW(XT_ISREXEC) ldi wh, HIGH(XT_ISREXEC) rjmp DO_EXECUTE я подозреваю, что в РК форте тоже есть похожий механизм do_colon, do_execute и do_next буду пробовать искать.
|
12 Aug 2021 09:15 |
|
|
Who is online |
Users browsing this forum: No registered users and 77 guests |
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot post attachments in this forum
|
|