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 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:
|
| 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í
|
| 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í
|
| 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é bytami [20] až [29] 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,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