summaryrefslogblamecommitdiffstatshomepage
path: root/src/mame/includes/laserbat.h
blob: 1cbb7d8e668cde0de8feeb4a5e277f443eb01de0 (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"

#include "emupal.h"
#include "screen.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_mux_ports(*this, {"ROW0", "ROW1", "SW1", "SW2"})
		, m_row1(*this, "ROW1")
		, m_row2(*this, "ROW2")
		, 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)
	{
	}

	void init_laserbat();

	void laserbat_base(machine_config &config);
	void laserbat_io_map(address_map &map);
	void laserbat_map(address_map &map);

protected:
	enum { TIMER_SCANLINE };

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

	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_t screen_update_laserbat(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);

	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_array<4> m_mux_ports;
	required_ioport m_row1;
	required_ioport m_row2;

	// 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_t const   *m_gfx1;
	uint8_t 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_t         m_bg_ram[0x400];    // background tilemap
	uint8_t         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)
	{
	}

	void laserbat(machine_config &config);

protected:

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

	// video initialisation
	DECLARE_PALETTE_INIT(laserbat);

	// sound control ports
	virtual DECLARE_WRITE8_MEMBER(csound2_w) 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")
	{
	}

	void catnmous(machine_config &config);

protected:

	// video initialisation
	DECLARE_PALETTE_INIT(catnmous);

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

	required_device<zac1b11107_audio_device>    m_audiopcb;
};