
*** S20 (Phau Zeh VIC-20 emulator saved-session files)
*** Document revision: 1.2
*** Last updated: March 11, 2004
*** Compiler/Editor: Peter Schepers
*** Contributors/sources: unknown

  This file is created when you save a  session  in  the  Phau  Zeh  VIC-20
emulator (written by Arne Bockholdt). Like all emulator  saved-session,  it
contains all zero-page RAM, CPU registers, RAM and I/O registers. In  order
for the Phau Zeh emulator to recognize its saved-sessions, it must be saved
with the "S20" extension.

  This document is based on the 0.9.5 revision of the S20  layout,  so  the
actual 1.0 release might be different. The minimum S20 file  size  is  9286
bytes (based on an un-enpanded VIC-20)  and  the  largest  is  36934  bytes
(based on a fully-expanded VIC-20).

   Bytes: $0000-000E - S20 signature string "VIC-20 SNAPSHOT"
                000F - S20 revision
                         $01 - version 0.9.5
                          00, 02-FF - Reserved
                0010 - Machine
                         $00 - Original VIC-20
                          01 - Phau Zeh
                          02 - V20
                          03 - Mac VIC-20 emulator
                          04-FF - Future Expansion (set to $00)
                0011 - Miscellaneous Info. If Byte $16 is set  to  1  (Phau
                       Zeh emu), it is sub-version of the emulator.
                         With $16 set to 1:
                         $01 - PZL
                          02 - PZW
                          00, 03-FF - Future expansion (set to $00)
           0012-0013 - Future Expansion (set to $00)
           0014-0015 - Memory areas saved (in HI-LO format). The  bit  will
                       be set if the memory area is saved,  clear  if  not.
                       Each bit of this  word  represents  a  4Kb  area  of
                       memory. The ROM memory locations  should  always  be
                       clear (not saved), and positions 1 and 9 must always
                       be set and saved.
                         Bit: 00 - RAM $0400-0FFF (only 3Kb for this one)
                              01 - RAM $1000-1FFF
                              02 - RAM $2000-2FFF
                              ...
                              15 - RAM $F000-FFFF
           0016-0017 - VIC-20 ROM memory (in HI-LO format). The bit will be
                       set if the ROM area is saved, clear if not. Each bit
                       represents 4Kb of ROM. VIC-20 ROM  memory  locations
                       should be set to 1, and setting  bits  0  and  1  on
                       would make no sense as  ROM  can't  exist  in  those
                       areas.
                         Bit: 00 - ROM $0000-0FFF
                              01 - ROM $1000-1FFF
                              02 - ROM $2000-2FFF
                              ...
                              15 - ROM $F000-FFFF
                0018 - RAM expansion installed
                        $00 - No expansion
                         03 - 3Kb installed
                         08 - 8Kb installed
                         10 - 16Kb installed
                         18 - 24Kb installed
                         All other values invalid (future expansion)
                0019 - Future expansion (set to $00)

           001A-001B - 6502 Instruction Pointer (HI-LO format)
                001C - 6502 Flag register
                        Bit 0 - Carry Flag
                            1 - Zero Flag
                            2 - Interrupt Flag
                            3 - Decimal Flag
                            4 - Break Flag
                            5 - Always set to 1
                            6 - Overflow Flag
                            7 - Sign Flag
                001D - 6502 Stack Pointer
                001E - 6502 A Register
                001F - 6502 X Register
                0020 - 6502 Y Register
                0021 - NMI status
                        Bit 0 - Set if NMI info valid, clear otherwise
                            7 - Clear if NMI low, set if NMI high
                            All other bits unused.

           0022-0023 - VIA1 Timer 1 Value (HI-LO format)
           0024-0025 - VIA1 Timer 1 Latch (HI-LO format)
           0026-0027 - VIA1 Timer 2 Value (HI-LO format)
                0028 - VIA1 Timer 2 Latch
           0029-002A - VIA2 Timer 1 Value (HI-LO format)
           002B-002C - VIA2 Timer 1 Latch (HI-LO format)
           002D-002E - VIA2 Timer 2 Value (HI-LO format)
                002F - VIA2 Timer 2 Latch
                0030 - Set Interrupt Flag Status bits. 0 = don't set  flag,
                       1 = set flag.
                         Bit 0 - VIA1 Timer 1
                             1 - VIA1 Timer 2
                             2 - VIA2 Timer 1
                             3 - VIA2 Timer 2
                             All other bits clear (future expansion)
                0031 - Future Expansion (set to $00)
                0032 - VIA  Port  Register  Status.  Tells  emulator  which
                       registers are saved in the file.
                        $00 - Nothing saved (not recommended)
                         01 - IR ports saved to the following 4 bytes
                         02 - OR ports saved to the following 4 bytes
                         03-FF - Future expansion
                0033 - VIA1 IRA or ORA (depends on the value in $0032)
                0034 - VIA1 IRB or ORB (depends on the value in $0032)
                0035 - VIA2 IRA or ORA (depends on the value in $0032)
                0036 - VIA2 IRB or ORB (depends on the value in $0032)
           0037-003A - Future expansion (set to $00)

                003B - Video Mode
                        $00 - PAL (6561)
                         01 - NTSC (6560)
                         02-FF - Reserved
           003C-003D - Current scanline
                         PAL: 0-311
                        NTSC: 0-260
                003E - Cycles since  last  scanline  change.  This  is  the
                       number of cycles passed since the lasy scanline  was
                       drawn, or the scanline counter was incremented.
                         PAL: 0-70
                        NTSC: 0-64
           003F-0042 - Future expansion (set to $00)

           0043-0442 - Zero Page RAM $0000-03FF (must be in file)

           0443-1042 - RAM locations $0400-0FFF  contents  (optional,  only
                       when $0014-0015 bit 0 is set)
           1043-2042 
       (or)0443-1442 - RAM locations $1000-1FFF (must be in file)
                 ... - (4Kb RAM  blocks  continue,  depending  on  the  bit
                       pattern set in $0014-0015)

         (END-2)-END - Last three bytes set to $FF.

