26

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

vvhitevvizard пишет:
AlexBel пишет:

Байт атрибутов символа имеет следующие биты.

Спасибо. Полезная табличка.
Интересно получается, у разработчиков Агата была теоретическая возможность расширить текстовый 32x32 режим, используя неиспользуемые 2 бита атрибутов. Понятно, что выйти за границы знакогенератора было бы технически сложно и неоправданно (чтобы реализовать подчеркивание, зачеркивание или еще какое-то выделение символов), но что насчет частоты мерцания? :)

Табличка из книги Мымрина.
Расширение текстового режима - дело хорошее, на форуме даже есть целая тема, посвящённая этому (цветной режим текст-64), но лично я уверен, что это никакой реальной ценности не имеет, разве что как эксперимент. Допустим, сделали это расширение. Дальше что? Программ, поддерживающих это, нет. А если даже будут написаны (сколько? Одна-две?) то, неужели, кто-то полезет в свой компьютер с паяльником и ножом только чтобы увидеть, как эти программы используют доработанный видеорежим? Стоит ли оно того? Изменять скорость мигания? Если бы даже это можно было реализовать для отдельного знакоместа - какой в этом смысл?
Пожалуй, если требуется дальнейшее обсуждение видео, то лучше перенести его в соответствующий раздел.

27 Отредактировано vvhitevvizard (20-08-2021 22:16)

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

Voldemar0 пишет:

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

Выскажу свое мнение, что для эмулятора работающего на современном железе в современной среде, где софт гарантирует "what you see is what you get", а железо подстроено максимально точно к существующим цветовым стандартам (sRGB и Adobe RGB), эмулятор по умолчанию должен передавать значения цветов снятые с комплектного монитора Агат 9 (аппроксимированные значения cнятые с серии таких мониторов). Ну и разумеется, опциональные палитры (для имитации ч/б колокольчика, а также других цв мониторов)
Это точно такая же логика, какая уже существует в этом эмуляторе для звуковой имитации работы шагового двигателя "Teac" дисковода.
Такой же принцип есть в MAME (эмулятор аркадных автоматов), где для 100% имитации звуков и музыки вместо FM синтеза (опционально) используются .wav снятые с реального железа.

"колокольчика" (мс6501 ?).

МС 6105.XX. Я поправил опечатку выше.

AlexBel пишет:

Пожалуй, если требуется дальнейшее обсуждение видео, то лучше перенести его в соответствующий раздел.

Согласен, практического смысла СЕЙЧАС в апгрейде текстового режима нет. :)
Это краткое лирическое отступление. Пока не получилось вытащить все недостающие файлы новой версии ЧЗ.

28

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

ЧЗ - это, если я правильно понял, текстовая адвенчура?

29 Отредактировано vvhitevvizard (20-08-2021 22:26)

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

AlexBel пишет:

ЧЗ - это, если я правильно понял, текстовая адвенчура?

ЧЗ - так ранее в кругу своих знакомых я называл Черный Замок/Подземелья Черного Замка. Ну и сокращение ПЧЗ смотрится как-то пугающе для фэнтэзийной RGP :)

30

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

Насчёт сокращения я понял, хочу уточнить насчёт жанра.

31 Отредактировано vvhitevvizard (20-08-2021 22:36)

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

Неумирающий жанр text-based ролевых игр. Что 40 лет назад, что сейчас такие игры продолжают появляться. правда, теперь они выходят онлайн в многопользовательскую среду.

Cама игрушка - по факту моя первая программа в жизни, мне тогда было 15. ;) начиналась как 10 PRINT "HELLO, WORLD", но разрослась до статуса самой большой игры на бейсике (и может не только для Агат9) - порядка ~150 связанных файлов. Ее главная ценность - огромная база текстовых описаний локаций и вариантов развития событий - их я набивал много месяцев (в промежутке между 1993 и 1994 годами (возможно в 1995 также, но столкнувшись с невозможностью малой кровью перенести проект с бейсика на ассемблер, я забросил его).
--------
Кстати, в ранней версии есть ошибки, которые точно исправлял позже. напр., на последнем скриншоте предлагается подобрать предметы в том числе "соломенный тюфяк" и... "с квасом". последняя строчка ошибка, у игрока есть отдельная фляга, к ней применимо заполнение квасом.

32

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

Интересно было бы поиграть. Надеюсь, восстановление будет успешным.

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

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

AlexBel пишет:

Интересно было бы поиграть. Надеюсь, восстановление будет успешным.

Второй аттач из поста #15 более-менее играбелен (но сохранение статуса на диск вылетает с ошибкой и наметанным глазом вижу мелкие глюки, которые исправлял позже).
Лучше подождать восстановления поздней версии. Возможно, в ней я также реализовал (в планах у меня было) нормальный вывод текста с переводом слов на новые строчки вместо трудночитаемой сплошной "стены текста".
И сражения, помню, пытался делать чуть более информированными и с анимированой шкалой статов текущего HP итд (насколько позволял текстовый режим).
Хотя главная ценность конечно же - литературные тексты описания локаций, предметов и действий игрока. На первом экране выбор из двух вариантов (повернуть налево или направо), в следующей локации снова выбор из двух и более вариантов, через 10 экранов оказываемся в совершенно новой локации. Иногда можно найти обходной путь минуя неубиваемого монстра, такого как Черный Дракон. Пробраться в Черный Замок не через главные ворота, неся потери при сражении со стражей, а через какой-нибудь тайный лаз под стеной замка. Вместо пути по смертельно опасным топям напрямик запастись водой и нужными артефактами и пойти в обход по знойной пустыне (что увеличит кол-во локаций по пути втрое) итд итп.
В теории все выглядело интересно. Но практической реализации, конечно же, не хватает user friendliness. :)

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

Voldemar0 пишет:

(она была досовской, но знала о том, что у VDM есть возможность обратиться к файлу по длинному имени и пользовалась этим, будучи запущенной из под винды).

К слову, под DOS был драйвер для поддержки длинных имен. Пользовался им, получая в DosNavigator ("народная" альтернатива Norton Commander) длинные имена в панельках.

34 Отредактировано vvhitevvizard (21-08-2021 23:36)

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

AlexBel пишет:

Если каждый цвет обычной яркости и повышенной считать за 2 цвета, получается 16 цветов.

Еще интересная деталь (взято из ПЭВМ АГАТ исполнение 9. КНИГА 2. Техническое описание. Часть 6):
http://agatcomp.ru/agat/Paper/DocsShtat/A9_K2.shtml

Графический среднего разрешения  128х128 блоков , 8 цветов;

Все-таки мы имеем только 8 самостоятельных цветов. и 1 бит для яркости.
Отсюда и получаем грязно-желтый и желтый: просто изменяя яркость (без изменения тональности и насыщенности) коричневый мы не получим из желтого.
Убедиться можно на примере задания цветов в формате HSL

Voldemar0 пишет:

А ещё, если память не изменяет, в стоке формирователь ч/б сигнала содержит неудачный набор резисторов на материнке (и, кажется, он ещё и различается у 7 и 9) и часть интенсивностей монохрома повторяется (вроде бы биты R и G имеют равный или похожий вес, а B заметно тусклее).
Я на эту тему даже перепаивал свои материнки.

Вот! :)  На ч/б "колокольчике" мог различить только 3 градации серого между белым и черным (всего 5 видимых градаций) в "16-ти цветном режиме".
Ну не мог я не различать на глаз 16 градаций серого если они там были корректно представлены. Блоки разных цветов ставил бок о бок для сравнения. Даже списывая на плохо откалиброванный монитор - на хорошем четко видно отличие между яркостью 250 и 251 (из 256 градаций). Вообще человеческий глаз хорошо фиксирует яркость и подслеповат на сличение цветов.

35

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

> эмулятор по умолчанию должен передавать значения цветов снятые с комплектного монитора Агат 9 (аппроксимированные значения cнятые с серии таких мониторов)

У нас в школе класс агатов как раз отличался гиганским разбросом цветов каждого монитора.
И, не смотря на то, что регулировки были выведены наружу (включая два регулятора балланса цветов),
подстроить их так, чтобы получить что-то похожее друг на друга, у меня так и не получилось.

Для меня эмулятор (тема досовского эмуля началась почти сразу с появлением первой PC  - вроде бы ещё 80286 - 20 MHz) - это было воплощение идеального агата, как раз таки не тянущего за собой проблем с нестабильностью, низкой надёжностью флопов и прочего.

И звук реального агата я тоже предпочитал выводить не на внутренний биззер, а на нормальную аккустику. Когда впервые услышал, насколько радикально по другому это звучит.

36 Отредактировано Voldemar0 (21-08-2021 04:53)

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

03 и 15:
аттач
Правила те же: образ с OK - вероятно, наиболее правильный.
Остальные с несколькими отличиями.

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

Post's attachments

Attachment icon 03-15-dsk.rar 260.77 kb, 126 downloads since 2021-08-21 

37 Отредактировано vvhitevvizard (21-08-2021 23:34)

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

Интересная дата у файла НАПРАВО - почти август 1996. Это на 3 с половиной месяца позднее даты последних правок для Внешней Зоны:

REM "ЧЕРНВЙ ЗАМОК СР 24 07 96"
1  REM "НАПРАВО86"

помню, что делал массивные дополнения к игре. Но удивляет, что так поздно.

обьем текстов в старых локациях где-то вырос вдвое, напр.:

Spoiler

Сцена с гигантским пауком

" В КРОНЕ ЯВНО С ПРЯТАНО ЧЬЕ-ТО ГНЕЗДО ИЛИ ЛОГОВО,ОТТУДА СПУСКАЕТСЯ ПОЧТИ НЕЗАМЕТНАЯ ВЕРЕВОЧНАЯ ЛЕСТНИЦА,ЧТО-ТО СИЛЬНО НАПОМИНАЮЩАЯ. ХОТИТЕ ВЗОБРАТЬСЯ НА ДЕРЕВО И ПОСМОТРЕТЬ,КТО ТАМ ЖИВЕТ - (1),"

дополнена текстом:

"СРЕДИ ВЫПИРАЮЩИХ ВО ВСЕ СТОРОНЫ БУРЫХ ВЕТВЕЙ С НАРОСТАМИ СЕРОГО МХА ВЫ ГДЕ-ТО ВВЕРХУ УЛАВЛИВАЕТЕ СЛАБОЕ ДВИЖЕНИЕ ВЕТВЕЙ. НО СКОЛЬКО НЕ ПРИСМАТРИВАЕТЕСЬ, ОДИН ЛИШЬ ВИД ЧЕГО-ТО БОЛЬШОГО В КРОНЕ НЕ ДАЕТ ВАМ ПОНЯТЬ, ЧТО ЖЕ ЭТО ТАКОЕ."
...
"ВЫ ЗОВЕТЕ. ОДНАКО ПОЧТИ НИКАКОГО ЭФФЕКТА КРОМЕ СЛАБОГО КОЛЕБАНИЯ БУРЫХ, С НАРОСТАМИ МХА ВЕТВЕЙ ЭТО НЕ ВЫЗЫВАЕТ. ЕСЛИ БЫ ТАМ ДЕЙСТВИТЕЛЬНО КТО-ТО И БЫЛ, ОН НЕ ХОЧЕТ ПОКАЗЫВАТЬСЯ, ТАК КАК, НАВЕРНОЕ УЖЕ ДАВНО ЗАМЕТИЛ ВАС. ИТАК, РЕШАЙТЕСЬ:"
...
"ВЫ ДОТЯГИВАЕТЕСЬ ДО ТОЛСТОЙ НИЖНЕЙ ВЕТКИ И СТАРАЕТЕСЬ УДЕРЖАТЬСЯ НА НЕЙ, НО ВЕТВЬ НАСТОЛЬКО СКОЛЬЗКАЯ, ЧТО ВЫ СРЫВАЕТЕСЬ ВНИЗ И С ГЛУХИМ ТРЕСКОМ ПАДАЕТЕ ВНИЗ, ПОДМИНАЯ ПОД СОБОЙ КУЧИ ГНИЮЩИХ ВЕТОК.": GET A$
100  "ИЗ КРОНЫ ДОНЕСЛОСЬ СЛАБОЕ ШИПЕНИЕ. ВЫ ЗАМИРАЕТЕ, НО, КАК НИ СТРАННО, ТЕПЕРЬ СТОИТ ПОЧТИ МЕРТВАЯ ТИШИНА, ХОТЯ НЕСКОЛЬКО МГНОВЕНИЙ НАЗАД ВЫ СЛЫШАЛИ ПЕНИЕ ПТИЦ НА СОСЕДНИХ ДЕРЕВЬЯХ. ПОПРОБУЕТЕ ЕЩЕ РАЗ - (1),"

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

PRINT CZR$(4)"CHAINTEXT.СИЛЬНЫЙ ВЕТЕР"

CZR вместо CHR.
А возможно, файл портился в памяти и записывался на диск уже с правильной контрольной суммой...
Это в принципе пофиксится написанием автоматического анализа файлов для текста вне кавычек на соответствие командам интерпретатора. С искаженными цифрами сложнее.
-----------------------
После всех сличений результат такой: не прочитался только один сектор в файле РАЗБ2 (сектор 143/1). "Техномагия" не спасла. :) Файл больше нигде не существует и ошибка как раз на месте новой вставки... И среди стертых такого файла ("для донорства" недостающего куска) нет.
Обидно. Вставка была из фэнтэзийного романа Нортона. "ВЫ УВЕРЕННО ИДЕТЕ ВПЕРЕД. ДО СЛУХА ДОНОСИТСЯ ТО УХАНЬЕ ФИЛИНА, ТО ХРИПЛЫЙ ВИЗГ ВДАЛЕКЕ, ТО ЖУТКИЙ ВОЙ...". Очень атмосферно. Я тогда активно заимствовал фрагменты из грандов фэнтэзи: Толкиен, Перумов, Урсула Ле Гуин, Желязны итд, смешивал, дописывал скромное "свое", редактировал под конкретные игровые локации. =)

38 Отредактировано vvhitevvizard (21-08-2021 19:39)

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

в некоторых файлах осталась строка с командами DOS OPEN и WRITE, и следующий за ними листинг всего кода бейсик программы LIST:

50000  PRINT  CHR$ (4)"OPENTEXT.ЯРКАЯ ЛУНА           ": PRINT  CHR$ (4)"WRITETEXT.ЯРКАЯ ЛУНА                     ": LIST

Так я переделывал А в простой T загружая и выполняя 50000 строку. :)
(из мануала: После выполнения команд OPEN и WRITE любой вывод из программы, выполняемый с помощью программы "Системный монитор" или PRINT "Бейсика", направляется в открытый текстовый файл).

Файлы типа T. И это не переименованный A-псевдокод, это реально plain text:
https://pic.maxiol.com/thumbs2/1629514097.787614472.clipboard01.png

Все это готовил к тому, чтобы далее перевести в некое подобие скрипта:

HOME COLOR 1
"ПАУК МЕРТВ, И ВЫ МОЖЕТЕ ПОСМОТРЕТЬ, ЧТО ОН ХРАНИЛ В СВОЕЙ ПАУТИНЕ. ВЫ НАХОДИТЕ ЗОЛОТОЙ ДУКАТ, КИНЖАЛ С КОСТЯНОЙ РУКОЯТКОЙ"

Только вот управляющий код на ассемблере, чтобы такие скрипты интерпретировать, не успел написать...
--------------------------------------
Итого, на обоих дисках:
1. T-файлы (не псевдокод) с синтаксисом бейсика (~130 разных наименований). Без начального файла с управляющим кодом/интерфейсом.
2. B-файл с именем "A" длиной 109 блоков - то, что я использовал в кач-ве текстового редактора. Он же и грузится при запуске The Best.
3. S-файл с именем "m" длиной 41 блок - ассемблер в виде резидента (a-la plugin) для The Best. Загружал как "[BOOT m". Запускал резидент в памяти как "T".
4. Пара B-файлов с именами "1" и "2" и пара файлов исходных кодов этих бинарников. где начата переделка управляющего кода игры на ассемблер. Но бинарники нерабочие.
Больше ничего...

И как я в текущем состоянии запускал бейсик-код в виде текстовых файлов (диск v03)? Загадка. Вопрос остается открытым
----------------------
На диске v15, если присмотреться, в файлах уже и не бейсик вовсе, а скрипт похожий на бейсик... синтакс меняется с:

1300  VTAB 21: PRINT "ПАЛАТКИ (424)": GET A$: PRINT  CHR$ (4)"CHAINПАЛАТКИ"

на

1300 "АЛТАРЬ (350)":GET: CHAIN АЛТАРЬ

и типичный скрипт выглядит так:

GOSUB 5000: IF P$="EU" THEN 280
230  H : REM "437"
237  VAR I : "ПОДЪЕМНИК НЕ РАСЧИТАН НА ТАКУЮ ТЯЖЕСТЬ. ОДИН ИЗ КАНАТОВ ОБРЫВАЕТСЯ, ОДНАКО ВТОРОЙ ДЕРЖИТСЯ, ПОКА ПОДЪЕМНИ
242  VAR II : "ПОДЪЕМНИК БЛАГОПОЛУЧНО СПУСКАЕТ ВАС."
245  "И ВОТ ПЕРЕД ВАМИ НЕБОЛЬШАЯ ДВЕРЬ, ЧЕРЕЗ КОТОРУЮ ВЫНОСЯТ КУШАНЬЯ. ВЫ ИЗО ВСЕХ СИЛ НАЛЕГАЕТЕ НА НЕЕ.": GOTO 800

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

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

Погуглив, нашел описание от С.Серкова, поясняющее как текстовый (T) файл интерпретировать через Бейсик:

Для загрузки Бейсик‑программы в память ЭВМ (или ее частей вплоть до отдельных строк) можно конвертировать ее в формат текстового (“Т”) файла и обработать полученный файл командой ДОС EXEC filename {,R}{,S}{,D}{,V}, где S, D, V - обычные параметры доступа к НГМД, а R - номер первой исполняемой записи файла. Команда EXEC исполняет каждую строку текстового файла, передавая ее поочередно интерпретаторам команд ДОС и Бейсика. Выполнение записи, имеющей номер, (то есть по-сути анализ строки Бейсик-программы) приведет к ее вводу в память ПК так, как будто Вы вводили бы ее с клавиатуры, составляя программу.

То есть из исполняемого командой EXEC Т-файла можно как изменять текст Бейсик-программы в памяти, так и запускать на выполнение отдельные ее части командой RUN с указанием номера строки. С помощью текстового файла командного типа можно дозагружать в активную Бейсик-программу какие-либо участки ее рабочего текста, замещать ее отдельные части другими фрагментами или удалять ненужные строки программы (командой DEL)
Не знаю, работает ли это с версией ДОС комплектного ИКП Бейсика или требуется "Master Basic" (который, кстати, у меня назван с номером 93 - и как я понимаю, его разработка продолжалась минимум до 95 года).
Выполнение CHAIN (вместо RUN) здесь не сложнее - надо сначала стирать старые строчки (неинтерфейсная часть находится с 1 по 4999 строки) через DEL 1,4999, затем подгружать новый кусок бейсик текста и запускать его.
----------
И появляется гибкость! И само собой решается еще один маячивший на горизонте ВОПРОС - CHAIN у меня подгружает файлы, в большинстве которых интерфейсной части (строки начиная с 5000) нет - то-есть полноценная игра в таких неполных файлах невозможна - данные (артефакты, статы персонажа и прочее) передаются по цепочке но некому будет обрабатывать вызов "листка путешественника" для работы с артефактами, нельзя будет сохранить/восстановить статус игры итп.
Получается, я создавал эти файлы таким образом, ЗНАЯ или рассчитывая найти способ присоединения интерфейсной части программы "на лету". Неразумно же было хранить на диске сотню дубликатов одного и того же куска кода.
Теперь же через EXEC можно отдельно подгружать интерфейсный код. Либо наоборот, всегда держать его строчки в памяти, удаляя только сменяемые строчки.
-----------
Разумеется, естесственное желание дописать конвертер в еще более простой формат скрипта и через интерпретатор+интерфейсную часть запускать на PC. Возможно, доберусь до этого, но потом, после моего переезда.
Моя цель-минимум (после реставрационной техномагии, проделанной Игорем и Волдемаром) была восстановить работоспособность на Агате последней версии проекта в том ее виде, что была в активной разработке. Здесь можно сделать грубый hack - развернуть вспять скриптовую нотацию (в файлах локаций последних версий) обратно в синтаксис Бейсика и запускать (все еще текстовые файлы) через EXEC.

Также, есть потенциал в виде сохранения переменных Бейсик-программы на диск и последующего считывания после ресета Бейсика ($E000?):
Существуют две специальные команды ДОС, первая из которых, STORE filename {,S}{,D}{,V} сохраняет область переменных Бейсик‑программы в файле типа I, а вторая RECALL filename {,S}{,D}{,V} считывает указанный файл как область переменных, передавая ее активной в данный момент Бейсик‑программе
Тогда 1 шаг цикла будет:

STORE "data"; ресет Бейсика (или удаление всех строк), EXEC "новая локация"; EXEC неизменяемая часть интерфейсного кода; RECALL "data", RUN.

либо упрощенно (после загрузки интерфейсной части):

DEL 1,4999; EXEC "новая локация"; RUN

40 Отредактировано Voldemar0 (22-08-2021 09:16)

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

Я про exec писал ранее (когда говорили об импорте A- файлов).

Не знаю подробностей, но внешне exec работает точно также как последовательность open и read.
Разница в том, что exec не прерывается при переходе в диалог с бейсиком, а read - прерывается.
Т.е. read больше заточена под вызов из программ (из любых, не только бейсиковских), а exec - из комстроки. Действия их идентичны: они отключают stdin от клавиатуры и подключают к T- файлу.
Т.е. файл можно читать не только оператором INPUT, но и GET.

Это всё похоже на .bat -файлы в досе или в винде.

Сама эта техника описана у мымрина, а может быть и в штатных доках.
Она идёт ещё от эпловской версии dos, так что на агате есть везде (я думаю и в TheBEST есть).

Я использовал EXEC в одной из своих ранних прог.
У нас в школе был принтер Epson LX-800 подключенный к агату.
У него была прошивка кирилицы cp866. Ни одна прога на агате такого не знала.
Даже агат-автор, который поддерживал несколько разных принтеров с разными (прямо говоря - не особо стандартными) кодовыми таблицами.
И вот первое лобовое решение для печати хоть каких-то текстом с русскими буквами - моя прога с внезапно возникшим названием NOREX. Откуда я выкопал это слово - не знаю, само как-то придумалось.

Прога сперва умела печатать T - файлы (обычным способом: open, read....).
Потом допилил ей навык грузить B- файлы агат-автора. Прога не умела выполнять всякие .ов, .цв и прочие команды, но чтобы было хоть чуть интереснее, сделал ей поддержку кодов в формате .XXX - трехзначное число воспрималось как код символа, который нужно отправить на принтер:

обычный текст
.014жирный текст
.015

А дальше хотелось ещё сделать печать A- файлов.
Я сделал так: прога запрашивала у пользователя имя файла, создавала T- файл:

LOAD прога
*$36:!$0A03!:LIST
<WAIT ANY KEY>
LOAD NOREX
HOME:VTAB 5:RIBBON=4:RUN 480

и затем запускала его через EXEC.

В первой строке читается пользовательская прога.
Затем встроенным ассемблером переключается вектор $36 (stdout) на мой драйвер принтера (с перекодировкой кирилицы) и выполняется команда LIST.
Потом пользователю сообщается о том, что всё закончено и можно продолжить работу.
И дальше в память опять читается NOREX и запускается где-то из середины (главное меню, наверное).

Полный вариант:

Spoiler

870 ? "ФAЙЛ C ПPOГPAMMOЙ":?:? "HA ЯЗЫKE 'BASIC'."
900 GOSUB 4000:POKE 50,13:? "ПOCЛE PAБOTЫ ФAЙЛ":?
904 ? CHR$(34)"PRINT.BAS.NOREX.0.0"CHR$(34)" BЫ":?
906 ? "MOЖETE УДAЛИTЬ.":? O$"OPENPRINT.BAS.NOREX.0.0"
910 ? O$"WRITEPRINT.BAS.NOREX.0.0":? "LOAD"F$:? "*$36:!$0A03!:LIST"
913 ? "RIBBON=3:?"CHR$(34)"BCTABЬTE ДИCK C ФAЙЛOM 'NOREX'"CHR$(34)":RIBBON=0"
915 ? "RIBBON=3:? CHR$(25)"CHR$(34)"И HAЖMИTE ЛЮБУЮ KЛABИШУ."CHR$(34)":RIBBON=0"
917 ? "WAIT $C000,$80,0:POKE $C010,0"
920 ? "LOADNOREX":? "HOME:VTAB 5:RIBBON=4:RUN 480"
940 ? O$"CLOSEPRINT.BAS.NOREX.0.0":RIBBON=0
950 HOME:*$030A:
960  !     AND #$7F
970  !     CMP #13
980  !     BNE T0
990  !     JSR T0
1000 !     LDA #10
1010 !  T0:PHA
1020 !     CMP #96
1030 !     BMI T2
1040 !     SEC
1050 !     SBC #96
1060 !     TAX
1070 !     LDA T3,X
1080 !  T2:STA $C0D0
1090 !     LDA #$00
1100 !     STA $C0D1
1110 !  T1:LDA $C0D2
1120 !     BMI T1
1130 !     LDA #$80
1140 !     STA $C0D1
1150 !     PLA
1160 !     RTS
1170 !  T3:$CEB0B1C6B4B5C4B3C5B8B9BABBBCBDBEBFCFC0C1C2C3B6B2CCCBB7C8CDC9C7CA
1180 !    :
1190 ?:? O$"EXECPRINT.BAS.NOREX.0.0":END

В дальнейшем, неплохо разобравшись с ассемблером, я раскопал внутри агат-автора драйвер принтера и заменил на свой. И, вроде бы, в Школьнице (в ДОК) сделал то же самое.

--

Команда chain тоже есть во всех бейсиках и нередко использовалась. Особенно часто встречается в крупных обучающих прогах.

А вот насчёт recall и store - не могу сказать почти ничего.
В реальных прогах не видел её, вполне возможно, что нормально это работает только в серковском бейсике.

41 Отредактировано vvhitevvizard (22-08-2021 13:42)

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

Voldemar0 пишет:

Я про exec писал ранее (когда говорили об импорте A- файлов).

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

Я сделал так: прога запрашивала у пользователя имя файла, создавала T- файл:

LOAD прога
*$36:!$0A03!:LIST

и затем запускала его через EXEC.

Здесь интересный симбиоз командного файла из ДОС/Бейсик команд и ассемблерных вставок получается. Мощная вещь сама по себе. :)

А вот насчёт recall и store - не могу сказать почти ничего.
В реальных прогах не видел её, вполне возможно, что нормально это работает только в серковском бейсике.

В штатной документации о них ни слова. Хотя Серков в списке своих доработок не приводит добавление этих команд, но говорит, что они были изначально. Вообще с интересом прочел все его статьи 1996 года - Игорь (при поддержке комьюнити) проделал огромную работу собрав все эти материалы!
-----------
А есть basicmaster95 в виде отдельного файла? Версия для The Best. Та версия 95, что идет в виде загружающегося тела бейсика/дос с треков, она ведь не умеет создавать отдельный файл с собой?

По причине того же пофигизма, экспорт и импорт не обёрнуты в обработчики ошибок. Поэтому если file not found или какая-то ещё ошибка доступа к файлу происходит, прога падает.

Волдемар, спасибо за живое участие! Да, действительно, падает из-за того, что не может найти файл. :) Утилита очень мощная и невероятно полезная в ее текущем виде, но конечно, выдачу внятного текста ошибки все же лучше доделать.

42 Отредактировано vvhitevvizard (23-08-2021 01:54)

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

В догонку по поводу неразберихи, какие цвета в "16-ти цветном" режиме.
В штатном мануале к Бейсику есть такое описание команды:
COLOR=X
устанавливает цвет для последующих графических операторов (0<=X<=15).
Кодировка цветов в зависимости от значения Х приведена ниже:
1 - красный; 2 - салатовый; 3 - желтый;
4 - синий; 5 - сиреневый; 6 - голубой ;
7 - белый; 8 - черный; 9 - коричневый;
10 - зеленый; 11 - хаки; 12 - темносиний;
13 - фиолетовый; 14 - бирюзовый; 15 - серый;

Коричневый! Цвет Хаки... Сиреневый... Бирюзовый... Ахаха. Видимо, они взяли описание с ANSI Бейсика, где базовые цвета стандартизованы.
----------------------------------
Проверил EXEC в BasicMaster93. Скорость ввода построчно очень медленная - полминуты на загрузку сотни строчек. Поставил скорость эмуляции максимальную - 500%. Все равно с такой производительностью процесс может представлять только академический интерес. :)
Кстати, можно ли во время отработки EXEC временно отключать (перенаправлять в никуда) эхо выводимое ДОС/Бейсик на экране? Какой-нибудь Poke с кодом RTS пихать? Возврат пустых строк и сьезжающий экран во время выполнения EXEC явно лишнее. :)
EDIT: тут сам себе отвечу цитатой из штатного мануала (но не проверял пока):
Отображение данных на экране задается состоянием "I" команд MON/NOMON.
--------------------------------------

DEL 1,4999; EXEC "новая локация"; RUN

В ручном (диалоговом) режиме работает. Импортировал текстовый файл с PC, загрузил по EXEC, удалил часть строчек кода и загрузил другой EXEC.

43 Отредактировано vvhitevvizard (22-08-2021 18:49)

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

Но далее словил кучу проблем в практической реализации EXEC из бейсик программы

Spoiler

при попытке отработать эту же цепочку команд програмно:
600  VTAB 21: PRINT "          ТОРГОВЕЦ (176)        ": GET A$: DEL 1,4999
  601  PRINT : PRINT  CHR$ (4)"EXEC TEXT.ТОРГОВЕЦ"
Бейсик после отработки "DEL" оператора переходит в диалоговый режим, то-есть вываливается в командную строку (о чем сказано в его мануале - из Бейсика останавливается, по EXEC - нет. OK).
Попробовал запускать "DEL 1,4999" тоже в виде отдельного командного файла. "EXEC DEL" с содержимым DEL T-файла:
DEL 1,4999
Работает.
----------------------
Также пробовал обойтись грязно (без DEL) - ведь по сути мы вводом заменяем существующие номера строк новым содержимым. Неактуальные остаются но ни на что не влияют, просто захламляя память (что не ново для концепции Бейсика), актуальные же строки переписываются. Замена (без удаления) работает:
600  VTAB 21: PRINT "          ТОРГОВЕЦ (176)        ": GET A$
  601  PRINT : PRINT  CHR$ (4)"EXEC TEXT.ТОРГОВЕЦ" : RUN 30

Стал двигаться дальше и уперся в проблему вложенных EXEC вызовов.
По совпадению 601 строка, содержащая RUN 30 в конце, после EXEC "выживает" (не содержится в новом файле), но почему-то отработав EXEC, до RUN 30 исполнение не доходит.
Настоящий challenge :)))

Выделим проблемное место отдельно. Проблема начинается здесь при EXEC "TEST1", где файл следующего содержания:
PRINT  CHR$ (4)"EXEC TEST2"
PRINT "OK"
Внутри файла "TEST2" любой валидный синтаксис Бейсик. EXEC команда выполняется корректно - после отработки введеные строчки показываются через LIST, но до исполнения второй строчки в TEST1 ("PRINT "OK"") не доходит. :(
----------------------
Позже выяснилось, что дело не во вложенности EXEC. Запуская бейсик A-файл:
1000 PRINT  CHR$ (4)"EXEC TEST2"
1001 PRINT "FILE LOADED" : GET A$ : GOTO 30

управление переходит в диалоговый режим после выполнения EXEC... Тупик. Хотя может другие версии интерпретатора ведут себя иначе?

Дальше - больше. A-файл следующего содержания:
1000 PRINT CHR$ (4)"EXEC TEXT.ТОРГОВЕЦ"
1001 PRINT CHR$ (4)"EXEC RUN1"

Запускаем его обычным способом.
"RUN1" - имя несуществующего файла. Исполняет сразу вторую строчку выдавая ошибку файл-не-найден минуя первую строчку. В первой заметное долгое выполнение (TEXT.ТОРГОВЕЦ содержит полсотню строк).

А если RUN1 существует с содержимым:
RUN
то исполнение зацикливается на бесконечном дерганьи диском в попытке исполнить ВТОРУЮ строчку снова и снова.

TLDR; когда в командном T-файле или A-файле встречается два вызова EXEC, результат непредсказуем - может исполниться только либо первый вызов EXEC, либо второй, но не оба. В аттаче простой набор тестовых файлов+сам интерпретатор, ни при каких условиях мне не удалось добавить строчки с обоих присоединяемых по EXEC файлов. "93"-для удобства назван сам интерпретатор, TEST - запускаемый A-файл, TEST2,R1 - присоединяемые T-файлы.

Это с Basic Master 93.

Post's attachments

Attachment icon EXECTEST.7Z 22.42 kb, 115 downloads since 2021-08-22 

44 Отредактировано Voldemar0 (22-08-2021 22:43)

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

> Утилита очень мощная и невероятно полезная в ее текущем виде, но конечно, выдачу внятного текста ошибки все же лучше доделать.

В todo dos33c2 уже пунктов 20 :))
Там и ошибки и пожелания.

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

==

> А есть basicmaster95 в виде отдельного файла? Версия для The Best. Та версия 95, что идет в виде загружающегося тела бейсика/дос с треков, она ведь не умеет создавать отдельный файл с собой?

У нас есть 95-я версия в виде образа, но в файлы никакой бейсик себя записывать не умел.
Да оно им и не надо. Конвертация операционок и сред программирования в файлы - это результаты деятельности отдельных программистов. Цель очевидная: утрамбовать побольше инструментов на один диск.
Я сам когда-то загонял семёрочный ДОК ("Ассемблер") в файл. Было вполне удобно.
Разбираешь логику загрузки системы, скучиваешь все блоки в один файл и дописываешь "раскидыватель по памяти". И, возможно, перепиливаешь какие нибудь процедуры p'n'p, типа поиска контроллеров ОЗУ, дисководов.

--

EXEC:
когда копаешся с этой командой не забывай: она перенаправляет stdin, а не исполняет команды из файла. Т.е. она как бы фиксирует внутри DOS флажок "дальше все запросы к клавиатуре нужно брать из файла". Соответственно, два exec подряд тебе не дадут ничего: первый подключит первый указанный файл, дальше у тебя запросов к клавиатуре нет, а ты требуешь подключить уже другой файл. Я сомневаюсь, что авторы dos3.3 расчитывали на такую вложенность.

Смотри мой пример:
1190 ?:? O$"EXECPRINT.BAS.NOREX.0.0":END
Т.е. я делаю EXEC и затем END.
Бейсик выходит в комстроку, а там его (вместо клавиатуры) как раз ждёт файл PRINT.BAS.NOREX.0.0.

--

Про скорость EXEC - не знаю, быстро это или медленно.
Если нужно просто однажды скомпилить прогу из T - достаточно быстро.
Если же ты хочешь через exec делать оверлей A- проги - не, это точно будет тормоз.
Фактически ведь загрузка из T- файла бейсик проги - это та же компиляция.
Бейсик при вводе строк частично парсит их и сохраняет уже в слегка компилированном виде.

==

Управление дублированием вывода: команды MON и NOMON, описана в доках, в мымрине и вообще везде, где описаны команды агатовского DOS. Хотя не все, кто копировал доки агата, понимал о чём идёт речь ;))

У этих команд три опциональных аргумента: I C O.
Первая команда включает вывод мониторинга, вторая - выключает.
Опции означают: I - ввод (оператор INPUT бейсика или комстрока читает из файла), C - команды (оператор PRINT бейсика с префиксом CHR$(4) обращается к ДОС), O - вывод (оператор PRINT бейсика пишет в файл).
Т.е. MONICO (пробелы допустимы, но не обязательны) - включить вывод на экране всего, что идёт между stdin и stdout и файлами, NOMONICO - выключить всё.
Но на всякий случай почитай доки: я могу ошибаться в каких-то деталях.

Да, отключение вывода немного ускоряет работу, но не так чтобы уж очень.

MON и NOMON влияют как на OPEN/READ, OPEN/WRITE так и на EXEC.

==

На всякий случай: stdin / stdout - на агате примерно то же, что и в питоне (и вообще в dos, win...):
https://docs-python.ru/standart-library … dulja-sys/
Т.е. это некий абстрактный дескриптор или хендл (в разных ОС он может иметь разный тип, хотя в современных осях это, обычно, целое число), указывающий на какой-то источник и приёмник стандартного (не заданного явно) ввода и вывода.
В агате - это указатели на процедуры ввода и вывода символа.
Т.е. когда бейсик ждёт от тебя команды, он вызывает процедуру ввода строки.
Сообщает ей символ приглашения ("]") и ждёт результата в буфере ввода.
Процедура ввода строки вызывает процедуру ввода символа, а та делает косвенный JMP на вектор stdin. По этому вектору в разных ОС и в разных режимах прописаны разные процедуры.
Под бейсиком будет указатель на бейсиковскую процедуру ввода с клавиатуры, но если загружена ДОС,
то она перенаправляет вектор на себя. Когда соответствующая процедура
дос получает управление, она как раз проверяет - находиться ли бейсик в режиме исполнения
программы или в режиме комстроки, а также смотрит: не открыт ли какой-то файл на ввод и по какой команде он был открыт.
И дальше либо возвращает символ из файла либо передаёт управление процедуре
ввода символа с клавиатуры бейсика.

Цепочка длиная, так что если отключить дос от неё, то, теоретически, скорость оператора PRINT
увеличиться. Но я этого не пробовал делать :) Помимо print может ускориться и list, например.

45 Отредактировано vvhitevvizard (23-08-2021 05:10)

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

надо вспомнить подробности её архитектуры и сразу всё потом сделать\

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

У нас есть 95-я версия в виде образа, но в файлы никакой бейсик себя записывать не умел.

Просто странно, что автор ремастеринга Бейсика, работая в USN, не стал делать 95й версии в виде самодостаточного файла для фирменной OS от USN - the BEST. :)
Кстати, файл SYS.BASIC93 выводит по команде HELP дату 1994. Может, это и есть версия 95?
https://pic.maxiol.com/thumbs2/1629668267.787614569.clipboard01.png

не забывай: она перенаправляет stdin, а не исполняет команды из файла. Т.е. она как бы фиксирует внутри DOS флажок "дальше все запросы к клавиатуре нужно брать из файла". Соответственно, два exec подряд тебе не дадут ничего: первый подключит первый указанный файл, дальше у тебя запросов к клавиатуре нет, а ты требуешь подключить уже другой файл. Я сомневаюсь, что авторы dos3.3 расчитывали на такую вложенность.
Смотри мой пример:
1190 ?:? O$"EXECPRINT.BAS.NOREX.0.0":END
Т.е. я делаю EXEC и затем END.
Бейсик выходит в комстроку, а там его (вместо клавиатуры) как раз ждёт файл PRINT.BAS.NOREX.0.0.

Итого, после EXEC надо выйти в диалоговый режим, чтобы Бейсик нахватался из перенаправления.
Но что посоветуешь конкретно делать в моем случае (см тестовый набор EXECTEST.7z в предыдущем посте).

1000 ?:? CHR$ (4)"EXEC TEST2"
1001 ?:? CHR$ (4)"EXEC R1"

Если я напишу в конце строки 1000 ":END", это ведь не позволит Бейсику дойти своим ходом до следующей строчки 1001 со вторым EXEC - программа будет завершена. А в выполняемом по EXEC куске команд (чтобы оттуда вернуться к выполнению следующей за текущей строчки Бейсик программы) может быть неизвестна строка "для возврата" (или я как-то должен ее передавать - через намеренно оставленную ошибку и RESUME? Или где-то через PEEK получать текущую строку исполнения в Бейсике - официально же такой функции нет, как я понимаю).

Допустим, сделал так:

1000 ?:? CHR$ (4)"EXEC TEST2":END
1001 ?:? CHR$ (4)"EXEC R1":END
1002 ? "done"

а в TEST2 и R1 в последней строке есть "возврат из диалога" перезапуском через "RUN 1001" и "RUN 1002" соответственно:

10 PRINT "HELLOOO"
RUN 1001

К строчке 1001 и затем 1002 возвращается... Второе перенаправление (EXEC R1) отрабатывает... Вставки из обоих перенаправлений появляются.
Уже прогресс. Но по дизайну адрес возврата неизвестен - запускаться EXEC может с произвольных строчек.

сиинтаксис RUN/GO по содержимому переменной ведь невозможен?
"ON X GOTO 1001,1002" а так мы опять перечисляем строчки перехода, которые по дизайну неизвестны.
Пробовал STOP (вместо END) и продолжение CONT - ругается "НАДО RUN В CONT" :)
----------------------
Кстати, спасибо за ? вместо самого часто используемого оператора PRINT.
А вот O$ как замена CHR$ (4) в "Мастере" не переваривается. Что оно делает?

Управление дублированием вывода: команды MON и NOMON, описана в доках, в мымрине и вообще везде, где описаны команды агатовского DOS. Хотя не все, кто копировал доки агата, понимал о чём идёт речь ;)

Я вообще только сейчас узнаю и осознаю, что был довольно законченный инструментарий для перенаправления ввода/вывода как в *nix и msdos. Впрочем, Бейсиком я тогда перестал интересоваться довольно быстро. Вместо ассемблерных вставок просто полностью перешел на Ассемблер. К слову, Си, Паскаль и прочие тоже были "dead on arrival" для Агата учитывая убогую поддержку у 6502 компилируемых языков высокого уровня: сложные режимы индексации (особенно для стека), расширенный набор регистров итп.

Voldemar0 пишет:

Т.е. MONICO (пробелы допустимы, но не обязательны) - включить вывод на экране всего, что идёт между stdin и stdout и файлами, NOMONICO - выключить всё.
Но на всякий случай почитай доки: я могу ошибаться в каких-то деталях.

Но с ними тоже не получилось достичь желаемого. Штатный мануал говорит о таком порядке аргументов:
NOMON {C} {,I} {,O}
Попробовал

999 ?:? CHR$ (4)"NOMONCIO"

Команда принимается, но вызовы EXECов продолжают спамить пустые строчки с "}" приглашением на каждую строку в исполняемом файле (каждый раз сдвигая весь экран вверх). Вроде как эхо уже отключено по умолчанию, штатный мануал декларирует следующее:
При начальной загрузке устанавливается NOMON C,I,O.
Так что вопрос остается в силе - как подавить приглашение Бейсика и вывод пустых строк в диалоговом режиме? :) Можно было бы сказать, что пользователь хочет "странного" - но на самом деле вполне ожидаемый режим в случае автоматического задействования EXEC директивы.
----------------------------------

Если нужно просто однажды скомпилить прогу из T - достаточно быстро.
Если же ты хочешь через exec делать оверлей A- проги - не, это точно будет тормоз.
Фактически ведь загрузка из T- файла бейсик проги - это та же компиляция.
Бейсик при вводе строк частично парсит их и сохраняет уже в слегка компилированном виде.

Выбор:
1. Либо компилить вручную каждый A-файл "локации" с приписыванием к нему интерфейсной части и последующем хранении раздутых файлов на диске (~двойной обьем будут занимать). И после каждой правки текстовых файлов локаций и тем более интерфейсной части процедуру компиляции повторять снова... Но это решение "в лоб" решит все проблемы с производительностью и функционалом.
2. Либо найти способ оверлеи грузить насколько возможно быстро с отключением вывода на экран и всего лишнего. Текущая задержка в 20 секунд для подгрузки следующей локации (500% скорость эмуляции) еще терпима для тестовой proof-of-concept версии. Зато файлы-исходники можно править на лету. И обьем на диске значительно меньше.
У С.Серкова для его Бейсика есть драйвер-плагин - то-есть при минимизации времени построчного считывания из файла (что вроде не особо ускоряется 500% скоростью эмуляции) мы упираемся только в скорость компиляции Бейсика:
Единственный недостаток использования Т-файлов - слишком медленное их выполнение. Однако, при использовании драйвера виртуального диска фирмы Friends` software, работающего значительно быстрее чем физический накопитель, их применение не лишено смысла.
PS: виртуальный RAM диск есть в The BEST (если бы БейсикМастер переделывали тогда сразу под эту ОС многие бы проблемы решались. Если я правильно понял, у автора переделки были исходники Apple Бейсика. Но это уже была бы революция, а не эволюция).

46 Отредактировано vvhitevvizard (23-08-2021 04:01)

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

Voldemar0 пишет:

Под бейсиком будет указатель на бейсиковскую процедуру ввода с клавиатуры, но если загружена ДОС,
то она перенаправляет вектор на себя. Когда соответствующая процедура
дос получает управление, она как раз проверяет - находиться ли бейсик в режиме исполнения
программы или в режиме комстроки, а также смотрит: не открыт ли какой-то файл на ввод и по какой команде он был открыт.
И дальше либо возвращает символ из файла либо передаёт управление процедуре
ввода символа с клавиатуры бейсика.

Cпасибо за пояснение. Я буквально позавчера нашел и прочел статью на agatcomp.ru "Антология Бейсика". Которая наконец проясняет как же взаимодействовали ДОС и Бейсик.

Цепочка длиная, так что если отключить дос от неё, то, теоретически, скорость оператора PRINT
увеличиться. Но я этого не пробовал делать :) Помимо print может ускориться и list, например.

Такая патчилка была бы полезной на практике, чтобы для моментов исполнения программы, где ДОС функционал не нужен, временно отключать эту лишнюю "петлю" операций которая ничего кроме замедления не несет.

Насчет STORE/RECALL: С.Серков, увы, сам себе противоречит в разных статьях. В добавок к его зародившей надежду цитате выше про эти директивы, в списке отличий от Бейсика-ИКП1 упоминается следующее:
Стандартный интерпретатор "Бейсик" имел пять команд для работы с магнитофоном: LOAD, SAVE, STORE, RECALL (не путать с аналогичными и работающими командами ДОС) и SHLOAD. Кроме того, что они потеряли свою актуальность при привязке интерпретатора к ДОС в ПЭВМ АГАТ-9, в отличии от APPLE IIE, но они еще и не работают, т.к. самих подпрограмм чтения/записи на магнитную ленту в системе нет (благодарите за это разработчиков). Итак, у меня было два пути: либо вставить недостающие подпрограммы (что вполне реально), либо наоборот - убрать подпрограммы этих операторов (при этом появлялась возможность вставить другие полезные команды в таблицу команд). Я выбрал второй путь, т.к. работа с магнитофоном при наличии ДОС в наше время вряд ли нужна.
Проверил - выпилено - на команду STORE basicmaster93 ругается "СИНТ. ОШ". :(
-------------------------------------------
Кстати, файлы по МастерБейсику под рубрикой "Система расширения возможностей языка программирования "БЕЙСИК" ПЭВМ "АГАТ-9"" не открываются, напр.:
http://agatcomp.ru/agat/Software/Langua … 01.1.shtml

47 Отредактировано Voldemar0 (23-08-2021 08:42)

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

> Главное, не скупиться на подробные комментарии - их много не бывает.

;) Боюсь, если бы работал настоящим программистом в команде, мне за обилие комментариев в коде уже бы что нибудь высказали. Но я никогда не работал в командах. Сам себе всегда от jun'a до team lead. Посмотри исходники софта для моста, например, особенно ту часть, которая крутиться на контроллере.

> Просто странно, что автор ремастеринга Бейсика, работая в USN, не стал делать 95й версии в виде самодостаточного файла для фирменной OS от USN - the BEST. :)

USN - дистрибьютор. Точнее, они тоже выпускали собственное ПО, но также продавали и чужое.

Кроме того, самодостаточный файл не имеет защиты от копирования, в то время как официальные BM их имеют. ... Что как бы намекает на то, что версия в файле была немного не авторской.

> Может, это и есть версия 95?

нет, 95 - это выпуск 1995 года. А у тебя 94.
Посмотри аттач, там разные сборки в-файле BM за разные годы.
Заодно опишешь, в чём там разница.

> Но что посоветуешь конкретно делать в моем случае

Возьму таймаут, надо вникнуть и подумать.

> А вот O$ как замена CHR$ (4)
"O$=chr$(4)" в начале проги.

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

Не, MON NOMON влияют на перенаправленные потоки. Ты вызываешь EXEC - перенаправляешь ввод. Но вывод-то не перенаправлен, он по умолчанию идёт на экран, а MON только разрешает дублирование потока, который перенаправлен в файл, на терминал.

С другой стороны : когда ты нажимаешь кнопку, сама процедура ввода символа не выводит этот символ. Его выводит уже процедура ввода строки, что -то вроде:

int enter_string(const char prompt, char *buf) {
   putchar(prompt);
...
   k = getch();
   if (k >= ' ') putchar(k);
   buf[xxx] = k;
   if (k == '\r') { putchar(k); return 0; };
...
}

По такой логике весь ввод должен всё равно должен бы попадать на вывод.
Я пасс, не знаю, по какой логике этот вывод "]" остаётся, а эхо вводимых символов удаляется.

Думаю, если очень хочется всё порезать, можно попробовать вручную вектор $36 завернуть на команду RTS. Но есть вероятность, что дос (особенно ИКП-шная) попытается его восстановить.

> Если я правильно понял, у автора переделки были исходники Apple Бейсика.

Я тоже так думал, но однажды Игорь обнаружил один баг в функции VAL() и когда я предложил ему списаться с Серковым, оказалось, что у него полных исходников не было. Он просто изучал большие куски кода и в них направленно вносил изменения. (баг был найден в ИКП бейсике, но и в серковском он тоже есть).

У меня сейчас есть исходники бейсиков, в т.ч. вроде бы есть ИКПшные, но это лютый дизасм с метками в стиле "M_D031" и без комментариев. Пользы от них - только попробовать скомпилировать и убедиться, что оно с чем нибудь совпадёт. Но и тут куча работы: версий исходников несколько, сборок того же ИКПшного бейсика тоже с десяток можно насчитать. Что от чего и чем отличается - вопрос для неработающих пенсионеров. Я сейчас в такое дело не полезу. Хотя, конечно, если доводится разбираться с какой-то странностью, копаю её в нескольких разных версиях и результаты записываю.

> Такая патчилка была бы полезной на практике, чтобы для моментов исполнения программы, где ДОС функционал не нужен, временно отключать эту лишнюю "петлю" операций которая ничего кроме замедления не несет.

Проблема в том, что если для Бейсик-60 эта патчилка была бы вполне очевидна : сменил вектор и радуйся, то в ИКП есть механника самовосстановления и при каждом обращении к ДОС она мониторит эти вектора и восстанавливает их. Так что получиться, что патчилка должна учитывать версию пары ос-бейсик (а ничего лучше сигнатурного анализа я так и не придумал для этой цели) и, вероятно, править не только вектора в нулевой странице, но и где-то в теле дос.

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

Возможно, если нужен ускоренный вывод на экран в бейсике, имеет смысл копнуть в сторону оператора "&".
И через него сделать fastputs(), может быть даже прямо в экранную память, минуя чеки границ окна, необходимости скроллинга.....

> Кстати, файлы по МастерБейсику под рубрикой "Система расширения возможностей языка программирования "БЕЙСИК" ПЭВМ "АГАТ-9"" не открываются, напр.

Напиши это в раздел "О сайте", Игорь поправит ссылки.
http://forum.agatcomp.ru//viewtopic.php?id=357

Post's attachments

Attachment icon basic-master.rar 31.24 kb, 112 downloads since 2021-08-23 

48

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

> После всех сличений результат такой: не прочитался только один сектор в файле РАЗБ2 (сектор 143/1). "Техномагия" не спасла. :)

Аттач
Версия другая , но похожа на РАЗБ2

Post's attachments

Attachment icon xxxx.FIL 2.54 kb, 121 downloads since 2021-08-23 

49 Отредактировано vvhitevvizard (23-08-2021 14:28)

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

Voldemar0 пишет:

> После всех сличений результат такой: не прочитался только один сектор в файле РАЗБ2 (сектор 143/1). "Техномагия" не спасла. :)
Версия другая , но похожа на РАЗБ2

Супер! Файлы конечно разных версий и непонятно какая из них новее, но хотя бы концовка файла с сылками на переходные локации восстановлена (общая целостность). С того же диска нашлось под другим именем?
Теперь абсолютные 100%. =) Я в шоке - полмесяца назад миссия казалась невыполнимой!

50 Отредактировано Voldemar0 (23-08-2021 15:40)

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

Мы не волшебники, но кой чему уже научились :)

На том же диске, группа секторов на треке 40.
Ссылок на неё нет, ТСЛ нет, хотя она и объявлена занятой.
Либо сбой ОС при удалении либо что-то ещё.
Найдена сигнатурным поиском по коллекции.