Forth на рк-86

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

Moderator: Shaos

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

Re: RFORTH

Post by b2m »

kozzdo wrote:Еще сегодня смотрел код amforth для контроллеров atmel, там шитый код тоже подпрограммный
Что то не похоже это на подпрограммный, это скорее косвенный шитый код.
DO_NEXT считывает адрес словарной статьи из шитого кода, а далее
DO_EXECUTE считывает адрес программного кода и затем переходит туда.
Страничка эмулятора наших компьютеров
http://bashkiria-2m.narod.ru/
b2m
Devil
Posts: 907
Joined: 26 May 2003 06:57

Re: RFORTH

Post by b2m »

kozzdo wrote:я подозреваю, что в РК форте тоже есть похожий механизм do_colon, do_execute и do_next
буду пробовать искать.
do_colon это вызов форт-слова, а do_next переход к следующему слову в определении форт-слова. В подпрограммном шитом коде такого нет, т.к. форт-слово это просто обычный код для процессора. do_execute конечно же имеется:

Code: Select all

    DW ZEXECUT
    DB 'EXECUT',86h
LEXECUT:
    PUSH B
    CALL LDROP
    RET
ZEXECUT:
В этом форте есть несколько мест, где после CALL LDROP стоит RET, это конечно же можно оптимизировать в JMP LDROP.
Страничка эмулятора наших компьютеров
http://bashkiria-2m.narod.ru/
kozzdo
Novelist
Posts: 34
Joined: 03 Aug 2020 20:18

Re: RFORTH

Post by kozzdo »

b2m wrote: В этом форте есть несколько мест, где после CALL LDROP стоит RET, это конечно же можно оптимизировать в JMP LDROP.
Ну вообще конечно суперски элегантное решение переходить через RET на подсунутый в стек адрес, сейчас поиграюсь. Заодно и дополнительные комментарии сделаю в листинге, где найду эти конструкции.

Доставляет удовольствие слияние команд форта с машинным кодом (я о сохранении регистров через DUP и вызовы через DROP RET)

Опять же, стало понятно, почему и как отрабатывает вот это слово:

: EDIT 0 EXECUT; WORDS QUIT

в том смысле, что после выхода из Микрона оно прыгает по сохраненному в стеке возврата адресу обратно в форт и тут же вызывает последовательно WORDS и QUIT
В этом, возможно, суть использования RET а не JMP?
b2m
Devil
Posts: 907
Joined: 26 May 2003 06:57

Re: RFORTH

Post by b2m »

kozzdo wrote:Опять же, стало понятно, почему и как отрабатывает вот это слово:

: EDIT 0 EXECUT; WORDS QUIT
А почему точка с запятой не в конце?
Скорее уж так (пробел перед ; тоже важен):

Code: Select all

: EDIT 0 EXECUT WORDS QUIT ;
kozzdo wrote:В этом, возможно, суть использования RET а не JMP?
Суть в другом, даже если используется JMP на другую процедуру, в конце её всё равно будет RET
Страничка эмулятора наших компьютеров
http://bashkiria-2m.narod.ru/
kozzdo
Novelist
Posts: 34
Joined: 03 Aug 2020 20:18

Re: RFORTH

Post by kozzdo »

Про слово EDIT это мой воспаленный рассудок навыдумывал того, чего автор не подразумевал. Я с чего-то подумал, что оно откомпиллируется целой строкой. На самом деле, конечно же, на точке с запятой компиляция заканчивается, а WORDS лишь позволяет увидеть что новое слово уже появилось в словаре.

про неизбежный RET согласен, да.

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

Re: RFORTH

Post by Lavr »

kozzdo wrote:Вообще, этот форт это какой-то ассемблер на стероидах, ...
Когда я его здесь реанимировал, мне было интересно посмотреть, как в принципе реализуется "шитый код".
А этот форт от Н. ШИХОВа весьма компактный для такой цели, да к тому же и работает ещё! :lol:
iLavr
b2m
Devil
Posts: 907
Joined: 26 May 2003 06:57

Re: RFORTH

Post by b2m »

Да, форт Шихова весьма оптимально реализует подпрограммный шитый код для i8080.
Страничка эмулятора наших компьютеров
http://bashkiria-2m.narod.ru/
kozzdo
Novelist
Posts: 34
Joined: 03 Aug 2020 20:18

Re: RFORTH

Post by kozzdo »

Этот форт стабильно работает и я оставлял в эмуляторе работающие небольшие программки на несколько суток и они продолжали работать ))) Проблема этого форта в том, что он совершенно лишен защиты от дурака. Любое неверное движение во время интерпретации и все летит в тартарары. Например можно запросто все убить неаккуратным использованием [ или ] ну и так далее. Т.е. следить надо не только за стеком, но и за системными разными переменными.
А так было бы интересно реализовать тетрис или xonix на этом форте, по идее ничего этому не препятствует.
И еще хочется подключить свой старенький РК через последовательный терминал, без дисплея. Но это надо немного паяльником потыкать, т.к. плата прожила трудную жизнь )))) включая затопление и несколько лет в сыром подвале. Последний раз включалось, я думаю, году в 93м. Визуально вроде все живо, но надо чистить, тестировать и понемногу включать (плюс еще эти долбаные три питающих напряжения). Опять же, надо ром-диск какой-никакой...
b2m
Devil
Posts: 907
Joined: 26 May 2003 06:57

Re: RFORTH

Post by b2m »

kozzdo wrote:И еще хочется подключить свой старенький РК через последовательный терминал, без дисплея.
И как потом с этим чудом работать? РК со стандартным биосом вообще ничего про последовательный интерфейс не знает. Это-ж надо биос править...
Страничка эмулятора наших компьютеров
http://bashkiria-2m.narod.ru/
kozzdo
Novelist
Posts: 34
Joined: 03 Aug 2020 20:18

Re: RFORTH

Post by kozzdo »

Про это будет знать форт. У Шихова в обучающем примере упоминается. Там предлагается использовать свободный порт ВВ55 и соответствующие драйверочки. ВВшку с ее параллельным портом можно в теории через ардуинку подцепить к юсб порту компьютера. Опять же, где-то что-то там было у меня на ВВ51 собрано тоже (детали не помню, хотел телетайп принимать, кажется, с эфира).

 
(" ДОПУСТИМ У НАС ОТДЕЛЬНЫЙ ТЕРМИНАЛ, С КОТОРЫМ ЕСТЬ СВЯЗЬ
ЧЕРЕЗ ПОРТ К580ВВ55 КАНАЛ A В РЕЖИМЕ 2 ")
: PPAINI -1 BFF3 C! 0D BFF3 C! 9 BFF3 C! BFF0 C@ DROP ;
    PPAINI (" ИНИЦИАЛИЗАЦИЯ ПОРТА ")

: INT7 BEGIN BFF2 C@ 8 AND IF ELSE REPEAT ;
(" ОЖИДАНИЕ БИТА ПРЕРЫВАНИЯ ")

: TRMO INT7 BEGIN BFF2 C@ 80 AND IF BFF0 C! ELSE REPEAT ;
(" ПОДПРОГРАММА ВЫВОДА БАЙТА В КАНАЛ A ")

: TRMI INT7 BEGIN BFF2 C@ 20 AND IF BFF0 C@ 7F AND ELSE REPEAT ;
(" ПОДПРОГРАММА ВВОДА БАЙТА ИЗ КАНАЛА A ")

(" СЕЙЧАС ДОСТАТОЧНО ЗАПИСАТЬ АДРЕСА ПОДПРОГРАММ
      TRMI В (KEY), A TRMO В (EMIT)
НАПРИМЕР, ТАК :
      ' TRMI (KEY) ! ' TRMO (EMIT) !
И ВАША МАШИНА БУДЕТ РАБОТАТЬ
БЕЗ МОНИТОРА ДИСПЛЕЯ И КЛАВИАТУРЫ")

aav8
Maniac
Posts: 287
Joined: 05 Nov 2008 19:47
Location: 81.28.208.238

Re: RFORTH

Post by aav8 »

b2m wrote:И как потом с этим чудом работать? РК со стандартным биосом вообще ничего про последовательный интерфейс не знает. Это-ж надо биос править...
У меня есть сильно модифицированный вариант CP/M - там есть все эти хотелки (RS232):
терминал, файловая система на неком сервере под WinXX.
В качестве терминала - HyperTerminal на WinXX.
Можно одновременно работать в Win и на самой машинке (Партнер 01.01).
8 букв устройств CP/M отображаются на каталоги Win.
Можно добавить SD-карточку.
РК-86 видит родной ROMDISK (на ВВ55).
начало было отсюда:
viewtopic.php?f=94&t=19620
в принципе оно работоспособно...
kozzdo
Novelist
Posts: 34
Joined: 03 Aug 2020 20:18

Re: RFORTH

Post by kozzdo »

ну CP/M это отдельная интересная тема )))
b2m
Devil
Posts: 907
Joined: 26 May 2003 06:57

Re: RFORTH

Post by b2m »

kozzdo wrote:Про это будет знать форт.
Я про то, что форт тоже надо будет как-то загрузить и запустить. Вслепую с магнитофона? Или в ПЗУ его записывать и стартовать после инициализации биоса автоматом?
Страничка эмулятора наших компьютеров
http://bashkiria-2m.narod.ru/
User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Re: RFORTH

Post by Lavr »

kozzdo wrote:Проблема этого форта в том, что он совершенно лишен защиты от дурака.
Ну если в этот Форт добавить "защиту от дурака", он явно станет зело "толще", чем ! :lol:
А это совсем скучно будет... компилятор, размером в - сам по себе весьма интересен! :kruto:

Кстати, интересно, как Шихов его писал - ядро на ассемблере, а потом раскручивал на самОм Форте?
iLavr
kozzdo
Novelist
Posts: 34
Joined: 03 Aug 2020 20:18

Re: RFORTH

Post by kozzdo »

2 b2m -- однако да, надо мастрячить клавиатурку какую-никакую, а у меня еще и орион есть... правда в несколько более плачевном состоянии, но все равно клавиатура не помешает ))) Мысли именно такие - грузиться с ром-диска и далее запускаться из монитора. Но это все не особо первоочередные задачи, тут на изыскания текущие вполне достаточно эмулятора, еще ковырять не перековырять всю эту тему...

2 Lavr мне показалось, что Шихов достаточно серьезный программист, код довольно прикольно местами закручен. Интересно, он вообще жив еще? )))) Но как бы там ни было, этот форт очень помогает мне приблизиться к конечной цели - запустить шитый код на ардуинке, причем для вполне конкретных практических применений.

Из текущих моих разборок, выяснил, как отрабатывает кусок кода по адресу 0A06H, который после вызова CALL 0A06H распечатывает весь текст под ним, пока не встретится FF.
Очень интересно там через стек в регистр B перебрасывается адрес, следующий после вызова этой подпрограммы. А дальше, по сути, кхе кхе отрабатывает TYPE, который использует EMIT. TYPE в норме адрес начала текста как раз и забирает через значение в регистре B (вершина параметрического стека) Все смешалось, люди, кони... Ассемблер и форт... прикольно.
И через эту приблуду, кстати, выводятся все эти системные > ? и СТЕК ПУСТ :kruto: :kruto: :kruto:

Я понимаю, что вы это уже все опробовали и обкатали, но тем не менее, я еще поделюсь чем-нибудь по мере продвижения в разборе кода.