ПК-01 ЛЬВОВ

форум о ПК-01,02 "Львов"
Текущее время: 20 июл 2018, 03:55

Forum Games WEB Tape Loader Twitter RSS

Часовой пояс: UTC + 2 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 53 ]  На страницу 1, 2, 3, 4  След.
Автор Сообщение
СообщениеДобавлено: 05 мар 2012, 11:16 
Не в сети
Аватар пользователя

Зарегистрирован: 11 авг 2008, 17:05
Сообщений: 1403
Откуда: Украина
Кто-нибудь может написать инфу про форматы .LVT, .SAV и прочие, использующиеся в эмуляторах ПК-01?

_________________
Carthago delenda est, Carthaginem delendam esse


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 05 мар 2012, 15:27 
Не в сети
Site Admin
Аватар пользователя

Зарегистрирован: 24 июл 2008, 12:05
Сообщений: 994
Первые 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


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 07 мар 2012, 21:40 
Не в сети

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

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


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 07 мар 2012, 23:21 
Не в сети
Аватар пользователя

Зарегистрирован: 11 авг 2008, 17:05
Сообщений: 1403
Откуда: Украина
sadfsdfsdaf писал(а):
с дампом получилось хуже, исходный замысел был, чтобы сигнатура составляла 16 байтов, тогда в hex-редакторе легко по зонам памяти "гулять"

Если не секрет, то как Вы так красиво форматируете вывод в code-блоке?

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

_________________
Carthago delenda est, Carthaginem delendam esse


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 09 мар 2012, 18:12 
Не в сети

Зарегистрирован: 07 дек 2010, 16:54
Сообщений: 202
liberation писал(а):
Если не секрет, то как Вы так красиво форматируете вывод в code-блоке?

так ведь шрифт моноширинный....
в FARe всё делаю...


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re:
СообщениеДобавлено: 11 июн 2012, 09:04 
Не в сети

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


До конца файла остается еще 14 байтов. Они что означают?


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Re:
СообщениеДобавлено: 11 июн 2012, 09:52 
Не в сети
Site Admin
Аватар пользователя

Зарегистрирован: 24 июл 2008, 12:05
Сообщений: 994
Tim0xA писал(а):
До конца файла остается еще 14 байтов. Они что означают?


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


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Re:
СообщениеДобавлено: 11 июн 2012, 23:04 
Не в сети

Зарегистрирован: 07 дек 2010, 16:54
Сообщений: 202
Zelya писал(а):
Tim0xA писал(а):
До конца файла остается еще 14 байтов. Они что означают?

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

это привязка к биосу, т.е. точки входа и значения некоторых переменных
Код:
#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:
СообщениеДобавлено: 12 июн 2012, 01:38 
Не в сети

Зарегистрирован: 04 июн 2012, 22:08
Сообщений: 44
Откуда: Украина
sadfsdfsdaf писал(а):

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


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 12 июн 2012, 14:11 
Не в сети

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

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


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 12 июн 2012, 14:58 
Не в сети
Аватар пользователя

Зарегистрирован: 11 авг 2008, 17:05
Сообщений: 1403
Откуда: Украина
Tim0xA писал(а):
P.S. Кстати, только в "prisoner.sav" эти биты оказались почему-то установлены.

В порядке пояснения: речь идет об игре "Узник".

_________________
Carthago delenda est, Carthaginem delendam esse


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Re:
СообщениеДобавлено: 12 июн 2012, 22:11 
Не в сети

Зарегистрирован: 07 дек 2010, 16:54
Сообщений: 202
Tim0xA писал(а):
sadfsdfsdaf писал(а):

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

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


Последний раз редактировалось sadfsdfsdaf 12 июн 2012, 22:17, всего редактировалось 1 раз.

Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 12 июн 2012, 22:15 
Не в сети

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

странно. я этот контроллер вообще не эмулировал, ну т.е. у меня он "всегда в одном и том же режиме работает", а регистры просто пишутся/читаются "как есть". если контроллер самостоятельно сбрасывает/выставляет биты со своей стороны, то - да, сохранённые значения будут неверными, т.к. исходно что в порты программа писала, то там и останется.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 12 июн 2012, 22:51 
Не в сети

Зарегистрирован: 04 июн 2012, 22:08
Сообщений: 44
Откуда: Украина
sadfsdfsdaf писал(а):
я этот контроллер вообще не эмулировал, ну т.е. у меня он "всегда в одном и том же режиме работает", а регистры просто пишутся/читаются "как есть"

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


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 13 июн 2012, 00:15 
Не в сети

Зарегистрирован: 07 дек 2010, 16:54
Сообщений: 202
Tim0xA писал(а):
Вот на "Векторе" такой подход не прокатывает. Есть несколько программ, которые используют различные режимы работы ВВ55 в своих целях, поэтому пришлось заэмулировать его по-настоящему. Соответственно и во "Львове" этот код тоже заюзан.

верю, на Радио-РК или Корвете железа вообще "до чёрта" (со всеми их ПДП, ВГ, и т.п.)
(не было у меня тогда документации, программ тоже не было, которым бы был нужен контроллер)


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 53 ]  На страницу 1, 2, 3, 4  След.

Forum Games WEB Tape Loader Twitter RSS

Часовой пояс: UTC + 2 часа [ Летнее время ]


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
cron
Free counters!
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB