PSN

Z PMD 85 Infoserver

(Rozdiel medzi revíziami)
Djb (Diskusia | príspevky)
(begin work)
Djb (Diskusia | príspevky)
(pokračovanie po obede :))
Riadok 3: Riadok 3:
== PSN - formát snapshot súboru PMD 85 Emulátora ==
== 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]] v danom momente, kedy bol snapshot vytvorený. Tento typ súboru vznikol pre [[Emulátor|PMD 85 Emulátore]], keďže sa dovtedy v žiadnom emulátore nič podobné nevyskytlo.
+
PSN súbor reprezentuje "snímku" ''(z angl. snapshot)'' obsahu a stavu počítača [[PMD 85]] v danom momente, kedy bol snapshot vytvorený. Tento typ súboru vznikol pre [[Emulátor|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 o dĺžke 56 bytov obsahuje všetky informácie o momentálnom type a stave počítača, tak ako popisuje nasledujúca tabuľka:
Štruktúra súboru je binárna a úvodná hlavička o dĺžke 56 bytov obsahuje všetky informácie o momentálnom type a stave počítača, tak ako popisuje nasledujúca tabuľka:
Riadok 28: Riadok 28:
| valign="top" | 1
| valign="top" | 1
| model počítača:
| model počítača:
-
* 0 = PMD 85-1
+
* 0 = [[PMD 85#PMD 85-1|PMD 85-1]]
-
* 1 = PMD 85-2
+
* 1 = [[PMD 85#PMD 85-2|PMD 85-2]]
-
* 2 = PMD 85-2A
+
* 2 = [[PMD 85#PMD 85-2A|PMD 85-2A]]
-
* 3 = PMD 85-3
+
* 3 = [[PMD 85#PMD 85-3|PMD 85-3]]
-
* 4 = Maťo
+
* 4 = [[Maťo]]
-
* 5 = Consul C2717
+
* 5 = [[Didaktik Alfa]]
 +
* 6 = [[Didaktik Alfa#Didaktik Alfa 2|Didaktik Alfa 2]]
 +
* 7 = [[Consul 2717]] ''(v starších verziách emulátora mal C2717 číslo 5)''
 +
|-
 +
| valign="top" | 7
 +
| valign="top" | 1
 +
| príznaky prerušenia:
 +
* 0. bit : {{Kbd|iff}} - log.1 = povolené prerušenie
 +
* 1. bit : {{Kbd|ei1}} - log.1 = bola vykonaná inštr. EI
 +
* 2. bit : {{Kbd|ei2}} - log.1 = po nasled. inštrukcii povol prerušenie
 +
* 3. bit : {{Kbd|halt}} - log.1 = procesor je v stave HALT
 +
* 4. bit : {{Kbd|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<ref name="rom">{{Sekcia|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 {{Kbd|val}} = {{Kbd|[20]}}, potom:
 +
* ak {{Kbd|(val & 0x7FFF) > 16384}} - nedovolené hodnoty
 +
* ak {{Kbd|val}} = {{Kbd|0}} - ROM Monitor nie je v snapshote prítomný
 +
* ak {{Kbd|val < 16384}} - pakovaný ROM Monitor
 +
* ak {{Kbd|val > 32768}} - ROM Monitor v čistej forme
 +
<br />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.<br /></ref>
 +
|-
 +
| 22
 +
| 2
 +
| dĺžka 16kB RAM bloku v priestore 0000h až 3FFFh<ref name="ram">{{Sekcia|dĺžka RAM bloku}}
 +
* {{Kbd|0}} - blok nie je v snapshote prítomný
 +
* {{Kbd|1}} - celý blok je vyplnený daným bytom
 +
* {{Kbd|< 16384}} - pakovaný blok
 +
* {{Kbd|16384}} - nepakovaný blok "v čistom tvare"
 +
* {{Kbd|> 16384}} - nedovolené hodnoty
 +
<br /></ref>
 +
|-
 +
| 24
 +
| 2
 +
| dĺžka 16kB RAM bloku v priestore 4000h až 7FFFh<ref name="ram"/>
 +
|-
 +
| 26
 +
| 2
 +
| dĺžka 16kB RAM bloku v priestore 8000h až BFFFh<ref name="ram"/>
 +
|-
 +
| 28
 +
| 2
 +
| dĺžka 16kB RAM bloku v priestore C000h až FFFFh<ref name="ram"/>
 +
|-
 +
| 30
 +
| 1
 +
| system PIO - CWR (F7)
 +
|-
 +
| 31
 +
| 1
 +
| system PIO - zvuk, LED, stránkovanie (F6)
 +
|-
 +
| 32
 +
| 1
 +
| system PIO - klávesnica (F4)
 +
|-
 +
| 33
 +
| 1
 +
| GPIO - CWR (4F)
 +
|-
 +
| 34
 +
| 1
 +
| GPIO - port C (4E)
 +
|-
 +
| 35
 +
| 1
 +
| GPIO - port B (4D)
 +
|-
 +
| 36
 +
| 1
 +
| GPIO - port A (4C)
 +
|-
 +
| 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 (7F)
 +
|-
 +
| 39
 +
| 1
 +
| IMS-2 - port C (7E)
 +
|-
 +
| 40
 +
| 1
 +
| IMS-2 - port B (7D)
 +
|-
 +
| 41
 +
| 1
 +
| IMS-2 - port A (7C)
 +
|-
 +
| 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 (5F)
 +
|-
 +
| 44
 +
| 1
 +
| čítač 0 - init hodnota L (5C) - ak (CWR & 16) != 0
 +
|-
 +
| 45
 +
| 1
 +
| čítač 0 - init hodnota H (5C) - ak (CWR & 32) != 0
 +
|-
 +
| 46
 +
| 1
 +
| čítač 1 - CWR (5F)
 +
|-
 +
| 47
 +
| 1
 +
| čítač 1 - init hodnota L (5D) - ak (CWR & 16) != 0
 +
|-
 +
| 48
 +
| 1
 +
| čítač 1 - init hodnota H (5D) - ak (CWR & 32) != 0
 +
|-
 +
| 49
 +
| 1
 +
| čítač 2 - CWR (5F)
 +
|-
 +
| 50
 +
| 1
 +
| čítač 2 - init hodnota L (5E) - ak (CWR & 16) != 0
 +
|-
 +
| 51
 +
| 1
 +
| čítač 2 - init hodnota H (5E) - ak (CWR & 32) != 0
 +
|-
 +
| 52
 +
| 1
 +
| USART - CWR (1F)
 +
|-
 +
| 53
 +
| 1
 +
| USART - Sync1 (1F) - ak (CWR & 3) == 0
 +
|-
 +
| 54
 +
| 1
 +
| USART - Sync2 (1F) - ak (CWR & 131) == 0
 +
|-
 +
| 55
 +
| 1
 +
| USART - Command (1F)
 +
|-
 +
| 56 ...
 +
| ...
 +
| jednotlivé bloky v takom poradí a forme, ako to je nastavené bajtami [20] až [29] hlavičky.
|}
|}
 +
 +
<references/>
 +
 +
=== 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
 +
 +
[[Kategória:Detaily o PMD 85 a kompatibilných]]

Verzia zo dňa a času 13:42, 2. december 2009


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 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 o dĺžke 56 bytov obsahuje všetky informácie o momentálnom type a stave počítača, tak ako popisuje nasledujúca tabuľka:

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 (F7)
31 1 system PIO - zvuk, LED, stránkovanie (F6)
32 1 system PIO - klávesnica (F4)
33 1 GPIO - CWR (4F)
34 1 GPIO - port C (4E)
35 1 GPIO - port B (4D)
36 1 GPIO - port A (4C)
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 (7F)
39 1 IMS-2 - port C (7E)
40 1 IMS-2 - port B (7D)
41 1 IMS-2 - port A (7C)
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 (5F)
44 1 čítač 0 - init hodnota L (5C) - ak (CWR & 16) != 0
45 1 čítač 0 - init hodnota H (5C) - ak (CWR & 32) != 0
46 1 čítač 1 - CWR (5F)
47 1 čítač 1 - init hodnota L (5D) - ak (CWR & 16) != 0
48 1 čítač 1 - init hodnota H (5D) - ak (CWR & 32) != 0
49 1 čítač 2 - CWR (5F)
50 1 čítač 2 - init hodnota L (5E) - ak (CWR & 16) != 0
51 1 čítač 2 - init hodnota H (5E) - ak (CWR & 32) != 0
52 1 USART - CWR (1F)
53 1 USART - Sync1 (1F) - ak (CWR & 3) == 0
54 1 USART - Sync2 (1F) - ak (CWR & 131) == 0
55 1 USART - Command (1F)
56 ... ... jednotlivé bloky v takom poradí a forme, ako to je nastavené bajtami [20] až [29] hlavičky.
  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,0 2,1 2,2 2,3
    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