main genesis.h
 1/*
 2 Copyright 2013 Michael Pavone
 3 This file is part of BlastEm.
 4 BlastEm is free software distributed under the terms of the GNU General Public License version 3 or greater. See COPYING for full license text.
 5*/
 6#ifndef GENESIS_H_
 7#define GENESIS_H_
 8
 9#include <stdint.h>
10#include "system.h"
11#include "m68k_core.h"
12#include "z80_to_x86.h"
13#include "ym2612.h"
14#include "vdp.h"
15#include "psg.h"
16#include "io.h"
17#include "romdb.h"
18#include "arena.h"
19#include "i2c.h"
20
21typedef struct genesis_context genesis_context;
22
23struct genesis_context {
24	system_header   header;
25	m68k_context    *m68k;
26	z80_context     *z80;
27	vdp_context     *vdp;
28	ym2612_context  *ym;
29	psg_context     *psg;
30	uint16_t        *cart;
31	uint16_t        *lock_on;
32	uint16_t        *work_ram;
33	uint8_t         *zram;
34	void            *extra;
35	uint8_t         *save_storage;
36	void            *mapper_temp;
37	eeprom_map      *eeprom_map;
38	uint8_t         *serialize_tmp;
39	size_t          serialize_size;
40	uint32_t        num_eeprom;
41	uint32_t        save_size;
42	uint32_t        save_ram_mask;
43	uint32_t        master_clock; //Current master clock value
44	uint32_t        normal_clock; //Normal master clock (used to restore master clock after turbo mode)
45	uint32_t        frame_end;
46	uint32_t        max_cycles;
47	uint32_t        int_latency_prev1;
48	uint32_t        int_latency_prev2;
49	uint32_t        reset_cycle;
50	uint8_t         bank_regs[8];
51	uint16_t        z80_bank_reg;
52	uint16_t        mapper_start_index;
53	uint8_t         mapper_type;
54	uint8_t         save_type;
55	sega_io         io;
56	uint8_t         version_reg;
57	uint8_t         bus_busy;
58	uint8_t         reset_requested;
59	eeprom_state    eeprom;
60	nor_state       nor;
61};
62
63#define RAM_WORDS 32 * 1024
64#define Z80_RAM_BYTES 8 * 1024
65
66m68k_context * sync_components(m68k_context *context, uint32_t address);
67genesis_context *alloc_config_genesis(void *rom, uint32_t rom_size, void *lock_on, uint32_t lock_on_size, uint32_t system_opts, uint8_t force_region);
68void genesis_serialize(genesis_context *gen, serialize_buffer *buf, uint32_t m68k_pc);
69void genesis_deserialize(deserialize_buffer *buf, genesis_context *gen);
70
71#endif //GENESIS_H_