PSN
Z PMD 85 Infoserver
PSN - formát snapshot súboru PMD 85 Emulátora
PSN súbor reprezentuje "snímku" (z angl. snapshot) obsahu a stavu počítača PMD 85 a kompatibilných v danom momente, kedy bol snapshot vytvorený. Tento typ súboru vznikol pre PMD 85 Emulátor preto, aby sa do súboru mohli odpamätávať aj stavy všetkých základých periférií.
Štruktúra súboru je binárna a úvodná hlavička obsahuje všetky informácie o momentálnom type a stave počítača tak, ako to popisujú nasledujúce tabuľky. V súčasnosti existujú 2 verzie Snapshotu. 2. verzia Snapshotu je zavedená od Emulátora v2.2.8.301. Táto verzia Emulátora ukladá Snapshot vo verzii 2 iba v prípade, že sú v Emulátore zvolené také súčasti, ktoré je možné zaznamenať iba do novej verzie Snapshotu. Inak sa použije 1. verzia Snapshotu.
verzia 1
offset | dĺžka | význam |
---|---|---|
0 | 3 | text "PSN" - PMD 85 SNapshot |
3 | 1 | verzia Snapshotu - teraz 1 |
4 | 2 | offset, kde začínajú bloky pamäti - teraz 56 |
6 | 1 | model počítača:
|
7 | 1 | príznaky prerušenia:
|
8 | 2 | AF |
10 | 2 | BC |
12 | 2 | DE |
14 | 2 | HL |
16 | 2 | PC |
18 | 2 | SP |
20 | 2 | dĺžka ROM monitora[1] |
22 | 2 | dĺžka 16kB RAM bloku v priestore 0000h až 3FFFh[2] |
24 | 2 | dĺžka 16kB RAM bloku v priestore 4000h až 7FFFh[2] |
26 | 2 | dĺžka 16kB RAM bloku v priestore 8000h až BFFFh[2] |
28 | 2 | dĺžka 16kB RAM bloku v priestore C000h až FFFFh[2] |
30 | 1 | system PIO - CWR (0F7h) |
31 | 1 | system PIO - zvuk, LED, stránkovanie (0F6h) |
32 | 1 | system PIO - klávesnica (0F4h) |
33 | 1 | GPIO - CWR (4Fh) |
34 | 1 | GPIO - port C (4Eh) |
35 | 1 | GPIO - port B (4Dh) |
36 | 1 | GPIO - port A (4Ch) |
37 | 1 | GPIO - povolenie prerušení
|
38 | 1 | IMS-2 - CWR (7Fh) |
39 | 1 | IMS-2 - port C (7Eh) |
40 | 1 | IMS-2 - port B (7Dh) |
41 | 1 | IMS-2 - port A (7Ch) |
42 | 1 | IMS-2 - povolenie prerušení
|
43 | 1 | čítač 0 - CWR (5Fh) |
44 | 1 | čítač 0 - init hodnota L (5Ch) - ak (CWR & 16) != 0 |
45 | 1 | čítač 0 - init hodnota H (5Ch) - ak (CWR & 32) != 0 |
46 | 1 | čítač 1 - CWR (5Fh) |
47 | 1 | čítač 1 - init hodnota L (5Dh) - ak (CWR & 16) != 0 |
48 | 1 | čítač 1 - init hodnota H (5Dh) - ak (CWR & 32) != 0 |
49 | 1 | čítač 2 - CWR (5Fh) |
50 | 1 | čítač 2 - init hodnota L (5Eh) - ak (CWR & 16) != 0 |
51 | 1 | čítač 2 - init hodnota H (5Eh) - ak (CWR & 32) != 0 |
52 | 1 | USART - CWR (1Fh) |
53 | 1 | USART - Sync1 (1Fh) - ak (CWR & 3) == 0 |
54 | 1 | USART - Sync2 (1Fh) - ak (CWR & 131) == 0 |
55 | 1 | USART - Command (1Fh) |
56 ... | ... | jednotlivé bloky v takom poradí a forme, ako to je nastavené bytami [20] až [29] hlavičky. |
verzia 2
offset | dĺžka | význam |
---|---|---|
0 | 3 | text "PSN" - PMD 85 SNapshot |
3 | 1 | verzia Snapshotu - teraz 2 |
4 | 2 | offset, kde začínajú bloky pamäti - teraz 124 |
6 až 55 | ... | zhodné s verziou 1 4 RAM bloky z verzie 1 predstavujú banky 0 až 3 rozšírenej pamäti 256kB |
56 | 1 | prerušenie od VideoCPU a VGA Konvertor (6Ch) ; 0FFh = prerušenie od VideoCPU nie je zapnute |
57 | 1 | mapovanie rozšírenej pamäti 256kB (6Dh) ; 0FFh = bez rozšírenia pamäte 256kB |
58 | 2 | dĺžka 16kB RAM bloku - banka 4[2] |
60 | 2 | dĺžka 16kB RAM bloku - banka 5[2] |
62 | 2 | dĺžka 16kB RAM bloku - banka 6[2] |
64 | 2 | dĺžka 16kB RAM bloku - banka 7[2] |
66 | 2 | dĺžka 16kB RAM bloku - banka 8[2] |
68 | 2 | dĺžka 16kB RAM bloku - banka 9[2] |
70 | 2 | dĺžka 16kB RAM bloku - banka 10[2] |
72 | 2 | dĺžka 16kB RAM bloku - banka 11[2] |
74 | 2 | dĺžka 16kB RAM bloku - banka 12[2] |
76 | 2 | dĺžka 16kB RAM bloku - banka 13[2] |
78 | 2 | dĺžka 16kB RAM bloku - banka 14[2] |
80 | 2 | dĺžka 16kB RAM bloku - banka 15[2] |
82 | 1 | prerušenie od časovača 0 v MIF 85 (0ECh) ; 0FFh = MIF 85 nie je pripojený |
83 | 32 | registre SAA1099P v MIF 85 |
115 | 1 | IF Musica - čítač 0 - CWR (0FFh) ; 0FFh = IF Musica nie je pripojený |
116 | 1 | IF Musica - čítač 0 - init hodnota L (0FCh) - ak (CWR & 16) != 0 |
117 | 1 | IF Musica - čítač 0 - init hodnota H (0FCh) - ak (CWR & 32) != 0 |
118 | 1 | IF Musica - čítač 1 - CWR (0FFh) |
119 | 1 | IF Musica - čítač 1 - init hodnota L (0FDh) - ak (CWR & 16) != 0 |
120 | 1 | IF Musica - čítač 1 - init hodnota H (0FDh) - ak (CWR & 32) != 0 |
121 | 1 | IF Musica - čítač 2 - CWR (0FFh) |
122 | 1 | IF Musica - čítač 2 - init hodnota L (5Eh) - ak (CWR & 16) != 0 |
123 | 1 | IF Musica - čítač 2 - init hodnota H (5Eh) - ak (CWR & 32) != 0 |
124 ... | ... | jednotlivé bloky v takom poradí a forme, ako to je nastavené bytami [20] až [29] a [58] až [81] hlavičky. |
poznámky:
- ↑ dĺžka ROM Monitora
Keďže dĺžka ROM monitora nemusí byť pre niektoré modely konštantná, a pri rozpakovaní je potrebné poznať cieľovú dĺžku, 15.bit hodnoty označuje, či je blok pakovaný:
- 15.bit = log.0 - ROM Monitor je uložený v komprimovanej forme
- 15.bit = log.1 - ROM Monitor je uložený v čistej forme
Teda nech val = [20], potom:
- ak (val & 0x7FFF) > 16384 - nedovolené hodnoty
- ak val = 0 - ROM Monitor nie je v snapshote prítomný
- ak val < 16384 - pakovaný ROM Monitor
- ak val > 32768 - ROM Monitor v čistej forme
Umiestnenie ROM Monitora je dané modelom počítača. Ak ROM Monitor nie je v snapshote prítomný, použije sa aktuálne zvolená ROM pre daný model počítača. - ↑ 2,00 2,01 2,02 2,03 2,04 2,05 2,06 2,07 2,08 2,09 2,10 2,11 2,12 2,13 2,14 2,15 dĺžka RAM bloku
- 0 - blok nie je v snapshote prítomný
- 1 - celý blok je vyplnený daným bytom
- < 16384 - pakovaný blok
- 16384 - nepakovaný blok "v čistom tvare"
- > 16384 - nedovolené hodnoty
kompresia
Bloky sú pakované jednoduchou RLE kompresiou. Formát kompresovaných dát je nasledovný:
Flag | Data | Flag | Data | Flag | Data | ...
Pričom:
- Flag = 0x00 až 0x7F => 1 byte ako Data pre 3 až 130 rovnakých bytov
- Flag = 0x80 až 0xFF => blok 1 až 128 nepakovateľných bytov ako Data