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

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

Мне удалось запустить уровень без вылетов. Оказалось, что файл с данными уровня (включающий мини-подпрограммы для движущихся врагов) пытался вызывать основной код по некорректным адресам (файлы уровня были от чуть более старой версии игры, восстановленный диск является смесью файлов разных версий).
https://pic.maxiol.com/thumbs2/1628803183.787614337.06.pnghttps://pic.maxiol.com/thumbs2/1628803377.787614337.07.pnghttps://pic.maxiol.com/thumbs2/1628803398.787614337.08.png
Я тогда экспериментировал с одним (последним) уровнем. И он очень короткий - не успел - по факту это cкорее минидемо чем полноценная игра. Файлы других (законченных) уровней вероятно устарели - буду разбираться.

Скроллинг идет очень  шустро. Двойная буферизация работает - никакого мерцания.
По сравнению с версией от 1994.11, игра стала очень динамичная - я могу продержаться несколько секунд с непривычки. Ну и с клавиатуры управление специфическое у Агата - одновременно нажата может быть только одна клавиша - либо двигаемся, либо стреляем/заряжаем энергию. :) Коллизия с обьектами тут основана не на грубой тайловой (блоки 8x8 пикселей) системе как в ранних версиях, а на сравнении попиксельно масок обьектов.

И нормально запускается редактор уровней. Выглядит так:
https://pic.maxiol.com/thumbs2/1628803446.787614337.ed.png
Сам уровень не матрица N на N обьектов, а поток данных - поэтому редактор замороченный.
-------
Теперь все исходники в TASM: большинство меток сделал локальными итп.

Осталось неспеша по-оптимизировать код, избавиться от всех абсолютных ссылок внутри кода и
убрать все мелкие баги (игра по факту не работает БЕЗ подключенного джойстика, теряет управление после повторного входа в главное меню, не запускается без предварительной установки C158:0, и по мелочи разные графические баги)

Без допозу работает - просто не сохраняет банки и данные Best: соответственно, выход в него без рестарта невозможен.

52

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

> Cкинь пожалуйста образ дискеты с "тестом доп озу Лисина" - трудно найти его поиском. Кроме Фонографа, мне пока нечем допозу тестировать. :)

У тебя реальный комп есть?

53 Отредактировано vvhitevvizard (13-08-2021 14:37)

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

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

54 Отредактировано Voldemar0 (13-08-2021 21:03)

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

http://agatcomp.ru/agat/Software/Test/Testozu9.shtml

В свободном доступе теста нет, поскольку он не изучен ещё.

Этот тест существовал в двух сборках: как B- файл и как образ диска.

В аттаче архив- там все версии файлов, которые у нас есть.
Думаю, пара версий там совпадает, ещё пара битых.
Чем отличаются остальные - я не знаю. Если изучишь  и опишешь - будет полезно.

--

Если не секрет - какая страна сейчас?

Post's attachments

Attachment icon ramtestlisin.rar 17.21 kb, 163 downloads since 2021-08-13 

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

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

Voldemar0 пишет:

В свободном доступе теста нет, поскольку он не изучен ещё.

Понимаю. Спасибо! Поэтому и не мог найти поиском. Но все об этом тесте говорят. Собственно, TESTMEM95 для PC у меня на всех реанимационных носителях - первый тест что я делаю. :)
Потестирую как будет время.

Возвращаясь к EZ.

1. Выше я писал о необьяснимом поведении программы, капризной загрузке с диска и прочем.
SEI!!!
Исчерпав все свои способности найти источник проблем, я смутно вспомнил, что перед непосредственным обращением к FDD контроллеру надо отключать прерывания... От этого бага я страдал в 90х, не мог понять причину проблемы - сколько оно мне нервов попортило...

2. даже после избавления от привязки части кода к абcолютным адресам, код остается неперемещаемым - для части данных лежащих бок о бок с подпрограммами в сегменте кода используется адресная арифметика с обрезанием результата до младшего байта адреса, при пересечении страницы (100h байт) - непредсказуемый эффект:

;где-то в коде арифметика для вычисления индекса в массиве:
    ADC #_ARRAY&0FFh ;добавляем мл часть его адреса
;...
_ARRAY:
    .db 0C3h, 99h, 81h, 99h, 0C3h

Чтобы выдавать ошибку ассемблирования при опасном пересечении массивом 100h границы, стал добавлять проверки (для TASM)

_ARRAY:
    .db 0C3h, 99h, 81h, 99h, 0C3h
#if (($&0FFh) <= ($-_ARRAY))
    ! ;100h boundary !
#endif

Кстати, для слов в памяти, ускоряется ли к ним доступ при выравнивании на границу слова?


3.
Столкнулся с некорректно работающей процедурой опроса джойстика. С кнопками проблем нет, а вот считывание направления... В те годы на реальном своем железе со специфическими позициями paddles центральное положение вылавливал так:

INPUT_PADDLES
    PHA
    LSR A
    TAX
    LDA $C070  ;pdls: analog input reset
    SBC #7Eh
    LDY #0
_3
    LDA $C064-1,X  ;$C064..C067 Analog inputs
    BPL _4
    INY
    BNE _3
    DEY

_4
    TYA
    BPL _12
    SBC #6Ch
_12
    CPY #14h
    PLA
    TAX
    BCC _5
    DEX
    BVC _5
    LDX #0
_5
    RTS

И вызывалась процедура выше напр следующим кодом (где требовалось просто определить, что джойстик в центральной позиции (код 0) или нет (коды 1..4)):

    LDA #2               ;Joy lf/rt (1,2)
    JSR INPUT_PADDLES
    BNE _7               ;опрос движений joy
    LDA #4               ;Joy up/dn (3,4)
    JSR INPUT_PADDLES
    BNE _7
    LDA #0
_7  ;continue

Какие будут стандартные значения получаемые c портов paddles ($C064..$C067)?
Или проще - пример работающей процедуры. Чтобы в том числе работало в эмуляторе.

56 Отредактировано vvhitevvizard (16-08-2021 19:50)

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

Отчитаюсь о найденных багах в dos33core2w.

1. При импортировании текстового файла в образ выбираю: F9|Импорт файла|обычный текст|имя.
Ввожу "T.WZ2.asm". ENTER. И программа крешится...

2. Экспорт К файла: F9|Экспорт|K файл без перекодировки.
Файл в текущей правой панели не создается - создается только в том месте где сидит сама утилита.
Также некоторые K файлы ранее (сейчас не могу повторить ошибку) импортировались с неполной длиной - приходилось делать простое копирование (по F5) и затем в hex-редакторе отрезать .FIL заголовок.

57 Отредактировано Voldemar0 (16-08-2021 08:13)

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

> SEI!!!
Если ты про команду SEI, то она только IRQ будет блокировать, NMI - нет.
Так что надо отключать именно таймер - C02x.

> Кстати, для слов в памяти, ускоряется ли к ним доступ при выравнивании на границу слова?

Скорее нет.

Про массивы не совсем понял:
Получить элемент однобайтного массива:
lda ARRAY, Y
В Y индекс.

Не важно - пересекается страница или нет - это работает.

Массив двухбайтовый элементов, если там элементы записаны в соседних байтах, а в Y - индекс:
TYA
ASL A
TAY
lda ARRAY+0,Y
sta КУДА-ТО
lda ARRAY+1,Y
sta КУДА-ТО

Тоже пересечение границы не важно.
Пересечение границы может быть будет важно при короткой адресации - там что-то вроде
ldx #$FF
lda $80,X
заберёт байт именно по адресу $7F.

--

Про джой:

Мне не понятна даже эта конструкция:
    PHA
    LSR A
    TAX
    LDA $C070  ;pdls: analog input reset
    SBC #7Eh
У тебя на выходе A будет зависеть от A на входе процедуры.
Это так и задумано? Выглядит как ошибка.

Опрос джоев довольно простой:
Щёлкаем C070 и ждём, пока на C064 и C065 упадёт старший бит.
Время его падения как раз и есть угол поворота оси джоя.
Оно подобрано схемотехнически таким образом, чтобы ЦП успел максимум прокрутить
примерно 256 циклов ожидания (loop: LDA C064,X / BPL EXIT / INY / BNE loop).

Есть один подводный камень: если ты крутнул цикл по одному пульту и получил довольно небольшое значение, то щёлкать вновь C070 и читать второй пульт будет не совсем хорошей идеей, если у второго пульта значение будет много больше: он просто не среагирует на второй C070.
Т.е. нужно дожидаться завершения счёта по обеим пультам прежде чем вновь их опрашивать.
В эмуляторах это не будет заметно, скорее всего, а на реальном железе - важно.
Процедура, которая это реализует:

*
* Чтение состояния пультов
*
GET_PAD_ANGLE:
 STY HT
 
 STA $C070
 LDY #0
 NOP
 NOP
GP_LOOP:
 LDA $C064,X
 BPL GP_FIN
 INY
 BNE GP_LOOP
 DEY
GP_FIN:

* OЖИДAEM ЗABEPШEHИЯ ПO BTOPOMУ ПУЛЬTУ

 TXA
 EOR #1
 TAX                                                      

 TYA
 PHA

 LDY #255
GR_WASTE:
 DEY
 BEQ GR_WASTE_FIN
 LDA $C064,X
 BMI GR_WASTE

GR_WASTE_FIN:
 PLA
 TAY

*

 JMP DECCIF     - вывод на экран числа

Характеристка пультов близка к линейной, так что Y примерно 128 - это где-то как бы центр.
Но лучше брать его пошире, чтобы на реале было надёжно. Сколько именно - зависит
от логики игры и убитости пультов, надо пробовать.

> dos33c2

Это не совсем баги, это предсказуемый пофигизм: экспорт-импорт не считались важными функциями, поэтому имена вводятся строкой, а не выбираются из меню, причем имя буквально передаётся операционке, а она полный путь вычисляет как текущий каталог + то, что ты указал. dos33c2 не меняет текущий каталог при работе, а в винде принято назначать по умолчанию текущим тот, в котором находиться исполняемый файл (если ты создаёшь ярлык на исполняемый файл или просто щёлкаешь по исполняемому файлу в "проводнике"). Так что если ты вводишь только имя файла, то подразумевается, что это файл в том же каталоге, где dos33c2w.exe

Текущий каталог легко сменить в свойствах ярлыка (если dos33c2 вызывается щёлчком по её ярлыку (.LNK)). Более того, можно просто назначить dos33c2 обработчиком файлов DSK, FIL, AIM (что-то в винде это вроде "открывать эти файлы такой-то программой" или "ассоциировать расширение файла с программой") - в этом случае текущим каталогом будет ставиться именно тот, где находятся рабочие файлы. Я именно в такой настройке работаю сам.

Другой - скучный - вариант: можно имя файла указывать с частью пути (alex\ent\ret.fil) или даже с полным путём (c:\need\for\log.fil).

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

--

Экспорт K-файла не совсем понял:
если ты в меню выбираешь :

"Экспорт К файла: F9|Экспорт|K файл без перекодировки. "

Это означает, что ты хочешь некий абстрактный дамп байт из PC-шного файла залить внутрь нового K- файла. Хоть EXE-шник можешь залить, лишь бы < 64 кб размер был. При этом адрес загрузки во вновь создаваемом файле будет задан как $1800 и размер до байта соответствовать исходному файлу.

Если же ты хочешь в образ диска залить уже чем-то (хоть TASM-ом) синтезированный К- файл (со всеми заголовками и прочим и расширением .FIL) - то просто на одной панели открываешь образ, на другой - каталог, где лежит готовый K- и копируешь его нажатием F5.

58 Отредактировано LeoN (16-08-2021 14:32)

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

vvhitevvizard пишет:

SEI!!!

По прерываниям Владимир тебе уже ответил.
При работе с дисководами это само собой. При работе с паддлами и мафоном - аналогично.

vvhitevvizard пишет:

Кстати, для слов в памяти, ускоряется ли к ним доступ при выравнивании на границу слова?

Нет. Процессор-то - 8-разрядный, и шина данных у него 8-разрядная!

А вот при любой индексной адресации: если эффективный адрес пересекает границу страницы (младший байт адреса), то время исполнения инструкции увеличивается на 1 такт. И такая же байда с условными переходами.

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

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

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

Voldemar0 пишет:

Про массивы не совсем понял:
Получить элемент однобайтного массива:
lda ARRAY, Y
В Y индекс.
Не важно - пересекается страница или нет - это работает.

Массив двухбайтовый элементов, если там элементы записаны в соседних байтах, а в Y - индекс:
TYA
ASL A
TAY
lda ARRAY+0,Y
sta КУДА-ТО
lda ARRAY+1,Y
sta КУДА-ТО

Тоже пересечение границы не важно.

Все это неважно, пока не начинаем оптимизировать код на производительность. Cейчас поясню :)

Если старший байт при этом не меняется (если массив менее 100h байт длиной и программа об этом ЗНАЕТ),
если младший байт адреса подпатчивается непосредственно в операнде того опкода который адресует этот массив (ограничение 6502 - невозможность одновременной индексации по х И y),
то адрес завертывается.
В большинстве случаев экономия памяти и тактов от использования только мл байта адреса при рассчете адреса массива
и экономия тактов на простой инкремент/декремент до нуля/до смены знака (вместо инкремента/декремента со сравнением) неоправдана кроме отдельных случаев, но тем не менее без правки логики кода имеем неперемещаемую часть.

Я приведу пример целиком (от него не требовалась максимальная производительность (это просто cчет игрока) - иначе ухищрения по оптимизации тут не заканчивались  бы - вплоть до генерации ВСЕГО кода динамически, без условных переходов и без арифметики индексов):

PR_NUMBER  ;A:мл,Y:ст адр куда, X:0..9 digit
    STA _M2+1        
    STY _M2+2
    TXA
    STA SAV
    ASL A
    ASL A
    ADC SAV  ;= x5 (каждый символ длиной 5 байт).
    ADC #_NUMS8X5&0FFh ;low byte
    STA _M1+1
;_M1+2 не вычисляем и не меняем - экономия #1

    STA BANK1+20h  ;C131 (SEG 6000..7FFF)
    JSR _1
    STA BANK2+20h  ;C13D. double buffering: отображаем счет сразу на обоих экранах A и B

_1
    LDX #4
_2
    LDY _LINEDAT,X
_M1 ;L dyn. mod.  здесь модицифицируется только мл часть адреса
    LDA _NUMS8X5,X
_M2 ;LH dyn. mod.  здесь модифицируются мл и ст части адреса
    STA SEG1,Y
    DEX
    BPL _2  ;экономия #2
    RTS

_LINEDAT .db 0,20h,40h,60h,80h,0A0h,0C0h,0E0h

_NUMS8X5:  ;8x5 digits
    .db 0C3h, 99h, 81h, 99h, 0C3h
    .db 0E7h, 0C7h, 0E7h, 0E7h, 0C3h
    .db 83h, 0B9h, 0E3h, 0CFh, 81h
    .db 81h, 0B3h, 0E3h, 0B9h, 81h
    .db 0E3h, 0C3h, 0B3h, 1, 0F3h
    .db 83h, 9Fh, 0C3h, 0B9h, 81h
    .db 0E3h, 0CFh, 83h, 99h, 81h
    .db 81h, 99h, 0F3h, 0E7h, 0E7h
    .db 0C1h, 99h, 0C3h, 99h, 83h
    .db 0C3h, 99h, 0C1h, 0F3h, 0E7h
#if (($&0FFh) <= ($-_NUMS8X5))
    ! ;100h boundary !
#endif

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

LeoN пишет:

По прерываниям: при работе с паддлами и мафоном - аналогично.

хмм. спасибо за дополнение! об этом я тогда не задумывался - а ведь опрос аналоговых пультов тоже будет сбоить при таймерных прерываниях. :)

60 Отредактировано garnizon (16-08-2021 18:34)

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

Диск 19:
Мало того, что не крутился в конверте, да еще имеет несколько индексных отверстий.
Прошу простить за качество фото.
Вопрос к автору: ЧТО ЭТО?

http://forum.agatcomp.ru//misc.php?action=pun_attachment&amp;item=976&amp;download=0

Post's attachments

Attachment icon 20210804_094509 (1).jpg 402.29 kb, 83 downloads since 2021-08-16 

61 Отредактировано vvhitevvizard (17-08-2021 00:24)

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

Вопрос к автору: ЧТО ЭТО?

Я экспериментировал с защитой диска от копирования хахаха. :) Наигравшись намеренным созданием сбойных секторов, я пошел дальше с индексными отверстиями итд. Теоретически, если на дискете несколько индексных отверстий, то при многократной попытке считывания данных идущих сразу за сигналом дырки, фактически считаны будут разные данные. Практических результатов не помню.
---------------------
по External Zone (это 4/5 дисков) финальная вычитка относящихся к ней дискет больше НЕ НУЖНА - пре-пре чтение было удачным!!! Огромное спасибо! Мне удалось по миксу файлов с разных дискет восстановить более-менее работоспособность версии близкой к последним датам работы над ней.

Попутно также восстановился проект "64 поля" (исходники) - шахматы. Мне не нравилось, что популярная программа Sargon имела скорость обдумывания по 5..15 и более минут на 1 ход (просчитывание на несколько ходов вперед)... И разобрав несколько шахматных программ на Apple ][, я начал оптимизировать в своей версии шахмат...

Игорь, акцентировать чистовую вычитку надо для дисков относящихся к "Подземелья Черного Замка" - здесь пока все неудачно, в черновой вычитке части комплектных дисков вообще нет. Я по email отправлял описание, какое примерное содержимое имеют диски этого проекта.
--------------------
В аттаче рабочая версия EZ от 1996.04.08, в том виде, в каком шла над ней работа. Устранены грубые ошибки, мешающие запуску. Чтобы оценить проект в целом. Work in progress...
1. обратный выход в best неполноценный - отваливаются дисковые функции. :( На игру не влияет, но возможно осложнится процесс редактирования уровней через редактор, если в нем не реализована запись измененных данных обратно на диск (не помню).
2. недоделанные пункты меню, промежуточные заставки и полу-рабочий функционал в игре временно заблокировал.
3. опрос аналоговых пультов/джойстика отключил (их кнопки работают).
4. часть надписей на русском, часть на английском - оставил пока все как есть. Был тогда в процессе переделки всех текстов в игре на английский.
5. В игре пишется Stage 1, хотя по факту это не первый уровень - просто для тестирования грузится этот. Я больше работал над самим движком и созданием редактора тогда.
---------------
Список всех клавиш, на которые может реагировать игра: Q, обе кнопки джойстика, стрелки Up/Dn/Lf/Rt, Space, Esc (РЕД на Агате), CTRL-Break (выход в Best), 1,2,0 (эти три для отладки), 9(PgUp) на нумпаде через эмулятор (F3 на Агате) для выхода в меню. Долгое нажатие кнопок стрельбы - накопление энергии.

Запуск редактора уровней хитрый - жмем Esc сразу после старта уровня. Описание его команд - в исходниках зоны (первая страница темы).

Post's attachments

Attachment icon v09fdd (1996-04-08 EZ autoloading) minimal.7z 125.07 kb, 171 downloads since 2021-08-16 

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

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

LeoN пишет:

А вот при любой индексной адресации: если эффективный адрес пересекает границу страницы (младший байт адреса), то время исполнения инструкции увеличивается на 1 такт. И такая же байда с условными переходами.

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

Voldemar0 пишет:

> SEI!!!
Если ты про команду SEI, то она только IRQ будет блокировать, NMI - нет.
Так что надо отключать именно таймер - C02x.
.

STA $C020 тоже добавил. Но в моих экспериментах одиночная SEI в процедурах работы с FDD уже дает требуемый эффект. Видимо, таймер я корректно отключаю ранее.
В те годы, помню, я постоянно путался с этими инструкциями - ведь по аналогии с x86 (CLI/STI инструкции) они делали прямо противоположное... :)

63 Отредактировано Voldemar0 (16-08-2021 20:06)

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

Попробовал, летает
После примерно трёх падений словил
        ДИСКЕТА ЗАЩИЩЕНА       
            ОТ ЗАПИСИ           
А зачем ей запись на диск?

Дальше висит и ждёт РЕД, наверное, но не говорит об этом.
Но на РЕД дёргает дисковод и продолжает висеть.

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

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

Voldemar0 пишет:

Попробовал, летает
После примерно трёх падений словил
        ДИСКЕТА ЗАЩИЩЕНА       
            ОТ ЗАПИСИ           
А зачем ей запись на диск?

После трех смертей она обновляет таблицу 95ти рекордов на диске (файл "HI" длиной 4 сектора), и также cохраняет туда результат последней игры :)

Дальше висит и ждёт РЕД, наверное, но не говорит об этом.
Но на РЕД дёргает дисковод и продолжает висеть.

Хмм. большинство ошибок дисковой системы критические (ошибка чтения, некомплектность файлов игры итп) - наверное, корректного выхода оттуда в игру и не предполагалось. Спасибо за feedback, потом посмотрю, можно ли вставить туда продолжение при некритической ошибке.

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

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

У тебя на выходе A будет зависеть от A на входе процедуры.
Это так и задумано?

Вроде так задумано. Процедура вызывается с Acc = 2 или 4 для опроса разных осей джойстика, на выходе 1..2 или 3..4 соответственно.

Опрос джоев довольно простой:
Щёлкаем C070 и ждём, пока на C064 и C065 упадёт старший бит.
Время его падения как раз и есть угол поворота оси джоя.
Оно подобрано схемотехнически таким образом, чтобы ЦП успел максимум прокрутить
примерно 256 циклов ожидания (loop: LDA C064,X / BPL EXIT / INY / BNE loop)

Волдемар, спасибо за технический комментарий - таких деталей я не узнал бы уже нигде!
Но камень в огород дизайнеров железа (понятно, что причина - удешевление) - процедура могла бы называться простой, если C064/C065 сразу возвращал бы цифровое 128/256-байтное значение. А так - как минимум нужно этот loop обрамлять в запрет/разрешение прерываний.

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

Спасибо за ценное дополнение. Конечная цель - реальная машина конечно же, эмулятор вторичен. :)

Кстати, С066/С067 - второй джойстик? И только для Apple ][?

66 Отредактировано Voldemar0 (17-08-2021 03:54)

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

> Волдемар, спасибо за технический комментарий - таких деталей я не узнал бы уже нигде!

Вообще-то это в доках на комп есть.  И в Мымрине тоже.
Да и процедура эта встречается хотя бы в бейсике. Так что есть где подсмотреть.

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


> Кстати, С066/С067 - второй джойстик? И только для Apple ][?

В агате две оси. Четыре в эпле.

> Вроде так задумано. Процедура вызывается с Acc = 2 или 4 для опроса разных осей джойстика, на выходе 1..2 или 3..4 соответственно.

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

67 Отредактировано vvhitevvizard (17-08-2021 09:35)

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

Voldemar0 пишет:

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

Подобные операции я обычно заменял на BIT $C070, чтобы отличить чтение и запись от простого обращения. :)

68 Отредактировано vvhitevvizard (21-08-2021 05:35)

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

Я вспомнил, что в девяностых находил ошибку в официальной комплектной документации к Агату 9, касающуюся переключения графических режимов. И вот наконец вернулся к этому вопросу. В своем проекте я использую обращение к С7AB для показа 512x256x2 (МГДП) графики в банках A и B. Работает.

"ПЭВМ АГАТ исполнение 9. КНИГА 2. Техническое описание. Часть 6."
http://agatcomp.ru/agat/Paper/DocsShtat/A9_K2.shtml
имеет такую табличку (Управление режимами отображения "Apple" - опечатка уже тех кто делал OCR):

4.3.4.2. Управление режимами отображения "Apple"
                                              Таблица 10
------------------------------------------------------------
Номер!          Программные переключатели            !Номер
ЭС и !      !      !      !      !Номер!      !      !экрана
банка! ЦГВР ! МГДП ! ЦГСР ! МГВР ! ЭПС ! Т32  ! Т64  !текста
-----!------!------!------!------!-----!------!------!------
     !      !      !      !      !  0  ! C702 ! C782 !  0
     !      !      !      !      !  1  ! C706 ! C786 !  1
  0  !      !      ! C701 ! C703 !  2  ! C70A ! C78A !  2
     !      !      !      !      !  3  ! C70E ! C78E !  3
-----! C700 ! C780 !------!------!-----!------!------!------
     !      !      !      !      !  0  ! C712 ! C792 !  4
     !      !      !      !      !  1  ! C716 ! C796 !  5
  1  !      !      ! C711 ! C713 !  2  ! C71A ! C79A !  6
     !      !      !      !      !  3  ! C71E ! C79E !  7
-----!------!------!------!------!-----!------!------!------
     !      !      !      !      !  0  ! C722 ! C7A2 !  8
     !      !      !      !      !  1  ! C726 ! C7A6 !  9
  2  !      !      ! C721 ! C723 !  2  ! C72A ! C7AA !  A
     !      !      !      !      !  3  ! C72E ! C7AE !  B
-----! C720 ! C7A0 !------!------!-----!------!------!------
     !      !      !      !      !  0  ! C732 ! C7B2 !  C
     !      !      !      !      !  1  ! C736 ! C7B6 !  D
  3  !      !      ! C731 ! C733 !  2  ! C73A ! C7BA !  E
     !      !      !      !      !  3  ! C73E ! C7BE !  F
-----!------!------!------!------!-----!------!------!------
     !      !      !      !      !  0  ! C742 ! C7C2 ! 10
     !      !      !      !      !  1  ! C746 ! C7C6 ! 11
  4  !      !      ! C741 ! C743 !  2  ! C74A ! C7CA ! 12
     !      !      !      !      !  3  ! C74E ! C7CE ! 13
-----! C740 ! C7C0 !------!------!-----!------!------!------
     !      !      !      !      !  0  ! C752 ! C7D2 ! 14
     !      !      !      !      !  1  ! C756 ! C7D6 ! 15
  5  !      !      ! C751 ! C753 !  2  ! C75A ! C7DA ! 16
     !      !      !      !      !  3  ! C75E ! C7DE ! 17
-----!------!------!------!------!-----!------!------!------
     !      !      !      !      !  0  ! C762 ! C7E2 ! 18
     !      !      !      !      !  1  ! C766 ! C7E6 ! 19
  6  !      !      ! C761 ! C763 !  2  ! C76A ! C7EA ! 1A
     !      !      !      !      !  3  ! C76E ! C7EE ! 1B
-----! C760 ! C7E0 !------!------!-----!------!------!------
     !      !      !      !      !  0  ! C772 ! C7F2 ! 1C
     !      !      !      !      !  1  ! C776 ! C7F6 ! 1D
  7  !      !      ! C771 ! C773 !  2  ! C77A ! C7FA ! 1E
     !      !      !      !      !  3  ! C77E ! C7FE ! 1F
-----!------!------!------!------!-----!------!------!------
  8  !      !      ! C709 ! C70B !
-----! C708 ! C788 !------!------!
  9  !      !      ! C719 ! C71B !
-----!------!------!------!------!
  A  !      !      ! C729 ! C72B !
-----! C728 ! C7A8 !------!------!
  B  !      !      ! C739 ! C73B !
-----!------!------!------!------!
  C  !      !      ! C749 ! C74B !
-----! C748 ! C7C8 !------!------!
  D  !      !      ! C759 ! C75B !
-----!------!------!------!------!
  E  !      !      ! C769 ! C76B !
-----! C768 ! C7E8 !------!------!
  F  !      !      ! C779 ! C77B !
----------------------------------

Где значится, что для включения МГДП на банки A и B должно быть обращение по адресу C7A8. Не работает. :)

Легко разобраться, почему это так.
В той же книжке есть табличка побитовая "Переключение режимов отображения АГАТ", описывающая младший байт в C7AB адресе обращения, нас интересуют особенно биты 0 и 1:

А7      ! признак удвоенной плотности (МГДП или Т64)
А6      ! ЭС2
А5      ! ЭС1  экранные страницы
А4      ! ЭС0
А3      ! ЭПС1 (текст) или ЭС3 (графика)
А2      ! ЭПС0 (текст); в графике несущественен
А1      ! РВИ2  00-ЦГВР   10-Т32 или Т64
А0      ! РВИ1  01-ЦГСР   11 МГВР или МГДП

Для МГДП это никак не может быть C7A8. А C7AB вписывается в шаблон (A7=1, A1=1, A0=1).

69

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

Это надо в теме опечаток на сайте писать, где-то наверху форума.

70

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

Ребята, я переснял все и всякими способами.  Какие еще мои действия? Есть какие-то цифры? в смысле вот на таком-то диске надо вычитать такой-то трек?

71 Отредактировано vvhitevvizard (26-08-2021 02:27)

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

garnizon пишет:

Ребята, я переснял все и всякими способами.  Какие еще мои действия? Есть какие-то цифры? в смысле вот на таком-то диске надо вычитать такой-то трек?

Игорь, огромное спасибо! Восстановились все 100% необходимых файлов для ВЗ и все доступные файлы для ЧЗ (что были на дисках - если что-то было где-то еще то увы утрачено).
На дисках остались битыми мелкие бинарники с экспериментами, файлы с промежуточной графикой, попытки снятия защиты и прочие патчи для эппл игрушек и агатовского софта - все это несущественно для восстановления.
----------
На фантоме я читал про ваши с Волдемаром фирменные технологии снятия образа, когда каждый проход попытки чтения сохраняется отдельно и уже из многомегабайтного слепка с помощью хитрых алгоритмов высчитываются наиболее удачные попытки чтения для каждого сектора. Я сузил зону поиска до примерно пяти дисков, Волдемар прошелся по всем нечитаемым файлам, вытащил все тела файлов что были стерты - чудо, но через разные подходы восстановились все сбойные места!!! Далее мне после сличения и дальнейшей правки удалось восстановить все недостающиие файлы Внешней Зоны в рабочем виде почти на момент ее последней даты редактирования, отредактировать исходники и начать вносить правки. Буду выкладывать апдейты и добавлять то, что хотел реализовать но не успел - собираюсь как минимум сделать полноценное демо. И поделюсь последней версией исходника под TASM (сейчас он в неспешной стадии кардинальных правок c глобальными переименованиями и прочими пертурбацияими - вспоминаю что делал тогда и заново ассимилирую код). В первом посте темы буду обновлять ссылку на последний апдейт.

Подземелья Черного Замка - здесь сложнее, новая версия проекта была переделана из A-файлов бейсика в скрипт, но программу для интерпретации скрипта тогда не успел написать. Есть пока технически не решаемые сложности.
Тем не менее, для текущего статуса, после сличения полный набор файлов для ранней версии (107 файлов локаций) и файлов для поздней версии (153 файла локации) выложил в соседней теме в аттачах.

72

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

Хорошо бы, для ваших игр создать отдельные странички на сайте. Пусть что пока нет конечных версий. Так чтоб для каждой был текст авторский с общими словами хотя бы. И скриншоты на ваш выбор. Меня очень заинтересовало Подземелье, ведь игр такого жанра нет на агате, нет и все совсем.

Ведь пока вот что только есть, и то с ошибкой в названии как я понимаю:
http://agatcomp.ru/agat/Software/Game/L … pauk.shtml

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

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

=) Название улыбнуло.

Увы, Подземелье Черного Замка требует серьезной доработки - ранняя версия запускаема как proof of concept, но для полноценной игры требуется, чтобы каждый присоединяемый по chain файл имел в своем составе управляющий код (64 блока), в котором исполь зование предметов и заклинаний, сохранение состояния игры на диск итд.
Задача на практике трудно решаема (загрузка каждого файла из 106 доступных и присоединение через EXEC файла с управляющим кодом).
Новая версия игры (расширенная до 153+ локаций) была и вовсе оставлена в 1996 в нерабочем состоянии, в процессе переписки под скрипт + управляющий код на ассемблере. Цель-минимум пока - привести все скрипты локаций к одному формату.

74 Отредактировано garnizon (05-09-2021 00:59)

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

http://agatcomp.ru/agat/Software/Game/P … Zone.shtml

Хорошо бы краткое описание от автора про смысл игры.
И скриншот нормально иллюстрирующий игру, а лучше несколько с разных уровней, чтоб GIF сделать.

И еще вопросы по игре, я так понял после сокращения меню - режим ДЕМО пропал?

В игре использовалось совмещение режимов? - картинка в аттаче.

Post's attachments

EZs.png, 13.78 kb, 512 x 512
EZs.png 13.78 kb, 160 downloads since 2021-09-04 

75 Отредактировано vvhitevvizard (05-09-2021 13:09)

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

garnizon пишет:

И еще вопросы по игре, я так понял после сокращения меню - режим ДЕМО пропал?

Демо в виде короткой части одного уровня - осталось. Так как это было тогда в 1996.04 на момент последней правки исходников. Предыдущие уровни несовместимы (они написаны были под старый движок, конвертация в принципе возможна). Проект тогда делался по принципу "будет готово тогда, когда будет готово". В 1996 я начал кардинально переделывать движок - и короткий уровень - просто для его тестирования. И именно оно может служить просто демкой возможностей. К патчам демки я буду возвращаться (как перееду на новое место в другой стране).

В игре использовалось совмещение режимов? - картинка в аттаче.

В меню - да. В игровой части - точно нет. Ибо это затратно. Прерывания с частотой 60 Герц - это минус 10-15% производительности. Под модуль часов с более щадящими таймингами я не подгонял логику, хотя придумать что-то, чтобы ждать обратного хода луча было бы неплохо (если это вообще возможно на Агат).
PS: Скриншоты надо делать в полноэкранном режиме - эмулятор Олега не уважает соблюдение пропорций в окошке.
Cкриншоты есть в этой теме (напр в начале третьей страницы). Описание - в первом посте первой страницы и далее. Я подредактирую тексты там чуть позже.

Аналогично для ЧЗ - проект в существующем виде неиграбелен. Ни старая версия ни новая. Новодел делать не хочется, но перелка под свой скриптовый язык (вплоть до полной машины Тюринга с переменными, условными ветвлениями, подпрограммами итп) штука заманчивая - и Challenge интересный, для Агат и PC одновременно, но сроки неопределенные.