Форматы файлов ПК-01 "Львов" для эмуляторов

Все об эмуляции ПК-01 "Львов" на современных платформах
User avatar
liberation
Posts: 1405
Joined: 11 Aug 2008, 17:05
Location: Украина
Contact:

Форматы файлов ПК-01 "Львов" для эмуляторов

Post by liberation »

Кто-нибудь может написать инфу про форматы .LVT, .SAV и прочие, использующиеся в эмуляторах ПК-01?
Carthago delenda est, Carthaginem delendam esse
User avatar
Zelya
Site Admin
Posts: 1071
Joined: 24 Jul 2008, 12:05

Post by Zelya »

Первые 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
sadfsdfsdaf
Posts: 227
Joined: 07 Dec 2010, 16:54

Post by sadfsdfsdaf »

формат я выбирал не мудрствуя лукаво - просто взял стандартный с ленты и выкинул пилот-сигналы, а повтор типа файла (D0, D3 и т.д. (кстати, есть ещё SLOAD и LOAD файлы, там эти коды будут другие)) оставил в одном экземпляре, ибо незачем (файл и так надёжен в отличие от ленты).
с дампом получилось хуже, исходный замысел был, чтобы сигнатура составляла 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??, ...       Тело программы
User avatar
liberation
Posts: 1405
Joined: 11 Aug 2008, 17:05
Location: Украина
Contact:

Post by liberation »

sadfsdfsdaf wrote:с дампом получилось хуже, исходный замысел был, чтобы сигнатура составляла 16 байтов, тогда в hex-редакторе легко по зонам памяти "гулять"
Если не секрет, то как Вы так красиво форматируете вывод в code-блоке?

А вообще - большое спасибо за инфу! Теперь мой хелловорлд как никогда близок к завершению. :D
Carthago delenda est, Carthaginem delendam esse
sadfsdfsdaf
Posts: 227
Joined: 07 Dec 2010, 16:54

Post by sadfsdfsdaf »

liberation wrote:Если не секрет, то как Вы так красиво форматируете вывод в code-блоке?
так ведь шрифт моноширинный....
в FARe всё делаю...
Tim0xA
Posts: 44
Joined: 04 Jun 2012, 22:08
Location: Украина

Re:

Post by Tim0xA »

liberation wrote:Для дампа так:
После хедера 0x1000 символов - память.
Следующие 0x4000 - видео
Следующие 0x100 - порты
Потом регистры в следующем порядке:
b, c, d, e, h, l, a, f, sp (2 байта), pc (2 байта)
До конца файла остается еще 14 байтов. Они что означают?
User avatar
Zelya
Site Admin
Posts: 1071
Joined: 24 Jul 2008, 12:05

Re: Re:

Post by Zelya »

Tim0xA wrote: До конца файла остается еще 14 байтов. Они что означают?
Не знаю, но кругом они одинаковые. Я в онлайн эмуле/студии их игнорю и все, тьфу-тьфу-тьфу, работает. Возможно, Владимир прояснит ситуацию?
sadfsdfsdaf
Posts: 227
Joined: 07 Dec 2010, 16:54

Re: Re:

Post by sadfsdfsdaf »

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;
 }
}
Tim0xA
Posts: 44
Joined: 04 Jun 2012, 22:08
Location: Украина

Re: Re:

Post by Tim0xA »

sadfsdfsdaf wrote: это привязка к биосу, т.е. точки входа и значения некоторых переменных
Значит эти данные можно игнорировать, т.к. они уже должны быть в дампе памяти.
Tim0xA
Posts: 44
Joined: 04 Jun 2012, 22:08
Location: Украина

Re: Форматы файлов ПК-01 "Львов" для эмуляторов

Post by Tim0xA »

Оказывается в формате *.SAV значения регистров управляющего слова для ВВ55 по адресам 0x140D4 и 0140E4 обычно сохраняются без старшего бита, из-за чего у меня в эмуляторе в некоторых играх глючила клавиатура (например, в DRACULA не нажималась клавиша <ВК>), т.к. режим работы ВВ55 был запрограммирован неправильно. Учел это в эмуляторе, теперь SAV-файлы нормально запускаются.

P.S. Кстати, только в "prisoner.sav" эти биты оказались почему-то установлены.
User avatar
liberation
Posts: 1405
Joined: 11 Aug 2008, 17:05
Location: Украина
Contact:

Re: Форматы файлов ПК-01 "Львов" для эмуляторов

Post by liberation »

Tim0xA wrote:P.S. Кстати, только в "prisoner.sav" эти биты оказались почему-то установлены.
В порядке пояснения: речь идет об игре "Узник".
Carthago delenda est, Carthaginem delendam esse
sadfsdfsdaf
Posts: 227
Joined: 07 Dec 2010, 16:54

Re: Re:

Post by sadfsdfsdaf »

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 "Львов" для эмуляторов

Post by sadfsdfsdaf »

Tim0xA wrote:Оказывается в формате *.SAV значения регистров управляющего слова для ВВ55 по адресам 0x140D4 и 0140E4 обычно сохраняются без старшего бита, из-за чего у меня в эмуляторе в некоторых играх глючила клавиатура (например, в DRACULA не нажималась клавиша <ВК>), т.к. режим работы ВВ55 был запрограммирован неправильно. Учел это в эмуляторе, теперь SAV-файлы нормально запускаются.
странно. я этот контроллер вообще не эмулировал, ну т.е. у меня он "всегда в одном и том же режиме работает", а регистры просто пишутся/читаются "как есть". если контроллер самостоятельно сбрасывает/выставляет биты со своей стороны, то - да, сохранённые значения будут неверными, т.к. исходно что в порты программа писала, то там и останется.
Tim0xA
Posts: 44
Joined: 04 Jun 2012, 22:08
Location: Украина

Re: Форматы файлов ПК-01 "Львов" для эмуляторов

Post by Tim0xA »

sadfsdfsdaf wrote:я этот контроллер вообще не эмулировал, ну т.е. у меня он "всегда в одном и том же режиме работает", а регистры просто пишутся/читаются "как есть"
Вот на "Векторе" такой подход не прокатывает. Есть несколько программ, которые используют различные режимы работы ВВ55 в своих целях, поэтому пришлось заэмулировать его по-настоящему. Соответственно и во "Львове" этот код тоже заюзан.
sadfsdfsdaf
Posts: 227
Joined: 07 Dec 2010, 16:54

Re: Форматы файлов ПК-01 "Львов" для эмуляторов

Post by sadfsdfsdaf »

Tim0xA wrote:Вот на "Векторе" такой подход не прокатывает. Есть несколько программ, которые используют различные режимы работы ВВ55 в своих целях, поэтому пришлось заэмулировать его по-настоящему. Соответственно и во "Львове" этот код тоже заюзан.
верю, на Радио-РК или Корвете железа вообще "до чёрта" (со всеми их ПДП, ВГ, и т.п.)
(не было у меня тогда документации, программ тоже не было, которым бы был нужен контроллер)
Post Reply

Who is online

Users browsing this forum: No registered users and 0 guests