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_