Формат файла .MSF версии 1.0 (Memory state file) для эмулятора БК 0010(01)

Файлы данного формата обычно хранят в себе полный слепок всей памяти БК на момент сохранения, состояние регистров, уменьшенную копию экрана, а также любую другую необходимую для последующего восстановления информацию. Формат является бинарным, и представляет из себя теговую структуру. Каждый тег представляет из себя заголовок, и данные некоторого типа. Теги могут располагаться в любом порядке (кроме первого заголовочного тега STATE_FILE_HEADER), а также быть вложенными один в другой. Теоретически любой из тегов может быть опущен, а также могут присутствовать теги, которые незнакомы эмулятору данной версии, и будут без проблем пропущены. Таким образом теоретически осуществляется совместимость форматов разных версий в обе стороны.

 

Формам заголовочного тега:

struct STATE_FILE_HEADER

{

DWORD type;

- тип файла всегда равен (STATE_ID == 65536)

DWORD version;

- версия файла 10 – 1.0, 15 – 1.5, 20 – 2.0, и т.д. В наст время версия файла 1.0 (10)

DWORD configuration;

- конфигурация компьютера:

1 – БК 0010(01) с БЕЙСИКом “Вильнюс 1986”

2 – БК 0010(01) с блоком МСТД

3 – БК 0010(01) с дополнительным блоком ОЗУ 32Кб

4 – БК 0010(01) с контроллером НГМД и блоком ДОЗУ 16К

5 – БК 11М

};

Далее следуют тегов для конкретной конфигурации.

Формат тега:

struct STATE_BLOCK_HEADER

{

 

DWORD type;

- тип тега

 

DWORD length;

- длина в файле занимаемая им вместе с заголовком

};

За тегом сразу следую данные. Теги бывают следующих типов:

Тип

Коментарий

Длина

-1

неизвестный блок. Просто пустая болванка, сделан на всякий случай

6 и более

0

блок памяти основного 64Кбайтного пространства. Вся память с 0 – 200000, то, что в ней находится в текущий момент вместе с системными регистрами

6 + 64Кб

1

Регистры процессора: R0 – R5, SP, PC, PSW

6 + 18

2

Малая копия экрана. См. описание ниже

 

3

Блок расширенной памяти 16К + 8К КНГМД. Располагается с адресов 120000 – 160000 и НГМД с 160000 – 200000

6 + 24Кб

4

Страницы расширенной памяти 32К. Располагается с адресов 120000 – 140000

6 + 32Кб

5

Страницы расширенной памяти 64К для БК11М. Формат пока не определен.

 

 

Формат тега “Блок памяти основного 64Кбайтного пространства”. Тип 0:

struct STATE_BLOCK_HEADER

{

 

DWORD type;

 
 

DWORD length;

 

};

Далее следуют 64Кбайта основной памяти в диапазоне адресов 0 – 200000.

 

Формат тега “Регистры процессора”. Тип 1:

struct STATE_BLOCK_HEADER

{

 

DWORD type;

 
 

DWORD length;

 

};

struct CPU_REGISTERS

{

 

WORD ro;

- регистр общего назначения R0

 

WORD r1;

- регистр общего назначения R1

 

WORD r2;

- регистр общего назначения R2

 

WORD r3;

- регистр общего назначения R3

 

WORD r4;

- регистр общего назначения R4

 

WORD r5;

- регистр общего назначения R5

 

WORD sp;

- регистр стека SP

 

WORD pc;

- регистр команд PC

 

WORD psw;

- слово состояния процессора PSW

};

Формат тега “Малая копия экрана”. Тип 2:

struct STATE_BLOCK_HEADER

{

 

DWORD type;

 
 

DWORD length;

 

};

struct BITMAPINFOHEADER

{

 

DWORD biSize = 40;

- размер структуры BITMAPINFOHEADER

 

DWORD biWidth = 200;

- всегда 200

 

DWORD biHeight = 200;

- всегда 200

 

WORD biPlanes = 1;

- всегда 1 (1 плоскость);

 

WORD biBitCount = 32;

- кол-во бит на пиксел (любое допустимое кол-во бит)

 

DWORD biCompression = 0;

- всегда 0 (без компресии)

 

DWORD biSizeImage = 0;

- не используется

 

DWORD biXPelsPerMeter = 0;

- не используется

 

DWORD biYPelsPerMeter = 0;

- не используется

 

DWORD biClrUsed = 0;

- не используется

 

DWORD biClrImportant = 0;

- не используется

};

Далее следую непосредственно массив бит картинки. Картинка записывается в перевернутом по вертикали виде где каждая строка выровнена на границу 4-х байт.

 

Формат тега “Блок расширенной памяти 16К + 8К КНГМД”. Тип 3:

struct STATE_BLOCK_HEADER

{

 

DWORD type;

 
 

DWORD length;

 

};

DWORD bBasic - флаг включено ли ПЗУ (0 – нет, 1 – да)

Далее следуют 24Кбайта памяти при установленном флаге bBasic в 1 (обычно ПЗУ 24К бейсика)

Далее следуют 24Кбайта памяти при установленном флаге bBasic в 0 (обычно ДОЗУ 16К + ПЗУ НГМД 8К)

Формат тега “Страницы расширенной памяти 32К”. Тип 4

struct STATE_BLOCK_HEADER

{

 

DWORD type;

 
 

DWORD length;

 

};

DWORD nPage - номер подключенной страницы 0 – 3

Далее следуют 32Кбайта дополнительной памяти

Последовательности тегов для конфигураций создаваемых эмулятором версии 2.6. Хоте порядок тегов может быть произвольной, в реальных файлах MSF теги идут именно так:

 

1 – БК 0010(01) с БЕЙСИКом “Вильнюс 1986”

Тип

Название

Hdr

Заголовочный тег

2

Preview

1

Регистры процессора

0

Основная память 64К

 

2 – БК 0010(01) с блоком МСТД

Тип

Название

Hdr

Заголовочный тег

2

Preview

1

Регистры процессора

0

Основная память 64К

3 – БК 0010(01) с дополнительным блоком ОЗУ 32Кб

Тип

Название

Hdr

Заголовочный тег

2

Preview

1

Регистры процессора

0

Основная память 64К

4

Страницы расширенной памяти 32К

 

4 – БК 0010(01) с контроллером НГМД и блоком ДОЗУ 16К

Тип

Название

Hdr

Заголовочный тег

2

Preview

1

Регистры процессора

0

Основная память 64К

3

Блок расширенной памяти 16К + 8К КНГМД