1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
|
/**********************************************************************
RCA CDP1864C COS/MOS PAL Compatible Color TV Interface
Copyright MESS Team.
Visit http://mamedev.org for licensing and usage restrictions.
**********************************************************************
________________
INLACE 1 ---| \/ |--- 40 Vdd
CLK IN_ 2 ---| |--- 39 AUD
CLR OUT_ 3 ---| |--- 38 CLR IN_
AOE 4 ---| |--- 37 DMA0_
SC1 5 ---| |--- 36 INT_
SC0 6 ---| |--- 35 TPA
MRD_ 7 ---| |--- 34 TPB
BUS 7 8 ---| |--- 33 EVS
BUS 6 9 ---| |--- 32 V SYNC
BUS 5 10 ---| CDP1864C |--- 31 H SYNC
BUS 4 11 ---| top view |--- 30 C SYNC_
BUS 3 12 ---| |--- 29 RED
BUS 2 13 ---| |--- 28 BLUE
BUS 1 14 ---| |--- 27 GREEN
BUS 0 15 ---| |--- 26 BCK GND_
CON_ 16 ---| |--- 25 BURST
N2 17 ---| |--- 24 ALT
EF_ 18 ---| |--- 23 R DATA
N0 19 ---| |--- 22 G DATA
Vss 20 ---|________________|--- 21 B DATA
http://homepage.mac.com/ruske/cosmacelf/cdp1864.pdf
**********************************************************************/
#ifndef __CDP1864__
#define __CDP1864__
/***************************************************************************
PARAMETERS
***************************************************************************/
#define CDP1864_CLOCK XTAL_1_75MHz
#define CDP1864_VISIBLE_COLUMNS 64
#define CDP1864_VISIBLE_LINES 192
#define CDP1864_HBLANK_END 1 * 8
#define CDP1864_HBLANK_START 13 * 8
#define CDP1864_HSYNC_START 0 * 8
#define CDP1864_HSYNC_END 1 * 8
#define CDP1864_SCREEN_START 4 * 8
#define CDP1864_SCREEN_END 12 * 8
#define CDP1864_SCREEN_WIDTH 14 * 8
#define CDP1864_TOTAL_SCANLINES 312
#define CDP1864_SCANLINE_VBLANK_START CDP1864_TOTAL_SCANLINES - 4
#define CDP1864_SCANLINE_VBLANK_END 20
#define CDP1864_SCANLINE_VSYNC_START 0
#define CDP1864_SCANLINE_VSYNC_END 4
#define CDP1864_SCANLINE_DISPLAY_START 60 // ???
#define CDP1864_SCANLINE_DISPLAY_END CDP1864_SCANLINE_DISPLAY_START + CDP1864_VISIBLE_LINES
#define CDP1864_SCANLINE_INT_START CDP1864_SCANLINE_DISPLAY_START - 2
#define CDP1864_SCANLINE_INT_END CDP1864_SCANLINE_DISPLAY_START
#define CDP1864_SCANLINE_EFX_TOP_START CDP1864_SCANLINE_DISPLAY_START - 4
#define CDP1864_SCANLINE_EFX_TOP_END CDP1864_SCANLINE_DISPLAY_START
#define CDP1864_SCANLINE_EFX_BOTTOM_START CDP1864_SCANLINE_DISPLAY_END - 4
#define CDP1864_SCANLINE_EFX_BOTTOM_END CDP1864_SCANLINE_DISPLAY_END
/***************************************************************************
MACROS / CONSTANTS
***************************************************************************/
#define CDP1864 DEVICE_GET_INFO_NAME(cdp1864)
#define SOUND_CDP1864 CDP1864
#define MDRV_CDP1864_ADD(_tag, _clock, _config) \
MDRV_DEVICE_ADD(_tag, SOUND, _clock) \
MDRV_DEVICE_CONFIG_DATAPTR(sound_config, type, SOUND_CDP1864) \
MDRV_DEVICE_CONFIG(_config)
#define MDRV_CDP1864_SCREEN_ADD(_tag, _clock) \
MDRV_SCREEN_ADD(_tag, RASTER) \
MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16) \
MDRV_SCREEN_RAW_PARAMS(_clock, CDP1864_SCREEN_WIDTH, CDP1864_HBLANK_END, CDP1864_HBLANK_START, CDP1864_TOTAL_SCANLINES, CDP1864_SCANLINE_VBLANK_END, CDP1864_SCANLINE_VBLANK_START)
#define CDP1864_INTERFACE(name) \
const cdp1864_interface (name) =
/***************************************************************************
TYPE DEFINITIONS
***************************************************************************/
enum _cdp1864_format {
CDP1864_NON_INTERLACED = 0,
CDP1864_INTERLACED
};
typedef enum _cdp1864_format cdp1864_format;
typedef struct _cdp1864_interface cdp1864_interface;
struct _cdp1864_interface
{
const char *cpu_tag; /* cpu we are working with */
const char *screen_tag; /* screen we are acting on */
cdp1864_format interlace; /* interlace */
devcb_read_line in_rdata_func;
devcb_read_line in_bdata_func;
devcb_read_line in_gdata_func;
/* this gets called for every change of the INT pin (pin 36) */
devcb_write_line out_int_func;
/* this gets called for every change of the DMAO pin (pin 37) */
devcb_write_line out_dmao_func;
/* this gets called for every change of the EFX pin (pin 18) */
devcb_write_line out_efx_func;
double res_r; /* red output resistor value */
double res_g; /* green output resistor value */
double res_b; /* blue output resistor value */
double res_bkg; /* background output resistor value */
};
/***************************************************************************
PROTOTYPES
***************************************************************************/
/* device interface */
DEVICE_GET_INFO( cdp1864 );
/* display on (0x69) */
READ8_DEVICE_HANDLER( cdp1864_dispon_r ) ATTR_NONNULL(1);
/* display off (0x6c) */
READ8_DEVICE_HANDLER( cdp1864_dispoff_r ) ATTR_NONNULL(1);
/* step background color (0x61) */
WRITE8_DEVICE_HANDLER( cdp1864_step_bgcolor_w ) ATTR_NONNULL(1);
/* color on */
WRITE_LINE_DEVICE_HANDLER( cdp1864_con_w ) ATTR_NONNULL(1);
/* load tone latch (0x64) */
WRITE8_DEVICE_HANDLER( cdp1864_tone_latch_w ) ATTR_NONNULL(1);
/* audio output enable */
WRITE_LINE_DEVICE_HANDLER( cdp1864_aoe_w ) ATTR_NONNULL(1);
/* DMA write */
WRITE8_DEVICE_HANDLER( cdp1864_dma_w ) ATTR_NONNULL(1);
/* screen update */
void cdp1864_update(running_device *device, bitmap_t *bitmap, const rectangle *cliprect) ATTR_NONNULL(1) ATTR_NONNULL(2) ATTR_NONNULL(3);
#endif
|