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

Тема: восстановление External Zone, работа в эмуляторе

UPDATE: Ссылка на восстановленную позднюю версию (1996.04) с последними правками: в посте 61
---------------------------------
https://pic.maxiol.com/thumbs2/1628275802.787614634.00.pnghttps://pic.maxiol.com/thumbs2/1628275840.787614634.03.png
https://pic.maxiol.com/thumbs2/1628275866.787614634.06.pnghttps://pic.maxiol.com/thumbs2/1628275884.787614634.07.png

Я продублирую (после переписки по email) здесь поток мыслей и первых впечатлений после того, как по прошествии почти тридцати лет утраченные проекты возвращаются к жизни.
v08fdd (см прикрепленный файл) — дискета, которая уцелела и была в полностью запускаемом состоянии.
Версия Внешней Зоны с загрузкой из среды Best (была версия и с самостоятельной загрузкой с нулевого трека).
Запуск из Best: [RUN SB
Боже мой, ОНО ЗАПУСКАЕТСЯ. =) Аж руки дрожат. Непривычные звуки на PC, непривычный цвет — я работал с чб монитором :) Cразу выясняется, что это одна из ранних версий (1994.11).
Последняя — в апреле 1996 c тонной оптимизаций и улучшений (так вышло, что я с девяностых сохранил самые последние .ASM исходники Внешней Зоны на PC, но без графических и прочих файлов с данными).
Все остальное - словно частичная амнезия. Смотрю в меню игры и не понимаю, какие кнопки нажимать, чтобы запустить  первый уровень. :)
В меню — программа пишет, что ожидает «f1-F1 клавиши» для ~12 пунктов меню — по факту нумпад 6 показывает таблицу рекордов, 7 и 8 стартует первый уровень.
Стрельба — Q, долгое нажатие до заполнения шкалы (сверху) — вспышка которая бьет сразу по всему экрану но слабо.
Усиление оружия — беленькая капсула с буквой «У». Другие детали для ранних версий, да и вообще по игре просто не помню.

Post's attachments

Attachment icon v08fdd (1994-11 EZ autoloading) minimal.7z 86.3 kb, 128 downloads since 2021-08-06 

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

Re: восстановление External Zone, работа в эмуляторе

А вот предположительно последние из восстанавливаемых External Zone (cм v09 в приложении) виснут, если в эмуляторе (v1.29.2) НЕ стоит
External RAM (128Kb) в слоте 2
либо вылетают с
BA70: A=FE X=50 Y=34 P=B4 S=B9
если External RAM (128Kb) в слоте 2 СТОИТ.

Конфигурация эмулятора: архитектура:Агат 9, слот 2:extended RAM 128KB, слот 5:Teac с этим образом.
Интересно, это проблема эмулятора? Или я делал что-то нестандартное с расширенной памятью?
Не помню ничего (
Файл типа "B" с именем "SB" грузится по адресу $BA00 и начинает работу с поиска всех файлов проекта на диске и подгрузки части из них в основную и сохраненением системы в расширенную память Агата (да, возможно это единственный игровой проект, сохраняющий систему в расширенную оперативку вместо холодного рестарта). И где-то здесь переподключение банков оперативки работает некорректно, управление передается в банк, где еще пусто.

PS: Исходные коды проекта с комментариями тех лет и сегодняшними в аттаче (EZ 1996-04.7z).
Управление сначала получает код который в исходниках находится в SE_ZE.asm, SE_DS.asm файлах.

ADD: Через встроенный дебаггер эмулятора частично разобрался. На дискетах размноженная некорректно работающая версия. За 30 лет забылось все. :( Надо искать предыдущую версию, чтобы сделать шаг назад.

Post's attachments

Attachment icon EZ 1996-04.7Z 46.1 kb, 128 downloads since 2021-08-06 

Attachment icon v09fdd (1996-04-08 EZ autoloading) minimal.7z 104.64 kb, 127 downloads since 2021-08-06 

3 Отредактировано Voldemar0 (07-08-2021 07:04)

Re: восстановление External Zone, работа в эмуляторе

Привет!

Ты можешь рассказать общую техническую историю этой игры (какие версии были, какие были особенности разных версий, вектора развития, какие аппаратные рессурсы использовались) ?

Например, может ли игра работать без доппамяти или это невозможно?
Всё только под девятку или была версия и под семёрку?
Из каких программных модулей она состоит (графика + один или несколько движков?)
Как происходила сборка игры: вручную или был какой-то скрипт ?
Как ты определяешь версию (или дату сборки) версии (где это выводиться)?

Я уже сталкивался с этим названием лет 10 назад, но единственное воспоминание: больше количество файлов и много файлов разных версий. В итоге не удалось собрать всё вместе. Что-то запускалось, двигалось и летало (вертолёт в лабиринте), но осталось больше вопросов, чем ответов.
Вот, например, на v09 : там есть текстовые файлы, исходники. Но это исходники игры или какой-то только её части (неполные) или вообще к чему-то другому относятся ?

Ещё вопрос про меню в первом сообщении: я так и не понял что означает фраза:
"ВЫБОР ОПЦИЙ-КЛАВИШИ СПРАВА f1:F1" ?
Это переход по пунктам? Тогда где курсор?
Как подтвердить выбор какого-то из пунктов ?

Можешь рассказать что скрывается за этими пунктами ?

4 Отредактировано AlexBel (07-08-2021 10:34)

Re: восстановление External Zone, работа в эмуляторе

vvhitevvizard пишет:

А вот предположительно последние из восстанавливаемых External Zone (cм v09 в приложении) виснут, если в эмуляторе (v1.29.2) НЕ стоит
External RAM (128Kb) в слоте 2
либо вылетают с
BA70: A=FE X=50 Y=34 P=B4 S=B9
если External RAM (128Kb) в слоте 2 СТОИТ.

Конфигурация эмулятора: архитектура:Агат 9, слот 2:extended RAM 128KB, слот 5:Teac с этим образом.
Интересно, это проблема эмулятора? Или я делал что-то нестандартное с расширенной памятью?

Поставил доппамять 128к в слот 2, контроллер дисковода в слот 5. Не работает. Вот видео: https://disk.yandex.ru/i/5WsYTt3hcbi_4g
Версия 08 запустилась.
Проверить на реале не могу, так как нет модуля расширенной памяти.

5 Отредактировано vvhitevvizard (07-08-2021 16:51)

Re: восстановление External Zone, работа в эмуляторе

AlexBel пишет:

Поставил доппамять 128к в слот 2, контроллер дисковода в слот 5. Не работает. Вот видео: https://disk.yandex.ru/i/5WsYTt3hcbi_4g
Версия 08 запустилась.
Проверить на реале не могу, так как нет модуля расширенной памяти.

Спасибо за оперативный тест! Как минимум выяснилось, что настройки эмулятора здесь не при чем.

Проверить на реале не могу, так как нет модуля расширенной памяти.

На реальной машине должна была по идее корректно отрабатывать отсутствие доппамяти. По крайней мере в коде я делал тест на наличие доп памяти и если ее нет - не сохранял в нее систему. Но на практике конечно доп память не выдергивал из машины для проверки :)

SA_GN.ASM, фрагмент выхода в best из ВЗ по BRK/УПР-СБР:

;____________________вых в best из ВЗ по BRK
RESTORE_The_best2
 CLC
 LDA IA
 BCC GN10
;____________________вых в best при <УПР-СБР>
RESTORE_The_best
 STA $C100   ;ZEROPAGE на "свое место"
 PHP                 ;тек признаки в стек
 STY C                 ;пауза (256 циклов)
GN10A
 DEC C
 CPY C
 BNE GN10A             ;при вых C=1

GN10
 STA $C020          ;tmof: запр всех прерываний
 STA $C100          ;ZEROPAGE на "свое место"


 DO EDIT_MODE

 STA $C21D+$80      ;D банк ДП на 2000
 STA $2000+AXYSP
 STX $2000+AXYSP+1
 STY $2000+AXYSP+2      ;сохр A, Y и X для Best'а
 PHP                  ;сохр C на время:
 ROR GN95+1              ;BRK C=0 или C=1 RESET

 SEC
 JSR ZP_SAVER

 STA $C200
 LDA $C200             ;если сюда не запишется 00,
 BNE GN8B             ;то ДОП ПАМЯТИ нет !
 LDX #$02
 LDA #$20             ;восст 2 бнк (E,F) best'а и
 JSR MOVE_best         ;текст стр с адр 0200-17FF
;[skip]

6 Отредактировано vvhitevvizard (08-08-2021 00:15)

Re: восстановление External Zone, работа в эмуляторе

Voldemar0 пишет:

Ты можешь рассказать общую техническую историю этой игры (какие версии были, какие были особенности разных версий, вектора развития, какие аппаратные рессурсы использовались) ?

Первоначально проект был довольно скромным. Хотя даже на версии от 1994.11 с первого скриншота видно, что я используя прерывания, совмещаю 3 графических режима в верхней центральной и нижней части экрана.
В процессе я копался во множестве Apple ][ проектов и моя Внешняя Зона обрастала фишками и оптимизациями. Как у многих, игра была не целью, но полигоном для проверки различных идей. :) Эталоном тех лет для меня были scroll-shooters аркадных игровых автоматов.

Например, может ли игра работать без доппамяти или это невозможно?

Может. Cама игра одновременно использует около 12 банков из 16 основной памяти под данные и 2 банка под экран (с двойной буферизацией - см SE_DS.ASM). Поздние версии используют доп-память для СОХРАНЕНИЯ банков с оболочкой Best при запуске и восстановлении при выходе (без обращения к диску). Помню, в планах нарастить минимиальные требования до 256KB не было так как понимал, что с такой конфигурацией как у меня - единицы.
Также ДОП точно используется для редактора уровней (файл с именем ED типа B, в исходниках есть справочный файл с его горячими клавишами).
Вот пример использование банков доп памяти из исходников редактора:

 STA $C21D+$80,X        ;уст банк ДП на 2000

Мне не хватает информации по переключению банков - на руках ноль документации читабельной. Пытаюсь вычитать в книге Мымрина как включать/отключать  ОЗУ/ПЗУ банки. За 30 лет все забылось.

Всё только под девятку или была версия и под семёрку?

Конечно ТОЛЬКО под девятку. Я в жизни не видел семерку. Мое знакомство с Агатами началось в районе 1990-1991 с девятки. Используются графические режимы девятки и оперативка 128Kb (все банки).

Из каких программных модулей она состоит (графика + один или несколько движков?)

множество. исходные файлы - десятки ASM файлов, с определенными адресами компиляции (ORG).
в начале каждого кусочка - таблицы JMP переходов. Короче, что-то похожее на организацию DLL на PC. Собственно, в части графических циклов я динамически подпатчивал адреса на ходу. :)
в файле EQUBOOT.ASM общие константы и логические адреса подпрограммных блоков (этот файл прицеплялся к каждому файлу исходника).
SB (типа B) - лончер (своя упрощенная DOS, инициализация RND, сохранение-восстановление Best оболочки).
SA, SE, SC (типа K) - код программы (3 банка). Остальные типа D - данные (графика, скрипты уровней итп).

Минимальный список файлов для запуска:
B 006 SB $BA00..C000
B 005 SYS.ВНЕШНЯЯ ЗОНА (версия для нулевого трека)
K 032 SA code $4000
K 026 SC code $A000
D 032 SS (GFX 2c: main gfx)
K 020 SE code $A000
D 017 RF (GFX: font?)
D 032 HL (GFX 4c: helicopter)
D 032 SP (GFX 4c: crushed helicopter)
D 032 SR (GFX 4c: hi scores frame)
D 032 WZ (GFX 4c: External Zone + misc)
I 003 HI (создаваемый с нуля файл рекордов)
D 006 SI (GFX 2c: POP&DIK)
B 011 ED $1200..2000
<dir> B:
D 096 B1
D 032 BY
<dir> C ;подкаталогов с уровнями было несколько - вплоть до 5 - не на всех дискетах их полный набор
<dir> E

Как происходила сборка игры: вручную или был какой-то скрипт ?

Хороший вопрос! ))) Эх, если бы я мог на него ответить сейчас! На дискетах часто в наличии одиночный файл ассемблера с текстовым редактором (с именем "A" типа B, 109 блоков). Предполагаю (не помню совершенно), что делал [READ соответствующего файла в Best, ассемблировал необходимые кусочки, делал [WRITE в файл. Скриптов (типа MAKE на PC) чтобы автоматизировать процесс у меня точно не было тогда...
план задействованных логических адресов (часть пересекается)

;MEMORY MAP:
;$0000..0200 (SE_MM.ASM)  БЫСТРЫЕ ГРАФИЧ ЦИКЛЫ ПЕРЕРИСОВКИ 4х256     se
;$0000..0400 (SC_MC.ASM)   БЫСТРЫЕ ГРАФИЧ ЦИКЛЫ ПЕРЕРИСОВКИ 2х256     sc
;$0700     данные RWTS
;$0800     содержимое сектора c дискеты
;$0900   STARSBUF
;$1200..2000 (ED.ASM ) ed    РЕДАКТОР СТАДИИ
;$1B00..1E00 (ET.ASM ) ed    ТЕКСТЫ И ПР ДЛЯ РЕДАКТОРА СТАДИИ
;$2000..4000 видимый экран A
;$4000..4700 (SA_SA.ASM)  2-Я (ИГРОВАЯ) ЧАСТЬ: БЛОК ВЗАИМОДЕЙСТВИЯ С ИГРОКОМ, ОЦЕНКА ИГРОВОЙ СИТУАЦИИ 
;$4A00..4E00 (SA_SD.ASM)  РАЗЛИЧНЫЕ ЦИКЛЫ ДЛЯ SA,SC: 2-ОЙ (ИГРОВОЙ) ЧАСТИ, ЗВУКОВЫЕ ЭФФЕКТЫ
;$4F00..5300 (SA_GN.ASM)  ОСНОВНЫЕ, ОБЩИЕ ПРГ: ОРГАНИЗАЦИЯ ВХ В/ВЫХ ИЗ ВЗ,ПРЕРЫВАНИЙ
;$5700..5B00 (SA_AM.ASM)  ПУЛИ ИГРОКА И ВРАГОВ
;$6000..8000 видимый экран B (double buffering)
;$8000..A000 область для подключения банков с графикой

;ДЛЯ ОБОЛОЧКИ ВЗ:
;$A100 (FC) se
;$A300..A700 (SE_HI.ASM)   ТАБЛИЦА 95-ТИ РЕКОРДОВ
;$A700..AC00 (SE_WZ.ASM)  ЗАСТАВКИ
;$B000..B400 (SE_SS.ASM)   ДЛЯ РАБОТЫ С ДВОЙНОЙ ГРАФИКОЙ, С ГРАФ TXT, ОЧИСТКА ЭКР
;$B700..BA00 HITABLE se
;$BA00..BB00 (SE_ZE.ASM)  НЕ АВТО-ЗАГРУЗКА: SYSTEM BOOT (SB) ФАЙЛ
;$BB00..C000 (SE_DS.ASM)  ПРОГРАММА ЧТЕНИЯ-ЗАПИСИ ФАЙЛОВ RWTS

;(ИГРОВАЯ) ЧАСТЬ:
;$AA00..B000 (SC_SP.ASM)   управл тварью из CARD
;$B000..B300 (SC_MP.ASM)  чтение из карты стадии (MAP)
;$B300..B500 (SC_CP.ASM)  программа "капсула-приз" и осн графика: взрывы и тд. вх точки
;$BB00..C000 переменные и буфера

;$D000..DF00 переменные и буфера
;$E000..E900 адр стадии: CARD,MAP и пр
;$EC00 STAGEMAP
;$FD00 (BUT.ASM) bu
;$FC00 (CUT.ASM) bu
;$FF00 STAGEJUMPS

;$E700..E900  BOOT  (ZE.ASM) ЗАГРУЗКА НУЛЕВОГО ТРЕКА

и банки (основной!) оперативки куда грузятся определенные файлы

;FILE BANK:
;WZ: C
;SR: C
;SP: C
;HI: 8
;HL: C
;SS: 9
;SA: 2
;SE: 8
;SC: 3
;SI: 4
;RF: 6
;ED: 0
;<B> A (это уровни, но данные для них минимум 4-5 банков занимают (для одновременного наличия в памяти)
;<C> A
;<E> A

Ещё вопрос про меню в первом сообщении: я так и не понял что означает фраза:
"ВЫБОР ОПЦИЙ-КЛАВИШИ СПРАВА f1:F1" ?
Это переход по пунктам? Тогда где курсор?
Как подтвердить выбор какого-то из пунктов ?
Можешь рассказать что скрывается за этими пунктами ?

Я честно говоря тоже не помню. Это очень ранняя версия 1994.11 года, к ней не вижу сохраненных исходников, возможно пункты меню - набросок. В последней версии 1996.04 меню сокращено до трех пунктов - Запуск первого уровня, Таблица рекордов и Вступление. И стало графическим

7 Отредактировано vvhitevvizard (07-08-2021 16:53)

Re: восстановление External Zone, работа в эмуляторе

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

Это почти невозможно. Я 100% не выкладывал это ранее. Утечка от друзей маловероятна - более того, я сам как автор не мог в конце девяностых восстановить диски хотя бы с 1 версией игры - они были записаны на дисководах со смещенной головкой и не читались без шаманских танцев.
Игровой процесс происходит не в лабиринте - это горизонтальный шутер. ;) Но если это все же она - выложи сюда - возможно поможет в восстановлении рабочих версий.

Вот, например, на v09 : там есть текстовые файлы, исходники. Но это исходники игры или какой-то только её части (неполные) или вообще к чему-то другому относятся ?

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

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

Re: восстановление External Zone, работа в эмуляторе

на v09 : там есть текстовые файлы, исходники. Но это исходники игры или какой-то только её части (неполные) или вообще к чему-то другому относятся ?

Напиханные файлы на дискетах необязательно имеют отношение к скомпилированным бинарникам. :)
Но в одном уверен - в 1998 я через Card-93 перегнал на PC полный набор последних своих исходников. Но без бинарных сопутствующих файлов - именно их (со старыми и современными своими комментариями) я выложил в архиве выше. Проблема в том, что они необязательно компилируются в рабочую версию - я тогда жил по принципу каждая новая версия - альфа. Без закрепления рабочих вариантов и остановки для отработки ошибок перед добавлением чего-то нового в проект. :(

Как ты определяешь версию (или дату сборки) версии (где это выводиться)?

На главном экране с названием игры бегущая строка сверху - в ней указан год и месяц версии.
также косвенно визуально в теле WZ файла (но в поздних версиях я стал заXORивать такие тексты).
но выяснилось, что из-за мешанины файлов с разных версий точнее определить можно по графическому файлу с основными спрайтами игры:
диск v28:
https://pic.maxiol.com/thumbs2/1628336703.787614390.v28ss.png

диск v08, диск v29:
https://pic.maxiol.com/thumbs2/1628336813.787614390.v08ss.png | https://pic.maxiol.com/thumbs2/1628336869.787614390.v29ss.png

диск v13. появился второй игрок (иконки 1P, 2P), наклон вертолета при движении вверх-вниз.
диск v08. подбитый вертолет, но самое главное что мне запомнилось - огромная красивая надпись Stage с номером (в нижней части скриншота):
https://pic.maxiol.com/thumbs2/1628336900.787614390.v13ss.png | https://pic.maxiol.com/thumbs2/1628336944.787614390.v09ss.png
Поздние версии - я перешел везде на английский язык. Для движущихся обьектов уже спрайты с маской для накладывания на фон (маска использовалась и для проверки коллизий),
другие разнообразные (напр лазер, не исчезающий при столкновении с мелкимии обьектами и проходящий их насквозь  до края экрана) и еще более крупные снаряды, попытки добавить саттелиты стреляющие вбок от вертолета, самонаводящиеся ракеты и прочее прочее.

9 Отредактировано vvhitevvizard (07-08-2021 16:18)

Re: восстановление External Zone, работа в эмуляторе

Уровни резко отличиются по графике, напр., из рабочих файлов:
https://pic.maxiol.com/thumbs2/1628337670.787614390.b1.png

Из запускающихся версий есть еще одна (1995.03) - в аттаче. В ней видны шаги по оптимизации графических циклов - визуально быстрее раза в полтора по сравнению с версией 1994.11, попытки добавить второго игрока. Но она с ошибками на диске (пред-пред вычитка Игоря) и глючная по дизайну - через некоторое время вертолетик заклинивает на движение вперед (опросы paddles). =)

Последняя версия от 1996.4 (вероятно, диск c номером v08 - эти номера дискам давал Игорь при сдампливании) - то, что хочу восстановить до работоспособности. В ней я использую двойную буферизацию (никакого мельтешения) и максимально ускоренный графический движок - она просто "летала" - на Агате/Apple ][ не существует игр с такой крупной и шустрой графикой.

Post's attachments

Attachment icon v27fdd (1995-03 External Zone ошибки).7z 86.52 kb, 122 downloads since 2021-08-07 

10 Отредактировано Voldemar0 (07-08-2021 17:02)

Re: восстановление External Zone, работа в эмуляторе

> Мне не хватает информации по переключению банков - на руках ноль документации читабельной.
> Пытаюсь вычитать в книге Мымрина как включать/отключать  ОЗУ/ПЗУ банки. За 30 лет все забылось.

Не вычитаешь : Мымрин девятку не знал.

Банки ОЗУ девятки переключается по записи на адрес Cyxz:
y - слот (1 - базовое, 2 и выше - доп)
x - адресное окно (три старших бита адреса ЦП, на которые мапиться банк)
z - номер банка (0-F).

x может меняться от 0 до 7. Значения 8-D - не используются, банки назначенные на E и F - вроде бы изображают ПЗУ в режиме Appple][. Про это точно не помню, так как редко бывает нужно.

==

Переключение режима LC (ПЗУ vs ОЗУ на старших адресах) довольно замороченное: C08x,
где X - режим работы. Там хитрая таблица перекодировки, но в итоге всё раскладывается на 3 бита:
запрет записи в старшие адреса, разрешение чтения озу на старших адресах (вместо ПЗУ) и номер подбанка, который отображается на D000.DFFF.
При чтении регистра эти биты будут то ли 0, 1, 3 то ли 1, 0, 3 соответственно.
Но это лучше в доках на девятку уточнить.

Тут вот коллекция DJVU на сисплату девятки:
http://agatcomp.ru/agat/Hardware/GenPlat/Main9.shtml

==

На всякий случай, если Игорь не говорил:

Если копаешся с файлами внутри образа, у нас есть специальная тулза - dos33c2 - утилитка для PC:
http://agatcomp.ru/agat/PCutils/dos33c2.shtml

А тут экспресс-курс для освежения памяти по агату. В основном, с точки зрения пользователя:
http://agatcomp.ru/agat/Common/for_beginners.shtml

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

Re: восстановление External Zone, работа в эмуляторе

Не вычитаешь : Мымрин девятку не знал.

Банки ОЗУ девятки переключается по записи на адрес Cyxz:
y - слот (1 - базовое, 2 и выше - доп)
x - адресное окно (три старших бита адреса ЦП, на которые мапиться банк)
z - номер банка (0-F).

x может меняться от 0 до 7. Значения 8-D - не используются, банки назначенные на E и F - вроде бы изображают ПЗУ в режиме Appple][.

Спасибо!!!!!!! Подтвердились мои практические тесты. А то, читая описание Мымрина, я понимал, что ничего не понимаю. =)

В моих версиях Best даже была забиндена на кнопочку такая комбинация чтобы основные используемые логические адреса проверять:
https://pic.maxiol.com/thumbs2/1628342657.787614390.clipboard01.png


Если копаешся с файлами внутри образа, у нас есть специальная тулза - dos33c2

Да да, спасибо - использую.

А тут экспресс-курс для освежения памяти по агату. В основном, с точки зрения пользователя

Читал буквально намедни. Отличная статья! все необходимое чтобы освежить память...

Переключение режима LC (ПЗУ vs ОЗУ на старших адресах) довольно замороченное: C08x,
где X - режим работы.

Подытоживая, если запускается из Best или стартует в режиме Агат 9 с нулевой дорожки, это переключение можно не трогать? Оно по умолчанию имеет ОЗУ на старших адресах

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

Re: восстановление External Zone, работа в эмуляторе

Мне удалось запустить версию 1996 года:
https://pic.maxiol.com/thumbs2/1628348153.787614390.clipboard01.png

Меню внизу экрана 16 цветное :) Какой цвет на чб мониторе не знал, но определенно надо сменить с синего из 4х цветного режима на редкий
https://pic.maxiol.com/thumbs2/1628348365.787614390.03.png
А вот как видел я эти 16 цветов по яркости на чб мониторе :)

DATCOLOR16
  DFB $F0,$70,$B0,$D0      ;светл
  DFB $30,$E0,$50,$90      ;светло-серый
  DFB $60,$A0,$10          ;темно-серый
  DFB $C0,$20,$40          ;темн
  DFB $80,$80              ;самый темный

Смутно помню, что можно было менять джойстиком:
https://pic.maxiol.com/thumbs2/1628348402.787614390.04.png
Скроллируется до "OTHER OPTIONS". В эмуляторе джойстик можно заменять мышкой, как-то срабатывает (иногда и по непонятному алгоритму), не разобрался.
Но игра определяет, что есть джойстик и блокирует клавиатуру (???).

До запуска уровня не добрался. =)
При отсутствующем джойстике в эмуляторе игра также ведет себя некорректно. В общем, логику ее надо дорабатывать напильником.
При наличиии джойстика клавиатура работает как ожидается.
Буду разбираться - благо можно всегда узнать, где исполняется текущая инструкция ("P" команда в отладчике эмулятора)
-------------------
Cейчас расскажу как запустить сдампленный образ v08 (версия игры от 1996.04.08) без правки файлов:
Отменяем загрузку (проще переименовать "SB" файл).
вбиваем где-нить 4 байта напр "8000:8D 58 C1 00" (это инструкция STA C158). Запускаем (8000G). После этого стартуем переименованный SB. Появляется меню на черном экране - баг но хоть что-то. Мышкой можно скроллировать и выбирать пункты.

Вопрос по ходу - запамятовал - как в Best сохранить команду которая автоматически выполняется при загрузке?

13 Отредактировано vvhitevvizard (08-08-2021 01:56)

Re: восстановление External Zone, работа в эмуляторе

С джойстиком (и с настройкой эмулятора на джойстик) запустил уровень, хотя конечно логика реакции на джойстик странноватая.
https://pic.maxiol.com/thumbs2/1628351343.787614390.05.png | https://pic.maxiol.com/thumbs2/1628373374.787614390.06.png

но... опять вылетает через несколько секунд :) Квест продолжается. Возможно здесь уже виновата плохая вычитка - дискета может быть с ошибками именно в нужных файлах. Надо сравнивать  бинарники с исходниками - пробовать компилировать и пересобирать
---------
PS: я упоминал динамически генерируемые циклы. так вот, часть из них, чтобы сократить до возможного минимума общее кол-во тактов на задачу, я строил на лету и выполнял прямо в нулевой странице... Из всех десятков и сотен разбираемых мною в те годы программ такого не делал никто.
https://pic.maxiol.com/thumbs2/1628352212.787614390..png

14 Отредактировано Voldemar0 (07-08-2021 20:26)

Re: восстановление External Zone, работа в эмуляторе

>>    Переключение режима LC (ПЗУ vs ОЗУ на старших адресах) довольно замороченное: C08x,
>>  где X - режим работы.

> Подытоживая, если запускается из Best или стартует в режиме Агат 9 с нулевой дорожки, это переключение можно не трогать? Оно по умолчанию имеет ОЗУ на старших адресах

Имеет, но, скорее всего, оно заблокировано от записи.
Посмотри содержимое:
C080.C08F

Нашел вот кусочек кода:

      printf("LC state: Dxxx %c, %p read, Write RAM %p.",                                                           
        (c08x & 0x8) ? 'A' : 'B',                                                                                   
        (c08x & 0x2) ? "RAM" : "ROM",                                                                               
        (c08x & 0x1) ? "enable" : "disable"                                                                         
      );                                                                                                           

Т.е. D0 - разрешает запись в RAM на адресах D000.FFFF, D1 - разрешает чтение RAM (иначе ЦП читает ROM), D3 - банк Dxxx.

При включении компа D0 = 1, D1 = D3 = 0. остальные биты неопределены (на реале определяются паразитными ёмкостями ШД и предыдущими обменами на ШД), на практике там обычно будет 81 или C1.

После загрузки ОС обычно LC State переводятся в состояние D0 = 0, D1 = 1, т.е. читаться будет что-то вроде 82 или C2 или 8A или CA.

Но тут надо учитывать, что The BEST, возможно, при запуске прог будет ставить LC в какие-то особые состояния, например, запоминать последнее значение....... Но это надо на практике изучать, я тут особо не копался.

--

unsigned char m4_LC_trans[] = {                                                                         
  0x2, 0x1, 0x2, 0x3,  0x2, 0x1, 0x2, 0x3,  0xA, 0x9, 0xA, 0xB,  0xA, 0x9, 0xA, 0xB                                 
};                                                                                                                 

А это табличка трансляции команд записи в C08x в значение, которое будет читаться из C08x.
Например:
* С080:0
* C080
C080- 82

Т.е. при записи по смещению 0 читаться потом будет x2.


> Вопрос по ходу - запамятовал - как в Best сохранить команду которая автоматически выполняется при загрузке?

Тут доки по BEST:
http://agatcomp.ru/agat/Software/OsDos/TheBest.shtml

15 Отредактировано vvhitevvizard (07-08-2021 22:09)

Re: восстановление External Zone, работа в эмуляторе

Voldemar0 пишет:

Посмотри содержимое:
C080.C08F

При рабочей игре (дебаггер эмулятора открыт вторым окном и работает параллельно) считывается F3
А при записи нуля - считывается F2.
https://pic.maxiol.com/thumbs2/1628356305.787614390.clipboard01.png
Получается:

(c08x & 0x8) = 'B' (=0),                                                                                   
(c08x & 0x2) = "RAM" (=1),                                                                              
(c08x & 0x1) = "enable" (для F3) : "disable" (для F2) 

Итого, чтобы перейти в режим "RAM" и включить запись в верхние логические адреса, мне надо записывать произвольное число по адресу C083 и должно считаться 03 (после применения маски And 0x03), если все в порядке? :)
Потестил:

C083:00
c080
F3

Эмулятору было бы неплохо здесь выдавать  более ожидаемое значение - иначе тест на "реальный режим" будет провален, если прога проверяет, не запускают ли ее в эмуляторе

остальные биты неопределены (на реале определяются паразитными ёмкостями ШД и предыдущими обменами на ШД)

А я то искал способы инициализации псевдо-RND генератора. А тут вот они битики - паразитные емкости на шине данных. :)

Тут доки по BEST

Смотрел, не нашел. Но как-то я это делал. Возможно, просто напрямую менял переменные Best по адресам $400 или $500 (не помню) и дальше сохранял их в тело Best на диске командой [STATUS

16 Отредактировано vvhitevvizard (08-08-2021 02:23)

Re: восстановление External Zone, работа в эмуляторе

Благодаря комментариям, добавил по всем исходникам ясные поясния по поводу подключения банков:

 STA $C11A ;2000..3FFF: bank A
 STA $C13B    ;6000..7FFF: bank B.  раб экр (2000,6000)
 STA $C14C    ;8000..9FFF: bank C. место граф файла

 STA $C166 ;C000..DFFF: bank 6
 STA $C083 ;LC state: RAM|write enabled
 STA $C177 ;E000..FFFF: bank 7

Теперь проще будет делать "reverse engeenering" своих исходных кодов по прошествии 30-ти лет. :)

Еще вопросы к ветерану :)
1. Есть ли удобный способ дизасемблирования? Может на PC есть какие-нить интересные дизассемблеры для 6502? Чтобы с минимальными усилиями получить текст, годный для сравнения с исходниками и тем более если софт добавляет свои комментарии по обращениям к железу итп.

2. У себя в коде вижу обращение к C020 для запрета прерываний. И оно определенно работает
Но при этом в документации (заводской и напр для того же The Best 5.3) порт C020 значится так же как вывод на магнитофон?

3. Помню, у меня в 90х была шпаргалочка - лист из штатной документации с соответствием адрес/режим для $C74B и подобных портов. Случаем нет в OCR виде? :) Тут сам себе отвечу: http://agatcomp.ru/agat/Paper/DocsShtat/A9_K2.shtml
Только тут ошиибка

4.3.4.2. Управление режимами отображения "Apple"

В оригинальной документации эта таблица названа

Переключение экранных режиимов и страниц

и относится к режимам Агата 9

17

Re: восстановление External Zone, работа в эмуляторе

Я хоть и не ветеран, но по паре вопросов могу высказаться :)

Для дизассемблирования есть IDA Pro, но плагин для 6502 к ней платный. Довольно большой список инструментов есть тут.
Я сам года четыре назад замутил свой собственный дизассемблер, как раз чтобы реверсить софт с сайта. Сделал там поддержку .fil, пытался сделать к нему эвристический анализатор, чтобы он мог ловить всякие замаскированные переходы, но с эвристиками вышло не очень. Пока каждый новый бинарник приводит только к обнаружению новых косяков и багов. И TODO лист только растет :)

Обращение к C020 это штатный способ отключения прерываний в девятке, прописанный в документации. Страница 89.

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

Re: восстановление External Zone, работа в эмуляторе

avivanov76 пишет:

Обращение к C020 это штатный способ отключения прерываний в девятке, прописанный в документации. Страница 89.

И в той же документации C020 отмечен как порт вывода на магнитофон. Как это возможно?

avivanov76 пишет:

Для дизассемблирования есть IDA Pro, но плагин для 6502 к ней платный. Довольно большой список инструментов есть тут.

Спасибо за ссылку! Внушительный список. Интересно будет также поэкспериментировать с ассемблерами. :)

19

Re: восстановление External Zone, работа в эмуляторе

avivanov76 пишет:

Для дизассемблирования есть IDA Pro, но плагин для 6502 к ней платный.

Использую скачанную с рутрекера IDA Pro 7 - там 6502 есть, как сейчас любят говорить, "из коробки". До этого использовал версию 6 - аналогично. Несколько раз использовал для дизассемблирования - работает нормально. Результат работы сохраняется в нескольких форматах, в том числе и TASM, что для меня лично особенно приятно...

20

Re: восстановление External Zone, работа в эмуляторе

Я последний раз использовал ida давно, досовскую ещё. Там 6502 поддерживался из коробки.

Сейчас в юниховом эмуляторе работаю, там есть встроенный простой дизассемблер с поддержкой меток. Эвристики нет, но мне удобно.
http://agatcomp.ru/agat/PCutils/ISO_tc.shtml
http://agatcomp.ru/agat/PCutils/agatf.shtml

Где-то на форуме была ссылка на образ vmware UBUNTU, где всё это развернуто и готово к работе.
Но это - тяжелая артилерия.

==

> А я то искал способы инициализации псевдо-RND генератора. А тут вот они битики - паразитные емкости на шине данных. :)

Это вряд ли получиться: фактически, там происходит следующее: когда ЦП выполняет команду LDA $C080, она занимает несколько тактов: сперва по шине проходит запрос опкода команды, потом аргументов (адрес), потом только проходит запрошенный байт данных в ЦП. Так вот на ШД при запросе несуществующих бит, фактически остаются висеть биты последнего байта адреса (старшего): C0. Поэтому на реале ЦП получит что-то вроде: ($C0 & :11110100) | (биты D3, D1, D0). И поэтому результат довольно стабильный. Но если этот же адрес будет опрашивать какое-то устройство, действующее по другому алгоритму обмена с шиной (например, воображаемый контроллер локалки с DMA-доступом к RAM) - то и результат будет другой.

Да, в эмуле это можно считать багом, но можно и не считать. Зависит от кривизны прог.
Олег Одинцов (автор win-эмуля) добивался работы наиболее популярных дисков - у него это успешно получилось, после чего оставил проект. Тонкости с нестандартными прогами его уже особо не интересовали. Там есть и другие неточности, например, в десятичном режиме ЦП. Но реальные проги работают.

--

C020: небольшой реверанс в сторону Apple ][. Логика простая: если работаешь с магнитофоном, прерывания тебе не нужны - запутаешся только. Поэтому на одном порту висят две функции:
отключения таймера (не любых прерываний, а именно таймера) и, одновременно, триггер магнитофонного выхода (который почему-то на некоторых материнка ещё и идёт на разъём клавиатуры).

21

Re: восстановление External Zone, работа в эмуляторе

Поначалу меня смутили 5 цветов в цветном графическом режиме высокого разрешения (256х256х4)...

vvhitevvizard пишет:

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

То есть начало кадра идёт из монохромного графического режима высокого разрешения (256х256х2). Затем цветной графический режим высокого разрешения (256х256х4). Затем монохромный графический режим высокого разрешения (256х256х2) как здесь, или цветной графический режим среднего разрешения (128х128х16) как здесь, 2-ая и 3-я фотки. Верно?

Турбо АГАТ-9/16 (ЦП 65C802, 5 Махов, dual-port SRAM).

22

Re: восстановление External Zone, работа в эмуляторе

Voldemar0 пишет:

Где-то на форуме была ссылка на образ vmware UBUNTU, где всё это развернуто и готово к работе.

http://forum.agatcomp.ru//viewtopic.php?id=246

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

Re: восстановление External Zone, работа в эмуляторе

LeoN пишет:

Поначалу меня смутили 5 цветов в цветном графическом режиме высокого разрешения (256х256х4)...

vvhitevvizard пишет:

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

То есть начало кадра идёт из монохромного графического режима высокого разрешения (256х256х2). Затем цветной графический режим высокого разрешения (256х256х4). Затем монохромный графический режим высокого разрешения (256х256х2) [SKIP]. Верно?

Верно. Через 2 типа прерываний я мог использовать любые сочетания режимов. Ниже скриншоты где 256x256x4 смешивается с 128x128x16. И с другой зоной разделения. В эмуляторе как видите это также работает. Но цветность я использовал неэффективно так как работал с ч/б монитором. ;)

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

Voldemar0 пишет:

C020: небольшой реверанс в сторону Apple ][. Логика простая: если работаешь с магнитофоном, прерывания тебе не нужны - запутаешся только. Поэтому на одном порту висят две функции:
отключения таймера (не любых прерываний, а именно таймера) и, одновременно, триггер магнитофонного выхода (который почему-то на некоторых материнка ещё и идёт на разъём клавиатуры).

Хаха. Значит, это не ошибка в документациях. Спасибо за ответ на вопрос который мне не давал покоя. :)

24 Отредактировано vvhitevvizard (08-08-2021 15:06)

Re: восстановление External Zone, работа в эмуляторе

AlexBel пишет:

Использую скачанную с рутрекера IDA Pro 7 - там 6502 есть, как сейчас любят говорить, "из коробки". До этого использовал версию 6 - аналогично. Несколько раз использовал для дизассемблирования - работает нормально. Результат работы сохраняется в нескольких форматах, в том числе и TASM, что для меня лично особенно приятно...

Borland TASM? А последний и ассемблировать 6502 умеет?

Voldemar0 пишет:

Да, в эмуле это можно считать багом, но можно и не считать. Зависит от кривизны прог.
Олег Одинцов (автор win-эмуля) добивался работы наиболее популярных дисков - у него это успешно получилось, после чего оставил проект. Тонкости с нестандартными прогами его уже особо не интересовали. Там есть и другие неточности, например, в десятичном режиме ЦП. Но реальные проги работают.

Тогда это определенно неточная эмуляция. И есть вероятность, что какой-то софт не будет работать корректно. Но проект Олега open source - кто-то может еще подхватит его или хотя бы будет "maintenance" релизы делать исправляя ошибки.

Еще вопрос ко всем:
Из эмуляторов с дебаггером под Win/DOS - есть такие, что умеют софтверные BRK ставить (запоминать содержимое памяти, ставить там "00", затем после срабатывания точки останова восстанавливать оригинальное содержимое) и такие, что умеют перехватывать обращение на запись/чтение по определенному адресу?

25

Re: восстановление External Zone, работа в эмуляторе

Нет, другой: http://forum.agatcomp.ru//viewtopic.php?id=214