summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Mark Garlanger <mgarlanger@users.noreply.github.com>2017-03-25 00:16:34 -0500
committer Vas Crabb <cuavas@users.noreply.github.com>2017-03-25 16:16:34 +1100
commit37d2804c4a190738fe638fdf2f0bcbdff42b3760 (patch)
tree78ac046655db63cc2729f1c4e0e9aa1076715d72
parent7c2ee1a7629271533c47451ea666a79446ca65c1 (diff)
Minor cleanup of H19
-rw-r--r--src/mame/drivers/h19.cpp62
1 files changed, 28 insertions, 34 deletions
diff --git a/src/mame/drivers/h19.cpp b/src/mame/drivers/h19.cpp
index 53bdf01ef29..0b7fcff69a9 100644
--- a/src/mame/drivers/h19.cpp
+++ b/src/mame/drivers/h19.cpp
@@ -15,8 +15,6 @@
is pressed/data is received.
TODO:
- - Finish connecting up the 8250
- - enable 8520 interrupts
- speed up emulation
- update SW401 baud rate options for Watz ROM
- update SW401 & SW402 definitions for Super-19 ROM
@@ -64,6 +62,7 @@ Address Description
#define H19_CLOCK (XTAL_12_288MHz / 6)
#define MC6845_CLOCK (XTAL_12_288MHz /8)
#define INS8250_CLOCK (XTAL_12_288MHz /4)
+
// Capacitor value in pF
#define H19_KEY_DEBOUNCE_CAPACITOR 5000
#define MM5740_CLOCK (mm5740_device::calc_effective_clock_key_debounce(H19_KEY_DEBOUNCE_CAPACITOR))
@@ -73,7 +72,6 @@ Address Description
#define KBDC_TAG "mm5740"
-
class h19_state : public driver_device
{
public:
@@ -111,22 +109,24 @@ public:
private:
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
virtual void machine_reset() override;
+
required_device<palette_device> m_palette;
- required_device<cpu_device> m_maincpu;
- required_device<mc6845_device> m_crtc;
+ required_device<cpu_device> m_maincpu;
+ required_device<mc6845_device> m_crtc;
required_device<ins8250_device> m_ace;
- required_device<beep_device> m_beep;
- required_shared_ptr<uint8_t> m_p_videoram;
- required_region_ptr<u8> m_p_chargen;
- required_device<mm5740_device> m_mm5740;
- required_memory_region m_kbdrom;
- required_ioport m_kbspecial;
-
- uint8_t m_transchar;
- bool m_strobe;
+ required_device<beep_device> m_beep;
+ required_shared_ptr<uint8_t> m_p_videoram;
+ required_region_ptr<u8> m_p_chargen;
+ required_device<mm5740_device> m_mm5740;
+ required_memory_region m_kbdrom;
+ required_ioport m_kbspecial;
+
+ uint8_t m_transchar;
+ bool m_strobe;
+ bool m_keyclickactive;
+ bool m_bellactive;
+
uint16_t translate_mm5740_b(uint16_t b);
- bool m_keyclickactive;
- bool m_bellactive;
};
void h19_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
@@ -271,7 +271,6 @@ static INPUT_PORTS_START( h19 )
PORT_BIT(0x100, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("L") PORT_CODE(KEYCODE_L) PORT_CHAR('l') PORT_CHAR('L')
PORT_BIT(0x200, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Scroll") PORT_CODE(KEYCODE_LWIN)
-
PORT_START("X8")
PORT_BIT(0x001, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Q") PORT_CODE(KEYCODE_Q) PORT_CHAR('q') PORT_CHAR('Q')
PORT_BIT(0x002, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("W") PORT_CODE(KEYCODE_W) PORT_CHAR('w') PORT_CHAR('W')
@@ -284,7 +283,6 @@ static INPUT_PORTS_START( h19 )
PORT_BIT(0x100, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("O") PORT_CODE(KEYCODE_O) PORT_CHAR('o') PORT_CHAR('O')
PORT_BIT(0x200, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Tab") PORT_CODE(KEYCODE_TAB) PORT_CHAR(9)
-
PORT_START("X9")
PORT_BIT(0x001, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("1") PORT_CODE(KEYCODE_1) PORT_CHAR('1') PORT_CHAR('!')
PORT_BIT(0x002, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("2") PORT_CODE(KEYCODE_2) PORT_CHAR('2') PORT_CHAR('@')
@@ -419,15 +417,13 @@ READ8_MEMBER(h19_state::kbd_key_r)
READ8_MEMBER(h19_state::kbd_flags_r)
{
- uint8_t rv = 0;
uint16_t modifiers = m_kbspecial->read();
-
- rv = modifiers & 0xff;
+ uint8_t rv = modifiers & 0x7f;
// check both shifts
if (((modifiers & 0x020) == 0) || ((modifiers & 0x100) == 0))
{
- rv |= 0x1;
+ rv |= KB_STATUS_SHIFT_KEYS_MASK;
}
// invert offline switch
@@ -463,20 +459,16 @@ WRITE_LINE_MEMBER(h19_state::mm5740_data_ready_w)
}
}
-
MC6845_UPDATE_ROW( h19_state::crtc_update_row )
{
const rgb_t *palette = m_palette->palette()->entry_list_raw();
- uint8_t chr,gfx;
- uint16_t mem,x;
uint32_t *p = &bitmap.pix32(y);
- for (x = 0; x < x_count; x++)
+ for (uint16_t x = 0; x < x_count; x++)
{
- uint8_t inv=0;
- if (x == cursor_x) inv=0xff;
- mem = (ma + x) & 0x7ff;
- chr = m_p_videoram[mem];
+ uint8_t inv = (x == cursor_x) ? 0xff : 0;
+
+ uint8_t chr = m_p_videoram[(ma + x) & 0x7ff];
if (chr & 0x80)
{
@@ -485,7 +477,7 @@ MC6845_UPDATE_ROW( h19_state::crtc_update_row )
}
/* get pattern of pixels for that character scanline */
- gfx = m_p_chargen[(chr<<4) | ra] ^ inv;
+ uint8_t gfx = m_p_chargen[(chr<<4) | ra] ^ inv;
/* Display a scanline of a character (8 pixels) */
*p++ = palette[BIT(gfx, 7)];
@@ -520,11 +512,12 @@ GFXDECODE_END
static MACHINE_CONFIG_START( h19, h19_state )
/* basic machine hardware */
- MCFG_CPU_ADD("maincpu",Z80, H19_CLOCK) // From schematics
+ MCFG_CPU_ADD("maincpu", Z80, H19_CLOCK) // From schematics
MCFG_CPU_PROGRAM_MAP(h19_mem)
MCFG_CPU_IO_MAP(h19_io)
/* video hardware */
+ // TODO: make configurable, Heath offered 3 different CRTs - White, Green, Amber.
MCFG_SCREEN_ADD_MONOCHROME("screen", RASTER, rgb_t::green())
MCFG_SCREEN_REFRESH_RATE(60) // TODO- this is adjustable by dipswitch.
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */
@@ -542,7 +535,7 @@ static MACHINE_CONFIG_START( h19, h19_state )
MCFG_MC6845_OUT_VSYNC_CB(INPUTLINE("maincpu", INPUT_LINE_NMI)) // frame pulse
MCFG_DEVICE_ADD("ins8250", INS8250, INS8250_CLOCK)
- MCFG_INS8250_OUT_INT_CB(INPUTLINE("maincpu", 0)) // interrupt
+ MCFG_INS8250_OUT_INT_CB(INPUTLINE("maincpu", INPUT_LINE_IRQ0))
MCFG_DEVICE_ADD(KBDC_TAG, MM5740, MM5740_CLOCK)
MCFG_MM5740_MATRIX_X1(IOPORT("X1"))
@@ -609,7 +602,8 @@ ROM_END
/* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY FULLNAME FLAGS */
COMP( 1979, h19, 0, 0, h19, h19, driver_device, 0, "Heath Inc", "Heathkit H-19", 0 )
-/* TODO - verify the years for these third-party replacement ROMs. */
+//Super-19 ROM - ATG Systems, Inc - Adv in Sextant Issue 4, Winter 1983. With the magazine lead-time, likely released late 1982.
COMP( 1982, super19, h19, 0, h19, h19, driver_device, 0, "Heath Inc", "Heathkit H-19 w/ Super-19 ROM", 0 )
+// Watzman ROM - HUG p/n 885-1121, announced in REMark Issue 33, Oct. 1982
COMP( 1982, watz19, h19, 0, h19, h19, driver_device, 0, "Heath Inc", "Heathkit H-19 w/ Watzman ROM", 0 )