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