Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
alexbevi
GitHub Repository: alexbevi/BizHawk
Path: blob/master/genplus-gx/core/cd_hw/scd.h
2 views
1
/***************************************************************************************
2
* Genesis Plus
3
* Mega CD / Sega CD hardware
4
*
5
* Copyright (C) 2012-2013 Eke-Eke (Genesis Plus GX)
6
*
7
* Redistribution and use of this code or any derivative works are permitted
8
* provided that the following conditions are met:
9
*
10
* - Redistributions may not be sold, nor may they be used in a commercial
11
* product or activity.
12
*
13
* - Redistributions that are modified from the original source must include the
14
* complete source code, including the source code for all components used by a
15
* binary built from the modified sources. However, as a special exception, the
16
* source code distributed need not include anything that is normally distributed
17
* (in either source or binary form) with the major components (compiler, kernel,
18
* and so on) of the operating system on which the executable runs, unless that
19
* component itself accompanies the executable.
20
*
21
* - Redistributions must reproduce the above copyright notice, this list of
22
* conditions and the following disclaimer in the documentation and/or other
23
* materials provided with the distribution.
24
*
25
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
26
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
27
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
28
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
29
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
30
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
31
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
32
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
33
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
34
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
35
* POSSIBILITY OF SUCH DAMAGE.
36
*
37
****************************************************************************************/
38
#ifndef _HW_SCD_
39
#define _HW_SCD_
40
41
#include "cdd.h"
42
#include "cdc.h"
43
#include "gfx.h"
44
#include "pcm.h"
45
#include "cd_cart.h"
46
47
#define scd ext.cd_hw
48
49
/* 5000000 SCD clocks/s = ~3184 clocks/line with a Master Clock of 53.693175 MHz */
50
/* This would be slightly (~30 clocks) more on PAL systems because of the slower */
51
/* Master Clock (53.203424 MHz) but not enough to really care about since clocks */
52
/* are not running in sync anyway. */
53
#define SCD_CLOCK 50000000
54
#define SCYCLES_PER_LINE 3184
55
56
/* Timer & Stopwatch clocks divider */
57
#define TIMERS_SCYCLES_RATIO (384 * 4)
58
59
/* CD hardware */
60
typedef struct
61
{
62
cd_cart_t cartridge; /* ROM/RAM Cartridge */
63
uint8 bootrom[0x20000]; /* 128K internal BOOT ROM */
64
uint8 prg_ram[0x80000]; /* 512K PRG-RAM */
65
uint8 word_ram[2][0x20000]; /* 2 x 128K Word RAM (1M mode) */
66
uint8 word_ram_2M[0x40000]; /* 256K Word RAM (2M mode) */
67
uint8 bram[0x2000]; /* 8K Backup RAM */
68
reg16_t regs[0x100]; /* 256 x 16-bit ASIC registers */
69
uint32 cycles; /* Master clock counter */
70
int32 stopwatch; /* Stopwatch counter */
71
int32 timer; /* Timer counter */
72
uint8 pending; /* Pending interrupts */
73
uint8 dmna; /* Pending DMNA write status */
74
gfx_t gfx_hw; /* Graphics processor */
75
cdc_t cdc_hw; /* CD data controller */
76
cdd_t cdd_hw; /* CD drive processor */
77
pcm_t pcm_hw; /* PCM chip */
78
} cd_hw_t;
79
80
/* Function prototypes */
81
extern void scd_init(void);
82
extern void scd_reset(int hard);
83
extern void scd_update(unsigned int cycles);
84
extern void scd_end_frame(unsigned int cycles);
85
extern int scd_context_load(uint8 *state);
86
extern int scd_context_save(uint8 *state);
87
extern int scd_68k_irq_ack(int level);
88
extern void prg_ram_dma_w(unsigned int words);
89
90
#endif
91
92