summaryrefslogblamecommitdiffstatshomepage
path: root/src/mame/includes/laserbat.h
blob: e3b130a109de4d686c8a479d7350c8b0a37fd2a2 (plain) (tree)
1
2
3
4
5
6
7
8
9
10
                       
                              





                                                                          

                           
                            
                        
                          

                         
                          

                          
 
                                                
 
       
 
                                                                                             






























                                                   



                              


         






                                                 



















                                                                                                              



                                                                                                       






                               




                                              






                                                        

                                    



                                          
 


                                    

                                                          


                                                                                                              

                                                           




                                                                      

                                





                                                                     





                                                                  





                                                 
                                                                                        



                                                         



                           


                                       
                              
                                                          











                                                     






                                                                                           
                                                                                        
                                                         
                                               


         


                                       

                                                          
                                                          
 
          
                                                               
  
// license:BSD-3-Clause
// copyright-holders:Vas Crabb
/*************************************************************************

    Laser Battle / Lazarian - Cat and Mouse

*************************************************************************/

#include "audio/zaccaria.h"

#include "machine/6821pia.h"
#include "machine/pla.h"
#include "machine/s2636.h"

#include "sound/ay8910.h"
#include "sound/sn76477.h"
#include "sound/tms3615.h"


class laserbat_state_base : public driver_device
{
public:

	laserbat_state_base(const machine_config &mconfig, device_type type, const char *tag)
		: driver_device(mconfig, type, tag)
		, m_row0(*this, "ROW0")
		, m_row1(*this, "ROW1")
		, m_row2(*this, "ROW2")
		, m_sw1(*this, "SW1")
		, m_sw2(*this, "SW2")
		, m_maincpu(*this, "maincpu")
		, m_screen(*this, "screen")
		, m_palette(*this, "palette")
		, m_gfxmix(*this, "gfxmix")
		, m_pvi1(*this, "pvi1")
		, m_pvi2(*this, "pvi2")
		, m_pvi3(*this, "pvi3")
		, m_gfxdecode(*this, "gfxdecode")
		, m_scanline_timer(nullptr)
		, m_gfx1(nullptr)
		, m_gfx2(nullptr)
		, m_input_mux(0)
		, m_mpx_p_1_2(false)
		, m_mpx_bkeff(false)
		, m_nave(false)
		, m_clr_lum(0)
		, m_shp(0)
		, m_wcoh(0)
		, m_wcov(0)
		, m_abeff1(false)
		, m_abeff2(false)
		, m_mpx_eff2_sh(false)
		, m_coleff(0)
		, m_neg1(false)
		, m_neg2(false)
		, m_rhsc(0)
		, m_whsc(0)
		, m_csound1(0)
		, m_csound2(0)
	{
	}

	// control ports
	DECLARE_WRITE8_MEMBER(ct_io_w);
	DECLARE_READ8_MEMBER(rrowx_r);

	DECLARE_DRIVER_INIT(laserbat);
	INTERRUPT_GEN_MEMBER(laserbat_interrupt);

	// video memory and control ports
	DECLARE_WRITE8_MEMBER(videoram_w);
	DECLARE_WRITE8_MEMBER(wcoh_w);
	DECLARE_WRITE8_MEMBER(wcov_w);
	DECLARE_WRITE8_MEMBER(cnt_eff_w);
	DECLARE_WRITE8_MEMBER(cnt_nav_w);

	// sound control ports
	virtual DECLARE_READ8_MEMBER(rhsc_r);
	virtual DECLARE_WRITE8_MEMBER(whsc_w);
	virtual DECLARE_WRITE8_MEMBER(csound1_w);
	virtual DECLARE_WRITE8_MEMBER(csound2_w);

	// running the video
	virtual void video_start() override;
	UINT32 screen_update_laserbat(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);

protected:
	enum { TIMER_SCANLINE };

	virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;

	// video functions
	TIMER_CALLBACK_MEMBER(video_line);

	// input lines
	required_ioport m_row0;
	required_ioport m_row1;
	required_ioport m_row2;
	required_ioport m_sw1;
	required_ioport m_sw2;

	// main CPU device
	required_device<cpu_device> m_maincpu;

	// video devices
	required_device<screen_device>      m_screen;
	required_device<palette_device>     m_palette;
	required_device<pla_device>         m_gfxmix;
	required_device<s2636_device>       m_pvi1;
	required_device<s2636_device>       m_pvi2;
	required_device<s2636_device>       m_pvi3;
	required_device<gfxdecode_device>   m_gfxdecode;

	// stuff for rendering video
	emu_timer       *m_scanline_timer;
	bitmap_ind16    m_bitmap;
	UINT8 const     *m_gfx1;
	UINT8 const     *m_gfx2;

	// control lines
	unsigned        m_input_mux;
	bool            m_mpx_p_1_2;

	// RAM used by TTL video hardware, writable by CPU
	UINT8           m_bg_ram[0x400];    // background tilemap
	UINT8           m_eff_ram[0x400];   // per-scanline effects (A8 not wired meaning only half is usable)
	bool            m_mpx_bkeff;        // select between writing background and effects memory

	// signals affecting the TTL-generated 32x32 sprite
	bool            m_nave;             // 1-bit enable
	unsigned        m_clr_lum;          // 3-bit colour/luminance
	unsigned        m_shp;              // 3-bit shape
	unsigned        m_wcoh;             // 8-bit offset horizontal
	unsigned        m_wcov;             // 8-bit offset vertical

	// video effects signals
	bool            m_abeff1;           // 1-bit effect enable
	bool            m_abeff2;           // 1-bit effect enable
	bool            m_mpx_eff2_sh;      // 1-bit effect selection
	unsigned        m_coleff;           // 2-bit colour effect
	bool            m_neg1;             // 1-bit area selection
	bool            m_neg2;             // 1-bit area selection

	// sound board I/O signals
	unsigned        m_rhsc;             // 8-bit input from J7
	unsigned        m_whsc;             // 8-bit output to J7
	unsigned        m_csound1;          // bits 1-8 on J3
	unsigned        m_csound2;          // bits 9-16 on J3
};


class laserbat_state : public laserbat_state_base
{
public:
	laserbat_state(const machine_config &mconfig, device_type type, const char *tag)
		: laserbat_state_base(mconfig, type, tag)
		, m_csg(*this, "csg")
		, m_synth_low(*this, "synth_low")
		, m_synth_high(*this, "synth_high")
		, m_keys(0)
	{
	}

	// video initialisation
	DECLARE_PALETTE_INIT(laserbat);

	// sound control ports
	virtual DECLARE_WRITE8_MEMBER(csound2_w) override;

protected:

	// initialisation/startup
	virtual void machine_start() override;

	// sound board devices
	required_device<sn76477_device> m_csg;
	required_device<tms3615_device> m_synth_low;
	required_device<tms3615_device> m_synth_high;

	// register state
	unsigned    m_keys;     // low octave keys 1-13 and high octave keys 2-12 (24 bits)
};


class catnmous_state : public laserbat_state_base
{
public:
	catnmous_state(const machine_config &mconfig, device_type type, const char *tag)
		: laserbat_state_base(mconfig, type, tag)
		, m_audiopcb(*this, "audiopcb")
	{
	}

	// video initialisation
	DECLARE_PALETTE_INIT(catnmous);

	// sound control ports
	virtual DECLARE_WRITE8_MEMBER(csound1_w) override;
	virtual DECLARE_WRITE8_MEMBER(csound2_w) override;

protected:
	required_device<zac1b11107_audio_device>    m_audiopcb;
};