Fixed regression with csplayh5.c

This commit is contained in:
Angelo Salese 2013-11-25 22:13:53 +00:00
parent 6265fb0c81
commit 66cad55fda
4 changed files with 65 additions and 25 deletions

View File

@ -13,8 +13,15 @@
const device_type TMP68301 = &device_creator<tmp68301_device>;
static ADDRESS_MAP_START( tmp68301_regs, AS_0, 16, tmp68301_device )
// AM_RANGE(0x000,0x3ff) AM_RAM
ADDRESS_MAP_END
tmp68301_device::tmp68301_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
: device_t(mconfig, TMP68301, "TMP68301", tag, owner, clock, "tmp68301", __FILE__)
: device_t(mconfig, TMP68301, "TMP68301", tag, owner, clock, "tmp68301", __FILE__),
device_memory_interface(mconfig, *this),
m_space_config("regs", ENDIANNESS_LITTLE, 16, 10, 0, NULL, *ADDRESS_MAP_NAME(tmp68301_regs))
{
}
@ -53,6 +60,37 @@ void tmp68301_device::device_reset()
machine().firstcpu->set_irq_acknowledge_callback(device_irq_acknowledge_delegate(FUNC(tmp68301_device::irq_callback),this));
}
//-------------------------------------------------
// memory_space_config - return a description of
// any address spaces owned by this device
//-------------------------------------------------
const address_space_config *tmp68301_device::memory_space_config(address_spacenum spacenum) const
{
return (spacenum == AS_0) ? &m_space_config : NULL;
}
//**************************************************************************
// INLINE HELPERS
//**************************************************************************
//-------------------------------------------------
// read_byte - read a byte at the given address
//-------------------------------------------------
inline UINT16 tmp68301_device::read_word(offs_t address)
{
return space(AS_0).read_word(address << 1);
}
//-------------------------------------------------
// write_byte - write a byte at the given address
//-------------------------------------------------
inline void tmp68301_device::write_word(offs_t address, UINT16 data)
{
space(AS_0).write_word(address << 1, data);
}
IRQ_CALLBACK_MEMBER(tmp68301_device::irq_callback)
{
@ -181,6 +219,8 @@ WRITE16_MEMBER( tmp68301_device::regs_w )
{
COMBINE_DATA(&m_regs[offset]);
write_word(offset,m_regs[offset]);
if (!ACCESSING_BITS_0_7) return;
// logerror("CPU #0 PC %06X: TMP68301 Reg %04X<-%04X & %04X\n",space.device().safe_pc(),offset*2,data,mem_mask^0xffff);

View File

@ -1,7 +1,8 @@
#ifndef TMP68301_H
#define TMP68301_H
class tmp68301_device : public device_t
class tmp68301_device : public device_t,
public device_memory_interface
{
public:
tmp68301_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
@ -21,6 +22,7 @@ protected:
virtual void device_config_complete();
virtual void device_start();
virtual void device_reset();
virtual const address_space_config *memory_space_config(address_spacenum spacenum = AS_0) const;
private:
// internal state
@ -29,12 +31,16 @@ private:
UINT8 m_IE[3]; // 3 External Interrupt Lines
emu_timer *m_tmp68301_timer[3]; // 3 Timers
int m_irq_vector[8];
UINT16 m_irq_vector[8];
TIMER_CALLBACK_MEMBER( timer_callback );
void update_timer( int i );
IRQ_CALLBACK_MEMBER(irq_callback);
void update_irq_state();
inline UINT16 read_word(offs_t address);
inline void write_word(offs_t address, UINT16 data);
const address_space_config m_space_config;
};
extern const device_type TMP68301;

View File

@ -217,7 +217,7 @@ Palette functions
/*
About the colour burst registers:
The color burst registers will only have effect on the composite video outputfrom
The color burst registers will only have effect on the composite video output from
the V9938. but the output is only NTSC (Never The Same Color ,so the
effects are already present) . this system is not used in europe
the european machines use a separate PAL (Phase Alternating Line) encoder
@ -1470,14 +1470,6 @@ void v99x8_device::mode_graphic7(const pen_t *pens, _PixelType *ln, int line)
int colour[4];
int ind;
/*
pixel0 = (*data) & 8 ? pal_ind16[(*data) >> 4] : s_pal_indYJK[ind | (*data >> 3) & 30];
pixel1 = *(data+1) & 8 ? pal_ind16[*(data+1) >> 4] : s_pal_indYJK[ind | *(data+1) >> 3) & 30];
pixel2 = *(data+2) & 8 ? pal_ind16[*(data+2) >> 4] : s_pal_indYJK[ind | *(data+2) >> 3) & 30];
pixel3 = *(data+3) & 8 ? pal_ind16[*(data+3) >> 4] : s_pal_indYJK[ind | *(data+3) >> 3) & 30];
*/
colour[0] = m_vram_space->read_byte(((nametbl_addr&1) << 16) | (nametbl_addr>>1));
nametbl_addr++;
colour[1] = m_vram_space->read_byte(((nametbl_addr&1) << 16) | (nametbl_addr>>1));
@ -1653,20 +1645,22 @@ void v99x8_device::graphic7_draw_sprite(const pen_t *pens, _PixelType *ln, UINT8
else
ln += m_offset_x;
for (i=0;i<256;i++)
{
if (col[i] & 0x80)
for (i=0;i<256;i++)
{
*ln++ = pens[g7_ind16[col[i]&0x0f]];
if (_Width > 512)
if (col[i] & 0x80)
{
*ln++ = pens[g7_ind16[col[i]&0x0f]];
}
else
{
if (_Width > 512)
ln += 2;
if (_Width > 512)
*ln++ = pens[g7_ind16[col[i]&0x0f]];
}
else
ln++;
{
if (_Width > 512)
ln += 2;
else
ln++;
}
}
}
}

View File

@ -146,9 +146,9 @@ static ADDRESS_MAP_START( csplayh5_map, AS_PROGRAM, 16, csplayh5_state )
AM_RANGE(0x800000, 0xbfffff) AM_ROM AM_REGION("blit_gfx",0) // GFX ROM routes here
AM_RANGE(0xc00000, 0xc7ffff) AM_RAM AM_SHARE("nvram") AM_MIRROR(0x380000) // work RAM
AM_RANGE(0xfffc00, 0xffffff) AM_DEVREADWRITE("tmp68301", tmp68301_device, regs_r, regs_w) // TMP68301 Registers
AM_RANGE(0xc00000, 0xc7ffff) AM_RAM AM_SHARE("nvram") AM_MIRROR(0x380000) // work RAM
ADDRESS_MAP_END
#if USE_H8
@ -611,7 +611,7 @@ TIMER_DEVICE_CALLBACK_MEMBER(csplayh5_state::csplayh5_irq)
int scanline = param;
if(scanline == 212*2)
m_maincpu->set_input_line_and_vector(1, HOLD_LINE,0x100/4);
m_tmp68301->external_interrupt_0();
if((scanline % 2) == 0)
{