MCUME/MCUME_teensy/teensyvcs/c26def.h

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