diff options
author | Robbbert <Robbbert@users.noreply.github.com> | 2018-11-18 12:31:08 +1100 |
---|---|---|
committer | Robbbert <Robbbert@users.noreply.github.com> | 2018-11-18 12:31:08 +1100 |
commit | 9e36dff17a24b0f036535b68b476400c208610c1 (patch) | |
tree | e6d333e1677e77bd5e75050455ea3e34f36d3750 | |
parent | 48c0c4a2691063206451dd75570d93409ff57834 (diff) |
(nw) qvt102: fixed crash on exit; moved attribute processing to outer loop for efficiency.
-rw-r--r-- | src/mame/drivers/qvt102.cpp | 34 |
1 files changed, 17 insertions, 17 deletions
diff --git a/src/mame/drivers/qvt102.cpp b/src/mame/drivers/qvt102.cpp index be8053c1578..2bdc8d6bcd8 100644 --- a/src/mame/drivers/qvt102.cpp +++ b/src/mame/drivers/qvt102.cpp @@ -8,11 +8,12 @@ - Motorola 6800 CPU - Hitachi HD46505 (Motorola 6845-compatible) CRTC - Hitachi HD46850 (Motorola 6850-compatible) ACIA - - M58725P-15 (16k RAM) + - M58725P-15 (6116-compatible) (2k x 8bit RAM) - Zilog Z8430 CTC - 16.6698MHz Crystal + - 2x TC5514-APL + 3V battery, functioning as NVRAM - Keyboard: D8748D, 6.000, Beeper + Keyboard: D8748D, 6.000MHz Crystal, Beeper Not sure what's going on here... the ACIA only has one serial channel, is it for the host, the printer, or the keyboard? @@ -47,6 +48,7 @@ public: , m_screen(*this, "screen") , m_gfxdecode(*this, "gfxdecode") , m_palette(*this, "palette") + , m_nvram(*this, "nvram") , m_p_videoram(*this, "videoram") , m_p_chargen(*this, "chargen") { } @@ -64,6 +66,7 @@ private: required_device<screen_device> m_screen; required_device<gfxdecode_device> m_gfxdecode; required_device<palette_device> m_palette; + required_shared_ptr<uint8_t> m_nvram; required_shared_ptr<uint8_t> m_p_videoram; required_region_ptr<u8> m_p_chargen; }; @@ -99,23 +102,20 @@ MC6845_UPDATE_ROW( qvt102_state::crtc_update_row ) if (chr >= 0x90 && chr <= 0x9f) attr = chr; - // draw 9 pixels of the character - for (int i = 0; i < 9; i++) - { - int pixel = BIT(gfx, i); - int half = BIT(chr, 7); + int half = BIT(chr, 7); - // apply attributes - if (BIT(attr, 2)) pixel ^= 1; // reverse - if (BIT(attr, 1) && (m_screen->frame_number() & 32)) pixel ^= 1; // blink (frequency?) - if (BIT(attr, 0)) pixel = 0; // blank - if (BIT(attr, 3) && ra == 11) pixel = 1; // underline + // apply attributes + if (BIT(attr, 2)) gfx = ~gfx; // reverse + if (BIT(attr, 1) && (m_screen->frame_number() & 32)) gfx = 0; // blink (frequency?) + if (BIT(attr, 0)) gfx = 0; // blank + if (BIT(attr, 3) && ra == 11) gfx = 0x1ff; // underline - // cursor active? - if (x == cursor_x) pixel ^= 1; + // cursor active? + if (x == cursor_x) gfx = ~gfx; - bitmap.pix32(y, x*9 + (8-i)) = palette[pixel ? 2 - half : 0]; - } + // draw 9 pixels of the character + for (int i = 0; i < 9; i++) + bitmap.pix32(y, x*9 + (8-i)) = palette[BIT(gfx, i) ? 2 - half : 0]; } } @@ -147,7 +147,7 @@ void qvt102_state::qvt102(machine_config &config) m_screen->set_raw(MASTER_CLOCK, 882, 9, 729, 315, 0, 300); // 80x24+1 m_screen->set_screen_update("crtc", FUNC(mc6845_device::screen_update)); - PALETTE(config, m_palette, 2).set_init("palette", FUNC(palette_device::palette_init_monochrome_highlight)); + PALETTE(config, m_palette, 3).set_init("palette", FUNC(palette_device::palette_init_monochrome_highlight)); GFXDECODE(config, m_gfxdecode, m_palette, chars); H46505(config, m_crtc, MASTER_CLOCK / 9); |