Author |
Message |
kozzdo
Novelist
Joined: 03 Aug 2020 20:18 Posts: 34
|
С шихов-фортом произошел некоторый затык... Касается слова DROP и обработчика ошибки пустого стека (то самое сообщение СТЕК ПУСТ). Вот ассемблерный код этого слова: В чем проблема... Переход на обработчик ошибки происходит по флагу S, который непонятно где и как устанавливается. Понятно одно - если в PSW этот флаг был установлен до вызова слова DROP, то ошибка обрабатывается, а если нет - то можно стек дропать сколько угодно, и эта операция разрушит служебные ячейки форта. Слово DROP в самом форте используется пару десятков раз, но не получается пока что найти, где перед его использованием в PSW устанавливается нужный флаг и вообще, как контролируется значение в регистрах HL, чтобы параметрический стек не наполз на следующие ячейки памяти. Само по себе использование слова DROP не подразумевает никаких входных параметров, а уж тем более - модификаций аккумулятора и флагов. Я пробовал создавать слова с несколькими DROP и при их исполнении ошибка пустого стека отлавливается, но в других случаях, похоже, это никак не контролируется. Сами по себе операции пересылки данных между регистрами HL BC и памятью на флаг S не влияют (по крайней мере, в контексте прописанного кода). Пока что оставлю на будущее эти поиски, но непонятки остаются.
|
29 Apr 2024 06:02 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 23385 Location: Silicon Valley
|
JM это ведь переход по знаку минус
|
29 Apr 2024 08:59 |
|
|
b2m
Devil
Joined: 26 May 2003 06:57 Posts: 891
|
Что значит непонятно где? А INR L чем тебе не команда, влияющая на флаги? Когда L перевалит за 128, старший бит будет еденицей, вот тебе и минус.
_________________Страничка эмулятора наших компьютеров
http://bashkiria-2m.narod.ru/
|
29 Apr 2024 10:27 |
|
|
kozzdo
Novelist
Joined: 03 Aug 2020 20:18 Posts: 34
|
О да, теперь понятно, так и есть (проверил в отладчике). Из этого следует две вещи: - фактически, стек параметров начинается по адресу 107E (а не 1078, как описано в журнале) - параметрический стек не может быть портирован куда попало, но это не проблема, т.к. это настраивается. Ну и в журнале Радио имеется опечатка, т.к. там написано, что указатель на стек в HL инициализируется значением 103E (хотя по факту, в программе, там 7Е). Становится также понятно, почему адреса 107С-107F названы "аварийными". А вот буфер ввода строки с терминала (1080-10FF) при ошибке переполнения стека не страдает, т.к. вершина стека находится в регистре BC. спс!
|
29 Apr 2024 16:44 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 23385 Location: Silicon Valley
|
В отдельную тему или сюда всё слить? Там вроде проблема была в том, что началось с Шихова для Специалиста...
|
29 Apr 2024 18:08 |
|
|
kozzdo
Novelist
Joined: 03 Aug 2020 20:18 Posts: 34
|
Ну так фортов для рк86 на данный момент всего четыре пока что, пусть может быть тут и живут? Эта тема была бы как коллекция заметок о фортах для рк.
|
29 Apr 2024 21:17 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 23385 Location: Silicon Valley
|
т.к. топик RFORTH был старее и больше, то он уже давно известен поисковым машинам, поэтому я просто перенёс его сюда из Software, оставив номер темы как есть (9038), и просто слил сюда же всё из более новой темы "Forth на рк-86" переименовав "RFORTH" в "Forth на рк-86"...
|
29 Apr 2024 21:58 |
|
|
b2m
Devil
Joined: 26 May 2003 06:57 Posts: 891
|
Шихов публиковал в Радио свой форт как раз для РК, "проблему" создал один господин, запустив его в любимом эмуляторе Специалиста. Ну, пусть так будет. Хотя, если обсуждать исключительно форт Шихова, жаль что это не будет отражено в названии темы.
_________________Страничка эмулятора наших компьютеров
http://bashkiria-2m.narod.ru/
|
30 Apr 2024 00:00 |
|
|
kozzdo
Novelist
Joined: 03 Aug 2020 20:18 Posts: 34
|
Главный цикл шихов-форта на самом базовом уровне довольно тривиален и содержится в слове QUIT. Слово QUERY тоже не особо сложно устроено и (наверно) может даже применяться в качестве независимого кода для каких-то других программ. А вот INTERPRET пока что не особо поддается моему пониманию, но я постараюсь разобрать на части и его. Попробовал приаттачить небольшую диаграмму для начала.
You do not have the required permissions to view the files attached to this post.
|
30 Apr 2024 02:28 |
|
|
b2m
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 завершается при выполнении специального слова с нулевым именем (совпадает с концом строки)
_________________Страничка эмулятора наших компьютеров
http://bashkiria-2m.narod.ru/
|
30 Apr 2024 03:01 |
|
|
kozzdo
Novelist
Joined: 03 Aug 2020 20:18 Posts: 34
|
о, большое спасибо! сейчас пробегусь по своему листингу, дела пойдут быстрее )))
|
30 Apr 2024 04:48 |
|
|
kozzdo
Novelist
Joined: 03 Aug 2020 20:18 Posts: 34
|
нашел... disregard, так сказать... Подскажите, где найти описание формата файлов .rkr и подобных?
Собираюсь утилиту состряпать на питоне, которая будет готовить текстовый файл для загрузки с произвольного адреса в память эмулятора РК. Идея в том, чтобы слова для форта писать в нормальном редакторе, затем подгружать в память и компилировать там в словарь. Ну или словарь свой сохранять и затем тоже подгружать его дополнительно (с модификацией соотв. ячеек в исходном, чистом форте).
Я понимаю, что там все более-менее понятно в этих файлах после просмотра дампа, но все-таки хотелось бы точно знать, какие байты отвечают за контрольную сумму и т.п.
|
30 Apr 2024 20:21 |
|
|
b2m
Devil
Joined: 26 May 2003 06:57 Posts: 891
|
_________________Страничка эмулятора наших компьютеров
http://bashkiria-2m.narod.ru/
|
02 May 2024 02:04 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 23385 Location: Silicon Valley
|
Ну можно и тут тему создать - так сказать чтобы было
|
02 May 2024 20:36 |
|
|
kozzdo
Novelist
Joined: 03 Aug 2020 20:18 Posts: 34
|
Скачал с Emu80 исходники утилиты bin2tape, там вся исчерпывающая информация...
|
02 May 2024 22:43 |
|