Forth на рк-86

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

Moderator: Shaos

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

Re: RFORTH

Post by b2m »

Интересный вариант форта. И если lsforth это тот же Кириллин-Клубович-Ноздрунов с прямым шитым кодом (описанный в их книге), то форт Шихова - это уже реализация с подпрограммным шитым кодом. До сих пор мне не встречался, по крайней мере на отечественных восьмибитках. Видимо никто не решился набивать дамп из журнала Радио. Сам он писал или содрал откуда - сказать сложно, но если Шихов был фортером, то и писал он его скорее всего на форте, иначе сложно объяснить постоянные CALL DROP / RET вместо JMP DROP в словах использующих верхний элемент стека, который находится в регистрах BC.

Целевая компиляция у фортеров это как тест, после прохождения которого (т.е. создав форт для другой платформы) можешь считаться фортером :)

Данному форту нехватает очень многого, чтобы считаться фортом, соответствующему стандарту, но то, что это минимальное ядро форта - это неоспоримо.

Code: Select all

L0810:
  MVI  D,08H            ;0810  16 08
  NOP                   ;0812  00
  POP  B                ;0813  C1
  POP  D                ;0814  D1
  RET                   ;0815  C9
Да, первую фиктивную словарную статью ты просмотрел :) Между прочим она играет важную роль в цикле INTERPRET. Обычно он бесконечный, но чтобы его закончить в конце текста, делают фиктивное слово, совпадающее с кодом символа в конце текста (в данном случае ноль), выполняемое IMMEDIATE, и делающее выход из INTERPRET (в данном случае POP D / RET).
Last edited by b2m on 03 May 2020 09:50, edited 1 time in total.
Страничка эмулятора наших компьютеров
http://bashkiria-2m.narod.ru/
b2m
Devil
Posts: 905
Joined: 26 May 2003 06:57

Re: RFORTH

Post by b2m »

Lavr wrote:Компилируется без ошибок с совпадением всех контрольных сумм.
Работает под RAMFOS также, как оригинал.
А в других адресах? ;)
Страничка эмулятора наших компьютеров
http://bashkiria-2m.narod.ru/
b2m
Devil
Posts: 905
Joined: 26 May 2003 06:57

Re: RFORTH

Post by b2m »

Кстати, демонстрационная программа содержит некоторые недостающие части этого форта, а также полезные пояснения.

Там есть опечатки!!!
: IMMEDIAT ' I - DUP CR 40 OR SWAP C! ;
: (KEY) R0 1+ ; СR .. (КЕТ) @ . (" МАШИННО ЗАВИСИМЫЙ АДРЕС ПОДПРОГРАММЫ ВВОДА = F803 "") CR
: (ENIT) R0 2+ 2+ ; CR .. (ENIT] @ . (" МАШИННО ЗАВИСИМЫЙ АДРЕС ПОДПРОГРАММ ВЫВОДА F809 "") CR
: (LAGT) (ENIT) 2+ ; CR CR .. (" АДРЕС НАЧАЛА ПОСЛЕДНЕГО СЛОВА В СЛОВАРЕ НАХОДИТСЯ В ЯЧЕЙКЕ "") (LAST) .
Удвоенные кавычки в конце строки "") тоже опечатка, нужен только один символ кавычек.
Страничка эмулятора наших компьютеров
http://bashkiria-2m.narod.ru/
b2m
Devil
Posts: 905
Joined: 26 May 2003 06:57

Re: RFORTH

Post by b2m »

b2m wrote:Удвоенные кавычки в конце строки "") тоже опечатка, нужен только один символ кавычек.
З.Ы. Однако не факт.

Попробовал оба варианта:
(" TEST"") печатает текст, в стандарте вроде нужно писать ." TEST"
(" TEST") просто комментарий, в стандарте ( TEST )
Страничка эмулятора наших компьютеров
http://bashkiria-2m.narod.ru/
User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

Re: RFORTH

Post by Lavr »

Lavr wrote:
Lavr wrote:...а автор утверждает, что фактически стандарт FORTH 83, то вот ссылка на автора:
Язык Форт для "Радио-86РК". Н.Шихов, г.Козьмодемьянск, Республика Марий-Эл
И как он сам пишет - алгоритм у него несколько не такой, как в стандартных FORTH-ах.
Ну это подробнее лучше прочитать по ссылке выше, хотя там очень небрежный OCR... :-?
Эту статью автора много где в Интернете продублировали, но всюду - куча ошибок OCR,
заметных невооруженным глазом даже людям, далёким от FORTH-а, но знакомым с программированием.

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

Поэтому сканы "в студию" я тоже выкладываю:
Forth_RK86.part1.rar
Forth_RK86.part2.rar
(порезано rar-ом на 2 части из-за ограничений форума на размер вложения)

Но честно скажу, что и по сканам порой приходится угадывать по смыслу: точки, апострофы, кавычки
и на сканах весьма неуверенно местами различимы...

Ну и я сам сейчас по тексту и сканам проверяю, что делает этот FORTH, а чего не делает...
You do not have the required permissions to view the files attached to this post.
iLavr
User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

Re: RFORTH

Post by Lavr »

[offtop]
Lavr wrote:Язык Форт для "Радио-86РК". Н.Шихов, г.Козьмодемьянск, Республика Марий-Эл
Если все обратили внимание, г.Козьмодемьянск приводит меня в эйфорию! :esurprised:
А зря я вообще насмешки пытался строить... город, как город...
город Козьмодемьянск, Республика Марий Эл - административный центр Горномарийского района

Кое-чем город Козьмодемьянск даже весьма знаменит! :roll:
Город Козьмодемьянск по многим признакам очень похож на описываемый в романе Ильфа и Петрова "Двенадцать стульев" город Васюки. После долгих исследований романа (а таковые серьезно проводились и литературоведами, и любителями) статус Козьмодемьянска - Васюки был подтвержден, и эта идея стала серьезным увлечением козьмодемьянцев. Так был создан Музей сатиры и юмора им.Остапа Бендера.
[/offtop]

 P.S. Немножко про "город Козьмодемьянск"
Lavr wrote:P.S. Немножко про "город Козьмодемьянск" - я думаю, вряд ли кто понял, в чем дело.
А дело в том, что статью Шихова я просматривал ещё в оригинале в 1995 году в
журнале "Радио", поскольку я этот журнал выписывал. "Просматривал" - поскольку
язык Форт меня тогда не интересовал. Ну и поскольку,
как убедительно показал тут один наш коллега, читаем мы не по буквам, а слова целиком,
то этот город у меня прочитался тогда как КоСмодемьянск, и в памяти это отложилось.
С тех пор, когда мне встречалась эта статья, реакция была:"а... Шихов... город
КоСмодемьянск...". Человеку, выросшему в стране с городами Киров, Куйбышев и т.п.
это слово глаз совершенно не резало... Интересно, что когда я читал эту статью
уже внимательно здесь: http://www.danbigras.ru/RK86/Fort_RK/FORT_RK.html, как ни
странно, КоСмодемьянск опять остался КоСмодемьянском! :roll:
И только вот здесь https://subscribe.ru/archive/comp.soft. ... 14028.html
я вдруг неожиданно четко увидел - КоЗЬмодемьянск! :esurprised:
Они что, глумятся? :o - такая у меня была первая реакция, тут-то я и полез в Гугл...
:wink:

iLavr
User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

Re: RFORTH

Post by Lavr »

День Радио я опять провёл с пользой и демонстрационную программу от Шихова
на его FORTH-е для "Радио-86РК" довёл-таки до ума! :kruto:

Да уж... пока наберешь демонстрационную программу от Шихова, весь FORTH
непеременно изучишь... :roll:
Тем более, что реально некоторые пробелы очень важны, а я работал в
ассемблерном редакторе "Специалиста_МХ", который любит удалять концевые
пробелы и вставлять символ табуляции в начале строки... :-?
Также выяснилась неприятная вещь, что FORTH от Шихова работает сугубо в
КОИ-7
, все символы старше 7FH он считает концом строки.

И конечно же меня больше волновало, работает ли сам FORTH, или таки есть
ошибки в набранном мной дампе.
Тем более, что некоторые фокусы FORTH-а меня поначалу очень озадачили...

Ниже на картинке - так он показывает числа 0F803H и 0F809H в HEX-виде :
FORTHPRG.gif
Но в десятичном виде - это совершенно правильно (числа со знаком).

Также есть ошибки в самом оригинальном листинге:

Code: Select all

: OCTAL 2 (BASE) C! ;
(" OCTAL УСТАНОВИТ ВОСЬМИРИЧНУЮ СИСТЕМУ СЧИСЛЕНИЯ ")
В тексте статьи есть такой же пример:

Code: Select all

: OCTAL 8 (BASE) C! ;
(" OCTAL УСТАНОВИТ ВОСЬМИРИЧНУЮ СИСТЕМУ СЧИСЛЕНИЯ ")
В общем для всех, кто надумал приобщиться к FORTH-у на привычных нам
"ламповых" 8-битках, выкладываю архив с "правильными файлами":
FORTHR86.zip
В архиве:
FORTHPR7.ASM - это в КОИ-7 - для тех, у кого "РК-86" или эмулятор -> 2100H;
FORTHPR8.ASM - это в КОИ-8 то же самое;
FORTHPRG.ASM - это в WIN-1251 то же самое;
FORTHPRG.rtf - это для эстетов: подсвечена латиница и цифры.
Шутка, конечно, но так я выявил много ошибок OCR. :wink:

FORTH86.ALL - а это для владельцев эмулятора "Специалиста_МХ" от Шевцова.

Здесь полный "фарш", плюс бонус - перекодировщик (в коллекцию Fifan-a).
FORTH_SP.gif
Загружаем FORTH86.ALL, запускаем FORTH86.EXE и приобщаемся к FORTH-у... :lol:

Если всё промелькнуло очень быстро, делаем побольше задержку процессора:
(300...500H) после чего: COLD и [Enter].

И как там написано в конце цикла статей Шихова:"Желаю удачи!" :ebiggrin:
You do not have the required permissions to view the files attached to this post.
iLavr
User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

Re: RFORTH

Post by Lavr »

Ну и, я думаю, материалы статей Н.Шихова в приличном качестве надо тоже здесь выложить.
На тот случай, когда у меня снова жесткий диск рухнет, или ноутбук прикажет долго жить... (щютка) :lol:
Язык Forth.zip
Когда я новый для себя материал читаю, обычно делаю собственный "дайджест":
и читаю при этом внимательней, получается, и непонятные фразы рихтую...

Впрочем, Н.Шихова я сильно не правил, разве что слово "кладём" всюду по тексту
заменил на "заносим"... "кладём" - как-то глаз режет... :wink:

Ну и все примеры я на FORTH-е не проверял, скажу честно, хотя кое-что мне весьма
пригодилось при отладке демонстрационной программы.
А формат *.rtf - на тот крайний случай, когда и М$ Ворда нет...
You do not have the required permissions to view the files attached to this post.
iLavr
User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

Re: RFORTH

Post by Lavr »

Я тут Интернет прошариваю частым бреднем в поисках примеров каких-либо законченных
и полезных программ на FORTH, чтобы посмотреть, как умные люди пишут хорошие программы
на нём. Но пока всё как-то безуспешно, как будто все фортеры вымерли... :osad:

Интересно, что сайтов по FORTH-у много, в 100 глоток FORTH хвалят, но путных примеров
законченных программ пока не встретил. Либо ссылки давно протухшие. :-?

Но по пути нашел исходники FORTH-а для 6502, вроде как даже фирменная версия от
; FORTH INTEREST GROUP
; P.O. BOX 2154
; OAKLAND, CALIFORNIA
Если кому-либо интересно, то вот они эти исходники:
forth65.zip
You do not have the required permissions to view the files attached to this post.
iLavr
User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

Re: RFORTH

Post by Lavr »

Lavr wrote:Попробую запустить под эмулятором "Специалиста_МХ", системные вызовы стандартные -
должно получиться...
...под RAMFOS этот FORTH нормально запускается, поскольку системные вызовы стандартны.
Я декомпилировал Редактор EDIT_MX из пакета RAMFOS и "срастил" его
с имеющимся FORTH-ом. Получился довольно удачный пакет FORTHED_MX,
в котором FORTH и EDIT_MX удачно взаимодействуют друг с другом и
пользуются всеми удобствами OS RAMFOS.
forthed.gif
Пока тестирую и выявляю баги, фичи и разные прочие несуразности...

В частности, непонятно мне было, если брать что-то из пустого стека,
FORTH должен ответить "СТЕК ПУСТ" (я заменил на EMPTY!, чтобы не
было русского КОИ-7).
FORTH так и делает, но перед "СТЕК ПУСТ" выводит всё же какое-то
число. :o Я думал - ошибка, оказалось - фича! :wink:
FORTH просто по алгоритму сначала печатает пару ВС, а уж потом
проверяет, что "СТЕК ПУСТ", но в паре ВС - всегда что-то есть! :roll:

Ну и еще встречались багофичи не критические, которые надо бы проверить.
Сам FORTH работает... Как закончу всё это - пакет выложу...

И нашел я замечательный сайт с материалами по FORTH-у, которые написаны
так, как я люблю: кратко, четко, понятно, с примерами по делу!
И не надо мне рассказывать, что яблоко - это тоже "объект" со своими
свойствами и методами! Яблоко в нашем деле - это просто яблоко!
:-?

Сайт этот посвящен компьютеру Jupiter ACE: http://jupiter-ace.co.uk/usermanual.html
Там выложены мануалы на этот компьютер, описание его FORTH-а, примеры...

Ниже - краткий дайджест слов FORTH-а от Jupiter ACE.

 Jupiter ACE Reference
JA-Reference.gif

Контурами обведены слова, совпадающие с FORTH-ом "Радио-РК86".
Да, FORTH от Jupiter ACE побогаче будет! Но у него и размер - 8КБайт,
супротив нашего - 2КБайт...

В общем, читал я мануал Jupiter ACE по его FORTH-у и вспоминал, что
программировать в кодах я учился по мануалу от "Микроши", там было
тоже кратко и понятно изложено всё... :kruto:

В общем, кто хочет поиграть в FORTH, но FORTH от "Радио-РК86" ощущает
убогим - рекомендую, там есть эмулятор Jupiter ACE и весь софт на сайте
имеется...

Нет, конечно, если хотите приобщиться к великому, читайте Leo Brodie -
"Thinking FORTH"... :esurprised:
eggs.gif
Но когда меня пытаются научить программированию на яблоках и яйцах,
я такое читать не могу... Хотя осилил главу: яйца... яйца... яйца... :-?
You do not have the required permissions to view the files attached to this post.
iLavr
User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

RFORTH - Hanoi

Post by Lavr »

Чтобы немного освоиться с языком FORTH, я решил попрактиковаться
в написании законченной программы на нём, но поскольку я этого
никогда не делал, я выбрал в качестве прототипа игру Towers of Hanoi
из программ для компьютера Jupiter ACE, поскольку его FORTH более
близок к тому, на чем я решил поупражняться. Тем более, что алгоритм
был мне знаком, я такую игрушку ковырял, еще когда учился под Windows
программировать на всяких ВАСЮКАХ. :wink:
HANOIW.gif
Всё остальное, что пишут в умных книгах, от этих двух версий FORTH
довольно-таки далеко, хотя первые страниц так 20...30 об основах
языка FORTH во всех книгах примерно одинаковы.

Ну и Башни Hanoi я решил "расточить" сразу под управление мышью в среде
RAMFOS эмулятора "Специалиста_МХ", что позволяет мой "мышиный загрузчик"
программы-эмулятора: viewtopic.php?f=81&t=19664&start=15
Тем более, что игра неспешная, потыкать мышью - самое то! :kruto:

В общем-то это всё у меня довольно-таки успешно получилось:

 Скриншот Towers of Hanoi SPMX
Hanoi580.gif

Выкладываю архив со всеми файлами исходниками, ремиксом и др.
Hanoi.zip
Там же в архиве исходник редактора EDIT_MX, который я перенёс на адреса
0000Н - ниже FORTH-а, который остался на своём месте с адреса 0800Н.
Служебные ячейки FORTH-а используются во многих примерах и подпрограммах,
и пришлось бы их править все, что совершенно излишне, на мой взгляд.
Тем более, что кодофайл FORTH-а расположен сразу после него до области
текста программы с адреса 2100Н - это я в EDIT_MX подправил...

А вот что я не подправил, ибо непонятно было, кого подправить, FORTH или
EDIT_MX - это стоп-байты. EDIT_MX использует стоп-байт 0FFH в качестве
метки конца текста, а FORTH считает концом текста байты 00H, 00H, а на
байт 0FFH он не реагирует, и если дальше в памяти остался какой-то текст,
FORTH будет его читать, пока не встретит байты 00H, 00H. :-?

Поскольку хотелось позаниматься FORTH-ом, а не ковырять EDIT_MX, я решил
проблему "костыликом" - там в пакете утилита CLEARMEM, которая чистит
память байтом 00H до HIMEM.
Так же в EDIT_MX запуск FORTH-а возможен по [F6 - 4TH] и [F7 - COD].
[F7 - COD] - я предполагал сохранять FORTH с расширенным кодофайлом, но
для этого места в коде EDIT_MX пока не нашлось.

Писать программу на FORTH-е можно в любом удобном редакторе, лучше в КОИ8
или только на английском. Для конвертации текста в формат, совместимый
с эмулятором Шевцова, я тут небольшую утилиту выкладывал.

Что касается FORTH-а - тут надо быть осторожным, ибо он действительно ни
за чем не следит, кроме вершины своего кодофайла. Если что-то не так пошло,
легко обрушит всю OS RAMFOS, ибо она вся в ОЗУ. :-?

И второй момент - надо быть очень внимательным с пробелами, точками и
переносом строки.
К примеру:

Code: Select all

: LIST[0D]
BEGIN
...
REPEAT ;
FORTH скомпилирует в новое слово LIST[0D]BEGIN , а вот

Code: Select all

: LIST[0D]
[20]BEGIN
...
REPEAT ;
это он скомпилирует правильно!

Также несколько иначе работает: ."текст" - лучше: ." текст".
но если

Code: Select all

."       текст      1      2      3"
то лидирующие пробелы FORTH уберет.
Слово EMIT выводит любые коды на экран.
С остальными словами - сложнее. Байт старше 7FH считается стоп-байтом
конца строки, где младшие 7 бит несут информацию о её длине.

А так в общем-то язык простенький, легкий для освоения, только вот в
словах его и своих на второй день начинаешь путаться, поэтому по ходу
дела я вручную "подсвечивал" и оригинал Hanoi и свой ремикс... :lol:

Ну и в итоге я-таки не понял одного: какие-такие бухгалтерские расчеты
мечтал Шурик выполнять на своём "Специалисте" под FORTH-ом, сидя в деревне.
Любой ВАСИК, на мой взгляд, способен был делать это лучше, ибо даже в
самом неудобном ВАСИК-е от Волкова плавающая арифметика-таки нормально
приделана была, ибо, как мы выяснили, её написал ещё друг Билла...
:wink:
You do not have the required permissions to view the files attached to this post.
iLavr
User avatar
shoorick
Doomed
Posts: 487
Joined: 05 Nov 2007 05:08
Location: Украина

Re: RFORTH

Post by shoorick »

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

для обработки статистики прививок мне в васике не хватало памяти. мне бы хватило байта, а обычная переменная занимала три байта - сечас понимаю, что можно было хранить как символы, обращаясь через chr/val, но тогда был аврал и выдумывать было некогда.

попади сейчас в то время, я бы вообще на асме бы сделал - нужно было только процедуры преобразования чисел в строку и наоборот иметь, и многобайтные операции.
User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

Re: RFORTH

Post by Lavr »

shoorick wrote:В далеком 2001 году написал русифицированный форт для дос :)
pfile.png
Недавно решил его "реанимировать". Переписывать, конечно, не собираюсь :)
Портировал на фасм и добавил внутрь русификацию.
В свете прочитанного мной про язык ФОРТ за эту неделю, "добавил внутрь русификацию"
ты как-то вот так? :wink:

Code: Select all

: НАЧИНАЙ BEGIN ;
: ЕСЛИ IF ;
: ИНАЧЕ ELSE ;
: ТОГДА THEN ;
и т.п.
You do not have the required permissions to view the files attached to this post.
iLavr
User avatar
shoorick
Doomed
Posts: 487
Joined: 05 Nov 2007 05:08
Location: Украина

Re: RFORTH

Post by shoorick »

если честно - уже не помню что на что я менял :)
в таком способе русификации могут быть подводные камни: возможно, некоторым словам понадобится флаг IMMEDIATE после объявления ;)
User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

Re: RFORTH

Post by Lavr »

shoorick wrote:если честно - уже не помню что на что я менял :)
Ну я не конкретно, а в принципе спросил про способ...
shoorick wrote:в таком способе русификации могут быть подводные камни: возможно, некоторым словам понадобится флаг IMMEDIATE после объявления ;)
А вот флаг IMMEDIATE г-н Шихов меня менять научил! :wink:
iLavr