Forth на рк-86

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

Moderator: Shaos

kozzdo
Novelist
Posts: 34
Joined: 03 Aug 2020 20:18

Re: Forth на рк-86

Post by kozzdo »

С шихов-фортом произошел некоторый затык... Касается слова DROP и обработчика ошибки пустого стека (то самое сообщение СТЕК ПУСТ).

Вот ассемблерный код этого слова:

Code: Select all

PUSH AF        ; push psw 
MOV C,(HL)
INX HL
MOV B,(HL)
INR L
JM Error_Handler   ; вот тут, собственно, загвоздка
POP AF
RET

...

Error_Handler:
LXI HL, 0x107E     ; заново инициализируем стек параметров по умолчанию
POP AF
CALL Type_Until_FF ; печатаем СТЕК ПУСТ
DS "\nСТЕК ПУСТ", FFh

...
В чем проблема... Переход на обработчик ошибки происходит по флагу S,

Code: Select all

JM Error_Handler 
который непонятно где и как устанавливается. Понятно одно - если в PSW этот флаг был установлен до вызова слова DROP, то ошибка обрабатывается, а если нет - то можно стек дропать сколько угодно, и эта операция разрушит служебные ячейки форта.

Слово DROP в самом форте используется пару десятков раз, но не получается пока что найти, где перед его использованием в PSW устанавливается нужный флаг и вообще, как контролируется значение в регистрах HL, чтобы параметрический стек не наполз на следующие ячейки памяти.

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

Я пробовал создавать слова с несколькими DROP и при их исполнении ошибка пустого стека отлавливается, но в других случаях, похоже, это никак не контролируется.

Сами по себе операции пересылки данных между регистрами HL BC и памятью на флаг S не влияют (по крайней мере, в контексте прописанного кода).
Пока что оставлю на будущее эти поиски, но непонятки остаются.
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Forth на рк-86

Post by Shaos »

JM это ведь переход по знаку минус
Я тут за главного - если что шлите мыло на me собака shaos точка net
b2m
Devil
Posts: 905
Joined: 26 May 2003 06:57

Re: Forth на рк-86

Post by b2m »

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

Re: Forth на рк-86

Post by kozzdo »

b2m wrote:
kozzdo wrote:который непонятно где и как устанавливается
Что значит непонятно где? А INR L чем тебе не команда, влияющая на флаги? Когда L перевалит за 128, старший бит будет еденицей, вот тебе и минус.
О да, теперь понятно, так и есть (проверил в отладчике).
Из этого следует две вещи:
- фактически, стек параметров начинается по адресу 107E (а не 1078, как описано в журнале)
- параметрический стек не может быть портирован куда попало, но это не проблема, т.к. это настраивается. Ну и в журнале Радио имеется опечатка, т.к. там написано, что указатель на стек в HL инициализируется значением 103E (хотя по факту, в программе, там 7Е).

Становится также понятно, почему адреса 107С-107F названы "аварийными".
А вот буфер ввода строки с терминала (1080-10FF) при ошибке переполнения стека не страдает, т.к. вершина стека находится в регистре BC.

спс!
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Forth на рк-86

Post by Shaos »

b2m wrote:Форт Шихова мы обсуждали в этой теме: viewtopic.php?f=81&t=9038
Было бы неплохо в отдельную тему выделить.
В отдельную тему или сюда всё слить?
Там вроде проблема была в том, что началось с Шихова для Специалиста...
Я тут за главного - если что шлите мыло на me собака shaos точка net
kozzdo
Novelist
Posts: 34
Joined: 03 Aug 2020 20:18

Re: Forth на рк-86

Post by kozzdo »

Shaos wrote:
b2m wrote:Форт Шихова мы обсуждали в этой теме: viewtopic.php?f=81&t=9038
Было бы неплохо в отдельную тему выделить.
В отдельную тему или сюда всё слить?
Там вроде проблема была в том, что началось с Шихова для Специалиста...
Ну так фортов для рк86 на данный момент всего четыре пока что, пусть может быть тут и живут? Эта тема была бы как коллекция заметок о фортах для рк.
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Forth на рк-86

Post by Shaos »

т.к. топик RFORTH был старее и больше, то он уже давно известен поисковым машинам, поэтому я просто перенёс его сюда из Software, оставив номер темы как есть (9038), и просто слил сюда же всё из более новой темы "Forth на рк-86" переименовав "RFORTH" в "Forth на рк-86"...
Я тут за главного - если что шлите мыло на me собака shaos точка net
b2m
Devil
Posts: 905
Joined: 26 May 2003 06:57

Re: Forth на рк-86

Post by b2m »

Shaos wrote:
b2m wrote:Было бы неплохо в отдельную тему выделить.
В отдельную тему или сюда всё слить?
Там вроде проблема была в том, что началось с Шихова для Специалиста...
Шихов публиковал в Радио свой форт как раз для РК, "проблему" создал один господин, запустив его в любимом эмуляторе Специалиста.
Ну, пусть так будет. Хотя, если обсуждать исключительно форт Шихова, жаль что это не будет отражено в названии темы.
Страничка эмулятора наших компьютеров
http://bashkiria-2m.narod.ru/
kozzdo
Novelist
Posts: 34
Joined: 03 Aug 2020 20:18

Re: Forth на рк-86

Post by kozzdo »

Главный цикл шихов-форта на самом базовом уровне довольно тривиален и содержится в слове QUIT. Слово QUERY тоже не особо сложно устроено и (наверно) может даже применяться в качестве независимого кода для каких-то других программ. А вот INTERPRET пока что не особо поддается моему пониманию, но я постараюсь разобрать на части и его. Попробовал приаттачить небольшую диаграмму для начала.

 
Screenshot 2024-04-30 18.11.26.png

You do not have the required permissions to view the files attached to this post.
b2m
Devil
Posts: 905
Joined: 26 May 2003 06:57

Re: Forth на рк-86

Post by b2m »

По полочкам:

Code: Select all

    DW ZINTERPRET
    DB 'INTERPRET',89h
LINTERPRET:
    PUSH B                ; верхний элемент стека содержит указатель на интерпретируемую строку
    XTHL
    SHLD _INPTR       ;  сохраняем его
    POP H
    CALL LDROP         ; верхний элемент больше не нужен
L0ADE:
    CALL _SVLAST      ; сохраняем позицию HERE
    CALL LAPOS          ; поиск слова (апостроф - ')
    MVI A,0FFh
    CMP C
    JNZ L0B09            ; если не ноль, значит нашли
    CMP B
    JNZ L0B09
    CALL LDROP          ; выкидываем ноль
    CALL LNUMBER      ; пытаемся перевести в число
    LDA _STATE           ; режим компиляции?
    ORA A
    CNZ _C_LIT           ; если да - компилируем LXI B,#
    JMP L0ADE
L0AFE:                      ; процедура либо вызывает xt, если IMMEDIATE, либо компилирует CALL xt
    DCX B                   ; перед xt байт флагов и длины
    LDAX B
    INX B
    ANI 40h
    JZ _C_CALL           ; не IMMEDIATE, компилируем CALL xt и возвращаемся
    JMP LEXECUT         ; выполняем и возвращаемся
L0B09:
    LDA _STATE           ; режим компиляции?
    ORA A
    JZ L0B16               ; нет, переходим к выполнению
    CALL L0AFE           ; да, компилируем CALL (или выполняем IMMEDIATE) 
    JMP L0ADE
L0B16:
    CALL LEXECUT
    JMP L0ADE
_SVLAST:                   ; сохранение HERE в поле LINK последнего слова
    PUSH H
    LHLD _HERE
_SVLAST1:
    XCHG
    LHLD _LAST
    MOV M,E
    INX H
    MOV M,D
    POP H
    RET
Выход из INTERPRET завершается при выполнении специального слова с нулевым именем (совпадает с концом строки)

Code: Select all

_WORD0:
    DW L0816
    DB 0,0C1h
L0814:
    POP D
    RET
L0816:
Страничка эмулятора наших компьютеров
http://bashkiria-2m.narod.ru/
kozzdo
Novelist
Posts: 34
Joined: 03 Aug 2020 20:18

Re: Forth на рк-86

Post by kozzdo »

о, большое спасибо! сейчас пробегусь по своему листингу, дела пойдут быстрее )))
kozzdo
Novelist
Posts: 34
Joined: 03 Aug 2020 20:18

Re: Forth на рк-86

Post by kozzdo »

нашел... disregard, так сказать...

 
Подскажите, где найти описание формата файлов .rkr и подобных?

Собираюсь утилиту состряпать на питоне, которая будет готовить текстовый файл для загрузки с произвольного адреса в память эмулятора РК.
Идея в том, чтобы слова для форта писать в нормальном редакторе, затем подгружать в память и компилировать там в словарь. Ну или словарь свой сохранять и затем тоже подгружать его дополнительно (с модификацией соотв. ячеек в исходном, чистом форте).

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

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

Re: Forth на рк-86

Post by b2m »

kozzdo wrote:нашел... disregard, так сказать...
Есть тема на zxpk: https://zx-pk.ru/threads/27465-gde-najt ... torov.html
Страничка эмулятора наших компьютеров
http://bashkiria-2m.narod.ru/
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Forth на рк-86

Post by Shaos »

b2m wrote:
kozzdo wrote:нашел... disregard, так сказать...
Есть тема на zxpk: https://zx-pk.ru/threads/27465-gde-najt ... torov.html
Ну можно и тут тему создать - так сказать чтобы было :roll:
Я тут за главного - если что шлите мыло на me собака shaos точка net
kozzdo
Novelist
Posts: 34
Joined: 03 Aug 2020 20:18

Re: Forth на рк-86

Post by kozzdo »

Скачал с Emu80 исходники утилиты bin2tape, там вся исчерпывающая информация...