Changes

Jump to: navigation, search

Snapshot

2,985 bytes added, 7 January
/* SYMB */
The following chunks are currently defined:
 
== CPC+ ==
 
This chunk is supported by Arnold, WinAPE, No$CPC and ACE. Arnold, WinAPE and ACE will save the block when Plus configuration enabled. No$CPC will save the block if the Plus features have been unlocked.
 
When creating a snapshot with several chunks, it is usually a good idea to place the CPC+ one in first position, because some (old) tools and emulators are relying on this and will fail if it is not the case.
 
{|
|-
| ''Offset (Hex)''
| ''Length''
| ''Addr in ASIC register-ram''
| ''Description''
|-
| 000-7FF
| 800
| 4000-4FFF
| Sprite Bitmaps (note 1)
|-
| 800-87F
| 8*16
| 6000-607F
| Sprite Attributes (see below) (note 2)
|-
| 880-8BF
| 32*2
| 6400-643F
| Palettes (note 3)
|-
| 8C0
| 1
| 6800
| Programmable Raster Interrupt (note 4)
|-
| 8C1
| 1
| 6801
| Screen split scan-line (note 4)
|-
| 8C2
| 2
| 6802-6803
| Screen split secondary screen-address (note 4)
|-
| 8C4
| 1
| 6804
| Soft scroll control register (note 4)
|-
| 8C5
| 1
| 6805
| Interrupt vector (note 4)
|-
| 8C6
| 1
| Internal
| gate array A0 register value (note 8a)
|-
| 8C6-8C7
| 1
| -
| unused (0)
|-
| 8C8-8CF
| 8
| 6808-680f
| Analogue input channels 0-7 (note 5)
|-
| 8D0-8DB
| 3*4
| 6C00-6C0B
| Sound DMA channel attributes 0-2 (see below) (note 6)
|-
| 8DC-8DE
| 3
| -
| unused (0)
|-
| 8DF
| 1
| 6C0F
| DMA Control/Status (note 4)
|-
| 8E0-8F4
| 3*7
| Internal
| DMA channel 0-2 internal registers (see below) (note 7)
|-
| 8F5
| 1
| Internal
| gate array A0 register value (note 8b)
|-
| 8F6
| 1
| Internal
| gate array A0 lock: 0 -> locked, !=0 -> unlocked (note 9)
|-
| 8F7
| 1
| Internal
| ASIC unlock sequence state (note 10)
|}
 
=== Notes ===
 
1. The sprite data is packed, with two sprite pixels per byte. Bits 7..4 define the first pixel and bits 3..0 define the second pixel.
 
2. The attributes for each sprite take 8 bytes. Each attribute block has the following format:
 
{|
|-
| ''Offset (Hex)''
| ''Length''
| ''Description''
|-
| 0
| 2
| Sprite X (see note)
|-
| 2
| 2
| Sprite Y (see note)
|-
| 4
| 1
| Sprite Magnification (see note)
|-
| 5-7
| 3
| unused (0)
|}
 
Note: the Sprite X, Y and magnification are in the same order as the ASIC registers
 
3. This is a direct copy of the palette in CPC+ ASIC Ram. There are 32 colours each with 2-bytes per colour.
 
4. These bytes in the snapshot represent the last value written to these ASIC registers.
 
5. These bytes represent the inputs to the analogue channels.
 
6. The attributes for each DMA channel take 4 bytes. Each attribute block has the following format:
 
{|
|-
| ''Offset (Hex)''
| ''Length''
| ''Description''
|-
| 0
| 2
| DMA Channel address (see note)
|-
| 2
| 1
| DMA Channel prescalar (see note)
|-
| 3
| 1
| unused (0)
|}
 
Note: the DMA address and prescalar are in the same order as the ASIC registers.
 
7 These registers are internal to the CPC+ and define the current DMA operation:
 
{|
|-
| ''Offset (Hex)''
| ''Length''
| ''Description''
|-
| 0
| 2
| loop counter (note a)
|-
| 2
| 2
| loop address (note b)
|-
| 4
| 2
| pause count (note c)
|-
| 6
| 1
| pause prescalar count (note d)
|}
 
a. This value represents the number of loops remaining. 0 = none. This count is between 0..0FFF. This counter counts down.
 
b. This is the Amstrad memory address to loop back to. It is a pointer to the DMA instruction after the last REPEAT instruction.
 
c. This value represents the pause count and the count is between 0...0FFF. (TO BE CHECKED: down counter? what exactly does it represent)
 
d. This value represents the pause prescalar count and the count is between 0..FF. (TO BE CHECKED: down counter? what exactly does it represent)
 
8. This value represents the last value written to this I/O port. Winape uses 8a and not 8b. This value has bits 7,6,5 set to 1,0 and 1 respectively. 8b is in the original specification and is written by both ACE and No$CPC.
 
9. This value represents the lock status of RMR2. If locked, RMR2 can't be accessed otherwise it can.
 
10. This value represents the current unlock sequence state.
 
{|
|-
| ''State ID''
| ''Synchronised State''
| ''Note''
|-
| 0
| Not synchronised
| ASIC is waiting for first non-zero byte to be written, this is the first synchronisation byte required
|-
| 1
| Not synchronised
| ASIC is waiting for zero byte to be written, this is the second synchronisation byte required
|-
| 2..10
| synchronised
| ASIC is waiting for byte from unlock sequence. e.g. if "2", ASIC is waiting for &FF, the first byte of the unlock sequence. if "3" ASIC is waiting for &77, the second byte of the unlock sequence.
|}
== DSCA,DSCB ==
DSCB is similar to DSCA but stores the filename of the disc image inserted into drive B.
== TAPE (ACE) ==
This chunk is supported by ACE; it is saved only when the related option is enabled.
The TAPE block contains the filename of the tape image inserted. The filename is stored as 8-bit ASCII (any Unicode characters with codes 0x100 or above will be translated to ? and therefore filenames with these characters can't be stored in Snapshots). The length of the block is the length of the filename in bytes.
NOTE: The selected Multiface ROM is not saved in the snapshot.
== INFO Chunk (No$CPC) ==
This chunk is written by No$CPC. It contains an 8-bit ASCII string with the version information for No$CPC.
== MEM0-8 Chunk ==
The MEM0-8 chunks contain at most 64KB of data. The data may be compressed or stored uncompressed. If the size is exactly 65536 bytes the data is uncompressed, otherwise it is compressed. Up to 512KB additional RAM can be stored in a snapshot.
6. ACE can save additional memory in snapshots (up to 4MB) using the MX?? chunks.
== MX09-40 Chunk (ACE) == This chunk is supported by ACE.
MX?? chunks allow snapshots to store up to 4160KB ram.
Information are stored compressed like in MEM0-8 chunks.
== BRKC Chunk (ACE) ==
This chunk is written by ACE when some breakpoints are set. When loading a snapshot, the breakpoints found in this chunk are added to the one already installed.
The number of stored breakpoints in the chunk is given by the chunk size divided by 216 (the size on of one breakpoint data structure).
{|
* 6: ASIC I/O Page. Map bank and page are ignored (always 0).
== SYMB Chunk (ACE) ==
This chunk is written by ACE when some symbols are declared. When loading a snapshot, the symbols found in this chunk are added to the alreading existing ones.
===Notes===
1. Symbol are (obviously) limited to 255 characters, cannot begin with a number (0-9), and only a limited set of ASCII char is allowed (a-z, A-Z, 0-9, _, .). 
2. The map type determines the memory layout for which the symbol is valid. The meaning of the values for map bank and map page depends on the map type value.
Possible values fir map type are:
* 6: ASIC I/O Page. Map bank and page are ignored (always 0).
== CPC+ Chunk BRKS ==
This chunk is supported written by Arnold, Winape, No$CPC and ACEWinAPE when some breakpoints are set. Arnold, Winape and ACE will save the block when Plus configuration enabled. No$CPC will save the block if the Plus features have been unlockedcan import breakpoints from this chunk but won't create it (BRKC is used instead).
{||-| ''Offset (Hex)''| ''Length''| ''Addr in ASIC register-ram''| ''Description''|-| 000-7FF| 800| 4000-4FFF| Sprite Bitmaps (note The chunk contains 1)|-| 800-87F| 8*16| 6000-607F| Sprite Attributes (see below) (note 2)|-| 880-8BF| 32*2| 6400-643F| Palettes (note 3)|-| 8C0| 1| 6800| Programmable Raster Interrupt (note 4)|-| 8C1| 1| 6801| Screen split scan-line (note 4)|-| 8C2| 2| 6802-6803| Screen split secondary screen-address (note 4)|-| 8C4| 1| 6804| Soft scroll control register (note 4)|-| 8C5| 1| 6805| Interrupt vector (note 4)|-| 8C6| 1| Internal| gate array A0 register value (note 8a) |-| 8C6-8C7| 1| -| unused (0)|-| 8C8-8CF| 8| 6808-680f| Analogue input channels 0-7 (note 5)|-| 8D0-8DB| 3*4| 6C00-6C0B| Sound DMA channel attributes 0-2 (see below) (note 6)|-| 8DC-8DE| 3| -| unused (0)|-| 8DF| 1| 6C0F| DMA Control/Status (note 4)|-| 8E0-8F4| 3*7| Internal| DMA channel 0-2 internal registers (see below) (note 7)|-| 8F5| 1| Internal| gate array A0 register value (note 8b)|-| 8F6| 1| Internal| gate array A0 lock: 0 -> locked, !=0 -> unlocked (note 9)|-| 8F7| 1| Internal| ASIC unlock sequence state (note 10)|}or more breakpoints.
=== Notes ===Each breakpoint has the form: * 2 bytes: address (LSB first) * 1 byte: location (0: base 64K RAM, 1: extended RAM) * 2 bytes: condition (?)
1. The sprite data is packed, with two sprite pixels per byte. Bits 7..4 define the first pixel and bits 3..0 define the second pixel. == WABP ==
2This chunk is written by WinAPE when some breakpoints are set. The attributes for each sprite take 8 bytesexact details are begin worked out. Each attribute block has the following format:
{||-| ''Offset (Hex)''| ''Length''| ''Description''|-| 0| 2| Sprite X (see note)|-| 2| 2| Sprite Y (see note)|-| 4| 1| Sprite Magnification (see note)|-| 5-7| 3| unused (0)|}It seems to be:
Note: the Sprite X, Y and magnification are in the same order as the ASIC registers 4 bytes - number of user breakpoints
3. This is a direct copy of the palette in CPC+ ASIC Ram. There are 32 colours each with 2-bytes per colour. Each user breakpoint:
type,4. These bytes in the snapshot represent the last value written to these ASIC registers. byte address
5. These Then, 4 bytes represent the inputs to the analogue channels. - number of memory breakpoints
6. The attributes for each DMA channel take 4 bytes. Each attribute block has the following formatmemory breakpoint:
{||Then, 4 bytes -| ''Offset (Hex)''| ''Length''| ''Description''|-| 0| 2| DMA Channel address (see note)|-| 2| 1| DMA Channel prescalar (see note)|-| 3| 1| unused (0)|}number of i/o breakpoints:
NoteEach i/o breakpoint: the DMA address and prescalar are in the same order as the ASIC registers.
7 These registers 2 bytes flags? (6000 read, a400 write) 2 bytes port addr mask 2 bytes port addr 4 bytes counter 4 bytes condition string length, followed by condition string (not null terminated) == DARS == This chunk is written by WinAPE when some data areas are internal to set.  The number of stored data areas in the CPC+ and define chunk is given by the current DMA operation: chunk size divided by 10 (the size of one data area data structure).
{|
| ''Description''
|-
| 000| 24| loop counter Address (note aLSB first)|-| 2| 2| loop address (note b1)
|-
| 04
| 4
| 2| pause count Area size (note cLSB first)
|-
| 608
| 1
| pause prescalar count Data type (note d0=byte,1=word)|-| 09| 1| Labels (1=marked by user as having labels)|-
|}
a. This value represents the number of loops remaining. 0 = none. This count is between 0..0FFF. This counter counts down. == Notes ===
b1. This Winape's addressing scheme is the Amstrad memory address to loop back to4 bytes. It is a pointer to the DMA instruction after The upper 16-bits effectively define the last REPEAT instructioninternal 64KB pages it uses.
c. This value represents the pause count and the count is between 0...0FFF. (TO BE CHECKED: down counter? what exactly does it represent) == REMU ==
d. This value represents the pause prescalar count and the count chunk is between 0written RASM and contains information about symbols and breakpoints..FF. (TO BE CHECKED: down counter? what exactly does ACE will import informations from this chunk but won't write it represent(SYMB and BRKC are used instead) .
8. This value represents the last value written to this I/O port. Winape uses 8a and not 8b. This value has bits 7,6,5 set to 1,0 and 1 respectively. 8b is in the original specification and is written by both ACE and No$CPC.== RM00-FF ==
9. This value represents the lock status of RMR2. If locked, RMR2 can't be accessed otherwise chunk was introduced by RASM and is supported by ACE; it canis saved only when the related option is enabled.
10The RM00-FF chunks contain at most 16KB of data representing the contents of the related external upper ROMs number. This value represents The data may be compressed or stored uncompressed. If the current unlock sequence statesize is exactly 16384 bytes the data is uncompressed, otherwise it is compressed. Up to 2MB of external upper ROMs can be stored in a snapshot.
{||-| ''State ID''| ''Synchronised State''| ''Note''|-| 0| Not synchronised| ASIC The compression scheme is waiting for first non-zero byte identical to be written, this is the first synchronisation byte required|one from MEM0-| 1| Not synchronised| ASIC is waiting for zero byte to be written, this is the second synchronisation byte required|-| 2..10| synchronised| ASIC is waiting for byte from unlock sequence. e.g. if "2", ASIC is waiting for &FF, the first byte of the unlock sequence. if "3" ASIC is waiting for &77, the second byte of the unlock sequence7 chunks.|}
== WABP Chunk (Winape) LOWR ==
This chunk was introduced by RASM and is written supported by Winape ACE; it is saved only when some breakpoints are set. The exact details are begin worked outthe related option is enabled.
It seems is similar to be:the RM00-FF chunks but stored the internal firmware ROM contents.
4 bytes - number of user breakpoints== BASR ==
Each user breakpoint:This chunk is supported by ACE; it is saved only when the related option is enabled.
type,4 byte addressIt is similar to the RM00-FF chunks but stored the internal Basic ROM contents.
Then, 4 bytes - number of memory breakpoints== DOSR ==
Each memory breakpoint:This chunk is supported by ACE; it is saved only when the related option is enabled.
Then, 4 bytes It is similar to the RM00- number of i/o breakpoints:FF chunks but stored the internal AMSDOS ROM contents.
Each i/o breakpoint:== CART ==
2 bytes flags? (6000 read, a400 write) 2 bytes port addr mask 2 bytes port addr 4 bytes counter 4 bytes condition string length, followed This chunk is supported by condition string (not null terminated)ACE; it is saved only when the related option is enabled.
== DARS Chunk (Winape) == This chunk is written by Winape when some data areas are set.  The number It stores the contents of stored data areas in the chunk is given by the chunk size divided by 10 (the size of one data area data structure)inserted cartridge ROM. Extended cartridges are also supported.
{|
|-
| 00
| 41| Address Type of compression (LSB first) (note 10: uncompressed, &5E: RLE compressed)
|-
| 0401
| 4
| Area Physical size of the cartridge in bytes, must be 16, 32, 64, 128, 256 or 512KB (LSB MSB first)
|-
| 0805| 12| Data type Number of cartridges, 1: for normal cartridges, extended cartridges otherwise (MSB first)|-| 07| 2| Flags, bit 0=byteset if the external upper ROMs must be disabled,1=wordother bits set to 0 (MSB first)
|-
| 09
| 1x| Labels Cartridge data contents (1=marked by user as having labelseither compressed or not depending on type of compression)
|-
|}
===Notes=PLUG ==
1. Winape's addressing scheme This chunk is 4 bytessupported by ACE; it is saved only when the related option is enabled.  This chunk stores the names of the plugins which should be enabled for the snapshot. All names are stored one after the other, in the form of binary strings (first byte containing the plugin name length followed by the the actual string).The upper 16-bits effectively define names stored are the internal 64KB pages it usesactual names of the plugins libraries (e.g. "multiface2.acepansion").
=Links=
[[Snapshot Archive]]
[[Category:Programming]]
194
edits