PC-01 Lviv

It is currently 19 Mar 2024, 12:58

Forum Games WEB Tape Loader Twitter RSS

All times are UTC+03:00




Post new topic  Reply to topic  [ 78 posts ]  Go to page 1 2 3 4 5 6 Next
Author Message
PostPosted: 05 Mar 2012, 11:16 
Offline
User avatar

Joined: 11 Aug 2008, 17:05
Posts: 1405
Location: Украина
Кто-нибудь может написать инфу про форматы .LVT, .SAV и прочие, использующиеся в эмуляторах ПК-01?

_________________
Carthago delenda est, Carthaginem delendam esse


Top
   
 Post subject:
PostPosted: 05 Mar 2012, 15:27 
Offline
Site Admin
User avatar

Joined: 24 Jul 2008, 12:05
Posts: 1070
Первые 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


Top
   
 Post subject:
PostPosted: 07 Mar 2012, 21:40 
Offline

Joined: 07 Dec 2010, 16:54
Posts: 227
формат я выбирал не мудрствуя лукаво - просто взял стандартный с ленты и выкинул пилот-сигналы, а повтор типа файла (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??, ...       Тело программы


Top
   
 Post subject:
PostPosted: 07 Mar 2012, 23:21 
Offline
User avatar

Joined: 11 Aug 2008, 17:05
Posts: 1405
Location: Украина
Quote:
с дампом получилось хуже, исходный замысел был, чтобы сигнатура составляла 16 байтов, тогда в hex-редакторе легко по зонам памяти "гулять"
Если не секрет, то как Вы так красиво форматируете вывод в code-блоке?

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

_________________
Carthago delenda est, Carthaginem delendam esse


Top
   
 Post subject:
PostPosted: 09 Mar 2012, 18:12 
Offline

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


Top
   
 Post subject: Re:
PostPosted: 11 Jun 2012, 09:04 
Offline

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


Top
   
 Post subject: Re: Re:
PostPosted: 11 Jun 2012, 09:52 
Offline
Site Admin
User avatar

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


Top
   
 Post subject: Re: Re:
PostPosted: 11 Jun 2012, 23:04 
Offline

Joined: 07 Dec 2010, 16:54
Posts: 227
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;
 }
}


Top
   
 Post subject: Re: Re:
PostPosted: 12 Jun 2012, 01:38 
Offline

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


Top
   
PostPosted: 12 Jun 2012, 14:11 
Offline

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

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


Top
   
PostPosted: 12 Jun 2012, 14:58 
Offline
User avatar

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

_________________
Carthago delenda est, Carthaginem delendam esse


Top
   
 Post subject: Re: Re:
PostPosted: 12 Jun 2012, 22:11 
Offline

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


Last edited by sadfsdfsdaf on 12 Jun 2012, 22:17, edited 1 time in total.

Top
   
PostPosted: 12 Jun 2012, 22:15 
Offline

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


Top
   
PostPosted: 12 Jun 2012, 22:51 
Offline

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


Top
   
PostPosted: 13 Jun 2012, 00:15 
Offline

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


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 78 posts ]  Go to page 1 2 3 4 5 6 Next

Forum Games WEB Tape Loader Twitter RSS

All times are UTC+03:00


Who is online

Users browsing this forum: No registered users and 1 guest


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Powered by phpBB® Forum Software © phpBB Limited