PC-01 Lviv
http://pc01.lviv.ua/forum/

Эмулятор Целикова (Башкирия/EMU)
http://pc01.lviv.ua/forum/viewtopic.php?f=12&t=337
Page 2 of 2

Author:  Zelya [ 27 Sep 2016, 11:32 ]
Post subject:  Re: Эмулятор Целикова (Башкирия/EMU)

Quote:
Ну вот он я :) Спрашивай, чего хотел. Только не расстраивайся, если отвечу через полгода :twisted:
Ура! Лучше через полгода, чем никогда.

Я кинул в аттач Барбариана. Сначала грузится заставка, и некий лоадер, который пробует сам загрузить файл. Причем, доходя до зоны из конфига tproc[E2ED-E342], "Башкирия" обрабатывает загрузку по-своему, а "хитрый" лоадер ломается. Поэтому у меня такие вопросы:
1. Что происходит по адресам

tproc[E2ED-E342]=sp
biproc[E343-E341]=sp
Как именно читает/пишет байт "Башкирия", меняет ли значения регистров и т.д.

2. Можно ли на это как-то повлиять?

Attachments:
barb.zip [22.26 KiB]
Downloaded 879 times

Author:  b2m [ 27 Sep 2016, 13:12 ]
Post subject:  Re: Эмулятор Целикова (Башкирия/EMU)

Quote:
1. Что происходит по адресам

tproc[E2ED-E342]=sp
biproc[E343-E341]=sp
Как именно читает/пишет байт "Башкирия", меняет ли значения регистров и т.д.

2. Можно ли на это как-то повлиять?
1. Когда процессор доходит до адреса номер 1, то вместо выполнения команды он отрабатывает некоторые действия, соответствующие именам tproc,iproc,oproc,biproc,boproc, а затем переходит по адресу номер 2. При этом могут быть использованы или изменены регистры, для каждого случая свои, к тому-же это зависит ещё и от параметра, стоящего после знака "=".

tproc - просто пропустить часть кода
iproc - область отвечает за загрузку блока с магнитофона, обычно используются регистры BC,DE,HL для определения "куда" и "сколько"
oproc - область отвечает за запись блока на магнитофон, те же регистры
biproc - область отвечает за ввод байта с магнитофона, обычно изменяется регистр А на считанный из файла байт
boproc - область отвечает за запись байта на магнитофон, обычно используются регистры А или С

Параметр после знака "=" определяет, какие регистры использовать, т.е. в каком стиле реализована эта п/п:
rk - Radio-86RK
sp - Specialist
bk - BK0010
...

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

2. Повлиять можно только изменив конфиг, но это будет только у тебя. А у других работать не будет. Если есть основания для изменения конфига в моём архиве, который скачивает большинство, то я могу подумать на этот счёт.

Будет время, посмотрю этот Barbarian...

Author:  b2m [ 27 Sep 2016, 15:49 ]
Post subject:  Re: Эмулятор Целикова (Башкирия/EMU)

Короче :) Посмотрел я этот загрузчик Barbarian-а, выяснилось, что он недочитывает заставку. Если читать из wav-ки, то проблем не будет, т.к. после заставки ищется раккорд, а затем читается сама игра. А вот с перехватом получается фигня, поиск раккорда пропускается, далее читается байт, он должен быть D0, а т.к. там не он, то происходит переход опять на поиск раккорда, но что-то там в регистрах уже не то, и поиск завершается с ошибкой. О чём бейсик честно пишет, но мы не видим. Можно потом вслепую дать команду CLS и она отработает.

Вобщем самое простое решение, обрезать заставку на 31 байт (можно ещё и длину в заголовке поправить, но она всё равно не используется). В линухе я сделал это командой: dd if=SCREEN.LVT of=BARBAR.LV0 bs=13866 count=1
Теперь после загрузки заставки эмуль снова спрашивает, чего грузить, и если выбрать игру, то она загрузится. Жмём любую клавишу (после того как внизу появятся какие-то цифры) - наслаждаемся.

Я только не понял, я вроде в эмуляторе делал автоматический выбор следующего файла .LV?, но оно не срабатывает. Загадка.

P.S. залез в исходники - не делал я для Львова такую фичу, но вроде бы пожелание такое было. Это в БК-шке имя файла берётся прямо из памяти, поэтому догрузка по имени работает.

Page 2 of 2 All times are UTC+03:00
Powered by phpBB® Forum Software © phpBB Limited
https://www.phpbb.com/