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

Форматы файлов ПК-01 "Львов" для эмуляторов
http://pc01.lviv.ua/forum/viewtopic.php?f=12&t=102
Page 1 of 6

Author:  liberation [ 05 Mar 2012, 11:16 ]
Post subject:  Форматы файлов ПК-01 "Львов" для эмуляторов

Кто-нибудь может написать инфу про форматы .LVT, .SAV и прочие, использующиеся в эмуляторах ПК-01?

Author:  Zelya [ 05 Mar 2012, 15:27 ]
Post subject: 

Первые 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

Author:  sadfsdfsdaf [ 07 Mar 2012, 21:40 ]
Post subject: 

формат я выбирал не мудрствуя лукаво - просто взял стандартный с ленты и выкинул пилот-сигналы, а повтор типа файла (D0, D3 и т.д. (кстати, есть ещё SLOAD и LOAD файлы, там эти коды будут другие)) оставил в одном экземпляре, ибо незачем (файл и так надёжен в отличие от ленты).
с дампом получилось хуже, исходный замысел был, чтобы сигнатура составляла 16 байтов, тогда в hex-редакторе легко по зонам памяти "гулять", но промазал, один байт там лишний получился.
Code:
Смещение                Размер          Значение        Описание

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??, ...       Тело программы

Author:  liberation [ 07 Mar 2012, 23:21 ]
Post subject: 

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

А вообще - большое спасибо за инфу! Теперь мой хелловорлд как никогда близок к завершению. :D

Author:  sadfsdfsdaf [ 09 Mar 2012, 18:12 ]
Post subject: 

Quote:
Если не секрет, то как Вы так красиво форматируете вывод в code-блоке?
так ведь шрифт моноширинный....
в FARe всё делаю...

Author:  Tim0xA [ 11 Jun 2012, 09:04 ]
Post subject:  Re:

Quote:
Для дампа так:
После хедера 0x1000 символов - память.
Следующие 0x4000 - видео
Следующие 0x100 - порты
Потом регистры в следующем порядке:
b, c, d, e, h, l, a, f, sp (2 байта), pc (2 байта)
До конца файла остается еще 14 байтов. Они что означают?

Author:  Zelya [ 11 Jun 2012, 09:52 ]
Post subject:  Re: Re:

Quote:
До конца файла остается еще 14 байтов. Они что означают?
Не знаю, но кругом они одинаковые. Я в онлайн эмуле/студии их игнорю и все, тьфу-тьфу-тьфу, работает. Возможно, Владимир прояснит ситуацию?

Author:  sadfsdfsdaf [ 11 Jun 2012, 23:04 ]
Post subject:  Re: Re:

Quote:
Quote:
До конца файла остается еще 14 байтов. Они что означают?
Не знаю, но кругом они одинаковые. Я в онлайн эмуле/студии их игнорю и все, тьфу-тьфу-тьфу, работает. Возможно, Владимир прояснит ситуацию?
это привязка к биосу, т.е. точки входа и значения некоторых переменных
Code:
#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;
 }
}

Author:  Tim0xA [ 12 Jun 2012, 01:38 ]
Post subject:  Re: Re:

Quote:
Значит эти данные можно игнорировать, т.к. они уже должны быть в дампе памяти.

Author:  Tim0xA [ 12 Jun 2012, 14:11 ]
Post subject:  Re: Форматы файлов ПК-01 "Львов" для эмуляторов

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

P.S. Кстати, только в "prisoner.sav" эти биты оказались почему-то установлены.

Author:  liberation [ 12 Jun 2012, 14:58 ]
Post subject:  Re: Форматы файлов ПК-01 "Львов" для эмуляторов

Quote:
P.S. Кстати, только в "prisoner.sav" эти биты оказались почему-то установлены.
В порядке пояснения: речь идет об игре "Узник".

Author:  sadfsdfsdaf [ 12 Jun 2012, 22:11 ]
Post subject:  Re: Re:

Quote:
Quote:
Значит эти данные можно игнорировать, т.к. они уже должны быть в дампе памяти.
ну, если завязываться на контрольную сумму ПЗУ, то - да. предполагалось, что ПЗУ может быть много, они могут быть разными. требуемая для работа привязка перечислена в этих переменных. всё. если в эиуляторе зашиты константы, а ПЗУ будет не то, на что рассчитывал разработчик эмулятора, то попытка выполнить действия над эмулируемой машиной (например, загрузить очередную программу) могут оказаться неверными.

Author:  sadfsdfsdaf [ 12 Jun 2012, 22:15 ]
Post subject:  Re: Форматы файлов ПК-01 "Львов" для эмуляторов

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

Author:  Tim0xA [ 12 Jun 2012, 22:51 ]
Post subject:  Re: Форматы файлов ПК-01 "Львов" для эмуляторов

Quote:
я этот контроллер вообще не эмулировал, ну т.е. у меня он "всегда в одном и том же режиме работает", а регистры просто пишутся/читаются "как есть"
Вот на "Векторе" такой подход не прокатывает. Есть несколько программ, которые используют различные режимы работы ВВ55 в своих целях, поэтому пришлось заэмулировать его по-настоящему. Соответственно и во "Львове" этот код тоже заюзан.

Author:  sadfsdfsdaf [ 13 Jun 2012, 00:15 ]
Post subject:  Re: Форматы файлов ПК-01 "Львов" для эмуляторов

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

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