Форматы файлов ПК-01 "Львов" для эмуляторов
- liberation
- Posts: 1405
- Joined: 11 Aug 2008, 17:05
- Location: Украина
- Contact:
Форматы файлов ПК-01 "Львов" для эмуляторов
Кто-нибудь может написать инфу про форматы .LVT, .SAV и прочие, использующиеся в эмуляторах ПК-01?
Carthago delenda est, Carthaginem delendam esse
Первые 16 символов - хедер.
Сначала оперделям тип програмы:
Если хедер начинается с "LVOV/DUMP/2.0/" - то это *.sav файл (дамп эмуля Калашникова).
Иначе, хедер должен начинаться с "LVOV/2.0/" (LVT, LV0, ...). Тогда проверяем 9-й символ (начало нумерации с 0). Если он 0xD3, то это бейсик-программа, если 0xD0 - бинарная.
Теперь лоадим прогу:
Для бинарной, все просто: 16, 17 символы - адресс начала памяти для программы; 18, 19 - конец; 20, 21 - точка старта, все остальные байты просто пишутся в память с начального адресса. Потом, соответственно запуск со старта.
Для бейсика схоже, только адресс начала программы берется не из файла, а используются системные переменные для бейсика (их ищем тут). В самом файле идет просто код. Не забываем установить адресс окончания бейсик-программы. После загрузки такого файла надо натайпать run.
Для дампа так:
После хедера 0x1000 символов - память.
Следующие 0x4000 - видео
Следующие 0x100 - порты
Потом регистры в следующем порядке:
b, c, d, e, h, l, a, f, sp (2 байта), pc (2 байта)
Вот, вроде, и все....
UPD. Забыл сказать! LV0, LV1 и т.п. это те же самые *.LVT. Просто некоторые программы разбиты на файлы. Для них первым грузится LVT, а потом, на всякие LOADы догружаются следующие по номеру LV
Сначала оперделям тип програмы:
Если хедер начинается с "LVOV/DUMP/2.0/" - то это *.sav файл (дамп эмуля Калашникова).
Иначе, хедер должен начинаться с "LVOV/2.0/" (LVT, LV0, ...). Тогда проверяем 9-й символ (начало нумерации с 0). Если он 0xD3, то это бейсик-программа, если 0xD0 - бинарная.
Теперь лоадим прогу:
Для бинарной, все просто: 16, 17 символы - адресс начала памяти для программы; 18, 19 - конец; 20, 21 - точка старта, все остальные байты просто пишутся в память с начального адресса. Потом, соответственно запуск со старта.
Для бейсика схоже, только адресс начала программы берется не из файла, а используются системные переменные для бейсика (их ищем тут). В самом файле идет просто код. Не забываем установить адресс окончания бейсик-программы. После загрузки такого файла надо натайпать run.
Для дампа так:
После хедера 0x1000 символов - память.
Следующие 0x4000 - видео
Следующие 0x100 - порты
Потом регистры в следующем порядке:
b, c, d, e, h, l, a, f, sp (2 байта), pc (2 байта)
Вот, вроде, и все....
UPD. Забыл сказать! LV0, LV1 и т.п. это те же самые *.LVT. Просто некоторые программы разбиты на файлы. Для них первым грузится LVT, а потом, на всякие LOADы догружаются следующие по номеру LV
-
sadfsdfsdaf
- Posts: 227
- Joined: 07 Dec 2010, 16:54
формат я выбирал не мудрствуя лукаво - просто взял стандартный с ленты и выкинул пилот-сигналы, а повтор типа файла (D0, D3 и т.д. (кстати, есть ещё SLOAD и LOAD файлы, там эти коды будут другие)) оставил в одном экземпляре, ибо незачем (файл и так надёжен в отличие от ленты).
с дампом получилось хуже, исходный замысел был, чтобы сигнатура составляла 16 байтов, тогда в hex-редакторе легко по зонам памяти "гулять", но промазал, один байт там лишний получился.
с дампом получилось хуже, исходный замысел был, чтобы сигнатура составляла 16 байтов, тогда в hex-редакторе легко по зонам памяти "гулять", но промазал, один байт там лишний получился.
Code: Select all
Смещение Размер Значение Описание
BASIC .LVT/.LVR
+0x00 9 "LVOV/2.0/" Первичная сигнатура .LVT-ленты
+0x09 1 0xD3 Вторичная .LVT сигнатура (Basic)
+0x0A 6 "......" Имя ленты в КОИ7 (выравнено пробелами)
+0x10 upto EOF 0x??, ... Текст бейсик-программы во внутреннем формате:
DW:0?, DW, DB(...), DB:0 - признак конца программы,
номер строки, токенизированная строка, конец строки
CODE .LVT
+0x00 9 "LVOV/2.0/" Первичная сигнатура .LVT-ленты
+0x09 1 0xD0 Вторичная .LVT сигнатура (Binary)
+0x0A 6 "......" Имя ленты в КОИ7 (выравнено пробелами)
+0x10 2 0x???? Адрес начала размещения программы
+0x12 2 0x???? Адрес конца размещения программы
+0x14 2 0x???? Адрес точки запуска программы
+0x16 upto EOF 0x??, ... Тело программы
- liberation
- Posts: 1405
- Joined: 11 Aug 2008, 17:05
- Location: Украина
- Contact:
Если не секрет, то как Вы так красиво форматируете вывод в code-блоке?sadfsdfsdaf wrote:с дампом получилось хуже, исходный замысел был, чтобы сигнатура составляла 16 байтов, тогда в hex-редакторе легко по зонам памяти "гулять"
А вообще - большое спасибо за инфу! Теперь мой хелловорлд как никогда близок к завершению.
Carthago delenda est, Carthaginem delendam esse
-
sadfsdfsdaf
- Posts: 227
- Joined: 07 Dec 2010, 16:54
Re:
До конца файла остается еще 14 байтов. Они что означают?liberation wrote:Для дампа так:
После хедера 0x1000 символов - память.
Следующие 0x4000 - видео
Следующие 0x100 - порты
Потом регистры в следующем порядке:
b, c, d, e, h, l, a, f, sp (2 байта), pc (2 байта)
-
sadfsdfsdaf
- Posts: 227
- Joined: 07 Dec 2010, 16:54
Re: Re:
это привязка к биосу, т.е. точки входа и значения некоторых переменныхZelya wrote:Не знаю, но кругом они одинаковые. Я в онлайн эмуле/студии их игнорю и все, тьфу-тьфу-тьфу, работает. Возможно, Владимир прояснит ситуацию?Tim0xA wrote: До конца файла остается еще 14 байтов. Они что означают?
Code: Select all
#define DumpSign "LVOV/DUMP/2.0/H+"
int LoadAll(char* s, unsigned int Speed) {
....................................................................
fread(&BasicStack,sizeof(BasicStack),1,f);
fread(&BasicHotEntry,sizeof(BasicHotEntry),1,f);
fread(&BasicProgBegin,sizeof(BasicProgBegin),1,f);
fread(&BasicProgEnd,sizeof(BasicProgEnd),1,f);
fread(&LoadBinaryBpx,sizeof(LoadBinaryBpx),1,f);
fread(&LoadBinaryEntry,sizeof(LoadBinaryEntry),1,f);
fread(&LoadBinaryOfs,sizeof(LoadBinaryOfs),1,f);
fclose(f); if (ferror(f)) return erIO; else {
emControl(emcSetBpx,8,LoadBinaryBpx); return erOK;
}
}Re: Re:
Значит эти данные можно игнорировать, т.к. они уже должны быть в дампе памяти.sadfsdfsdaf wrote: это привязка к биосу, т.е. точки входа и значения некоторых переменных
Re: Форматы файлов ПК-01 "Львов" для эмуляторов
Оказывается в формате *.SAV значения регистров управляющего слова для ВВ55 по адресам 0x140D4 и 0140E4 обычно сохраняются без старшего бита, из-за чего у меня в эмуляторе в некоторых играх глючила клавиатура (например, в DRACULA не нажималась клавиша <ВК>), т.к. режим работы ВВ55 был запрограммирован неправильно. Учел это в эмуляторе, теперь SAV-файлы нормально запускаются.
P.S. Кстати, только в "prisoner.sav" эти биты оказались почему-то установлены.
P.S. Кстати, только в "prisoner.sav" эти биты оказались почему-то установлены.
- liberation
- Posts: 1405
- Joined: 11 Aug 2008, 17:05
- Location: Украина
- Contact:
Re: Форматы файлов ПК-01 "Львов" для эмуляторов
В порядке пояснения: речь идет об игре "Узник".Tim0xA wrote:P.S. Кстати, только в "prisoner.sav" эти биты оказались почему-то установлены.
Carthago delenda est, Carthaginem delendam esse
-
sadfsdfsdaf
- Posts: 227
- Joined: 07 Dec 2010, 16:54
Re: Re:
ну, если завязываться на контрольную сумму ПЗУ, то - да. предполагалось, что ПЗУ может быть много, они могут быть разными. требуемая для работа привязка перечислена в этих переменных. всё. если в эиуляторе зашиты константы, а ПЗУ будет не то, на что рассчитывал разработчик эмулятора, то попытка выполнить действия над эмулируемой машиной (например, загрузить очередную программу) могут оказаться неверными.Tim0xA wrote:Значит эти данные можно игнорировать, т.к. они уже должны быть в дампе памяти.sadfsdfsdaf wrote: это привязка к биосу, т.е. точки входа и значения некоторых переменных
Last edited by sadfsdfsdaf on 12 Jun 2012, 22:17, edited 1 time in total.
-
sadfsdfsdaf
- Posts: 227
- Joined: 07 Dec 2010, 16:54
Re: Форматы файлов ПК-01 "Львов" для эмуляторов
странно. я этот контроллер вообще не эмулировал, ну т.е. у меня он "всегда в одном и том же режиме работает", а регистры просто пишутся/читаются "как есть". если контроллер самостоятельно сбрасывает/выставляет биты со своей стороны, то - да, сохранённые значения будут неверными, т.к. исходно что в порты программа писала, то там и останется.Tim0xA wrote:Оказывается в формате *.SAV значения регистров управляющего слова для ВВ55 по адресам 0x140D4 и 0140E4 обычно сохраняются без старшего бита, из-за чего у меня в эмуляторе в некоторых играх глючила клавиатура (например, в DRACULA не нажималась клавиша <ВК>), т.к. режим работы ВВ55 был запрограммирован неправильно. Учел это в эмуляторе, теперь SAV-файлы нормально запускаются.
Re: Форматы файлов ПК-01 "Львов" для эмуляторов
Вот на "Векторе" такой подход не прокатывает. Есть несколько программ, которые используют различные режимы работы ВВ55 в своих целях, поэтому пришлось заэмулировать его по-настоящему. Соответственно и во "Львове" этот код тоже заюзан.sadfsdfsdaf wrote:я этот контроллер вообще не эмулировал, ну т.е. у меня он "всегда в одном и том же режиме работает", а регистры просто пишутся/читаются "как есть"
-
sadfsdfsdaf
- Posts: 227
- Joined: 07 Dec 2010, 16:54
Re: Форматы файлов ПК-01 "Львов" для эмуляторов
верю, на Радио-РК или Корвете железа вообще "до чёрта" (со всеми их ПДП, ВГ, и т.п.)Tim0xA wrote:Вот на "Векторе" такой подход не прокатывает. Есть несколько программ, которые используют различные режимы работы ВВ55 в своих целях, поэтому пришлось заэмулировать его по-настоящему. Соответственно и во "Львове" этот код тоже заюзан.
(не было у меня тогда документации, программ тоже не было, которым бы был нужен контроллер)
Who is online
Users browsing this forum: No registered users and 0 guests

