kopia lustrzana https://github.com/Jean-MarcHarvengt/MCUME
102 wiersze
3.3 KiB
C
102 wiersze
3.3 KiB
C
#ifndef C26DEF_H
|
|
#define C26DEF_H
|
|
|
|
/*
|
|
Common 2600 (.c26) format v1.0 specification
|
|
-------------------------------------
|
|
Alex Hornby, ahornby@zetnet.co.uk
|
|
|
|
|
|
Introduction
|
|
============
|
|
|
|
Common 2600 file format definitions. For discussion and suggestions for
|
|
improvement, e-mail ahornby@zetnet.co.uk. I would like to see a fully
|
|
comprehensive 2600 file format develop so please copy this structure
|
|
and use it in your emulators.
|
|
|
|
The format has been developed due to the multitude of different banking
|
|
schemes for 2600 cartridges, along with the need to select an appropriate
|
|
control device for each game. Using the .c26 format you will be able to
|
|
load games without giving loads of command line switches.
|
|
|
|
Philosophy
|
|
==========
|
|
To avoid the format splitting into several competing ones, please do
|
|
not alter the format without discussing it first. I'm not trying to be
|
|
bossy, just to keep the common format truly common.
|
|
|
|
Tags
|
|
====
|
|
The format is tagged so as to be extensible and allow both forward and
|
|
backward compatibility. It also means that information that is not
|
|
needed or known does not have to be stored. e.g. If the cartridge image
|
|
is not a saved game then I do not need the game state tags.
|
|
|
|
The format is a system of tags each being a tag type and the length of
|
|
data in that section. If a tag is not recognised then it should
|
|
be ignored. Each tag is a zero terminated string followed by a 32bit
|
|
signed integer describing the length. If the tag is small the the length
|
|
integer can constitute the data item.
|
|
|
|
Case is NOT important in tag names
|
|
|
|
Cross Platform Notes
|
|
====================
|
|
Note that integers are stored in the Intel/DEC Alpha style.
|
|
All strings are zero terminated .
|
|
*/
|
|
|
|
/*
|
|
Defined TAGS
|
|
============
|
|
|
|
+ Audit tags: All files should include these tags at the start of the file.
|
|
|
|
VERSION: Gives file format version as an integer. Currently 1
|
|
WRITER: Name of program that wrote file.
|
|
|
|
+ Cartridge Information tags: useful for collectors.
|
|
|
|
CARTNAME: Name of cartridge.
|
|
CARTMAN: Manufacturer of cartridge.
|
|
CARTAUTHOR: Name of programmer/programming team who wrote cartridge.
|
|
CARTSERIAL: Serial number of the cartridge.
|
|
|
|
+ Cartridge operation tags: necessary for the running of the game.
|
|
|
|
TVTYPE: integer, 0=NTSC 1=PAL.
|
|
CONTROLLERS: Left controller BYTE then Right controller BYTE.
|
|
BANKING: Bank switching scheme.
|
|
DATA: Cartridge ROM data.
|
|
|
|
+ Game state tags: used for saved games.
|
|
|
|
CPUREGS: CPU registers.
|
|
GAMEREGS: TIA and PIA registers.
|
|
PIARAM: The 128 bytes of RAM from the PIA.
|
|
|
|
CARTRAM: Cartridge RAM, if supported by the BANKING type
|
|
|
|
*/
|
|
enum TAGTYPE { VERSION=-1, WRITER=1,
|
|
CARTNAME=2, CARTMAN=3, CARTAUTHOR=4, CARTSERIAL=5,
|
|
TVTYPE=-2, CONTROLLERS=-3, BANKING=-4, DATA=6,
|
|
CPUREGS=7, GAMEREGS=8, PIARAM=9, CARTRAM=10 };
|
|
|
|
char *tag_desc[]={ "VERSION", "WRITER",
|
|
"CARTNAME", "CARTMAN", "CARTAUTHOR", "CARTSERIAL",
|
|
"TVTYPE", "CONTROLLERS", "BANKING", "DATA",
|
|
"CPUREGS", "GAMEREGS", "PIARAM", "CARTRAM"};
|
|
|
|
|
|
/* Tag structure */
|
|
|
|
struct c26_tag {
|
|
int type;
|
|
int len;
|
|
};
|
|
|
|
|
|
#endif
|