Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
alexbevi
GitHub Repository: alexbevi/BizHawk
Path: blob/master/genplus-gx32/core/cart_hw/svp/ssp16.h
2 views
1
/*
2
basic, incomplete SSP160x (SSP1601?) interpreter
3
with SVP memory controller emu
4
5
(c) Copyright 2008, Grazvydas "notaz" Ignotas
6
Free for non-commercial use.
7
8
For commercial use, separate licencing terms must be obtained.
9
10
Modified for Genesis Plus GX (Eke-Eke): added BIG ENDIAN support, fixed addr/code inversion
11
*/
12
13
#ifndef _SSP16_H_
14
#define _SSP16_H_
15
16
/* emulation event logging (from Picodrive) */
17
#ifdef LOG_SVP
18
#define EL_SVP 0x00004000 /* SVP stuff */
19
#define EL_ANOMALY 0x80000000 /* some unexpected conditions (during emulation) */
20
#define elprintf(w,f,...) error("%d(%d): " f "\n",frame_count,v_counter,##__VA_ARGS__);
21
#endif
22
23
/* register names */
24
enum {
25
SSP_GR0, SSP_X, SSP_Y, SSP_A,
26
SSP_ST, SSP_STACK, SSP_PC, SSP_P,
27
SSP_PM0, SSP_PM1, SSP_PM2, SSP_XST,
28
SSP_PM4, SSP_gr13, SSP_PMC, SSP_AL
29
};
30
31
typedef union
32
{
33
unsigned int v;
34
struct {
35
#ifdef LSB_FIRST
36
unsigned short l;
37
unsigned short h;
38
#else
39
unsigned short h;
40
unsigned short l;
41
#endif
42
} byte;
43
} ssp_reg_t;
44
45
typedef struct
46
{
47
union {
48
unsigned short RAM[256*2]; /* 2 internal RAM banks */
49
struct {
50
unsigned short RAM0[256];
51
unsigned short RAM1[256];
52
} bank;
53
} mem;
54
ssp_reg_t gr[16]; /* general registers */
55
union {
56
unsigned char r[8]; /* BANK pointers */
57
struct {
58
unsigned char r0[4];
59
unsigned char r1[4];
60
} bank;
61
} ptr;
62
unsigned short stack[6];
63
unsigned int pmac[2][6]; /* read/write modes/addrs for PM0-PM5 */
64
#define SSP_PMC_HAVE_ADDR 0x0001 /* address written to PMAC, waiting for mode */
65
#define SSP_PMC_SET 0x0002 /* PMAC is set */
66
#define SSP_HANG 0x1000 /* 68000 hangs SVP */
67
#define SSP_WAIT_PM0 0x2000 /* bit1 in PM0 */
68
#define SSP_WAIT_30FE06 0x4000 /* ssp tight loops on 30FE08 to become non-zero */
69
#define SSP_WAIT_30FE08 0x8000 /* same for 30FE06 */
70
#define SSP_WAIT_MASK 0xf000
71
unsigned int emu_status;
72
unsigned int pad[30];
73
} ssp1601_t;
74
75
76
void ssp1601_reset(ssp1601_t *ssp);
77
void ssp1601_run(int cycles);
78
79
#endif
80
81