51 Отредактировано vvhitevvizard (23-08-2021 19:55)

Re: Восстановление "Подземелья Черного Замка".

Посмотри аттач, там разные сборки в-файле BM за разные годы.

В нем есть BM 95-й версии. Сразу проверил - STORE/RECALL не появились. В остальном по поведению отличий от "93" версии не чувствуется.

После новых тестов обнаружилось следующее - в первом файле инициализирую переменную P значением 1001:

1000 P=1001:?:? CHR$ (4)"EXEC TEST2":END

в вызываемом по EXEC файле опрашиваю эту переменную:

10 PRINT "HELLOOO"
? P
RUN 1001

И в выводе - 0. Выходит, после окончания программы (END) все переменные обнуляются?

52 Отредактировано Voldemar0 (24-08-2021 07:23)

Re: Восстановление "Подземелья Черного Замка".

Не похоже:

           Бейсик-А9.1            Архитектура:   9
                                  Режим ($C7): $0A
}10 A=2:END                       Адрес:    $01000
                                  Режим:   Text 32
}RUN                              Палитра:       0

}? A                              Клавиатура: L 0D
2                                 Набор A:  QWERTY
                                  Набор B:   ---- 
}_

Более вероятно, что переменные сбрасываются в момент модификации программы.
Когда ты строку добавляешь.
Но я тебя всё равно разочарую: RUN, GOTO и всё, где указываются номера строк, понимают только константы.

Причем ты столкнёшся ещё и с тем, что :
A= 10
RUN A
вообще будет понято как команда ДОС загрузить и запустить файл A,
а не запустить прогу со строки A.

===

Опиши ещё раз медленно и без ссылок на предыдущие посты, что ты хочешь сделать?
Я посмотрел EXECTEST.7z, но это - абстрактный пример, ты в нём пытаешся exec использовать как некий аналог #include ?

А сверхзадача какая ?
Т.е. почему не использовать chain ?
Пусть у тебя исходник состоит из текстовых шаблонов, на языке, похожем на бейсик.
Можно написать (или у тебя он уже есть?) "компилятор", который синтезирует из них чисто бейсковский файл.
Прогони через него все шаблоны, получишь готовые проги (я думаю, это можно автоматизировать до одной команды).

И дальше цепляй из через chain, уже во время игры.

Если есть какая-то общая часть, то её тоже можно пристёгивать компилятором к каждому загрузочному файлу.

--

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

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

53 Отредактировано vvhitevvizard (24-08-2021 18:39)

Re: Восстановление "Подземелья Черного Замка".

Более вероятно, что переменные сбрасываются в момент модификации программы.

Скорее всего, разработчиками EXEC подразумевался для редактирования (ручной сборки) Бейсик-программы, не для автоматической модификации кода программы во время ее исполнения. :) В общем, остается только вариант A-файлы и CHAIN. Либо все же сохранять переменные в файл и считывать обратно (и получится своего рода частое автосохранение).
по поводу конфликта RUN Бейсика с одноименной командой ДОС - эх, им надо было сделать различие между командами Бейсик и ДОС, как напр., в случае DEL vs DELETE.

ты в нём пытаешся exec использовать как некий аналог #include ?

да.

Пусть у тебя исходник состоит из текстовых шаблонов, на языке, похожем на бейсик.
Можно написать (или у тебя он уже есть?) "компилятор", который синтезирует из них чисто бейсковский файл.
Прогони через него все шаблоны, получишь готовые проги (я думаю, это можно автоматизировать до одной команды).

Конверторов я пишу довольно много на PC. В принципе не проблема написать перегонку туда-обратно между синтаксисом "basic Aгат9" и "упрощенным скриптом". Но у меня нет автоматического решения (да и и вообще решения - ввод main.bas через EXEC занимает несколько минут - и такой кусок управляющего кода надо приклеить к каждому файлу) для перегонки их в A-файлы псевдокода Бейсика. И "весит" управляющий код 64 блока - это в 5 раз больше среднего размера файла проекта. Здесь тупик.

А сверхзадача какая ? Т.е. почему не использовать chain ?

CHAIN с A-файлами пока остается единственным рабочим вариантом. Challenge же был найти изящный способ запуска файлов "новой" версии ЧЗ на Агате с минимальными правками. :)
---------
При EXEC "импорте" выяснилось, что Бейсик (BM95) запросто может забраковать отдельные строки или (что еще хуже) ввести их не полностью

8120  RIBBON= 4: VTAB 22: HTAB 9: PRINT "УДАЧА";U;" НЕУДАЧА": DD =  RND (1) * 50: FOR I = 1 TO  DD: TT =  INT ( RND (1) * 12.3 + 1): VTAB 22: HTAB 23: PRINT "  ": VTAB 22: HTAB 23: PRINT  TT: NEXT I: NORMAL : HTAB 9: VTAB 24: IF  TT > U THEN 8146

Ведет к следующей строчке A-программы:

8120  RIBBON= 4: VTAB 22: HTAB 9: PRINT "УДАЧА";U;" НЕУДАЧА":DD =  RND (1) * 50: FOR I = 1 TO DD:TT =  INT ( RND (1) * 12.3 + 1): VTAB 22: HTAB 23: PRINT "  ": VTAB 22: HTAB 23: PRINT TT: NEXT I: NORMAL : HTAB 9: VTAB 24: IF TT > UTH

Обрати внимание, как он обрезал последнюю команду IF TT>U THEN 8146 до IF TT>UTH. Хорошо хоть он писком сообщает об ошибке ввода.
В общем, не судьба пока получить работающий проект на Агате "малой кровью". А такой роскоши как кроссплатформенный бейсик (или утилита создающая A-файл псевдокода) у нас нет, насколько я понимаю.
-------------
Кстати, в эмуляторе Олега в контекстном меню таки есть пункт "F6 - Ввод из текстового файла..." В документации о нем сказано лишь "Перенаправить клавиатурный ввод из указанного текстового файла".
Но попробовал с ANSI файлом - ничего не получается.
---------------------------
Интересный момент - в поздней скриптовой версии я стал реализовывать динамическое составление текста описания локации основанное на RND, напр., один из двух фрагментов var I или var II, далее снова два варинта, далее 3 варианта - итого текст даже в одном параграфе получался отличающимся каждый раз:

Spoiler
10  H
    "ОСТОРОЖНО ВХОДИТЕ В ГУЛКИЙ ГЛАВНЫЙ КОРИДОР ЧЕРНОГО ЗАМКА. ОБРАЩАЕТ НА СЕБЯ ВНИМАНИЕ КРАСОТА ВХОДНОЙ АРКИ НАД ВАМИ. ГРАНИТНАЯ АРКА ВЫРЕЗАНА В ВИДЕ ИЗВИВАЮЩИХСЯ ДРАКОНОВ, НАМЕРТВО ВЦЕПИВШИХСЯ В ПАСТИ ДРУГ ДРУГУ."
    GET
    "ЧЕРЕЗ КАЖДЫЕ НЕСКОЛЬКО ШАГОВ НА ГЛАДКИХ ГРАНИТНЫХ СТЕНАХ"
    VAR I : " ВИСЯТ ЖЕЛЕЗНЫЕ КАНДЕЛЯБРЫ В ВИДЕ ИЗВИВАЮЩИХСЯ ЗМЕИНЫХ ТЕЛ"
    VAR II: " ПРИЧУДЛИВЫЕ ЖЕЛЕЗНЫЕ КАНДЕЛЯБРЫ, ВЫКОВАННЫЕ В ВИДЕ ПЕРЕПЛЕТЕНИЯ ЗМЕЙ"
    VAR I : " - СВЕТА ДОСТАТОЧНО. НО ПОТОЛКА НЕ ВИДНО,"
    VAR II: " - КОРИДОР ДОСТАТОЧНО ОСВЕЩЕН. ОДНАКО СВЕТ НЕ ДОСТИГАЕТ ПОТОЛКА,"
    VAR I : " ОН УХОДИТ КУДА-ТО ВВЕРХ, В ЗАГАДОЧНУЮ ТЕМНОТУ,"
    VAR II: " НАД ВАМИ, СВЕРХУ ВСЕ ТОНЕТ В НЕПРОГЛЯДНОЙ ТЕМЕНИ,"
    VAR III: " ВВЕРХУ ВСЕ ТОНЕТ В БЕЗДОННОЙ И БЕСПРОГЛЯДНОЙ ТЕМНОТЕ,"
    " ГДЕ ЦАРИТ ЭХО, СОПРОВОЖДАЮЩЕЕ КАЖДЫЙ ВАШ ШАГ."
    GOSUB 5000
    H
    "ИЗ КОРИДОРА ВЕДУТ ТРИ ДВЕРИ И ДВЕ ЛЕСТНИЦЫ."
    VAR I : " ЛЕСТНИЦА СПРАВО УХОДИТ ВНИЗ, ЛЕСТНИЦА СЛЕВА - ВВЕРХ."
    VAR II: " ВЫ СТОИТЕ У ВХОДА. ПРЯМО ПЕРЕД ВАМИ ДВЕ КРУТЫЕ ШИРОКИЕ ЛЕСТНИЦЫ - ОДНА ВВЕРХ, ДРУГАЯ ВНИЗ."
    VAR III: " ПЕРЕД СОБОЙ ВЫ ВИДИТЕ ДВЕ ЛЕСТНИЦЫ, ОДНУ, УХОДЯЩУЮ МАРШЕМ ВВЕРХ И ДРУГУЮ - ВНИЗ."
    " В КОНЦЕ гЛАВНОГО КОРИДОРА ДВЕ ДВЕРИ - ТОЖЕ НАПРАВО И НАЛЕВО, НО ОНИ СОВЕРШЕННО ОДИНАКОВЫЕ И НИЧТО НЕ ПОДСКАЗЫВАЕТ ВАМ, КАКУЮ ИЗ НИХ ВЫБРАТЬ. ПОД ЛЕСТНИЧНОЙ КЛЕТКОЙ СЛЕВА - ТРЕТЬЯ, ДЕРЕВЯННАЯ ДВЕРКА, СОВСЕМ НЕДАЛЕКО ОТ ВАС."
    "РЕШАЙТЕ, КУДА ПОЙДЕТЕ. ПО ЛЕСТНИЦЕ ВВЕРХ - (1) ИЛИ ВНИЗ - (2), В ДВЕРЬ НАПРАВО - (3) ИЛИ НАЛЕВО - (4)? ИЛИ К ДЕРЕВЯННОЙ ДВЕРЦЕ ОКОЛО ВХОДА - (5)?"
    THEN 50
    THEN 40
    THEN 400
    THEN 30
    THEN 70

-------------------------
Так или иначе, в аттаче - cобрал после сравнений все файлы "новой" версии ЧЗ. Чтобы не запутаться и не зависеть от разных образов - все в одном месте.
Получилось порядка 153 файлов-локаций. И также несколько подверсий (папка OLDER). Все файлы T типа (несмотря на расширение .bas/.txt), но вперемежку скриптовая версия и не переделанный бейсик синтакс.
В подпапке MAIN - несколько версий управляющего кода для бейсик-версий, но версий файлов с ним дефицит и возможно код не cамый последний, хотя это непринципиально (алгоритм довольно простой). Первая локация - НАЧАЛО.txt
В подпапке MINIMUM - два файла для минимальной демонстрации (управляющий код main) + первая локация без упр кода НАЧАЛО).

Post's attachments

Attachment icon ЧЗ ver 2.7z 191.85 kb, 129 downloads since 2021-08-24 

54

Re: Восстановление "Подземелья Черного Замка".

> 8120  RIBBON= 4: VTAB 22: HTAB 9: PRINT "УДАЧА";U;" НЕУДАЧА": DD =  RND (1) * 50: FOR I = 1 TO  DD: TT =  INT ( RND (1) * 12.3 + 1): VTAB 22: HTAB 23: PRINT "  ": VTAB 22: HTAB 23: PRINT  TT: NEXT I: NORMAL : HTAB 9: VTAB 24: IF  TT > U THEN 8146

У тебя тут > 240 символов! Чего ты хотел от бейсика?
Входной буфер процедуры ввода строки - 256 или 255 знаков, включая перевод строки в конце. У бейсика лимит на строку программы вроде 240 или около того - это в доках на него написано.

Привыкли,тут, панимаешь, к неявному выделению под любую переменную до 2 гиг,  совсем от корней оторвались ! :))

---

Если бы я проектировал такую штуку на агат, то, наверное, набросал простенький интерпретатор сцен,  тут скорость - то сильно не нужна, можно прям на бейсике, а потом сцены сами забил в текстовые файлы.
Тут есть секретик: ИКП-бейсик умеет читать T- файлы по команде BLOAD. Очень быстро читает.
Только нужно обязательно задавать точку загрузки.
Но можно их и компилировать из T в какой -то B- формат (можно даже на PC), с удобной для парсинга структурой.

Потому что если у тебя эта последняя версия так и не была дописана, то, наверное, без разницы теперь в каком виде её дальше доводить до ума ?

55 Отредактировано vvhitevvizard (25-08-2021 00:21)

Re: Восстановление "Подземелья Черного Замка".

Voldemar0 пишет:

У тебя тут > 240 символов! Чего ты хотел от бейсика?
Привыкли,тут, панимаешь, к неявному выделению под любую переменную до 2 гиг,  совсем от корней оторвались ! :))

ааа! это меняет дело. поэтому он и пищит наверное при вводе. :) Попробую разбить.
Не подумал, так как по идее ввожу обратно то, что когда-то уже было A-программой. Видимо, PRINT я на "?" заменял. И пробелы убирал. Как-то втискивал короче.

Ужал все пробелы - я в таком компактном стиле без пробелов при присвоении и между скобочек и програмлю сейчас собственно. Файл сократился на ~25%. Проблема ушла. Попутно возросла скорость компиляции.

7900 VTAB 20:INVERSE:RIBBON=2:? SPC(32):VTAB 20:HTAB 13:?"ДЕНЬГИ":NORMAL:GOSUB 8000:RIBBON=4:VTAB 22:HTAB 5:?"ИТОГО ЗОЛОТЫХ ДУКАТОВ - ";D:HTAB 5:?"СЕРЕБРЯННЫХ ТАЛЕРОВ - ";T:HTAB 5:?"МЕДНЫХ ГРОШЕЙ - ";G:GOSUB 7500:GET A$:RETURN

Но путь тоже тупиковый по сути так как процесс обьединения файлов с "довеском" занимает ~3 минуты (500% скорость эмуляции), а файлов 153. И из-за размера довеска в 64 блока помноженного на 153 и... проект перестает помещаться на одном 840K диске...

Потому что если у тебя эта последняя версия так и не была дописана, то, наверное, без разницы теперь в каком виде её дальше доводить до ума ?

Переделка интерпретатора скриптов на ассемблере у меня была в самой начальной стадии (может и была рабочая - но среди файлов ее нет). На Агате c нуля писать сейчас интерпретатор итп, конечно, смысла мало - хотел только восстановить работоспособность того, что есть. Как в случае с External Zone - к правкам которого я еще вернусь (добился корректного выхода в Best, оптимизировал кое-что из процедур, добавляю джойстик...).

56 Отредактировано vvhitevvizard (25-08-2021 00:26)

Re: Восстановление "Подземелья Черного Замка".

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

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

Ключевое здесь - уметь "склеивать" два бинарника с псевдокодом бейсика чтобы имитировать chain/include функционал.
Нужно ведь будет подлинковывать новый кусок кода к текущим переменным/длинным переменным?

Если тут проторенной дорожки нет (никто подобного не делал), то лучше конечно не браться. :)

Но можно их и компилировать из T в какой -то B- формат (можно даже на PC), с удобной для парсинга структурой.

Потому что если у тебя эта последняя версия так и не была дописана, то, наверное, без разницы теперь в каком виде её дальше доводить до ума ?

Здесь как минимум надо на PC сделать конвертер, чтобы форматы текстов привести к одному общему формату. Бейсик или скрипт. Заодно КАПС поменять на нормальный текст. И прочие мелкие автоматизации такие как добавление или наоборот убирание лишних пробелов. Будет моей дальнейшей программой-минимум. :)

57 Отредактировано vvhitevvizard (28-08-2021 17:07)

Re: Восстановление "Подземелья Черного Замка".

Voldemar0 пишет:

Более вероятно, что переменные сбрасываются в момент модификации программы.
Когда ты строку добавляешь.
Но я тебя всё равно разочарую: RUN, GOTO и всё, где указываются номера строк, понимают только константы.

Тут еще одно "разочарование" нашлось:
The Applesoft RUN command is normally used as an immediate command from the editor, but the interpreter also allows it to be included in a program. RUN in an interpreted program clears all variables and re-executes the program. RUN with the optional line number specified also clears all variables, but begins execution at the specified line rather than the beginning of the program.
И скорее всего RUN ведет себя аналогично в агатовских Бейсиках, сбрасывая все переменные программы. Поэтому когда я из командной программы выполняемой по EXEC пытался передать управление обратно в основную Бейсик-программу, также все обнулялось. Контрольный выстрел в голову так сказать. :)

58

Re: Восстановление "Подземелья Черного Замка".

Это вряд ли большая проблема, потому что есть goto - она не будет чистить.

59

Re: Восстановление "Подземелья Черного Замка".

Это да. Вообще, эффект от навязываемой CLEAR конечно можно обойти, если научить Бейсик программу сохранять свои нужные данные где-нибудь в оперативке по фиксированному адресу, а после вставок/замены строчек программы через EXEC инициализировать все необходимые переменные/cтроки/массивы и через POKE/ассемблерные вставки заполнять их сохраненными значениями...