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:
  • 0. bit : iff - log.1 = povolené prerušenie
  • 1. bit : ei1 - log.1 = bola vykonaná inštr. EI
  • 2. bit : ei2 - log.1 = po nasled. inštrukcii povol prerušenie
  • 3. bit : halt - log.1 = procesor je v stave HALT
  • 4. bit : inta - log.1 = bolo akceptované prerušenie
  • bity 5-7 sú nastavené na log.0 a vyhradené pre budúce využitie
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í
  • 0.bit : port A na vstup
  • 1.bit : port A na výstup
  • 2.bit : port B
  • bity 3-7 : nastavené na log.0 a vyhradené pre budúce využitie
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í
  • 0.bit : port A na vstup
  • 1.bit : port A na výstup
  • 2.bit : port B
  • bity 3-7 : nastavené na log.0 a vyhradené pre budúce využitie
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:

  1. ↑
    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. ↑ 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