mirror of
https://github.com/holub/mame
synced 2025-07-04 09:28:51 +03:00
duet16: palette (nw)
This commit is contained in:
parent
1a19ef98fe
commit
1b14b550b5
@ -27,6 +27,7 @@ public:
|
|||||||
m_fdc(*this, "fdc"),
|
m_fdc(*this, "fdc"),
|
||||||
m_dmac(*this, "dmac"),
|
m_dmac(*this, "dmac"),
|
||||||
m_fd(*this, "fdc:%u", 0),
|
m_fd(*this, "fdc:%u", 0),
|
||||||
|
m_pal(*this, "palette"),
|
||||||
m_chrrom(*this, "char"),
|
m_chrrom(*this, "char"),
|
||||||
m_vram(*this, "vram")
|
m_vram(*this, "vram")
|
||||||
{ }
|
{ }
|
||||||
@ -41,6 +42,7 @@ private:
|
|||||||
DECLARE_READ8_MEMBER(dmapg_r);
|
DECLARE_READ8_MEMBER(dmapg_r);
|
||||||
DECLARE_WRITE8_MEMBER(dmapg_w);
|
DECLARE_WRITE8_MEMBER(dmapg_w);
|
||||||
DECLARE_WRITE8_MEMBER(fdcctrl_w);
|
DECLARE_WRITE8_MEMBER(fdcctrl_w);
|
||||||
|
DECLARE_WRITE8_MEMBER(pal_w);
|
||||||
DECLARE_WRITE_LINE_MEMBER(hrq_w);
|
DECLARE_WRITE_LINE_MEMBER(hrq_w);
|
||||||
MC6845_UPDATE_ROW(crtc_update_row);
|
MC6845_UPDATE_ROW(crtc_update_row);
|
||||||
void duet16_io(address_map &map);
|
void duet16_io(address_map &map);
|
||||||
@ -50,6 +52,7 @@ private:
|
|||||||
required_device<upd765a_device> m_fdc;
|
required_device<upd765a_device> m_fdc;
|
||||||
required_device<am9517a_device> m_dmac;
|
required_device<am9517a_device> m_dmac;
|
||||||
required_device_array<floppy_connector, 2> m_fd;
|
required_device_array<floppy_connector, 2> m_fd;
|
||||||
|
required_device<palette_device> m_pal;
|
||||||
required_memory_region m_chrrom;
|
required_memory_region m_chrrom;
|
||||||
required_shared_ptr<u16> m_vram;
|
required_shared_ptr<u16> m_vram;
|
||||||
u8 m_dmapg;
|
u8 m_dmapg;
|
||||||
@ -119,6 +122,7 @@ ADDRESS_MAP_START(duet16_state::duet16_mem)
|
|||||||
AM_RANGE(0xf80c0, 0xf80c1) AM_DEVREADWRITE8("crtc", h46505_device, status_r, address_w, 0x00ff)
|
AM_RANGE(0xf80c0, 0xf80c1) AM_DEVREADWRITE8("crtc", h46505_device, status_r, address_w, 0x00ff)
|
||||||
AM_RANGE(0xf80c2, 0xf80c3) AM_DEVREADWRITE8("crtc", h46505_device, register_r, register_w, 0x00ff)
|
AM_RANGE(0xf80c2, 0xf80c3) AM_DEVREADWRITE8("crtc", h46505_device, register_r, register_w, 0x00ff)
|
||||||
AM_RANGE(0xf8100, 0xf8103) AM_DEVICE8("fdc", upd765a_device, map, 0x00ff)
|
AM_RANGE(0xf8100, 0xf8103) AM_DEVICE8("fdc", upd765a_device, map, 0x00ff)
|
||||||
|
AM_RANGE(0xf8160, 0xf818f) AM_WRITE8(pal_w, 0xffff)
|
||||||
AM_RANGE(0xf8220, 0xf8221) AM_WRITE8(fdcctrl_w, 0x00ff)
|
AM_RANGE(0xf8220, 0xf8221) AM_WRITE8(fdcctrl_w, 0x00ff)
|
||||||
AM_RANGE(0xfe000, 0xfffff) AM_ROM AM_REGION("rom", 0)
|
AM_RANGE(0xfe000, 0xfffff) AM_ROM AM_REGION("rom", 0)
|
||||||
ADDRESS_MAP_END
|
ADDRESS_MAP_END
|
||||||
@ -126,9 +130,15 @@ ADDRESS_MAP_END
|
|||||||
ADDRESS_MAP_START(duet16_state::duet16_io)
|
ADDRESS_MAP_START(duet16_state::duet16_io)
|
||||||
ADDRESS_MAP_END
|
ADDRESS_MAP_END
|
||||||
|
|
||||||
|
WRITE8_MEMBER(duet16_state::pal_w)
|
||||||
|
{
|
||||||
|
int entry = (BIT(offset, 0) ? 2 : 0) | (BIT(offset, 5) ? 0 : 4);
|
||||||
|
m_pal->set_pen_color(entry, pal1bit(BIT(data, 1)), pal1bit(BIT(data, 2)), pal1bit(BIT(data, 0)));
|
||||||
|
m_pal->set_pen_color(entry + 1, pal1bit(BIT(data, 5)), pal1bit(BIT(data, 6)), pal1bit(BIT(data, 4)));
|
||||||
|
}
|
||||||
|
|
||||||
MC6845_UPDATE_ROW(duet16_state::crtc_update_row)
|
MC6845_UPDATE_ROW(duet16_state::crtc_update_row)
|
||||||
{
|
{
|
||||||
const rgb_t fg = 0xffffffff;
|
|
||||||
const rgb_t bg = 0;
|
const rgb_t bg = 0;
|
||||||
u32 *p = &bitmap.pix32(y);
|
u32 *p = &bitmap.pix32(y);
|
||||||
|
|
||||||
@ -136,8 +146,9 @@ MC6845_UPDATE_ROW(duet16_state::crtc_update_row)
|
|||||||
{
|
{
|
||||||
u16 offset = (ma + i) & 0x1fff;
|
u16 offset = (ma + i) & 0x1fff;
|
||||||
u8 chr = m_vram[offset] & 0xff;
|
u8 chr = m_vram[offset] & 0xff;
|
||||||
//u8 attr = m_vram[offset] >> 8;
|
u8 attr = m_vram[offset] >> 8;
|
||||||
u8 data = m_chrrom->base()[(chr * 16) + ra];
|
u8 data = m_chrrom->base()[(chr * 16) + ra];
|
||||||
|
rgb_t fg = m_pal->pen_color(attr & 7);
|
||||||
|
|
||||||
*p = (data & 0x80) ? fg : bg; p++;
|
*p = (data & 0x80) ? fg : bg; p++;
|
||||||
*p = (data & 0x40) ? fg : bg; p++;
|
*p = (data & 0x40) ? fg : bg; p++;
|
||||||
@ -150,6 +161,24 @@ MC6845_UPDATE_ROW(duet16_state::crtc_update_row)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static const gfx_layout duet16_charlayout =
|
||||||
|
{
|
||||||
|
8, 16, /* 8 x 16 characters */
|
||||||
|
512, /* 512 characters */
|
||||||
|
1, /* 1 bits per pixel */
|
||||||
|
{ 0 }, /* no bitplanes */
|
||||||
|
/* x offsets */
|
||||||
|
{ STEP8(0,1) },
|
||||||
|
/* y offsets */
|
||||||
|
{ STEP16(0,8) },
|
||||||
|
8*16 /* every char takes 8 bytes */
|
||||||
|
};
|
||||||
|
|
||||||
|
static GFXDECODE_START(duet16)
|
||||||
|
GFXDECODE_ENTRY( "char", 0x0000, duet16_charlayout, 0, 1 )
|
||||||
|
GFXDECODE_END
|
||||||
|
|
||||||
|
|
||||||
static SLOT_INTERFACE_START( duet16_floppies )
|
static SLOT_INTERFACE_START( duet16_floppies )
|
||||||
SLOT_INTERFACE( "525qd", FLOPPY_525_QD )
|
SLOT_INTERFACE( "525qd", FLOPPY_525_QD )
|
||||||
SLOT_INTERFACE_END
|
SLOT_INTERFACE_END
|
||||||
@ -214,6 +243,10 @@ MACHINE_CONFIG_START(duet16_state::duet16)
|
|||||||
MCFG_MC6845_CHAR_WIDTH(8)
|
MCFG_MC6845_CHAR_WIDTH(8)
|
||||||
MCFG_MC6845_UPDATE_ROW_CB(duet16_state, crtc_update_row)
|
MCFG_MC6845_UPDATE_ROW_CB(duet16_state, crtc_update_row)
|
||||||
|
|
||||||
|
MCFG_PALETTE_ADD("palette", 8)
|
||||||
|
|
||||||
|
MCFG_GFXDECODE_ADD("gfxdecode", "palette", duet16)
|
||||||
|
|
||||||
MCFG_SCREEN_ADD("screen", RASTER)
|
MCFG_SCREEN_ADD("screen", RASTER)
|
||||||
MCFG_SCREEN_REFRESH_RATE(60)
|
MCFG_SCREEN_REFRESH_RATE(60)
|
||||||
MCFG_SCREEN_SIZE(640, 480)
|
MCFG_SCREEN_SIZE(640, 480)
|
||||||
|
Loading…
Reference in New Issue
Block a user