summaryrefslogtreecommitdiffstatshomepage
path: root/src/lib/formats/cbm_crt.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/formats/cbm_crt.h')
-rw-r--r--src/lib/formats/cbm_crt.h144
1 files changed, 144 insertions, 0 deletions
diff --git a/src/lib/formats/cbm_crt.h b/src/lib/formats/cbm_crt.h
new file mode 100644
index 00000000000..f099daaf818
--- /dev/null
+++ b/src/lib/formats/cbm_crt.h
@@ -0,0 +1,144 @@
+// license:BSD-3-Clause
+// copyright-holders:Curt Coder
+/*********************************************************************
+
+ cbm_crt.h
+
+ Commodore C64 cartridge images
+
+*********************************************************************/
+
+#pragma once
+
+#ifndef __CBM_CRT__
+#define __CBM_CRT__
+
+#include "emu.h"
+#include "formats/imageutl.h"
+
+
+
+//**************************************************************************
+// MACROS/CONSTANTS
+//**************************************************************************
+
+#define CRT_SIGNATURE "C64 CARTRIDGE "
+
+#define CRT_HEADER_LENGTH 0x40
+#define CRT_CHIP_LENGTH 0x10
+
+#define UNSUPPORTED "standard"
+
+
+// C64 cartridge types
+enum
+{
+ CRT_C64_STANDARD = 0,
+ CRT_C64_ACTION_REPLAY,
+ CRT_C64_KCS_POWER,
+ CRT_C64_FINAL_III,
+ CRT_C64_SIMONS_BASIC,
+ CRT_C64_OCEAN,
+ CRT_C64_EXPERT,
+ CRT_C64_FUNPLAY,
+ CRT_C64_SUPER_GAMES,
+ CRT_C64_ATOMIC_POWER,
+ CRT_C64_EPYX_FASTLOAD,
+ CRT_C64_WESTERMANN,
+ CRT_C64_REX,
+ CRT_C64_FINAL_I,
+ CRT_C64_MAGIC_FORMEL,
+ CRT_C64_GS,
+ CRT_C64_WARPSPEED,
+ CRT_C64_DINAMIC,
+ CRT_C64_ZAXXON,
+ CRT_C64_MAGIC_DESK,
+ CRT_C64_SUPER_SNAPSHOT_V5,
+ CRT_C64_COMAL80,
+ CRT_C64_STRUCTURED_BASIC,
+ CRT_C64_ROSS,
+ CRT_C64_DELA_EP64,
+ CRT_C64_DELA_EP7x8,
+ CRT_C64_DELA_EP256,
+ CRT_C64_REX_EP256,
+ CRT_C64_MIKRO_ASSEMBLER,
+ CRT_C64_FINAL_PLUS,
+ CRT_C64_ACTION_REPLAY4,
+ CRT_C64_STARDOS,
+ CRT_C64_EASYFLASH,
+ CRT_C64_EASYFLASH_XBANK,
+ CRT_C64_CAPTURE,
+ CRT_C64_ACTION_REPLAY3,
+ CRT_C64_RETRO_REPLAY,
+ CRT_C64_MMC64,
+ CRT_C64_MMC_REPLAY,
+ CRT_C64_IDE64,
+ CRT_C64_SUPER_SNAPSHOT,
+ CRT_C64_IEEE488,
+ CRT_C64_GAME_KILLER,
+ CRT_C64_P64,
+ CRT_C64_EXOS,
+ CRT_C64_FREEZE_FRAME,
+ CRT_C64_FREEZE_MACHINE,
+ CRT_C64_SNAPSHOT64,
+ CRT_C64_SUPER_EXPLODE_V5,
+ CRT_C64_MAGIC_VOICE,
+ CRT_C64_ACTION_REPLAY2,
+ CRT_C64_MACH5,
+ CRT_C64_DIASHOW_MAKER,
+ CRT_C64_PAGEFOX,
+ CRT_C64_KINGSOFT,
+ CRT_C64_SILVERROCK,
+ _CRT_C64_COUNT
+};
+
+
+// chip types
+enum
+{
+ CRT_CHIP_TYPE_ROM = 0,
+ CRT_CHIP_TYPE_RAM,
+ CRT_CHIP_TYPE_FLASH_ROM
+};
+
+
+
+//**************************************************************************
+// TYPE DEFINITIONS
+//**************************************************************************
+
+struct cbm_crt_header
+{
+ UINT8 signature[16];
+ UINT8 header_length[4];
+ UINT8 version[2];
+ UINT8 hardware[2];
+ UINT8 exrom;
+ UINT8 game;
+ UINT8 reserved[6];
+ UINT8 name[32];
+};
+
+
+struct cbm_crt_chip
+{
+ UINT8 signature[4];
+ UINT8 packet_length[4];
+ UINT8 chip_type[2];
+ UINT8 bank[2];
+ UINT8 start_address[2];
+ UINT8 image_size[2];
+};
+
+
+
+//**************************************************************************
+// FUNCTION PROTOTYPES
+//**************************************************************************
+
+const char * cbm_crt_get_card(core_file *file);
+bool cbm_crt_read_header(core_file* file, size_t *roml_size, size_t *romh_size, int *exrom, int *game);
+bool cbm_crt_read_data(core_file* file, UINT8 *roml, UINT8 *romh);
+
+
+#endif