summaryrefslogtreecommitdiffstatshomepage
path: root/trunk/src/emu/sound/cdp1864.h
diff options
context:
space:
mode:
Diffstat (limited to 'trunk/src/emu/sound/cdp1864.h')
-rw-r--r--trunk/src/emu/sound/cdp1864.h217
1 files changed, 217 insertions, 0 deletions
diff --git a/trunk/src/emu/sound/cdp1864.h b/trunk/src/emu/sound/cdp1864.h
new file mode 100644
index 00000000000..6d2193840d7
--- /dev/null
+++ b/trunk/src/emu/sound/cdp1864.h
@@ -0,0 +1,217 @@
+/**********************************************************************
+
+ 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 | CDP1864 | 31 H SYNC
+ BUS 4 11 | | 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
+
+**********************************************************************/
+
+#pragma once
+
+#ifndef __CDP1864__
+#define __CDP1864__
+
+#include "emu.h"
+
+
+
+//**************************************************************************
+// MACROS / CONSTANTS
+//**************************************************************************
+
+#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
+
+
+
+//**************************************************************************
+// INTERFACE CONFIGURATION MACROS
+//**************************************************************************
+
+#define MCFG_CDP1864_ADD(_tag, _clock, _config) \
+ MCFG_SOUND_ADD(_tag, CDP1864, _clock) \
+ MCFG_DEVICE_CONFIG(_config)
+
+
+#define MCFG_CDP1864_SCREEN_ADD(_tag, _clock) \
+ MCFG_SCREEN_ADD(_tag, RASTER) \
+ MCFG_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) =
+
+
+#define CDP1864_NON_INTERLACED \
+ DEVCB_LINE_VCC
+
+
+#define CDP1864_INTERLACED \
+ DEVCB_LINE_GND
+
+
+
+//**************************************************************************
+// TYPE DEFINITIONS
+//**************************************************************************
+
+// ======================> cdp1864_interface
+
+struct cdp1864_interface
+{
+ const char *m_cpu_tag;
+ const char *m_screen_tag;
+
+ devcb_read_line m_in_inlace_cb;
+
+ devcb_read_line m_in_rdata_cb;
+ devcb_read_line m_in_bdata_cb;
+ devcb_read_line m_in_gdata_cb;
+
+ devcb_write_line m_out_int_cb;
+ devcb_write_line m_out_dmao_cb;
+ devcb_write_line m_out_efx_cb;
+ devcb_write_line m_out_hsync_cb;
+
+ double m_res_r; // red output resistor value
+ double m_res_g; // green output resistor value
+ double m_res_b; // blue output resistor value
+ double m_res_bkg; // background output resistor value
+};
+
+
+
+// ======================> cdp1864_device
+
+class cdp1864_device : public device_t,
+ public device_sound_interface,
+ public cdp1864_interface
+{
+public:
+ // construction/destruction
+ cdp1864_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
+
+ DECLARE_READ8_MEMBER( dispon_r );
+ DECLARE_READ8_MEMBER( dispoff_r );
+
+ DECLARE_WRITE8_MEMBER( step_bgcolor_w );
+ DECLARE_WRITE8_MEMBER( tone_latch_w );
+
+ DECLARE_WRITE8_MEMBER( dma_w );
+
+ DECLARE_WRITE_LINE_MEMBER( con_w );
+ DECLARE_WRITE_LINE_MEMBER( aoe_w );
+ DECLARE_WRITE_LINE_MEMBER( evs_w );
+
+ UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
+
+protected:
+ // device-level overrides
+ virtual void device_config_complete();
+ virtual void device_start();
+ virtual void device_reset();
+ virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr);
+
+ // internal callbacks
+ virtual void sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples);
+
+private:
+ inline void initialize_palette();
+
+ static const device_timer_id TIMER_INT = 0;
+ static const device_timer_id TIMER_EFX = 1;
+ static const device_timer_id TIMER_DMA = 2;
+ static const device_timer_id TIMER_HSYNC = 3;
+
+ devcb_resolved_read_line m_in_inlace_func;
+ devcb_resolved_read_line m_in_rdata_func;
+ devcb_resolved_read_line m_in_bdata_func;
+ devcb_resolved_read_line m_in_gdata_func;
+ devcb_resolved_write_line m_out_int_func;
+ devcb_resolved_write_line m_out_dmao_func;
+ devcb_resolved_write_line m_out_efx_func;
+ devcb_resolved_write_line m_out_hsync_func;
+
+ cpu_device *m_cpu;
+ screen_device *m_screen; // screen
+ bitmap_ind16 m_bitmap; // bitmap
+ sound_stream *m_stream; // sound output
+
+ // video state
+ int m_disp; // display on
+ int m_dmaout; // DMA request active
+ int m_bgcolor; // background color
+ int m_con; // color on
+
+ // sound state
+ int m_aoe; // audio on
+ int m_latch; // sound latch
+ INT16 m_signal; // current signal
+ int m_incr; // initial wave state
+
+ // timers
+ emu_timer *m_int_timer;
+ emu_timer *m_efx_timer;
+ emu_timer *m_dma_timer;
+ emu_timer *m_hsync_timer;
+};
+
+
+// device type definition
+extern const device_type CDP1864;
+
+
+
+#endif