Эмулятор Целикова (Башкирия/EMU)

Все об эмуляции ПК-01 "Львов" на современных платформах
User avatar
Zelya
Site Admin
Posts: 1071
Joined: 24 Jul 2008, 12:05

Re: Эмулятор Целикова (Башкирия/EMU)

Post by Zelya »

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

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

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

2. Можно ли на это как-то повлиять?
Attachments
barb.zip
(22.26 KiB) Downloaded 1350 times
b2m
Posts: 115
Joined: 29 Mar 2012, 21:35
Contact:

Re: Эмулятор Целикова (Башкирия/EMU)

Post by b2m »

Zelya wrote: 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...
b2m
Posts: 115
Joined: 29 Mar 2012, 21:35
Contact:

Re: Эмулятор Целикова (Башкирия/EMU)

Post by b2m »

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

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

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

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

Who is online

Users browsing this forum: No registered users and 0 guests