nedoPC.org

Electronics hobbyists community established in 2002
Atom Feed | View unanswered posts | View active topics It is currently 28 Mar 2024 07:59



Reply to topic  [ 85 posts ]  Go to page Previous  1, 2, 3, 4, 5, 6  Next
RFORTH 
Author Message
Devil

Joined: 26 May 2003 06:57
Posts: 859
Reply with quote
Lavr wrote:
А там где есть и аппаратный стек, и развитая косвенная адресация (как в z80) - там удивляться
особо нечему...

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

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

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

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

Предположим, что текущий указатель на форт-программу у нас в INDEX1. Тогда адресный интерпретатор сократится лишь до 4-х команд:
Code:
CLA
TAD I INDEX1
DCA TEMP1
JMP I TEMP1

Эти команды нужно ставить в конце ассемблерных слов вместо RET, ну или оформить в виде процедуры NEXT.
Конечно, как и в любом форте с прямым шитым кодом, форт-слово будет начинаться вызовом JMS I [CALL], а завершаться словом EXIT. Но учитывая, что в конечном счёте чаще всего будут вызываться ассемблерные слова, в которых этих вызовов конечно нет, то исполнение будет гораздо быстрее. И это не учитывая того, что прямой шитый код в два раза компактнее.

_________________
Страничка эмулятора наших компьютеров
http://bashkiria-2m.narod.ru/


23 May 2020 05:22
Profile WWW
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
b2m wrote:
...наличие у PDP-8 автоинкрементной индексации позволяет сделать форт с прямым шитым кодом, который будет гораздо эффективнее того, что реализовано Джоном.

К сожалению, я не нашел никакой другой FORTH под PDP-8, хотя и потратил на это
достаточно времени.
Вот этот вариант: https://github.com/larsbrinkhoff/xForth/tree/master/target/pdp8
from Lars Brinkhoff, на мой взгляд, представляет меньший практический интерес с той
точки зрения, как реализовать стековый язык на принципиально бесстековой машине.

_________________
iLavr


23 May 2020 13:16
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
b2m wrote:
и чтобы запустить этот форт, традиционно допилил свой эмулятор:
Ну это у тебя простенько получилось... подшаманил TTY и форт запустился! :lol:
А я голову ломаю: ну почему Форт из 1984 года под PDP-8 норовит разговаривать на русском языке? :o
Attachment:
FORTH8.gif
FORTH8.gif [ 7.7 KiB | Viewed 7002 times ]

А это автор эмулятора - некий Brian J. Shelburne (др.Пх.) - оказался редким юмористом! :mrgreen:
Надо будет посмотреть, не англичанин ли он, с таким чувством юмора... :-?
У него PDP-8 работает в современной кодировке ASCII и про вот эту таблицу ровным счетом ничего не знает! :ebiggrin:
Attachment:
PDP8ASCI.gif
PDP8ASCI.gif [ 7.15 KiB | Viewed 7002 times ]

Фразу Forth-8 by John Wilson это уже я подправил, а то ведь сплошной родной абсценный язык был! 8)
Но упакованные фразы Форта я, видимо, никак исправить не смогу... :osad:

Нет, ну я понимаю, написал бы честно, что кодировка современная, чтобы студентам головы не морочить...
А то ведь на голубом глазу рассказывает вот такие "правдивые" вещи:
Attachment:
RIM.gif
RIM.gif [ 19.48 KiB | Viewed 7002 times ]

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

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

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

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

 RIM-LOADER
Code:
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".

_________________
iLavr


24 May 2020 19:17
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
И положу-ка я здесь, пожалуй инструменты, на случай, если снова понадобится PDP-8. :wink:

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

Эмулятор PDP-8 от Brian J. Shelburne вобще пришлось извлекать с интернет-помойки,
а там в комплекте - хорошее описание и PDP-8, и как на ней работать.
Attachment:
PDP8EM.zip [1.35 MiB]
Downloaded 330 times


Ну и кросс-ассемблер PAL от Gary A. Messenbrink мне попался очень хороший - собирается и под DOS и под Win.
Attachment:
PAL-8E.zip [106.63 KiB]
Downloaded 322 times

Работает без каких-либо нареканий, то есть - весьма хорошо! :kruto:

Оба продукта тестировал под Win-7 - всё совместимо безо всяких DOS-боксов.

_________________
iLavr


24 May 2020 19:48
Profile
Writer

Joined: 03 Aug 2020 20:18
Posts: 20
Reply with quote
Всем привет! вот же удивительно, я с весны увлекся идеями реализации форта на имеющихся у меня железках, а тут смотрю дискуссия вполне живая, нынешнего года.

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

просто, в двух словах, хочу реализовать собственную версию форта по старым книжкам 70х годов с тем, чтобы в деталях понять, как форт работает изнутри. установил себе эмулятор рк-86, вроде как поднял на нем весь пакет для ассемблирования и т.п. , мал помалу надеюсь освоить на старости лет.


03 Aug 2020 20:23
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
kozzdo wrote:
Форт мне нужен по большей части для ардуинок и прочей подобной мелочевки, но поскольку у меня еще живы в железе рк-86, орион-128 и бк0010, то было бы неплохо поиграться и на них.

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

Я, кстати, тоже заинтересовался Фортом из-за простоты написания компилятора.
Форт от Н. ШИХОВа меня вполне удовлетворил, как размером, так и реализацией самой идеи.

_________________
iLavr


06 Aug 2020 03:11
Profile
Doomed
User avatar

Joined: 04 Jan 2016 09:15
Posts: 649
Location: Russia, S.- Peterburg
Reply with quote
Можно здесь посмотреть интересный проект 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. Запустил. Дальше по документации.

Code:
$ ./bin/retroRETRO 12 (2020.7)
524288 Max, 14943 Used, 509345 Free

_________________
"Ученье свет, а неученье — тьма. Дело мастера боится, и коль крестьянин не умеет сохою владеть — хлеб не родится." (С)


06 Aug 2020 06:20
Profile WWW
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
askfind wrote:
FORTH написан на чистом Си. По сравнению с реализацией на ASM, легче понять ядро системы.

Вобще, как выяснилось, приличный FORTH фортеры пишут на чистом FORTH-е. :wink:
Поэтому у меня большие сомнения, что на чистом Си легче понять ядро системы
по сравнению с ASM... :lol:

_________________
iLavr


06 Aug 2020 11:37
Profile
Writer

Joined: 03 Aug 2020 20:18
Posts: 20
Reply with quote
Lavr wrote:
Форт, что я выкладывал в начале топика - вполне рабочий и с исходным кодом - на повод
поиграться на рк-86, орион-128.

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

Я уже пробовал играться с фортом для ардуинок, еФорт и амФорт, так-то оно как раз, что надо, но без понимания внутренней структуры форт-машины все это бесполезные бирюльки с миганием светодиодом. Интересно также запустить минималистичную форт-машину на attiny контроллерах которые вот эти в восьминожечном корпусе )))) предварительно отладив на ардуинке в интерактивном режиме.


08 Aug 2020 15:57
Profile
Writer

Joined: 03 Aug 2020 20:18
Posts: 20
Reply with quote
Ребята, вы кто-нибудь ковыряли этор РК-Форт дальше? Я попытался найти где у него внешний интерпретатор, но увяз в догадках.

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

Интуиция подсказывает мне, что надо начать с внешнего интерпретатора, чтобы хоть что-то на выходе получить, но чето както не идет.


08 Aug 2021 23:48
Profile
Devil

Joined: 26 May 2003 06:57
Posts: 859
Reply with quote
kozzdo wrote:
ковыряли этор РК-Форт дальше? Я попытался найти где у него внешний интерпретатор, но увяз в догадках.

Если вопрос про форт Шихова, то в нём есть слово INTERPRET, его и смотри.

 Так понятнее?
Code:
    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/


10 Aug 2021 10:12
Profile WWW
Writer

Joined: 03 Aug 2020 20:18
Posts: 20
Reply with quote
b2m wrote:
Если вопрос про форт Шихова, то в нём есть слово INTERPRET, его и смотри.


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

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

UPD никакого NEXT конечно же нет... оно там косвенно, в виде возвратов из подпрограмм...


10 Aug 2021 19:46
Profile
Writer

Joined: 03 Aug 2020 20:18
Posts: 20
Reply with quote
Что интересно, вновь создаваемые слова представляют собой список вызываемых подпрограмм:
Attachment:
rk86-STC-sample.png
rk86-STC-sample.png [ 5.41 KiB | Viewed 4930 times ]


Возникает мысль, что написанную на этом форте программу можно запустить извне из какого-нибудь простенького кода, и потом в этот же код и вернуться. Все еще не до конца понятно, как это оно просто вызывает через call куски кода и совсем не заботится о сохранении регистров и т.п.
Но уже становится интереснее.


10 Aug 2021 22:01
Profile
Devil

Joined: 26 May 2003 06:57
Posts: 859
Reply with quote
kozzdo wrote:
создаваемые слова представляют собой список вызываемых подпрограмм

Ну так это и называется "подпрограммный шитый код".

kozzdo wrote:
Все еще не до конца понятно, как это оно просто вызывает через call куски кода и совсем не заботится о сохранении регистров и т.п.

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

 Вот, например DUP
Code:
    DW ZDUP
    DB 'DUP',83h
LDUP:
    DCX H
    MOV M,B
    DCX H
    MOV M,C
    RET
ZDUP:

_________________
Страничка эмулятора наших компьютеров
http://bashkiria-2m.narod.ru/


12 Aug 2021 01:41
Profile WWW
Writer

Joined: 03 Aug 2020 20:18
Posts: 20
Reply with quote
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
Profile
Display posts from previous:  Sort by  
Reply to topic   [ 85 posts ]  Go to page Previous  1, 2, 3, 4, 5, 6  Next

Who is online

Users browsing this forum: No registered users and 16 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

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Group
Designed by ST Software.