Forth на рк-86

Советский компьютер Радио-86РК (1986) и его клоны

Moderator: Shaos

b2m
Devil
Posts: 907
Joined: 26 May 2003 06:57

Re: RFORTH

Post by b2m »

Lavr wrote:А там где есть и аппаратный стек, и развитая косвенная адресация (как в z80) - там удивляться
особо нечему...
Между прочим, наличие у PDP-8 автоинкрементной индексации позволяет сделать форт с прямым шитым кодом, который будет гораздо эффективнее того, что реализовано Джоном.

Здесь мы имеем такой код (предположим скомпилированы слова WORD1 WORD2):

Code: Select all

JMS I [CALL0]
WORD1
JMS I [CALL0]
WORD2
В конце каждого слова идет вызов JMS I [RET0], исходный код этих процедур я приводить не буду, но действий там не мало.

А теперь рассмотрим гипотетический прямой шитый код:

Code: Select all

WORD1
WORD2
Предположим, что текущий указатель на форт-программу у нас в INDEX1. Тогда адресный интерпретатор сократится лишь до 4-х команд:

Code: Select all

CLA
TAD I INDEX1
DCA TEMP1
JMP I TEMP1
Эти команды нужно ставить в конце ассемблерных слов вместо RET, ну или оформить в виде процедуры NEXT.
Конечно, как и в любом форте с прямым шитым кодом, форт-слово будет начинаться вызовом JMS I [CALL], а завершаться словом EXIT. Но учитывая, что в конечном счёте чаще всего будут вызываться ассемблерные слова, в которых этих вызовов конечно нет, то исполнение будет гораздо быстрее. И это не учитывая того, что прямой шитый код в два раза компактнее.
Страничка эмулятора наших компьютеров
http://bashkiria-2m.narod.ru/
User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Re: RFORTH

Post by Lavr »

b2m wrote: ...наличие у PDP-8 автоинкрементной индексации позволяет сделать форт с прямым шитым кодом, который будет гораздо эффективнее того, что реализовано Джоном.
К сожалению, я не нашел никакой другой FORTH под PDP-8, хотя и потратил на это
достаточно времени.
Вот этот вариант: https://github.com/larsbrinkhoff/xForth ... arget/pdp8
from Lars Brinkhoff, на мой взгляд, представляет меньший практический интерес с той
точки зрения, как реализовать стековый язык на принципиально бесстековой машине.
iLavr
User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Re: RFORTH

Post by Lavr »

b2m wrote:и чтобы запустить этот форт, традиционно допилил свой эмулятор:
Ну это у тебя простенько получилось... подшаманил TTY и форт запустился! :lol:
А я голову ломаю: ну почему Форт из 1984 года под PDP-8 норовит разговаривать на русском языке? :o
FORTH8.gif
А это автор эмулятора - некий Brian J. Shelburne (др.Пх.) - оказался редким юмористом! :mrgreen:
Надо будет посмотреть, не англичанин ли он, с таким чувством юмора... :-?
У него PDP-8 работает в современной кодировке ASCII и про вот эту таблицу ровным счетом ничего не знает! :ebiggrin:
PDP8ASCI.gif
Фразу Forth-8 by John Wilson это уже я подправил, а то ведь сплошной родной абсценный язык был! 8)
Но упакованные фразы Форта я, видимо, никак исправить не смогу... :osad:

Нет, ну я понимаю, написал бы честно, что кодировка современная, чтобы студентам головы не морочить...
А то ведь на голубом глазу рассказывает вот такие "правдивые" вещи:
RIM.gif
А на проверку через пол-дня выясняется, что в образе ленты самый обычный HEX, причем автор
умудряется называть его ASCII :o , а вот то, что он называет BIN - это как раз образ ленты,
но только ASCII-строками...

Ну ладно... так-то в принципе на "поиграться в PDP-8" эмулятор довольно-таки неплохой, если
не знать некоторые подробности о PDP-8 в оригинале...

Что касается FORTH-8, то видимо, он работоспособен в той степени, в какой это пообещал John Wilson,
и я догадываюсь по исходнику, что он мне хочет сказать "по-русски", но продуктивно поиграть в этот FORTH
у меня вряд ли получится... :-?

P.S. Ну и хоть один приятный опыт из всей этой суеты: я впервые запустил программу на PDP-8 с помощью
RIM-загрузчика!
:kruto:

 RIM-LOADER

Code: Select all

7756/6032                   
7757/6031             
7760/5357             
7761/6036             
7762/7106 
7763/7006  
7764/7510 
7765/5357 
7766/7006 
7767/6031 
7770/5367  
7771/6034 
7772/7420 
7773/3776 
7774/3376 
7775/5356 

Да-да! Эта та самая программка или желтенькая бумажечка, которая присутствует на "мордах"
большинства PDP и "Саратов-2".
You do not have the required permissions to view the files attached to this post.
iLavr
User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Re: RFORTH

Post by Lavr »

И положу-ка я здесь, пожалуй инструменты, на случай, если снова понадобится PDP-8. :wink:

А то, как показал поиск, материалов по PDP-8 в сети становится всё меньше, по сравнению
с тем временем, когда я активно занимался поисками "Саратов-2".

Эмулятор PDP-8 от Brian J. Shelburne вобще пришлось извлекать с интернет-помойки,
а там в комплекте - хорошее описание и PDP-8, и как на ней работать.
PDP8EM.zip
Ну и кросс-ассемблер PAL от Gary A. Messenbrink мне попался очень хороший - собирается и под DOS и под Win.
PAL-8E.zip
Работает без каких-либо нареканий, то есть - весьма хорошо! :kruto:

Оба продукта тестировал под Win-7 - всё совместимо безо всяких DOS-боксов.
You do not have the required permissions to view the files attached to this post.
iLavr
kozzdo
Novelist
Posts: 34
Joined: 03 Aug 2020 20:18

Re: RFORTH

Post by kozzdo »

Всем привет! вот же удивительно, я с весны увлекся идеями реализации форта на имеющихся у меня железках, а тут смотрю дискуссия вполне живая, нынешнего года.

Форт мне нужен по большей части для ардуинок и прочей подобной мелочевки, но поскольку у меня еще живы в железе рк-86, орион-128 и бк0010, то было бы неплохо поиграться и на них.

просто, в двух словах, хочу реализовать собственную версию форта по старым книжкам 70х годов с тем, чтобы в деталях понять, как форт работает изнутри. установил себе эмулятор рк-86, вроде как поднял на нем весь пакет для ассемблирования и т.п. , мал помалу надеюсь освоить на старости лет.
User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Re: RFORTH

Post by Lavr »

kozzdo wrote:Форт мне нужен по большей части для ардуинок и прочей подобной мелочевки, но поскольку у меня еще живы в железе рк-86, орион-128 и бк0010, то было бы неплохо поиграться и на них.
Форт, что я выкладывал в начале топика - вполне рабочий и с исходным кодом - на повод
поиграться на рк-86, орион-128.
Для бк0010 он, естественно, не подойдёт. Хотя вроде ж был у БК-шников свой Форт, но точно
сказать не могу.

Я, кстати, тоже заинтересовался Фортом из-за простоты написания компилятора.
Форт от Н. ШИХОВа меня вполне удовлетворил, как размером, так и реализацией самой идеи.
iLavr
User avatar
askfind
Devil
Posts: 822
Joined: 04 Jan 2016 09:15
Location: Russia, S.- Peterburg

Re: RFORTH

Post by askfind »

Можно здесь посмотреть интересный проект http://www.retroforth.org/
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. Запустил. Дальше по документации.

Code: Select all

$ ./bin/retroRETRO 12 (2020.7)
524288 Max, 14943 Used, 509345 Free
"Ученье свет, а неученье — тьма. Дело мастера боится, и коль крестьянин не умеет сохою владеть — хлеб не родится." (С)
User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Re: RFORTH

Post by Lavr »

askfind wrote:FORTH написан на чистом Си. По сравнению с реализацией на ASM, легче понять ядро системы.
Вобще, как выяснилось, приличный FORTH фортеры пишут на чистом FORTH-е. :wink:
Поэтому у меня большие сомнения, что на чистом Си легче понять ядро системы
по сравнению с ASM... :lol:
iLavr
kozzdo
Novelist
Posts: 34
Joined: 03 Aug 2020 20:18

Re: RFORTH

Post by kozzdo »

Lavr wrote: Форт, что я выкладывал в начале топика - вполне рабочий и с исходным кодом - на повод
поиграться на рк-86, орион-128.
Ну да, он мне показался довольно добротно сделанным, а его кажущаяся простота является мнимой.
Вообще жаль, конечно, что он прошел не особо замеченным в свое время... Начал понемногу ковыряться в этом форте изнутри (спасибо за дизассемблированный листинг!) и на данном этапе хочу для начала попробовать разобраться, как работает эта форт-машина и запускать небольшие кусочки шитого кода в неинтерактивном режиме, тупо в отладчике.

Я уже пробовал играться с фортом для ардуинок, еФорт и амФорт, так-то оно как раз, что надо, но без понимания внутренней структуры форт-машины все это бесполезные бирюльки с миганием светодиодом. Интересно также запустить минималистичную форт-машину на attiny контроллерах которые вот эти в восьминожечном корпусе )))) предварительно отладив на ардуинке в интерактивном режиме.
kozzdo
Novelist
Posts: 34
Joined: 03 Aug 2020 20:18

Re: RFORTH

Post by kozzdo »

Ребята, вы кто-нибудь ковыряли этор РК-Форт дальше? Я попытался найти где у него внешний интерпретатор, но увяз в догадках.

Небольшое лирическое отступление - после некоторого перерыва я вернулся к попыткам понять и скомпилить простенький форт на минималках, но уперся в то, что совсем не могу решить, с чего начать.

Интуиция подсказывает мне, что надо начать с внешнего интерпретатора, чтобы хоть что-то на выходе получить, но чето както не идет.
b2m
Devil
Posts: 907
Joined: 26 May 2003 06:57

Re: RFORTH

Post by b2m »

kozzdo wrote:ковыряли этор РК-Форт дальше? Я попытался найти где у него внешний интерпретатор, но увяз в догадках.
Если вопрос про форт Шихова, то в нём есть слово INTERPRET, его и смотри.

 Так понятнее?

Code: Select all

    DW L0B58
    DB 'INTERPRET',89h
LINTERPRET:
    PUSH B
    XTHL
    SHLD L104C
    POP H
    CALL LDROP
L0ADE:
    CALL LAPOS
    MOV A,B
    ANA C
    INR A
    JNZ L0B09
    CALL LDROP
    CALL LNUMBER
    LDA L104B
    ORA A
    CNZ L0B3C
    JMP L0ADE
L0AFE:
    DCX B
    LDAX B
    INX B
    ANI 40h
    JZ L0B29
    JMP LEXECUT
L0B09:
    LDA L104B
    ORA A
    JZ L0B16
    CALL L0AFE
    JMP L0ADE
L0B16:
    CALL LEXECUT
    JMP L0ADE
L0B58:

Страничка эмулятора наших компьютеров
http://bashkiria-2m.narod.ru/
kozzdo
Novelist
Posts: 34
Joined: 03 Aug 2020 20:18

Re: RFORTH

Post by kozzdo »

b2m wrote: Если вопрос про форт Шихова, то в нём есть слово INTERPRET, его и смотри.
Да, форт Шихова. Тэксь, поковыряю этот кусок, ага. Еще нашел какое-то старое системное руководство о форт-83, там некая блок-схема есть, описывающая текстовый интерпретатор, надо попробовать нарисовать такую же. Шихов если не врет, он идеи из того форта черпал.

Ладнысь, будем пробовать. Может по ходу еще и дойдет до меня, как там организован внутренний интерпретатор. Хдето должны быть кусочки его когда тоже. Там же подпрограммный шитый код, поэтому NEXT в явном виде как-то не присутствует.

UPD никакого NEXT конечно же нет... оно там косвенно, в виде возвратов из подпрограмм...
kozzdo
Novelist
Posts: 34
Joined: 03 Aug 2020 20:18

Re: RFORTH

Post by kozzdo »

Что интересно, вновь создаваемые слова представляют собой список вызываемых подпрограмм:
rk86-STC-sample.png
Возникает мысль, что написанную на этом форте программу можно запустить извне из какого-нибудь простенького кода, и потом в этот же код и вернуться. Все еще не до конца понятно, как это оно просто вызывает через call куски кода и совсем не заботится о сохранении регистров и т.п.
Но уже становится интереснее.
You do not have the required permissions to view the files attached to this post.
b2m
Devil
Posts: 907
Joined: 26 May 2003 06:57

Re: RFORTH

Post by b2m »

kozzdo wrote:создаваемые слова представляют собой список вызываемых подпрограмм
Ну так это и называется "подпрограммный шитый код".
kozzdo wrote:Все еще не до конца понятно, как это оно просто вызывает через call куски кода и совсем не заботится о сохранении регистров и т.п.
Это потому, что назначение регистровых пар BC и HL жёстко определено. HL указывает на стек данных, но не на самый верхний элемент, а на следующий за ним. А вот самый верхний элемент стека хранится в BC. Такая вот оптимизация. Однако, работа по загрузке и сохранению BC перекладывается на DUP/DROP.

 Вот, например DUP

Code: Select all

    DW ZDUP
    DB 'DUP',83h
LDUP:
    DCX H
    MOV M,B
    DCX H
    MOV M,C
    RET
ZDUP:

Страничка эмулятора наших компьютеров
http://bashkiria-2m.narod.ru/
kozzdo
Novelist
Posts: 34
Joined: 03 Aug 2020 20:18

Re: RFORTH

Post by kozzdo »

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
буду пробовать искать.