blob: 8d68a44bd4989ca2fdb8f66952cb1cbefec43298 (
plain) (
tree)
|
|
// 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));
}
|