summaryrefslogblamecommitdiffstatshomepage
path: root/src/devices/video/ppu2c0x_vt.h
blob: f63da1ebdf10b8ef22257697f02bafea07627d21 (plain) (tree)
1
2
3
4
5
6
7
8




                                                                               


                                                                            


                                                                               




                             

                          


                         
                           

  

                                               

                                                                                                                           
 

                                                   
 
                                                                          
                                                                                                                     
 


                                                         

                                                                         
 


                                                   


                                                                           


                                                                                                          


                                                                                     
                                                                                                                                 
                                                                       








                                                 
                                    
 






                                                



                                           



                              



                                 
                                    
 
                                  
 
                                            
 
                                                 
 
                                        

  




                                                                                                            
                                                 
                                                       

                               
// license:BSD-3-Clause
// copyright-holders:David Haywood
/******************************************************************************

    VT video emulation

    The VT video is based on the ppu2c0x but with enhanced capabilities such
    as 16 colour sprites.

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

#ifndef MAME_VIDEO_PPU_VT03_H
#define MAME_VIDEO_PPU_VT03_H

#pragma once

#include "video/ppu2c0x.h"

enum vtxx_pal_mode {
	PAL_MODE_VT0x,
	PAL_MODE_NEW_RGB,
	PAL_MODE_NEW_RGB12,
};

class ppu_vt03_device : public ppu2c0x_device {
public:
	ppu_vt03_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
	ppu_vt03_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);

	auto read_bg() { return m_read_bg.bind(); }
	auto read_sp() { return m_read_sp.bind(); }

	void set_palette_mode(vtxx_pal_mode pmode) { m_pal_mode = pmode; }
	void set_201x_descramble(uint8_t reg0, uint8_t reg1, uint8_t reg2, uint8_t reg3, uint8_t reg4, uint8_t reg5);

	uint8_t read_extended(offs_t offset);
	void write_extended(offs_t offset, uint8_t data);

	virtual uint8_t palette_read(offs_t offset) override;
	virtual void palette_write(offs_t offset, uint8_t data) override;

	void init_vt03_palette_tables(int palmode);
	void init_vtxx_rgb555_palette_tables();
	void init_vtxx_rgb444_palette_tables();

	virtual void read_tile_plane_data(int address, int color) override;
	virtual void shift_tile_plane_data(uint8_t &pix) override;
	virtual void draw_tile_pixel(uint8_t pix, int color, uint32_t back_pen, uint32_t *&dest) override;
	inline void draw_tile_pixel_inner(uint8_t pen, uint32_t *dest);
	virtual void draw_back_pen(uint32_t* dst, int back_pen) override;

	virtual void read_sprite_plane_data(int address) override;
	virtual void make_sprite_pixel_data(uint8_t &pixel_data, int flipx) override;
	virtual void draw_sprite_pixel(int sprite_xpos, int color, int pixel, uint8_t pixel_data, bitmap_rgb32 &bitmap) override;
	virtual void read_extra_sprite_bits(int sprite_index) override;

	virtual void device_start() override;
	virtual void device_reset() override;

	void set_201x_reg(int reg, uint8_t data);
	uint8_t get_201x_reg(int reg);

	uint8_t get_va34();
	uint8_t get_m_read_bg4_bg3();
	uint8_t get_speva2_speva0();

	bool get_is_pal() { return m_is_pal; }
	bool get_is_50hz() { return m_is_50hz; }

protected:
	bool m_is_pal;
	bool m_is_50hz;

	uint32_t m_vtpens[0x1000*8];
	uint32_t m_vtpens_rgb555[0x8000*8];
	uint32_t m_vtpens_rgb444[0x1000*8];

private:
	devcb_read8 m_read_bg;
	devcb_read8 m_read_sp;

	int m_read_bg4_bg3;
	int m_va34;

	uint8_t m_extplanebuf[2];
	uint8_t m_extra_sprite_bits;

	uint8_t m_201x_regs[0x20];

	uint8_t m_2012_2017_descramble[0x6];

	vtxx_pal_mode m_pal_mode = PAL_MODE_VT0x;

	void set_2010_reg(uint8_t data);
};

class ppu_vt03pal_device : public ppu_vt03_device {
public:
	ppu_vt03pal_device(const machine_config& mconfig, const char* tag, device_t* owner, uint32_t clock);
};

DECLARE_DEVICE_TYPE(PPU_VT03,    ppu_vt03_device)
DECLARE_DEVICE_TYPE(PPU_VT03PAL,    ppu_vt03pal_device)

#endif // MAME_VIDEO_PPU_VT03_H