summaryrefslogblamecommitdiffstatshomepage
path: root/src/mame/video/dpb_brushproc.h
blob: 5b3d56f7d0e6364e7b601179fc4ea4bd3fbc6a93 (plain) (tree)
1
2
3
4
5
6
7
8
9






                                                                            

                







                                                                            
                          

                             















                                                                                                                           
                                  














                                                 







                                                                         
                                   
                                  

                                  



                                          









                                       

                                
                              
                               

                           
                          




                        
 
                            
                              





                                    


                       

                               




                           










                                             



                             

                            


                                
 

                              
 


                                                   




                                                  
                                     





                                                                     
// license:BSD-3-Clause
// copyright-holders:Ryan Holtz
/***************************************************************************

    dpb_brushproc.h
    DPB-7000/1 - Brush Processor Card

    TODO:
    - Everything

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

#ifndef MAME_VIDEO_DPB_BRUSHPROC_H
#define MAME_VIDEO_DPB_BRUSHPROC_H

#pragma once

#include "machine/74381.h"
#include "machine/am25s55x.h"

//**************************************************************************
//  TYPE DEFINITIONS
//**************************************************************************

// ======================> dpb7000_brushproc_card_device

class dpb7000_brushproc_card_device : public device_t
{
public:
	// construction/destruction
	dpb7000_brushproc_card_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);

	void store1_w(uint8_t data);
	void store2_w(uint8_t data);
	void ext_w(uint8_t data);
	void brush_w(uint8_t data);
	void cbus_w(uint8_t data);

	void k_w(uint8_t data);
	void k_en_w(int state);
	void k_zero_w(int state);
	void k_inv_w(int state);

	void func_w(uint8_t data);
	void sel_lum1_w(int state);
	void sel_lum2_w(int state);
	void sel_eh_w(int state);
	void b_bus_ah_w(int state);
	void fixed_col_select_w(int state);

	auto store1() { return m_store1.bind(); }
	auto store2() { return m_store2.bind(); }

protected:
	// device-level overrides
	virtual void device_start() override;
	virtual void device_reset() override;
	virtual void device_add_mconfig(machine_config &config) override;
	virtual const tiny_rom_entry *device_rom_region() const override;

	void update_prom_signals();
	void update_pal_signals();
	void update_k_product();
	void update_ext_product();
	void update_final_product();
	void update_brush_value();
	void update_compare_b_value();
	uint8_t update_brush_alu_result();

	void set_oe1(int state);
	void set_oe2(int state);
	void set_oe3(int state);
	void set_oe4(int state);
	void set_mask_sel_h(int state);
	void set_16bit_h(int state);
	void set_proc_sel_h(int state);
	void set_k_eq_il(int state);

	uint8_t get_compare_b();

	uint8_t m_store_in[2];
	uint8_t m_store_out[2];
	uint8_t m_ext_in;
	uint8_t m_brush_in;
	uint8_t m_cbus_in;

	uint8_t m_k_in;
	bool m_k_enable;
	bool m_k_zero;
	bool m_k_invert;

	uint8_t m_k_product;
	uint8_t m_ext_product;
	uint16_t m_final_product;
	uint16_t m_final_result;

	uint8_t m_brush_value;
	uint8_t m_final_brush_value;
	uint8_t m_compare_b_value;

	uint8_t m_func;

	bool m_subtract_result;

	bool m_sel_luma[2];
	bool m_sel_eh;
	bool m_b_bus_ah;
	bool m_fcs;

	bool m_oe[4];
	bool m_use_store1_for_brush;
	bool m_use_store2_for_brush;
	bool m_use_ext_for_brush;
	bool m_use_store1_or_ext_for_brush;
	bool m_use_store2_for_store1;
	bool m_enable_store_ext_multiplicand;
	bool m_output_16bit;
	bool m_pal_proc_in;
	bool m_disable_k_data;

	uint16_t m_prom_addr;
	uint8_t *m_prom_base;
	uint8_t m_prom_out;

	uint16_t m_pal_in;
	uint8_t *m_pal_base;
	uint16_t m_pal_data_out;
	bool m_pal_bpinv_out;
	bool m_pal_sel_out;

	devcb_write8 m_store1;
	devcb_write8 m_store2;

	required_device<am25s558_device> m_mult_fa;
	required_device<am25s558_device> m_mult_ga;
	required_device<am25s558_device> m_mult_gd;
	required_device<sn74s381_device> m_alu_he;
	required_device<sn74s381_device> m_alu_ge;
	required_device<sn74s381_device> m_alu_fe;
	required_device<sn74s381_device> m_alu_ee;
	required_memory_region m_prom;
	required_memory_region m_pal;
};

// device type definition
DECLARE_DEVICE_TYPE(DPB7000_BRUSHPROC, dpb7000_brushproc_card_device)

#endif // MAME_VIDEO_DPB_BRUSHPROC_H