mirror of
https://github.com/holub/mame
synced 2025-10-05 16:50:57 +03:00
mc6845: converted to devcb2, delegates and inline configs. nw.
while at it, cleaned up the args of the mc6845 delegates as well (no need to pass back and forth pieces of the driver class, now that delegates belong to it as well) even if I tested the changes extensively, I might have missed something among the 177 source files using this, so please report any regressions you see :)
This commit is contained in:
parent
ea02fd06a5
commit
cc8edf5ac2
@ -61,22 +61,6 @@ const device_type A2BUS_ULTRATERMENH = &device_creator<a2bus_ultratermenh_device
|
||||
#define CT2_INVBIT7L (0x02)
|
||||
#define CT2_HLBIT7L (0x01)
|
||||
|
||||
static MC6845_UPDATE_ROW( ultraterm_update_row );
|
||||
|
||||
static MC6845_INTERFACE( mc6845_mda_intf )
|
||||
{
|
||||
false, /* show border area */
|
||||
0,0,0,0, /* visarea adjustment */
|
||||
8, /* number of pixels per video memory address */
|
||||
NULL, /* begin_update */
|
||||
ultraterm_update_row, /* update_row */
|
||||
NULL, /* end_update */
|
||||
DEVCB_NULL, /* on_de_changed */
|
||||
DEVCB_NULL, /* on_cur_changed */
|
||||
DEVCB_NULL, /* on hsync changed */
|
||||
DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, a2bus_videx160_device, vsync_changed), /* on_vsync_changed */
|
||||
NULL
|
||||
};
|
||||
|
||||
static const rgb_t ultraterm_palette[4] =
|
||||
{
|
||||
@ -91,7 +75,11 @@ MACHINE_CONFIG_FRAGMENT( a2ultraterm )
|
||||
MCFG_SCREEN_RAW_PARAMS(CLOCK_LOW, 882, 0, 720, 370, 0, 350 )
|
||||
MCFG_SCREEN_UPDATE_DEVICE( ULTRATERM_MC6845_NAME, mc6845_device, screen_update )
|
||||
|
||||
MCFG_MC6845_ADD( ULTRATERM_MC6845_NAME, MC6845, ULTRATERM_SCREEN_NAME, CLOCK_LOW/9, mc6845_mda_intf)
|
||||
MCFG_MC6845_ADD(ULTRATERM_MC6845_NAME, MC6845, ULTRATERM_SCREEN_NAME, CLOCK_LOW/9)
|
||||
MCFG_MC6845_SHOW_BORDER_AREA(false)
|
||||
MCFG_MC6845_CHAR_WIDTH(8)
|
||||
MCFG_MC6845_UPDATE_ROW_CB(a2bus_videx160_device, crtc_update_row)
|
||||
MCFG_MC6845_OUT_VSYNC_CB(WRITELINE(a2bus_videx160_device, vsync_changed))
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
ROM_START( a2ultraterm )
|
||||
@ -319,9 +307,8 @@ void a2bus_videx160_device::write_c800(address_space &space, UINT16 offset, UINT
|
||||
}
|
||||
}
|
||||
|
||||
static MC6845_UPDATE_ROW( ultraterm_update_row )
|
||||
MC6845_UPDATE_ROW( a2bus_videx160_device::crtc_update_row )
|
||||
{
|
||||
a2bus_videx160_device *uterm = downcast<a2bus_videx160_device *>(device->owner());
|
||||
UINT32 *p = &bitmap.pix32(y);
|
||||
UINT16 chr_base = ra;
|
||||
int i;
|
||||
@ -329,38 +316,38 @@ static MC6845_UPDATE_ROW( ultraterm_update_row )
|
||||
for ( i = 0; i < x_count; i++ )
|
||||
{
|
||||
UINT16 offset = ( ma + i );
|
||||
UINT8 chr = uterm->m_ram[ offset ];
|
||||
UINT8 data = uterm->m_chrrom[ chr_base + (chr * 16) ];
|
||||
UINT8 chr = m_ram[ offset ];
|
||||
UINT8 data = m_chrrom[ chr_base + (chr * 16) ];
|
||||
UINT8 fg = 2;
|
||||
UINT8 bg = 0;
|
||||
UINT8 tmp;
|
||||
|
||||
// apply attributes
|
||||
if (!(uterm->m_ctrl2 & CT2_USEDIPS))
|
||||
if (!(m_ctrl2 & CT2_USEDIPS))
|
||||
{
|
||||
// this set and bit 7 in char, highlight
|
||||
if ((uterm->m_ctrl2 & CT2_HLBIT7H) && (chr & 0x80))
|
||||
if ((m_ctrl2 & CT2_HLBIT7H) && (chr & 0x80))
|
||||
{
|
||||
fg = 3;
|
||||
bg = 0;
|
||||
}
|
||||
|
||||
// this set and NOT bit 7 in char, highlight
|
||||
if ((uterm->m_ctrl2 & CT2_HLBIT7L) && (!(chr & 0x80)))
|
||||
if ((m_ctrl2 & CT2_HLBIT7L) && (!(chr & 0x80)))
|
||||
{
|
||||
fg = 3;
|
||||
bg = 0;
|
||||
}
|
||||
|
||||
// this clear and bit 7 in char, lowlight
|
||||
if (!(uterm->m_ctrl2 & CT2_HLBIT7H) && (chr & 0x80))
|
||||
if (!(m_ctrl2 & CT2_HLBIT7H) && (chr & 0x80))
|
||||
{
|
||||
fg = 1;
|
||||
bg = 0;
|
||||
}
|
||||
|
||||
// this clear and NOT bit 7 in char, lowlight
|
||||
if (!(uterm->m_ctrl2 & CT2_HLBIT7L) && (!(chr & 0x80)))
|
||||
if (!(m_ctrl2 & CT2_HLBIT7L) && (!(chr & 0x80)))
|
||||
{
|
||||
fg = 1;
|
||||
bg = 0;
|
||||
@ -368,7 +355,7 @@ static MC6845_UPDATE_ROW( ultraterm_update_row )
|
||||
|
||||
// invert last so invert + hilight/invert + lowlight are possible
|
||||
// invert if char bit 7 is set
|
||||
if ((uterm->m_ctrl2 & CT2_INVBIT7H) && (chr & 0x80))
|
||||
if ((m_ctrl2 & CT2_INVBIT7H) && (chr & 0x80))
|
||||
{
|
||||
tmp = fg;
|
||||
fg = bg;
|
||||
@ -376,7 +363,7 @@ static MC6845_UPDATE_ROW( ultraterm_update_row )
|
||||
}
|
||||
|
||||
// invert if char bit 7 is clear
|
||||
if ((uterm->m_ctrl2 & CT2_INVBIT7L) && (!(chr & 0x80)))
|
||||
if ((m_ctrl2 & CT2_INVBIT7L) && (!(chr & 0x80)))
|
||||
{
|
||||
tmp = fg;
|
||||
fg = bg;
|
||||
@ -386,7 +373,7 @@ static MC6845_UPDATE_ROW( ultraterm_update_row )
|
||||
|
||||
if ( i == cursor_x )
|
||||
{
|
||||
if ( uterm->m_framecnt & 0x08 )
|
||||
if ( m_framecnt & 0x08 )
|
||||
{
|
||||
data = 0xFF;
|
||||
}
|
||||
|
@ -29,6 +29,7 @@ public:
|
||||
virtual machine_config_constructor device_mconfig_additions() const;
|
||||
|
||||
DECLARE_WRITE_LINE_MEMBER(vsync_changed);
|
||||
MC6845_UPDATE_ROW(crtc_update_row);
|
||||
|
||||
UINT8 *m_rom, *m_chrrom;
|
||||
UINT8 m_ram[256*16];
|
||||
|
@ -47,29 +47,16 @@ const device_type A2BUS_AEVIEWMASTER80 = &device_creator<a2bus_aevm80_device>;
|
||||
|
||||
#define MDA_CLOCK 16257000
|
||||
|
||||
static MC6845_UPDATE_ROW( videoterm_update_row );
|
||||
|
||||
static MC6845_INTERFACE( mc6845_mda_intf )
|
||||
{
|
||||
false, /* show border area */
|
||||
0,0,0,0, /* visarea adjustment */
|
||||
8, /* number of pixels per video memory address */
|
||||
NULL, /* begin_update */
|
||||
videoterm_update_row, /* update_row */
|
||||
NULL, /* end_update */
|
||||
DEVCB_NULL, /* on_de_changed */
|
||||
DEVCB_NULL, /* on_cur_changed */
|
||||
DEVCB_NULL, /* on hsync changed */
|
||||
DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, a2bus_videx80_device, vsync_changed), /* on_vsync_changed */
|
||||
NULL
|
||||
};
|
||||
|
||||
MACHINE_CONFIG_FRAGMENT( a2videoterm )
|
||||
MCFG_SCREEN_ADD( VIDEOTERM_SCREEN_NAME, RASTER) // 560x216? (80x24 7x9 characters)
|
||||
MCFG_SCREEN_RAW_PARAMS(MDA_CLOCK, 882, 0, 720, 370, 0, 350 )
|
||||
MCFG_SCREEN_UPDATE_DEVICE( VIDEOTERM_MC6845_NAME, mc6845_device, screen_update )
|
||||
|
||||
MCFG_MC6845_ADD( VIDEOTERM_MC6845_NAME, MC6845, VIDEOTERM_SCREEN_NAME, MDA_CLOCK/9, mc6845_mda_intf)
|
||||
MCFG_MC6845_ADD(VIDEOTERM_MC6845_NAME, MC6845, VIDEOTERM_SCREEN_NAME, MDA_CLOCK/9)
|
||||
MCFG_MC6845_SHOW_BORDER_AREA(false)
|
||||
MCFG_MC6845_CHAR_WIDTH(8)
|
||||
MCFG_MC6845_UPDATE_ROW_CB(a2bus_videx80_device, crtc_update_row)
|
||||
MCFG_MC6845_OUT_VSYNC_CB(WRITELINE(a2bus_videx80_device, vsync_changed))
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
ROM_START( a2videoterm )
|
||||
@ -347,10 +334,9 @@ void a2bus_videx80_device::write_c800(address_space &space, UINT16 offset, UINT8
|
||||
}
|
||||
}
|
||||
|
||||
static MC6845_UPDATE_ROW( videoterm_update_row )
|
||||
MC6845_UPDATE_ROW( a2bus_videx80_device::crtc_update_row )
|
||||
{
|
||||
a2bus_videx80_device *vterm = downcast<a2bus_videx80_device *>(device->owner());
|
||||
const rgb_t *palette = vterm->m_palette->palette()->entry_list_raw();
|
||||
const rgb_t *palette = m_palette->palette()->entry_list_raw();
|
||||
UINT32 *p = &bitmap.pix32(y);
|
||||
UINT16 chr_base = ra; //( ra & 0x08 ) ? 0x800 | ( ra & 0x07 ) : ra;
|
||||
int i;
|
||||
@ -358,14 +344,14 @@ static MC6845_UPDATE_ROW( videoterm_update_row )
|
||||
for ( i = 0; i < x_count; i++ )
|
||||
{
|
||||
UINT16 offset = ( ma + i ) & 0x7ff;
|
||||
UINT8 chr = vterm->m_ram[ offset ];
|
||||
UINT8 data = vterm->m_chrrom[ chr_base + chr * 16 ];
|
||||
UINT8 chr = m_ram[ offset ];
|
||||
UINT8 data = m_chrrom[ chr_base + chr * 16 ];
|
||||
UINT8 fg = 15;
|
||||
UINT8 bg = 0;
|
||||
|
||||
if ( i == cursor_x )
|
||||
{
|
||||
if ( vterm->m_framecnt & 0x08 )
|
||||
if ( m_framecnt & 0x08 )
|
||||
{
|
||||
data = 0xFF;
|
||||
}
|
||||
|
@ -29,6 +29,7 @@ public:
|
||||
virtual machine_config_constructor device_mconfig_additions() const;
|
||||
|
||||
DECLARE_WRITE_LINE_MEMBER(vsync_changed);
|
||||
MC6845_UPDATE_ROW(crtc_update_row);
|
||||
|
||||
UINT8 *m_rom, *m_chrrom;
|
||||
UINT8 m_ram[512*4];
|
||||
|
@ -78,58 +78,36 @@ const rom_entry *c64_xl80_device::device_rom_region() const
|
||||
}
|
||||
|
||||
//-------------------------------------------------
|
||||
// mc6845_interface crtc_intf
|
||||
// mc6845
|
||||
//-------------------------------------------------
|
||||
|
||||
void c64_xl80_device::crtc_update_row(mc6845_device *device, bitmap_rgb32 &bitmap, const rectangle &cliprect, UINT16 ma, UINT8 ra, UINT16 y, UINT8 x_count, INT8 cursor_x, int de, int hbp, int vbp, void *param)
|
||||
MC6845_UPDATE_ROW( c64_xl80_device::crtc_update_row )
|
||||
{
|
||||
const pen_t *pen = m_palette->pens();
|
||||
|
||||
|
||||
for (int column = 0; column < x_count; column++)
|
||||
{
|
||||
UINT8 code = m_ram[((ma + column) & 0x7ff)];
|
||||
UINT16 addr = (code << 3) | (ra & 0x07);
|
||||
UINT8 data = m_char_rom->base()[addr & 0x7ff];
|
||||
|
||||
|
||||
if (column == cursor_x)
|
||||
{
|
||||
data = 0xff;
|
||||
}
|
||||
|
||||
|
||||
for (int bit = 0; bit < 8; bit++)
|
||||
{
|
||||
int x = (column * 8) + bit;
|
||||
int color = BIT(data, 7) && de;
|
||||
|
||||
|
||||
bitmap.pix32(vbp + y, hbp + x) = pen[color];
|
||||
|
||||
|
||||
data <<= 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static MC6845_UPDATE_ROW( c64_xl80_update_row )
|
||||
{
|
||||
c64_xl80_device *xl80 = downcast<c64_xl80_device *>(device->owner());
|
||||
xl80->crtc_update_row(device,bitmap,cliprect,ma,ra,y,x_count,cursor_x,de,hbp,vbp,param);
|
||||
}
|
||||
|
||||
static MC6845_INTERFACE( crtc_intf )
|
||||
{
|
||||
true,
|
||||
0,0,0,0,
|
||||
8,
|
||||
NULL,
|
||||
c64_xl80_update_row,
|
||||
NULL,
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL,
|
||||
NULL
|
||||
};
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// GFXDECODE( c64_xl80 )
|
||||
//-------------------------------------------------
|
||||
@ -154,7 +132,10 @@ static MACHINE_CONFIG_FRAGMENT( c64_xl80 )
|
||||
MCFG_GFXDECODE_ADD("gfxdecode", "palette", c64_xl80)
|
||||
MCFG_PALETTE_ADD_BLACK_AND_WHITE("palette")
|
||||
|
||||
MCFG_MC6845_ADD(HD46505SP_TAG, H46505, MC6845_SCREEN_TAG, XTAL_14_31818MHz, crtc_intf)
|
||||
MCFG_MC6845_ADD(HD46505SP_TAG, H46505, MC6845_SCREEN_TAG, XTAL_14_31818MHz)
|
||||
MCFG_MC6845_SHOW_BORDER_AREA(true)
|
||||
MCFG_MC6845_CHAR_WIDTH(8)
|
||||
MCFG_MC6845_UPDATE_ROW_CB(c64_xl80_device, crtc_update_row)
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
|
||||
|
@ -39,7 +39,7 @@ public:
|
||||
virtual machine_config_constructor device_mconfig_additions() const;
|
||||
|
||||
// not really public
|
||||
void crtc_update_row(mc6845_device *device, bitmap_rgb32 &bitmap, const rectangle &cliprect, UINT16 ma, UINT8 ra, UINT16 y, UINT8 x_count, INT8 cursor_x, int de, int hbp, int vbp, void *param);
|
||||
MC6845_UPDATE_ROW( crtc_update_row );
|
||||
|
||||
protected:
|
||||
// device-level overrides
|
||||
|
@ -97,55 +97,33 @@ const rom_entry *comx_clm_device::device_rom_region() const
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// mc6845_interface crtc_intf
|
||||
// mc6845
|
||||
//-------------------------------------------------
|
||||
|
||||
void comx_clm_device::crtc_update_row(mc6845_device *device, bitmap_rgb32 &bitmap, const rectangle &cliprect, UINT16 ma, UINT8 ra, UINT16 y, UINT8 x_count, INT8 cursor_x, int de, int hbp, int vbp, void *param)
|
||||
MC6845_UPDATE_ROW( comx_clm_device::crtc_update_row )
|
||||
{
|
||||
for (int column = 0; column < x_count; column++)
|
||||
{
|
||||
UINT8 code = m_video_ram[((ma + column) & 0x7ff)];
|
||||
UINT16 addr = (code << 3) | (ra & 0x07);
|
||||
UINT8 data = m_char_rom->base()[addr & 0x7ff];
|
||||
|
||||
|
||||
if (BIT(ra, 3) && column == cursor_x)
|
||||
{
|
||||
data = 0xff;
|
||||
}
|
||||
|
||||
|
||||
for (int bit = 0; bit < 8; bit++)
|
||||
{
|
||||
int x = (column * 8) + bit;
|
||||
|
||||
|
||||
bitmap.pix32(vbp + y, hbp + x) = m_palette->pen(BIT(data, 7) && de);
|
||||
|
||||
|
||||
data <<= 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static MC6845_UPDATE_ROW( comx_clm_update_row )
|
||||
{
|
||||
comx_clm_device *clm = downcast<comx_clm_device *>(device->owner());
|
||||
clm->crtc_update_row(device,bitmap,cliprect,ma,ra,y,x_count,cursor_x,de,hbp,vbp,param);
|
||||
}
|
||||
|
||||
static MC6845_INTERFACE( crtc_intf )
|
||||
{
|
||||
true,
|
||||
0,0,0,0,
|
||||
8,
|
||||
NULL,
|
||||
comx_clm_update_row,
|
||||
NULL,
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL,
|
||||
NULL
|
||||
};
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// GFXDECODE( comx_clm )
|
||||
//-------------------------------------------------
|
||||
@ -170,7 +148,10 @@ static MACHINE_CONFIG_FRAGMENT( comx_clm )
|
||||
MCFG_GFXDECODE_ADD("gfxdecode", "palette", comx_clm)
|
||||
MCFG_PALETTE_ADD_BLACK_AND_WHITE("palette")
|
||||
|
||||
MCFG_MC6845_ADD(MC6845_TAG, MC6845, MC6845_SCREEN_TAG, XTAL_14_31818MHz/7, crtc_intf)
|
||||
MCFG_MC6845_ADD(MC6845_TAG, MC6845, MC6845_SCREEN_TAG, XTAL_14_31818MHz/7)
|
||||
MCFG_MC6845_SHOW_BORDER_AREA(true)
|
||||
MCFG_MC6845_CHAR_WIDTH(8)
|
||||
MCFG_MC6845_UPDATE_ROW_CB(comx_clm_device, crtc_update_row)
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
|
||||
|
@ -38,7 +38,7 @@ public:
|
||||
virtual machine_config_constructor device_mconfig_additions() const;
|
||||
|
||||
// not really public
|
||||
void crtc_update_row(mc6845_device *device, bitmap_rgb32 &bitmap, const rectangle &cliprect, UINT16 ma, UINT8 ra, UINT16 y, UINT8 x_count, INT8 cursor_x, int de, int hbp, int vbp, void *param);
|
||||
MC6845_UPDATE_ROW( crtc_update_row );
|
||||
|
||||
protected:
|
||||
// device-level overrides
|
||||
|
@ -223,57 +223,47 @@ ADDRESS_MAP_END
|
||||
//**************************************************************************
|
||||
|
||||
//-------------------------------------------------
|
||||
// mc6845_interface crtc_intf
|
||||
// mc6845
|
||||
//-------------------------------------------------
|
||||
|
||||
void grip_device::crtc_update_row(mc6845_device *device, bitmap_rgb32 &bitmap, const rectangle &cliprect, UINT16 ma, UINT8 ra, UINT16 y, UINT8 x_count, INT8 cursor_x, int de, int hbp, int vbp, void *param)
|
||||
MC6845_UPDATE_ROW( grip_device::crtc_update_row )
|
||||
{
|
||||
int column, bit;
|
||||
|
||||
for (column = 0; column < x_count; column++)
|
||||
for (int column = 0; column < x_count; column++)
|
||||
{
|
||||
UINT16 address = (m_page << 12) | (((ma + column) & 0xfff) << 3) | (ra & 0x07);
|
||||
UINT8 data = m_video_ram[address];
|
||||
|
||||
for (bit = 0; bit < 8; bit++)
|
||||
|
||||
for (int bit = 0; bit < 8; bit++)
|
||||
{
|
||||
int x = (column * 8) + bit;
|
||||
int color = (m_flash ? 0 : BIT(data, bit)) && de;
|
||||
|
||||
|
||||
bitmap.pix32(vbp + y, hbp + x) = m_palette->pen(color);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static MC6845_UPDATE_ROW( grip_update_row )
|
||||
{
|
||||
grip_device *grip = downcast<grip_device *>(device->owner());
|
||||
|
||||
grip->crtc_update_row(device,bitmap,cliprect,ma,ra,y,x_count,cursor_x,de,hbp,vbp,param);
|
||||
}
|
||||
/*
|
||||
static MC6845_UPDATE_ROW( grip5_update_row )
|
||||
MC6845_UPDATE_ROW( grip_device::grip5_update_row )
|
||||
{
|
||||
grip5_state *state = device->machine().driver_data<grip5_state>();
|
||||
const rgb_t *palette = state->m_palette->palette()->entry_list_raw();
|
||||
const rgb_t *palette = m_palette->palette()->entry_list_raw();
|
||||
int column, bit;
|
||||
|
||||
for (column = 0; column < x_count; column++)
|
||||
{
|
||||
UINT16 address = (state->m_dpage << 12) | (((ma + column) & 0xfff) << 3) | (ra & 0x07);
|
||||
UINT8 data = state->m_video_ram[address];
|
||||
UINT16 address = (m_dpage << 12) | (((ma + column) & 0xfff) << 3) | (ra & 0x07);
|
||||
UINT8 data = m_video_ram[address];
|
||||
|
||||
for (bit = 0; bit < 8; bit++)
|
||||
{
|
||||
int x = (column * 8) + bit;
|
||||
int color = state->m_flash ? 0 : BIT(data, bit);
|
||||
int color = m_flash ? 0 : BIT(data, bit);
|
||||
|
||||
bitmap.pix32(y, x) = palette[color];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static MC6845_ON_UPDATE_ADDR_CHANGED( grip5_update_addr_changed )
|
||||
MC6845_ON_UPDATE_ADDR_CHANGED( grip_device::grip5_addr_changed )
|
||||
{
|
||||
}
|
||||
*/
|
||||
@ -286,38 +276,6 @@ static const speaker_interface speaker_intf =
|
||||
speaker_levels
|
||||
};
|
||||
|
||||
static MC6845_INTERFACE( crtc_intf )
|
||||
{
|
||||
true,
|
||||
0,0,0,0,
|
||||
8,
|
||||
NULL,
|
||||
grip_update_row,
|
||||
NULL,
|
||||
DEVCB_DEVICE_LINE_MEMBER(Z80STI_TAG, z80sti_device, i1_w),
|
||||
DEVCB_DEVICE_LINE_MEMBER(Z80STI_TAG, z80sti_device, i2_w),
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL,
|
||||
NULL
|
||||
};
|
||||
/*
|
||||
|
||||
static MC6845_INTERFACE( grip5_crtc_intf )
|
||||
{
|
||||
false,
|
||||
0,0,0,0,
|
||||
8,
|
||||
NULL,
|
||||
grip5_update_row,
|
||||
NULL,
|
||||
DEVCB_DEVICE_LINE_MEMBER(Z80STI_TAG, z80sti_device, i1_w),
|
||||
DEVCB_DEVICE_LINE_MEMBER(Z80STI_TAG, z80sti_device, i2_w),
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL,
|
||||
grip5_update_addr_changed
|
||||
};
|
||||
*/
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// I8255A interface
|
||||
@ -527,8 +485,14 @@ static MACHINE_CONFIG_FRAGMENT( grip )
|
||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
|
||||
|
||||
// devices
|
||||
MCFG_MC6845_ADD(MC6845_TAG, MC6845, SCREEN_TAG, XTAL_16MHz/4, crtc_intf)
|
||||
// MCFG_MC6845_ADD(HD6345_TAG, HD6345, SCREEN_TAG, XTAL_16MHz/4, grip5_crtc_intf)
|
||||
MCFG_MC6845_ADD(MC6845_TAG, MC6845, SCREEN_TAG, XTAL_16MHz/4)
|
||||
MCFG_MC6845_SHOW_BORDER_AREA(true)
|
||||
MCFG_MC6845_CHAR_WIDTH(8)
|
||||
MCFG_MC6845_UPDATE_ROW_CB(grip_device, crtc_update_row)
|
||||
MCFG_MC6845_OUT_DE_CB(DEVWRITELINE(Z80STI_TAG, z80sti_device, i1_w))
|
||||
MCFG_MC6845_OUT_CUR_CB(DEVWRITELINE(Z80STI_TAG, z80sti_device, i1_w))
|
||||
|
||||
// MCFG_MC6845_ADD(HD6345_TAG, HD6345, SCREEN_TAG, XTAL_16MHz/4)
|
||||
|
||||
MCFG_DEVICE_ADD(I8255A_TAG, I8255A, 0)
|
||||
MCFG_I8255_IN_PORTA_CB(READ8(grip_device, ppi_pa_r))
|
||||
|
@ -66,7 +66,7 @@ public:
|
||||
DECLARE_WRITE_LINE_MEMBER( write_centronics_busy );
|
||||
DECLARE_WRITE_LINE_MEMBER( write_centronics_fault );
|
||||
|
||||
void crtc_update_row(mc6845_device *device, bitmap_rgb32 &bitmap, const rectangle &cliprect, UINT16 ma, UINT8 ra, UINT16 y, UINT8 x_count, INT8 cursor_x, int de, int hbp, int vbp, void *param);
|
||||
MC6845_UPDATE_ROW( crtc_update_row );
|
||||
|
||||
protected:
|
||||
// device-level overrides
|
||||
|
@ -12,6 +12,19 @@
|
||||
#define AGA_SCREEN_NAME "screen"
|
||||
#define AGA_MC6845_NAME "mc6845_aga"
|
||||
|
||||
enum
|
||||
{
|
||||
MDA_TEXT_INTEN = 0,
|
||||
MDA_TEXT_BLINK,
|
||||
CGA_TEXT_INTEN,
|
||||
CGA_TEXT_INTEN_ALT,
|
||||
CGA_TEXT_BLINK,
|
||||
CGA_TEXT_BLINK_ALT,
|
||||
CGA_GFX_1BPP,
|
||||
CGA_GFX_2BPP,
|
||||
CGA_GFX_4BPPL,
|
||||
CGA_GFX_4BPPH
|
||||
};
|
||||
|
||||
static INPUT_PORTS_START( aga )
|
||||
PORT_START( "cga_config" )
|
||||
@ -47,6 +60,7 @@ isa8_aga_device::isa8_aga_device(const machine_config &mconfig, const char *tag,
|
||||
m_palette(*this, "palette"),
|
||||
m_mc6845(*this, AGA_MC6845_NAME),
|
||||
m_cga_config(*this, "cga_config"),
|
||||
m_update_row_type(-1),
|
||||
m_mda_mode_control(0),
|
||||
m_mda_status(0),
|
||||
m_cga_mode_control(0),
|
||||
@ -64,6 +78,7 @@ isa8_aga_device::isa8_aga_device(const machine_config &mconfig, device_type type
|
||||
m_palette(*this, "palette"),
|
||||
m_mc6845(*this, AGA_MC6845_NAME),
|
||||
m_cga_config(*this, "cga_config"),
|
||||
m_update_row_type(-1),
|
||||
m_mda_mode_control(0),
|
||||
m_mda_status(0),
|
||||
m_cga_mode_control(0),
|
||||
@ -223,34 +238,47 @@ WRITE_LINE_MEMBER( isa8_aga_device::vsync_changed )
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
static MC6845_UPDATE_ROW( aga_update_row )
|
||||
MC6845_UPDATE_ROW( isa8_aga_device::aga_update_row )
|
||||
{
|
||||
isa8_aga_device *aga = downcast<isa8_aga_device *>(device->owner());
|
||||
if ( aga->m_update_row )
|
||||
if (m_update_row_type == -1)
|
||||
return;
|
||||
|
||||
switch (m_update_row_type)
|
||||
{
|
||||
aga->m_update_row( device, bitmap, cliprect, ma, ra, y, x_count, cursor_x, de, hbp, vbp, param );
|
||||
case MDA_TEXT_INTEN:
|
||||
mda_text_inten_update_row(bitmap, cliprect, ma, ra, y, x_count, cursor_x, de, hbp, vbp);
|
||||
break;
|
||||
case MDA_TEXT_BLINK:
|
||||
mda_text_blink_update_row(bitmap, cliprect, ma, ra, y, x_count, cursor_x, de, hbp, vbp);
|
||||
break;
|
||||
case CGA_TEXT_INTEN:
|
||||
cga_text_inten_update_row(bitmap, cliprect, ma, ra, y, x_count, cursor_x, de, hbp, vbp);
|
||||
break;
|
||||
case CGA_TEXT_INTEN_ALT:
|
||||
cga_text_inten_alt_update_row(bitmap, cliprect, ma, ra, y, x_count, cursor_x, de, hbp, vbp);
|
||||
break;
|
||||
case CGA_TEXT_BLINK:
|
||||
cga_text_blink_update_row(bitmap, cliprect, ma, ra, y, x_count, cursor_x, de, hbp, vbp);
|
||||
break;
|
||||
case CGA_TEXT_BLINK_ALT:
|
||||
cga_text_blink_alt_update_row(bitmap, cliprect, ma, ra, y, x_count, cursor_x, de, hbp, vbp);
|
||||
break;
|
||||
case CGA_GFX_1BPP:
|
||||
cga_gfx_1bpp_update_row(bitmap, cliprect, ma, ra, y, x_count, cursor_x, de, hbp, vbp);
|
||||
break;
|
||||
case CGA_GFX_2BPP:
|
||||
cga_gfx_2bpp_update_row(bitmap, cliprect, ma, ra, y, x_count, cursor_x, de, hbp, vbp);
|
||||
break;
|
||||
case CGA_GFX_4BPPL:
|
||||
cga_gfx_4bppl_update_row(bitmap, cliprect, ma, ra, y, x_count, cursor_x, de, hbp, vbp);
|
||||
break;
|
||||
case CGA_GFX_4BPPH:
|
||||
cga_gfx_4bpph_update_row(bitmap, cliprect, ma, ra, y, x_count, cursor_x, de, hbp, vbp);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static MC6845_INTERFACE( mc6845_aga_intf )
|
||||
{
|
||||
false, /* show border area */
|
||||
0,0,0,0, /* visarea adjustment */
|
||||
8, /* numbers of pixels per video memory address */
|
||||
NULL, /* begin_update */
|
||||
aga_update_row, /* update_row */
|
||||
NULL, /* end_update */
|
||||
DEVCB_NULL, /* on_de_changed */
|
||||
DEVCB_NULL, /* on_cur_changed */
|
||||
DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, isa8_aga_device, hsync_changed), /* on_hsync_changed */
|
||||
DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, isa8_aga_device, vsync_changed), /* on_vsync_changed */
|
||||
NULL
|
||||
};
|
||||
|
||||
MACHINE_CONFIG_FRAGMENT( pcvideo_aga )
|
||||
MCFG_SCREEN_ADD( AGA_SCREEN_NAME, RASTER )
|
||||
MCFG_SCREEN_RAW_PARAMS( XTAL_14_31818MHz,912,0,640,262,0,200 )
|
||||
@ -258,7 +286,12 @@ MACHINE_CONFIG_FRAGMENT( pcvideo_aga )
|
||||
|
||||
MCFG_PALETTE_ADD( "palette", /* CGA_PALETTE_SETS * 16*/ 65536 )
|
||||
|
||||
MCFG_MC6845_ADD( AGA_MC6845_NAME, MC6845, AGA_SCREEN_NAME, XTAL_14_31818MHz/8, mc6845_aga_intf )
|
||||
MCFG_MC6845_ADD(AGA_MC6845_NAME, MC6845, AGA_SCREEN_NAME, XTAL_14_31818MHz/8)
|
||||
MCFG_MC6845_SHOW_BORDER_AREA(false)
|
||||
MCFG_MC6845_CHAR_WIDTH(8)
|
||||
MCFG_MC6845_UPDATE_ROW_CB(isa8_aga_device, aga_update_row)
|
||||
MCFG_MC6845_OUT_HSYNC_CB(WRITELINE(isa8_aga_device, hsync_changed))
|
||||
MCFG_MC6845_OUT_VSYNC_CB(WRITELINE(isa8_aga_device, vsync_changed))
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
machine_config_constructor isa8_aga_device::device_mconfig_additions() const
|
||||
@ -273,10 +306,10 @@ machine_config_constructor isa8_aga_device::device_mconfig_additions() const
|
||||
*************************************/
|
||||
|
||||
/* colors need fixing in the mda_text_* functions ! */
|
||||
static MC6845_UPDATE_ROW( mda_text_inten_update_row ) {
|
||||
isa8_aga_device *aga = downcast<isa8_aga_device *>(device->owner());
|
||||
const rgb_t *palette = aga->m_palette->palette()->entry_list_raw();
|
||||
UINT8 *videoram = aga->m_videoram;
|
||||
MC6845_UPDATE_ROW( isa8_aga_device::mda_text_inten_update_row )
|
||||
{
|
||||
const rgb_t *palette = m_palette->palette()->entry_list_raw();
|
||||
UINT8 *videoram = m_videoram;
|
||||
UINT32 *p = &bitmap.pix32(y);
|
||||
UINT16 chr_base = ( ra & 0x08 ) ? 0x800 | ( ra & 0x07 ) : ra;
|
||||
int i;
|
||||
@ -286,7 +319,7 @@ static MC6845_UPDATE_ROW( mda_text_inten_update_row ) {
|
||||
UINT16 offset = ( ( ma + i ) << 1 ) & 0x0FFF;
|
||||
UINT8 chr = videoram[ offset ];
|
||||
UINT8 attr = videoram[ offset + 1 ];
|
||||
UINT8 data = aga->m_mda_chr_gen[ chr_base + chr * 8 ];
|
||||
UINT8 data = m_mda_chr_gen[ chr_base + chr * 8 ];
|
||||
UINT8 fg = ( attr & 0x08 ) ? 3 : 2;
|
||||
UINT8 bg = 0;
|
||||
|
||||
@ -334,10 +367,10 @@ static MC6845_UPDATE_ROW( mda_text_inten_update_row ) {
|
||||
}
|
||||
|
||||
|
||||
static MC6845_UPDATE_ROW( mda_text_blink_update_row ) {
|
||||
isa8_aga_device *aga = downcast<isa8_aga_device *>(device->owner());
|
||||
UINT8 *videoram = aga->m_videoram;
|
||||
const rgb_t *palette = aga->m_palette->palette()->entry_list_raw();
|
||||
MC6845_UPDATE_ROW( isa8_aga_device::mda_text_blink_update_row )
|
||||
{
|
||||
UINT8 *videoram = m_videoram;
|
||||
const rgb_t *palette = m_palette->palette()->entry_list_raw();
|
||||
UINT32 *p = &bitmap.pix32(y);
|
||||
UINT16 chr_base = ( ra & 0x08 ) ? 0x800 | ( ra & 0x07 ) : ra;
|
||||
int i;
|
||||
@ -347,7 +380,7 @@ static MC6845_UPDATE_ROW( mda_text_blink_update_row ) {
|
||||
UINT16 offset = ( ( ma + i ) << 1 ) & 0x0FFF;
|
||||
UINT8 chr = videoram[ offset ];
|
||||
UINT8 attr = videoram[ offset + 1 ];
|
||||
UINT8 data = aga->m_mda_chr_gen[ chr_base + chr * 8 ];
|
||||
UINT8 data = m_mda_chr_gen[ chr_base + chr * 8 ];
|
||||
UINT8 fg = ( attr & 0x08 ) ? 3 : 2;
|
||||
UINT8 bg = 0;
|
||||
|
||||
@ -374,7 +407,7 @@ static MC6845_UPDATE_ROW( mda_text_blink_update_row ) {
|
||||
if ( ( attr & 0x07 ) == 0x01 ) {
|
||||
data = 0xFF;
|
||||
}
|
||||
if ( ( attr & 0x80 ) && ( aga->m_framecnt & 0x40 ) ) {
|
||||
if ( ( attr & 0x80 ) && ( m_framecnt & 0x40 ) ) {
|
||||
data = 0x00;
|
||||
}
|
||||
}
|
||||
@ -396,10 +429,10 @@ static MC6845_UPDATE_ROW( mda_text_blink_update_row ) {
|
||||
}
|
||||
|
||||
|
||||
static MC6845_UPDATE_ROW( cga_text_inten_update_row ) {
|
||||
isa8_aga_device *aga = downcast<isa8_aga_device *>(device->owner());
|
||||
UINT8 *videoram = aga->m_videoram;
|
||||
const rgb_t *palette = aga->m_palette->palette()->entry_list_raw();
|
||||
MC6845_UPDATE_ROW( isa8_aga_device::cga_text_inten_update_row )
|
||||
{
|
||||
UINT8 *videoram = m_videoram;
|
||||
const rgb_t *palette = m_palette->palette()->entry_list_raw();
|
||||
UINT32 *p = &bitmap.pix32(y);
|
||||
int i;
|
||||
|
||||
@ -408,7 +441,7 @@ static MC6845_UPDATE_ROW( cga_text_inten_update_row ) {
|
||||
UINT16 offset = ( ( ma + i ) << 1 ) & 0x3fff;
|
||||
UINT8 chr = videoram[ offset ];
|
||||
UINT8 attr = videoram[ offset +1 ];
|
||||
UINT8 data = aga->m_cga_chr_gen[ chr * 16 + ra ];
|
||||
UINT8 data = m_cga_chr_gen[ chr * 16 + ra ];
|
||||
UINT16 fg = attr & 0x0F;
|
||||
UINT16 bg = ( attr >> 4 ) & 0x07;
|
||||
|
||||
@ -427,10 +460,10 @@ static MC6845_UPDATE_ROW( cga_text_inten_update_row ) {
|
||||
}
|
||||
}
|
||||
|
||||
static MC6845_UPDATE_ROW( cga_text_inten_alt_update_row ) {
|
||||
isa8_aga_device *aga = downcast<isa8_aga_device *>(device->owner());
|
||||
const rgb_t *palette = aga->m_palette->palette()->entry_list_raw();
|
||||
UINT8 *videoram = aga->m_videoram;
|
||||
MC6845_UPDATE_ROW( isa8_aga_device::cga_text_inten_alt_update_row )
|
||||
{
|
||||
const rgb_t *palette = m_palette->palette()->entry_list_raw();
|
||||
UINT8 *videoram = m_videoram;
|
||||
UINT32 *p = &bitmap.pix32(y);
|
||||
int i;
|
||||
|
||||
@ -439,7 +472,7 @@ static MC6845_UPDATE_ROW( cga_text_inten_alt_update_row ) {
|
||||
UINT16 offset = ( ( ma + i ) << 1 ) & 0x3fff;
|
||||
UINT8 chr = videoram[ offset ];
|
||||
UINT8 attr = videoram[ offset +1 ];
|
||||
UINT8 data = aga->m_cga_chr_gen[ chr * 16 + ra ];
|
||||
UINT8 data = m_cga_chr_gen[ chr * 16 + ra ];
|
||||
UINT16 fg = attr & 0x0F;
|
||||
|
||||
if ( i == cursor_x ) {
|
||||
@ -457,10 +490,10 @@ static MC6845_UPDATE_ROW( cga_text_inten_alt_update_row ) {
|
||||
}
|
||||
}
|
||||
|
||||
static MC6845_UPDATE_ROW( cga_text_blink_update_row ) {
|
||||
isa8_aga_device *aga = downcast<isa8_aga_device *>(device->owner());
|
||||
const rgb_t *palette = aga->m_palette->palette()->entry_list_raw();
|
||||
UINT8 *videoram = aga->m_videoram;
|
||||
MC6845_UPDATE_ROW( isa8_aga_device::cga_text_blink_update_row )
|
||||
{
|
||||
const rgb_t *palette = m_palette->palette()->entry_list_raw();
|
||||
UINT8 *videoram = m_videoram;
|
||||
UINT32 *p = &bitmap.pix32(y);
|
||||
int i;
|
||||
|
||||
@ -468,14 +501,14 @@ static MC6845_UPDATE_ROW( cga_text_blink_update_row ) {
|
||||
UINT16 offset = ( ( ma + i ) << 1 ) & 0x3fff;
|
||||
UINT8 chr = videoram[ offset ];
|
||||
UINT8 attr = videoram[ offset +1 ];
|
||||
UINT8 data = aga->m_cga_chr_gen[ chr * 16 + ra ];
|
||||
UINT8 data = m_cga_chr_gen[ chr * 16 + ra ];
|
||||
UINT16 fg = attr & 0x0F;
|
||||
UINT16 bg = (attr >> 4) & 0x07;
|
||||
|
||||
if ( i == cursor_x ) {
|
||||
data = 0xFF;
|
||||
} else {
|
||||
if ( ( attr & 0x80 ) && ( aga->m_framecnt & 0x10 ) ) {
|
||||
if ( ( attr & 0x80 ) && ( m_framecnt & 0x10 ) ) {
|
||||
data = 0x00;
|
||||
}
|
||||
}
|
||||
@ -491,10 +524,10 @@ static MC6845_UPDATE_ROW( cga_text_blink_update_row ) {
|
||||
}
|
||||
}
|
||||
|
||||
static MC6845_UPDATE_ROW( cga_text_blink_alt_update_row ) {
|
||||
isa8_aga_device *aga = downcast<isa8_aga_device *>(device->owner());
|
||||
const rgb_t *palette = aga->m_palette->palette()->entry_list_raw();
|
||||
UINT8 *videoram = aga->m_videoram;
|
||||
MC6845_UPDATE_ROW( isa8_aga_device::cga_text_blink_alt_update_row )
|
||||
{
|
||||
const rgb_t *palette = m_palette->palette()->entry_list_raw();
|
||||
UINT8 *videoram = m_videoram;
|
||||
UINT32 *p = &bitmap.pix32(y);
|
||||
int i;
|
||||
|
||||
@ -503,14 +536,14 @@ static MC6845_UPDATE_ROW( cga_text_blink_alt_update_row ) {
|
||||
UINT16 offset = ( ( ma + i ) << 1 ) & 0x3fff;
|
||||
UINT8 chr = videoram[ offset ];
|
||||
UINT8 attr = videoram[ offset +1 ];
|
||||
UINT8 data = aga->m_cga_chr_gen[ chr * 16 + ra ];
|
||||
UINT8 data = m_cga_chr_gen[ chr * 16 + ra ];
|
||||
UINT16 fg = attr & 0x07;
|
||||
UINT16 bg = 0;
|
||||
|
||||
if ( i == cursor_x ) {
|
||||
data = 0xFF;
|
||||
} else {
|
||||
if ( ( attr & 0x80 ) && ( aga->m_framecnt & 0x10 ) ) {
|
||||
if ( ( attr & 0x80 ) && ( m_framecnt & 0x10 ) ) {
|
||||
data = 0x00;
|
||||
bg = ( attr >> 4 ) & 0x07;
|
||||
}
|
||||
@ -527,10 +560,10 @@ static MC6845_UPDATE_ROW( cga_text_blink_alt_update_row ) {
|
||||
}
|
||||
}
|
||||
|
||||
static MC6845_UPDATE_ROW( cga_gfx_4bppl_update_row ) {
|
||||
isa8_aga_device *aga = downcast<isa8_aga_device *>(device->owner());
|
||||
const rgb_t *palette = aga->m_palette->palette()->entry_list_raw();
|
||||
UINT8 *videoram = aga->m_videoram;
|
||||
MC6845_UPDATE_ROW( isa8_aga_device::cga_gfx_4bppl_update_row )
|
||||
{
|
||||
const rgb_t *palette = m_palette->palette()->entry_list_raw();
|
||||
UINT8 *videoram = m_videoram;
|
||||
UINT32 *p = &bitmap.pix32(y);
|
||||
int i;
|
||||
|
||||
@ -553,10 +586,10 @@ static MC6845_UPDATE_ROW( cga_gfx_4bppl_update_row ) {
|
||||
}
|
||||
}
|
||||
|
||||
static MC6845_UPDATE_ROW( cga_gfx_4bpph_update_row ) {
|
||||
isa8_aga_device *aga = downcast<isa8_aga_device *>(device->owner());
|
||||
UINT8 *videoram = aga->m_videoram;
|
||||
const rgb_t *palette = aga->m_palette->palette()->entry_list_raw();
|
||||
MC6845_UPDATE_ROW( isa8_aga_device::cga_gfx_4bpph_update_row )
|
||||
{
|
||||
UINT8 *videoram = m_videoram;
|
||||
const rgb_t *palette = m_palette->palette()->entry_list_raw();
|
||||
UINT32 *p = &bitmap.pix32(y);
|
||||
int i;
|
||||
|
||||
@ -587,10 +620,10 @@ static MC6845_UPDATE_ROW( cga_gfx_4bpph_update_row ) {
|
||||
}
|
||||
}
|
||||
|
||||
static MC6845_UPDATE_ROW( cga_gfx_2bpp_update_row ) {
|
||||
isa8_aga_device *aga = downcast<isa8_aga_device *>(device->owner());
|
||||
UINT8 *videoram = aga->m_videoram;
|
||||
const rgb_t *palette = aga->m_palette->palette()->entry_list_raw();
|
||||
MC6845_UPDATE_ROW( isa8_aga_device::cga_gfx_2bpp_update_row )
|
||||
{
|
||||
UINT8 *videoram = m_videoram;
|
||||
const rgb_t *palette = m_palette->palette()->entry_list_raw();
|
||||
UINT32 *p = &bitmap.pix32(y);
|
||||
int i;
|
||||
|
||||
@ -599,26 +632,26 @@ static MC6845_UPDATE_ROW( cga_gfx_2bpp_update_row ) {
|
||||
UINT16 offset = ( ( ( ma + i ) << 1 ) & 0x1fff ) | ( ( y & 1 ) << 13 );
|
||||
UINT8 data = videoram[ offset ];
|
||||
|
||||
*p = palette[aga->m_cga_palette_lut_2bpp[ ( data >> 6 ) & 0x03 ]]; p++;
|
||||
*p = palette[aga->m_cga_palette_lut_2bpp[ ( data >> 4 ) & 0x03 ]]; p++;
|
||||
*p = palette[aga->m_cga_palette_lut_2bpp[ ( data >> 2 ) & 0x03 ]]; p++;
|
||||
*p = palette[aga->m_cga_palette_lut_2bpp[ data & 0x03 ]]; p++;
|
||||
*p = palette[m_cga_palette_lut_2bpp[ ( data >> 6 ) & 0x03 ]]; p++;
|
||||
*p = palette[m_cga_palette_lut_2bpp[ ( data >> 4 ) & 0x03 ]]; p++;
|
||||
*p = palette[m_cga_palette_lut_2bpp[ ( data >> 2 ) & 0x03 ]]; p++;
|
||||
*p = palette[m_cga_palette_lut_2bpp[ data & 0x03 ]]; p++;
|
||||
|
||||
data = videoram[ offset+1 ];
|
||||
|
||||
*p = palette[aga->m_cga_palette_lut_2bpp[ ( data >> 6 ) & 0x03 ]]; p++;
|
||||
*p = palette[aga->m_cga_palette_lut_2bpp[ ( data >> 4 ) & 0x03 ]]; p++;
|
||||
*p = palette[aga->m_cga_palette_lut_2bpp[ ( data >> 2 ) & 0x03 ]]; p++;
|
||||
*p = palette[aga->m_cga_palette_lut_2bpp[ data & 0x03 ]]; p++;
|
||||
*p = palette[m_cga_palette_lut_2bpp[ ( data >> 6 ) & 0x03 ]]; p++;
|
||||
*p = palette[m_cga_palette_lut_2bpp[ ( data >> 4 ) & 0x03 ]]; p++;
|
||||
*p = palette[m_cga_palette_lut_2bpp[ ( data >> 2 ) & 0x03 ]]; p++;
|
||||
*p = palette[m_cga_palette_lut_2bpp[ data & 0x03 ]]; p++;
|
||||
}
|
||||
}
|
||||
|
||||
static MC6845_UPDATE_ROW( cga_gfx_1bpp_update_row ) {
|
||||
isa8_aga_device *aga = downcast<isa8_aga_device *>(device->owner());
|
||||
UINT8 *videoram = aga->m_videoram;
|
||||
const rgb_t *palette = aga->m_palette->palette()->entry_list_raw();
|
||||
MC6845_UPDATE_ROW( isa8_aga_device::cga_gfx_1bpp_update_row )
|
||||
{
|
||||
UINT8 *videoram = m_videoram;
|
||||
const rgb_t *palette = m_palette->palette()->entry_list_raw();
|
||||
UINT32 *p = &bitmap.pix32(y);
|
||||
UINT8 fg = aga->m_cga_color_select & 0x0F;
|
||||
UINT8 fg = m_cga_color_select & 0x0F;
|
||||
int i;
|
||||
|
||||
if ( y == 0 ) logerror("cga_gfx_1bpp_update_row\n");
|
||||
@ -690,22 +723,22 @@ WRITE8_MEMBER ( isa8_aga_device::pc_aga_mda_w )
|
||||
case 8:
|
||||
m_mda_mode_control = data;
|
||||
|
||||
switch( m_mda_mode_control & 0x2a ) {
|
||||
switch (m_mda_mode_control & 0x2a)
|
||||
{
|
||||
case 0x08:
|
||||
m_update_row = mda_text_inten_update_row;
|
||||
m_update_row_type = MDA_TEXT_INTEN;
|
||||
break;
|
||||
case 0x28:
|
||||
m_update_row = mda_text_blink_update_row;
|
||||
m_update_row_type = MDA_TEXT_BLINK;
|
||||
break;
|
||||
default:
|
||||
m_update_row = NULL;
|
||||
m_update_row_type = -1;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
READ8_MEMBER ( isa8_aga_device::pc_aga_cga_r )
|
||||
{
|
||||
UINT8 data = 0xFF;
|
||||
@ -774,51 +807,51 @@ WRITE8_MEMBER (isa8_aga_device:: pc_aga_cga_w )
|
||||
break;
|
||||
case 8:
|
||||
m_cga_mode_control = data;
|
||||
|
||||
|
||||
//logerror("mode set to %02X\n", m_cga_mode_control & 0x3F );
|
||||
switch ( m_cga_mode_control & 0x3F ) {
|
||||
case 0x08: case 0x09: case 0x0C: case 0x0D:
|
||||
m_mc6845->set_hpixels_per_column( 8 );
|
||||
m_update_row = cga_text_inten_update_row;
|
||||
m_update_row_type = CGA_TEXT_INTEN;
|
||||
break;
|
||||
case 0x0A: case 0x0B: case 0x2A: case 0x2B:
|
||||
m_mc6845->set_hpixels_per_column( 8 );
|
||||
if ( CGA_MONITOR == CGA_MONITOR_COMPOSITE ) {
|
||||
m_update_row = cga_gfx_4bppl_update_row;
|
||||
m_update_row_type = CGA_GFX_4BPPL;
|
||||
} else {
|
||||
m_update_row = cga_gfx_2bpp_update_row;
|
||||
m_update_row_type = CGA_GFX_2BPP;
|
||||
}
|
||||
break;
|
||||
break;
|
||||
case 0x0E: case 0x0F: case 0x2E: case 0x2F:
|
||||
m_mc6845->set_hpixels_per_column( 8 );
|
||||
m_update_row = cga_gfx_2bpp_update_row;
|
||||
m_update_row_type = CGA_GFX_2BPP;
|
||||
break;
|
||||
case 0x18: case 0x19: case 0x1C: case 0x1D:
|
||||
m_mc6845->set_hpixels_per_column( 8 );
|
||||
m_update_row = cga_text_inten_alt_update_row;
|
||||
m_update_row_type = CGA_TEXT_INTEN_ALT;
|
||||
break;
|
||||
case 0x1A: case 0x1B: case 0x3A: case 0x3B:
|
||||
m_mc6845->set_hpixels_per_column( 8 );
|
||||
if ( CGA_MONITOR == CGA_MONITOR_COMPOSITE ) {
|
||||
m_update_row = cga_gfx_4bpph_update_row;
|
||||
m_update_row_type = CGA_GFX_4BPPH;
|
||||
} else {
|
||||
m_update_row = cga_gfx_1bpp_update_row;
|
||||
m_update_row_type = CGA_GFX_1BPP;
|
||||
}
|
||||
break;
|
||||
break;
|
||||
case 0x1E: case 0x1F: case 0x3E: case 0x3F:
|
||||
m_mc6845->set_hpixels_per_column( 16 );
|
||||
m_update_row = cga_gfx_1bpp_update_row;
|
||||
m_update_row_type = CGA_GFX_1BPP;
|
||||
break;
|
||||
case 0x28: case 0x29: case 0x2C: case 0x2D:
|
||||
m_mc6845->set_hpixels_per_column( 8 );
|
||||
m_update_row = cga_text_blink_update_row;
|
||||
m_update_row_type = CGA_TEXT_BLINK;
|
||||
break;
|
||||
case 0x38: case 0x39: case 0x3C: case 0x3D:
|
||||
m_mc6845->set_hpixels_per_column( 8 );
|
||||
m_update_row = cga_text_blink_alt_update_row;
|
||||
m_update_row_type = CGA_TEXT_BLINK_ALT;
|
||||
break;
|
||||
default:
|
||||
m_update_row = NULL;
|
||||
m_update_row_type = -1;
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -56,12 +56,24 @@ public:
|
||||
DECLARE_WRITE8_MEMBER( pc_aga_videoram_w );
|
||||
DECLARE_READ8_MEMBER( pc_aga_videoram_r );
|
||||
|
||||
MC6845_UPDATE_ROW( aga_update_row );
|
||||
MC6845_UPDATE_ROW( mda_text_inten_update_row );
|
||||
MC6845_UPDATE_ROW( mda_text_blink_update_row );
|
||||
MC6845_UPDATE_ROW( cga_text_inten_update_row );
|
||||
MC6845_UPDATE_ROW( cga_text_inten_alt_update_row );
|
||||
MC6845_UPDATE_ROW( cga_text_blink_update_row );
|
||||
MC6845_UPDATE_ROW( cga_text_blink_alt_update_row );
|
||||
MC6845_UPDATE_ROW( cga_gfx_4bppl_update_row );
|
||||
MC6845_UPDATE_ROW( cga_gfx_4bpph_update_row );
|
||||
MC6845_UPDATE_ROW( cga_gfx_2bpp_update_row );
|
||||
MC6845_UPDATE_ROW( cga_gfx_1bpp_update_row );
|
||||
|
||||
required_device<palette_device> m_palette;
|
||||
required_device<mc6845_device> m_mc6845;
|
||||
|
||||
required_ioport m_cga_config;
|
||||
|
||||
mc6845_update_row_func m_update_row;
|
||||
int m_update_row_type;
|
||||
AGA_MODE m_mode;
|
||||
UINT8 m_mda_mode_control;
|
||||
UINT8 m_mda_status;
|
||||
|
@ -95,11 +95,26 @@ TODO:
|
||||
if(VERBOSE_CGA>=N) \
|
||||
{ \
|
||||
if( M ) \
|
||||
logerror("%11.6f: %-24s",machine.time().as_double(),(char*)M ); \
|
||||
logerror("%11.6f: %-24s",machine().time().as_double(),(char*)M ); \
|
||||
logerror A; \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
enum
|
||||
{
|
||||
CGA_TEXT_INTEN = 0,
|
||||
CGA_TEXT_INTEN_ALT,
|
||||
CGA_TEXT_INTEN_CG,
|
||||
CGA_TEXT_BLINK,
|
||||
CGA_TEXT_BLINK_ALT,
|
||||
CGA_TEXT_BLINK_SI,
|
||||
CGA_GFX_1BPP,
|
||||
CGA_GFX_2BPP,
|
||||
CGA_GFX_4BPPL,
|
||||
CGA_GFX_4BPPH,
|
||||
PC1512_GFX_4BPP
|
||||
};
|
||||
|
||||
/***************************************************************************
|
||||
|
||||
Static declarations
|
||||
@ -161,30 +176,63 @@ INPUT_PORTS_END
|
||||
#define CGA_CHIPSET_ATI 0x60 /* ATI (supports Plantronics) */
|
||||
#define CGA_CHIPSET_PARADISE 0x80 /* Paradise (used in PC1640) */
|
||||
|
||||
static MC6845_UPDATE_ROW( cga_update_row )
|
||||
MC6845_UPDATE_ROW( isa8_cga_device::crtc_update_row )
|
||||
{
|
||||
isa8_cga_device *cga = downcast<isa8_cga_device *>(device->owner());
|
||||
if ( cga->m_update_row )
|
||||
if (m_update_row_type == -1)
|
||||
return;
|
||||
|
||||
switch (m_update_row_type)
|
||||
{
|
||||
cga->m_update_row( device, bitmap, cliprect, ma, ra, y, x_count, cursor_x, de, hbp, vbp, param );
|
||||
case CGA_TEXT_INTEN:
|
||||
cga_text_inten_update_row(bitmap, cliprect, ma, ra, y, x_count, cursor_x, de, hbp, vbp);
|
||||
break;
|
||||
case CGA_TEXT_INTEN_ALT:
|
||||
cga_text_inten_alt_update_row(bitmap, cliprect, ma, ra, y, x_count, cursor_x, de, hbp, vbp);
|
||||
break;
|
||||
case CGA_TEXT_INTEN_CG:
|
||||
cga_text_inten_comp_grey_update_row(bitmap, cliprect, ma, ra, y, x_count, cursor_x, de, hbp, vbp);
|
||||
break;
|
||||
case CGA_TEXT_BLINK:
|
||||
cga_text_blink_update_row(bitmap, cliprect, ma, ra, y, x_count, cursor_x, de, hbp, vbp);
|
||||
break;
|
||||
case CGA_TEXT_BLINK_ALT:
|
||||
cga_text_blink_alt_update_row(bitmap, cliprect, ma, ra, y, x_count, cursor_x, de, hbp, vbp);
|
||||
break;
|
||||
case CGA_TEXT_BLINK_SI:
|
||||
cga_text_blink_update_row_si(bitmap, cliprect, ma, ra, y, x_count, cursor_x, de, hbp, vbp);
|
||||
break;
|
||||
case CGA_GFX_1BPP:
|
||||
cga_gfx_1bpp_update_row(bitmap, cliprect, ma, ra, y, x_count, cursor_x, de, hbp, vbp);
|
||||
break;
|
||||
case CGA_GFX_2BPP:
|
||||
cga_gfx_2bpp_update_row(bitmap, cliprect, ma, ra, y, x_count, cursor_x, de, hbp, vbp);
|
||||
break;
|
||||
case CGA_GFX_4BPPL:
|
||||
cga_gfx_4bppl_update_row(bitmap, cliprect, ma, ra, y, x_count, cursor_x, de, hbp, vbp);
|
||||
break;
|
||||
case CGA_GFX_4BPPH:
|
||||
cga_gfx_4bpph_update_row(bitmap, cliprect, ma, ra, y, x_count, cursor_x, de, hbp, vbp);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static MC6845_INTERFACE( mc6845_cga_intf )
|
||||
MC6845_UPDATE_ROW( isa8_cga_pc1512_device::crtc_update_row )
|
||||
{
|
||||
false, /* show border area */
|
||||
0,0,0,0, /* visarea adjustment */
|
||||
8, /* numbers of pixels per video memory address */
|
||||
NULL, /* begin_update */
|
||||
cga_update_row, /* update_row */
|
||||
NULL, /* end_update */
|
||||
DEVCB_NULL, /* on_de_changed */
|
||||
DEVCB_NULL, /* on_cur_changed */
|
||||
DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, isa8_cga_device, hsync_changed), /* on_hsync_changed */
|
||||
DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, isa8_cga_device, vsync_changed), /* on_vsync_changed */
|
||||
NULL
|
||||
};
|
||||
if (m_update_row_type == -1)
|
||||
return;
|
||||
|
||||
switch (m_update_row_type)
|
||||
{
|
||||
case PC1512_GFX_4BPP:
|
||||
pc1512_gfx_4bpp_update_row(bitmap, cliprect, ma, ra, y, x_count, cursor_x, de, hbp, vbp);
|
||||
break;
|
||||
default:
|
||||
isa8_cga_device::crtc_update_row(bitmap, cliprect, ma, ra, y, x_count, cursor_x, de, hbp, vbp);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#define CGA_HCLK (XTAL_14_31818MHz/8)
|
||||
#define CGA_LCLK (XTAL_14_31818MHz/16)
|
||||
@ -197,7 +245,12 @@ static MACHINE_CONFIG_FRAGMENT( cga )
|
||||
|
||||
MCFG_PALETTE_ADD("palette", /* CGA_PALETTE_SETS * 16*/ 65536 )
|
||||
|
||||
MCFG_MC6845_ADD(CGA_MC6845_NAME, MC6845, CGA_SCREEN_NAME, XTAL_14_31818MHz/8, mc6845_cga_intf)
|
||||
MCFG_MC6845_ADD(CGA_MC6845_NAME, MC6845, CGA_SCREEN_NAME, XTAL_14_31818MHz/8)
|
||||
MCFG_MC6845_SHOW_BORDER_AREA(false)
|
||||
MCFG_MC6845_CHAR_WIDTH(8)
|
||||
MCFG_MC6845_UPDATE_ROW_CB(isa8_cga_device, crtc_update_row)
|
||||
MCFG_MC6845_OUT_HSYNC_CB(WRITELINE(isa8_cga_device, hsync_changed))
|
||||
MCFG_MC6845_OUT_VSYNC_CB(WRITELINE(isa8_cga_device, vsync_changed))
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
|
||||
@ -247,6 +300,7 @@ isa8_cga_device::isa8_cga_device(const machine_config &mconfig, const char *tag,
|
||||
device_t(mconfig, ISA8_CGA, "IBM Color/Graphics Monitor Adapter", tag, owner, clock, "cga", __FILE__),
|
||||
device_isa8_card_interface(mconfig, *this),
|
||||
m_cga_config(*this, "cga_config"),
|
||||
m_update_row_type(-1),
|
||||
m_vram_size( 0x4000 ),
|
||||
m_palette(*this, "palette")
|
||||
{
|
||||
@ -261,6 +315,7 @@ isa8_cga_device::isa8_cga_device(const machine_config &mconfig, device_type type
|
||||
device_t(mconfig, type, name, tag, owner, clock, shortname, source),
|
||||
device_isa8_card_interface(mconfig, *this),
|
||||
m_cga_config(*this, "cga_config"),
|
||||
m_update_row_type(-1),
|
||||
m_vram_size( 0x4000 ),
|
||||
m_palette(*this, "palette")
|
||||
{
|
||||
@ -283,7 +338,6 @@ void isa8_cga_device::device_start()
|
||||
|
||||
set_isa_device();
|
||||
m_vram.resize(m_vram_size);
|
||||
m_update_row = NULL;
|
||||
m_isa->install_device(0x3d0, 0x3df, 0, 0, read8_delegate( FUNC(isa8_cga_device::io_read), this ), write8_delegate( FUNC(isa8_cga_device::io_write), this ) );
|
||||
m_isa->install_bank(0xb8000, 0xb8000 + MIN(0x8000,m_vram_size) - 1, 0, m_vram_size & 0x4000, "bank_cga", m_vram);
|
||||
|
||||
@ -320,7 +374,6 @@ void isa8_cga_device::device_start()
|
||||
|
||||
void isa8_cga_device::device_reset()
|
||||
{
|
||||
m_update_row = NULL;
|
||||
m_framecnt = 0;
|
||||
m_mode_control = 0;
|
||||
m_vsync = 0;
|
||||
@ -414,14 +467,12 @@ isa8_cga_superimpose_device::isa8_cga_superimpose_device(const machine_config &m
|
||||
The character cell size is 16x8
|
||||
***************************************************************************/
|
||||
|
||||
static MC6845_UPDATE_ROW( cga_text_inten_update_row )
|
||||
MC6845_UPDATE_ROW( isa8_cga_device::cga_text_inten_update_row )
|
||||
{
|
||||
isa8_cga_device *cga = downcast<isa8_cga_device *>(device->owner());
|
||||
UINT8 *videoram = &cga->m_vram[cga->m_start_offset];
|
||||
UINT8 *videoram = &m_vram[m_start_offset];
|
||||
UINT32 *p = &bitmap.pix32(y);
|
||||
const rgb_t *palette = cga->m_palette->palette()->entry_list_raw();
|
||||
const rgb_t *palette = m_palette->palette()->entry_list_raw();
|
||||
int i;
|
||||
running_machine &machine = device->machine();
|
||||
|
||||
if ( y == 0 ) CGA_LOG(1,"cga_text_inten_update_row",("\n"));
|
||||
for ( i = 0; i < x_count; i++ )
|
||||
@ -429,11 +480,11 @@ static MC6845_UPDATE_ROW( cga_text_inten_update_row )
|
||||
UINT16 offset = ( ( ma + i ) << 1 ) & 0x3fff;
|
||||
UINT8 chr = videoram[ offset ];
|
||||
UINT8 attr = videoram[ offset +1 ];
|
||||
UINT8 data = cga->m_chr_gen[ chr * 8 + ra ];
|
||||
UINT8 data = m_chr_gen[ chr * 8 + ra ];
|
||||
UINT16 fg = attr & 0x0F;
|
||||
UINT16 bg = attr >> 4;
|
||||
|
||||
if ( i == cursor_x && ( cga->m_framecnt & 0x08 ) )
|
||||
if ( i == cursor_x && ( m_framecnt & 0x08 ) )
|
||||
{
|
||||
data = 0xFF;
|
||||
}
|
||||
@ -455,14 +506,12 @@ static MC6845_UPDATE_ROW( cga_text_inten_update_row )
|
||||
The character cell size is 16x8. Composite monitor, greyscale.
|
||||
***************************************************************************/
|
||||
|
||||
static MC6845_UPDATE_ROW( cga_text_inten_comp_grey_update_row )
|
||||
MC6845_UPDATE_ROW( isa8_cga_device::cga_text_inten_comp_grey_update_row )
|
||||
{
|
||||
isa8_cga_device *cga = downcast<isa8_cga_device *>(device->owner());
|
||||
UINT8 *videoram = &cga->m_vram[cga->m_start_offset];
|
||||
UINT8 *videoram = &m_vram[m_start_offset];
|
||||
UINT32 *p = &bitmap.pix32(y);
|
||||
const rgb_t *palette = cga->m_palette->palette()->entry_list_raw();
|
||||
const rgb_t *palette = m_palette->palette()->entry_list_raw();
|
||||
int i;
|
||||
running_machine &machine = device->machine();
|
||||
|
||||
if ( y == 0 ) CGA_LOG(1,"cga_text_inten_update_row",("\n"));
|
||||
for ( i = 0; i < x_count; i++ )
|
||||
@ -470,11 +519,11 @@ static MC6845_UPDATE_ROW( cga_text_inten_comp_grey_update_row )
|
||||
UINT16 offset = ( ( ma + i ) << 1 ) & 0x3fff;
|
||||
UINT8 chr = videoram[ offset ];
|
||||
UINT8 attr = videoram[ offset +1 ];
|
||||
UINT8 data = cga->m_chr_gen[ chr * 8 + ra ];
|
||||
UINT8 data = m_chr_gen[ chr * 8 + ra ];
|
||||
UINT16 fg = 0x10 + ( attr & 0x0F );
|
||||
UINT16 bg = 0x10 + ( ( attr >> 4 ) & 0x07 );
|
||||
|
||||
if ( i == cursor_x && ( cga->m_framecnt & 0x08 ) )
|
||||
if ( i == cursor_x && ( m_framecnt & 0x08 ) )
|
||||
{
|
||||
data = 0xFF;
|
||||
}
|
||||
@ -495,14 +544,12 @@ static MC6845_UPDATE_ROW( cga_text_inten_comp_grey_update_row )
|
||||
The character cell size is 16x8
|
||||
***************************************************************************/
|
||||
|
||||
static MC6845_UPDATE_ROW( cga_text_inten_alt_update_row )
|
||||
MC6845_UPDATE_ROW( isa8_cga_device::cga_text_inten_alt_update_row )
|
||||
{
|
||||
isa8_cga_device *cga = downcast<isa8_cga_device *>(device->owner());
|
||||
UINT8 *videoram = &cga->m_vram[cga->m_start_offset];
|
||||
UINT8 *videoram = &m_vram[m_start_offset];
|
||||
UINT32 *p = &bitmap.pix32(y);
|
||||
const rgb_t *palette = cga->m_palette->palette()->entry_list_raw();
|
||||
const rgb_t *palette = m_palette->palette()->entry_list_raw();
|
||||
int i;
|
||||
running_machine &machine = device->machine();
|
||||
|
||||
if ( y == 0 ) CGA_LOG(1,"cga_text_inten_alt_update_row",("\n"));
|
||||
for ( i = 0; i < x_count; i++ )
|
||||
@ -510,10 +557,10 @@ static MC6845_UPDATE_ROW( cga_text_inten_alt_update_row )
|
||||
UINT16 offset = ( ( ma + i ) << 1 ) & 0x3fff;
|
||||
UINT8 chr = videoram[ offset ];
|
||||
UINT8 attr = videoram[ offset +1 ];
|
||||
UINT8 data = cga->m_chr_gen[ chr * 8 + ra ];
|
||||
UINT8 data = m_chr_gen[ chr * 8 + ra ];
|
||||
UINT16 fg = attr & 0x0F;
|
||||
|
||||
if ( i == cursor_x && ( cga->m_framecnt & 0x08 ) )
|
||||
if ( i == cursor_x && ( m_framecnt & 0x08 ) )
|
||||
{
|
||||
data = 0xFF;
|
||||
}
|
||||
@ -535,14 +582,12 @@ static MC6845_UPDATE_ROW( cga_text_inten_alt_update_row )
|
||||
The character cell size is 16x8
|
||||
***************************************************************************/
|
||||
|
||||
static MC6845_UPDATE_ROW( cga_text_blink_update_row )
|
||||
MC6845_UPDATE_ROW( isa8_cga_device::cga_text_blink_update_row )
|
||||
{
|
||||
isa8_cga_device *cga = downcast<isa8_cga_device *>(device->owner());
|
||||
UINT8 *videoram = &cga->m_vram[cga->m_start_offset];
|
||||
UINT8 *videoram = &m_vram[m_start_offset];
|
||||
UINT32 *p = &bitmap.pix32(y);
|
||||
const rgb_t *palette = cga->m_palette->palette()->entry_list_raw();
|
||||
const rgb_t *palette = m_palette->palette()->entry_list_raw();
|
||||
int i;
|
||||
running_machine &machine = device->machine();
|
||||
|
||||
if ( y == 0 ) CGA_LOG(1,"cga_text_blink_update_row",("\n"));
|
||||
for ( i = 0; i < x_count; i++ )
|
||||
@ -550,20 +595,20 @@ static MC6845_UPDATE_ROW( cga_text_blink_update_row )
|
||||
UINT16 offset = ( ( ma + i ) << 1 ) & 0x3fff;
|
||||
UINT8 chr = videoram[ offset ];
|
||||
UINT8 attr = videoram[ offset +1 ];
|
||||
UINT8 data = cga->m_chr_gen[ chr * 8 + ra ];
|
||||
UINT8 data = m_chr_gen[ chr * 8 + ra ];
|
||||
UINT16 fg = attr & 0x0F;
|
||||
UINT16 bg = (attr >> 4) & 0x07;
|
||||
|
||||
if ( i == cursor_x )
|
||||
{
|
||||
if ( cga->m_framecnt & 0x08 )
|
||||
if ( m_framecnt & 0x08 )
|
||||
{
|
||||
data = 0xFF;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( ( attr & 0x80 ) && ( cga->m_framecnt & 0x10 ) )
|
||||
if ( ( attr & 0x80 ) && ( m_framecnt & 0x10 ) )
|
||||
{
|
||||
data = 0x00;
|
||||
}
|
||||
@ -580,14 +625,12 @@ static MC6845_UPDATE_ROW( cga_text_blink_update_row )
|
||||
}
|
||||
}
|
||||
|
||||
static MC6845_UPDATE_ROW( cga_text_blink_update_row_si )
|
||||
MC6845_UPDATE_ROW( isa8_cga_device::cga_text_blink_update_row_si )
|
||||
{
|
||||
isa8_cga_device *cga = downcast<isa8_cga_device *>(device->owner());
|
||||
UINT8 *videoram = &cga->m_vram[cga->m_start_offset];
|
||||
UINT8 *videoram = &m_vram[m_start_offset];
|
||||
UINT32 *p = &bitmap.pix32(y);
|
||||
const rgb_t *palette = cga->m_palette->palette()->entry_list_raw();
|
||||
const rgb_t *palette = m_palette->palette()->entry_list_raw();
|
||||
int i;
|
||||
running_machine &machine = device->machine();
|
||||
|
||||
if ( y == 0 ) CGA_LOG(1,"cga_text_blink_update_row",("\n"));
|
||||
for ( i = 0; i < x_count; i++ )
|
||||
@ -595,21 +638,21 @@ static MC6845_UPDATE_ROW( cga_text_blink_update_row_si )
|
||||
UINT16 offset = ( ( ma + i ) << 1 ) & 0x3fff;
|
||||
UINT8 chr = videoram[ offset ];
|
||||
UINT8 attr = videoram[ offset +1 ];
|
||||
UINT8 data = cga->m_chr_gen[ chr * 8 + ra ];
|
||||
UINT8 data = m_chr_gen[ chr * 8 + ra ];
|
||||
UINT16 fg = attr & 0x0F;
|
||||
UINT16 bg = (attr >> 4) & 0x07;
|
||||
UINT8 xi;
|
||||
|
||||
if ( i == cursor_x )
|
||||
{
|
||||
if ( cga->m_framecnt & 0x08 )
|
||||
if ( m_framecnt & 0x08 )
|
||||
{
|
||||
data = 0xFF;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( ( attr & 0x80 ) && ( cga->m_framecnt & 0x10 ) )
|
||||
if ( ( attr & 0x80 ) && ( m_framecnt & 0x10 ) )
|
||||
{
|
||||
data = 0x00;
|
||||
}
|
||||
@ -633,14 +676,12 @@ static MC6845_UPDATE_ROW( cga_text_blink_update_row_si )
|
||||
The character cell size is 16x8
|
||||
***************************************************************************/
|
||||
|
||||
static MC6845_UPDATE_ROW( cga_text_blink_alt_update_row )
|
||||
MC6845_UPDATE_ROW( isa8_cga_device::cga_text_blink_alt_update_row )
|
||||
{
|
||||
isa8_cga_device *cga = downcast<isa8_cga_device *>(device->owner());
|
||||
UINT8 *videoram = &cga->m_vram[cga->m_start_offset];
|
||||
UINT8 *videoram = &m_vram[m_start_offset];
|
||||
UINT32 *p = &bitmap.pix32(y);
|
||||
const rgb_t *palette = cga->m_palette->palette()->entry_list_raw();
|
||||
const rgb_t *palette = m_palette->palette()->entry_list_raw();
|
||||
int i;
|
||||
running_machine &machine = device->machine();
|
||||
|
||||
if ( y == 0 ) CGA_LOG(1,"cga_text_blink_alt_update_row",("\n"));
|
||||
for ( i = 0; i < x_count; i++ )
|
||||
@ -648,20 +689,20 @@ static MC6845_UPDATE_ROW( cga_text_blink_alt_update_row )
|
||||
UINT16 offset = ( ( ma + i ) << 1 ) & 0x3fff;
|
||||
UINT8 chr = videoram[ offset ];
|
||||
UINT8 attr = videoram[ offset +1 ];
|
||||
UINT8 data = cga->m_chr_gen[ chr * 8 + ra ];
|
||||
UINT8 data = m_chr_gen[ chr * 8 + ra ];
|
||||
UINT16 fg = attr & 0x07;
|
||||
UINT16 bg = 0;
|
||||
|
||||
if ( i == cursor_x )
|
||||
{
|
||||
if ( cga->m_framecnt & 0x08 )
|
||||
if ( m_framecnt & 0x08 )
|
||||
{
|
||||
data = 0xFF;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( ( attr & 0x80 ) && ( cga->m_framecnt & 0x10 ) )
|
||||
if ( ( attr & 0x80 ) && ( m_framecnt & 0x10 ) )
|
||||
{
|
||||
data = 0x00;
|
||||
bg = ( attr >> 4 ) & 0x07;
|
||||
@ -682,14 +723,12 @@ static MC6845_UPDATE_ROW( cga_text_blink_alt_update_row )
|
||||
|
||||
/* The lo-res (320x200) graphics mode on a colour composite monitor */
|
||||
|
||||
static MC6845_UPDATE_ROW( cga_gfx_4bppl_update_row )
|
||||
MC6845_UPDATE_ROW( isa8_cga_device::cga_gfx_4bppl_update_row )
|
||||
{
|
||||
isa8_cga_device *cga = downcast<isa8_cga_device *>(device->owner());
|
||||
UINT8 *videoram = &cga->m_vram[cga->m_start_offset];
|
||||
UINT8 *videoram = &m_vram[m_start_offset];
|
||||
UINT32 *p = &bitmap.pix32(y);
|
||||
const rgb_t *palette = cga->m_palette->palette()->entry_list_raw();
|
||||
const rgb_t *palette = m_palette->palette()->entry_list_raw();
|
||||
int i;
|
||||
running_machine &machine = device->machine();
|
||||
|
||||
if ( y == 0 ) CGA_LOG(1,"cga_gfx_4bppl_update_row",("\n"));
|
||||
for ( i = 0; i < x_count; i++ )
|
||||
@ -743,14 +782,12 @@ static const UINT8 yc_lut[16][8] =
|
||||
};
|
||||
#endif
|
||||
|
||||
static MC6845_UPDATE_ROW( cga_gfx_4bpph_update_row )
|
||||
MC6845_UPDATE_ROW( isa8_cga_device::cga_gfx_4bpph_update_row )
|
||||
{
|
||||
isa8_cga_device *cga = downcast<isa8_cga_device *>(device->owner());
|
||||
UINT8 *videoram = &cga->m_vram[cga->m_start_offset];
|
||||
UINT8 *videoram = &m_vram[m_start_offset];
|
||||
UINT32 *p = &bitmap.pix32(y);
|
||||
const rgb_t *palette = cga->m_palette->palette()->entry_list_raw();
|
||||
const rgb_t *palette = m_palette->palette()->entry_list_raw();
|
||||
int i;
|
||||
running_machine &machine = device->machine();
|
||||
|
||||
if ( y == 0 ) CGA_LOG(1,"cga_gfx_4bpph_update_row",("\n"));
|
||||
|
||||
@ -788,14 +825,12 @@ static MC6845_UPDATE_ROW( cga_gfx_4bpph_update_row )
|
||||
cga fetches 2 byte per mc6845 access.
|
||||
***************************************************************************/
|
||||
|
||||
static MC6845_UPDATE_ROW( cga_gfx_2bpp_update_row )
|
||||
MC6845_UPDATE_ROW( isa8_cga_device::cga_gfx_2bpp_update_row )
|
||||
{
|
||||
isa8_cga_device *cga = downcast<isa8_cga_device *>(device->owner());
|
||||
UINT8 *videoram = &cga->m_vram[cga->m_start_offset];
|
||||
UINT8 *videoram = &m_vram[m_start_offset];
|
||||
UINT32 *p = &bitmap.pix32(y);
|
||||
const rgb_t *palette = cga->m_palette->palette()->entry_list_raw();
|
||||
const rgb_t *palette = m_palette->palette()->entry_list_raw();
|
||||
int i;
|
||||
running_machine &machine = device->machine();
|
||||
|
||||
if ( y == 0 ) CGA_LOG(1,"cga_gfx_2bpp_update_row",("\n"));
|
||||
for ( i = 0; i < x_count; i++ )
|
||||
@ -803,17 +838,17 @@ static MC6845_UPDATE_ROW( cga_gfx_2bpp_update_row )
|
||||
UINT16 offset = ( ( ( ma + i ) << 1 ) & 0x1fff ) | ( ( y & 1 ) << 13 );
|
||||
UINT8 data = videoram[ offset ];
|
||||
|
||||
*p = palette[cga->m_palette_lut_2bpp[ ( data >> 6 ) & 0x03 ]]; p++;
|
||||
*p = palette[cga->m_palette_lut_2bpp[ ( data >> 4 ) & 0x03 ]]; p++;
|
||||
*p = palette[cga->m_palette_lut_2bpp[ ( data >> 2 ) & 0x03 ]]; p++;
|
||||
*p = palette[cga->m_palette_lut_2bpp[ data & 0x03 ]]; p++;
|
||||
*p = palette[m_palette_lut_2bpp[ ( data >> 6 ) & 0x03 ]]; p++;
|
||||
*p = palette[m_palette_lut_2bpp[ ( data >> 4 ) & 0x03 ]]; p++;
|
||||
*p = palette[m_palette_lut_2bpp[ ( data >> 2 ) & 0x03 ]]; p++;
|
||||
*p = palette[m_palette_lut_2bpp[ data & 0x03 ]]; p++;
|
||||
|
||||
data = videoram[ offset+1 ];
|
||||
|
||||
*p = palette[cga->m_palette_lut_2bpp[ ( data >> 6 ) & 0x03 ]]; p++;
|
||||
*p = palette[cga->m_palette_lut_2bpp[ ( data >> 4 ) & 0x03 ]]; p++;
|
||||
*p = palette[cga->m_palette_lut_2bpp[ ( data >> 2 ) & 0x03 ]]; p++;
|
||||
*p = palette[cga->m_palette_lut_2bpp[ data & 0x03 ]]; p++;
|
||||
*p = palette[m_palette_lut_2bpp[ ( data >> 6 ) & 0x03 ]]; p++;
|
||||
*p = palette[m_palette_lut_2bpp[ ( data >> 4 ) & 0x03 ]]; p++;
|
||||
*p = palette[m_palette_lut_2bpp[ ( data >> 2 ) & 0x03 ]]; p++;
|
||||
*p = palette[m_palette_lut_2bpp[ data & 0x03 ]]; p++;
|
||||
}
|
||||
}
|
||||
|
||||
@ -825,15 +860,13 @@ static MC6845_UPDATE_ROW( cga_gfx_2bpp_update_row )
|
||||
Even scanlines are from CGA_base + 0x0000, odd from CGA_base + 0x2000
|
||||
***************************************************************************/
|
||||
|
||||
static MC6845_UPDATE_ROW( cga_gfx_1bpp_update_row )
|
||||
MC6845_UPDATE_ROW( isa8_cga_device::cga_gfx_1bpp_update_row )
|
||||
{
|
||||
isa8_cga_device *cga = downcast<isa8_cga_device *>(device->owner());
|
||||
UINT8 *videoram = &cga->m_vram[cga->m_start_offset];
|
||||
UINT8 *videoram = &m_vram[m_start_offset];
|
||||
UINT32 *p = &bitmap.pix32(y);
|
||||
const rgb_t *palette = cga->m_palette->palette()->entry_list_raw();
|
||||
UINT8 fg = cga->m_color_select & 0x0F;
|
||||
const rgb_t *palette = m_palette->palette()->entry_list_raw();
|
||||
UINT8 fg = m_color_select & 0x0F;
|
||||
int i;
|
||||
running_machine &machine = device->machine();
|
||||
|
||||
if ( y == 0 ) CGA_LOG(1,"cga_gfx_1bpp_update_row",("\n"));
|
||||
for ( i = 0; i < x_count; i++ )
|
||||
@ -952,53 +985,53 @@ void isa8_cga_device::mode_control_w(UINT8 data)
|
||||
if ( m_mode_control & 0x04 )
|
||||
{
|
||||
/* Composite greyscale */
|
||||
m_update_row = cga_text_inten_comp_grey_update_row;
|
||||
m_update_row_type = CGA_TEXT_INTEN_CG;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Composite colour */
|
||||
m_update_row = cga_text_inten_update_row;
|
||||
m_update_row_type = CGA_TEXT_INTEN;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
/* RGB colour */
|
||||
m_update_row = cga_text_inten_update_row;
|
||||
m_update_row_type = CGA_TEXT_INTEN;
|
||||
}
|
||||
break;
|
||||
case 0x0A: case 0x0B: case 0x2A: case 0x2B:
|
||||
mc6845->set_hpixels_per_column( 8 );
|
||||
if ( monitor == CGA_MONITOR_COMPOSITE )
|
||||
{
|
||||
m_update_row = cga_gfx_4bppl_update_row;
|
||||
m_update_row_type = CGA_GFX_4BPPL;
|
||||
}
|
||||
else
|
||||
{
|
||||
m_update_row = cga_gfx_2bpp_update_row;
|
||||
m_update_row_type = CGA_GFX_2BPP;
|
||||
}
|
||||
break;
|
||||
case 0x0E: case 0x0F: case 0x2E: case 0x2F:
|
||||
mc6845->set_hpixels_per_column( 8 );
|
||||
m_update_row = cga_gfx_2bpp_update_row;
|
||||
m_update_row_type = CGA_GFX_2BPP;
|
||||
break;
|
||||
case 0x18: case 0x19: case 0x1C: case 0x1D:
|
||||
mc6845->set_hpixels_per_column( 8 );
|
||||
m_update_row = cga_text_inten_alt_update_row;
|
||||
m_update_row_type = CGA_TEXT_INTEN_ALT;
|
||||
break;
|
||||
case 0x1A: case 0x1B: case 0x3A: case 0x3B:
|
||||
mc6845->set_hpixels_per_column( 16 );
|
||||
if ( monitor == CGA_MONITOR_COMPOSITE )
|
||||
{
|
||||
m_update_row = cga_gfx_4bpph_update_row;
|
||||
m_update_row_type = CGA_GFX_4BPPH;
|
||||
}
|
||||
else
|
||||
{
|
||||
m_update_row = cga_gfx_1bpp_update_row;
|
||||
m_update_row_type = CGA_GFX_1BPP;
|
||||
}
|
||||
break;
|
||||
case 0x1E: case 0x1F: case 0x3E: case 0x3F:
|
||||
mc6845->set_hpixels_per_column( 16 );
|
||||
m_update_row = cga_gfx_1bpp_update_row;
|
||||
m_update_row_type = CGA_GFX_1BPP;
|
||||
break;
|
||||
case 0x28: case 0x29: case 0x2C: case 0x2D:
|
||||
mc6845->set_hpixels_per_column( 8 );
|
||||
@ -1007,26 +1040,26 @@ void isa8_cga_device::mode_control_w(UINT8 data)
|
||||
if ( m_mode_control & 0x04 )
|
||||
{
|
||||
/* Composite greyscale */
|
||||
m_update_row = m_superimpose ? cga_text_blink_update_row_si : cga_text_blink_update_row;
|
||||
m_update_row_type = m_superimpose ? CGA_TEXT_BLINK_SI : CGA_TEXT_BLINK;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Composite colour */
|
||||
m_update_row = m_superimpose ? cga_text_blink_update_row_si : cga_text_blink_update_row;
|
||||
m_update_row_type = m_superimpose ? CGA_TEXT_BLINK_SI : CGA_TEXT_BLINK;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
/* RGB colour */
|
||||
m_update_row = m_superimpose ? cga_text_blink_update_row_si : cga_text_blink_update_row;
|
||||
m_update_row_type = m_superimpose ? CGA_TEXT_BLINK_SI : CGA_TEXT_BLINK;
|
||||
}
|
||||
break;
|
||||
case 0x38: case 0x39: case 0x3C: case 0x3D:
|
||||
mc6845->set_hpixels_per_column( 8 );
|
||||
m_update_row = cga_text_blink_alt_update_row;
|
||||
m_update_row_type = CGA_TEXT_BLINK_ALT;
|
||||
break;
|
||||
default:
|
||||
m_update_row = NULL;
|
||||
m_update_row_type = -1;
|
||||
break;
|
||||
}
|
||||
|
||||
@ -1295,24 +1328,22 @@ WRITE8_MEMBER( isa8_cga_device::io_write )
|
||||
//}
|
||||
|
||||
|
||||
static MC6845_UPDATE_ROW( pc1512_gfx_4bpp_update_row )
|
||||
MC6845_UPDATE_ROW( isa8_cga_pc1512_device::pc1512_gfx_4bpp_update_row )
|
||||
{
|
||||
isa8_cga_pc1512_device *cga = downcast<isa8_cga_pc1512_device *>(device->owner());
|
||||
UINT8 *videoram = &cga->m_vram[cga->m_start_offset];
|
||||
UINT8 *videoram = &m_vram[m_start_offset];
|
||||
UINT32 *p = &bitmap.pix32(y);
|
||||
const rgb_t *palette = cga->m_palette->palette()->entry_list_raw();
|
||||
const rgb_t *palette = m_palette->palette()->entry_list_raw();
|
||||
UINT16 offset_base = ra << 13;
|
||||
int j;
|
||||
running_machine &machine = device->machine();
|
||||
|
||||
if ( y == 0 ) CGA_LOG(1,"pc1512_gfx_4bpp_update_row",("\n"));
|
||||
for ( j = 0; j < x_count; j++ )
|
||||
{
|
||||
UINT16 offset = offset_base | ( ( ma + j ) & 0x1FFF );
|
||||
UINT16 i = ( cga->m_color_select & 8 ) ? videoram[ isa8_cga_pc1512_device::vram_offset[3] | offset ] << 3 : 0;
|
||||
UINT16 r = ( cga->m_color_select & 4 ) ? videoram[ isa8_cga_pc1512_device::vram_offset[2] | offset ] << 2 : 0;
|
||||
UINT16 g = ( cga->m_color_select & 2 ) ? videoram[ isa8_cga_pc1512_device::vram_offset[1] | offset ] << 1 : 0;
|
||||
UINT16 b = ( cga->m_color_select & 1 ) ? videoram[ isa8_cga_pc1512_device::vram_offset[0] | offset ] : 0;
|
||||
UINT16 i = ( m_color_select & 8 ) ? videoram[ isa8_cga_pc1512_device::vram_offset[3] | offset ] << 3 : 0;
|
||||
UINT16 r = ( m_color_select & 4 ) ? videoram[ isa8_cga_pc1512_device::vram_offset[2] | offset ] << 2 : 0;
|
||||
UINT16 g = ( m_color_select & 2 ) ? videoram[ isa8_cga_pc1512_device::vram_offset[1] | offset ] << 1 : 0;
|
||||
UINT16 b = ( m_color_select & 1 ) ? videoram[ isa8_cga_pc1512_device::vram_offset[0] | offset ] : 0;
|
||||
|
||||
*p = palette[( ( i & 0x400 ) | ( r & 0x200 ) | ( g & 0x100 ) | ( b & 0x80 ) ) >> 7]; p++;
|
||||
*p = palette[( ( i & 0x200 ) | ( r & 0x100 ) | ( g & 0x080 ) | ( b & 0x40 ) ) >> 6]; p++;
|
||||
@ -1364,45 +1395,45 @@ WRITE8_MEMBER( isa8_cga_pc1512_device::io_write )
|
||||
{
|
||||
case 0x08: case 0x09: case 0x0C: case 0x0D:
|
||||
mc6845->set_hpixels_per_column( 8 );
|
||||
m_update_row = cga_text_inten_update_row;
|
||||
m_update_row_type = CGA_TEXT_INTEN;
|
||||
break;
|
||||
case 0x0A: case 0x0B: case 0x2A: case 0x2B:
|
||||
mc6845->set_hpixels_per_column( 8 );
|
||||
if ( ( CGA_MONITOR ) == CGA_MONITOR_COMPOSITE )
|
||||
{
|
||||
m_update_row = cga_gfx_4bppl_update_row;
|
||||
m_update_row_type = CGA_GFX_4BPPL;
|
||||
}
|
||||
else
|
||||
{
|
||||
m_update_row = cga_gfx_2bpp_update_row;
|
||||
m_update_row_type = CGA_GFX_2BPP;
|
||||
}
|
||||
break;
|
||||
case 0x0E: case 0x0F: case 0x2E: case 0x2F:
|
||||
mc6845->set_hpixels_per_column( 8 );
|
||||
m_update_row = cga_gfx_2bpp_update_row;
|
||||
m_update_row_type = CGA_GFX_2BPP;
|
||||
break;
|
||||
case 0x18: case 0x19: case 0x1C: case 0x1D:
|
||||
mc6845->set_hpixels_per_column( 8 );
|
||||
m_update_row = cga_text_inten_alt_update_row;
|
||||
m_update_row_type = CGA_TEXT_INTEN_ALT;
|
||||
break;
|
||||
case 0x1A: case 0x1B: case 0x3A: case 0x3B:
|
||||
mc6845->set_hpixels_per_column( 8 );
|
||||
m_update_row = pc1512_gfx_4bpp_update_row;
|
||||
m_update_row_type = PC1512_GFX_4BPP;
|
||||
break;
|
||||
case 0x1E: case 0x1F: case 0x3E: case 0x3F:
|
||||
mc6845->set_hpixels_per_column( 16 );
|
||||
m_update_row = cga_gfx_1bpp_update_row;
|
||||
m_update_row_type = CGA_GFX_1BPP;
|
||||
break;
|
||||
case 0x28: case 0x29: case 0x2C: case 0x2D:
|
||||
mc6845->set_hpixels_per_column( 8 );
|
||||
m_update_row = cga_text_blink_update_row;
|
||||
m_update_row_type = CGA_TEXT_BLINK;
|
||||
break;
|
||||
case 0x38: case 0x39: case 0x3C: case 0x3D:
|
||||
mc6845->set_hpixels_per_column( 8 );
|
||||
m_update_row = cga_text_blink_alt_update_row;
|
||||
m_update_row_type = CGA_TEXT_BLINK_ALT;
|
||||
break;
|
||||
default:
|
||||
m_update_row = NULL;
|
||||
m_update_row_type = -1;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
@ -27,6 +27,18 @@ public:
|
||||
isa8_cga_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
|
||||
isa8_cga_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source);
|
||||
|
||||
virtual MC6845_UPDATE_ROW( crtc_update_row );
|
||||
MC6845_UPDATE_ROW( cga_text_inten_update_row );
|
||||
MC6845_UPDATE_ROW( cga_text_inten_comp_grey_update_row );
|
||||
MC6845_UPDATE_ROW( cga_text_inten_alt_update_row );
|
||||
MC6845_UPDATE_ROW( cga_text_blink_update_row );
|
||||
MC6845_UPDATE_ROW( cga_text_blink_update_row_si );
|
||||
MC6845_UPDATE_ROW( cga_text_blink_alt_update_row );
|
||||
MC6845_UPDATE_ROW( cga_gfx_4bppl_update_row );
|
||||
MC6845_UPDATE_ROW( cga_gfx_4bpph_update_row );
|
||||
MC6845_UPDATE_ROW( cga_gfx_2bpp_update_row );
|
||||
MC6845_UPDATE_ROW( cga_gfx_1bpp_update_row );
|
||||
|
||||
// optional information overrides
|
||||
virtual machine_config_constructor device_mconfig_additions() const;
|
||||
virtual ioport_constructor device_input_ports() const;
|
||||
@ -55,7 +67,7 @@ public:
|
||||
UINT8 m_color_select; /* wo 0x3d9 */
|
||||
UINT8 m_status; /* ro 0x3da */
|
||||
|
||||
mc6845_update_row_func m_update_row;
|
||||
int m_update_row_type;
|
||||
UINT8 m_palette_lut_2bpp[4];
|
||||
offs_t m_chr_gen_offset[4];
|
||||
UINT8 m_font_selection_mask;
|
||||
@ -118,6 +130,9 @@ public:
|
||||
virtual ioport_constructor device_input_ports() const;
|
||||
virtual const rom_entry *device_rom_region() const;
|
||||
|
||||
virtual MC6845_UPDATE_ROW( crtc_update_row );
|
||||
MC6845_UPDATE_ROW( pc1512_gfx_4bpp_update_row );
|
||||
|
||||
protected:
|
||||
// device-level overrides
|
||||
virtual void device_start();
|
||||
|
@ -27,7 +27,7 @@
|
||||
if(VERBOSE_MDA>=N) \
|
||||
{ \
|
||||
if( M ) \
|
||||
logerror("%11.6f: %-24s",device->machine().time().as_double(),(char*)M ); \
|
||||
logerror("%11.6f: %-24s",machine().time().as_double(),(char*)M ); \
|
||||
logerror A; \
|
||||
} \
|
||||
} while (0)
|
||||
@ -40,7 +40,12 @@ static const unsigned char mda_palette[4][3] =
|
||||
{ 0x00,0xff,0x00 }
|
||||
};
|
||||
|
||||
static MC6845_UPDATE_ROW( mda_update_row );
|
||||
enum
|
||||
{
|
||||
MDA_TEXT_INTEN = 0,
|
||||
MDA_TEXT_BLINK,
|
||||
HERCULES_GFX_BLINK
|
||||
};
|
||||
|
||||
/* F4 Character Displayer */
|
||||
static const gfx_layout pc_16_charlayout =
|
||||
@ -75,21 +80,6 @@ static GFXDECODE_START( pcmda )
|
||||
GFXDECODE_END
|
||||
|
||||
|
||||
static MC6845_INTERFACE( mc6845_mda_intf )
|
||||
{
|
||||
false, /* show border area */
|
||||
0,0,0,0, /* visarea adjustment */
|
||||
9, /* number of pixels per video memory address */
|
||||
NULL, /* begin_update */
|
||||
mda_update_row, /* update_row */
|
||||
NULL, /* end_update */
|
||||
DEVCB_NULL, /* on_de_changed */
|
||||
DEVCB_NULL, /* on_cur_changed */
|
||||
DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, isa8_mda_device, hsync_changed), /* on_hsync_changed */
|
||||
DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, isa8_mda_device, vsync_changed), /* on_vsync_changed */
|
||||
NULL
|
||||
};
|
||||
|
||||
WRITE_LINE_MEMBER(isa8_mda_device::pc_cpu_line)
|
||||
{
|
||||
m_isa->irq7_w(state);
|
||||
@ -103,7 +93,12 @@ MACHINE_CONFIG_FRAGMENT( pcvideo_mda )
|
||||
|
||||
MCFG_PALETTE_ADD( "palette", 4 )
|
||||
|
||||
MCFG_MC6845_ADD( MDA_MC6845_NAME, MC6845, MDA_SCREEN_NAME, MDA_CLOCK/9, mc6845_mda_intf)
|
||||
MCFG_MC6845_ADD(MDA_MC6845_NAME, MC6845, MDA_SCREEN_NAME, MDA_CLOCK/9)
|
||||
MCFG_MC6845_SHOW_BORDER_AREA(false)
|
||||
MCFG_MC6845_CHAR_WIDTH(9)
|
||||
MCFG_MC6845_UPDATE_ROW_CB(isa8_mda_device, crtc_update_row)
|
||||
MCFG_MC6845_OUT_HSYNC_CB(WRITELINE(isa8_mda_device, hsync_changed))
|
||||
MCFG_MC6845_OUT_VSYNC_CB(WRITELINE(isa8_mda_device, vsync_changed))
|
||||
|
||||
MCFG_GFXDECODE_ADD("gfxdecode", "palette", pcmda)
|
||||
|
||||
@ -154,6 +149,7 @@ const rom_entry *isa8_mda_device::device_rom_region() const
|
||||
isa8_mda_device::isa8_mda_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) :
|
||||
device_t(mconfig, ISA8_MDA, "IBM Monochrome Display and Printer Adapter", tag, owner, clock, "isa_ibm_mda", __FILE__),
|
||||
device_isa8_card_interface(mconfig, *this),
|
||||
m_update_row_type(-1),
|
||||
m_palette(*this, "palette")
|
||||
{
|
||||
}
|
||||
@ -161,6 +157,7 @@ isa8_mda_device::isa8_mda_device(const machine_config &mconfig, const char *tag,
|
||||
isa8_mda_device::isa8_mda_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source) :
|
||||
device_t(mconfig, type, name, tag, owner, clock, shortname, source),
|
||||
device_isa8_card_interface(mconfig, *this),
|
||||
m_update_row_type(-1),
|
||||
m_palette(*this, "palette")
|
||||
{
|
||||
}
|
||||
@ -190,7 +187,6 @@ void isa8_mda_device::device_start()
|
||||
|
||||
void isa8_mda_device::device_reset()
|
||||
{
|
||||
m_update_row = NULL;
|
||||
m_framecnt = 0;
|
||||
m_mode_control = 0;
|
||||
m_vsync = 0;
|
||||
@ -213,10 +209,9 @@ void isa8_mda_device::device_reset()
|
||||
character codes 176 to 223.
|
||||
***************************************************************************/
|
||||
|
||||
static MC6845_UPDATE_ROW( mda_text_inten_update_row )
|
||||
MC6845_UPDATE_ROW( isa8_mda_device::mda_text_inten_update_row )
|
||||
{
|
||||
isa8_mda_device *mda = downcast<isa8_mda_device *>(device->owner());
|
||||
const rgb_t *palette = mda->m_palette->palette()->entry_list_raw();
|
||||
const rgb_t *palette = m_palette->palette()->entry_list_raw();
|
||||
UINT32 *p = &bitmap.pix32(y);
|
||||
UINT16 chr_base = ( ra & 0x08 ) ? 0x800 | ( ra & 0x07 ) : ra;
|
||||
int i;
|
||||
@ -225,9 +220,9 @@ static MC6845_UPDATE_ROW( mda_text_inten_update_row )
|
||||
for ( i = 0; i < x_count; i++ )
|
||||
{
|
||||
UINT16 offset = ( ( ma + i ) << 1 ) & 0x0FFF;
|
||||
UINT8 chr = mda->m_videoram[ offset ];
|
||||
UINT8 attr = mda->m_videoram[ offset + 1 ];
|
||||
UINT8 data = mda->m_chr_gen[ chr_base + chr * 8 ];
|
||||
UINT8 chr = m_videoram[ offset ];
|
||||
UINT8 attr = m_videoram[ offset + 1 ];
|
||||
UINT8 data = m_chr_gen[ chr_base + chr * 8 ];
|
||||
UINT8 fg = ( attr & 0x08 ) ? 3 : 2;
|
||||
UINT8 bg = 0;
|
||||
|
||||
@ -256,7 +251,7 @@ static MC6845_UPDATE_ROW( mda_text_inten_update_row )
|
||||
break;
|
||||
}
|
||||
|
||||
if ( ( i == cursor_x && ( mda->m_framecnt & 0x08 ) ) || ( attr & 0x07 ) == 0x01 )
|
||||
if ( ( i == cursor_x && ( m_framecnt & 0x08 ) ) || ( attr & 0x07 ) == 0x01 )
|
||||
{
|
||||
data = 0xFF;
|
||||
}
|
||||
@ -287,10 +282,9 @@ static MC6845_UPDATE_ROW( mda_text_inten_update_row )
|
||||
character codes 176 to 223.
|
||||
***************************************************************************/
|
||||
|
||||
static MC6845_UPDATE_ROW( mda_text_blink_update_row )
|
||||
MC6845_UPDATE_ROW( isa8_mda_device::mda_text_blink_update_row )
|
||||
{
|
||||
isa8_mda_device *mda = downcast<isa8_mda_device *>(device->owner());
|
||||
const rgb_t *palette = mda->m_palette->palette()->entry_list_raw();
|
||||
const rgb_t *palette = m_palette->palette()->entry_list_raw();
|
||||
UINT32 *p = &bitmap.pix32(y);
|
||||
UINT16 chr_base = ( ra & 0x08 ) ? 0x800 | ( ra & 0x07 ) : ra;
|
||||
int i;
|
||||
@ -299,9 +293,9 @@ static MC6845_UPDATE_ROW( mda_text_blink_update_row )
|
||||
for ( i = 0; i < x_count; i++ )
|
||||
{
|
||||
UINT16 offset = ( ( ma + i ) << 1 ) & 0x0FFF;
|
||||
UINT8 chr = mda->m_videoram[ offset ];
|
||||
UINT8 attr = mda->m_videoram[ offset + 1 ];
|
||||
UINT8 data = mda->m_chr_gen[ chr_base + chr * 8 ];
|
||||
UINT8 chr = m_videoram[ offset ];
|
||||
UINT8 attr = m_videoram[ offset + 1 ];
|
||||
UINT8 data = m_chr_gen[ chr_base + chr * 8 ];
|
||||
UINT8 fg = ( attr & 0x08 ) ? 3 : 2;
|
||||
UINT8 bg = 0;
|
||||
|
||||
@ -331,14 +325,14 @@ static MC6845_UPDATE_ROW( mda_text_blink_update_row )
|
||||
|
||||
if ( i == cursor_x )
|
||||
{
|
||||
if ( mda->m_framecnt & 0x08 )
|
||||
if ( m_framecnt & 0x08 )
|
||||
{
|
||||
data = 0xFF;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( ( attr & 0x80 ) && ( mda->m_framecnt & 0x10 ) )
|
||||
if ( ( attr & 0x80 ) && ( m_framecnt & 0x10 ) )
|
||||
{
|
||||
data = 0x00;
|
||||
}
|
||||
@ -364,12 +358,36 @@ static MC6845_UPDATE_ROW( mda_text_blink_update_row )
|
||||
}
|
||||
|
||||
|
||||
static MC6845_UPDATE_ROW( mda_update_row )
|
||||
MC6845_UPDATE_ROW( isa8_mda_device::crtc_update_row )
|
||||
{
|
||||
isa8_mda_device *mda = downcast<isa8_mda_device *>(device->owner());
|
||||
if ( mda->m_update_row )
|
||||
if (m_update_row_type == -1)
|
||||
return;
|
||||
|
||||
switch (m_update_row_type)
|
||||
{
|
||||
mda->m_update_row( device, bitmap, cliprect, ma, ra, y, x_count, cursor_x, de, hbp, vbp, param );
|
||||
case MDA_TEXT_INTEN:
|
||||
mda_text_inten_update_row(bitmap, cliprect, ma, ra, y, x_count, cursor_x, de, hbp, vbp);
|
||||
break;
|
||||
case MDA_TEXT_BLINK:
|
||||
mda_text_blink_update_row(bitmap, cliprect, ma, ra, y, x_count, cursor_x, de, hbp, vbp);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
MC6845_UPDATE_ROW( isa8_hercules_device::crtc_update_row )
|
||||
{
|
||||
if (m_update_row_type == -1)
|
||||
return;
|
||||
|
||||
switch (m_update_row_type)
|
||||
{
|
||||
case HERCULES_GFX_BLINK:
|
||||
hercules_gfx_update_row(bitmap, cliprect, ma, ra, y, x_count, cursor_x, de, hbp, vbp);
|
||||
break;
|
||||
default:
|
||||
isa8_mda_device::crtc_update_row(bitmap, cliprect, ma, ra, y, x_count, cursor_x, de, hbp, vbp);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@ -400,13 +418,13 @@ WRITE8_MEMBER( isa8_mda_device::mode_control_w )
|
||||
switch( m_mode_control & 0x2a )
|
||||
{
|
||||
case 0x08:
|
||||
m_update_row = mda_text_inten_update_row;
|
||||
m_update_row_type = MDA_TEXT_INTEN;
|
||||
break;
|
||||
case 0x28:
|
||||
m_update_row = mda_text_blink_update_row;
|
||||
m_update_row_type = MDA_TEXT_BLINK;
|
||||
break;
|
||||
default:
|
||||
m_update_row = NULL;
|
||||
m_update_row_type = -1;
|
||||
}
|
||||
}
|
||||
|
||||
@ -497,21 +515,6 @@ allow this.
|
||||
The divder/pixels per 6845 clock is 9 for text mode and 16 for graphics mode.
|
||||
*/
|
||||
|
||||
static MC6845_INTERFACE( mc6845_hercules_intf )
|
||||
{
|
||||
false, /* show border area */
|
||||
0,0,0,0, /* visarea adjustment */
|
||||
9, /* number of pixels per video memory address */
|
||||
NULL, /* begin_update */
|
||||
mda_update_row, /* update_row */
|
||||
NULL, /* end_update */
|
||||
DEVCB_NULL, /* on_de_changed */
|
||||
DEVCB_NULL, /* on_cur_changed */
|
||||
DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, isa8_mda_device, hsync_changed), /* on_hsync_changed */
|
||||
DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, isa8_mda_device, vsync_changed), /* on_vsync_changed */
|
||||
NULL
|
||||
};
|
||||
|
||||
static GFXDECODE_START( pcherc )
|
||||
GFXDECODE_ENTRY( "gfx1", 0x0000, pc_16_charlayout, 1, 1 )
|
||||
GFXDECODE_END
|
||||
@ -523,7 +526,12 @@ MACHINE_CONFIG_FRAGMENT( pcvideo_hercules )
|
||||
|
||||
MCFG_PALETTE_ADD( "palette", 4 )
|
||||
|
||||
MCFG_MC6845_ADD( HERCULES_MC6845_NAME, MC6845, HERCULES_SCREEN_NAME, MDA_CLOCK/9, mc6845_hercules_intf)
|
||||
MCFG_MC6845_ADD(HERCULES_MC6845_NAME, MC6845, HERCULES_SCREEN_NAME, MDA_CLOCK/9)
|
||||
MCFG_MC6845_SHOW_BORDER_AREA(false)
|
||||
MCFG_MC6845_CHAR_WIDTH(9)
|
||||
MCFG_MC6845_UPDATE_ROW_CB(isa8_hercules_device, crtc_update_row)
|
||||
MCFG_MC6845_OUT_HSYNC_CB(WRITELINE(isa8_mda_device, hsync_changed))
|
||||
MCFG_MC6845_OUT_VSYNC_CB(WRITELINE(isa8_mda_device, vsync_changed))
|
||||
|
||||
MCFG_GFXDECODE_ADD("gfxdecode", "palette", pcherc)
|
||||
|
||||
@ -613,17 +621,16 @@ void isa8_hercules_device::device_reset()
|
||||
bit 7 being the leftmost.
|
||||
***************************************************************************/
|
||||
|
||||
static MC6845_UPDATE_ROW( hercules_gfx_update_row )
|
||||
MC6845_UPDATE_ROW( isa8_hercules_device::hercules_gfx_update_row )
|
||||
{
|
||||
isa8_hercules_device *herc = downcast<isa8_hercules_device *>(device->owner());
|
||||
const rgb_t *palette = herc->m_palette->palette()->entry_list_raw();
|
||||
const rgb_t *palette = m_palette->palette()->entry_list_raw();
|
||||
UINT32 *p = &bitmap.pix32(y);
|
||||
UINT16 gfx_base = ( ( herc->m_mode_control & 0x80 ) ? 0x8000 : 0x0000 ) | ( ( ra & 0x03 ) << 13 );
|
||||
UINT16 gfx_base = ( ( m_mode_control & 0x80 ) ? 0x8000 : 0x0000 ) | ( ( ra & 0x03 ) << 13 );
|
||||
int i;
|
||||
if ( y == 0 ) MDA_LOG(1,"hercules_gfx_update_row",("\n"));
|
||||
for ( i = 0; i < x_count; i++ )
|
||||
{
|
||||
UINT8 data = herc->m_videoram[ gfx_base + ( ( ma + i ) << 1 ) ];
|
||||
UINT8 data = m_videoram[ gfx_base + ( ( ma + i ) << 1 ) ];
|
||||
|
||||
*p = palette[( data & 0x80 ) ? 2 : 0]; p++;
|
||||
*p = palette[( data & 0x40 ) ? 2 : 0]; p++;
|
||||
@ -634,7 +641,7 @@ static MC6845_UPDATE_ROW( hercules_gfx_update_row )
|
||||
*p = palette[( data & 0x02 ) ? 2 : 0]; p++;
|
||||
*p = palette[( data & 0x01 ) ? 2 : 0]; p++;
|
||||
|
||||
data = herc->m_videoram[ gfx_base + ( ( ma + i ) << 1 ) + 1 ];
|
||||
data = m_videoram[ gfx_base + ( ( ma + i ) << 1 ) + 1 ];
|
||||
|
||||
*p = palette[( data & 0x80 ) ? 2 : 0]; p++;
|
||||
*p = palette[( data & 0x40 ) ? 2 : 0]; p++;
|
||||
@ -657,17 +664,17 @@ WRITE8_MEMBER( isa8_hercules_device::mode_control_w )
|
||||
switch( m_mode_control & 0x2a )
|
||||
{
|
||||
case 0x08:
|
||||
m_update_row = mda_text_inten_update_row;
|
||||
m_update_row_type = MDA_TEXT_INTEN;
|
||||
break;
|
||||
case 0x28:
|
||||
m_update_row = mda_text_blink_update_row;
|
||||
m_update_row_type = MDA_TEXT_BLINK;
|
||||
break;
|
||||
case 0x0A: /* Hercules modes */
|
||||
case 0x2A:
|
||||
m_update_row = hercules_gfx_update_row;
|
||||
m_update_row_type = HERCULES_GFX_BLINK;
|
||||
break;
|
||||
default:
|
||||
m_update_row = NULL;
|
||||
m_update_row_type = -1;
|
||||
}
|
||||
|
||||
mc6845->set_clock( m_mode_control & 0x02 ? MDA_CLOCK / 16 : MDA_CLOCK / 9 );
|
||||
|
@ -36,6 +36,10 @@ public:
|
||||
|
||||
WRITE_LINE_MEMBER(pc_cpu_line);
|
||||
|
||||
virtual MC6845_UPDATE_ROW( crtc_update_row );
|
||||
MC6845_UPDATE_ROW( mda_text_inten_update_row );
|
||||
MC6845_UPDATE_ROW( mda_text_blink_update_row );
|
||||
|
||||
protected:
|
||||
// device-level overrides
|
||||
virtual void device_start();
|
||||
@ -45,7 +49,7 @@ public:
|
||||
|
||||
UINT8 m_mode_control;
|
||||
|
||||
mc6845_update_row_func m_update_row;
|
||||
int m_update_row_type;
|
||||
UINT8 *m_chr_gen;
|
||||
UINT8 m_vsync;
|
||||
UINT8 m_hsync;
|
||||
@ -64,26 +68,29 @@ class isa8_hercules_device :
|
||||
public isa8_mda_device
|
||||
{
|
||||
public:
|
||||
// construction/destruction
|
||||
isa8_hercules_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
|
||||
// optional information overrides
|
||||
virtual machine_config_constructor device_mconfig_additions() const;
|
||||
virtual const rom_entry *device_rom_region() const;
|
||||
// construction/destruction
|
||||
isa8_hercules_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
|
||||
// optional information overrides
|
||||
virtual machine_config_constructor device_mconfig_additions() const;
|
||||
virtual const rom_entry *device_rom_region() const;
|
||||
|
||||
virtual DECLARE_READ8_MEMBER(io_read);
|
||||
virtual DECLARE_WRITE8_MEMBER(io_write);
|
||||
virtual DECLARE_READ8_MEMBER(status_r);
|
||||
virtual DECLARE_WRITE8_MEMBER(mode_control_w);
|
||||
virtual DECLARE_READ8_MEMBER(io_read);
|
||||
virtual DECLARE_WRITE8_MEMBER(io_write);
|
||||
virtual DECLARE_READ8_MEMBER(status_r);
|
||||
virtual DECLARE_WRITE8_MEMBER(mode_control_w);
|
||||
|
||||
virtual MC6845_UPDATE_ROW( crtc_update_row );
|
||||
MC6845_UPDATE_ROW( hercules_gfx_update_row );
|
||||
|
||||
protected:
|
||||
// device-level overrides
|
||||
virtual void device_start();
|
||||
virtual void device_reset();
|
||||
// device-level overrides
|
||||
virtual void device_start();
|
||||
virtual void device_reset();
|
||||
|
||||
private:
|
||||
// internal state
|
||||
// internal state
|
||||
public:
|
||||
UINT8 m_configuration_switch; //hercules
|
||||
UINT8 m_configuration_switch; //hercules
|
||||
};
|
||||
|
||||
|
||||
|
@ -51,29 +51,29 @@ const device_type WANGPC_LVC = &device_creator<wangpc_lvc_device>;
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// mc6845_interface crtc_intf
|
||||
// mc6845
|
||||
//-------------------------------------------------
|
||||
|
||||
void wangpc_lvc_device::crtc_update_row(mc6845_device *device, bitmap_rgb32 &bitmap, const rectangle &cliprect, UINT16 ma, UINT8 ra, UINT16 y, UINT8 x_count, INT8 cursor_x, int de, int hbp, int vbp, void *param)
|
||||
MC6845_UPDATE_ROW( wangpc_lvc_device::crtc_update_row )
|
||||
{
|
||||
offs_t scroll_y = (((m_scroll >> 8) + 0x15) & 0xff) * 0x80;
|
||||
|
||||
|
||||
if (OPTION_80_COL)
|
||||
{
|
||||
for (int column = 0; column < x_count; column++)
|
||||
{
|
||||
offs_t addr = scroll_y + (m_scroll & 0x3f) + ((ma / 80) * 0x480) + (((ra & 0x0f) << 7) | (column & 0x7f));
|
||||
UINT16 data = m_video_ram[addr & 0x7fff];
|
||||
|
||||
|
||||
for (int bit = 0; bit < 8; bit++)
|
||||
{
|
||||
int x = (column * 8) + bit;
|
||||
int color = (BIT(data, 15) << 1) | BIT(data, 7);
|
||||
|
||||
|
||||
if (column == cursor_x) color = 0x03;
|
||||
|
||||
|
||||
bitmap.pix32(vbp + y, hbp + x) = de ? m_palette[color] : rgb_t::black;
|
||||
|
||||
|
||||
data <<= 1;
|
||||
}
|
||||
}
|
||||
@ -82,35 +82,28 @@ void wangpc_lvc_device::crtc_update_row(mc6845_device *device, bitmap_rgb32 &bit
|
||||
{
|
||||
//offs_t addr = scroll_y + ((m_scroll & 0x3f) << 1) + ((ma / 40) * 0x480) + (((ra & 0x0f) << 7));
|
||||
offs_t addr = scroll_y + ((m_scroll & 0x3f) << 1) + (y * 0x80);
|
||||
|
||||
|
||||
for (int column = 0; column < x_count; column++)
|
||||
{
|
||||
UINT32 data = (m_video_ram[(addr + 1) & 0x7fff] << 16) | m_video_ram[addr & 0x7fff];
|
||||
|
||||
|
||||
for (int bit = 0; bit < 8; bit++)
|
||||
{
|
||||
int x = (column * 8) + bit;
|
||||
int color = (BIT(data, 31) << 3) | (BIT(data, 23) << 2) | (BIT(data, 15) << 1) | BIT(data, 7);
|
||||
|
||||
|
||||
if (column == cursor_x) color = 0x03;
|
||||
|
||||
|
||||
bitmap.pix32(vbp + y, hbp + x) = de ? m_palette[color] : rgb_t::black;
|
||||
|
||||
|
||||
data <<= 1;
|
||||
}
|
||||
|
||||
|
||||
addr += 2;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static MC6845_UPDATE_ROW( wangpc_lvc_update_row )
|
||||
{
|
||||
wangpc_lvc_device *lvc = downcast<wangpc_lvc_device *>(device->owner());
|
||||
|
||||
lvc->crtc_update_row(device, bitmap, cliprect, ma, ra, y, x_count, cursor_x, de, hbp, vbp, param);
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER( wangpc_lvc_device::vsync_w )
|
||||
{
|
||||
if (OPTION_VSYNC && state)
|
||||
@ -119,22 +112,6 @@ WRITE_LINE_MEMBER( wangpc_lvc_device::vsync_w )
|
||||
}
|
||||
}
|
||||
|
||||
static MC6845_INTERFACE( crtc_intf )
|
||||
{
|
||||
true,
|
||||
0,0,0,0,
|
||||
8,
|
||||
NULL,
|
||||
wangpc_lvc_update_row,
|
||||
NULL,
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL,
|
||||
DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, wangpc_lvc_device, vsync_w),
|
||||
NULL
|
||||
};
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// MACHINE_CONFIG_FRAGMENT( wangpc_lvc )
|
||||
//-------------------------------------------------
|
||||
@ -147,7 +124,11 @@ static MACHINE_CONFIG_FRAGMENT( wangpc_lvc )
|
||||
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500))
|
||||
MCFG_SCREEN_REFRESH_RATE(60)
|
||||
|
||||
MCFG_MC6845_ADD(MC6845_TAG, MC6845_1, SCREEN_TAG, XTAL_14_31818MHz/16, crtc_intf)
|
||||
MCFG_MC6845_ADD(MC6845_TAG, MC6845_1, SCREEN_TAG, XTAL_14_31818MHz/16)
|
||||
MCFG_MC6845_SHOW_BORDER_AREA(true)
|
||||
MCFG_MC6845_CHAR_WIDTH(8)
|
||||
MCFG_MC6845_UPDATE_ROW_CB(wangpc_lvc_device, crtc_update_row)
|
||||
MCFG_MC6845_OUT_VSYNC_CB(WRITELINE(wangpc_lvc_device, vsync_w))
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
|
||||
|
@ -37,7 +37,7 @@ public:
|
||||
virtual machine_config_constructor device_mconfig_additions() const;
|
||||
|
||||
// not really public
|
||||
void crtc_update_row(mc6845_device *device, bitmap_rgb32 &bitmap, const rectangle &cliprect, UINT16 ma, UINT8 ra, UINT16 y, UINT8 x_count, INT8 cursor_x, int de, int hbp, int vbp, void *param);
|
||||
MC6845_UPDATE_ROW( crtc_update_row );
|
||||
DECLARE_WRITE_LINE_MEMBER( vsync_w );
|
||||
|
||||
protected:
|
||||
|
@ -66,34 +66,34 @@ const device_type WANGPC_MVC = &device_creator<wangpc_mvc_device>;
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// mc6845_interface crtc_intf
|
||||
// mc6845
|
||||
//-------------------------------------------------
|
||||
|
||||
void wangpc_mvc_device::crtc_update_row(mc6845_device *device, bitmap_rgb32 &bitmap, const rectangle &cliprect, UINT16 ma, UINT8 ra, UINT16 y, UINT8 x_count, INT8 cursor_x, int de, int hbp, int vbp, void *param)
|
||||
MC6845_UPDATE_ROW( wangpc_mvc_device::crtc_update_row )
|
||||
{
|
||||
for (int sx = 0; sx < 50; sx++)
|
||||
{
|
||||
offs_t addr = (y * 50) + sx;
|
||||
UINT16 data = m_bitmap_ram[addr];
|
||||
|
||||
|
||||
for (int bit = 0; bit < 16; bit++)
|
||||
{
|
||||
int x = (sx * 16) + bit;
|
||||
int color = BIT(data, 15) && de;
|
||||
|
||||
|
||||
bitmap.pix32(vbp + y, hbp + x) = PALETTE_MVC[color];
|
||||
|
||||
|
||||
data <<= 1;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
for (int column = 0; column < x_count; column++)
|
||||
{
|
||||
UINT16 code = m_video_ram[((ma + column) & 0x7ff)];
|
||||
UINT8 attr = code & 0xff;
|
||||
|
||||
|
||||
UINT8 new_ra = ra + 1;
|
||||
|
||||
|
||||
if (ATTR_SUPERSCRIPT)
|
||||
{
|
||||
new_ra = ra + 3;
|
||||
@ -102,35 +102,28 @@ void wangpc_mvc_device::crtc_update_row(mc6845_device *device, bitmap_rgb32 &bit
|
||||
{
|
||||
new_ra = ra;
|
||||
}
|
||||
|
||||
|
||||
offs_t addr = ((code >> 8) << 4) | (new_ra & 0x0f);
|
||||
UINT16 data = m_char_ram[addr & 0xfff];
|
||||
|
||||
|
||||
if ((column == cursor_x) || (!ra && ATTR_OVERSCORE) || ((ra == 9) && ATTR_UNDERSCORE))
|
||||
{
|
||||
data = 0xffff;
|
||||
}
|
||||
|
||||
|
||||
for (int bit = 0; bit < 10; bit++)
|
||||
{
|
||||
int x = (column * 10) + bit;
|
||||
int color = ((BIT(data, 9) & !ATTR_BLANK) ^ ATTR_REVERSE);
|
||||
|
||||
|
||||
if ((color | bitmap.pix32(vbp + y, hbp + x)) & ATTR_BOLD) color = 2;
|
||||
if (color) bitmap.pix32(vbp + y, hbp + x) = de ? PALETTE_MVC[color] : rgb_t::black;
|
||||
|
||||
|
||||
data <<= 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static MC6845_UPDATE_ROW( wangpc_mvc_update_row )
|
||||
{
|
||||
wangpc_mvc_device *mvc = downcast<wangpc_mvc_device *>(device->owner());
|
||||
|
||||
mvc->crtc_update_row(device, bitmap, cliprect, ma, ra, y, x_count, cursor_x, de, hbp, vbp, param);
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER( wangpc_mvc_device::vsync_w )
|
||||
{
|
||||
if (OPTION_VSYNC && state)
|
||||
@ -139,22 +132,6 @@ WRITE_LINE_MEMBER( wangpc_mvc_device::vsync_w )
|
||||
}
|
||||
}
|
||||
|
||||
static MC6845_INTERFACE( crtc_intf )
|
||||
{
|
||||
true,
|
||||
0,0,0,0,
|
||||
10,
|
||||
NULL,
|
||||
wangpc_mvc_update_row,
|
||||
NULL,
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL,
|
||||
DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, wangpc_mvc_device, vsync_w),
|
||||
NULL
|
||||
};
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// MACHINE_CONFIG_FRAGMENT( wangpc_mvc )
|
||||
//-------------------------------------------------
|
||||
@ -167,7 +144,11 @@ static MACHINE_CONFIG_FRAGMENT( wangpc_mvc )
|
||||
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500))
|
||||
MCFG_SCREEN_REFRESH_RATE(60)
|
||||
|
||||
MCFG_MC6845_ADD(MC6845_TAG, MC6845_1, SCREEN_TAG, XTAL_14_31818MHz/16, crtc_intf)
|
||||
MCFG_MC6845_ADD(MC6845_TAG, MC6845_1, SCREEN_TAG, XTAL_14_31818MHz/16)
|
||||
MCFG_MC6845_SHOW_BORDER_AREA(true)
|
||||
MCFG_MC6845_CHAR_WIDTH(10)
|
||||
MCFG_MC6845_UPDATE_ROW_CB(wangpc_mvc_device, crtc_update_row)
|
||||
MCFG_MC6845_OUT_VSYNC_CB(WRITELINE(wangpc_mvc_device, vsync_w))
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
|
||||
|
@ -37,7 +37,7 @@ public:
|
||||
virtual machine_config_constructor device_mconfig_additions() const;
|
||||
|
||||
// not really public
|
||||
void crtc_update_row(mc6845_device *device, bitmap_rgb32 &bitmap, const rectangle &cliprect, UINT16 ma, UINT8 ra, UINT16 y, UINT8 x_count, INT8 cursor_x, int de, int hbp, int vbp, void *param);
|
||||
MC6845_UPDATE_ROW( crtc_update_row );
|
||||
DECLARE_WRITE_LINE_MEMBER( vsync_w );
|
||||
|
||||
protected:
|
||||
|
@ -89,43 +89,35 @@ const device_type MOS8568 = &device_creator<mos8568_device>;
|
||||
#define ATTR_ALTERNATE_CHARSET BIT(attr, 7)
|
||||
|
||||
|
||||
void mc6845_device::device_config_complete()
|
||||
{
|
||||
const mc6845_interface *intf = reinterpret_cast<const mc6845_interface *>(static_config());
|
||||
|
||||
if ( intf != NULL )
|
||||
{
|
||||
*static_cast<mc6845_interface *>(this) = *intf;
|
||||
}
|
||||
else
|
||||
{
|
||||
m_show_border_area = false;
|
||||
m_visarea_adjust_min_x = 0;
|
||||
m_visarea_adjust_max_x = 0;
|
||||
m_visarea_adjust_min_y = 0;
|
||||
m_visarea_adjust_max_y = 0;
|
||||
m_hpixels_per_column = 0;
|
||||
m_begin_update = NULL;
|
||||
m_update_row = NULL;
|
||||
m_end_update = NULL;
|
||||
m_on_update_addr_changed = NULL;
|
||||
memset(&m_out_de_func, 0, sizeof(m_out_de_func));
|
||||
memset(&m_out_cur_func, 0, sizeof(m_out_cur_func));
|
||||
memset(&m_out_hsync_func, 0, sizeof(m_out_hsync_func));
|
||||
memset(&m_out_vsync_func, 0, sizeof(m_out_vsync_func));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
mc6845_device::mc6845_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source)
|
||||
: device_t(mconfig, type, name, tag, owner, clock, shortname, source),
|
||||
device_video_interface(mconfig, *this, false)
|
||||
device_video_interface(mconfig, *this, false),
|
||||
m_show_border_area(true),
|
||||
m_visarea_adjust_min_x(0),
|
||||
m_visarea_adjust_max_x(0),
|
||||
m_visarea_adjust_min_y(0),
|
||||
m_visarea_adjust_max_y(0),
|
||||
m_hpixels_per_column(0),
|
||||
m_out_de_cb(*this),
|
||||
m_out_cur_cb(*this),
|
||||
m_out_hsync_cb(*this),
|
||||
m_out_vsync_cb(*this)
|
||||
{
|
||||
}
|
||||
|
||||
mc6845_device::mc6845_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
|
||||
: device_t(mconfig, MC6845, "MC6845 CRTC", tag, owner, clock, "mc6845", __FILE__),
|
||||
device_video_interface(mconfig, *this, false)
|
||||
device_video_interface(mconfig, *this, false),
|
||||
m_show_border_area(true),
|
||||
m_visarea_adjust_min_x(0),
|
||||
m_visarea_adjust_max_x(0),
|
||||
m_visarea_adjust_min_y(0),
|
||||
m_visarea_adjust_max_y(0),
|
||||
m_hpixels_per_column(0),
|
||||
m_out_de_cb(*this),
|
||||
m_out_cur_cb(*this),
|
||||
m_out_hsync_cb(*this),
|
||||
m_out_vsync_cb(*this)
|
||||
{
|
||||
}
|
||||
|
||||
@ -138,7 +130,7 @@ void mc6845_device::device_post_load()
|
||||
|
||||
void mc6845_device::call_on_update_address(int strobe)
|
||||
{
|
||||
if (m_on_update_addr_changed)
|
||||
if (!m_on_update_addr_changed_cb.isnull())
|
||||
m_upd_trans_timer->adjust(attotime::zero, (m_update_addr << 8) | strobe);
|
||||
else
|
||||
fatalerror("M6845: transparent memory mode without handler\n");
|
||||
@ -573,11 +565,11 @@ void mc6845_device::update_counters()
|
||||
|
||||
void mc6845_device::set_de(int state)
|
||||
{
|
||||
if ( m_de != state )
|
||||
if (m_de != state)
|
||||
{
|
||||
m_de = state;
|
||||
|
||||
if ( m_de )
|
||||
if (m_de)
|
||||
{
|
||||
/* If the upd_adr_timer was running, cancel it */
|
||||
m_upd_adr_timer->adjust(attotime::never);
|
||||
@ -589,44 +581,37 @@ void mc6845_device::set_de(int state)
|
||||
update_upd_adr_timer();
|
||||
}
|
||||
|
||||
if ( !m_res_out_de_func.isnull() )
|
||||
m_res_out_de_func( m_de );
|
||||
m_out_de_cb(m_de);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void mc6845_device::set_hsync(int state)
|
||||
{
|
||||
if ( m_hsync != state )
|
||||
if (m_hsync != state)
|
||||
{
|
||||
m_hsync = state;
|
||||
|
||||
if ( !m_res_out_hsync_func.isnull() )
|
||||
m_res_out_hsync_func( m_hsync );
|
||||
m_out_hsync_cb(m_hsync);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void mc6845_device::set_vsync(int state)
|
||||
{
|
||||
if ( m_vsync != state )
|
||||
if (m_vsync != state)
|
||||
{
|
||||
m_vsync = state;
|
||||
|
||||
if ( !m_res_out_vsync_func.isnull() )
|
||||
m_res_out_vsync_func( m_vsync );
|
||||
m_out_vsync_cb(m_vsync);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void mc6845_device::set_cur(int state)
|
||||
{
|
||||
if ( m_cur != state )
|
||||
if (m_cur != state)
|
||||
{
|
||||
m_cur = state;
|
||||
|
||||
if ( !m_res_out_cur_func.isnull() )
|
||||
m_res_out_cur_func( m_cur );
|
||||
m_out_cur_cb(m_cur);
|
||||
}
|
||||
}
|
||||
|
||||
@ -807,7 +792,7 @@ void mc6845_device::device_timer(emu_timer &timer, device_timer_id id, int param
|
||||
int strobe = (param & 0xff);
|
||||
|
||||
/* call the callback function -- we know it exists */
|
||||
m_on_update_addr_changed(this, addr, strobe);
|
||||
m_on_update_addr_changed_cb(addr, strobe);
|
||||
|
||||
if(!m_update_ready_bit && MODE_TRANSPARENT_BLANK)
|
||||
{
|
||||
@ -928,7 +913,7 @@ void mc6845_device::update_cursor_state()
|
||||
}
|
||||
|
||||
|
||||
UINT8 mc6845_device::draw_scanline(int y, bitmap_rgb32 &bitmap, const rectangle &cliprect, void *param)
|
||||
UINT8 mc6845_device::draw_scanline(int y, bitmap_rgb32 &bitmap, const rectangle &cliprect)
|
||||
{
|
||||
/* compute the current raster line */
|
||||
UINT8 ra = y % (m_max_ras_addr + 1);
|
||||
@ -955,11 +940,11 @@ UINT8 mc6845_device::draw_scanline(int y, bitmap_rgb32 &bitmap, const rectangle
|
||||
UINT8 cr = y / (m_max_ras_addr + 1);
|
||||
UINT16 ma = (cr << 8) | cc;
|
||||
|
||||
m_update_row(this, bitmap, cliprect, ma, ra, y, m_horiz_disp, cursor_x, de, hbp, vbp, param);
|
||||
m_update_row_cb(bitmap, cliprect, ma, ra, y, m_horiz_disp, cursor_x, de, hbp, vbp);
|
||||
}
|
||||
else
|
||||
{
|
||||
m_update_row(this, bitmap, cliprect, m_current_disp_addr, ra, y, m_horiz_disp, cursor_x, de, hbp, vbp, param);
|
||||
m_update_row_cb(bitmap, cliprect, m_current_disp_addr, ra, y, m_horiz_disp, cursor_x, de, hbp, vbp);
|
||||
}
|
||||
|
||||
/* update MA if the last raster address */
|
||||
@ -976,15 +961,11 @@ UINT32 mc6845_device::screen_update(screen_device &screen, bitmap_rgb32 &bitmap,
|
||||
|
||||
if (m_has_valid_parameters)
|
||||
{
|
||||
UINT16 y;
|
||||
|
||||
void *param = NULL;
|
||||
|
||||
assert(m_update_row != NULL);
|
||||
assert(m_update_row_cb.isnull() != NULL);
|
||||
|
||||
/* call the set up function if any */
|
||||
if (m_begin_update != NULL)
|
||||
param = m_begin_update(this, bitmap, cliprect);
|
||||
if (!m_begin_update_cb.isnull())
|
||||
m_begin_update_cb(bitmap, cliprect);
|
||||
|
||||
if (cliprect.min_y == 0)
|
||||
{
|
||||
@ -993,14 +974,14 @@ UINT32 mc6845_device::screen_update(screen_device &screen, bitmap_rgb32 &bitmap,
|
||||
}
|
||||
|
||||
/* for each row in the visible region */
|
||||
for (y = cliprect.min_y; y <= cliprect.max_y; y++)
|
||||
for (UINT16 y = cliprect.min_y; y <= cliprect.max_y; y++)
|
||||
{
|
||||
this->draw_scanline(y, bitmap, cliprect, param);
|
||||
this->draw_scanline(y, bitmap, cliprect);
|
||||
}
|
||||
|
||||
/* call the tear down function if any */
|
||||
if (m_end_update != NULL)
|
||||
m_end_update(this, bitmap, cliprect, param);
|
||||
if (!m_end_update_cb.isnull())
|
||||
m_end_update_cb(bitmap, cliprect);
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -1017,10 +998,16 @@ void mc6845_device::device_start()
|
||||
assert(m_hpixels_per_column > 0);
|
||||
|
||||
/* resolve callbacks */
|
||||
m_res_out_de_func.resolve(m_out_de_func, *this);
|
||||
m_res_out_cur_func.resolve(m_out_cur_func, *this);
|
||||
m_res_out_hsync_func.resolve(m_out_hsync_func, *this);
|
||||
m_res_out_vsync_func.resolve(m_out_vsync_func, *this);
|
||||
m_out_de_cb.resolve_safe();
|
||||
m_out_cur_cb.resolve_safe();
|
||||
m_out_hsync_cb.resolve_safe();
|
||||
m_out_vsync_cb.resolve_safe();
|
||||
|
||||
/* bind delegates */
|
||||
m_begin_update_cb.bind_relative_to(*owner());
|
||||
m_update_row_cb.bind_relative_to(*owner());
|
||||
m_end_update_cb.bind_relative_to(*owner());
|
||||
m_on_update_addr_changed_cb.bind_relative_to(*owner());
|
||||
|
||||
/* create the timers */
|
||||
m_line_timer = timer_alloc(TIMER_LINE);
|
||||
@ -1257,7 +1244,8 @@ void mos8563_device::device_start()
|
||||
m_supports_status_reg_d7 = true;
|
||||
m_update_ready_bit = 1;
|
||||
|
||||
m_update_row = vdc_update_row;
|
||||
// default update_row delegate
|
||||
m_update_row_cb = mc6845_update_row_delegate(FUNC(mos8563_device::vdc_update_row), this);
|
||||
|
||||
m_char_blink_state = false;
|
||||
m_char_blink_count = 0;
|
||||
@ -1318,19 +1306,14 @@ void mos8568_device::device_start()
|
||||
void mc6845_device::device_reset()
|
||||
{
|
||||
/* internal registers other than status remain unchanged, all outputs go low */
|
||||
if ( !m_res_out_de_func.isnull() )
|
||||
m_res_out_de_func( FALSE );
|
||||
m_out_de_cb(false);
|
||||
|
||||
if ( !m_res_out_hsync_func.isnull() )
|
||||
m_res_out_hsync_func( FALSE );
|
||||
m_out_hsync_cb(false);
|
||||
|
||||
if ( !m_res_out_vsync_func.isnull() )
|
||||
m_res_out_vsync_func( FALSE );
|
||||
m_out_vsync_cb(false);
|
||||
|
||||
if ( ! m_line_timer->enabled( ) )
|
||||
{
|
||||
m_line_timer->adjust( attotime::from_ticks( m_horiz_char_total + 1, m_clock ) );
|
||||
}
|
||||
if (!m_line_timer->enabled())
|
||||
m_line_timer->adjust(attotime::from_ticks(m_horiz_char_total + 1, m_clock));
|
||||
|
||||
m_light_pen_latched = false;
|
||||
|
||||
@ -1520,9 +1503,9 @@ void mos8563_device::update_cursor_state()
|
||||
}
|
||||
|
||||
|
||||
UINT8 mos8563_device::draw_scanline(int y, bitmap_rgb32 &bitmap, const rectangle &cliprect, void *param)
|
||||
UINT8 mos8563_device::draw_scanline(int y, bitmap_rgb32 &bitmap, const rectangle &cliprect)
|
||||
{
|
||||
UINT8 ra = mc6845_device::draw_scanline(y, bitmap, cliprect, param);
|
||||
UINT8 ra = mc6845_device::draw_scanline(y, bitmap, cliprect);
|
||||
|
||||
if (ra == m_max_ras_addr)
|
||||
m_current_disp_addr = (m_current_disp_addr + m_row_addr_incr) & 0x3fff;
|
||||
@ -1531,31 +1514,31 @@ UINT8 mos8563_device::draw_scanline(int y, bitmap_rgb32 &bitmap, const rectangle
|
||||
}
|
||||
|
||||
|
||||
void mos8563_device::update_row(bitmap_rgb32 &bitmap, const rectangle &cliprect, UINT16 ma, UINT8 ra, UINT16 y, UINT8 x_count, INT8 cursor_x, int de, int hbp, int vbp, void *param)
|
||||
MC6845_UPDATE_ROW( mos8563_device::vdc_update_row )
|
||||
{
|
||||
const pen_t *pen = m_palette->pens();
|
||||
|
||||
|
||||
ra += (m_vert_scroll & 0x0f);
|
||||
ra &= 0x0f;
|
||||
|
||||
|
||||
UINT8 cth = (m_horiz_char >> 4) + (HSS_DBL ? 0 : 1);
|
||||
UINT8 cdh = (m_horiz_char & 0x0f) + (HSS_DBL ? 0 : 1);
|
||||
UINT8 cdv = m_vert_char_disp;
|
||||
|
||||
|
||||
for (int column = 0; column < x_count; column++)
|
||||
{
|
||||
UINT8 code = read_videoram(ma + column);
|
||||
UINT8 attr = 0;
|
||||
|
||||
|
||||
int fg = m_color >> 4;
|
||||
int bg = m_color & 0x0f;
|
||||
|
||||
|
||||
if (HSS_ATTR)
|
||||
{
|
||||
offs_t attr_addr = m_attribute_addr + ma + column;
|
||||
attr = read_videoram(attr_addr);
|
||||
}
|
||||
|
||||
|
||||
if (HSS_TEXT)
|
||||
{
|
||||
if (HSS_ATTR)
|
||||
@ -1563,15 +1546,15 @@ void mos8563_device::update_row(bitmap_rgb32 &bitmap, const rectangle &cliprect,
|
||||
fg = ATTR_FOREGROUND;
|
||||
bg = ATTR_BACKGROUND;
|
||||
}
|
||||
|
||||
|
||||
if (VSS_RVS) code ^= 0xff;
|
||||
|
||||
|
||||
for (int bit = 0; bit < cdh; bit++)
|
||||
{
|
||||
int x = (m_horiz_scroll & 0x0f) - cth + (column * cth) + bit;
|
||||
if (x < 0) x = 0;
|
||||
int color = BIT(code, 7) ? fg : bg;
|
||||
|
||||
|
||||
bitmap.pix32(vbp + y, hbp + x) = pen[de ? color : 0];
|
||||
}
|
||||
}
|
||||
@ -1581,9 +1564,9 @@ void mos8563_device::update_row(bitmap_rgb32 &bitmap, const rectangle &cliprect,
|
||||
{
|
||||
fg = ATTR_COLOR;
|
||||
}
|
||||
|
||||
|
||||
offs_t font_addr;
|
||||
|
||||
|
||||
if (m_max_ras_addr < 16)
|
||||
{
|
||||
font_addr = ((m_char_base_addr & 0xe0) << 8) | (ATTR_ALTERNATE_CHARSET << 12) | (code << 4) | (ra & 0x0f);
|
||||
@ -1592,33 +1575,26 @@ void mos8563_device::update_row(bitmap_rgb32 &bitmap, const rectangle &cliprect,
|
||||
{
|
||||
font_addr = ((m_char_base_addr & 0xc0) << 8) | (ATTR_ALTERNATE_CHARSET << 13) | (code << 5) | (ra & 0x1f);
|
||||
}
|
||||
|
||||
|
||||
UINT8 data = read_videoram(font_addr);
|
||||
|
||||
|
||||
if (ra >= cdv) data = 0;
|
||||
if (ATTR_UNDERLINE && (ra == m_underline_ras)) data = 0xff;
|
||||
if (ATTR_BLINK && !m_char_blink_state) data = 0;
|
||||
if (ATTR_REVERSE) data ^= 0xff;
|
||||
if (column == cursor_x) data ^= 0xff;
|
||||
if (VSS_RVS) data ^= 0xff;
|
||||
|
||||
|
||||
for (int bit = 0; bit < cdh; bit++)
|
||||
{
|
||||
int x = (m_horiz_scroll & 0x0f) - cth + (column * cth) + bit;
|
||||
if (x < 0) x = 0;
|
||||
int color = BIT(data, 7) ? fg : bg;
|
||||
|
||||
|
||||
bitmap.pix32(vbp + y, hbp + x) = pen[de ? color : 0];
|
||||
|
||||
|
||||
if ((bit < 8) || !HSS_SEMI) data <<= 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
MC6845_UPDATE_ROW( mos8563_device::vdc_update_row )
|
||||
{
|
||||
mos8563_device *mos8563 = static_cast<mos8563_device *>(device);
|
||||
|
||||
mos8563->update_row(bitmap, cliprect, ma, ra, y, x_count, cursor_x, de, hbp, vbp, param);
|
||||
}
|
||||
|
@ -13,112 +13,73 @@
|
||||
#include "emu.h"
|
||||
|
||||
|
||||
#define MC6845_INTERFACE(name) \
|
||||
const mc6845_interface (name) =
|
||||
|
||||
#define MCFG_MC6845_ADD(_tag, _variant, _screen_tag, _clock, _config) \
|
||||
#define MCFG_MC6845_ADD(_tag, _variant, _screen_tag, _clock) \
|
||||
MCFG_DEVICE_ADD(_tag, _variant, _clock) \
|
||||
MCFG_VIDEO_SET_SCREEN(_screen_tag) \
|
||||
MCFG_DEVICE_CONFIG(_config)
|
||||
MCFG_VIDEO_SET_SCREEN(_screen_tag)
|
||||
|
||||
#define MCFG_MOS8563_ADD(_tag, _screen_tag, _clock, _config, _map) \
|
||||
#define MCFG_MOS8563_ADD(_tag, _screen_tag, _clock, _map) \
|
||||
MCFG_DEVICE_ADD(_tag, MOS8563, _clock) \
|
||||
MCFG_VIDEO_SET_SCREEN(_screen_tag) \
|
||||
MCFG_DEVICE_CONFIG(_config) \
|
||||
MCFG_DEVICE_ADDRESS_MAP(AS_0, _map) \
|
||||
MCFG_SCREEN_ADD(_screen_tag, RASTER) \
|
||||
MCFG_SCREEN_REFRESH_RATE(60) \
|
||||
MCFG_SCREEN_SIZE(640, 200) \
|
||||
MCFG_SCREEN_VISIBLE_AREA(0, 640-1, 0, 200-1) \
|
||||
MCFG_SCREEN_UPDATE_DEVICE(_tag, mos8563_device, screen_update)
|
||||
MCFG_DEVICE_ADDRESS_MAP(AS_0, _map)
|
||||
|
||||
#define MCFG_MOS8568_ADD(_tag, _screen_tag, _clock, _config, _map) \
|
||||
#define MCFG_MOS8568_ADD(_tag, _screen_tag, _clock, _map) \
|
||||
MCFG_DEVICE_ADD(_tag, MOS8568, _clock) \
|
||||
MCFG_VIDEO_SET_SCREEN(_screen_tag) \
|
||||
MCFG_DEVICE_CONFIG(_config) \
|
||||
MCFG_DEVICE_ADDRESS_MAP(AS_0, _map) \
|
||||
MCFG_SCREEN_ADD(_screen_tag, RASTER) \
|
||||
MCFG_SCREEN_REFRESH_RATE(60) \
|
||||
MCFG_SCREEN_SIZE(640, 200) \
|
||||
MCFG_SCREEN_VISIBLE_AREA(0, 640-1, 0, 200-1) \
|
||||
MCFG_SCREEN_UPDATE_DEVICE(_tag, mos8568_device, screen_update)
|
||||
MCFG_DEVICE_ADDRESS_MAP(AS_0, _map)
|
||||
|
||||
|
||||
class mc6845_device;
|
||||
#define MCFG_MC6845_SHOW_BORDER_AREA(_show) \
|
||||
mc6845_device::set_show_border_area(*device, _show);
|
||||
|
||||
#define MCFG_MC6845_VISAREA_ADJUST(_minx, _maxx, _miny, _maxy) \
|
||||
mc6845_device::set_visarea_adjust(*device, _minx, _maxx, _miny, _maxy);
|
||||
|
||||
#define MCFG_MC6845_CHAR_WIDTH(_pixels) \
|
||||
mc6845_device::set_char_width(*device, _pixels);
|
||||
|
||||
#define MCFG_MC6845_BEGIN_UPDATE_CB(_class, _method) \
|
||||
mc6845_device::set_begin_update_callback(*device, mc6845_begin_update_delegate(&_class::_method, #_class "::" #_method, downcast<_class *>(owner)));
|
||||
|
||||
#define MCFG_MC6845_UPDATE_ROW_CB(_class, _method) \
|
||||
mc6845_device::set_update_row_callback(*device, mc6845_update_row_delegate(&_class::_method, #_class "::" #_method, downcast<_class *>(owner)));
|
||||
|
||||
#define MCFG_MC6845_END_UPDATE_CB(_class, _method) \
|
||||
mc6845_device::set_end_update_callback(*device, mc6845_end_update_delegate(&_class::_method, #_class "::" #_method, downcast<_class *>(owner)));
|
||||
|
||||
#define MCFG_MC6845_ADDR_CHANGED_CB(_class, _method) \
|
||||
mc6845_device::set_on_update_addr_change_callback(*device, mc6845_on_update_addr_changed_delegate(&_class::_method, #_class "::" #_method, downcast<_class *>(owner)));
|
||||
|
||||
#define MCFG_MC6845_OUT_DE_CB(_write) \
|
||||
devcb = &mc6845_device::set_out_de_callback(*device, DEVCB2_##_write);
|
||||
|
||||
#define MCFG_MC6845_OUT_CUR_CB(_write) \
|
||||
devcb = &mc6845_device::set_out_cur_callback(*device, DEVCB2_##_write);
|
||||
|
||||
#define MCFG_MC6845_OUT_HSYNC_CB(_write) \
|
||||
devcb = &mc6845_device::set_out_hsync_callback(*device, DEVCB2_##_write);
|
||||
|
||||
#define MCFG_MC6845_OUT_VSYNC_CB(_write) \
|
||||
devcb = &mc6845_device::set_out_vsync_callback(*device, DEVCB2_##_write);
|
||||
|
||||
|
||||
/* callback definitions */
|
||||
typedef void * (*mc6845_begin_update_func)(mc6845_device *device, bitmap_rgb32 &bitmap, const rectangle &cliprect);
|
||||
#define MC6845_BEGIN_UPDATE(name) void *name(mc6845_device *device, bitmap_rgb32 &bitmap, const rectangle &cliprect)
|
||||
typedef device_delegate<void (bitmap_rgb32 &bitmap, const rectangle &cliprect)> mc6845_begin_update_delegate;
|
||||
#define MC6845_BEGIN_UPDATE(name) void name(bitmap_rgb32 &bitmap, const rectangle &cliprect)
|
||||
|
||||
typedef device_delegate<void (bitmap_rgb32 &bitmap, const rectangle &cliprect, UINT16 ma, UINT8 ra,
|
||||
UINT16 y, UINT8 x_count, INT8 cursor_x, int de, int hbp, int vbp)> mc6845_update_row_delegate;
|
||||
#define MC6845_UPDATE_ROW(name) void name(bitmap_rgb32 &bitmap, const rectangle &cliprect, UINT16 ma, UINT8 ra, \
|
||||
UINT16 y, UINT8 x_count, INT8 cursor_x, int de, int hbp, int vbp)
|
||||
|
||||
typedef void (*mc6845_update_row_func)(mc6845_device *device, bitmap_rgb32 &bitmap,
|
||||
const rectangle &cliprect, UINT16 ma, UINT8 ra,
|
||||
UINT16 y, UINT8 x_count, INT8 cursor_x, int de, int hbp, int vbp, void *param);
|
||||
typedef device_delegate<void (bitmap_rgb32 &bitmap, const rectangle &cliprect)> mc6845_end_update_delegate;
|
||||
#define MC6845_END_UPDATE(name) void name(bitmap_rgb32 &bitmap, const rectangle &cliprect)
|
||||
|
||||
|
||||
#define MC6845_UPDATE_ROW(name) void name(mc6845_device *device, bitmap_rgb32 &bitmap, \
|
||||
const rectangle &cliprect, UINT16 ma, UINT8 ra, \
|
||||
UINT16 y, UINT8 x_count, INT8 cursor_x, int de, int hbp, int vbp, void *param)
|
||||
|
||||
|
||||
typedef void (*mc6845_end_update_func)(mc6845_device *device, bitmap_rgb32 &bitmap, const rectangle &cliprect, void *param);
|
||||
#define MC6845_END_UPDATE(name) void name(mc6845_device *device, bitmap_rgb32 &bitmap, const rectangle &cliprect, void *param)
|
||||
|
||||
|
||||
typedef void (*mc6845_on_update_addr_changed_func)(mc6845_device *device, int address, int strobe);
|
||||
#define MC6845_ON_UPDATE_ADDR_CHANGED(name) void name(mc6845_device *device, int address, int strobe)
|
||||
|
||||
|
||||
/* interface */
|
||||
struct mc6845_interface
|
||||
{
|
||||
bool m_show_border_area; /* visible screen area (false) active display (true) active display + blanking */
|
||||
|
||||
/* visible screen area adjustment */
|
||||
int m_visarea_adjust_min_x;
|
||||
int m_visarea_adjust_max_x;
|
||||
int m_visarea_adjust_min_y;
|
||||
int m_visarea_adjust_max_y;
|
||||
|
||||
int m_hpixels_per_column; /* number of pixels per video memory address */
|
||||
|
||||
/* if specified, this gets called before any pixel update,
|
||||
optionally return a pointer that will be passed to the
|
||||
update and tear down callbacks */
|
||||
mc6845_begin_update_func m_begin_update;
|
||||
|
||||
/* this gets called for every row, the driver must output
|
||||
x_count * hpixels_per_column pixels.
|
||||
cursor_x indicates the character position where the cursor is, or -1
|
||||
if there is no cursor on this row */
|
||||
mc6845_update_row_func m_update_row;
|
||||
|
||||
/* if specified, this gets called after all row updating is complete */
|
||||
mc6845_end_update_func m_end_update;
|
||||
|
||||
/* if specified, this gets called for every change of the disply enable pin (pin 18) */
|
||||
devcb_write_line m_out_de_func;
|
||||
|
||||
/* if specified, this gets called for every change of the cursor pin (pin 19) */
|
||||
devcb_write_line m_out_cur_func;
|
||||
|
||||
/* if specified, this gets called for every change of the HSYNC pin (pin 39) */
|
||||
devcb_write_line m_out_hsync_func;
|
||||
|
||||
/* if specified, this gets called for every change of the VSYNC pin (pin 40) */
|
||||
devcb_write_line m_out_vsync_func;
|
||||
|
||||
/* Called whenever the update address changes
|
||||
* For vblank/hblank timing strobe indicates the physical update.
|
||||
* vblank/hblank timing not supported yet! */
|
||||
|
||||
mc6845_on_update_addr_changed_func m_on_update_addr_changed;
|
||||
};
|
||||
typedef device_delegate<void (int address, int strobe)> mc6845_on_update_addr_changed_delegate;
|
||||
#define MC6845_ON_UPDATE_ADDR_CHANGED(name) void name(int address, int strobe)
|
||||
|
||||
|
||||
class mc6845_device : public device_t,
|
||||
public device_video_interface,
|
||||
public mc6845_interface
|
||||
public device_video_interface
|
||||
{
|
||||
friend class mc6845_1_device;
|
||||
friend class r6545_1_device;
|
||||
@ -135,6 +96,27 @@ public:
|
||||
mc6845_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
|
||||
mc6845_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source);
|
||||
|
||||
static void set_show_border_area(device_t &device, bool show) { downcast<mc6845_device &>(device).m_show_border_area = show; }
|
||||
static void set_visarea_adjust(device_t &device, int min_x, int max_x, int min_y, int max_y)
|
||||
{
|
||||
mc6845_device &dev = downcast<mc6845_device &>(device);
|
||||
dev.m_visarea_adjust_min_x = min_x;
|
||||
dev.m_visarea_adjust_max_x = max_x;
|
||||
dev.m_visarea_adjust_min_y = min_y;
|
||||
dev.m_visarea_adjust_max_y = max_y;
|
||||
}
|
||||
static void set_char_width(device_t &device, int pixels) { downcast<mc6845_device &>(device).m_hpixels_per_column = pixels; }
|
||||
|
||||
static void set_begin_update_callback(device_t &device, mc6845_begin_update_delegate callback) { downcast<mc6845_device &>(device).m_begin_update_cb = callback; }
|
||||
static void set_update_row_callback(device_t &device, mc6845_update_row_delegate callback) { downcast<mc6845_device &>(device).m_update_row_cb = callback; }
|
||||
static void set_end_update_callback(device_t &device, mc6845_end_update_delegate callback) { downcast<mc6845_device &>(device).m_end_update_cb = callback; }
|
||||
static void set_on_update_addr_change_callback(device_t &device, mc6845_on_update_addr_changed_delegate callback) { downcast<mc6845_device &>(device).m_on_update_addr_changed_cb = callback; }
|
||||
|
||||
template<class _Object> static devcb2_base &set_out_de_callback(device_t &device, _Object object) { return downcast<mc6845_device &>(device).m_out_de_cb.set_callback(object); }
|
||||
template<class _Object> static devcb2_base &set_out_cur_callback(device_t &device, _Object object) { return downcast<mc6845_device &>(device).m_out_cur_cb.set_callback(object); }
|
||||
template<class _Object> static devcb2_base &set_out_hsync_callback(device_t &device, _Object object) { return downcast<mc6845_device &>(device).m_out_hsync_cb.set_callback(object); }
|
||||
template<class _Object> static devcb2_base &set_out_vsync_callback(device_t &device, _Object object) { return downcast<mc6845_device &>(device).m_out_vsync_cb.set_callback(object); }
|
||||
|
||||
/* select one of the registers for reading or writing */
|
||||
DECLARE_WRITE8_MEMBER( address_w );
|
||||
|
||||
@ -181,7 +163,6 @@ public:
|
||||
|
||||
protected:
|
||||
// device-level overrides
|
||||
virtual void device_config_complete();
|
||||
virtual void device_start();
|
||||
virtual void device_reset();
|
||||
virtual void device_post_load();
|
||||
@ -194,11 +175,6 @@ protected:
|
||||
bool m_supports_status_reg_d7;
|
||||
bool m_supports_transparent;
|
||||
|
||||
devcb_resolved_write_line m_res_out_de_func;
|
||||
devcb_resolved_write_line m_res_out_cur_func;
|
||||
devcb_resolved_write_line m_res_out_hsync_func;
|
||||
devcb_resolved_write_line m_res_out_vsync_func;
|
||||
|
||||
/* register file */
|
||||
UINT8 m_horiz_char_total; /* 0x00 */
|
||||
UINT8 m_horiz_disp; /* 0x01 */
|
||||
@ -262,7 +238,7 @@ protected:
|
||||
emu_timer *m_light_pen_latch_timer;
|
||||
emu_timer *m_upd_adr_timer;
|
||||
emu_timer *m_upd_trans_timer;
|
||||
|
||||
|
||||
/* computed values - do NOT state save these! */
|
||||
/* These computed are used to define the screen parameters for a driver */
|
||||
UINT16 m_horiz_pix_total;
|
||||
@ -290,7 +266,52 @@ protected:
|
||||
void set_cur(int state);
|
||||
void handle_line_timer();
|
||||
virtual void update_cursor_state();
|
||||
virtual UINT8 draw_scanline(int y, bitmap_rgb32 &bitmap, const rectangle &cliprect, void *param);
|
||||
virtual UINT8 draw_scanline(int y, bitmap_rgb32 &bitmap, const rectangle &cliprect);
|
||||
|
||||
/************************
|
||||
interface CRTC - driver
|
||||
************************/
|
||||
|
||||
bool m_show_border_area; /* visible screen area (false) active display (true) active display + blanking */
|
||||
|
||||
/* visible screen area adjustment */
|
||||
int m_visarea_adjust_min_x;
|
||||
int m_visarea_adjust_max_x;
|
||||
int m_visarea_adjust_min_y;
|
||||
int m_visarea_adjust_max_y;
|
||||
|
||||
int m_hpixels_per_column; /* number of pixels per video memory address */
|
||||
|
||||
/* if specified, this gets called before any pixel update,
|
||||
optionally return a pointer that will be passed to the
|
||||
update and tear down callbacks */
|
||||
mc6845_begin_update_delegate m_begin_update_cb;
|
||||
|
||||
/* this gets called for every row, the driver must output
|
||||
x_count * hpixels_per_column pixels.
|
||||
cursor_x indicates the character position where the cursor is, or -1
|
||||
if there is no cursor on this row */
|
||||
mc6845_update_row_delegate m_update_row_cb;
|
||||
|
||||
/* if specified, this gets called after all row updating is complete */
|
||||
mc6845_end_update_delegate m_end_update_cb;
|
||||
|
||||
/* Called whenever the update address changes
|
||||
* For vblank/hblank timing strobe indicates the physical update.
|
||||
* vblank/hblank timing not supported yet! */
|
||||
mc6845_on_update_addr_changed_delegate m_on_update_addr_changed_cb;
|
||||
|
||||
/* if specified, this gets called for every change of the disply enable pin (pin 18) */
|
||||
devcb2_write_line m_out_de_cb;
|
||||
|
||||
/* if specified, this gets called for every change of the cursor pin (pin 19) */
|
||||
devcb2_write_line m_out_cur_cb;
|
||||
|
||||
/* if specified, this gets called for every change of the HSYNC pin (pin 39) */
|
||||
devcb2_write_line m_out_hsync_cb;
|
||||
|
||||
/* if specified, this gets called for every change of the VSYNC pin (pin 40) */
|
||||
devcb2_write_line m_out_vsync_cb;
|
||||
};
|
||||
|
||||
|
||||
@ -403,8 +424,7 @@ public:
|
||||
inline UINT8 read_videoram(offs_t offset);
|
||||
inline void write_videoram(offs_t offset, UINT8 data);
|
||||
|
||||
void update_row(bitmap_rgb32 &bitmap, const rectangle &cliprect, UINT16 ma, UINT8 ra, UINT16 y, UINT8 x_count, INT8 cursor_x, int de, int hbp, int vbp, void *param);
|
||||
static MC6845_UPDATE_ROW( vdc_update_row );
|
||||
MC6845_UPDATE_ROW( vdc_update_row );
|
||||
|
||||
protected:
|
||||
// device-level overrides
|
||||
@ -442,7 +462,7 @@ protected:
|
||||
int m_revision;
|
||||
|
||||
virtual void update_cursor_state();
|
||||
virtual UINT8 draw_scanline(int y, bitmap_rgb32 &bitmap, const rectangle &cliprect, void *param);
|
||||
virtual UINT8 draw_scanline(int y, bitmap_rgb32 &bitmap, const rectangle &cliprect);
|
||||
|
||||
static const device_timer_id TIMER_BLOCK_COPY = 9;
|
||||
|
||||
|
@ -295,7 +295,6 @@ void isa8_cga_4enlinea_device::device_start()
|
||||
m_vram_size = 0x4000;
|
||||
m_vram.resize(m_vram_size);
|
||||
|
||||
m_update_row = NULL;
|
||||
//m_isa->install_device(0x3bf, 0x3bf, 0, 0, NULL, write8_delegate( FUNC(isa8_cga_4enlinea_device::_4enlinea_mode_control_w), this ) );
|
||||
m_isa->install_device(0x3d0, 0x3df, 0, 0, read8_delegate( FUNC(isa8_cga_4enlinea_device::_4enlinea_io_read), this ), write8_delegate( FUNC(isa8_cga_device::io_write), this ) );
|
||||
m_isa->install_bank(0x8000, 0xbfff, 0, 0, "bank1", m_vram);
|
||||
|
@ -358,28 +358,6 @@ static const ay8910_interface ay8910_intf =
|
||||
};
|
||||
|
||||
|
||||
#if 0
|
||||
/************************
|
||||
* CRTC Interface *
|
||||
************************/
|
||||
|
||||
static MC6845_INTERFACE( mc6845_intf )
|
||||
{
|
||||
false, /* show border area */
|
||||
0,0,0,0, /* visarea adjustment */
|
||||
8, /* number of pixels per video memory address */
|
||||
NULL, /* before pixel update callback */
|
||||
NULL, /* row update callback */
|
||||
NULL, /* after pixel update callback */
|
||||
DEVCB_NULL, /* callback for display state changes */
|
||||
DEVCB_NULL, /* callback for cursor state changes */
|
||||
DEVCB_NULL, /* HSYNC callback */
|
||||
DEVCB_NULL, /* VSYNC callback */
|
||||
NULL /* update address callback */
|
||||
};
|
||||
#endif
|
||||
|
||||
|
||||
/**************************
|
||||
* Machine Drivers *
|
||||
**************************/
|
||||
@ -408,7 +386,7 @@ static MACHINE_CONFIG_START( 4roses, _4roses_state )
|
||||
MCFG_PALETTE_INIT_OWNER(_4roses_state,funworld)
|
||||
MCFG_VIDEO_START_OVERRIDE(_4roses_state,funworld)
|
||||
|
||||
// MCFG_MC6845_ADD("crtc", MC6845, "screen", MASTER_CLOCK/8, mc6845_intf) /* 2MHz, guess */
|
||||
// MCFG_MC6845_ADD("crtc", MC6845, "screen", MASTER_CLOCK/8) /* 2MHz, guess */
|
||||
|
||||
/* sound hardware */
|
||||
MCFG_SPEAKER_STANDARD_MONO("mono")
|
||||
|
@ -994,27 +994,6 @@ static GFXDECODE_START( fclown )
|
||||
GFXDECODE_ENTRY( "gfx2", 0, tilelayout, 0, 16 )
|
||||
GFXDECODE_END
|
||||
|
||||
|
||||
/***********************
|
||||
* CRTC Interface *
|
||||
***********************/
|
||||
|
||||
static MC6845_INTERFACE( mc6845_intf )
|
||||
{
|
||||
false, /* show border area */
|
||||
0,0,0,0, /* visarea adjustment */
|
||||
8, /* number of pixels per video memory address */
|
||||
NULL, /* before pixel update callback */
|
||||
NULL, /* row update callback */
|
||||
NULL, /* after pixel update callback */
|
||||
DEVCB_NULL, /* callback for display state changes */
|
||||
DEVCB_NULL, /* callback for cursor state changes */
|
||||
DEVCB_NULL, /* HSYNC callback */
|
||||
DEVCB_NULL, /* VSYNC callback */
|
||||
NULL /* update address callback */
|
||||
};
|
||||
|
||||
|
||||
/*************************
|
||||
* Sound Interfaces *
|
||||
*************************/
|
||||
@ -1070,7 +1049,9 @@ static MACHINE_CONFIG_START( fclown, _5clown_state )
|
||||
MCFG_PALETTE_ADD("palette", 256)
|
||||
MCFG_PALETTE_INIT_OWNER(_5clown_state, _5clown)
|
||||
|
||||
MCFG_MC6845_ADD("crtc", MC6845, "screen", MASTER_CLOCK/16, mc6845_intf) /* guess */
|
||||
MCFG_MC6845_ADD("crtc", MC6845, "screen", MASTER_CLOCK/16) /* guess */
|
||||
MCFG_MC6845_SHOW_BORDER_AREA(false)
|
||||
MCFG_MC6845_CHAR_WIDTH(8)
|
||||
|
||||
/* sound hardware */
|
||||
MCFG_SPEAKER_STANDARD_MONO("mono")
|
||||
|
@ -210,21 +210,6 @@ static const ay8910_interface ay8910_config =
|
||||
DEVCB_NULL
|
||||
};
|
||||
|
||||
static MC6845_INTERFACE( mc6845_intf )
|
||||
{
|
||||
false, /* show border area */
|
||||
0,0,0,0, /* visarea adjustment */
|
||||
8, /* number of pixels per video memory address */
|
||||
NULL, /* before pixel update callback */
|
||||
NULL, /* row update callback */
|
||||
NULL, /* after pixel update callback */
|
||||
DEVCB_NULL, /* callback for display state changes */
|
||||
DEVCB_NULL, /* callback for cursor state changes */
|
||||
DEVCB_NULL, /* HSYNC callback */
|
||||
DEVCB_NULL, /* VSYNC callback */
|
||||
NULL /* update address callback */
|
||||
};
|
||||
|
||||
/***************************************************************************************/
|
||||
|
||||
static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8, albazg_state )
|
||||
@ -394,7 +379,9 @@ static MACHINE_CONFIG_START( yumefuda, albazg_state )
|
||||
MCFG_SCREEN_UPDATE_DRIVER(albazg_state, screen_update_yumefuda)
|
||||
MCFG_SCREEN_PALETTE("palette")
|
||||
|
||||
MCFG_MC6845_ADD("crtc", H46505, "screen", MASTER_CLOCK/16, mc6845_intf) /* hand tuned to get ~60 fps */
|
||||
MCFG_MC6845_ADD("crtc", H46505, "screen", MASTER_CLOCK/16) /* hand tuned to get ~60 fps */
|
||||
MCFG_MC6845_SHOW_BORDER_AREA(false)
|
||||
MCFG_MC6845_CHAR_WIDTH(8)
|
||||
|
||||
MCFG_GFXDECODE_ADD("gfxdecode", "palette", yumefuda )
|
||||
MCFG_PALETTE_ADD("palette", 0x80)
|
||||
|
@ -793,26 +793,6 @@ static GFXDECODE_START( amaticmg2 )
|
||||
GFXDECODE_END
|
||||
|
||||
|
||||
/************************************
|
||||
* CRTC Interface *
|
||||
************************************/
|
||||
|
||||
static MC6845_INTERFACE( mc6845_intf )
|
||||
{
|
||||
false, /* show border area */
|
||||
0,0,0,0, /* visarea adjustment */
|
||||
4, /* number of pixels per video memory address */
|
||||
NULL, /* before pixel update callback */
|
||||
NULL, /* row update callback */
|
||||
NULL, /* after pixel update callback */
|
||||
DEVCB_NULL, /* callback for display state changes */
|
||||
DEVCB_NULL, /* callback for cursor state changes */
|
||||
DEVCB_NULL, /* HSYNC callback */
|
||||
DEVCB_NULL, /* VSYNC callback */
|
||||
NULL /* update address callback */
|
||||
};
|
||||
|
||||
|
||||
/************************************
|
||||
* Machine Start & Reset *
|
||||
************************************/
|
||||
@ -866,7 +846,9 @@ static MACHINE_CONFIG_START( amaticmg, amaticmg_state )
|
||||
MCFG_SCREEN_UPDATE_DRIVER(amaticmg_state, screen_update_amaticmg)
|
||||
MCFG_SCREEN_PALETTE("palette")
|
||||
|
||||
MCFG_MC6845_ADD("crtc", MC6845, "screen", CRTC_CLOCK, mc6845_intf)
|
||||
MCFG_MC6845_ADD("crtc", MC6845, "screen", CRTC_CLOCK)
|
||||
MCFG_MC6845_SHOW_BORDER_AREA(false)
|
||||
MCFG_MC6845_CHAR_WIDTH(4)
|
||||
|
||||
MCFG_GFXDECODE_ADD("gfxdecode", "palette", amaticmg)
|
||||
|
||||
|
@ -99,6 +99,7 @@ public:
|
||||
DECLARE_READ8_MEMBER(mc6845_r);
|
||||
DECLARE_WRITE8_MEMBER(mc6845_w);
|
||||
DECLARE_WRITE16_MEMBER(vram_w);
|
||||
MC6845_ON_UPDATE_ADDR_CHANGED(crtc_addr);
|
||||
|
||||
UINT32 screen_update_amusco(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
INTERRUPT_GEN_MEMBER(amusco_interrupt);
|
||||
@ -482,28 +483,11 @@ GFXDECODE_END
|
||||
* CRTC Interface *
|
||||
************************/
|
||||
|
||||
MC6845_ON_UPDATE_ADDR_CHANGED(crtc_addr)
|
||||
MC6845_ON_UPDATE_ADDR_CHANGED(amusco_state::crtc_addr)
|
||||
{
|
||||
// amusco_state *state = device->machine().driver_data<amusco_state>();
|
||||
// state->m_video_update_address = address;
|
||||
// m_video_update_address = address;
|
||||
}
|
||||
|
||||
static MC6845_INTERFACE( mc6845_intf )
|
||||
{
|
||||
false, /* show border area */
|
||||
0,0,0,0, /* visarea adjustment */
|
||||
8, /* number of pixels per video memory address */
|
||||
NULL, /* before pixel update callback */
|
||||
NULL, /* row update callback */
|
||||
NULL, /* after pixel update callback */
|
||||
DEVCB_NULL, /* callback for display state changes */
|
||||
DEVCB_NULL, /* callback for cursor state changes */
|
||||
DEVCB_NULL, /* HSYNC callback */
|
||||
DEVCB_NULL, /* VSYNC callback */
|
||||
crtc_addr /* update address callback */
|
||||
};
|
||||
|
||||
|
||||
INTERRUPT_GEN_MEMBER(amusco_state::amusco_vblank_irq)
|
||||
{
|
||||
device.execute().set_input_line_and_vector(0, HOLD_LINE, 0x80/4); // sets 0x665 to 0xff
|
||||
@ -545,7 +529,10 @@ static MACHINE_CONFIG_START( amusco, amusco_state )
|
||||
MCFG_PALETTE_ADD("palette", 8)
|
||||
MCFG_PALETTE_INIT_OWNER(amusco_state, amusco_palette_init)
|
||||
|
||||
MCFG_MC6845_ADD("crtc", R6545_1, "screen", CRTC_CLOCK, mc6845_intf) /* guess */
|
||||
MCFG_MC6845_ADD("crtc", R6545_1, "screen", CRTC_CLOCK) /* guess */
|
||||
MCFG_MC6845_SHOW_BORDER_AREA(false)
|
||||
MCFG_MC6845_CHAR_WIDTH(8)
|
||||
MCFG_MC6845_ADDR_CHANGED_CB(amusco_state, crtc_addr)
|
||||
|
||||
/* sound hardware */
|
||||
MCFG_SPEAKER_STANDARD_MONO("mono")
|
||||
|
@ -1568,24 +1568,6 @@ static const ay8910_interface ay8910_config2 =
|
||||
DEVCB_DRIVER_MEMBER(aristmk4_state,pbltlp_out) // Port B write - goes to lamps on the buttons x4 and light tower x4
|
||||
};
|
||||
|
||||
static MC6845_INTERFACE( mc6845_intf )
|
||||
{
|
||||
/* in fact is a mc6845 driving 4 pixels by memory address.
|
||||
that's why the big horizontal parameters */
|
||||
|
||||
false, /* show border area */
|
||||
0,0,0,0, /* visarea adjustment */
|
||||
4, /* number of pixels per video memory address */
|
||||
NULL, /* before pixel update callback */
|
||||
NULL, /* row update callback */
|
||||
NULL, /* after pixel update callback */
|
||||
DEVCB_NULL, /* callback for display state changes */
|
||||
DEVCB_NULL, /* callback for cursor state changes */
|
||||
DEVCB_NULL, /* HSYNC callback */
|
||||
DEVCB_NULL, /* VSYNC callback */
|
||||
NULL /* update address callback */
|
||||
};
|
||||
|
||||
/* read m/c number */
|
||||
|
||||
READ8_MEMBER(aristmk4_state::pa1_r)
|
||||
@ -1724,7 +1706,12 @@ static MACHINE_CONFIG_START( aristmk4, aristmk4_state )
|
||||
MCFG_PIA_CA2_HANDLER(WRITELINE(aristmk4_state, mkiv_pia_ca2))
|
||||
MCFG_PIA_CB2_HANDLER(WRITELINE(aristmk4_state, mkiv_pia_cb2))
|
||||
|
||||
MCFG_MC6845_ADD("crtc", C6545_1, "screen", MAIN_CLOCK/8, mc6845_intf) // TODO: type is unknown
|
||||
MCFG_MC6845_ADD("crtc", C6545_1, "screen", MAIN_CLOCK/8) // TODO: type is unknown
|
||||
/* in fact is a mc6845 driving 4 pixels by memory address.
|
||||
that's why the big horizontal parameters */
|
||||
MCFG_MC6845_SHOW_BORDER_AREA(false)
|
||||
MCFG_MC6845_CHAR_WIDTH(4)
|
||||
|
||||
MCFG_MC146818_ADD( "rtc", XTAL_4_194304Mhz )
|
||||
|
||||
MCFG_SPEAKER_STANDARD_MONO("mono")
|
||||
|
@ -847,26 +847,6 @@ static GFXDECODE_START( avt )
|
||||
GFXDECODE_END
|
||||
|
||||
|
||||
/*******************************************
|
||||
* CRTC Interface *
|
||||
*******************************************/
|
||||
|
||||
static MC6845_INTERFACE( mc6845_intf )
|
||||
{
|
||||
false, /* show border area */
|
||||
0,0,0,0, /* visarea adjustment */
|
||||
8, /* number of pixels per video memory address */
|
||||
NULL, /* before pixel update callback */
|
||||
NULL, /* row update callback */
|
||||
NULL, /* after pixel update callback */
|
||||
DEVCB_NULL, /* callback for display state changes */
|
||||
DEVCB_NULL, /* callback for cursor state changes */
|
||||
DEVCB_NULL, /* HSYNC callback */
|
||||
DEVCB_NULL, /* VSYNC callback */
|
||||
NULL /* update address callback */
|
||||
};
|
||||
|
||||
|
||||
/********************************************
|
||||
* Sound Interfaces *
|
||||
********************************************/
|
||||
@ -914,7 +894,9 @@ static MACHINE_CONFIG_START( avt, avt_state )
|
||||
MCFG_PALETTE_ADD("palette", 8*16)
|
||||
MCFG_PALETTE_INIT_OWNER(avt_state, avt)
|
||||
|
||||
MCFG_MC6845_ADD("crtc", MC6845, "screen", CRTC_CLOCK, mc6845_intf) /* guess */
|
||||
MCFG_MC6845_ADD("crtc", MC6845, "screen", CRTC_CLOCK) /* guess */
|
||||
MCFG_MC6845_SHOW_BORDER_AREA(false)
|
||||
MCFG_MC6845_CHAR_WIDTH(8)
|
||||
|
||||
/* sound hardware */
|
||||
MCFG_SPEAKER_STANDARD_MONO("mono")
|
||||
|
@ -701,26 +701,6 @@ static GFXDECODE_START( megadpkr )
|
||||
GFXDECODE_END
|
||||
|
||||
|
||||
/********************************************
|
||||
* CRTC Interface *
|
||||
********************************************/
|
||||
|
||||
static MC6845_INTERFACE( mc6845_intf )
|
||||
{
|
||||
false, /* show border area */
|
||||
0,0,0,0, /* visarea adjustment */
|
||||
8, /* number of pixels per video memory address */
|
||||
NULL, /* before pixel update callback */
|
||||
NULL, /* row update callback */
|
||||
NULL, /* after pixel update callback */
|
||||
DEVCB_NULL, /* callback for display state changes */
|
||||
DEVCB_NULL, /* callback for cursor state changes */
|
||||
DEVCB_NULL, /* HSYNC callback */
|
||||
DEVCB_NULL, /* VSYNC callback */
|
||||
NULL /* update address callback */
|
||||
};
|
||||
|
||||
|
||||
/**********************************************************
|
||||
* Discrete Sound Routines *
|
||||
***********************************************************
|
||||
@ -787,7 +767,9 @@ static MACHINE_CONFIG_START( megadpkr, blitz_state )
|
||||
MCFG_SCREEN_UPDATE_DRIVER(blitz_state, screen_update_megadpkr)
|
||||
MCFG_SCREEN_PALETTE("palette")
|
||||
|
||||
MCFG_MC6845_ADD("crtc", MC6845, "screen", CPU_CLOCK, mc6845_intf)
|
||||
MCFG_MC6845_ADD("crtc", MC6845, "screen", CPU_CLOCK)
|
||||
MCFG_MC6845_SHOW_BORDER_AREA(false)
|
||||
MCFG_MC6845_CHAR_WIDTH(8)
|
||||
|
||||
MCFG_GFXDECODE_ADD("gfxdecode", "palette", megadpkr)
|
||||
MCFG_PALETTE_ADD("palette", 256)
|
||||
|
@ -1647,10 +1647,6 @@ INPUT_PORTS_END
|
||||
|
||||
// R6845AP used for video sync signals only
|
||||
|
||||
static MC6845_ON_UPDATE_ADDR_CHANGED(crtc_addr)
|
||||
{
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(blitz68k_state::crtc_vsync_irq1)
|
||||
{
|
||||
m_maincpu->set_input_line(1, state ? ASSERT_LINE : CLEAR_LINE);
|
||||
@ -1667,51 +1663,6 @@ WRITE_LINE_MEMBER(blitz68k_state::crtc_vsync_irq5)
|
||||
}
|
||||
|
||||
|
||||
static MC6845_INTERFACE( mc6845_intf_irq1 )
|
||||
{
|
||||
false, /* show border area */
|
||||
0,0,0,0, /* visarea adjustment */
|
||||
4, /* number of pixels per video memory address */ /* Horizontal Display programmed to 160 characters */
|
||||
NULL, /* before pixel update callback */
|
||||
NULL, /* row update callback */
|
||||
NULL, /* after pixel update callback */
|
||||
DEVCB_NULL, /* callback for display state changes */
|
||||
DEVCB_NULL, /* callback for cursor state changes */
|
||||
DEVCB_NULL, /* HSYNC callback */
|
||||
DEVCB_DRIVER_LINE_MEMBER(blitz68k_state,crtc_vsync_irq1), /* VSYNC callback */
|
||||
crtc_addr /* update address callback */
|
||||
};
|
||||
|
||||
static MC6845_INTERFACE( mc6845_intf_irq3 )
|
||||
{
|
||||
false, /* show border area */
|
||||
0,0,0,0, /* visarea adjustment */
|
||||
4, /* number of pixels per video memory address */ /* Horizontal Display programmed to 160 characters */
|
||||
NULL, /* before pixel update callback */
|
||||
NULL, /* row update callback */
|
||||
NULL, /* after pixel update callback */
|
||||
DEVCB_NULL, /* callback for display state changes */
|
||||
DEVCB_NULL, /* callback for cursor state changes */
|
||||
DEVCB_NULL, /* HSYNC callback */
|
||||
DEVCB_DRIVER_LINE_MEMBER(blitz68k_state,crtc_vsync_irq3), /* VSYNC callback */
|
||||
crtc_addr /* update address callback */
|
||||
};
|
||||
|
||||
static MC6845_INTERFACE( mc6845_intf_irq5 )
|
||||
{
|
||||
false, /* show border area */
|
||||
0,0,0,0, /* visarea adjustment */
|
||||
4, /* number of pixels per video memory address */ /* Horizontal Display programmed to 160 characters */
|
||||
NULL, /* before pixel update callback */
|
||||
NULL, /* row update callback */
|
||||
NULL, /* after pixel update callback */
|
||||
DEVCB_NULL, /* callback for display state changes */
|
||||
DEVCB_NULL, /* callback for cursor state changes */
|
||||
DEVCB_NULL, /* HSYNC callback */
|
||||
DEVCB_DRIVER_LINE_MEMBER(blitz68k_state,crtc_vsync_irq5), /* VSYNC callback */
|
||||
crtc_addr /* update address callback */
|
||||
};
|
||||
|
||||
static ADDRESS_MAP_START( ramdac_map, AS_0, 8, blitz68k_state )
|
||||
AM_RANGE(0x000, 0x3ff) AM_DEVREADWRITE("ramdac",ramdac_device,ramdac_pal_r,ramdac_rgb666_w)
|
||||
ADDRESS_MAP_END
|
||||
@ -1802,7 +1753,10 @@ static MACHINE_CONFIG_START( cjffruit, blitz68k_state )
|
||||
MCFG_SCREEN_VISIBLE_AREA(0, 512-1, 0, 256-8-1)
|
||||
MCFG_SCREEN_UPDATE_DRIVER(blitz68k_state, screen_update_blitz68k)
|
||||
|
||||
MCFG_MC6845_ADD("crtc", R6545_1, "screen", XTAL_22_1184MHz/8, mc6845_intf_irq1)
|
||||
MCFG_MC6845_ADD("crtc", R6545_1, "screen", XTAL_22_1184MHz/8)
|
||||
MCFG_MC6845_SHOW_BORDER_AREA(false)
|
||||
MCFG_MC6845_CHAR_WIDTH(4)
|
||||
MCFG_MC6845_OUT_VSYNC_CB(WRITELINE(blitz68k_state, crtc_vsync_irq1))
|
||||
|
||||
MCFG_PALETTE_ADD("palette", 0x100)
|
||||
|
||||
@ -1834,7 +1788,10 @@ static MACHINE_CONFIG_START( bankrob, blitz68k_state )
|
||||
MCFG_SCREEN_VISIBLE_AREA(0, 512-1, 0+4, 256-1-4)
|
||||
MCFG_SCREEN_UPDATE_DRIVER(blitz68k_state, screen_update_blitz68k)
|
||||
|
||||
MCFG_MC6845_ADD("crtc", H46505, "screen", XTAL_11_0592MHz/4, mc6845_intf_irq3)
|
||||
MCFG_MC6845_ADD("crtc", H46505, "screen", XTAL_11_0592MHz/4)
|
||||
MCFG_MC6845_SHOW_BORDER_AREA(false)
|
||||
MCFG_MC6845_CHAR_WIDTH(4)
|
||||
MCFG_MC6845_OUT_VSYNC_CB(WRITELINE(blitz68k_state, crtc_vsync_irq3))
|
||||
|
||||
MCFG_PALETTE_ADD("palette", 0x100)
|
||||
|
||||
@ -1864,7 +1821,10 @@ static MACHINE_CONFIG_START( bankroba, blitz68k_state )
|
||||
MCFG_SCREEN_VISIBLE_AREA(0, 512-1, 0+7, 256-1)
|
||||
MCFG_SCREEN_UPDATE_DRIVER(blitz68k_state, screen_update_blitz68k)
|
||||
|
||||
MCFG_MC6845_ADD("crtc", H46505, "screen", XTAL_11_0592MHz/4, mc6845_intf_irq5)
|
||||
MCFG_MC6845_ADD("crtc", H46505, "screen", XTAL_11_0592MHz/4)
|
||||
MCFG_MC6845_SHOW_BORDER_AREA(false)
|
||||
MCFG_MC6845_CHAR_WIDTH(4)
|
||||
MCFG_MC6845_OUT_VSYNC_CB(WRITELINE(blitz68k_state, crtc_vsync_irq5))
|
||||
|
||||
MCFG_PALETTE_ADD("palette", 0x100)
|
||||
|
||||
@ -1893,7 +1853,10 @@ static MACHINE_CONFIG_START( deucesw2, blitz68k_state )
|
||||
MCFG_SCREEN_VISIBLE_AREA(0, 512-1, 0, 256-1)
|
||||
MCFG_SCREEN_UPDATE_DRIVER(blitz68k_state, screen_update_blitz68k)
|
||||
|
||||
MCFG_MC6845_ADD("crtc", R6545_1, "screen", XTAL_22_1184MHz/8, mc6845_intf_irq3)
|
||||
MCFG_MC6845_ADD("crtc", R6545_1, "screen", XTAL_22_1184MHz/8)
|
||||
MCFG_MC6845_SHOW_BORDER_AREA(false)
|
||||
MCFG_MC6845_CHAR_WIDTH(4)
|
||||
MCFG_MC6845_OUT_VSYNC_CB(WRITELINE(blitz68k_state, crtc_vsync_irq3))
|
||||
|
||||
MCFG_PALETTE_ADD("palette", 0x100)
|
||||
|
||||
@ -1924,7 +1887,10 @@ static MACHINE_CONFIG_START( dualgame, blitz68k_state )
|
||||
MCFG_SCREEN_VISIBLE_AREA(0, 512-1, 0+4, 256-1-4)
|
||||
MCFG_SCREEN_UPDATE_DRIVER(blitz68k_state, screen_update_blitz68k)
|
||||
|
||||
MCFG_MC6845_ADD("crtc", H46505, "screen", XTAL_11_0592MHz/4, mc6845_intf_irq3)
|
||||
MCFG_MC6845_ADD("crtc", H46505, "screen", XTAL_11_0592MHz/4)
|
||||
MCFG_MC6845_SHOW_BORDER_AREA(false)
|
||||
MCFG_MC6845_CHAR_WIDTH(4)
|
||||
MCFG_MC6845_OUT_VSYNC_CB(WRITELINE(blitz68k_state, crtc_vsync_irq3))
|
||||
|
||||
MCFG_PALETTE_ADD("palette", 0x100)
|
||||
|
||||
@ -1953,7 +1919,10 @@ static MACHINE_CONFIG_START( hermit, blitz68k_state )
|
||||
MCFG_SCREEN_VISIBLE_AREA(0, 512-1, 0+4, 256-1-4)
|
||||
MCFG_SCREEN_UPDATE_DRIVER(blitz68k_state, screen_update_blitz68k)
|
||||
|
||||
MCFG_MC6845_ADD("crtc", H46505, "screen", XTAL_22_1184MHz/8, mc6845_intf_irq1)
|
||||
MCFG_MC6845_ADD("crtc", H46505, "screen", XTAL_22_1184MHz/8)
|
||||
MCFG_MC6845_SHOW_BORDER_AREA(false)
|
||||
MCFG_MC6845_CHAR_WIDTH(4)
|
||||
MCFG_MC6845_OUT_VSYNC_CB(WRITELINE(blitz68k_state, crtc_vsync_irq1))
|
||||
|
||||
MCFG_PALETTE_ADD("palette", 0x100)
|
||||
|
||||
@ -1987,7 +1956,10 @@ static MACHINE_CONFIG_START( maxidbl, blitz68k_state )
|
||||
MCFG_SCREEN_VISIBLE_AREA(0, 512-1, 0, 256-1)
|
||||
MCFG_SCREEN_UPDATE_DRIVER(blitz68k_state, screen_update_blitz68k_noblit)
|
||||
|
||||
MCFG_MC6845_ADD("crtc", H46505, "screen", XTAL_11_0592MHz/4, mc6845_intf_irq3)
|
||||
MCFG_MC6845_ADD("crtc", H46505, "screen", XTAL_11_0592MHz/4)
|
||||
MCFG_MC6845_SHOW_BORDER_AREA(false)
|
||||
MCFG_MC6845_CHAR_WIDTH(4)
|
||||
MCFG_MC6845_OUT_VSYNC_CB(WRITELINE(blitz68k_state, crtc_vsync_irq3))
|
||||
|
||||
MCFG_PALETTE_ADD("palette", 0x100)
|
||||
MCFG_RAMDAC_ADD("ramdac", ramdac_map, "palette")
|
||||
|
@ -312,21 +312,6 @@ static GFXDECODE_START( buster )
|
||||
GFXDECODE_ENTRY( "gfx1", 0, tiles8x8_layout, 0, 1 )
|
||||
GFXDECODE_END
|
||||
|
||||
static MC6845_INTERFACE( mc6845_intf )
|
||||
{
|
||||
false, /* show border area */
|
||||
0,0,0,0, /* visarea adjustment */
|
||||
8, /* number of pixels per video memory address */
|
||||
NULL, /* before pixel update callback */
|
||||
NULL, /* row update callback */
|
||||
NULL, /* after pixel update callback */
|
||||
DEVCB_NULL, /* callback for display state changes */
|
||||
DEVCB_NULL, /* callback for cursor state changes */
|
||||
DEVCB_NULL, /* HSYNC callback */
|
||||
DEVCB_NULL, /* VSYNC callback */
|
||||
NULL /* update address callback */
|
||||
};
|
||||
|
||||
PALETTE_INIT_MEMBER(buster_state, buster)
|
||||
{
|
||||
int i;
|
||||
@ -350,7 +335,10 @@ static MACHINE_CONFIG_START( buster, buster_state )
|
||||
MCFG_SCREEN_VISIBLE_AREA(0, 256-1, 16, 256-16-1)
|
||||
MCFG_SCREEN_UPDATE_DRIVER(buster_state, screen_update_buster)
|
||||
MCFG_SCREEN_PALETTE("palette")
|
||||
MCFG_MC6845_ADD("crtc", MC6845, "screen", XTAL_3_579545MHz/4, mc6845_intf) //unknown clock / type
|
||||
|
||||
MCFG_MC6845_ADD("crtc", MC6845, "screen", XTAL_3_579545MHz/4) //unknown clock / type
|
||||
MCFG_MC6845_SHOW_BORDER_AREA(false)
|
||||
MCFG_MC6845_CHAR_WIDTH(8)
|
||||
|
||||
MCFG_GFXDECODE_ADD("gfxdecode", "palette", buster)
|
||||
MCFG_PALETTE_ADD("palette", 8)
|
||||
|
@ -2599,26 +2599,6 @@ static const ay8910_interface sys906_ay8912_intf =
|
||||
};
|
||||
|
||||
|
||||
/*************************************************
|
||||
* CRTC Interface *
|
||||
*************************************************/
|
||||
|
||||
static MC6845_INTERFACE( mc6845_intf )
|
||||
{
|
||||
false, /* show border area */
|
||||
0,0,0,0, /* visarea adjustment */
|
||||
8, /* number of pixels per video memory address */
|
||||
NULL, /* before pixel update callback */
|
||||
NULL, /* row update callback */
|
||||
NULL, /* after pixel update callback */
|
||||
DEVCB_NULL, /* callback for display state changes */
|
||||
DEVCB_NULL, /* callback for cursor state changes */
|
||||
DEVCB_NULL, /* HSYNC callback */
|
||||
DEVCB_NULL, /* VSYNC callback */
|
||||
NULL /* update address callback */
|
||||
};
|
||||
|
||||
|
||||
/*************************************************
|
||||
* Machine Drivers *
|
||||
*************************************************/
|
||||
@ -2653,7 +2633,9 @@ static MACHINE_CONFIG_START( sys903, calomega_state )
|
||||
MCFG_PALETTE_ADD("palette", 1024)
|
||||
MCFG_PALETTE_INIT_OWNER(calomega_state, calomega)
|
||||
|
||||
MCFG_MC6845_ADD("crtc", MC6845, "screen", CPU_CLOCK, mc6845_intf) /* 6845 @ CPU clock */
|
||||
MCFG_MC6845_ADD("crtc", MC6845, "screen", CPU_CLOCK) /* 6845 @ CPU clock */
|
||||
MCFG_MC6845_SHOW_BORDER_AREA(false)
|
||||
MCFG_MC6845_CHAR_WIDTH(8)
|
||||
|
||||
/* sound hardware */
|
||||
MCFG_SPEAKER_STANDARD_MONO("mono")
|
||||
|
@ -315,22 +315,6 @@ PALETTE_INIT_MEMBER(carrera_state, carrera)
|
||||
}
|
||||
|
||||
|
||||
static MC6845_INTERFACE( mc6845_intf )
|
||||
{
|
||||
false, /* show border area */
|
||||
0,0,0,0, /* visarea adjustment */
|
||||
8, /* number of pixels per video memory address */
|
||||
NULL, /* before pixel update callback */
|
||||
NULL, /* row update callback */
|
||||
NULL, /* after pixel update callback */
|
||||
DEVCB_NULL, /* callback for display state changes */
|
||||
DEVCB_NULL, /* callback for cursor state changes */
|
||||
DEVCB_NULL, /* HSYNC callback */
|
||||
DEVCB_NULL, /* VSYNC callback */
|
||||
NULL /* update address callback */
|
||||
};
|
||||
|
||||
|
||||
static MACHINE_CONFIG_START( carrera, carrera_state )
|
||||
/* basic machine hardware */
|
||||
MCFG_CPU_ADD("maincpu", Z80, MASTER_CLOCK / 6)
|
||||
@ -347,7 +331,9 @@ static MACHINE_CONFIG_START( carrera, carrera_state )
|
||||
MCFG_SCREEN_UPDATE_DRIVER(carrera_state, screen_update_carrera)
|
||||
MCFG_SCREEN_PALETTE("palette")
|
||||
|
||||
MCFG_MC6845_ADD("crtc", MC6845, "screen", MASTER_CLOCK / 16, mc6845_intf)
|
||||
MCFG_MC6845_ADD("crtc", MC6845, "screen", MASTER_CLOCK / 16)
|
||||
MCFG_MC6845_SHOW_BORDER_AREA(false)
|
||||
MCFG_MC6845_CHAR_WIDTH(8)
|
||||
|
||||
MCFG_GFXDECODE_ADD("gfxdecode", "palette", carrera)
|
||||
MCFG_PALETTE_ADD("palette", 32)
|
||||
|
@ -440,22 +440,6 @@ void chance32_state::machine_reset()
|
||||
}
|
||||
|
||||
|
||||
static MC6845_INTERFACE( mc6845_intf )
|
||||
{
|
||||
false, /* show border area */
|
||||
0,0,0,0, /* visarea adjustment */
|
||||
16, /* number of pixels per video memory address */
|
||||
NULL, /* before pixel update callback */
|
||||
NULL, /* row update callback */
|
||||
NULL, /* after pixel update callback */
|
||||
DEVCB_NULL, /* callback for display state changes */
|
||||
DEVCB_NULL, /* callback for cursor state changes */
|
||||
DEVCB_NULL, /* HSYNC callback */
|
||||
DEVCB_NULL, /* VSYNC callback */
|
||||
NULL /* update address callback */
|
||||
};
|
||||
|
||||
|
||||
static MACHINE_CONFIG_START( chance32, chance32_state )
|
||||
|
||||
/* basic machine hardware */
|
||||
@ -464,7 +448,6 @@ static MACHINE_CONFIG_START( chance32, chance32_state )
|
||||
MCFG_CPU_IO_MAP(chance32_portmap)
|
||||
MCFG_CPU_VBLANK_INT_DRIVER("screen", chance32_state, irq0_line_hold)
|
||||
|
||||
|
||||
/* video hardware */
|
||||
MCFG_SCREEN_ADD("screen", RASTER)
|
||||
MCFG_SCREEN_REFRESH_RATE(52.786)
|
||||
@ -475,7 +458,9 @@ static MACHINE_CONFIG_START( chance32, chance32_state )
|
||||
MCFG_SCREEN_UPDATE_DRIVER(chance32_state, screen_update_chance32)
|
||||
MCFG_SCREEN_PALETTE("palette")
|
||||
|
||||
MCFG_MC6845_ADD("crtc", H46505, "screen", 12000000/16, mc6845_intf) /* 52.786 Hz (similar to Major Poker) */
|
||||
MCFG_MC6845_ADD("crtc", H46505, "screen", 12000000/16) /* 52.786 Hz (similar to Major Poker) */
|
||||
MCFG_MC6845_SHOW_BORDER_AREA(false)
|
||||
MCFG_MC6845_CHAR_WIDTH(16)
|
||||
|
||||
MCFG_GFXDECODE_ADD("gfxdecode", "palette", chance32)
|
||||
MCFG_PALETTE_ADD("palette", 0x800)
|
||||
|
@ -1448,21 +1448,6 @@ static const ay8910_interface ay8912_interface =
|
||||
DEVCB_NULL
|
||||
};
|
||||
|
||||
static MC6845_INTERFACE( h46505_intf )
|
||||
{
|
||||
false, /* show border area */
|
||||
0,0,0,0, /* visarea adjustment */
|
||||
8, /* number of pixels per video memory address */
|
||||
NULL, /* before pixel update callback */
|
||||
NULL, /* row update callback */
|
||||
NULL, /* after pixel update callback */
|
||||
DEVCB_NULL, /* callback for display state changes */
|
||||
DEVCB_NULL, /* callback for cursor state changes */
|
||||
DEVCB_NULL, /* HSYNC callback */
|
||||
DEVCB_NULL, /* VSYNC callback */
|
||||
NULL /* update address callback */
|
||||
};
|
||||
|
||||
|
||||
static MACHINE_CONFIG_START( coinmstr, coinmstr_state )
|
||||
MCFG_CPU_ADD("maincpu", Z80, CPU_CLOCK) // 7 MHz.
|
||||
@ -1493,7 +1478,9 @@ static MACHINE_CONFIG_START( coinmstr, coinmstr_state )
|
||||
MCFG_GFXDECODE_ADD("gfxdecode", "palette", coinmstr)
|
||||
MCFG_PALETTE_ADD("palette", 46*32*4)
|
||||
|
||||
MCFG_MC6845_ADD("crtc", H46505, "screen", 14000000 / 16, h46505_intf)
|
||||
MCFG_MC6845_ADD("crtc", H46505, "screen", 14000000 / 16)
|
||||
MCFG_MC6845_SHOW_BORDER_AREA(false)
|
||||
MCFG_MC6845_CHAR_WIDTH(8)
|
||||
|
||||
/* sound hardware */
|
||||
MCFG_SPEAKER_STANDARD_MONO("mono")
|
||||
|
@ -551,35 +551,6 @@ static GFXDECODE_START( docastle )
|
||||
GFXDECODE_END
|
||||
|
||||
|
||||
/*************************************
|
||||
*
|
||||
* 6845 CRTC interface
|
||||
*
|
||||
*************************************/
|
||||
|
||||
/*
|
||||
The games program the CRTC for a width of 32 characters (256 pixels).
|
||||
However, the DE output from the CRTC is first ANDed with the NAND of
|
||||
MA1 through MA4, and then delayed by 8 pixel clocks; this effectively
|
||||
blanks the first 8 pixels and last 8 pixels of each line.
|
||||
*/
|
||||
|
||||
static MC6845_INTERFACE( crtc_intf )
|
||||
{
|
||||
false, /* show border area */
|
||||
8,-8,0,0, /* visarea adjustment */
|
||||
8, /* number of pixels per video memory address */
|
||||
NULL, /* before pixel update callback */
|
||||
NULL, /* row update callback */
|
||||
NULL, /* after pixel update callback */
|
||||
DEVCB_NULL, /* callback for display state changes */
|
||||
DEVCB_NULL, /* callback for cursor state changes */
|
||||
DEVCB_DRIVER_LINE_MEMBER(docastle_state, docastle_tint), /* HSYNC callback */
|
||||
DEVCB_NULL, /* VSYNC callback */
|
||||
NULL /* update address callback */
|
||||
};
|
||||
|
||||
|
||||
/* Machine Drivers */
|
||||
|
||||
void docastle_state::machine_reset()
|
||||
@ -625,7 +596,17 @@ static MACHINE_CONFIG_START( docastle, docastle_state )
|
||||
MCFG_CPU_VBLANK_INT_DRIVER("screen", docastle_state, nmi_line_pulse)
|
||||
|
||||
/* video hardware */
|
||||
MCFG_MC6845_ADD("crtc", H46505, "screen", XTAL_9_828MHz / 16, crtc_intf)
|
||||
MCFG_MC6845_ADD("crtc", H46505, "screen", XTAL_9_828MHz / 16)
|
||||
/*
|
||||
The games program the CRTC for a width of 32 characters (256 pixels).
|
||||
However, the DE output from the CRTC is first ANDed with the NAND of
|
||||
MA1 through MA4, and then delayed by 8 pixel clocks; this effectively
|
||||
blanks the first 8 pixels and last 8 pixels of each line.
|
||||
*/
|
||||
MCFG_MC6845_SHOW_BORDER_AREA(false)
|
||||
MCFG_MC6845_VISAREA_ADJUST(8,-8,0,0)
|
||||
MCFG_MC6845_CHAR_WIDTH(8)
|
||||
MCFG_MC6845_OUT_HSYNC_CB(WRITELINE(docastle_state, docastle_tint))
|
||||
|
||||
MCFG_SCREEN_ADD("screen", RASTER)
|
||||
MCFG_SCREEN_RAW_PARAMS(XTAL_9_828MHz/2, 0x138, 8, 0x100-8, 0x108, 0, 0xc0) // from crtc
|
||||
|
@ -423,22 +423,6 @@ static const ay8910_interface ay8910_config_2 =
|
||||
DEVCB_NULL /* Port B write */
|
||||
};
|
||||
|
||||
static MC6845_INTERFACE( mc6845_intf )
|
||||
{
|
||||
false, /* show border area */
|
||||
0,0,0,0, /* visarea adjustment */
|
||||
8, /* number of pixels per video memory address */
|
||||
NULL, /* before pixel update callback */
|
||||
NULL, /* row update callback */
|
||||
NULL, /* after pixel update callback */
|
||||
DEVCB_NULL, /* callback for display state changes */
|
||||
DEVCB_NULL, /* callback for cursor state changes */
|
||||
DEVCB_NULL, /* HSYNC callback */
|
||||
DEVCB_NULL, /* VSYNC callback */
|
||||
NULL /* update address callback */
|
||||
};
|
||||
|
||||
|
||||
|
||||
static const gfx_layout tilelayout =
|
||||
{
|
||||
@ -493,7 +477,9 @@ static MACHINE_CONFIG_START( flipjack, flipjack_state )
|
||||
MCFG_SCREEN_RAW_PARAMS(VIDEO_CLOCK, 0x188, 0, 0x100, 0x100, 0, 0xc0) // from crtc
|
||||
MCFG_SCREEN_UPDATE_DRIVER(flipjack_state, screen_update_flipjack)
|
||||
|
||||
MCFG_MC6845_ADD("crtc", HD6845, "screen", VIDEO_CLOCK/8, mc6845_intf)
|
||||
MCFG_MC6845_ADD("crtc", HD6845, "screen", VIDEO_CLOCK/8)
|
||||
MCFG_MC6845_SHOW_BORDER_AREA(false)
|
||||
MCFG_MC6845_CHAR_WIDTH(8)
|
||||
|
||||
MCFG_GFXDECODE_ADD("gfxdecode", "palette", flipjack)
|
||||
|
||||
|
@ -526,22 +526,6 @@ static const ay8910_interface ay8910_config =
|
||||
};
|
||||
|
||||
|
||||
static MC6845_INTERFACE( mc6845_intf )
|
||||
{
|
||||
false, /* show border area */
|
||||
0,0,0,0, /* visarea adjustment */
|
||||
8, /* number of pixels per video memory address */
|
||||
NULL, /* before pixel update callback */
|
||||
NULL, /* row update callback */
|
||||
NULL, /* after pixel update callback */
|
||||
DEVCB_NULL, /* callback for display state changes */
|
||||
DEVCB_NULL, /* callback for cursor state changes */
|
||||
DEVCB_NULL, /* HSYNC callback */
|
||||
DEVCB_NULL, /* VSYNC callback */
|
||||
NULL /* update address callback */
|
||||
};
|
||||
|
||||
|
||||
static ADDRESS_MAP_START( fortecar_map, AS_PROGRAM, 8, fortecar_state )
|
||||
AM_RANGE(0x0000, 0xbfff) AM_ROM
|
||||
AM_RANGE(0xc000, 0xc7ff) AM_ROM
|
||||
@ -699,7 +683,9 @@ static MACHINE_CONFIG_START( fortecar, fortecar_state )
|
||||
MCFG_PALETTE_ADD("palette", 0x200)
|
||||
MCFG_PALETTE_INIT_OWNER(fortecar_state, fortecar)
|
||||
|
||||
MCFG_MC6845_ADD("crtc", MC6845, "screen", CRTC_CLOCK, mc6845_intf) /* 1.5 MHz, measured */
|
||||
MCFG_MC6845_ADD("crtc", MC6845, "screen", CRTC_CLOCK) /* 1.5 MHz, measured */
|
||||
MCFG_MC6845_SHOW_BORDER_AREA(false)
|
||||
MCFG_MC6845_CHAR_WIDTH(8)
|
||||
|
||||
MCFG_SPEAKER_STANDARD_MONO("mono")
|
||||
|
||||
|
@ -2867,41 +2867,6 @@ static const ay8910_interface funquiz_ay8910_intf =
|
||||
DEVCB_DRIVER_MEMBER(funworld_state,funworld_lamp_b_w) /* portB out */
|
||||
};
|
||||
|
||||
/************************
|
||||
* CRTC Interface *
|
||||
************************/
|
||||
|
||||
static MC6845_INTERFACE( mc6845_intf )
|
||||
{
|
||||
false, /* show border area */
|
||||
0,0,0,0, /* visarea adjustment */
|
||||
4, /* number of pixels per video memory address */
|
||||
NULL, /* before pixel update callback */
|
||||
NULL, /* row update callback */
|
||||
NULL, /* after pixel update callback */
|
||||
DEVCB_NULL, /* callback for display state changes */
|
||||
DEVCB_NULL, /* callback for cursor state changes */
|
||||
DEVCB_NULL, /* HSYNC callback */
|
||||
DEVCB_NULL, /* VSYNC callback */
|
||||
NULL /* update address callback */
|
||||
};
|
||||
|
||||
static MC6845_INTERFACE( magicrd2_mc6845_intf )
|
||||
{
|
||||
false, /* show border area */
|
||||
0,-56,0,0, /* visarea adjustment */
|
||||
4, /* number of pixels per video memory address */
|
||||
NULL, /* before pixel update callback */
|
||||
NULL, /* row update callback */
|
||||
NULL, /* after pixel update callback */
|
||||
DEVCB_NULL, /* callback for display state changes */
|
||||
DEVCB_NULL, /* callback for cursor state changes */
|
||||
DEVCB_NULL, /* HSYNC callback */
|
||||
DEVCB_NULL, /* VSYNC callback */
|
||||
NULL /* update address callback */
|
||||
};
|
||||
|
||||
|
||||
/********************************
|
||||
* Machine Start & Reset *
|
||||
********************************/
|
||||
@ -2957,7 +2922,9 @@ static MACHINE_CONFIG_START( fw1stpal, funworld_state )
|
||||
MCFG_PALETTE_INIT_OWNER(funworld_state, funworld)
|
||||
MCFG_VIDEO_START_OVERRIDE(funworld_state, funworld)
|
||||
|
||||
MCFG_MC6845_ADD("crtc", MC6845, "screen", CRTC_CLOCK, mc6845_intf) /* 2MHz, veryfied on jollycrd & royalcrd */
|
||||
MCFG_MC6845_ADD("crtc", MC6845, "screen", CRTC_CLOCK) /* 2MHz, veryfied on jollycrd & royalcrd */
|
||||
MCFG_MC6845_SHOW_BORDER_AREA(false)
|
||||
MCFG_MC6845_CHAR_WIDTH(4)
|
||||
|
||||
/* sound hardware */
|
||||
MCFG_SPEAKER_STANDARD_MONO("mono")
|
||||
@ -2995,7 +2962,10 @@ static MACHINE_CONFIG_DERIVED( magicrd2, fw1stpal )
|
||||
MCFG_VIDEO_START_OVERRIDE(funworld_state, magicrd2)
|
||||
|
||||
MCFG_DEVICE_REMOVE("crtc")
|
||||
MCFG_MC6845_ADD("crtc", MC6845, "screen", CRTC_CLOCK, magicrd2_mc6845_intf)
|
||||
MCFG_MC6845_ADD("crtc", MC6845, "screen", CRTC_CLOCK)
|
||||
MCFG_MC6845_SHOW_BORDER_AREA(false)
|
||||
MCFG_MC6845_VISAREA_ADJUST(0, -56, 0, 0)
|
||||
MCFG_MC6845_CHAR_WIDTH(4)
|
||||
|
||||
MCFG_SOUND_REPLACE("ay8910", AY8910, SND_CLOCK) /* 2MHz */
|
||||
MCFG_SOUND_CONFIG(ay8910_intf)
|
||||
|
@ -503,26 +503,6 @@ static GFXDECODE_START( gluck2 )
|
||||
GFXDECODE_END
|
||||
|
||||
|
||||
/********************************************
|
||||
* CRTC Interface *
|
||||
********************************************/
|
||||
|
||||
static MC6845_INTERFACE( mc6845_intf )
|
||||
{
|
||||
false, /* show border area */
|
||||
0,0,0,0, /* visarea adjustment */
|
||||
8, /* number of pixels per video memory address */
|
||||
NULL, /* before pixel update callback */
|
||||
NULL, /* row update callback */
|
||||
NULL, /* after pixel update callback */
|
||||
DEVCB_NULL, /* callback for display state changes */
|
||||
DEVCB_NULL, /* callback for cursor state changes */
|
||||
DEVCB_NULL, /* HSYNC callback */
|
||||
DEVCB_NULL, /* VSYNC callback */
|
||||
NULL /* update address callback */
|
||||
};
|
||||
|
||||
|
||||
/*************************************************
|
||||
* Sound Interfaces *
|
||||
*************************************************/
|
||||
@ -572,7 +552,9 @@ static MACHINE_CONFIG_START( gluck2, gluck2_state )
|
||||
MCFG_PALETTE_ADD("palette", 0x100)
|
||||
MCFG_PALETTE_INIT_OWNER(gluck2_state, gluck2)
|
||||
|
||||
MCFG_MC6845_ADD("crtc", MC6845, "screen", MASTER_CLOCK/16, mc6845_intf) /* guess */
|
||||
MCFG_MC6845_ADD("crtc", MC6845, "screen", MASTER_CLOCK/16) /* guess */
|
||||
MCFG_MC6845_SHOW_BORDER_AREA(false)
|
||||
MCFG_MC6845_CHAR_WIDTH(8)
|
||||
|
||||
/* sound hardware */
|
||||
MCFG_SPEAKER_STANDARD_MONO("mono")
|
||||
|
@ -3526,26 +3526,6 @@ static GFXDECODE_START( wcrdxtnd )
|
||||
GFXDECODE_ENTRY( "gfx15", 0, tilelayout, 0, 16 )
|
||||
GFXDECODE_END
|
||||
|
||||
/*******************************************
|
||||
* CRTC Interface *
|
||||
*******************************************/
|
||||
|
||||
static MC6845_INTERFACE( mc6845_intf )
|
||||
{
|
||||
false, /* show border area */
|
||||
0,0,0,0, /* visarea adjustment */
|
||||
8, /* number of pixels per video memory address */
|
||||
NULL, /* before pixel update callback */
|
||||
NULL, /* row update callback */
|
||||
NULL, /* after pixel update callback */
|
||||
DEVCB_NULL, /* callback for display state changes */
|
||||
DEVCB_NULL, /* callback for cursor state changes */
|
||||
DEVCB_NULL, /* HSYNC callback */
|
||||
DEVCB_NULL, /* VSYNC callback */
|
||||
NULL /* update address callback */
|
||||
};
|
||||
|
||||
|
||||
/**********************************************************
|
||||
* Discrete Sound Routines *
|
||||
***********************************************************
|
||||
@ -3746,7 +3726,9 @@ static MACHINE_CONFIG_START( goldnpkr_base, goldnpkr_state )
|
||||
MCFG_SCREEN_UPDATE_DRIVER(goldnpkr_state, screen_update_goldnpkr)
|
||||
MCFG_SCREEN_PALETTE("palette")
|
||||
|
||||
MCFG_MC6845_ADD("crtc", MC6845, "screen", CPU_CLOCK, mc6845_intf) /* 68B45 or 6845s @ CPU clock */
|
||||
MCFG_MC6845_ADD("crtc", MC6845, "screen", CPU_CLOCK) /* 68B45 or 6845s @ CPU clock */
|
||||
MCFG_MC6845_SHOW_BORDER_AREA(false)
|
||||
MCFG_MC6845_CHAR_WIDTH(8)
|
||||
|
||||
MCFG_GFXDECODE_ADD("gfxdecode", "palette", goldnpkr)
|
||||
MCFG_PALETTE_ADD("palette", 256)
|
||||
|
@ -462,21 +462,6 @@ static GFXDECODE_START( hitpoker )
|
||||
GFXDECODE_ENTRY( "gfx1", 0, hitpoker_layout_8bpp, 0, 8 )
|
||||
GFXDECODE_END
|
||||
|
||||
static MC6845_INTERFACE( mc6845_intf )
|
||||
{
|
||||
false, /* show border area */
|
||||
0,0,0,0, /* visarea adjustment */
|
||||
8, /* number of pixels per video memory address */
|
||||
NULL, /* before pixel update callback */
|
||||
NULL, /* row update callback */
|
||||
NULL, /* after pixel update callback */
|
||||
DEVCB_NULL, /* callback for display state changes */
|
||||
DEVCB_NULL, /* callback for cursor state changes */
|
||||
DEVCB_NULL, /* HSYNC callback */
|
||||
DEVCB_NULL, /* VSYNC callback */
|
||||
NULL /* update address callback */
|
||||
};
|
||||
|
||||
static const ay8910_interface ay8910_config =
|
||||
{
|
||||
AY8910_LEGACY_OUTPUT,
|
||||
@ -511,12 +496,13 @@ static MACHINE_CONFIG_START( hitpoker, hitpoker_state )
|
||||
MCFG_SCREEN_UPDATE_DRIVER(hitpoker_state, screen_update_hitpoker)
|
||||
MCFG_SCREEN_PALETTE("palette")
|
||||
|
||||
MCFG_MC6845_ADD("crtc", H46505, "screen", CRTC_CLOCK/2, mc6845_intf) /* hand tuned to get ~60 fps */
|
||||
MCFG_MC6845_ADD("crtc", H46505, "screen", CRTC_CLOCK/2) /* hand tuned to get ~60 fps */
|
||||
MCFG_MC6845_SHOW_BORDER_AREA(false)
|
||||
MCFG_MC6845_CHAR_WIDTH(8)
|
||||
|
||||
MCFG_GFXDECODE_ADD("gfxdecode", "palette", hitpoker)
|
||||
MCFG_PALETTE_ADD("palette", 0x800)
|
||||
|
||||
|
||||
MCFG_SPEAKER_STANDARD_MONO("mono")
|
||||
|
||||
MCFG_SOUND_ADD("aysnd", YM2149, 1500000)
|
||||
|
@ -423,26 +423,6 @@ WRITE8_MEMBER(jokrwild_state::testb_w)
|
||||
// printf("%02x B\n",data);
|
||||
}
|
||||
|
||||
/************************
|
||||
* CRTC Interface *
|
||||
************************/
|
||||
|
||||
static MC6845_INTERFACE( mc6845_intf )
|
||||
{
|
||||
false, /* show border area */
|
||||
0,0,0,0, /* visarea adjustment */
|
||||
8, /* number of pixels per video memory address */
|
||||
NULL, /* before pixel update callback */
|
||||
NULL, /* row update callback */
|
||||
NULL, /* after pixel update callback */
|
||||
DEVCB_NULL, /* callback for display state changes */
|
||||
DEVCB_NULL, /* callback for cursor state changes */
|
||||
DEVCB_NULL, /* HSYNC callback */
|
||||
DEVCB_NULL, /* VSYNC callback */
|
||||
NULL /* update address callback */
|
||||
};
|
||||
|
||||
|
||||
/*************************
|
||||
* Machine Drivers *
|
||||
*************************/
|
||||
@ -479,8 +459,9 @@ static MACHINE_CONFIG_START( jokrwild, jokrwild_state )
|
||||
MCFG_PALETTE_ADD("palette", 512)
|
||||
MCFG_PALETTE_INIT_OWNER(jokrwild_state, jokrwild)
|
||||
|
||||
MCFG_MC6845_ADD("crtc", MC6845, "screen", MASTER_CLOCK/16, mc6845_intf) /* guess */
|
||||
|
||||
MCFG_MC6845_ADD("crtc", MC6845, "screen", MASTER_CLOCK/16) /* guess */
|
||||
MCFG_MC6845_SHOW_BORDER_AREA(false)
|
||||
MCFG_MC6845_CHAR_WIDTH(8)
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
|
||||
|
@ -650,25 +650,6 @@ static GFXDECODE_START( jubileep ) /* 4 different graphics banks */
|
||||
GFXDECODE_END
|
||||
|
||||
|
||||
/***********************
|
||||
* CRTC Interface *
|
||||
************************/
|
||||
|
||||
static MC6845_INTERFACE( mc6845_intf )
|
||||
{
|
||||
false, /* show border area */
|
||||
0, 0, 0, 0, /* visarea adjustment */
|
||||
8, /* number of pixels per video memory address */
|
||||
NULL, /* before pixel update callback */
|
||||
NULL, /* row update callback */
|
||||
NULL, /* after pixel update callback */
|
||||
DEVCB_NULL, /* callback for display state changes */
|
||||
DEVCB_NULL, /* callback for cursor state changes */
|
||||
DEVCB_NULL, /* HSYNC callback */
|
||||
DEVCB_NULL, /* VSYNC callback */
|
||||
NULL /* update address callback */
|
||||
};
|
||||
|
||||
/*************************
|
||||
* Machine Drivers *
|
||||
*************************/
|
||||
@ -693,8 +674,9 @@ static MACHINE_CONFIG_START( jubileep, jubilee_state )
|
||||
MCFG_GFXDECODE_ADD("gfxdecode", "palette", jubileep)
|
||||
MCFG_PALETTE_ADD("palette",8)
|
||||
|
||||
MCFG_MC6845_ADD("crtc", MC6845, "screen", CRTC_CLOCK, mc6845_intf)
|
||||
|
||||
MCFG_MC6845_ADD("crtc", MC6845, "screen", CRTC_CLOCK)
|
||||
MCFG_MC6845_SHOW_BORDER_AREA(false)
|
||||
MCFG_MC6845_CHAR_WIDTH(8)
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
|
||||
|
@ -20,6 +20,12 @@ TODO:
|
||||
(but there isn't any title screen in the game?)
|
||||
- Fix I/O in the 1986 bootleg version;
|
||||
|
||||
MC6845 interface:
|
||||
screen size: 384x272 registers 00 & 04. (value-1)
|
||||
visible area: 256x224 registers 01 & 06.
|
||||
|
||||
the clocks are a guess, but is the only logical combination I found to get a reasonable vertical of ~53Hz.
|
||||
|
||||
============================================================================================
|
||||
|
||||
file : readme.txt
|
||||
@ -852,32 +858,6 @@ static GFXDECODE_START( cowrace )
|
||||
GFXDECODE_ENTRY( "gfx2", 0x000000, layout8x8x2, 0x000, 0x80 )
|
||||
GFXDECODE_END
|
||||
|
||||
/**********************************************************************************************************
|
||||
*
|
||||
* MC6845 interface
|
||||
*
|
||||
* screen size: 384x272 registers 00 & 04. (value-1)
|
||||
* visible area: 256x224 registers 01 & 06.
|
||||
*
|
||||
* the clocks are a guess, but is the only logical combination I found to get a reasonable vertical of ~53Hz.
|
||||
*
|
||||
***********************************************************************************************************/
|
||||
|
||||
static MC6845_INTERFACE( mc6845_intf )
|
||||
{
|
||||
false, /* show border area */
|
||||
0,0,0,0, /* visarea adjustment */
|
||||
8, /* number of pixels per video memory address */
|
||||
NULL, /* before pixel update callback */
|
||||
NULL, /* row update callback */
|
||||
NULL, /* after pixel update callback */
|
||||
DEVCB_NULL, /* callback for display state changes */
|
||||
DEVCB_NULL, /* callback for cursor state changes */
|
||||
DEVCB_NULL, /* HSYNC callback */
|
||||
DEVCB_NULL, /* VSYNC callback */
|
||||
NULL /* update address callback */
|
||||
};
|
||||
|
||||
/*************************************
|
||||
*
|
||||
* Sound HW Config
|
||||
@ -1006,7 +986,9 @@ static MACHINE_CONFIG_START( kingdrby, kingdrby_state )
|
||||
MCFG_SCREEN_UPDATE_DRIVER(kingdrby_state, screen_update_kingdrby)
|
||||
MCFG_SCREEN_PALETTE("palette")
|
||||
|
||||
MCFG_MC6845_ADD("crtc", MC6845, "screen", CLK_1/32, mc6845_intf) /* 53.333 Hz. guess */
|
||||
MCFG_MC6845_ADD("crtc", MC6845, "screen", CLK_1/32) /* 53.333 Hz. guess */
|
||||
MCFG_MC6845_SHOW_BORDER_AREA(false)
|
||||
MCFG_MC6845_CHAR_WIDTH(8)
|
||||
|
||||
MCFG_SPEAKER_STANDARD_MONO("mono")
|
||||
|
||||
|
@ -286,22 +286,6 @@ void laserbas_state::machine_reset()
|
||||
m_count = 0;
|
||||
}
|
||||
|
||||
static MC6845_INTERFACE( mc6845_intf )
|
||||
{
|
||||
false, /* show border area */
|
||||
0,0,0,0, /* visarea adjustment */
|
||||
8, /* number of pixels per video memory address */
|
||||
NULL, /* before pixel update callback */
|
||||
NULL, /* row update callback */
|
||||
NULL, /* after pixel update callback */
|
||||
DEVCB_NULL, /* callback for display state changes */
|
||||
DEVCB_NULL, /* callback for cursor state changes */
|
||||
DEVCB_NULL, /* HSYNC callback */
|
||||
DEVCB_NULL, /* VSYNC callback */
|
||||
NULL /* update address callback */
|
||||
};
|
||||
|
||||
|
||||
static MACHINE_CONFIG_START( laserbas, laserbas_state )
|
||||
|
||||
MCFG_CPU_ADD("maincpu", Z80, 4000000)
|
||||
@ -329,7 +313,9 @@ static MACHINE_CONFIG_START( laserbas, laserbas_state )
|
||||
MCFG_SCREEN_UPDATE_DRIVER(laserbas_state, screen_update_laserbas)
|
||||
MCFG_SCREEN_PALETTE("palette")
|
||||
|
||||
MCFG_MC6845_ADD("crtc", H46505, "screen", 3000000/4, mc6845_intf) /* unknown clock, hand tuned to get ~60 fps */
|
||||
MCFG_MC6845_ADD("crtc", H46505, "screen", 3000000/4) /* unknown clock, hand tuned to get ~60 fps */
|
||||
MCFG_MC6845_SHOW_BORDER_AREA(false)
|
||||
MCFG_MC6845_CHAR_WIDTH(8)
|
||||
|
||||
MCFG_PALETTE_ADD("palette", 32)
|
||||
MCFG_PALETTE_FORMAT(RRRGGGBB)
|
||||
|
@ -975,21 +975,6 @@ static GFXDECODE_START( luckgrln )
|
||||
GFXDECODE_ENTRY( "reels", 0, tiles8x32_layout, 0, 64 )
|
||||
GFXDECODE_END
|
||||
|
||||
static MC6845_INTERFACE( mc6845_intf )
|
||||
{
|
||||
false, /* show border area */
|
||||
0,0,0,0, /* visarea adjustment */
|
||||
8, /* number of pixels per video memory address */
|
||||
NULL, /* before pixel update callback */
|
||||
NULL, /* row update callback */
|
||||
NULL, /* after pixel update callback */
|
||||
DEVCB_NULL, /* callback for display state changes */
|
||||
DEVCB_NULL, /* callback for cursor state changes */
|
||||
DEVCB_NULL, /* HSYNC callback */
|
||||
DEVCB_NULL, /* VSYNC callback */
|
||||
NULL /* update address callback */
|
||||
};
|
||||
|
||||
INTERRUPT_GEN_MEMBER(luckgrln_state::luckgrln_irq)
|
||||
{
|
||||
if(m_nmi_enable)
|
||||
@ -1002,7 +987,9 @@ static MACHINE_CONFIG_START( luckgrln, luckgrln_state )
|
||||
MCFG_CPU_IO_MAP(portmap)
|
||||
MCFG_CPU_VBLANK_INT_DRIVER("screen", luckgrln_state, luckgrln_irq)
|
||||
|
||||
MCFG_MC6845_ADD("crtc", H46505, "screen", 6000000/4, mc6845_intf) /* unknown clock, hand tuned to get ~60 fps */
|
||||
MCFG_MC6845_ADD("crtc", H46505, "screen", 6000000/4) /* unknown clock, hand tuned to get ~60 fps */
|
||||
MCFG_MC6845_SHOW_BORDER_AREA(false)
|
||||
MCFG_MC6845_CHAR_WIDTH(8)
|
||||
|
||||
MCFG_SCREEN_ADD("screen", RASTER)
|
||||
MCFG_SCREEN_REFRESH_RATE(60)
|
||||
@ -1015,7 +1002,6 @@ static MACHINE_CONFIG_START( luckgrln, luckgrln_state )
|
||||
MCFG_GFXDECODE_ADD("gfxdecode", "palette", luckgrln)
|
||||
MCFG_PALETTE_ADD("palette", 0x8000)
|
||||
|
||||
|
||||
MCFG_SPEAKER_STANDARD_MONO("mono")
|
||||
|
||||
MACHINE_CONFIG_END
|
||||
|
@ -917,26 +917,6 @@ static GFXDECODE_START( magicfly )
|
||||
GFXDECODE_END
|
||||
|
||||
|
||||
/********************************************
|
||||
* CRTC Interface *
|
||||
********************************************/
|
||||
|
||||
static MC6845_INTERFACE( mc6845_intf )
|
||||
{
|
||||
false, /* show border area */
|
||||
0,0,0,0, /* visarea adjustment */
|
||||
8, /* number of pixels per video memory address */
|
||||
NULL, /* before pixel update callback */
|
||||
NULL, /* row update callback */
|
||||
NULL, /* after pixel update callback */
|
||||
DEVCB_NULL, /* callback for display state changes */
|
||||
DEVCB_NULL, /* callback for cursor state changes */
|
||||
DEVCB_NULL, /* HSYNC callback */
|
||||
DEVCB_NULL, /* VSYNC callback */
|
||||
NULL /* update address callback */
|
||||
};
|
||||
|
||||
|
||||
/*********************************************
|
||||
* Machine Drivers *
|
||||
*********************************************/
|
||||
@ -963,7 +943,9 @@ static MACHINE_CONFIG_START( magicfly, magicfly_state )
|
||||
MCFG_PALETTE_ADD("palette", 32)
|
||||
MCFG_PALETTE_INIT_OWNER(magicfly_state, magicfly)
|
||||
|
||||
MCFG_MC6845_ADD("crtc", MC6845, "screen", MASTER_CLOCK/16, mc6845_intf) /* guess */
|
||||
MCFG_MC6845_ADD("crtc", MC6845, "screen", MASTER_CLOCK/16) /* guess */
|
||||
MCFG_MC6845_SHOW_BORDER_AREA(false)
|
||||
MCFG_MC6845_CHAR_WIDTH(8)
|
||||
|
||||
/* sound hardware */
|
||||
MCFG_SPEAKER_STANDARD_MONO("mono")
|
||||
|
@ -1001,26 +1001,6 @@ static GFXDECODE_START( majorpkr )
|
||||
GFXDECODE_END
|
||||
|
||||
|
||||
/***********************
|
||||
* CRTC Interface *
|
||||
***********************/
|
||||
|
||||
static MC6845_INTERFACE( mc6845_intf )
|
||||
{
|
||||
false, /* show border area */
|
||||
0,0,0,0, /* visarea adjustment */
|
||||
16, /* number of pixels per video memory address */
|
||||
NULL, /* before pixel update callback */
|
||||
NULL, /* row update callback */
|
||||
NULL, /* after pixel update callback */
|
||||
DEVCB_NULL, /* callback for display state changes */
|
||||
DEVCB_NULL, /* callback for cursor state changes */
|
||||
DEVCB_NULL, /* HSYNC callback */
|
||||
DEVCB_NULL, /* VSYNC callback */
|
||||
NULL /* update address callback */
|
||||
};
|
||||
|
||||
|
||||
/*************************
|
||||
* Machine Drivers *
|
||||
*************************/
|
||||
@ -1046,7 +1026,9 @@ static MACHINE_CONFIG_START( majorpkr, majorpkr_state )
|
||||
MCFG_GFXDECODE_ADD("gfxdecode", "palette", majorpkr)
|
||||
MCFG_PALETTE_ADD("palette", 0x100 * 16)
|
||||
|
||||
MCFG_MC6845_ADD("crtc", MC6845, "screen", CRTC_CLOCK, mc6845_intf) /* verified */
|
||||
MCFG_MC6845_ADD("crtc", MC6845, "screen", CRTC_CLOCK) /* verified */
|
||||
MCFG_MC6845_SHOW_BORDER_AREA(false)
|
||||
MCFG_MC6845_CHAR_WIDTH(16)
|
||||
|
||||
/* sound hardware */
|
||||
MCFG_SPEAKER_STANDARD_MONO("mono")
|
||||
|
@ -126,6 +126,8 @@ public:
|
||||
DECLARE_DRIVER_INIT(dtrvwz5);
|
||||
virtual void machine_start();
|
||||
DECLARE_MACHINE_START(casino5);
|
||||
MC6845_BEGIN_UPDATE(crtc_begin_update);
|
||||
MC6845_UPDATE_ROW(crtc_update_row);
|
||||
required_device<cpu_device> m_maincpu;
|
||||
required_device<screen_device> m_screen;
|
||||
};
|
||||
@ -237,46 +239,38 @@ WRITE8_MEMBER(merit_state::palette_w)
|
||||
}
|
||||
|
||||
|
||||
static MC6845_BEGIN_UPDATE( begin_update )
|
||||
MC6845_BEGIN_UPDATE( merit_state::crtc_begin_update )
|
||||
{
|
||||
merit_state *state = device->machine().driver_data<merit_state>();
|
||||
int i;
|
||||
int dim, bit0, bit1, bit2;
|
||||
|
||||
for (i=0; i < NUM_PENS; i++)
|
||||
for (int i=0; i < NUM_PENS; i++)
|
||||
{
|
||||
dim = BIT(i,3) ? 255 : 127;
|
||||
bit0 = BIT(i,0);
|
||||
bit1 = BIT(i,1);
|
||||
bit2 = BIT(i,2);
|
||||
state->m_pens[i] = rgb_t(dim*bit0, dim*bit1, dim*bit2);
|
||||
m_pens[i] = rgb_t(dim*bit0, dim*bit1, dim*bit2);
|
||||
}
|
||||
|
||||
return state->m_pens;
|
||||
}
|
||||
|
||||
|
||||
static MC6845_UPDATE_ROW( update_row )
|
||||
MC6845_UPDATE_ROW( merit_state::crtc_update_row )
|
||||
{
|
||||
merit_state *state = device->machine().driver_data<merit_state>();
|
||||
UINT8 cx;
|
||||
|
||||
pen_t *pens = (pen_t *)param;
|
||||
UINT8 *gfx[2];
|
||||
UINT16 x = 0;
|
||||
int rlen;
|
||||
|
||||
gfx[0] = state->memregion("gfx1")->base();
|
||||
gfx[1] = state->memregion("gfx2")->base();
|
||||
rlen = state->memregion("gfx2")->bytes();
|
||||
gfx[0] = memregion("gfx1")->base();
|
||||
gfx[1] = memregion("gfx2")->base();
|
||||
rlen = memregion("gfx2")->bytes();
|
||||
|
||||
//ma = ma ^ 0x7ff;
|
||||
for (cx = 0; cx < x_count; cx++)
|
||||
for (UINT8 cx = 0; cx < x_count; cx++)
|
||||
{
|
||||
int i;
|
||||
int attr = state->m_ram_attr[ma & 0x7ff];
|
||||
int attr = m_ram_attr[ma & 0x7ff];
|
||||
int region = (attr & 0x40) >> 6;
|
||||
int addr = ((state->m_ram_video[ma & 0x7ff] | ((attr & 0x80) << 1) | (state->m_extra_video_bank_bit)) << 4) | (ra & 0x0f);
|
||||
int addr = ((m_ram_video[ma & 0x7ff] | ((attr & 0x80) << 1) | (m_extra_video_bank_bit)) << 4) | (ra & 0x0f);
|
||||
int colour = (attr & 0x7f) << 3;
|
||||
UINT8 *data;
|
||||
|
||||
@ -296,8 +290,8 @@ static MC6845_UPDATE_ROW( update_row )
|
||||
else
|
||||
col |= 0x03;
|
||||
|
||||
col = state->m_ram_palette[col & 0x3ff];
|
||||
bitmap.pix32(y, x) = pens[col ? col & (NUM_PENS-1) : (state->m_lscnblk ? 8 : 0)];
|
||||
col = m_ram_palette[col & 0x3ff];
|
||||
bitmap.pix32(y, x) = m_pens[col ? col & (NUM_PENS-1) : (m_lscnblk ? 8 : 0)];
|
||||
|
||||
x++;
|
||||
}
|
||||
@ -317,21 +311,6 @@ WRITE_LINE_MEMBER(merit_state::vsync_changed)
|
||||
m_maincpu->set_input_line(0, state ? ASSERT_LINE : CLEAR_LINE);
|
||||
}
|
||||
|
||||
static MC6845_INTERFACE( mc6845_intf )
|
||||
{
|
||||
false, /* show border area */
|
||||
0,0,0,0, /* visarea adjustment */
|
||||
8, /* number of pixels per video memory address */
|
||||
begin_update, /* before pixel update callback */
|
||||
update_row, /* row update callback */
|
||||
NULL, /* after pixel update callback */
|
||||
DEVCB_NULL, /* callback for display state changes */
|
||||
DEVCB_NULL, /* callback for cursor state changes */
|
||||
DEVCB_DRIVER_LINE_MEMBER(merit_state,hsync_changed), /* HSYNC callback */
|
||||
DEVCB_DRIVER_LINE_MEMBER(merit_state,vsync_changed), /* VSYNC callback */
|
||||
NULL /* update address callback */
|
||||
};
|
||||
|
||||
WRITE8_MEMBER(merit_state::led1_w)
|
||||
{
|
||||
/* 5 button lamps player 1 */
|
||||
@ -1181,13 +1160,17 @@ static MACHINE_CONFIG_START( pitboss, merit_state )
|
||||
MCFG_I8255_OUT_PORTC_CB(WRITE8(merit_state, misc_w))
|
||||
|
||||
/* video hardware */
|
||||
|
||||
MCFG_SCREEN_ADD("screen", RASTER)
|
||||
MCFG_SCREEN_RAW_PARAMS(PIXEL_CLOCK, 512, 0, 512, 256, 0, 256) /* temporary, CRTC will configure screen */
|
||||
MCFG_SCREEN_UPDATE_DEVICE("crtc", mc6845_device, screen_update)
|
||||
|
||||
MCFG_MC6845_ADD("crtc", MC6845, "screen", CRTC_CLOCK, mc6845_intf)
|
||||
|
||||
MCFG_MC6845_ADD("crtc", MC6845, "screen", CRTC_CLOCK)
|
||||
MCFG_MC6845_SHOW_BORDER_AREA(false)
|
||||
MCFG_MC6845_CHAR_WIDTH(8)
|
||||
MCFG_MC6845_BEGIN_UPDATE_CB(merit_state, crtc_begin_update)
|
||||
MCFG_MC6845_UPDATE_ROW_CB(merit_state, crtc_update_row)
|
||||
MCFG_MC6845_OUT_HSYNC_CB(WRITELINE(merit_state, hsync_changed))
|
||||
MCFG_MC6845_OUT_VSYNC_CB(WRITELINE(merit_state, vsync_changed))
|
||||
|
||||
/* sound hardware */
|
||||
MCFG_SPEAKER_STANDARD_MONO("mono")
|
||||
|
@ -391,26 +391,6 @@ static GFXDECODE_START( miniboy7 )
|
||||
GFXDECODE_END
|
||||
|
||||
|
||||
/**********************************
|
||||
* CRTC Interface *
|
||||
**********************************/
|
||||
|
||||
static MC6845_INTERFACE( mc6845_intf )
|
||||
{
|
||||
false, /* show border area */
|
||||
0,0,0,0, /* visarea adjustment */
|
||||
8, /* number of pixels per video memory address */
|
||||
NULL, /* before pixel update callback */
|
||||
NULL, /* row update callback */
|
||||
NULL, /* after pixel update callback */
|
||||
DEVCB_NULL, /* callback for display state changes */
|
||||
DEVCB_NULL, /* callback for cursor state changes */
|
||||
DEVCB_NULL, /* HSYNC callback */
|
||||
DEVCB_NULL, /* VSYNC callback */
|
||||
NULL /* update address callback */
|
||||
};
|
||||
|
||||
|
||||
/***********************************
|
||||
* Sound Interface *
|
||||
***********************************/
|
||||
@ -454,7 +434,9 @@ static MACHINE_CONFIG_START( miniboy7, miniboy7_state )
|
||||
MCFG_PALETTE_ADD("palette", 256)
|
||||
MCFG_PALETTE_INIT_OWNER(miniboy7_state, miniboy7)
|
||||
|
||||
MCFG_MC6845_ADD("crtc", MC6845, "screen", MASTER_CLOCK/12, mc6845_intf) /* guess */
|
||||
MCFG_MC6845_ADD("crtc", MC6845, "screen", MASTER_CLOCK/12) /* guess */
|
||||
MCFG_MC6845_SHOW_BORDER_AREA(false)
|
||||
MCFG_MC6845_CHAR_WIDTH(8)
|
||||
|
||||
/* sound hardware */
|
||||
MCFG_SPEAKER_STANDARD_MONO("mono")
|
||||
|
@ -491,26 +491,6 @@ static const ay8910_interface ay8910_config =
|
||||
};
|
||||
|
||||
|
||||
/************************
|
||||
* CRTC Interface *
|
||||
************************/
|
||||
|
||||
static MC6845_INTERFACE( mc6845_intf )
|
||||
{
|
||||
false, /* show border area */
|
||||
0,0,0,0, /* visarea adjustment */
|
||||
4, /* number of pixels per video memory address */
|
||||
NULL, /* before pixel update callback */
|
||||
NULL, /* row update callback */
|
||||
NULL, /* after pixel update callback */
|
||||
DEVCB_NULL, /* callback for display state changes */
|
||||
DEVCB_NULL, /* callback for cursor state changes */
|
||||
DEVCB_NULL, /* HSYNC callback */
|
||||
DEVCB_NULL, /* VSYNC callback */
|
||||
NULL /* update address callback */
|
||||
};
|
||||
|
||||
|
||||
/*************************
|
||||
* Machine Drivers *
|
||||
*************************/
|
||||
@ -537,7 +517,9 @@ static MACHINE_CONFIG_START( mpu12wbk, mpu12wbk_state )
|
||||
MCFG_PALETTE_ADD("palette", 512)
|
||||
MCFG_PALETTE_INIT_OWNER(mpu12wbk_state, mpu12wbk)
|
||||
|
||||
MCFG_MC6845_ADD("crtc", MC6845, "screen", MASTER_CLOCK/4, mc6845_intf) /* guess */
|
||||
MCFG_MC6845_ADD("crtc", MC6845, "screen", MASTER_CLOCK/4) /* guess */
|
||||
MCFG_MC6845_SHOW_BORDER_AREA(false)
|
||||
MCFG_MC6845_CHAR_WIDTH(4)
|
||||
|
||||
/* sound hardware */
|
||||
MCFG_SPEAKER_STANDARD_MONO("mono")
|
||||
|
@ -146,22 +146,6 @@ WRITE_LINE_MEMBER(mpu4dealem_state::dealem_vsync_changed)
|
||||
*
|
||||
*************************************/
|
||||
|
||||
static MC6845_INTERFACE( hd6845_intf )
|
||||
{
|
||||
false, /* show border area */
|
||||
0,0,0,0, /* visarea adjustment */
|
||||
8, /* number of pixels per video memory address */
|
||||
NULL, /* before pixel update callback */
|
||||
NULL, /* row update callback */
|
||||
NULL, /* after pixel update callback */
|
||||
DEVCB_NULL, /* callback for display state changes */
|
||||
DEVCB_NULL, /* callback for cursor state changes */
|
||||
DEVCB_NULL, /* HSYNC callback */
|
||||
DEVCB_DRIVER_LINE_MEMBER(mpu4dealem_state, dealem_vsync_changed), /* VSYNC callback */
|
||||
NULL /* update address callback */
|
||||
};
|
||||
|
||||
|
||||
static ADDRESS_MAP_START( dealem_memmap, AS_PROGRAM, 8, mpu4dealem_state )
|
||||
AM_RANGE(0x0000, 0x07ff) AM_RAM AM_SHARE("nvram")
|
||||
|
||||
@ -236,7 +220,10 @@ static MACHINE_CONFIG_START( dealem, mpu4dealem_state )
|
||||
MCFG_PALETTE_ADD("palette", 32)
|
||||
MCFG_PALETTE_INIT_OWNER(mpu4dealem_state,dealem)
|
||||
|
||||
MCFG_MC6845_ADD("crtc", HD6845, "screen", MPU4_MASTER_CLOCK / 4 / 8, hd6845_intf) /* HD68B45 */
|
||||
MCFG_MC6845_ADD("crtc", HD6845, "screen", MPU4_MASTER_CLOCK / 4 / 8) /* HD68B45 */
|
||||
MCFG_MC6845_SHOW_BORDER_AREA(false)
|
||||
MCFG_MC6845_CHAR_WIDTH(8)
|
||||
MCFG_MC6845_OUT_VSYNC_CB(WRITELINE(mpu4dealem_state, dealem_vsync_changed))
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
|
||||
|
@ -236,21 +236,6 @@ UINT32 murogem_state::screen_update_murogem(screen_device &screen, bitmap_ind16
|
||||
return 0;
|
||||
}
|
||||
|
||||
static MC6845_INTERFACE( mc6845_intf )
|
||||
{
|
||||
false, /* show border area */
|
||||
0,0,0,0, /* visarea adjustment */
|
||||
8, /* number of pixels per video memory address */
|
||||
NULL, /* before pixel update callback */
|
||||
NULL, /* row update callback */
|
||||
NULL, /* after pixel update callback */
|
||||
DEVCB_NULL, /* callback for display state changes */
|
||||
DEVCB_NULL, /* callback for cursor state changes */
|
||||
DEVCB_NULL, /* HSYNC callback */
|
||||
DEVCB_NULL, /* VSYNC callback */
|
||||
NULL /* update address callback */
|
||||
};
|
||||
|
||||
|
||||
static MACHINE_CONFIG_START( murogem, murogem_state )
|
||||
/* basic machine hardware */
|
||||
@ -271,8 +256,9 @@ static MACHINE_CONFIG_START( murogem, murogem_state )
|
||||
MCFG_PALETTE_ADD("palette", 0x100)
|
||||
MCFG_PALETTE_INIT_OWNER(murogem_state, murogem)
|
||||
|
||||
|
||||
MCFG_MC6845_ADD("crtc", MC6845, "screen", 750000, mc6845_intf) /* ? MHz */
|
||||
MCFG_MC6845_ADD("crtc", MC6845, "screen", 750000) /* ? MHz */
|
||||
MCFG_MC6845_SHOW_BORDER_AREA(false)
|
||||
MCFG_MC6845_CHAR_WIDTH(8)
|
||||
|
||||
/* sound hardware */
|
||||
MCFG_SPEAKER_STANDARD_MONO("mono")
|
||||
|
@ -140,19 +140,13 @@ public:
|
||||
INTERRUPT_GEN_MEMBER(update_pia_1);
|
||||
DECLARE_WRITE8_MEMBER(ic48_1_74123_output_changed);
|
||||
inline void shift_star_generator( );
|
||||
|
||||
MC6845_BEGIN_UPDATE(crtc_begin_update);
|
||||
MC6845_UPDATE_ROW(crtc_update_row);
|
||||
MC6845_END_UPDATE(crtc_end_update);
|
||||
};
|
||||
|
||||
|
||||
/*************************************
|
||||
*
|
||||
* Prototypes
|
||||
*
|
||||
*************************************/
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/*************************************
|
||||
*
|
||||
* Interrupt generation
|
||||
@ -252,31 +246,22 @@ WRITE_LINE_MEMBER(nyny_state::flipscreen_w)
|
||||
}
|
||||
|
||||
|
||||
static MC6845_BEGIN_UPDATE( begin_update )
|
||||
MC6845_BEGIN_UPDATE( nyny_state::crtc_begin_update )
|
||||
{
|
||||
nyny_state *state = device->machine().driver_data<nyny_state>();
|
||||
/* create the pens */
|
||||
offs_t i;
|
||||
|
||||
for (i = 0; i < NUM_PENS; i++)
|
||||
for (offs_t i = 0; i < NUM_PENS; i++)
|
||||
{
|
||||
state->m_pens[i] = rgb_t(pal1bit(i >> 0), pal1bit(i >> 1), pal1bit(i >> 2));
|
||||
m_pens[i] = rgb_t(pal1bit(i >> 0), pal1bit(i >> 1), pal1bit(i >> 2));
|
||||
}
|
||||
|
||||
return state->m_pens;
|
||||
}
|
||||
|
||||
|
||||
static MC6845_UPDATE_ROW( update_row )
|
||||
MC6845_UPDATE_ROW( nyny_state::crtc_update_row )
|
||||
{
|
||||
nyny_state *state = device->machine().driver_data<nyny_state>();
|
||||
UINT8 cx;
|
||||
pen_t *pens = (pen_t *)param;
|
||||
UINT8 x = 0;
|
||||
|
||||
for (cx = 0; cx < x_count; cx++)
|
||||
for (UINT8 cx = 0; cx < x_count; cx++)
|
||||
{
|
||||
int i;
|
||||
UINT8 data1, data2, color1, color2;
|
||||
|
||||
/* the memory is hooked up to the MA, RA lines this way */
|
||||
@ -285,19 +270,19 @@ static MC6845_UPDATE_ROW( update_row )
|
||||
((ra << 5) & 0x00e0) |
|
||||
((ma << 0) & 0x001f);
|
||||
|
||||
if (state->m_flipscreen)
|
||||
if (m_flipscreen)
|
||||
offs = offs ^ 0x9fff;
|
||||
|
||||
data1 = state->m_videoram1[offs];
|
||||
data2 = state->m_videoram2[offs];
|
||||
color1 = state->m_colorram1[offs] & 0x07;
|
||||
color2 = state->m_colorram2[offs] & 0x07;
|
||||
data1 = m_videoram1[offs];
|
||||
data2 = m_videoram2[offs];
|
||||
color1 = m_colorram1[offs] & 0x07;
|
||||
color2 = m_colorram2[offs] & 0x07;
|
||||
|
||||
for (i = 0; i < 8; i++)
|
||||
for (int i = 0; i < 8; i++)
|
||||
{
|
||||
UINT8 bit1, bit2, color;
|
||||
|
||||
if (state->m_flipscreen)
|
||||
if (m_flipscreen)
|
||||
{
|
||||
bit1 = BIT(data1, 7);
|
||||
bit2 = BIT(data2, 7);
|
||||
@ -320,7 +305,7 @@ static MC6845_UPDATE_ROW( update_row )
|
||||
else
|
||||
color = bit2 ? color2 : 0;
|
||||
|
||||
bitmap.pix32(y, x) = pens[color];
|
||||
bitmap.pix32(y, x) = m_pens[color];
|
||||
|
||||
x += 1;
|
||||
}
|
||||
@ -336,37 +321,29 @@ void nyny_state::shift_star_generator( )
|
||||
}
|
||||
|
||||
|
||||
static MC6845_END_UPDATE( end_update )
|
||||
MC6845_END_UPDATE( nyny_state::crtc_end_update )
|
||||
{
|
||||
nyny_state *state = device->machine().driver_data<nyny_state>();
|
||||
|
||||
/* draw the star field into the bitmap */
|
||||
int y;
|
||||
UINT16 delay_counter = m_star_delay_counter;
|
||||
|
||||
pen_t *pens = (pen_t *)param;
|
||||
UINT16 delay_counter = state->m_star_delay_counter;
|
||||
|
||||
for (y = cliprect.min_y; y <= cliprect.max_y; y++)
|
||||
for (int y = cliprect.min_y; y <= cliprect.max_y; y++)
|
||||
{
|
||||
int x;
|
||||
|
||||
for (x = cliprect.min_x; x <= cliprect.max_x; x++)
|
||||
for (int x = cliprect.min_x; x <= cliprect.max_x; x++)
|
||||
{
|
||||
/* check if the star status */
|
||||
if (state->m_star_enable &&
|
||||
(bitmap.pix32(y, x) == pens[0]) &&
|
||||
((state->m_star_shift_reg & 0x80ff) == 0x00ff) &&
|
||||
(((y & 0x01) ^ state->m_flipscreen) ^ (((x & 0x08) >> 3) ^ state->m_flipscreen)))
|
||||
if (m_star_enable && (bitmap.pix32(y, x) == m_pens[0]) &&
|
||||
((m_star_shift_reg & 0x80ff) == 0x00ff) &&
|
||||
(((y & 0x01) ^ m_flipscreen) ^ (((x & 0x08) >> 3) ^ m_flipscreen)))
|
||||
{
|
||||
UINT8 color = ((state->m_star_shift_reg & 0x0100) >> 8) | /* R */
|
||||
((state->m_star_shift_reg & 0x0400) >> 9) | /* G */
|
||||
((state->m_star_shift_reg & 0x1000) >> 10); /* B */
|
||||
UINT8 color = ((m_star_shift_reg & 0x0100) >> 8) | /* R */
|
||||
((m_star_shift_reg & 0x0400) >> 9) | /* G */
|
||||
((m_star_shift_reg & 0x1000) >> 10); /* B */
|
||||
|
||||
bitmap.pix32(y, x) = pens[color];
|
||||
bitmap.pix32(y, x) = m_pens[color];
|
||||
}
|
||||
|
||||
if (delay_counter == 0)
|
||||
state->shift_star_generator();
|
||||
shift_star_generator();
|
||||
else
|
||||
delay_counter = delay_counter - 1;
|
||||
}
|
||||
@ -380,23 +357,6 @@ WRITE_LINE_MEMBER(nyny_state::display_enable_changed)
|
||||
}
|
||||
|
||||
|
||||
static MC6845_INTERFACE( mc6845_intf )
|
||||
{
|
||||
false, /* show border area */
|
||||
0,0,0,0, /* visarea adjustment */
|
||||
8, /* number of pixels per video memory address */
|
||||
begin_update, /* before pixel update callback */
|
||||
update_row, /* row update callback */
|
||||
end_update, /* after pixel update callback */
|
||||
DEVCB_DRIVER_LINE_MEMBER(nyny_state,display_enable_changed), /* callback for display state changes */
|
||||
DEVCB_NULL, /* callback for cursor state changes */
|
||||
DEVCB_NULL, /* HSYNC callback */
|
||||
DEVCB_NULL, /* VSYNC callback */
|
||||
NULL /* update address callback */
|
||||
};
|
||||
|
||||
|
||||
|
||||
/*************************************
|
||||
*
|
||||
* Audio system - CPU 1
|
||||
@ -671,7 +631,13 @@ static MACHINE_CONFIG_START( nyny, nyny_state )
|
||||
MCFG_SCREEN_RAW_PARAMS(PIXEL_CLOCK, 256, 0, 256, 256, 0, 256) /* temporary, CRTC will configure screen */
|
||||
MCFG_SCREEN_UPDATE_DEVICE("crtc", mc6845_device, screen_update)
|
||||
|
||||
MCFG_MC6845_ADD("crtc", MC6845, "screen", CRTC_CLOCK, mc6845_intf)
|
||||
MCFG_MC6845_ADD("crtc", MC6845, "screen", CRTC_CLOCK)
|
||||
MCFG_MC6845_SHOW_BORDER_AREA(false)
|
||||
MCFG_MC6845_CHAR_WIDTH(8)
|
||||
MCFG_MC6845_BEGIN_UPDATE_CB(nyny_state, crtc_begin_update)
|
||||
MCFG_MC6845_UPDATE_ROW_CB(nyny_state, crtc_update_row)
|
||||
MCFG_MC6845_END_UPDATE_CB(nyny_state, crtc_end_update)
|
||||
MCFG_MC6845_OUT_DE_CB(WRITELINE(nyny_state, display_enable_changed))
|
||||
|
||||
/* 74LS123 */
|
||||
MCFG_DEVICE_ADD("ic48_1", TTL74123, 0)
|
||||
|
@ -102,22 +102,22 @@ public:
|
||||
virtual void machine_start();
|
||||
virtual void machine_reset();
|
||||
DECLARE_PALETTE_INIT(othello);
|
||||
MC6845_UPDATE_ROW(crtc_update_row);
|
||||
};
|
||||
|
||||
|
||||
static MC6845_UPDATE_ROW( update_row )
|
||||
MC6845_UPDATE_ROW( othello_state::crtc_update_row )
|
||||
{
|
||||
othello_state *state = device->machine().driver_data<othello_state>();
|
||||
const rgb_t *palette = state->m_palette->palette()->entry_list_raw();
|
||||
const rgb_t *palette = m_palette->palette()->entry_list_raw();
|
||||
int cx, x;
|
||||
UINT32 data_address;
|
||||
UINT32 tmp;
|
||||
|
||||
const UINT8 *gfx = state->memregion("gfx")->base();
|
||||
const UINT8 *gfx = memregion("gfx")->base();
|
||||
|
||||
for(cx = 0; cx < x_count; ++cx)
|
||||
{
|
||||
data_address = ((state->m_videoram[ma + cx] + state->m_tile_bank) << 4) | ra;
|
||||
data_address = ((m_videoram[ma + cx] + m_tile_bank) << 4) | ra;
|
||||
tmp = gfx[data_address] | (gfx[data_address + 0x2000] << 8) | (gfx[data_address + 0x4000] << 16);
|
||||
|
||||
for(x = 0; x < TILE_WIDTH; ++x)
|
||||
@ -372,22 +372,6 @@ static INPUT_PORTS_START( othello )
|
||||
|
||||
INPUT_PORTS_END
|
||||
|
||||
static MC6845_INTERFACE( h46505_intf )
|
||||
{
|
||||
false, /* show border area */
|
||||
0,0,0,0, /* visarea adjustment */
|
||||
TILE_WIDTH, /* number of pixels per video memory address */
|
||||
NULL, /* before pixel update callback */
|
||||
update_row, /* row update callback */
|
||||
NULL, /* after pixel update callback */
|
||||
DEVCB_NULL, /* callback for display state changes */
|
||||
DEVCB_NULL, /* callback for cursor state changes */
|
||||
DEVCB_NULL, /* HSYNC callback */
|
||||
DEVCB_NULL, /* VSYNC callback */
|
||||
NULL /* update address callback */
|
||||
};
|
||||
|
||||
|
||||
void othello_state::machine_start()
|
||||
{
|
||||
m_mc6845 = machine().device<mc6845_device>("crtc");
|
||||
@ -440,7 +424,10 @@ static MACHINE_CONFIG_START( othello, othello_state )
|
||||
MCFG_PALETTE_ADD("palette", 0x10)
|
||||
MCFG_PALETTE_INIT_OWNER(othello_state, othello)
|
||||
|
||||
MCFG_MC6845_ADD("crtc", H46505, "screen", 1000000 /* ? MHz */, h46505_intf) /* H46505 @ CPU clock */
|
||||
MCFG_MC6845_ADD("crtc", H46505, "screen", 1000000 /* ? MHz */) /* H46505 @ CPU clock */
|
||||
MCFG_MC6845_SHOW_BORDER_AREA(false)
|
||||
MCFG_MC6845_CHAR_WIDTH(TILE_WIDTH)
|
||||
MCFG_MC6845_UPDATE_ROW_CB(othello_state, crtc_update_row)
|
||||
|
||||
/* sound hardware */
|
||||
MCFG_SPEAKER_STANDARD_MONO("mono")
|
||||
|
@ -279,6 +279,7 @@ public:
|
||||
DECLARE_DRIVER_INIT(peplussb);
|
||||
DECLARE_DRIVER_INIT(peplussbw);
|
||||
TILE_GET_INFO_MEMBER(get_bg_tile_info);
|
||||
MC6845_ON_UPDATE_ADDR_CHANGED(crtc_addr);
|
||||
virtual void machine_reset();
|
||||
virtual void video_start();
|
||||
UINT32 screen_update_peplus(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
@ -302,26 +303,6 @@ static const UINT16 id_023[8] = { 0x4a6c, 0x4a7b, 0x4a4b, 0x4a5a, 0x4a2b, 0x4a0a
|
||||
#define SOUND_CLOCK ((MASTER_CLOCK)/12)
|
||||
|
||||
|
||||
/* prototypes */
|
||||
|
||||
static MC6845_ON_UPDATE_ADDR_CHANGED(crtc_addr);
|
||||
|
||||
static MC6845_INTERFACE( mc6845_intf )
|
||||
{
|
||||
false, /* show border area */
|
||||
0,0,0,0, /* visarea adjustment */
|
||||
8, /* number of pixels per video memory address */
|
||||
NULL, /* before pixel update callback */
|
||||
NULL, /* row update callback */
|
||||
NULL, /* after pixel update callback */
|
||||
DEVCB_NULL, /* callback for display state changes */
|
||||
DEVCB_NULL, /* callback for cursor state changes */
|
||||
DEVCB_NULL, /* HSYNC callback */
|
||||
DEVCB_DRIVER_LINE_MEMBER(peplus_state,crtc_vsync), /* VSYNC callback */
|
||||
crtc_addr /* update address callback */
|
||||
};
|
||||
|
||||
|
||||
/**************
|
||||
* Memory Copy *
|
||||
***************/
|
||||
@ -377,12 +358,12 @@ WRITE8_MEMBER(peplus_state::peplus_bgcolor_w)
|
||||
|
||||
/* ROCKWELL 6545 - Transparent Memory Addressing */
|
||||
|
||||
static MC6845_ON_UPDATE_ADDR_CHANGED(crtc_addr)
|
||||
MC6845_ON_UPDATE_ADDR_CHANGED(peplus_state::crtc_addr)
|
||||
{
|
||||
peplus_state *state = device->machine().driver_data<peplus_state>();
|
||||
state->m_vid_address = address;
|
||||
m_vid_address = address;
|
||||
}
|
||||
|
||||
|
||||
WRITE8_MEMBER(peplus_state::peplus_crtc_mode_w)
|
||||
{
|
||||
/* Reset timing logic */
|
||||
@ -1350,9 +1331,13 @@ static MACHINE_CONFIG_START( peplus, peplus_state )
|
||||
MCFG_PALETTE_ADD("palette", 16*16*2)
|
||||
MCFG_PALETTE_INIT_OWNER(peplus_state, peplus)
|
||||
|
||||
MCFG_MC6845_ADD("crtc", R6545_1, "screen", MC6845_CLOCK, mc6845_intf)
|
||||
MCFG_X2404P_ADD("i2cmem")
|
||||
MCFG_MC6845_ADD("crtc", R6545_1, "screen", MC6845_CLOCK)
|
||||
MCFG_MC6845_SHOW_BORDER_AREA(false)
|
||||
MCFG_MC6845_CHAR_WIDTH(8)
|
||||
MCFG_MC6845_ADDR_CHANGED_CB(peplus_state, crtc_addr)
|
||||
MCFG_MC6845_OUT_VSYNC_CB(WRITELINE(peplus_state, crtc_vsync))
|
||||
|
||||
MCFG_X2404P_ADD("i2cmem")
|
||||
|
||||
// sound hardware
|
||||
MCFG_SPEAKER_STANDARD_MONO("mono")
|
||||
|
@ -378,22 +378,6 @@ static GFXDECODE_START( progolf )
|
||||
GFXDECODE_END
|
||||
|
||||
|
||||
static MC6845_INTERFACE( mc6845_intf )
|
||||
{
|
||||
false, /* show border area */
|
||||
0,0,0,0, /* visarea adjustment */
|
||||
8, /* number of pixels per video memory address */
|
||||
NULL, /* before pixel update callback */
|
||||
NULL, /* row update callback */
|
||||
NULL, /* after pixel update callback */
|
||||
DEVCB_NULL, /* callback for display state changes */
|
||||
DEVCB_NULL, /* callback for cursor state changes */
|
||||
DEVCB_NULL, /* HSYNC callback */
|
||||
DEVCB_NULL, /* VSYNC callback */
|
||||
NULL /* update address callback */
|
||||
|
||||
};
|
||||
|
||||
PALETTE_INIT_MEMBER(progolf_state, progolf)
|
||||
{
|
||||
const UINT8 *color_prom = memregion("proms")->base();
|
||||
@ -446,7 +430,9 @@ static MACHINE_CONFIG_START( progolf, progolf_state )
|
||||
MCFG_PALETTE_ADD("palette", 32*3)
|
||||
MCFG_PALETTE_INIT_OWNER(progolf_state, progolf)
|
||||
|
||||
MCFG_MC6845_ADD("crtc", MC6845, "screen", 3000000/4, mc6845_intf) /* hand tuned to get ~57 fps */
|
||||
MCFG_MC6845_ADD("crtc", MC6845, "screen", 3000000/4) /* hand tuned to get ~57 fps */
|
||||
MCFG_MC6845_SHOW_BORDER_AREA(false)
|
||||
MCFG_MC6845_CHAR_WIDTH(8)
|
||||
|
||||
/* sound hardware */
|
||||
MCFG_SPEAKER_STANDARD_MONO("mono")
|
||||
|
@ -79,6 +79,8 @@ public:
|
||||
DECLARE_WRITE8_MEMBER(pia_comp_w);
|
||||
virtual void machine_start();
|
||||
DECLARE_WRITE8_MEMBER(ttl74123_output_changed);
|
||||
MC6845_BEGIN_UPDATE(crtc_begin_update);
|
||||
MC6845_UPDATE_ROW(crtc_update_row);
|
||||
required_device<cpu_device> m_maincpu;
|
||||
required_device<cpu_device> m_audiocpu;
|
||||
};
|
||||
@ -276,32 +278,22 @@ WRITE_LINE_MEMBER(r2dtank_state::flipscreen_w)
|
||||
}
|
||||
|
||||
|
||||
static MC6845_BEGIN_UPDATE( begin_update )
|
||||
MC6845_BEGIN_UPDATE( r2dtank_state::crtc_begin_update )
|
||||
{
|
||||
r2dtank_state *state = device->machine().driver_data<r2dtank_state>();
|
||||
/* create the pens */
|
||||
offs_t i;
|
||||
|
||||
for (i = 0; i < NUM_PENS; i++)
|
||||
for (offs_t i = 0; i < NUM_PENS; i++)
|
||||
{
|
||||
state->m_pens[i] = rgb_t(pal1bit(i >> 2), pal1bit(i >> 1), pal1bit(i >> 0));
|
||||
m_pens[i] = rgb_t(pal1bit(i >> 2), pal1bit(i >> 1), pal1bit(i >> 0));
|
||||
}
|
||||
|
||||
return state->m_pens;
|
||||
}
|
||||
|
||||
|
||||
static MC6845_UPDATE_ROW( update_row )
|
||||
MC6845_UPDATE_ROW( r2dtank_state::crtc_update_row )
|
||||
{
|
||||
r2dtank_state *state = device->machine().driver_data<r2dtank_state>();
|
||||
UINT8 cx;
|
||||
|
||||
pen_t *pens = (pen_t *)param;
|
||||
UINT8 x = 0;
|
||||
|
||||
for (cx = 0; cx < x_count; cx++)
|
||||
for (UINT8 cx = 0; cx < x_count; cx++)
|
||||
{
|
||||
int i;
|
||||
UINT8 data, fore_color;
|
||||
|
||||
/* the memory is hooked up to the MA, RA lines this way */
|
||||
@ -309,17 +301,17 @@ static MC6845_UPDATE_ROW( update_row )
|
||||
((ra << 5) & 0x00e0) |
|
||||
((ma << 0) & 0x001f);
|
||||
|
||||
if (state->m_flipscreen)
|
||||
if (m_flipscreen)
|
||||
offs = offs ^ 0x1fff;
|
||||
|
||||
data = state->m_videoram[offs];
|
||||
fore_color = (state->m_colorram[offs] >> 5) & 0x07;
|
||||
data = m_videoram[offs];
|
||||
fore_color = (m_colorram[offs] >> 5) & 0x07;
|
||||
|
||||
for (i = 0; i < 8; i++)
|
||||
for (int i = 0; i < 8; i++)
|
||||
{
|
||||
UINT8 bit, color;
|
||||
|
||||
if (state->m_flipscreen)
|
||||
if (m_flipscreen)
|
||||
{
|
||||
bit = data & 0x01;
|
||||
data = data >> 1;
|
||||
@ -331,7 +323,7 @@ static MC6845_UPDATE_ROW( update_row )
|
||||
}
|
||||
|
||||
color = bit ? fore_color : 0;
|
||||
bitmap.pix32(y, x) = pens[color];
|
||||
bitmap.pix32(y, x) = m_pens[color];
|
||||
|
||||
x = x + 1;
|
||||
}
|
||||
@ -347,23 +339,6 @@ WRITE_LINE_MEMBER(r2dtank_state::display_enable_changed)
|
||||
}
|
||||
|
||||
|
||||
static MC6845_INTERFACE( mc6845_intf )
|
||||
{
|
||||
false, /* show border area */
|
||||
0,0,0,0, /* visarea adjustment */
|
||||
8, /* number of pixels per video memory address */
|
||||
begin_update, /* before pixel update callback */
|
||||
update_row, /* row update callback */
|
||||
NULL, /* after pixel update callback */
|
||||
DEVCB_DRIVER_LINE_MEMBER(r2dtank_state,display_enable_changed), /* callback for display state changes */
|
||||
DEVCB_NULL, /* callback for cursor state changes */
|
||||
DEVCB_NULL, /* HSYNC callback */
|
||||
DEVCB_NULL, /* VSYNC callback */
|
||||
NULL /* update address callback */
|
||||
};
|
||||
|
||||
|
||||
|
||||
/*************************************
|
||||
*
|
||||
* Memory handlers
|
||||
@ -503,7 +478,12 @@ static MACHINE_CONFIG_START( r2dtank, r2dtank_state )
|
||||
MCFG_SCREEN_RAW_PARAMS(PIXEL_CLOCK, 256, 0, 256, 256, 0, 256) /* temporary, CRTC will configure screen */
|
||||
MCFG_SCREEN_UPDATE_DEVICE("crtc", mc6845_device, screen_update)
|
||||
|
||||
MCFG_MC6845_ADD("crtc", MC6845, "screen", CRTC_CLOCK, mc6845_intf)
|
||||
MCFG_MC6845_ADD("crtc", MC6845, "screen", CRTC_CLOCK)
|
||||
MCFG_MC6845_SHOW_BORDER_AREA(false)
|
||||
MCFG_MC6845_CHAR_WIDTH(8)
|
||||
MCFG_MC6845_BEGIN_UPDATE_CB(r2dtank_state, crtc_begin_update)
|
||||
MCFG_MC6845_UPDATE_ROW_CB(r2dtank_state, crtc_update_row)
|
||||
MCFG_MC6845_OUT_DE_CB(WRITELINE(r2dtank_state, display_enable_changed))
|
||||
|
||||
/* 74LS123 */
|
||||
|
||||
|
@ -234,21 +234,6 @@ static GFXDECODE_START( rgum )
|
||||
GFXDECODE_END
|
||||
|
||||
|
||||
static MC6845_INTERFACE( mc6845_intf )
|
||||
{
|
||||
false, /* show border area */
|
||||
0,0,0,0, /* visarea adjustment */
|
||||
8, /* number of pixels per video memory address */
|
||||
NULL, /* before pixel update callback */
|
||||
NULL, /* row update callback */
|
||||
NULL, /* after pixel update callback */
|
||||
DEVCB_NULL, /* callback for display state changes */
|
||||
DEVCB_NULL, /* callback for cursor state changes */
|
||||
DEVCB_NULL, /* HSYNC callback */
|
||||
DEVCB_NULL, /* VSYNC callback */
|
||||
NULL /* update address callback */
|
||||
};
|
||||
|
||||
static const ay8910_interface ay8910_config =
|
||||
{
|
||||
AY8910_LEGACY_OUTPUT,
|
||||
@ -274,7 +259,9 @@ static MACHINE_CONFIG_START( rgum, rgum_state )
|
||||
MCFG_SCREEN_UPDATE_DRIVER(rgum_state, screen_update_royalgum)
|
||||
MCFG_SCREEN_PALETTE("palette")
|
||||
|
||||
MCFG_MC6845_ADD("crtc", MC6845, "screen", 24000000/16, mc6845_intf) /* unknown clock & type, hand tuned to get ~50 fps (?) */
|
||||
MCFG_MC6845_ADD("crtc", MC6845, "screen", 24000000/16) /* unknown clock & type, hand tuned to get ~50 fps (?) */
|
||||
MCFG_MC6845_SHOW_BORDER_AREA(false)
|
||||
MCFG_MC6845_CHAR_WIDTH(8)
|
||||
|
||||
MCFG_DEVICE_ADD("ppi8255", I8255A, 0)
|
||||
MCFG_I8255_IN_PORTA_CB(IOPORT("IN0"))
|
||||
|
@ -332,35 +332,6 @@ static GFXDECODE_START( sanremo )
|
||||
GFXDECODE_ENTRY( "gfx", 0, tilelayout, 0, 1 )
|
||||
GFXDECODE_END
|
||||
|
||||
|
||||
/********************************************
|
||||
* CRTC Interface *
|
||||
********************************************/
|
||||
|
||||
|
||||
static const mc6845_interface mc6845_intf =
|
||||
/*
|
||||
*** MC6845 init ***
|
||||
|
||||
Register: 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17
|
||||
Value: 0x45 0x30 0x36 0x0A 0x28 0x00 0x26 0x27 0x00 0x07 0x20 0x0B 0x00 0x00 0x00 0x00 0x00 0x00.
|
||||
|
||||
*/
|
||||
{
|
||||
false, /* show border area */
|
||||
0,0,0,0, /* visarea adjustment */
|
||||
8, /* number of pixels per video memory address */
|
||||
NULL, /* before pixel update callback */
|
||||
NULL, /* row update callback */
|
||||
NULL, /* after pixel update callback */
|
||||
DEVCB_NULL, /* callback for display state changes */
|
||||
DEVCB_NULL, /* callback for cursor state changes */
|
||||
DEVCB_NULL, /* HSYNC callback */
|
||||
DEVCB_NULL, /* VSYNC callback */
|
||||
NULL /* update address callback */
|
||||
};
|
||||
|
||||
|
||||
/********************************************
|
||||
* Sound Interface *
|
||||
********************************************/
|
||||
@ -399,7 +370,13 @@ static MACHINE_CONFIG_START( sanremo, sanremo_state )
|
||||
MCFG_SCREEN_UPDATE_DRIVER(sanremo_state, screen_update_sanremo)
|
||||
MCFG_SCREEN_PALETTE("palette")
|
||||
|
||||
MCFG_MC6845_ADD("crtc", MC6845, "screen", CRTC_CLOCK, mc6845_intf)
|
||||
MCFG_MC6845_ADD("crtc", MC6845, "screen", CRTC_CLOCK)
|
||||
// *** MC6845 init ***
|
||||
//
|
||||
// Register: 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17
|
||||
// Value: 0x45 0x30 0x36 0x0A 0x28 0x00 0x26 0x27 0x00 0x07 0x20 0x0B 0x00 0x00 0x00 0x00 0x00 0x00.
|
||||
MCFG_MC6845_SHOW_BORDER_AREA(false)
|
||||
MCFG_MC6845_CHAR_WIDTH(8)
|
||||
|
||||
MCFG_GFXDECODE_ADD("gfxdecode", "palette", sanremo)
|
||||
MCFG_PALETTE_ADD("palette", 0x10)
|
||||
|
@ -50,6 +50,8 @@ public:
|
||||
DECLARE_WRITE8_MEMBER(palette_w);
|
||||
DECLARE_WRITE_LINE_MEMBER(hsync_changed);
|
||||
DECLARE_WRITE_LINE_MEMBER(vsync_changed);
|
||||
MC6845_BEGIN_UPDATE(crtc_begin_update);
|
||||
MC6845_UPDATE_ROW(crtc_update_row);
|
||||
virtual void machine_start();
|
||||
required_device<cpu_device> m_maincpu;
|
||||
required_device<screen_device> m_screen;
|
||||
@ -87,49 +89,40 @@ WRITE8_MEMBER(slotcarn_state::palette_w)
|
||||
}
|
||||
|
||||
|
||||
static MC6845_BEGIN_UPDATE( begin_update )
|
||||
MC6845_BEGIN_UPDATE( slotcarn_state::crtc_begin_update )
|
||||
{
|
||||
slotcarn_state *state = device->machine().driver_data<slotcarn_state>();
|
||||
int i;
|
||||
int dim, bit0, bit1, bit2;
|
||||
|
||||
for (i=0; i < NUM_PENS; i++)
|
||||
for (int i=0; i < NUM_PENS; i++)
|
||||
{
|
||||
dim = BIT(i,3) ? 255 : 127;
|
||||
bit0 = BIT(i,0);
|
||||
bit1 = BIT(i,1);
|
||||
bit2 = BIT(i,2);
|
||||
state->m_pens[i] = rgb_t(dim*bit0, dim*bit1, dim*bit2);
|
||||
m_pens[i] = rgb_t(dim*bit0, dim*bit1, dim*bit2);
|
||||
}
|
||||
|
||||
return state->m_pens;
|
||||
}
|
||||
|
||||
|
||||
static MC6845_UPDATE_ROW( update_row )
|
||||
MC6845_UPDATE_ROW( slotcarn_state::crtc_update_row )
|
||||
{
|
||||
slotcarn_state *state = device->machine().driver_data<slotcarn_state>();
|
||||
int extra_video_bank_bit = 0; // not used?
|
||||
int lscnblk = 0; // not used?
|
||||
|
||||
|
||||
UINT8 cx;
|
||||
pen_t *pens = (pen_t *)param;
|
||||
UINT8 *gfx[2];
|
||||
UINT16 x = 0;
|
||||
int rlen;
|
||||
|
||||
gfx[0] = state->memregion("gfx1")->base();
|
||||
gfx[1] = state->memregion("gfx2")->base();
|
||||
rlen = state->memregion("gfx2")->bytes();
|
||||
gfx[0] = memregion("gfx1")->base();
|
||||
gfx[1] = memregion("gfx2")->base();
|
||||
rlen = memregion("gfx2")->bytes();
|
||||
|
||||
//ma = ma ^ 0x7ff;
|
||||
for (cx = 0; cx < x_count; cx++)
|
||||
for (UINT8 cx = 0; cx < x_count; cx++)
|
||||
{
|
||||
int i;
|
||||
int attr = state->m_ram_attr[ma & 0x7ff];
|
||||
int attr = m_ram_attr[ma & 0x7ff];
|
||||
int region = (attr & 0x40) >> 6;
|
||||
int addr = ((state->m_ram_video[ma & 0x7ff] | ((attr & 0x80) << 1) | (extra_video_bank_bit)) << 4) | (ra & 0x0f);
|
||||
int addr = ((m_ram_video[ma & 0x7ff] | ((attr & 0x80) << 1) | (extra_video_bank_bit)) << 4) | (ra & 0x0f);
|
||||
int colour = (attr & 0x7f) << 3;
|
||||
UINT8 *data;
|
||||
|
||||
@ -149,8 +142,8 @@ static MC6845_UPDATE_ROW( update_row )
|
||||
else
|
||||
col |= 0x03;
|
||||
|
||||
col = state->m_ram_palette[col & 0x3ff];
|
||||
bitmap.pix32(y, x) = pens[col ? col & (NUM_PENS-1) : (lscnblk ? 8 : 0)];
|
||||
col = m_ram_palette[col & 0x3ff];
|
||||
bitmap.pix32(y, x) = m_pens[col ? col & (NUM_PENS-1) : (lscnblk ? 8 : 0)];
|
||||
|
||||
x++;
|
||||
}
|
||||
@ -170,22 +163,6 @@ WRITE_LINE_MEMBER(slotcarn_state::vsync_changed)
|
||||
m_maincpu->set_input_line(0, state ? ASSERT_LINE : CLEAR_LINE);
|
||||
}
|
||||
|
||||
static MC6845_INTERFACE( mc6845_intf )
|
||||
{
|
||||
false, /* show border area */
|
||||
0,0,0,0, /* visarea adjustment */
|
||||
8, /* number of pixels per video memory address */
|
||||
begin_update, /* before pixel update callback */
|
||||
update_row, /* row update callback */
|
||||
NULL, /* after pixel update callback */
|
||||
DEVCB_NULL, /* callback for display state changes */
|
||||
DEVCB_NULL, /* callback for cursor state changes */
|
||||
DEVCB_DRIVER_LINE_MEMBER(slotcarn_state,hsync_changed), /* HSYNC callback */
|
||||
DEVCB_DRIVER_LINE_MEMBER(slotcarn_state,vsync_changed), /* VSYNC callback */
|
||||
NULL /* update address callback */
|
||||
};
|
||||
|
||||
|
||||
/*******************************
|
||||
* Memory Map *
|
||||
*******************************/
|
||||
@ -596,7 +573,13 @@ static MACHINE_CONFIG_START( slotcarn, slotcarn_state )
|
||||
MCFG_SCREEN_RAW_PARAMS(PIXEL_CLOCK, 512, 0, 512, 256, 0, 256) /* temporary, CRTC will configure screen */
|
||||
MCFG_SCREEN_UPDATE_DEVICE("crtc", mc6845_device, screen_update)
|
||||
|
||||
MCFG_MC6845_ADD("crtc", MC6845, "screen", CRTC_CLOCK, mc6845_intf)
|
||||
MCFG_MC6845_ADD("crtc", MC6845, "screen", CRTC_CLOCK)
|
||||
MCFG_MC6845_SHOW_BORDER_AREA(false)
|
||||
MCFG_MC6845_CHAR_WIDTH(8)
|
||||
MCFG_MC6845_BEGIN_UPDATE_CB(slotcarn_state, crtc_begin_update)
|
||||
MCFG_MC6845_UPDATE_ROW_CB(slotcarn_state, crtc_update_row)
|
||||
MCFG_MC6845_OUT_HSYNC_CB(WRITELINE(slotcarn_state, hsync_changed))
|
||||
MCFG_MC6845_OUT_VSYNC_CB(WRITELINE(slotcarn_state, vsync_changed))
|
||||
|
||||
MCFG_GFXDECODE_ADD("gfxdecode", "palette", slotcarn)
|
||||
MCFG_PALETTE_ADD("palette", 0x400)
|
||||
|
@ -746,28 +746,6 @@ INTERRUPT_GEN_MEMBER(snk6502_state::snk6502_interrupt)
|
||||
}
|
||||
|
||||
|
||||
/*************************************
|
||||
*
|
||||
* 6845 CRTC interface
|
||||
*
|
||||
*************************************/
|
||||
|
||||
static MC6845_INTERFACE( mc6845_intf )
|
||||
{
|
||||
false, /* show border area */
|
||||
0,0,0,0, /* visarea adjustment */
|
||||
8, /* number of pixels per video memory address */
|
||||
NULL, /* before pixel update callback */
|
||||
NULL, /* row update callback */
|
||||
NULL, /* after pixel update callback */
|
||||
DEVCB_NULL, /* callback for display state changes */
|
||||
DEVCB_NULL, /* callback for cursor state changes */
|
||||
DEVCB_NULL, /* HSYNC callback */
|
||||
DEVCB_NULL, /* VSYNC callback */
|
||||
NULL /* update address callback */
|
||||
};
|
||||
|
||||
|
||||
/*************************************
|
||||
*
|
||||
* Machine initialisation
|
||||
@ -837,7 +815,9 @@ static MACHINE_CONFIG_START( sasuke, snk6502_state )
|
||||
MCFG_PALETTE_INIT_OWNER(snk6502_state,satansat)
|
||||
MCFG_VIDEO_START_OVERRIDE(snk6502_state,satansat)
|
||||
|
||||
MCFG_MC6845_ADD("crtc", MC6845, "screen", MASTER_CLOCK / 16, mc6845_intf)
|
||||
MCFG_MC6845_ADD("crtc", MC6845, "screen", MASTER_CLOCK / 16)
|
||||
MCFG_MC6845_SHOW_BORDER_AREA(false)
|
||||
MCFG_MC6845_CHAR_WIDTH(8)
|
||||
|
||||
MCFG_TIMER_DRIVER_ADD_PERIODIC("sasuke_timer", snk6502_state, sasuke_update_counter, attotime::from_hz(MASTER_CLOCK / 8))
|
||||
|
||||
@ -911,7 +891,9 @@ static MACHINE_CONFIG_START( vanguard, snk6502_state )
|
||||
MCFG_PALETTE_INIT_OWNER(snk6502_state,snk6502)
|
||||
MCFG_VIDEO_START_OVERRIDE(snk6502_state,snk6502)
|
||||
|
||||
MCFG_MC6845_ADD("crtc", MC6845, "screen", MASTER_CLOCK / 16, mc6845_intf)
|
||||
MCFG_MC6845_ADD("crtc", MC6845, "screen", MASTER_CLOCK / 16)
|
||||
MCFG_MC6845_SHOW_BORDER_AREA(false)
|
||||
MCFG_MC6845_CHAR_WIDTH(8)
|
||||
|
||||
// sound hardware
|
||||
MCFG_SPEAKER_STANDARD_MONO("mono")
|
||||
|
@ -285,21 +285,6 @@ static GFXDECODE_START( speedatk )
|
||||
GFXDECODE_ENTRY( "gfx2", 0, charlayout_3bpp, 0, 32 )
|
||||
GFXDECODE_END
|
||||
|
||||
static MC6845_INTERFACE( mc6845_intf )
|
||||
{
|
||||
false, /* show border area */
|
||||
0,0,0,0, /* visarea adjustment */
|
||||
8, /* number of pixels per video memory address */
|
||||
NULL, /* before pixel update callback */
|
||||
NULL, /* row update callback */
|
||||
NULL, /* after pixel update callback */
|
||||
DEVCB_NULL, /* callback for display state changes */
|
||||
DEVCB_NULL, /* callback for cursor state changes */
|
||||
DEVCB_NULL, /* HSYNC callback */
|
||||
DEVCB_NULL, /* VSYNC callback */
|
||||
NULL /* update address callback */
|
||||
};
|
||||
|
||||
WRITE8_MEMBER(speedatk_state::speedatk_output_w)
|
||||
{
|
||||
m_flip_scr = data & 0x80;
|
||||
@ -336,7 +321,9 @@ static MACHINE_CONFIG_START( speedatk, speedatk_state )
|
||||
MCFG_SCREEN_UPDATE_DRIVER(speedatk_state, screen_update_speedatk)
|
||||
MCFG_SCREEN_PALETTE("palette")
|
||||
|
||||
MCFG_MC6845_ADD("crtc", H46505, "screen", MASTER_CLOCK/16, mc6845_intf) /* hand tuned to get ~60 fps */
|
||||
MCFG_MC6845_ADD("crtc", H46505, "screen", MASTER_CLOCK/16) /* hand tuned to get ~60 fps */
|
||||
MCFG_MC6845_SHOW_BORDER_AREA(false)
|
||||
MCFG_MC6845_CHAR_WIDTH(8)
|
||||
|
||||
MCFG_GFXDECODE_ADD("gfxdecode", "palette", speedatk)
|
||||
MCFG_PALETTE_ADD("palette", 0x100)
|
||||
|
@ -321,32 +321,22 @@ WRITE_LINE_MEMBER(spiders_state::flipscreen_w)
|
||||
}
|
||||
|
||||
|
||||
static MC6845_BEGIN_UPDATE( begin_update )
|
||||
MC6845_BEGIN_UPDATE( spiders_state::crtc_begin_update )
|
||||
{
|
||||
spiders_state *state = device->machine().driver_data<spiders_state>();
|
||||
/* create the pens */
|
||||
offs_t i;
|
||||
|
||||
for (i = 0; i < NUM_PENS; i++)
|
||||
for (offs_t i = 0; i < NUM_PENS; i++)
|
||||
{
|
||||
state->m_pens[i] = rgb_t(pal1bit(i >> 0), pal1bit(i >> 1), pal1bit(i >> 2));
|
||||
m_pens[i] = rgb_t(pal1bit(i >> 0), pal1bit(i >> 1), pal1bit(i >> 2));
|
||||
}
|
||||
|
||||
return state->m_pens;
|
||||
}
|
||||
|
||||
|
||||
static MC6845_UPDATE_ROW( update_row )
|
||||
MC6845_UPDATE_ROW( spiders_state::crtc_update_row )
|
||||
{
|
||||
spiders_state *state = device->machine().driver_data<spiders_state>();
|
||||
UINT8 cx;
|
||||
|
||||
pen_t *pens = (pen_t *)param;
|
||||
UINT8 x = 0;
|
||||
|
||||
for (cx = 0; cx < x_count; cx++)
|
||||
for (UINT8 cx = 0; cx < x_count; cx++)
|
||||
{
|
||||
int i;
|
||||
UINT8 data1, data2, data3;
|
||||
|
||||
/* the memory is hooked up to the MA, RA lines this way */
|
||||
@ -354,18 +344,18 @@ static MC6845_UPDATE_ROW( update_row )
|
||||
((ra << 5) & 0x00e0) |
|
||||
((ma << 0) & 0x001f);
|
||||
|
||||
if (state->m_flipscreen)
|
||||
if (m_flipscreen)
|
||||
offs = offs ^ 0x3fff;
|
||||
|
||||
data1 = state->m_ram[0x0000 | offs];
|
||||
data2 = state->m_ram[0x4000 | offs];
|
||||
data3 = state->m_ram[0x8000 | offs];
|
||||
data1 = m_ram[0x0000 | offs];
|
||||
data2 = m_ram[0x4000 | offs];
|
||||
data3 = m_ram[0x8000 | offs];
|
||||
|
||||
for (i = 0; i < 8; i++)
|
||||
for (int i = 0; i < 8; i++)
|
||||
{
|
||||
UINT8 color;
|
||||
|
||||
if (state->m_flipscreen)
|
||||
if (m_flipscreen)
|
||||
{
|
||||
color = ((data3 & 0x80) >> 5) |
|
||||
((data2 & 0x80) >> 6) |
|
||||
@ -386,7 +376,7 @@ static MC6845_UPDATE_ROW( update_row )
|
||||
data3 = data3 >> 1;
|
||||
}
|
||||
|
||||
bitmap.pix32(y, x) = pens[color];
|
||||
bitmap.pix32(y, x) = m_pens[color];
|
||||
|
||||
x = x + 1;
|
||||
}
|
||||
@ -402,23 +392,6 @@ WRITE_LINE_MEMBER(spiders_state::display_enable_changed)
|
||||
}
|
||||
|
||||
|
||||
static MC6845_INTERFACE( mc6845_intf )
|
||||
{
|
||||
false, /* show border area */
|
||||
0,0,0,0, /* visarea adjustment */
|
||||
8, /* number of pixels per video memory address */
|
||||
begin_update, /* before pixel update callback */
|
||||
update_row, /* row update callback */
|
||||
NULL, /* after pixel update callback */
|
||||
DEVCB_DRIVER_LINE_MEMBER(spiders_state,display_enable_changed), /* callback for display state changes */
|
||||
DEVCB_NULL, /* callback for cursor state changes */
|
||||
DEVCB_NULL, /* HSYNC callback */
|
||||
DEVCB_NULL, /* VSYNC callback */
|
||||
NULL /* update address callback */
|
||||
};
|
||||
|
||||
|
||||
|
||||
/*************************************
|
||||
*
|
||||
* Graphics ROM access - see the
|
||||
@ -603,7 +576,12 @@ static MACHINE_CONFIG_START( spiders, spiders_state )
|
||||
MCFG_SCREEN_RAW_PARAMS(PIXEL_CLOCK, 256, 0, 256, 256, 0, 256) /* temporary, CRTC will configure screen */
|
||||
MCFG_SCREEN_UPDATE_DEVICE("crtc", mc6845_device, screen_update)
|
||||
|
||||
MCFG_MC6845_ADD("crtc", MC6845, "screen", CRTC_CLOCK, mc6845_intf)
|
||||
MCFG_MC6845_ADD("crtc", MC6845, "screen", CRTC_CLOCK)
|
||||
MCFG_MC6845_SHOW_BORDER_AREA(false)
|
||||
MCFG_MC6845_CHAR_WIDTH(8)
|
||||
MCFG_MC6845_BEGIN_UPDATE_CB(spiders_state, crtc_begin_update)
|
||||
MCFG_MC6845_UPDATE_ROW_CB(spiders_state, crtc_update_row)
|
||||
MCFG_MC6845_OUT_DE_CB(WRITELINE(spiders_state, display_enable_changed))
|
||||
|
||||
/* 74LS123 */
|
||||
|
||||
|
@ -175,6 +175,8 @@ public:
|
||||
DECLARE_DRIVER_INIT(ssingles);
|
||||
virtual void video_start();
|
||||
INTERRUPT_GEN_MEMBER(atamanot_irq);
|
||||
MC6845_UPDATE_ROW(ssingles_update_row);
|
||||
MC6845_UPDATE_ROW(atamanot_update_row);
|
||||
required_device<cpu_device> m_maincpu;
|
||||
};
|
||||
|
||||
@ -191,114 +193,79 @@ static const UINT8 ssingles_colors[NUM_PENS*3]=
|
||||
0x00,0x00,0x00, 0xff,0x00,0xff, 0x80,0x00,0x80, 0x40,0x00,0x40
|
||||
};
|
||||
|
||||
static MC6845_UPDATE_ROW( ssingles_update_row )
|
||||
MC6845_UPDATE_ROW( ssingles_state::ssingles_update_row )
|
||||
{
|
||||
ssingles_state *state = device->machine().driver_data<ssingles_state>();
|
||||
int cx,x;
|
||||
UINT32 tile_address;
|
||||
UINT16 cell,palette;
|
||||
UINT8 b0,b1;
|
||||
const UINT8 *gfx = state->memregion("gfx1")->base();
|
||||
UINT16 cell, palette;
|
||||
UINT8 b0, b1;
|
||||
const UINT8 *gfx = memregion("gfx1")->base();
|
||||
|
||||
for(cx=0;cx<x_count;++cx)
|
||||
for (int cx = 0; cx < x_count; ++cx)
|
||||
{
|
||||
int address=((ma>>1)+(cx>>1))&0xff;
|
||||
int address = ((ma >> 1) + (cx >> 1)) & 0xff;
|
||||
|
||||
cell=state->m_videoram[address]+(state->m_colorram[address]<<8);
|
||||
cell = m_videoram[address] + (m_colorram[address] << 8);
|
||||
|
||||
tile_address=((cell&0x3ff)<<4)+ra;
|
||||
palette=(cell>>10)&0x1c;
|
||||
tile_address = ((cell & 0x3ff) << 4) + ra;
|
||||
palette = (cell >> 10) & 0x1c;
|
||||
|
||||
if(cx&1)
|
||||
if (cx & 1)
|
||||
{
|
||||
b0=gfx[tile_address+0x0000]; /* 9.bin */
|
||||
b1=gfx[tile_address+0x8000]; /* 11.bin */
|
||||
b0 = gfx[tile_address + 0x0000]; /* 9.bin */
|
||||
b1 = gfx[tile_address + 0x8000]; /* 11.bin */
|
||||
}
|
||||
else
|
||||
{
|
||||
b0=gfx[tile_address+0x4000]; /* 10.bin */
|
||||
b1=gfx[tile_address+0xc000]; /* 12.bin */
|
||||
b0 = gfx[tile_address + 0x4000]; /* 10.bin */
|
||||
b1 = gfx[tile_address + 0xc000]; /* 12.bin */
|
||||
}
|
||||
|
||||
for(x=7;x>=0;--x)
|
||||
for (int x = 7; x >= 0; --x)
|
||||
{
|
||||
bitmap.pix32(y, (cx<<3)|(x)) = state->m_pens[palette+((b1&1)|((b0&1)<<1))];
|
||||
b0>>=1;
|
||||
b1>>=1;
|
||||
bitmap.pix32(y, (cx << 3) | x) = m_pens[palette + ((b1 & 1) | ((b0 & 1) << 1))];
|
||||
b0 >>= 1;
|
||||
b1 >>= 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static MC6845_UPDATE_ROW( atamanot_update_row )
|
||||
MC6845_UPDATE_ROW( ssingles_state::atamanot_update_row )
|
||||
{
|
||||
ssingles_state *state = device->machine().driver_data<ssingles_state>();
|
||||
int cx,x;
|
||||
UINT32 tile_address;
|
||||
UINT16 cell,palette;
|
||||
UINT8 b0,b1;
|
||||
const UINT8 *gfx = state->memregion("gfx1")->base();
|
||||
UINT16 cell, palette;
|
||||
UINT8 b0, b1;
|
||||
const UINT8 *gfx = memregion("gfx1")->base();
|
||||
|
||||
for(cx=0;cx<x_count;++cx)
|
||||
for (int cx = 0; cx < x_count; ++cx)
|
||||
{
|
||||
int address=((ma>>1)+(cx>>1))&0xff;
|
||||
int address = ((ma >> 1) + (cx >> 1)) & 0xff;
|
||||
|
||||
cell=state->m_videoram[address]+(state->m_colorram[address]<<8);
|
||||
cell = m_videoram[address] + (m_colorram[address] << 8);
|
||||
|
||||
tile_address=((cell&0x1ff)<<4)+ra;
|
||||
palette=(cell>>10)&0x1c;
|
||||
tile_address = ((cell & 0x1ff) << 4) + ra;
|
||||
palette = (cell >> 10) & 0x1c;
|
||||
|
||||
if(cx&1)
|
||||
if (cx & 1)
|
||||
{
|
||||
b0=gfx[tile_address+0x0000]; /* 9.bin */
|
||||
b1=gfx[tile_address+0x4000]; /* 11.bin */
|
||||
b0 = gfx[tile_address + 0x0000]; /* 9.bin */
|
||||
b1 = gfx[tile_address + 0x4000]; /* 11.bin */
|
||||
}
|
||||
else
|
||||
{
|
||||
b0=gfx[tile_address+0x2000]; /* 10.bin */
|
||||
b1=gfx[tile_address+0x6000]; /* 12.bin */
|
||||
b0 = gfx[tile_address + 0x2000]; /* 10.bin */
|
||||
b1 = gfx[tile_address + 0x6000]; /* 12.bin */
|
||||
}
|
||||
|
||||
for(x=7;x>=0;--x)
|
||||
for (int x = 7; x >= 0; --x)
|
||||
{
|
||||
bitmap.pix32(y, (cx<<3)|(x)) = state->m_pens[palette+((b1&1)|((b0&1)<<1))];
|
||||
b0>>=1;
|
||||
b1>>=1;
|
||||
bitmap.pix32(y, (cx << 3) | x) = m_pens[palette + ((b1 & 1) | ((b0 & 1) << 1))];
|
||||
b0 >>= 1;
|
||||
b1 >>= 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static MC6845_INTERFACE( ssingles_mc6845_intf )
|
||||
{
|
||||
false,
|
||||
0,0,0,0,
|
||||
8,
|
||||
NULL, /* before pixel update callback */
|
||||
ssingles_update_row, /* row update callback */
|
||||
NULL, /* after pixel update callback */
|
||||
DEVCB_NULL, /* callback for display state changes */
|
||||
DEVCB_NULL, /* callback for cursor state changes */
|
||||
DEVCB_NULL, /* HSYNC callback */
|
||||
DEVCB_NULL, /* VSYNC callback */
|
||||
NULL /* update address callback */
|
||||
};
|
||||
|
||||
static MC6845_INTERFACE( atamanot_mc6845_intf )
|
||||
{
|
||||
false,
|
||||
0,0,0,0,
|
||||
8,
|
||||
NULL, /* before pixel update callback */
|
||||
atamanot_update_row, /* row update callback */
|
||||
NULL, /* after pixel update callback */
|
||||
DEVCB_NULL, /* callback for display state changes */
|
||||
DEVCB_NULL, /* callback for cursor state changes */
|
||||
DEVCB_NULL, /* HSYNC callback */
|
||||
DEVCB_NULL, /* VSYNC callback */
|
||||
NULL /* update address callback */
|
||||
};
|
||||
|
||||
|
||||
WRITE8_MEMBER(ssingles_state::ssingles_videoram_w)
|
||||
{
|
||||
UINT8 *vram = memregion("vram")->base();
|
||||
@ -579,8 +546,10 @@ static MACHINE_CONFIG_START( ssingles, ssingles_state )
|
||||
|
||||
MCFG_GFXDECODE_ADD("gfxdecode", "palette", ssingles)
|
||||
|
||||
|
||||
MCFG_MC6845_ADD("crtc", MC6845, "screen", 1000000 /* ? MHz */, ssingles_mc6845_intf)
|
||||
MCFG_MC6845_ADD("crtc", MC6845, "screen", 1000000 /* ? MHz */)
|
||||
MCFG_MC6845_SHOW_BORDER_AREA(false)
|
||||
MCFG_MC6845_CHAR_WIDTH(8)
|
||||
MCFG_MC6845_UPDATE_ROW_CB(ssingles_state, ssingles_update_row)
|
||||
|
||||
/* sound hardware */
|
||||
MCFG_SPEAKER_STANDARD_MONO("mono")
|
||||
@ -606,7 +575,10 @@ static MACHINE_CONFIG_DERIVED( atamanot, ssingles )
|
||||
|
||||
MCFG_DEVICE_REMOVE("crtc")
|
||||
|
||||
MCFG_MC6845_ADD("crtc", MC6845, "screen", 1000000 /* ? MHz */, atamanot_mc6845_intf)
|
||||
MCFG_MC6845_ADD("crtc", MC6845, "screen", 1000000 /* ? MHz */)
|
||||
MCFG_MC6845_SHOW_BORDER_AREA(false)
|
||||
MCFG_MC6845_CHAR_WIDTH(8)
|
||||
MCFG_MC6845_UPDATE_ROW_CB(ssingles_state, atamanot_update_row)
|
||||
|
||||
MCFG_GFXDECODE_MODIFY("gfxdecode", atamanot)
|
||||
MACHINE_CONFIG_END
|
||||
|
@ -404,26 +404,6 @@ static GFXDECODE_START( supercrd ) /* Adressing the first half of the palette *
|
||||
GFXDECODE_END
|
||||
|
||||
|
||||
/************************
|
||||
* CRTC Interface *
|
||||
************************/
|
||||
|
||||
//static MC6845_INTERFACE( mc6845_intf )
|
||||
//{
|
||||
// false,
|
||||
// 0,0,0,0, /* visarea adjustment */
|
||||
// 4, /* number of pixels per video memory address */
|
||||
// NULL, /* before pixel update callback */
|
||||
// NULL, /* row update callback */
|
||||
// NULL, /* after pixel update callback */
|
||||
// DEVCB_NULL, /* callback for display state changes */
|
||||
// DEVCB_NULL, /* callback for cursor state changes */
|
||||
// DEVCB_NULL, /* HSYNC callback */
|
||||
// DEVCB_NULL, /* VSYNC callback */
|
||||
// NULL /* update address callback */
|
||||
//};
|
||||
|
||||
|
||||
/**************************
|
||||
* Machine Drivers *
|
||||
**************************/
|
||||
@ -454,7 +434,9 @@ static MACHINE_CONFIG_START( supercrd, supercrd_state )
|
||||
MCFG_PALETTE_INIT_OWNER(supercrd_state, supercrd)
|
||||
MCFG_VIDEO_START_OVERRIDE(supercrd_state, supercrd)
|
||||
|
||||
// MCFG_MC6845_ADD("crtc", MC6845, "screen", MASTER_CLOCK/8, mc6845_intf)
|
||||
// MCFG_MC6845_ADD("crtc", MC6845, "screen", MASTER_CLOCK/8)
|
||||
// MCFG_MC6845_SHOW_BORDER_AREA(false)
|
||||
// MCFG_MC6845_CHAR_WIDTH(4)
|
||||
|
||||
/* sound hardware */
|
||||
MCFG_SPEAKER_STANDARD_MONO("mono")
|
||||
|
@ -98,6 +98,9 @@ public:
|
||||
DECLARE_WRITE8_MEMBER(bsmt_data_hi_w);
|
||||
DECLARE_WRITE8_MEMBER(bsmt_reg_w);
|
||||
DECLARE_READ8_MEMBER(special_r);
|
||||
|
||||
MC6845_BEGIN_UPDATE(crtc_begin_update);
|
||||
MC6845_UPDATE_ROW(crtc_update_row);
|
||||
};
|
||||
|
||||
|
||||
@ -140,50 +143,36 @@ void tapatune_state::machine_reset()
|
||||
*
|
||||
*************************************/
|
||||
|
||||
const rgb_t* get_pens(tapatune_state *state)
|
||||
MC6845_BEGIN_UPDATE( tapatune_state::crtc_begin_update )
|
||||
{
|
||||
// Create the pens
|
||||
for (UINT32 i = 0; i < 0x100; i++)
|
||||
{
|
||||
int r = state->m_paletteram[3 * i + 0];
|
||||
int g = state->m_paletteram[3 * i + 1];
|
||||
int b = state->m_paletteram[3 * i + 2];
|
||||
|
||||
int r = m_paletteram[3 * i + 0];
|
||||
int g = m_paletteram[3 * i + 1];
|
||||
int b = m_paletteram[3 * i + 2];
|
||||
|
||||
r = pal6bit(r);
|
||||
g = pal6bit(g);
|
||||
b = pal6bit(b);
|
||||
|
||||
state->m_pens[i] = rgb_t(r, g, b);
|
||||
|
||||
m_pens[i] = rgb_t(r, g, b);
|
||||
}
|
||||
|
||||
return state->m_pens;
|
||||
}
|
||||
|
||||
|
||||
static MC6845_BEGIN_UPDATE( begin_update )
|
||||
MC6845_UPDATE_ROW( tapatune_state::crtc_update_row )
|
||||
{
|
||||
tapatune_state *state = device->machine().driver_data<tapatune_state>();
|
||||
|
||||
// Create the pens
|
||||
get_pens(state);
|
||||
|
||||
return state->m_pens;
|
||||
}
|
||||
|
||||
|
||||
static MC6845_UPDATE_ROW( update_row )
|
||||
{
|
||||
tapatune_state *state = device->machine().driver_data<tapatune_state>();
|
||||
UINT32 *dest = &bitmap.pix32(y);
|
||||
rgb_t *pens = (rgb_t *)param;
|
||||
offs_t offs = (ma*2 + ra*0x40)*4;
|
||||
|
||||
UINT8 *videoram = reinterpret_cast<UINT8 *>(state->m_videoram.target());
|
||||
UINT8 *videoram = reinterpret_cast<UINT8 *>(m_videoram.target());
|
||||
|
||||
for (UINT32 x = 0; x < x_count*4; x++)
|
||||
{
|
||||
UINT8 pix = videoram[BYTE_XOR_BE(offs + x)];
|
||||
dest[2*x] = pens[((pix >> 4) & 0x0f)];
|
||||
dest[2*x + 1] = pens[(pix & 0x0f)];
|
||||
dest[2*x] = m_pens[((pix >> 4) & 0x0f)];
|
||||
dest[2*x + 1] = m_pens[(pix & 0x0f)];
|
||||
}
|
||||
}
|
||||
|
||||
@ -505,28 +494,6 @@ static INPUT_PORTS_START( tapatune )
|
||||
INPUT_PORTS_END
|
||||
|
||||
|
||||
/*************************************
|
||||
*
|
||||
* 6845 interface
|
||||
*
|
||||
*************************************/
|
||||
|
||||
static MC6845_INTERFACE( h46505_intf )
|
||||
{
|
||||
false, /* show border area */
|
||||
0,0,0,0, /* visarea adjustment */
|
||||
5, /* number of pixels per video memory address */
|
||||
begin_update,/* before pixel update callback */
|
||||
update_row, /* row update callback */
|
||||
NULL, /* after pixel update callback */
|
||||
DEVCB_NULL, /* callback for display state changes */
|
||||
DEVCB_NULL, /* callback for cursor state changes */
|
||||
DEVCB_NULL, /* HSYNC callback */
|
||||
DEVCB_DRIVER_LINE_MEMBER(tapatune_state,crtc_vsync), /* VSYNC callback */
|
||||
NULL /* update address callback */
|
||||
};
|
||||
|
||||
|
||||
/*************************************
|
||||
*
|
||||
* Machine driver
|
||||
@ -546,7 +513,14 @@ static MACHINE_CONFIG_START( tapatune, tapatune_state )
|
||||
MCFG_QUANTUM_PERFECT_CPU("maincpu")
|
||||
|
||||
MCFG_NVRAM_ADD_0FILL("nvram")
|
||||
MCFG_MC6845_ADD("crtc", H46505, "screen", XTAL_24MHz / 16, h46505_intf)
|
||||
|
||||
MCFG_MC6845_ADD("crtc", H46505, "screen", XTAL_24MHz / 16)
|
||||
MCFG_MC6845_SHOW_BORDER_AREA(false)
|
||||
MCFG_MC6845_CHAR_WIDTH(5)
|
||||
MCFG_MC6845_BEGIN_UPDATE_CB(tapatune_state, crtc_begin_update)
|
||||
MCFG_MC6845_UPDATE_ROW_CB(tapatune_state, crtc_update_row)
|
||||
MCFG_MC6845_OUT_VSYNC_CB(WRITELINE(tapatune_state, crtc_vsync))
|
||||
|
||||
MCFG_TICKET_DISPENSER_ADD("ticket", attotime::from_msec(100), TICKET_MOTOR_ACTIVE_LOW, TICKET_STATUS_ACTIVE_LOW)
|
||||
|
||||
/* video hardware */
|
||||
|
@ -545,25 +545,6 @@ static GFXDECODE_START( tmspoker )
|
||||
GFXDECODE_END
|
||||
|
||||
|
||||
/***********************
|
||||
* CRTC Interface *
|
||||
************************/
|
||||
|
||||
static MC6845_INTERFACE( mc6845_intf )
|
||||
{
|
||||
false, /* show border area */
|
||||
0,0,0,0, /* visarea adjustment */
|
||||
8, /* number of pixels per video memory address */
|
||||
NULL, /* before pixel update callback */
|
||||
NULL, /* row update callback */
|
||||
NULL, /* after pixel update callback */
|
||||
DEVCB_NULL, /* callback for display state changes */
|
||||
DEVCB_NULL, /* callback for cursor state changes */
|
||||
DEVCB_NULL, /* HSYNC callback */
|
||||
DEVCB_NULL, /* VSYNC callback */
|
||||
NULL /* update address callback */
|
||||
};
|
||||
|
||||
/*************************
|
||||
* Machine Drivers *
|
||||
*************************/
|
||||
@ -588,7 +569,9 @@ static MACHINE_CONFIG_START( tmspoker, tmspoker_state )
|
||||
MCFG_PALETTE_ADD("palette", 256)
|
||||
MCFG_PALETTE_INIT_OWNER(tmspoker_state, tmspoker)
|
||||
|
||||
MCFG_MC6845_ADD("crtc", MC6845, "screen", MASTER_CLOCK/4, mc6845_intf) /* guess */
|
||||
MCFG_MC6845_ADD("crtc", MC6845, "screen", MASTER_CLOCK/4) /* guess */
|
||||
MCFG_MC6845_SHOW_BORDER_AREA(false)
|
||||
MCFG_MC6845_CHAR_WIDTH(8)
|
||||
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
|
@ -405,26 +405,6 @@ INTERRUPT_GEN_MEMBER(truco_state::truco_interrupt)
|
||||
}
|
||||
|
||||
|
||||
/*******************************************
|
||||
* CRTC Interface *
|
||||
*******************************************/
|
||||
|
||||
static MC6845_INTERFACE( mc6845_intf )
|
||||
{
|
||||
false, /* show border area */
|
||||
0,0,0,0, /* visarea adjustment */
|
||||
4, /* number of pixels per video memory address */
|
||||
NULL, /* before pixel update callback */
|
||||
NULL, /* row update callback */
|
||||
NULL, /* after pixel update callback */
|
||||
DEVCB_NULL, /* callback for display state changes */
|
||||
DEVCB_NULL, /* callback for cursor state changes */
|
||||
DEVCB_NULL, /* HSYNC callback */
|
||||
DEVCB_NULL, /* VSYNC callback */
|
||||
NULL /* update address callback */
|
||||
};
|
||||
|
||||
|
||||
/*******************************************
|
||||
* Machine Driver *
|
||||
*******************************************/
|
||||
@ -458,7 +438,9 @@ static MACHINE_CONFIG_START( truco, truco_state )
|
||||
MCFG_PALETTE_ADD("palette", 16)
|
||||
MCFG_PALETTE_INIT_OWNER(truco_state, truco)
|
||||
|
||||
MCFG_MC6845_ADD("crtc", MC6845, "screen", CRTC_CLOCK, mc6845_intf) /* Identified as UM6845 */
|
||||
MCFG_MC6845_ADD("crtc", MC6845, "screen", CRTC_CLOCK) /* Identified as UM6845 */
|
||||
MCFG_MC6845_SHOW_BORDER_AREA(false)
|
||||
MCFG_MC6845_CHAR_WIDTH(4)
|
||||
|
||||
/* sound hardware */
|
||||
MCFG_SPEAKER_STANDARD_MONO("mono")
|
||||
|
@ -677,7 +677,9 @@ static MACHINE_CONFIG_START( twincobr, twincobr_state )
|
||||
MCFG_MACHINE_RESET_OVERRIDE(twincobr_state,twincobr)
|
||||
|
||||
/* video hardware */
|
||||
MCFG_MC6845_ADD("crtc", HD6845, "screen", XTAL_28MHz/8, twincobr_mc6845_intf) /* 3.5MHz measured on CLKin */
|
||||
MCFG_MC6845_ADD("crtc", HD6845, "screen", XTAL_28MHz/8) /* 3.5MHz measured on CLKin */
|
||||
MCFG_MC6845_SHOW_BORDER_AREA(false)
|
||||
MCFG_MC6845_CHAR_WIDTH(2)
|
||||
|
||||
MCFG_TOAPLAN_SCU_ADD("scu", "palette", 31, 15)
|
||||
|
||||
|
@ -212,22 +212,6 @@ static GFXDECODE_START( usgames )
|
||||
GFXDECODE_END
|
||||
|
||||
|
||||
static MC6845_INTERFACE( mc6845_intf )
|
||||
{
|
||||
false, /* show border area */
|
||||
0,0,0,0, /* visarea adjustment */
|
||||
8, /* number of pixels per video memory address */
|
||||
NULL, /* before pixel update callback */
|
||||
NULL, /* row update callback */
|
||||
NULL, /* after pixel update callback */
|
||||
DEVCB_NULL, /* callback for display state changes */
|
||||
DEVCB_NULL, /* callback for cursor state changes */
|
||||
DEVCB_NULL, /* HSYNC callback */
|
||||
DEVCB_NULL, /* VSYNC callback */
|
||||
NULL /* update address callback */
|
||||
};
|
||||
|
||||
|
||||
static MACHINE_CONFIG_START( usg32, usgames_state )
|
||||
|
||||
/* basic machine hardware */
|
||||
@ -250,7 +234,9 @@ static MACHINE_CONFIG_START( usg32, usgames_state )
|
||||
MCFG_PALETTE_ADD("palette", 2*256)
|
||||
MCFG_PALETTE_INIT_OWNER(usgames_state, usgames)
|
||||
|
||||
MCFG_MC6845_ADD("crtc", MC6845, "screen", XTAL_18MHz / 16, mc6845_intf)
|
||||
MCFG_MC6845_ADD("crtc", MC6845, "screen", XTAL_18MHz / 16)
|
||||
MCFG_MC6845_SHOW_BORDER_AREA(false)
|
||||
MCFG_MC6845_CHAR_WIDTH(8)
|
||||
|
||||
/* sound hardware */
|
||||
MCFG_SPEAKER_STANDARD_MONO("mono")
|
||||
|
@ -575,22 +575,6 @@ WRITE_LINE_MEMBER(vcombat_state::sound_update)
|
||||
m_soundcpu->set_input_line(M68K_IRQ_1, state ? ASSERT_LINE : CLEAR_LINE);
|
||||
}
|
||||
|
||||
static MC6845_INTERFACE( mc6845_intf )
|
||||
{
|
||||
false, /* show border area */
|
||||
0,0,0,0, /* visarea adjustment */
|
||||
16, /* number of pixels per video memory address */
|
||||
NULL, /* before pixel update callback */
|
||||
NULL, /* row update callback */
|
||||
NULL, /* after pixel update callback */
|
||||
DEVCB_NULL, /* callback for display state changes */
|
||||
DEVCB_NULL, /* callback for cursor state changes */
|
||||
DEVCB_DRIVER_LINE_MEMBER(vcombat_state,sound_update), /* HSYNC callback */
|
||||
DEVCB_NULL, /* VSYNC callback */
|
||||
NULL /* update address callback */
|
||||
};
|
||||
|
||||
|
||||
static MACHINE_CONFIG_START( vcombat, vcombat_state )
|
||||
MCFG_CPU_ADD("maincpu", M68000, XTAL_12MHz)
|
||||
MCFG_CPU_PROGRAM_MAP(main_map)
|
||||
@ -621,7 +605,7 @@ static MACHINE_CONFIG_START( vcombat, vcombat_state )
|
||||
MCFG_TLC34076_ADD("tlc34076", TLC34076_6_BIT)
|
||||
|
||||
/* Disabled for now as it can't handle multiple screens */
|
||||
// MCFG_MC6845_ADD("crtc", MC6845, "screen", 6000000 / 16, mc6845_intf)
|
||||
// MCFG_MC6845_ADD("crtc", MC6845, "screen", 6000000 / 16)
|
||||
MCFG_DEFAULT_LAYOUT(layout_dualhsxs)
|
||||
|
||||
MCFG_SCREEN_ADD("screen", RASTER)
|
||||
@ -657,7 +641,10 @@ static MACHINE_CONFIG_START( shadfgtr, vcombat_state )
|
||||
|
||||
MCFG_TLC34076_ADD("tlc34076", TLC34076_6_BIT)
|
||||
|
||||
MCFG_MC6845_ADD("crtc", MC6845, "screen", XTAL_20MHz / 4 / 16, mc6845_intf)
|
||||
MCFG_MC6845_ADD("crtc", MC6845, "screen", XTAL_20MHz / 4 / 16)
|
||||
MCFG_MC6845_SHOW_BORDER_AREA(false)
|
||||
MCFG_MC6845_CHAR_WIDTH(16)
|
||||
MCFG_MC6845_OUT_HSYNC_CB(WRITELINE(vcombat_state, sound_update))
|
||||
|
||||
MCFG_SCREEN_ADD("screen", RASTER)
|
||||
MCFG_SCREEN_RAW_PARAMS(XTAL_20MHz / 4, 320, 0, 256, 277, 0, 224)
|
||||
|
@ -235,21 +235,6 @@ static const UINT8 pal35[256] = {
|
||||
/******************** VIDEO SECTION ************************************/
|
||||
/***************************************************************************/
|
||||
|
||||
static MC6845_INTERFACE( mc6845_intf )
|
||||
{
|
||||
false, /* show border area */
|
||||
0,0,0,0, /* visarea adjustment */
|
||||
8, /* number of pixels per video memory address */
|
||||
NULL, /* before pixel update callback */
|
||||
NULL, /* row update callback */
|
||||
NULL, /* after pixel update callback */
|
||||
DEVCB_NULL, /* callback for display state changes */
|
||||
DEVCB_NULL, /* callback for cursor state changes */
|
||||
DEVCB_NULL, /* HSYNC callback */
|
||||
DEVCB_NULL, /* VSYNC callback */
|
||||
NULL /* update address callback */
|
||||
};
|
||||
|
||||
static const gfx_layout charlayout =
|
||||
{
|
||||
/* Todo , just for sample */
|
||||
@ -627,7 +612,9 @@ static MACHINE_CONFIG_START( nevada, nevada_state )
|
||||
MCFG_PALETTE_ADD("palette", 256)
|
||||
MCFG_PALETTE_INIT_OWNER(nevada_state, nevada)
|
||||
|
||||
MCFG_MC6845_ADD("crtc", MC6845, "screen", MC6845_CLOCK, mc6845_intf)
|
||||
MCFG_MC6845_ADD("crtc", MC6845, "screen", MC6845_CLOCK)
|
||||
MCFG_MC6845_SHOW_BORDER_AREA(false)
|
||||
MCFG_MC6845_CHAR_WIDTH(8)
|
||||
|
||||
// sound hardware
|
||||
MCFG_SPEAKER_STANDARD_MONO("mono")
|
||||
|
@ -394,7 +394,9 @@ static MACHINE_CONFIG_START( wardner, wardner_state )
|
||||
MCFG_QUANTUM_TIME(attotime::from_hz(6000)) /* 100 CPU slices per frame */
|
||||
|
||||
/* video hardware */
|
||||
MCFG_MC6845_ADD("crtc", HD6845, "screen", XTAL_14MHz/4, twincobr_mc6845_intf) /* 3.5MHz measured on CLKin */
|
||||
MCFG_MC6845_ADD("crtc", HD6845, "screen", XTAL_14MHz/4) /* 3.5MHz measured on CLKin */
|
||||
MCFG_MC6845_SHOW_BORDER_AREA(false)
|
||||
MCFG_MC6845_CHAR_WIDTH(2)
|
||||
|
||||
MCFG_TOAPLAN_SCU_ADD("scu", "palette", 32, 14)
|
||||
|
||||
|
@ -136,6 +136,8 @@ public:
|
||||
DECLARE_WRITE8_MEMBER(slither_coinctl_w);
|
||||
DECLARE_WRITE_LINE_MEMBER(qix_pia_dint);
|
||||
DECLARE_WRITE_LINE_MEMBER(qix_pia_sint);
|
||||
MC6845_BEGIN_UPDATE(crtc_begin_update);
|
||||
MC6845_UPDATE_ROW(crtc_update_row);
|
||||
void set_pen(int offs);
|
||||
int kram3_permut1(int idx, int value);
|
||||
int kram3_permut2(int tbl_index, int idx, const UINT8 *xor_table);
|
||||
|
@ -4,6 +4,7 @@
|
||||
|
||||
***************************************************************************/
|
||||
#include "sound/discrete.h"
|
||||
#include "video/mc6845.h"
|
||||
|
||||
#define NUM_PENS (8)
|
||||
|
||||
@ -39,6 +40,8 @@ public:
|
||||
DECLARE_WRITE8_MEMBER(spiders_audio_a_w);
|
||||
DECLARE_WRITE8_MEMBER(spiders_audio_b_w);
|
||||
DECLARE_WRITE8_MEMBER(spiders_audio_ctrl_w);
|
||||
MC6845_BEGIN_UPDATE(crtc_begin_update);
|
||||
MC6845_UPDATE_ROW(crtc_update_row);
|
||||
required_device<cpu_device> m_maincpu;
|
||||
required_device<cpu_device> m_audiocpu;
|
||||
};
|
||||
|
@ -128,5 +128,3 @@ public:
|
||||
required_device<screen_device> m_screen;
|
||||
required_device<palette_device> m_palette;
|
||||
};
|
||||
|
||||
extern const mc6845_interface twincobr_mc6845_intf;
|
||||
|
@ -97,39 +97,23 @@ TIMER_DEVICE_CALLBACK_MEMBER(decodmd_type2_device::dmd_firq)
|
||||
m_cpu->set_input_line(M6809_FIRQ_LINE, HOLD_LINE);
|
||||
}
|
||||
|
||||
MC6845_UPDATE_ROW( dmd_update_row )
|
||||
MC6845_UPDATE_ROW( decodmd_type2_device::crtc_update_row )
|
||||
{
|
||||
decodmd_type2_device *state = downcast<decodmd_type2_device *>(device->owner());
|
||||
UINT8* RAM = state->m_ram->pointer();
|
||||
UINT8 x,dot,intensity;
|
||||
UINT8 *RAM = m_ram->pointer();
|
||||
UINT8 intensity;
|
||||
UINT16 addr = (ma & 0xfc00) + ((ma & 0x100)<<2) + (ra << 4);
|
||||
|
||||
for(x=0;x<128;x+=8)
|
||||
for (int x = 0; x < 128; x += 8)
|
||||
{
|
||||
for(dot=0;dot<8;dot++)
|
||||
for (int dot = 0; dot < 8; dot++)
|
||||
{
|
||||
intensity = ((RAM[addr] >> (7-dot) & 0x01) << 1) | (RAM[addr+0x200] >> (7-dot) & 0x01);
|
||||
bitmap.pix32(y,x+dot) = rgb_t(0x3f*intensity,0x2a*intensity,0x00);
|
||||
intensity = ((RAM[addr] >> (7-dot) & 0x01) << 1) | (RAM[addr + 0x200] >> (7-dot) & 0x01);
|
||||
bitmap.pix32(y, x + dot) = rgb_t(0x3f * intensity, 0x2a * intensity, 0x00);
|
||||
}
|
||||
addr++;
|
||||
}
|
||||
}
|
||||
|
||||
MC6845_INTERFACE( decodmd2_6845_intf )
|
||||
{
|
||||
false, /* show border area */
|
||||
0,0,0,0, /* visarea adjustment */
|
||||
8, /* number of pixels per video memory address */
|
||||
NULL, /* begin_update */
|
||||
dmd_update_row, /* update_row */
|
||||
NULL, /* end_update */
|
||||
DEVCB_NULL, /* on_de_changed */
|
||||
DEVCB_NULL, /* on_cur_changed */
|
||||
DEVCB_NULL, /* on_hsync_changed */
|
||||
DEVCB_NULL, /* on_vsync_changed */
|
||||
NULL
|
||||
};
|
||||
|
||||
static ADDRESS_MAP_START( decodmd2_map, AS_PROGRAM, 8, decodmd_type2_device )
|
||||
AM_RANGE(0x0000, 0x2fff) AM_RAMBANK("dmdram")
|
||||
AM_RANGE(0x3000, 0x3000) AM_READWRITE(crtc_status_r,crtc_address_w)
|
||||
@ -149,7 +133,10 @@ static MACHINE_CONFIG_FRAGMENT( decodmd2 )
|
||||
|
||||
MCFG_TIMER_DRIVER_ADD_PERIODIC("firq_timer",decodmd_type2_device,dmd_firq,attotime::from_hz(80))
|
||||
|
||||
MCFG_MC6845_ADD("dmd6845",MC6845,NULL,XTAL_8MHz / 8,decodmd2_6845_intf) // TODO: confirm clock speed
|
||||
MCFG_MC6845_ADD("dmd6845", MC6845, NULL, XTAL_8MHz / 8) // TODO: confirm clock speed
|
||||
MCFG_MC6845_SHOW_BORDER_AREA(false)
|
||||
MCFG_MC6845_CHAR_WIDTH(8)
|
||||
MCFG_MC6845_UPDATE_ROW_CB(decodmd_type2_device, crtc_update_row)
|
||||
|
||||
MCFG_DEFAULT_LAYOUT(layout_lcd)
|
||||
|
||||
|
@ -42,6 +42,7 @@ public:
|
||||
DECLARE_READ8_MEMBER(status_r);
|
||||
DECLARE_WRITE8_MEMBER(status_w);
|
||||
TIMER_DEVICE_CALLBACK_MEMBER(dmd_firq);
|
||||
MC6845_UPDATE_ROW(crtc_update_row);
|
||||
|
||||
static void static_set_gfxregion(device_t &device, const char *tag);
|
||||
|
||||
|
@ -95,45 +95,29 @@ WRITE16_MEMBER( decodmd_type3_device::crtc_register_w )
|
||||
}
|
||||
}
|
||||
|
||||
MC6845_UPDATE_ROW( dmd64_update_row )
|
||||
MC6845_UPDATE_ROW( decodmd_type3_device::crtc_update_row )
|
||||
{
|
||||
decodmd_type3_device *state = downcast<decodmd_type3_device *>(device->owner());
|
||||
UINT8* RAM = state->m_ram->pointer();
|
||||
UINT8 x,dot,intensity;
|
||||
UINT8 *RAM = m_ram->pointer();
|
||||
UINT8 intensity;
|
||||
UINT16 addr = ((ma & 0x7ff) << 2) | ((ra & 0x02) << 12);
|
||||
addr += ((ra & 0x01) * 24);
|
||||
|
||||
for(x=0;x<192;x+=16)
|
||||
for (int x = 0; x < 192; x += 16)
|
||||
{
|
||||
for(dot=0;dot<8;dot++)
|
||||
for (int dot = 0; dot < 8; dot++)
|
||||
{
|
||||
intensity = ((RAM[addr+1] >> (7-dot) & 0x01) << 1) | (RAM[addr+0x801] >> (7-dot) & 0x01);
|
||||
bitmap.pix32(y,x+dot) = rgb_t(0x3f*intensity,0x2a*intensity,0x00);
|
||||
intensity = ((RAM[addr + 1] >> (7-dot) & 0x01) << 1) | (RAM[addr + 0x801] >> (7-dot) & 0x01);
|
||||
bitmap.pix32(y, x + dot) = rgb_t(0x3f * intensity, 0x2a * intensity, 0x00);
|
||||
}
|
||||
for(dot=8;dot<16;dot++)
|
||||
for (int dot = 8; dot < 16; dot++)
|
||||
{
|
||||
intensity = ((RAM[addr] >> (15-dot) & 0x01) << 1) | (RAM[addr+0x800] >> (15-dot) & 0x01);
|
||||
bitmap.pix32(y,x+dot) = rgb_t(0x3f*intensity,0x2a*intensity,0x00);
|
||||
intensity = ((RAM[addr] >> (15-dot) & 0x01) << 1) | (RAM[addr + 0x800] >> (15-dot) & 0x01);
|
||||
bitmap.pix32(y, x + dot) = rgb_t(0x3f * intensity, 0x2a * intensity, 0x00);
|
||||
}
|
||||
addr+=2;
|
||||
addr += 2;
|
||||
}
|
||||
}
|
||||
|
||||
MC6845_INTERFACE( decodmd3_6845_intf )
|
||||
{
|
||||
false, /* show border area */
|
||||
0,0,0,0, /* visarea adjustment */
|
||||
16, /* number of pixels per video memory address */
|
||||
NULL, /* begin_update */
|
||||
dmd64_update_row, /* update_row */
|
||||
NULL, /* end_update */
|
||||
DEVCB_NULL, /* on_de_changed */
|
||||
DEVCB_NULL, /* on_cur_changed */
|
||||
DEVCB_NULL, /* on_hsync_changed */
|
||||
DEVCB_NULL, /* on_vsync_changed */
|
||||
NULL
|
||||
};
|
||||
|
||||
static ADDRESS_MAP_START( decodmd3_map, AS_PROGRAM, 16, decodmd_type3_device )
|
||||
AM_RANGE(0x00000000, 0x000fffff) AM_ROMBANK("dmdrom")
|
||||
AM_RANGE(0x00800000, 0x0080ffff) AM_RAMBANK("dmdram")
|
||||
@ -151,7 +135,10 @@ static MACHINE_CONFIG_FRAGMENT( decodmd3 )
|
||||
|
||||
MCFG_TIMER_DRIVER_ADD_PERIODIC("irq_timer",decodmd_type3_device,dmd_irq,attotime::from_hz(150))
|
||||
|
||||
MCFG_MC6845_ADD("dmd6845",MC6845,NULL,XTAL_12MHz / 4,decodmd3_6845_intf) // TODO: confirm clock speed
|
||||
MCFG_MC6845_ADD("dmd6845", MC6845, NULL, XTAL_12MHz / 4) // TODO: confirm clock speed
|
||||
MCFG_MC6845_SHOW_BORDER_AREA(false)
|
||||
MCFG_MC6845_CHAR_WIDTH(16)
|
||||
MCFG_MC6845_UPDATE_ROW_CB(decodmd_type3_device, crtc_update_row)
|
||||
|
||||
MCFG_DEFAULT_LAYOUT(layout_lcd)
|
||||
|
||||
@ -163,7 +150,6 @@ static MACHINE_CONFIG_FRAGMENT( decodmd3 )
|
||||
|
||||
MCFG_RAM_ADD(RAM_TAG)
|
||||
MCFG_RAM_DEFAULT_SIZE("64K")
|
||||
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
machine_config_constructor decodmd_type3_device::device_mconfig_additions() const
|
||||
|
@ -34,6 +34,7 @@ public:
|
||||
DECLARE_WRITE16_MEMBER(crtc_register_w);
|
||||
DECLARE_READ16_MEMBER(crtc_status_r);
|
||||
TIMER_DEVICE_CALLBACK_MEMBER(dmd_irq);
|
||||
MC6845_UPDATE_ROW(crtc_update_row);
|
||||
|
||||
static void static_set_gfxregion(device_t &device, const char *tag);
|
||||
|
||||
|
@ -365,22 +365,6 @@ static GFXDECODE_START( madalien )
|
||||
GFXDECODE_END
|
||||
|
||||
|
||||
static MC6845_INTERFACE( mc6845_intf )
|
||||
{
|
||||
false, /* show border area */
|
||||
0,0,0,0, /* visarea adjustment */
|
||||
8, /* number of pixels per video memory address */
|
||||
NULL, /* before pixel update callback */
|
||||
NULL, /* row update callback */
|
||||
NULL, /* after pixel update callback */
|
||||
DEVCB_NULL, /* callback for display state changes */
|
||||
DEVCB_NULL, /* callback for cursor state changes */
|
||||
DEVCB_NULL, /* HSYNC callback */
|
||||
DEVCB_NULL, /* VSYNC callback */
|
||||
NULL /* update address callback */
|
||||
};
|
||||
|
||||
|
||||
MACHINE_CONFIG_FRAGMENT( madalien_video )
|
||||
MCFG_SCREEN_ADD("screen", RASTER)
|
||||
MCFG_SCREEN_RAW_PARAMS(PIXEL_CLOCK, 336, 0, 256, 288, 0, 256)
|
||||
@ -393,5 +377,7 @@ MACHINE_CONFIG_FRAGMENT( madalien_video )
|
||||
MCFG_PALETTE_INIT_OWNER(madalien_state,madalien)
|
||||
MCFG_VIDEO_START_OVERRIDE(madalien_state,madalien)
|
||||
|
||||
MCFG_MC6845_ADD("crtc", MC6845, "screen", PIXEL_CLOCK / 8, mc6845_intf)
|
||||
MCFG_MC6845_ADD("crtc", MC6845, "screen", PIXEL_CLOCK / 8)
|
||||
MCFG_MC6845_SHOW_BORDER_AREA(false)
|
||||
MCFG_MC6845_CHAR_WIDTH(8)
|
||||
MACHINE_CONFIG_END
|
||||
|
@ -12,19 +12,6 @@
|
||||
#include "cpu/m6809/m6809.h"
|
||||
|
||||
|
||||
|
||||
/*************************************
|
||||
*
|
||||
* Static function prototypes
|
||||
*
|
||||
*************************************/
|
||||
|
||||
static MC6845_BEGIN_UPDATE( begin_update );
|
||||
static MC6845_UPDATE_ROW( update_row );
|
||||
|
||||
|
||||
|
||||
|
||||
/*************************************
|
||||
*
|
||||
* Start
|
||||
@ -272,37 +259,29 @@ void qix_state::set_pen(int offs)
|
||||
*
|
||||
*************************************/
|
||||
|
||||
static MC6845_BEGIN_UPDATE( begin_update )
|
||||
MC6845_BEGIN_UPDATE( qix_state::crtc_begin_update )
|
||||
{
|
||||
qix_state *state = device->machine().driver_data<qix_state>();
|
||||
|
||||
#if 0
|
||||
// note the confusing bit order!
|
||||
popmessage("self test leds: %d%d %d%d%d%d",BIT(leds,7),BIT(leds,5),BIT(leds,6),BIT(leds,4),BIT(leds,2),BIT(leds,3));
|
||||
#endif
|
||||
|
||||
return &(state->m_pens)[state->m_palette_bank << 8];
|
||||
}
|
||||
|
||||
|
||||
static MC6845_UPDATE_ROW( update_row )
|
||||
MC6845_UPDATE_ROW( qix_state::crtc_update_row )
|
||||
{
|
||||
qix_state *state = device->machine().driver_data<qix_state>();
|
||||
UINT32 *dest = &bitmap.pix32(y);
|
||||
UINT16 x;
|
||||
|
||||
pen_t *pens = (pen_t *)param;
|
||||
pen_t *pens = &m_pens[m_palette_bank << 8];
|
||||
|
||||
/* the memory is hooked up to the MA, RA lines this way */
|
||||
offs_t offs = ((ma << 6) & 0xf800) | ((ra << 8) & 0x0700);
|
||||
offs_t offs_xor = state->m_flip ? 0xffff : 0;
|
||||
offs_t offs_xor = m_flip ? 0xffff : 0;
|
||||
|
||||
for (x = 0; x < x_count * 8; x++)
|
||||
dest[x] = pens[state->m_videoram[(offs + x) ^ offs_xor]];
|
||||
for (UINT16 x = 0; x < x_count * 8; x++)
|
||||
dest[x] = pens[m_videoram[(offs + x) ^ offs_xor]];
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*************************************
|
||||
*
|
||||
* Memory handlers
|
||||
@ -387,29 +366,19 @@ ADDRESS_MAP_END
|
||||
*
|
||||
*************************************/
|
||||
|
||||
static MC6845_INTERFACE( mc6845_intf )
|
||||
{
|
||||
false, /* show border area */
|
||||
0,0,0,0, /* visarea adjustment */
|
||||
8, /* number of pixels per video memory address */
|
||||
begin_update, /* before pixel update callback */
|
||||
update_row, /* row update callback */
|
||||
NULL, /* after pixel update callback */
|
||||
DEVCB_DRIVER_LINE_MEMBER(qix_state,display_enable_changed), /* callback for display state changes */
|
||||
DEVCB_NULL, /* callback for cursor state changes */
|
||||
DEVCB_NULL, /* HSYNC callback */
|
||||
DEVCB_DRIVER_LINE_MEMBER(qix_state,qix_vsync_changed), /* VSYNC callback */
|
||||
NULL /* update address callback */
|
||||
};
|
||||
|
||||
|
||||
MACHINE_CONFIG_FRAGMENT( qix_video )
|
||||
MCFG_CPU_ADD("videocpu", M6809, MAIN_CLOCK_OSC/4/4) /* 1.25 MHz */
|
||||
MCFG_CPU_PROGRAM_MAP(qix_video_map)
|
||||
|
||||
MCFG_VIDEO_START_OVERRIDE(qix_state,qix)
|
||||
|
||||
MCFG_MC6845_ADD("vid_u18", MC6845, "screen", QIX_CHARACTER_CLOCK, mc6845_intf)
|
||||
MCFG_MC6845_ADD("vid_u18", MC6845, "screen", QIX_CHARACTER_CLOCK)
|
||||
MCFG_MC6845_SHOW_BORDER_AREA(false)
|
||||
MCFG_MC6845_CHAR_WIDTH(8)
|
||||
MCFG_MC6845_BEGIN_UPDATE_CB(qix_state, crtc_begin_update)
|
||||
MCFG_MC6845_UPDATE_ROW_CB(qix_state, crtc_update_row)
|
||||
MCFG_MC6845_OUT_DE_CB(WRITELINE(qix_state, display_enable_changed))
|
||||
MCFG_MC6845_OUT_VSYNC_CB(WRITELINE(qix_state, qix_vsync_changed))
|
||||
|
||||
MCFG_SCREEN_ADD("screen", RASTER)
|
||||
MCFG_SCREEN_RAW_PARAMS(QIX_CHARACTER_CLOCK*8, 0x148, 0, 0x100, 0x111, 0, 0x100) /* from CRTC */
|
||||
|
@ -16,25 +16,6 @@
|
||||
#include "video/mc6845.h"
|
||||
#include "includes/twincobr.h"
|
||||
|
||||
|
||||
/* 6845 used for video sync signals only */
|
||||
MC6845_INTERFACE( twincobr_mc6845_intf )
|
||||
{
|
||||
false, /* show border area */
|
||||
0,0,0,0, /* visarea adjustment */
|
||||
2, /* number of pixels per video memory address */ /* Horizontal Display programmed to 160 characters */
|
||||
NULL, /* before pixel update callback */
|
||||
NULL, /* row update callback */
|
||||
NULL, /* after pixel update callback */
|
||||
DEVCB_NULL, /* callback for display state changes */
|
||||
DEVCB_NULL, /* callback for cursor state changes */
|
||||
DEVCB_NULL, /* HSYNC callback */
|
||||
DEVCB_NULL, /* VSYNC callback */
|
||||
NULL /* update address callback */
|
||||
};
|
||||
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
Callbacks for the TileMap code
|
||||
***************************************************************************/
|
||||
|
@ -126,25 +126,6 @@ MACHINE_RESET_MEMBER( a6809_state, a6809)
|
||||
m_via->write_pb7(0);
|
||||
}
|
||||
|
||||
static MC6845_UPDATE_ROW( a6809_update_row )
|
||||
{
|
||||
}
|
||||
|
||||
static MC6845_INTERFACE( a6809_crtc6845_interface )
|
||||
{
|
||||
false,
|
||||
0,0,0,0,
|
||||
12,
|
||||
NULL,
|
||||
a6809_update_row,
|
||||
NULL,
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL,
|
||||
NULL
|
||||
};
|
||||
|
||||
READ8_MEMBER( a6809_state::videoram_r )
|
||||
{
|
||||
offset += m_start_address;
|
||||
@ -266,7 +247,9 @@ static MACHINE_CONFIG_START( a6809, a6809_state )
|
||||
MCFG_VIA6522_CB2_HANDLER(WRITELINE(a6809_state, cass_w))
|
||||
MCFG_VIA6522_IRQ_HANDLER(DEVWRITELINE("maincpu", m6809e_device, irq_line))
|
||||
|
||||
MCFG_MC6845_ADD("mc6845", MC6845, "screen", XTAL_4MHz / 2, a6809_crtc6845_interface)
|
||||
MCFG_MC6845_ADD("mc6845", MC6845, "screen", XTAL_4MHz / 2)
|
||||
MCFG_MC6845_SHOW_BORDER_AREA(false)
|
||||
MCFG_MC6845_CHAR_WIDTH(12)
|
||||
|
||||
MCFG_DEVICE_ADD("saa5050", SAA5050, 6000000)
|
||||
MCFG_SAA5050_D_CALLBACK(READ8(a6809_state, videoram_r))
|
||||
|
@ -77,6 +77,7 @@ public:
|
||||
DECLARE_PALETTE_INIT(alphatro);
|
||||
TIMER_DEVICE_CALLBACK_MEMBER(timer_c);
|
||||
TIMER_DEVICE_CALLBACK_MEMBER(timer_p);
|
||||
MC6845_UPDATE_ROW(crtc_update_row);
|
||||
required_shared_ptr<UINT8> m_p_videoram;
|
||||
UINT8 *m_p_chargen;
|
||||
UINT8 m_flashcnt;
|
||||
@ -154,12 +155,11 @@ void alphatro_state::video_start()
|
||||
m_p_chargen = memregion("chargen")->base();
|
||||
}
|
||||
|
||||
static MC6845_UPDATE_ROW( alphatro_update_row )
|
||||
MC6845_UPDATE_ROW( alphatro_state::crtc_update_row )
|
||||
{
|
||||
alphatro_state *state = device->machine().driver_data<alphatro_state>();
|
||||
const rgb_t *pens = state->m_palette->palette()->entry_list_raw();
|
||||
bool palette = BIT(state->ioport("CONFIG")->read(), 5);
|
||||
if (y==0) state->m_flashcnt++;
|
||||
const rgb_t *pens = m_palette->palette()->entry_list_raw();
|
||||
bool palette = BIT(ioport("CONFIG")->read(), 5);
|
||||
if (y==0) m_flashcnt++;
|
||||
bool inv;
|
||||
UINT8 chr,gfx,attr,bg,fg;
|
||||
UINT16 mem,x;
|
||||
@ -169,8 +169,8 @@ static MC6845_UPDATE_ROW( alphatro_update_row )
|
||||
{
|
||||
inv = (x == cursor_x);
|
||||
mem = (ma + x) & 0x7ff;
|
||||
chr = state->m_p_videoram[mem];
|
||||
attr = state->m_p_videoram[mem | 0x800];
|
||||
chr = m_p_videoram[mem];
|
||||
attr = m_p_videoram[mem | 0x800];
|
||||
fg = (palette) ? 8 : attr & 7; // amber or RGB
|
||||
bg = (palette) ? 0 : (attr & 0x38) >> 3;
|
||||
|
||||
@ -180,13 +180,13 @@ static MC6845_UPDATE_ROW( alphatro_update_row )
|
||||
chr &= 0x7f;
|
||||
}
|
||||
|
||||
if (BIT(attr, 6) & BIT(state->m_flashcnt, 4)) // flashing
|
||||
if (BIT(attr, 6) & BIT(m_flashcnt, 4)) // flashing
|
||||
{
|
||||
inv ^= 1;
|
||||
}
|
||||
|
||||
/* get pattern of pixels for that character scanline */
|
||||
gfx = state->m_p_chargen[(chr<<4) | ra];
|
||||
gfx = m_p_chargen[(chr<<4) | ra];
|
||||
|
||||
if (inv)
|
||||
{
|
||||
@ -414,21 +414,6 @@ PALETTE_INIT_MEMBER(alphatro_state, alphatro)
|
||||
}
|
||||
|
||||
|
||||
static MC6845_INTERFACE( alphatro_crtc6845_interface )
|
||||
{
|
||||
false,
|
||||
0,0,0,0,
|
||||
8,
|
||||
NULL,
|
||||
alphatro_update_row,
|
||||
NULL,
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL,
|
||||
NULL
|
||||
};
|
||||
|
||||
TIMER_DEVICE_CALLBACK_MEMBER(alphatro_state::timer_c)
|
||||
{
|
||||
m_cass_data[3]++;
|
||||
@ -494,7 +479,10 @@ static MACHINE_CONFIG_START( alphatro, alphatro_state )
|
||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
|
||||
|
||||
/* Devices */
|
||||
MCFG_MC6845_ADD("crtc", MC6845, "screen", XTAL_12_288MHz / 8, alphatro_crtc6845_interface) // clk unknown
|
||||
MCFG_MC6845_ADD("crtc", MC6845, "screen", XTAL_12_288MHz / 8) // clk unknown
|
||||
MCFG_MC6845_SHOW_BORDER_AREA(false)
|
||||
MCFG_MC6845_CHAR_WIDTH(8)
|
||||
MCFG_MC6845_UPDATE_ROW_CB(alphatro_state, crtc_update_row)
|
||||
|
||||
MCFG_DEVICE_ADD("usart", I8251, 0)
|
||||
MCFG_I8251_TXD_HANDLER(WRITELINE(alphatro_state, txdata_callback))
|
||||
|
@ -875,7 +875,12 @@ static MACHINE_CONFIG_START( amstrad_nofdc, amstrad_state )
|
||||
MCFG_PALETTE_ADD("palette", 32)
|
||||
MCFG_PALETTE_INIT_OWNER(amstrad_state,amstrad_cpc)
|
||||
|
||||
MCFG_MC6845_ADD( "mc6845", MC6845, NULL, XTAL_16MHz / 16, amstrad_mc6845_intf )
|
||||
MCFG_MC6845_ADD("mc6845", MC6845, NULL, XTAL_16MHz / 16)
|
||||
MCFG_MC6845_SHOW_BORDER_AREA(false)
|
||||
MCFG_MC6845_CHAR_WIDTH(16)
|
||||
MCFG_MC6845_OUT_DE_CB(WRITELINE(amstrad_state, amstrad_de_changed))
|
||||
MCFG_MC6845_OUT_HSYNC_CB(WRITELINE(amstrad_state, amstrad_hsync_changed))
|
||||
MCFG_MC6845_OUT_VSYNC_CB(WRITELINE(amstrad_state, amstrad_vsync_changed))
|
||||
|
||||
MCFG_VIDEO_START_OVERRIDE(amstrad_state,amstrad)
|
||||
|
||||
@ -961,7 +966,12 @@ static MACHINE_CONFIG_START( cpcplus, amstrad_state )
|
||||
MCFG_PALETTE_ADD("palette", 4096)
|
||||
MCFG_PALETTE_INIT_OWNER(amstrad_state,amstrad_plus)
|
||||
|
||||
MCFG_MC6845_ADD( "mc6845", MC6845, NULL, XTAL_40MHz / 40, amstrad_plus_mc6845_intf )
|
||||
MCFG_MC6845_ADD("mc6845", MC6845, NULL, XTAL_40MHz / 40)
|
||||
MCFG_MC6845_SHOW_BORDER_AREA(false)
|
||||
MCFG_MC6845_CHAR_WIDTH(16)
|
||||
MCFG_MC6845_OUT_DE_CB(WRITELINE(amstrad_state, amstrad_plus_de_changed))
|
||||
MCFG_MC6845_OUT_HSYNC_CB(WRITELINE(amstrad_state, amstrad_plus_hsync_changed))
|
||||
MCFG_MC6845_OUT_VSYNC_CB(WRITELINE(amstrad_state, amstrad_plus_vsync_changed))
|
||||
|
||||
MCFG_VIDEO_START_OVERRIDE(amstrad_state,amstrad)
|
||||
|
||||
@ -1031,7 +1041,12 @@ static MACHINE_CONFIG_START( gx4000, amstrad_state )
|
||||
MCFG_PALETTE_ADD("palette", 4096)
|
||||
MCFG_PALETTE_INIT_OWNER(amstrad_state,amstrad_plus)
|
||||
|
||||
MCFG_MC6845_ADD( "mc6845", MC6845, NULL, XTAL_40MHz / 40, amstrad_plus_mc6845_intf )
|
||||
MCFG_MC6845_ADD("mc6845", MC6845, NULL, XTAL_40MHz / 40)
|
||||
MCFG_MC6845_SHOW_BORDER_AREA(false)
|
||||
MCFG_MC6845_CHAR_WIDTH(16)
|
||||
MCFG_MC6845_OUT_DE_CB(WRITELINE(amstrad_state, amstrad_plus_de_changed))
|
||||
MCFG_MC6845_OUT_HSYNC_CB(WRITELINE(amstrad_state, amstrad_plus_hsync_changed))
|
||||
MCFG_MC6845_OUT_VSYNC_CB(WRITELINE(amstrad_state, amstrad_plus_vsync_changed))
|
||||
|
||||
MCFG_VIDEO_START_OVERRIDE(amstrad_state,amstrad)
|
||||
|
||||
|
@ -125,6 +125,7 @@ public:
|
||||
DECLARE_WRITE8_MEMBER(port0d_w);
|
||||
DECLARE_WRITE8_MEMBER(kbd_put);
|
||||
INTERRUPT_GEN_MEMBER(irq_vs);
|
||||
MC6845_UPDATE_ROW(crtc_update_row);
|
||||
UINT8 *m_p_videoram;
|
||||
const UINT8 *m_p_chargen;
|
||||
required_device<palette_device> m_palette;
|
||||
@ -320,10 +321,9 @@ static GFXDECODE_START( amust )
|
||||
GFXDECODE_ENTRY( "chargen", 0x0000, amust_charlayout, 0, 1 )
|
||||
GFXDECODE_END
|
||||
|
||||
MC6845_UPDATE_ROW( amust_update_row )
|
||||
MC6845_UPDATE_ROW( amust_state::crtc_update_row )
|
||||
{
|
||||
amust_state *state = device->machine().driver_data<amust_state>();
|
||||
const rgb_t *palette = state->m_palette->palette()->entry_list_raw();
|
||||
const rgb_t *palette = m_palette->palette()->entry_list_raw();
|
||||
UINT8 chr,gfx,inv;
|
||||
UINT16 mem,x;
|
||||
UINT32 *p = &bitmap.pix32(y);
|
||||
@ -332,9 +332,9 @@ MC6845_UPDATE_ROW( amust_update_row )
|
||||
{
|
||||
inv = (x == cursor_x) ? 0xff : 0;
|
||||
mem = (ma + x) & 0x7ff;
|
||||
chr = state->m_p_videoram[mem];
|
||||
chr = m_p_videoram[mem];
|
||||
if (ra < 8)
|
||||
gfx = state->m_p_chargen[(chr<<3) | ra] ^ inv;
|
||||
gfx = m_p_chargen[(chr<<3) | ra] ^ inv;
|
||||
else
|
||||
gfx = inv;
|
||||
|
||||
@ -350,21 +350,6 @@ MC6845_UPDATE_ROW( amust_update_row )
|
||||
}
|
||||
}
|
||||
|
||||
static MC6845_INTERFACE( amust_crtc )
|
||||
{
|
||||
false,
|
||||
0,0,0,0, /* visarea adjustment */
|
||||
8, /* number of dots per character */
|
||||
NULL,
|
||||
amust_update_row, /* handler to display a scanline */
|
||||
NULL,
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL,
|
||||
NULL
|
||||
};
|
||||
|
||||
MACHINE_RESET_MEMBER( amust_state, amust )
|
||||
{
|
||||
m_p_chargen = memregion("chargen")->base();
|
||||
@ -415,7 +400,11 @@ static MACHINE_CONFIG_START( amust, amust_state )
|
||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
|
||||
|
||||
/* Devices */
|
||||
MCFG_MC6845_ADD("crtc", H46505, "screen", XTAL_14_31818MHz / 8, amust_crtc)
|
||||
MCFG_MC6845_ADD("crtc", H46505, "screen", XTAL_14_31818MHz / 8)
|
||||
MCFG_MC6845_SHOW_BORDER_AREA(false)
|
||||
MCFG_MC6845_CHAR_WIDTH(8)
|
||||
MCFG_MC6845_UPDATE_ROW_CB(amust_state, crtc_update_row)
|
||||
|
||||
MCFG_DEVICE_ADD("keybd", GENERIC_KEYBOARD, 0)
|
||||
MCFG_GENERIC_KEYBOARD_CB(WRITE8(amust_state, kbd_put))
|
||||
MCFG_UPD765A_ADD("fdc", false, true)
|
||||
|
@ -132,6 +132,7 @@ public:
|
||||
DECLARE_WRITE8_MEMBER( p3_write );
|
||||
TIMER_DEVICE_CALLBACK_MEMBER(cass_timer);
|
||||
DECLARE_DRIVER_INIT(applix);
|
||||
MC6845_UPDATE_ROW(crtc_update_row);
|
||||
UINT8 m_video_latch;
|
||||
UINT8 m_pa;
|
||||
virtual void machine_reset();
|
||||
@ -771,28 +772,27 @@ void applix_state::video_start()
|
||||
{
|
||||
}
|
||||
|
||||
static MC6845_UPDATE_ROW( applix_update_row )
|
||||
MC6845_UPDATE_ROW( applix_state::crtc_update_row )
|
||||
{
|
||||
// The display is bitmapped. 2 modes are supported here, 320x200x16 and 640x200x4.
|
||||
// Need to display a border colour.
|
||||
// There is a monochrome mode, but no info found as yet.
|
||||
applix_state *state = device->machine().driver_data<applix_state>();
|
||||
const rgb_t *palette = state->m_palette->palette()->entry_list_raw();
|
||||
const rgb_t *palette = m_palette->palette()->entry_list_raw();
|
||||
UINT8 i;
|
||||
UINT16 chr,x;
|
||||
UINT32 mem, vidbase = (state->m_video_latch & 15) << 14, *p = &bitmap.pix32(y);
|
||||
UINT32 mem, vidbase = (m_video_latch & 15) << 14, *p = &bitmap.pix32(y);
|
||||
|
||||
for (x = 0; x < x_count; x++)
|
||||
{
|
||||
mem = vidbase + ma + x + (ra<<12);
|
||||
chr = state->m_base[mem];
|
||||
chr = m_base[mem];
|
||||
|
||||
if (BIT(state->m_pa, 3))
|
||||
if (BIT(m_pa, 3))
|
||||
// 640 x 200 x 4of16 mode
|
||||
{
|
||||
for (i = 0; i < 8; i++)
|
||||
{
|
||||
*p++ = palette[state->m_palette_latch[chr>>14]];
|
||||
*p++ = palette[m_palette_latch[chr>>14]];
|
||||
chr <<= 2;
|
||||
}
|
||||
}
|
||||
@ -809,21 +809,6 @@ static MC6845_UPDATE_ROW( applix_update_row )
|
||||
}
|
||||
}
|
||||
|
||||
static MC6845_INTERFACE( applix_crtc )
|
||||
{
|
||||
false, // should show a border
|
||||
0,0,0,0, /* visarea adjustment */
|
||||
8, /* number of dots per character */
|
||||
NULL,
|
||||
applix_update_row, /* handler to display a scanline */
|
||||
NULL,
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL,
|
||||
DEVCB_DRIVER_LINE_MEMBER(applix_state, vsync_w),
|
||||
NULL
|
||||
};
|
||||
|
||||
WRITE_LINE_MEMBER( applix_state::vsync_w )
|
||||
{
|
||||
m_via->write_ca2(state);
|
||||
@ -886,7 +871,12 @@ static MACHINE_CONFIG_START( applix, applix_state )
|
||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.50)
|
||||
|
||||
/* Devices */
|
||||
MCFG_MC6845_ADD("crtc", MC6845, "screen", 1875000, applix_crtc) // 6545
|
||||
MCFG_MC6845_ADD("crtc", MC6845, "screen", 1875000) // 6545
|
||||
MCFG_MC6845_SHOW_BORDER_AREA(false)
|
||||
MCFG_MC6845_CHAR_WIDTH(8)
|
||||
MCFG_MC6845_UPDATE_ROW_CB(applix_state, crtc_update_row)
|
||||
MCFG_MC6845_OUT_VSYNC_CB(WRITELINE(applix_state, vsync_w))
|
||||
|
||||
MCFG_DEVICE_ADD("via6522", VIA6522, 0)
|
||||
MCFG_VIA6522_READPB_HANDLER(READ8(applix_state, applix_pb_r))
|
||||
// in CB1 kbd clk
|
||||
|
@ -92,6 +92,8 @@ public:
|
||||
DECLARE_WRITE_LINE_MEMBER( data_selector_dtr_w ) { m_data_selector_dtr = state; };
|
||||
DECLARE_WRITE_LINE_MEMBER( data_selector_rts_w ) { m_data_selector_rts = state; };
|
||||
|
||||
MC6845_UPDATE_ROW( crtc_update_row );
|
||||
|
||||
virtual void machine_start();
|
||||
|
||||
int m_data_selector_dtr;
|
||||
@ -224,19 +226,18 @@ UINT32 apricot_state::screen_update_apricot(screen_device &screen, bitmap_rgb32
|
||||
return 0;
|
||||
}
|
||||
|
||||
static MC6845_UPDATE_ROW( apricot_update_row )
|
||||
MC6845_UPDATE_ROW( apricot_state::crtc_update_row )
|
||||
{
|
||||
apricot_state *state = device->machine().driver_data<apricot_state>();
|
||||
UINT8 *ram = state->m_ram->pointer();
|
||||
const pen_t *pen = state->m_palette->pens();
|
||||
UINT8 *ram = m_ram->pointer();
|
||||
const pen_t *pen = m_palette->pens();
|
||||
int i, x;
|
||||
|
||||
if (state->m_video_mode)
|
||||
if (m_video_mode)
|
||||
{
|
||||
// text mode
|
||||
for (i = 0; i < x_count; i++)
|
||||
{
|
||||
UINT16 code = state->m_screen_buffer[(ma + i) & 0x7ff];
|
||||
UINT16 code = m_screen_buffer[(ma + i) & 0x7ff];
|
||||
UINT16 offset = ((code & 0x7ff) << 5) | (ra << 1);
|
||||
UINT16 data = ram[offset + 1] << 8 | ram[offset];
|
||||
int fill = 0;
|
||||
@ -260,22 +261,6 @@ static MC6845_UPDATE_ROW( apricot_update_row )
|
||||
}
|
||||
}
|
||||
|
||||
static MC6845_INTERFACE( apricot_mc6845_intf )
|
||||
{
|
||||
false,
|
||||
0,0,0,0,
|
||||
10,
|
||||
NULL,
|
||||
apricot_update_row,
|
||||
NULL,
|
||||
DEVCB_DRIVER_LINE_MEMBER(apricot_state, apricot_mc6845_de),
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL,
|
||||
NULL
|
||||
};
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// MACHINE EMULATION
|
||||
//**************************************************************************
|
||||
@ -346,7 +331,11 @@ static MACHINE_CONFIG_START( apricot, apricot_state )
|
||||
|
||||
MCFG_PALETTE_ADD_MONOCHROME_GREEN_HIGHLIGHT("palette")
|
||||
|
||||
MCFG_MC6845_ADD("ic30", MC6845, "screen", XTAL_15MHz / 10, apricot_mc6845_intf)
|
||||
MCFG_MC6845_ADD("ic30", MC6845, "screen", XTAL_15MHz / 10)
|
||||
MCFG_MC6845_SHOW_BORDER_AREA(false)
|
||||
MCFG_MC6845_CHAR_WIDTH(10)
|
||||
MCFG_MC6845_UPDATE_ROW_CB(apricot_state, crtc_update_row)
|
||||
MCFG_MC6845_OUT_DE_CB(WRITELINE(apricot_state, apricot_mc6845_de))
|
||||
|
||||
// sound hardware
|
||||
MCFG_SPEAKER_STANDARD_MONO("mono")
|
||||
|
@ -50,31 +50,6 @@ enum
|
||||
// VIDEO
|
||||
//**************************************************************************
|
||||
|
||||
//-------------------------------------------------
|
||||
// mc6845_interface crtc_intf
|
||||
//-------------------------------------------------
|
||||
|
||||
static MC6845_UPDATE_ROW( fp_update_row )
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
static MC6845_INTERFACE( crtc_intf )
|
||||
{
|
||||
false,
|
||||
0,0,0,0,
|
||||
8,
|
||||
NULL,
|
||||
fp_update_row,
|
||||
NULL,
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL,
|
||||
NULL
|
||||
};
|
||||
|
||||
|
||||
void fp_state::video_start()
|
||||
{
|
||||
// allocate memory
|
||||
@ -529,7 +504,10 @@ static MACHINE_CONFIG_START( fp, fp_state )
|
||||
|
||||
MCFG_PALETTE_ADD("palette", 16)
|
||||
MCFG_GFXDECODE_ADD("gfxdecode", "palette", act_f1)
|
||||
MCFG_MC6845_ADD(MC6845_TAG, MC6845, SCREEN_CRT_TAG, 4000000, crtc_intf)
|
||||
|
||||
MCFG_MC6845_ADD(MC6845_TAG, MC6845, SCREEN_CRT_TAG, 4000000)
|
||||
MCFG_MC6845_SHOW_BORDER_AREA(false)
|
||||
MCFG_MC6845_CHAR_WIDTH(8)
|
||||
|
||||
// sound hardware
|
||||
MCFG_SPEAKER_STANDARD_MONO("mono")
|
||||
|
@ -255,22 +255,6 @@ void b16_state::machine_reset()
|
||||
}
|
||||
|
||||
|
||||
|
||||
static MC6845_INTERFACE( mc6845_intf )
|
||||
{
|
||||
false, /* show border area */
|
||||
0,0,0,0, /* visarea adjustment */
|
||||
8, /* number of pixels per video memory address */
|
||||
NULL, /* before pixel update callback */
|
||||
NULL, /* row update callback */
|
||||
NULL, /* after pixel update callback */
|
||||
DEVCB_NULL, /* callback for display state changes */
|
||||
DEVCB_NULL, /* callback for cursor state changes */
|
||||
DEVCB_NULL, /* HSYNC callback */
|
||||
DEVCB_NULL, /* VSYNC callback */
|
||||
NULL /* update address callback */
|
||||
};
|
||||
|
||||
READ8_MEMBER(b16_state::memory_read_byte)
|
||||
{
|
||||
address_space& prog_space = m_maincpu->space(AS_PROGRAM);
|
||||
@ -300,7 +284,10 @@ static MACHINE_CONFIG_START( b16, b16_state )
|
||||
MCFG_SCREEN_VISIBLE_AREA(0, 640-1, 0, 400-1)
|
||||
MCFG_SCREEN_PALETTE("palette")
|
||||
|
||||
MCFG_MC6845_ADD("crtc", H46505, "screen", XTAL_14_31818MHz/5, mc6845_intf) /* unknown clock, hand tuned to get ~60 fps */
|
||||
MCFG_MC6845_ADD("crtc", H46505, "screen", XTAL_14_31818MHz/5) /* unknown clock, hand tuned to get ~60 fps */
|
||||
MCFG_MC6845_SHOW_BORDER_AREA(false)
|
||||
MCFG_MC6845_CHAR_WIDTH(8)
|
||||
|
||||
MCFG_DEVICE_ADD("8237dma", AM9517A, XTAL_14_31818MHz/2)
|
||||
MCFG_I8237_IN_MEMR_CB(READ8(b16_state, memory_read_byte))
|
||||
MCFG_I8237_OUT_MEMW_CB(WRITE8(b16_state, memory_write_byte))
|
||||
|
@ -688,7 +688,12 @@ static MACHINE_CONFIG_START( bbca, bbc_state )
|
||||
MCFG_SAA5050_SCREEN_SIZE(40, 24, 40)
|
||||
|
||||
/* crtc */
|
||||
MCFG_MC6845_ADD("mc6845", MC6845, "screen", 2000000, bbc_mc6845_intf)
|
||||
MCFG_MC6845_ADD("mc6845", MC6845, "screen", 2000000)
|
||||
MCFG_MC6845_SHOW_BORDER_AREA(false)
|
||||
MCFG_MC6845_CHAR_WIDTH(8)
|
||||
MCFG_MC6845_UPDATE_ROW_CB(bbc_state, crtc_update_row)
|
||||
MCFG_MC6845_OUT_VSYNC_CB(WRITELINE(bbc_state, bbc_vsync))
|
||||
|
||||
MCFG_VIDEO_START_OVERRIDE(bbc_state, bbca)
|
||||
|
||||
MCFG_DEFAULT_LAYOUT(layout_bbc)
|
||||
@ -909,7 +914,12 @@ static MACHINE_CONFIG_START( bbcm, bbc_state )
|
||||
MCFG_SAA5050_SCREEN_SIZE(40, 24, 40)
|
||||
|
||||
/* crtc */
|
||||
MCFG_MC6845_ADD("mc6845", MC6845, "screen", 2000000, bbc_mc6845_intf)
|
||||
MCFG_MC6845_ADD("mc6845", MC6845, "screen", 2000000)
|
||||
MCFG_MC6845_SHOW_BORDER_AREA(false)
|
||||
MCFG_MC6845_CHAR_WIDTH(8)
|
||||
MCFG_MC6845_UPDATE_ROW_CB(bbc_state, crtc_update_row)
|
||||
MCFG_MC6845_OUT_VSYNC_CB(WRITELINE(bbc_state, bbc_vsync))
|
||||
|
||||
MCFG_VIDEO_START_OVERRIDE(bbc_state, bbcm)
|
||||
|
||||
/* sound hardware */
|
||||
|
@ -135,6 +135,7 @@ public:
|
||||
DECLARE_WRITE8_MEMBER(memory_write_byte);
|
||||
DECLARE_READ8_MEMBER(io_read_byte);
|
||||
DECLARE_WRITE8_MEMBER(io_write_byte);
|
||||
MC6845_UPDATE_ROW(crtc_update_row);
|
||||
UINT8 *m_p_chargen; /* character ROM */
|
||||
UINT8 *m_p_videoram; /* Video RAM */
|
||||
UINT8 *m_p_attribram; /* Attribute RAM */
|
||||
@ -511,10 +512,9 @@ static GFXDECODE_START( bigbord2 )
|
||||
GFXDECODE_ENTRY( "chargen", 0x0000, bigbord2_charlayout, 0, 1 )
|
||||
GFXDECODE_END
|
||||
|
||||
MC6845_UPDATE_ROW( bigbord2_update_row )
|
||||
MC6845_UPDATE_ROW( bigbord2_state::crtc_update_row )
|
||||
{
|
||||
bigbord2_state *state = device->machine().driver_data<bigbord2_state>();
|
||||
const rgb_t *palette = state->m_palette->palette()->entry_list_raw();
|
||||
const rgb_t *palette = m_palette->palette()->entry_list_raw();
|
||||
UINT8 chr,gfx,inv;
|
||||
UINT16 mem,x;
|
||||
UINT32 *p = &bitmap.pix32(y);
|
||||
@ -523,11 +523,11 @@ MC6845_UPDATE_ROW( bigbord2_update_row )
|
||||
{
|
||||
inv=0;
|
||||
mem = (ma + x) & 0x7ff;
|
||||
if (BIT(state->m_p_attribram[mem], 7)) inv^=0xff;
|
||||
chr = state->m_p_videoram[mem];
|
||||
if (BIT(m_p_attribram[mem], 7)) inv^=0xff;
|
||||
chr = m_p_videoram[mem];
|
||||
|
||||
/* get pattern of pixels for that character scanline */
|
||||
gfx = state->m_p_chargen[(chr<<4) | ra ] ^ inv;
|
||||
gfx = m_p_chargen[(chr<<4) | ra ] ^ inv;
|
||||
|
||||
/* Display a scanline of a character */
|
||||
*p++ = palette[BIT( gfx, 7 )];
|
||||
@ -541,22 +541,6 @@ MC6845_UPDATE_ROW( bigbord2_update_row )
|
||||
}
|
||||
}
|
||||
|
||||
static MC6845_INTERFACE( bigbord2_crtc )
|
||||
{
|
||||
false,
|
||||
0,0,0,0, /* visarea adjustment */
|
||||
8, /* number of dots per character */
|
||||
NULL,
|
||||
bigbord2_update_row, /* handler to display a scanline */
|
||||
NULL,
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL,
|
||||
DEVCB_DRIVER_LINE_MEMBER(bigbord2_state, frame), // vsync
|
||||
NULL
|
||||
};
|
||||
|
||||
|
||||
/* Machine Drivers */
|
||||
|
||||
#define MAIN_CLOCK XTAL_8MHz / 2
|
||||
@ -603,7 +587,13 @@ static MACHINE_CONFIG_START( bigbord2, bigbord2_state )
|
||||
MCFG_MB8877x_ADD("fdc", XTAL_16MHz / 16)
|
||||
MCFG_FLOPPY_DRIVE_ADD("fdc:0", bigbord2_floppies, "525dd", floppy_image_device::default_floppy_formats)
|
||||
MCFG_FLOPPY_DRIVE_ADD("fdc:1", bigbord2_floppies, "525dd", floppy_image_device::default_floppy_formats)
|
||||
MCFG_MC6845_ADD("crtc", MC6845, SCREEN_TAG, XTAL_16MHz / 8, bigbord2_crtc)
|
||||
|
||||
MCFG_MC6845_ADD("crtc", MC6845, SCREEN_TAG, XTAL_16MHz / 8)
|
||||
MCFG_MC6845_SHOW_BORDER_AREA(false)
|
||||
MCFG_MC6845_CHAR_WIDTH(8)
|
||||
MCFG_MC6845_UPDATE_ROW_CB(bigbord2_state, crtc_update_row)
|
||||
MCFG_MC6845_OUT_VSYNC_CB(WRITELINE(bigbord2_state, frame))
|
||||
|
||||
MCFG_DEVICE_ADD(KEYBOARD_TAG, GENERIC_KEYBOARD, 0)
|
||||
MCFG_GENERIC_KEYBOARD_CB(WRITE8(bigbord2_state, bigbord2_kbd_put))
|
||||
|
||||
|
@ -112,6 +112,8 @@ public:
|
||||
DECLARE_READ8_MEMBER(bml3_f000_r); DECLARE_WRITE8_MEMBER(bml3_f000_w);
|
||||
DECLARE_READ8_MEMBER(bml3_fff0_r); DECLARE_WRITE8_MEMBER(bml3_fff0_w);
|
||||
|
||||
MC6845_UPDATE_ROW(crtc_update_row);
|
||||
|
||||
UINT8 *m_p_videoram;
|
||||
UINT8 *m_p_chargen;
|
||||
UINT8 m_hres_reg;
|
||||
@ -589,10 +591,9 @@ static INPUT_PORTS_START( bml3 )
|
||||
PORT_BIT(0xffe00000,IP_ACTIVE_HIGH,IPT_UNKNOWN)
|
||||
INPUT_PORTS_END
|
||||
|
||||
static MC6845_UPDATE_ROW( update_row )
|
||||
MC6845_UPDATE_ROW( bml3_state::crtc_update_row )
|
||||
{
|
||||
bml3_state *state = device->machine().driver_data<bml3_state>();
|
||||
const rgb_t *palette = state->m_palette->palette()->entry_list_raw();
|
||||
const rgb_t *palette = m_palette->palette()->entry_list_raw();
|
||||
// The MB-6890 has a 5-bit colour RAM region. The meaning of the bits are:
|
||||
// 0: blue
|
||||
// 1: red
|
||||
@ -604,9 +605,9 @@ static MC6845_UPDATE_ROW( update_row )
|
||||
bool reverse=0,graphic=0,lowres=0;
|
||||
UINT16 mem=0;
|
||||
|
||||
interlace = (state->m_crtc_vreg[8] & 3) ? 1 : 0;
|
||||
lowres = BIT(state->m_hres_reg, 6);
|
||||
bgcolor = state->m_hres_reg & 7;
|
||||
interlace = (m_crtc_vreg[8] & 3) ? 1 : 0;
|
||||
lowres = BIT(m_hres_reg, 6);
|
||||
bgcolor = m_hres_reg & 7;
|
||||
|
||||
if (interlace)
|
||||
{
|
||||
@ -624,11 +625,11 @@ static MC6845_UPDATE_ROW( update_row )
|
||||
else
|
||||
mem = (ma + x + ra * x_count/40 * 0x400 -0x400) & 0x3fff;
|
||||
|
||||
color = state->m_p_videoram[mem|0x4000] & 7;
|
||||
reverse = BIT(state->m_p_videoram[mem|0x4000], 3) ^ (x == cursor_x);
|
||||
graphic = BIT(state->m_p_videoram[mem|0x4000], 4);
|
||||
color = m_p_videoram[mem|0x4000] & 7;
|
||||
reverse = BIT(m_p_videoram[mem|0x4000], 3) ^ (x == cursor_x);
|
||||
graphic = BIT(m_p_videoram[mem|0x4000], 4);
|
||||
|
||||
rawbits = state->m_p_videoram[mem];
|
||||
rawbits = m_p_videoram[mem];
|
||||
|
||||
if (graphic)
|
||||
{
|
||||
@ -653,12 +654,12 @@ static MC6845_UPDATE_ROW( update_row )
|
||||
int tile_bank = BIT(rawbits, 7);
|
||||
if (interlace)
|
||||
{
|
||||
dots[0] = state->m_p_chargen[(tile_bank<<11)|(tile<<4)|(ra<<1)];
|
||||
dots[1] = state->m_p_chargen[(tile_bank<<11)|(tile<<4)|(ra<<1)|tile_bank];
|
||||
dots[0] = m_p_chargen[(tile_bank<<11)|(tile<<4)|(ra<<1)];
|
||||
dots[1] = m_p_chargen[(tile_bank<<11)|(tile<<4)|(ra<<1)|tile_bank];
|
||||
}
|
||||
else
|
||||
{
|
||||
dots[0] = dots[1] = state->m_p_chargen[(tile<<4)|(ra<<1)|tile_bank];
|
||||
dots[0] = dots[1] = m_p_chargen[(tile<<4)|(ra<<1)|tile_bank];
|
||||
}
|
||||
}
|
||||
|
||||
@ -679,20 +680,6 @@ static MC6845_UPDATE_ROW( update_row )
|
||||
}
|
||||
}
|
||||
|
||||
static MC6845_INTERFACE( mc6845_intf )
|
||||
{
|
||||
false, /* show border area */
|
||||
0,0,0,0, /* visarea adjustment */
|
||||
8, /* number of pixels per video memory address */
|
||||
NULL, /* before pixel update callback */
|
||||
update_row, /* row update callback */
|
||||
NULL, /* after pixel update callback */
|
||||
DEVCB_NULL, /* callback for display state changes */
|
||||
DEVCB_NULL, /* callback for cursor state changes */
|
||||
DEVCB_NULL, /* HSYNC callback */
|
||||
DEVCB_NULL, /* VSYNC callback */
|
||||
NULL /* update address callback */
|
||||
};
|
||||
|
||||
TIMER_DEVICE_CALLBACK_MEMBER(bml3_state::keyboard_callback)
|
||||
{
|
||||
@ -1000,7 +987,11 @@ static MACHINE_CONFIG_START( bml3_common, bml3_state )
|
||||
|
||||
/* Devices */
|
||||
// CRTC clock should be synchronous with the CPU clock.
|
||||
MCFG_MC6845_ADD("crtc", H46505, "screen", CPU_CLOCK, mc6845_intf)
|
||||
MCFG_MC6845_ADD("crtc", H46505, "screen", CPU_CLOCK)
|
||||
MCFG_MC6845_SHOW_BORDER_AREA(false)
|
||||
MCFG_MC6845_CHAR_WIDTH(8)
|
||||
MCFG_MC6845_UPDATE_ROW_CB(bml3_state, crtc_update_row)
|
||||
|
||||
// fire once per scan of an individual key
|
||||
// According to the service manual (p.65), the keyboard timer is driven by the horizontal video sync clock.
|
||||
MCFG_TIMER_DRIVER_ADD_PERIODIC("keyboard_timer", bml3_state, keyboard_callback, attotime::from_hz(H_CLOCK/2))
|
||||
|
@ -324,17 +324,16 @@ INPUT_PORTS_END
|
||||
|
||||
/* Video */
|
||||
|
||||
static MC6845_UPDATE_ROW( bw12_update_row )
|
||||
MC6845_UPDATE_ROW( bw12_state::crtc_update_row )
|
||||
{
|
||||
bw12_state *state = device->machine().driver_data<bw12_state>();
|
||||
const pen_t *pen = state->m_palette->pens();
|
||||
const pen_t *pen = m_palette->pens();
|
||||
int column, bit;
|
||||
|
||||
for (column = 0; column < x_count; column++)
|
||||
{
|
||||
UINT8 code = state->m_video_ram[((ma + column) & BW12_VIDEORAM_MASK)];
|
||||
UINT8 code = m_video_ram[((ma + column) & BW12_VIDEORAM_MASK)];
|
||||
UINT16 addr = code << 4 | (ra & 0x0f);
|
||||
UINT8 data = state->m_char_rom->base()[addr & BW12_CHARROM_MASK];
|
||||
UINT8 data = m_char_rom->base()[addr & BW12_CHARROM_MASK];
|
||||
|
||||
if (column == cursor_x)
|
||||
{
|
||||
@ -354,21 +353,6 @@ static MC6845_UPDATE_ROW( bw12_update_row )
|
||||
}
|
||||
|
||||
|
||||
static MC6845_INTERFACE( bw12_mc6845_interface )
|
||||
{
|
||||
true,
|
||||
0,0,0,0,
|
||||
8,
|
||||
NULL,
|
||||
bw12_update_row,
|
||||
NULL,
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL,
|
||||
NULL
|
||||
};
|
||||
|
||||
/* PIA6821 Interface */
|
||||
|
||||
WRITE_LINE_MEMBER( bw12_state::write_centronics_busy )
|
||||
@ -564,7 +548,10 @@ static MACHINE_CONFIG_START( common, bw12_state )
|
||||
MCFG_GFXDECODE_ADD("gfxdecode", "palette", bw12)
|
||||
MCFG_PALETTE_ADD_MONOCHROME_AMBER("palette")
|
||||
|
||||
MCFG_MC6845_ADD(MC6845_TAG, MC6845, SCREEN_TAG, XTAL_16MHz/8, bw12_mc6845_interface)
|
||||
MCFG_MC6845_ADD(MC6845_TAG, MC6845, SCREEN_TAG, XTAL_16MHz/8)
|
||||
MCFG_MC6845_SHOW_BORDER_AREA(true)
|
||||
MCFG_MC6845_CHAR_WIDTH(8)
|
||||
MCFG_MC6845_UPDATE_ROW_CB(bw12_state, crtc_update_row)
|
||||
|
||||
/* sound hardware */
|
||||
MCFG_SPEAKER_STANDARD_MONO("mono")
|
||||
|
@ -862,7 +862,7 @@ READ_LINE_MEMBER( c128_state::mmu_sense40_r )
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// mc6845_interface vdc_intf
|
||||
// mc6845
|
||||
//-------------------------------------------------
|
||||
|
||||
static GFXDECODE_START( c128 )
|
||||
@ -870,22 +870,6 @@ static GFXDECODE_START( c128 )
|
||||
GFXDECODE_END
|
||||
|
||||
|
||||
static MC6845_INTERFACE( vdc_intf )
|
||||
{
|
||||
true,
|
||||
0,0,0,0,
|
||||
8,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL,
|
||||
NULL
|
||||
};
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// MOS8564_INTERFACE( vic_intf )
|
||||
//-------------------------------------------------
|
||||
@ -1455,7 +1439,15 @@ static MACHINE_CONFIG_START( ntsc, c128_state )
|
||||
MCFG_QUANTUM_PERFECT_CPU(M8502_TAG)
|
||||
|
||||
// video hardware
|
||||
MCFG_MOS8563_ADD(MOS8563_TAG, SCREEN_VDC_TAG, XTAL_16MHz, vdc_intf, vdc_videoram_map)
|
||||
MCFG_MOS8563_ADD(MOS8563_TAG, SCREEN_VDC_TAG, XTAL_16MHz, vdc_videoram_map)
|
||||
MCFG_MC6845_SHOW_BORDER_AREA(true)
|
||||
MCFG_MC6845_CHAR_WIDTH(8)
|
||||
MCFG_SCREEN_ADD(SCREEN_VDC_TAG, RASTER)
|
||||
MCFG_SCREEN_REFRESH_RATE(60)
|
||||
MCFG_SCREEN_SIZE(640, 200)
|
||||
MCFG_SCREEN_VISIBLE_AREA(0, 640-1, 0, 200-1)
|
||||
MCFG_SCREEN_UPDATE_DEVICE(MOS8563_TAG, mos8563_device, screen_update)
|
||||
|
||||
MCFG_DEVICE_ADD(MOS8564_TAG, MOS8564, XTAL_14_31818MHz*2/3.5)
|
||||
MCFG_MOS6566_CPU(M8502_TAG)
|
||||
MCFG_MOS6566_IRQ_CALLBACK(WRITELINE(c128_state, vic_irq_w))
|
||||
@ -1619,7 +1611,17 @@ static MACHINE_CONFIG_START( pal, c128_state )
|
||||
MCFG_QUANTUM_PERFECT_CPU(M8502_TAG)
|
||||
|
||||
// video hardware
|
||||
MCFG_MOS8563_ADD(MOS8563_TAG, SCREEN_VDC_TAG, XTAL_16MHz, vdc_intf, vdc_videoram_map)
|
||||
MCFG_MOS8563_ADD(MOS8563_TAG, SCREEN_VDC_TAG, XTAL_16MHz, vdc_videoram_map)
|
||||
MCFG_MC6845_SHOW_BORDER_AREA(true)
|
||||
MCFG_MC6845_CHAR_WIDTH(8)
|
||||
MCFG_MC6845_SHOW_BORDER_AREA(true)
|
||||
MCFG_MC6845_CHAR_WIDTH(8)
|
||||
MCFG_SCREEN_ADD(SCREEN_VDC_TAG, RASTER)
|
||||
MCFG_SCREEN_REFRESH_RATE(60)
|
||||
MCFG_SCREEN_SIZE(640, 200)
|
||||
MCFG_SCREEN_VISIBLE_AREA(0, 640-1, 0, 200-1)
|
||||
MCFG_SCREEN_UPDATE_DEVICE(MOS8563_TAG, mos8563_device, screen_update)
|
||||
|
||||
MCFG_DEVICE_ADD(MOS8566_TAG, MOS8566, XTAL_17_734472MHz*2/4.5)
|
||||
MCFG_MOS6566_CPU(M8502_TAG)
|
||||
MCFG_MOS6566_IRQ_CALLBACK(WRITELINE(c128_state, vic_irq_w))
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user