mirror of
https://github.com/holub/mame
synced 2025-06-18 10:18:57 +03:00
cit101: Add boldface and blinking/half intensity attributes
This commit is contained in:
parent
47f41ad603
commit
55ce3880a5
@ -88,6 +88,7 @@ private:
|
|||||||
DECLARE_READ8_MEMBER(e0_latch_r);
|
DECLARE_READ8_MEMBER(e0_latch_r);
|
||||||
DECLARE_WRITE8_MEMBER(e0_latch_w);
|
DECLARE_WRITE8_MEMBER(e0_latch_w);
|
||||||
|
|
||||||
|
DECLARE_WRITE_LINE_MEMBER(blink_w);
|
||||||
DECLARE_WRITE8_MEMBER(screen_control_w);
|
DECLARE_WRITE8_MEMBER(screen_control_w);
|
||||||
DECLARE_WRITE8_MEMBER(brightness_w);
|
DECLARE_WRITE8_MEMBER(brightness_w);
|
||||||
|
|
||||||
@ -101,6 +102,8 @@ private:
|
|||||||
|
|
||||||
u8 m_e0_latch;
|
u8 m_e0_latch;
|
||||||
|
|
||||||
|
bool m_blink;
|
||||||
|
|
||||||
required_device<cpu_device> m_maincpu;
|
required_device<cpu_device> m_maincpu;
|
||||||
required_device<screen_device> m_screen;
|
required_device<screen_device> m_screen;
|
||||||
required_device<er2055_device> m_nvr;
|
required_device<er2055_device> m_nvr;
|
||||||
@ -116,6 +119,7 @@ void cit101_state::machine_start()
|
|||||||
subdevice<i8251_device>("kbduart")->write_cts(0);
|
subdevice<i8251_device>("kbduart")->write_cts(0);
|
||||||
|
|
||||||
save_item(NAME(m_e0_latch));
|
save_item(NAME(m_e0_latch));
|
||||||
|
save_item(NAME(m_blink));
|
||||||
}
|
}
|
||||||
|
|
||||||
u32 cit101_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
|
u32 cit101_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
|
||||||
@ -130,17 +134,27 @@ u32 cit101_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, con
|
|||||||
const u16 rowattr = m_mainram[row * 2 + ptrbase] | m_extraram[row * 2 + ptrbase] << 8;
|
const u16 rowattr = m_mainram[row * 2 + ptrbase] | m_extraram[row * 2 + ptrbase] << 8;
|
||||||
const int line = ((y % 10) / (BIT(rowattr, 8) ? 2 : 1) + (rowattr & 0x000f)) & 0xf;
|
const int line = ((y % 10) / (BIT(rowattr, 8) ? 2 : 1) + (rowattr & 0x000f)) & 0xf;
|
||||||
|
|
||||||
|
// Character attribute bit 0: underline (also used to render cursor)
|
||||||
|
// Character attribute bit 1: reverse video (also used to render cursor)
|
||||||
|
// Character attribute bit 2: boldface
|
||||||
|
// Character attribute bit 3: blinking (half intensity)
|
||||||
|
|
||||||
int c = 0;
|
int c = 0;
|
||||||
u8 attr = m_extraram[rowaddr];
|
u8 attr = m_extraram[rowaddr];
|
||||||
u8 char_data = m_chargen[(m_mainram[rowaddr] << 4) | line];
|
u8 char_data = m_chargen[(m_mainram[rowaddr] << 4) | line];
|
||||||
if (line == 9 && BIT(attr, 0))
|
if (line == 9 && BIT(attr, 0))
|
||||||
char_data ^= 0xff;
|
char_data ^= 0xff;
|
||||||
if (BIT(attr, 1))
|
rgb_t on_color = BIT(attr, 1) ? rgb_t::black() : rgb_t::white();
|
||||||
char_data ^= 0xff;
|
rgb_t off_color = BIT(attr, 1) ? rgb_t::white() : rgb_t::black();
|
||||||
|
if (BIT(attr, 3) && m_blink)
|
||||||
|
on_color = rgb_t(0xc0, 0xc0, 0xc0);
|
||||||
|
bool last_bit = false;
|
||||||
for (int x = screen.visible_area().left(); x <= screen.visible_area().right(); x++)
|
for (int x = screen.visible_area().left(); x <= screen.visible_area().right(); x++)
|
||||||
{
|
{
|
||||||
|
const bool cur_bit = BIT(char_data, 7);
|
||||||
if (x >= cliprect.left() && x <= cliprect.right())
|
if (x >= cliprect.left() && x <= cliprect.right())
|
||||||
bitmap.pix32(y, x) = BIT(char_data, 7) ? rgb_t::white() : rgb_t::black();
|
bitmap.pix32(y, x) = (cur_bit || (BIT(attr, 2) && last_bit)) ? on_color : off_color;
|
||||||
|
last_bit = cur_bit;
|
||||||
|
|
||||||
c++;
|
c++;
|
||||||
if (!BIT(rowattr, 9) || !BIT(c, 0))
|
if (!BIT(rowattr, 9) || !BIT(c, 0))
|
||||||
@ -155,8 +169,11 @@ u32 cit101_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, con
|
|||||||
char_data = m_chargen[(m_mainram[rowaddr] << 4) | line];
|
char_data = m_chargen[(m_mainram[rowaddr] << 4) | line];
|
||||||
if (line == 9 && BIT(attr, 0))
|
if (line == 9 && BIT(attr, 0))
|
||||||
char_data ^= 0xff;
|
char_data ^= 0xff;
|
||||||
if (BIT(attr, 1))
|
on_color = BIT(attr, 1) ? rgb_t::black() : rgb_t::white();
|
||||||
char_data ^= 0xff;
|
off_color = BIT(attr, 1) ? rgb_t::white() : rgb_t::black();
|
||||||
|
if (BIT(attr, 3) && m_blink)
|
||||||
|
on_color = rgb_t(0xc0, 0xc0, 0xc0);
|
||||||
|
last_bit = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -189,6 +206,11 @@ WRITE8_MEMBER(cit101_state::e0_latch_w)
|
|||||||
m_e0_latch = data;
|
m_e0_latch = data;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
WRITE_LINE_MEMBER(cit101_state::blink_w)
|
||||||
|
{
|
||||||
|
m_blink = state;
|
||||||
|
}
|
||||||
|
|
||||||
WRITE8_MEMBER(cit101_state::screen_control_w)
|
WRITE8_MEMBER(cit101_state::screen_control_w)
|
||||||
{
|
{
|
||||||
if ((m_extraram[0] & 0x06) != (data & 0x06))
|
if ((m_extraram[0] & 0x06) != (data & 0x06))
|
||||||
@ -277,6 +299,7 @@ MACHINE_CONFIG_START(cit101_state::cit101)
|
|||||||
MCFG_DEVICE_ADD("maincpu", I8085A, 6.144_MHz_XTAL)
|
MCFG_DEVICE_ADD("maincpu", I8085A, 6.144_MHz_XTAL)
|
||||||
MCFG_DEVICE_PROGRAM_MAP(mem_map)
|
MCFG_DEVICE_PROGRAM_MAP(mem_map)
|
||||||
MCFG_DEVICE_IO_MAP(io_map)
|
MCFG_DEVICE_IO_MAP(io_map)
|
||||||
|
MCFG_I8085A_SOD(WRITELINE(*this, cit101_state, blink_w))
|
||||||
|
|
||||||
MCFG_SCREEN_ADD("screen", RASTER)
|
MCFG_SCREEN_ADD("screen", RASTER)
|
||||||
//MCFG_SCREEN_RAW_PARAMS(14.976_MHz_XTAL, 960, 0, 800, 260, 0, 240)
|
//MCFG_SCREEN_RAW_PARAMS(14.976_MHz_XTAL, 960, 0, 800, 260, 0, 240)
|
||||||
|
Loading…
Reference in New Issue
Block a user