nedoPC.org

Community for electronics hobbyists, established in 2002
Last visit was: 31 Oct 2024 17:19
It is currently 31 Oct 2024 17:19



 [ 123 posts ]  Go to page Previous  1 ... 5, 6, 7, 8, 9  Next
Forth на рк-86 
Author Message
Novelist

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

Вот ассемблерный код этого слова:
Code:
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:
JM Error_Handler

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

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

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

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

Сами по себе операции пересылки данных между регистрами HL BC и памятью на флаг S не влияют (по крайней мере, в контексте прописанного кода).
Пока что оставлю на будущее эти поиски, но непонятки остаются.


29 Apr 2024 06:02
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 23385
Location: Silicon Valley
JM это ведь переход по знаку минус

_________________
https://mastodon.social/@Shaos :dj:
https://www.youtube.com/@Shaos1973


29 Apr 2024 08:59 WWW
Devil

Joined: 26 May 2003 06:57
Posts: 891
kozzdo wrote:
который непонятно где и как устанавливается

Что значит непонятно где? А INR L чем тебе не команда, влияющая на флаги? Когда L перевалит за 128, старший бит будет еденицей, вот тебе и минус.

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


29 Apr 2024 10:27 WWW
Novelist

Joined: 03 Aug 2020 20:18
Posts: 34
b2m wrote:
kozzdo wrote:
который непонятно где и как устанавливается

Что значит непонятно где? А INR L чем тебе не команда, влияющая на флаги? Когда L перевалит за 128, старший бит будет еденицей, вот тебе и минус.

О да, теперь понятно, так и есть (проверил в отладчике).
Из этого следует две вещи:
- фактически, стек параметров начинается по адресу 107E (а не 1078, как описано в журнале)
- параметрический стек не может быть портирован куда попало, но это не проблема, т.к. это настраивается. Ну и в журнале Радио имеется опечатка, т.к. там написано, что указатель на стек в HL инициализируется значением 103E (хотя по факту, в программе, там 7Е).

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

спс!


29 Apr 2024 16:44
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 23385
Location: Silicon Valley
b2m wrote:
Форт Шихова мы обсуждали в этой теме: viewtopic.php?f=81&t=9038
Было бы неплохо в отдельную тему выделить.

В отдельную тему или сюда всё слить?
Там вроде проблема была в том, что началось с Шихова для Специалиста...

_________________
https://mastodon.social/@Shaos :dj:
https://www.youtube.com/@Shaos1973


29 Apr 2024 18:08 WWW
Novelist

Joined: 03 Aug 2020 20:18
Posts: 34
Shaos wrote:
b2m wrote:
Форт Шихова мы обсуждали в этой теме: viewtopic.php?f=81&t=9038
Было бы неплохо в отдельную тему выделить.

В отдельную тему или сюда всё слить?
Там вроде проблема была в том, что началось с Шихова для Специалиста...


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


29 Apr 2024 21:17
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 23385
Location: Silicon Valley
т.к. топик RFORTH был старее и больше, то он уже давно известен поисковым машинам, поэтому я просто перенёс его сюда из Software, оставив номер темы как есть (9038), и просто слил сюда же всё из более новой темы "Forth на рк-86" переименовав "RFORTH" в "Forth на рк-86"...

_________________
https://mastodon.social/@Shaos :dj:
https://www.youtube.com/@Shaos1973


29 Apr 2024 21:58 WWW
Devil

Joined: 26 May 2003 06:57
Posts: 891
Shaos wrote:
b2m wrote:
Было бы неплохо в отдельную тему выделить.

В отдельную тему или сюда всё слить?
Там вроде проблема была в том, что началось с Шихова для Специалиста...

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

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


30 Apr 2024 00:00 WWW
Novelist

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

 
Attachment:
Screenshot 2024-04-30 18.11.26.png


You do not have the required permissions to view the files attached to this post.


30 Apr 2024 02:28
Devil

Joined: 26 May 2003 06:57
Posts: 891
По полочкам:
Code:
    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:
_WORD0:
    DW L0816
    DB 0,0C1h
L0814:
    POP D
    RET
L0816:

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


30 Apr 2024 03:01 WWW
Novelist

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


30 Apr 2024 04:48
Novelist

Joined: 03 Aug 2020 20:18
Posts: 34
нашел... disregard, так сказать...

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

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

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


30 Apr 2024 20:21
Devil

Joined: 26 May 2003 06:57
Posts: 891
kozzdo wrote:
нашел... disregard, так сказать...

Есть тема на zxpk: https://zx-pk.ru/threads/27465-gde-najt ... torov.html

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


02 May 2024 02:04 WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 23385
Location: Silicon Valley
b2m wrote:
kozzdo wrote:
нашел... disregard, так сказать...

Есть тема на zxpk: https://zx-pk.ru/threads/27465-gde-najt ... torov.html

Ну можно и тут тему создать - так сказать чтобы было :roll:

_________________
https://mastodon.social/@Shaos :dj:
https://www.youtube.com/@Shaos1973


02 May 2024 20:36 WWW
Novelist

Joined: 03 Aug 2020 20:18
Posts: 34
Скачал с Emu80 исходники утилиты bin2tape, там вся исчерпывающая информация...


02 May 2024 22:43
 [ 123 posts ]  Go to page Previous  1 ... 5, 6, 7, 8, 9  Next

Who is online

Users browsing this forum: Claude AI [Bot] and 0 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

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