summaryrefslogblamecommitdiffstatshomepage
path: root/src/mame/video/jpmimpct.cpp
blob: 8d68a44bd4989ca2fdb8f66952cb1cbefec43298 (plain) (tree)
1
2
3
4
5
6
7
8
9

                                   





                                                                             
                
                                  
                              

 





                                       











                                                  
                                                
 
                                  




                         

                                              



                              
                                                              
                                                      




                                               
                                                                                                               


                                                                 
                                                  




                              
                                              



                              
                                              








                                                                                                      
                                               











                                                                       
                                                           
 
                                                                        

 
                                                               
 
                                                                        








                                       
                                                                  
 

                                                                   




                                                            
                                                         

                                                            









                                       
                                           
 

                                             




                                          
 
// license:BSD-3-Clause
// copyright-holders:Philip Bennett
/***************************************************************************

    JPM IMPACT with Video hardware

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

#include "emu.h"
#include "cpu/tms34010/tms34010.h"
#include "includes/jpmimpct.h"


/*************************************
 *
 *  Brooktree Bt477 RAMDAC
 *
 *************************************/


/*
 *  0 0 0    Address register (RAM write mode)
 *  0 0 1    Color palette RAMs
 *  0 1 0    Pixel read mask register
 *  0 1 1    Address register (RAM read mode)
 *  1 0 0    Address register (overlay write mode)
 *  1 1 1    Address register (overlay read mode)
 *  1 0 1    Overlay register
 *  1 1 0    Command register
 */

WRITE16_MEMBER(jpmimpct_state::jpmimpct_bt477_w)
{
	uint8_t val = data & 0xff;

	switch (offset)
	{
		case 0x0:
		{
			m_bt477.address = val;
			m_bt477.addr_cnt = 0;
			break;
		}
		case 0x1:
		{
			uint8_t *addr_cnt = &m_bt477.addr_cnt;
			rgb_t *color = &m_bt477.color;

			color[*addr_cnt] = val;

			if (++*addr_cnt == 3)
			{
				m_palette->set_pen_color(m_bt477.address, rgb_t(color[0], color[1], color[2]));
				*addr_cnt = 0;

				/* Address register increments */
				m_bt477.address++;
			}
			break;
		}
		case 0x2:
		{
			m_bt477.pixmask = val;
			break;
		}
		case 0x6:
		{
			m_bt477.command = val;
			break;
		}
		default:
		{
			popmessage("Bt477: Unhandled write access (offset:%x, data:%x)", offset, val);
		}
	}
}

READ16_MEMBER(jpmimpct_state::jpmimpct_bt477_r)
{
	popmessage("Bt477: Unhandled read access (offset:%x)", offset);
	return 0;
}


/*************************************
 *
 *  VRAM shift register callbacks
 *
 *************************************/

TMS340X0_TO_SHIFTREG_CB_MEMBER(jpmimpct_state::to_shiftreg)
{
	memcpy(shiftreg, &m_vram[address >> 4], 512 * sizeof(uint16_t));
}

TMS340X0_FROM_SHIFTREG_CB_MEMBER(jpmimpct_state::from_shiftreg)
{
	memcpy(&m_vram[address >> 4], shiftreg, 512 * sizeof(uint16_t));
}


/*************************************
 *
 *  Main video refresh
 *
 *************************************/

TMS340X0_SCANLINE_RGB32_CB_MEMBER(jpmimpct_state::scanline_update)
{
	uint16_t *vram = &m_vram[(params->rowaddr << 8) & 0x3ff00];
	uint32_t *dest = &bitmap.pix32(scanline);
	int coladdr = params->coladdr;
	int x;

	for (x = params->heblnk; x < params->hsblnk; x += 2)
	{
		uint16_t pixels = vram[coladdr++ & 0xff];
		dest[x + 0] = m_palette->pen(pixels & 0xff);
		dest[x + 1] = m_palette->pen(pixels >> 8);
	}
}


/*************************************
 *
 *  Video emulation start
 *
 *************************************/

VIDEO_START_MEMBER(jpmimpct_state,jpmimpct)
{
	memset(&m_bt477, 0, sizeof(m_bt477));

	save_item(NAME(m_bt477.address));
	save_item(NAME(m_bt477.addr_cnt));
	save_item(NAME(m_bt477.pixmask));
	save_item(NAME(m_bt477.command));
	save_item(NAME(m_bt477.color));
}