summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author arbee <rb6502@users.noreply.github.com>2015-01-03 22:16:35 -0500
committer arbee <rb6502@users.noreply.github.com>2015-01-03 22:16:35 -0500
commit1542c13ac120425f24f9544a8a281147660f7790 (patch)
treefe17f8ca125e8b7c8b8e8e3c2650d3bd53983d88
parent17f660d6eb3745f040dcb6f366ecf1ec24b63efc (diff)
(MESS) New skeleton drivers added: [R. Belmont, Al Kossow]
- HP 1650b - HP 1651b
-rw-r--r--src/mess/drivers/hp16500.c178
-rw-r--r--src/mess/mess.lst2
2 files changed, 166 insertions, 14 deletions
diff --git a/src/mess/drivers/hp16500.c b/src/mess/drivers/hp16500.c
index 5a10a3bef74..158cc05e8a2 100644
--- a/src/mess/drivers/hp16500.c
+++ b/src/mess/drivers/hp16500.c
@@ -38,18 +38,29 @@
IRQ 6 = 35c8 (jump 840120)
IRQ 7 = 35d4 (jump 840120)
+ 16500c:
+ Same as 16500b, but add:
+ 53C720 SCSI controller
+ DP83934 SONIC ethernet
+
****************************************************************************/
#include "emu.h"
#include "cpu/m68000/m68000.h"
#include "video/mc6845.h"
+#include "machine/mc68681.h"
+
+#define MAINCPU_TAG "maincpu"
+#define CRTC_TAG "crtc"
+#define SCREEN_TAG "screen"
+#define DUART_TAG "duart"
class hp16500_state : public driver_device
{
public:
hp16500_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag),
- m_maincpu(*this, "maincpu")
+ m_maincpu(*this, MAINCPU_TAG)
{ }
virtual void video_start();
@@ -69,6 +80,7 @@ public:
DECLARE_WRITE8_MEMBER (val_w);
DECLARE_READ32_MEMBER(vbl_state_r);
DECLARE_WRITE32_MEMBER(vbl_ack_w);
+ DECLARE_READ16_MEMBER(vbl_ack16_r);
DECLARE_WRITE16_MEMBER(vbl_ack16_w);
DECLARE_WRITE8_MEMBER(pal_ctrl_w);
@@ -80,6 +92,7 @@ public:
DECLARE_WRITE_LINE_MEMBER(vsync_changed);
MC6845_UPDATE_ROW(crtc_update_row);
+ MC6845_UPDATE_ROW(crtc_update_row_1650);
INTERRUPT_GEN_MEMBER(vblank);
@@ -97,6 +110,12 @@ WRITE32_MEMBER(hp16500_state::vbl_ack_w)
m_maincpu->set_input_line(M68K_IRQ_1, CLEAR_LINE);
}
+READ16_MEMBER(hp16500_state::vbl_ack16_r)
+{
+ m_maincpu->set_input_line(M68K_IRQ_1, CLEAR_LINE);
+ return 0;
+}
+
WRITE16_MEMBER(hp16500_state::vbl_ack16_w)
{
m_maincpu->set_input_line(M68K_IRQ_1, CLEAR_LINE);
@@ -132,6 +151,28 @@ MC6845_UPDATE_ROW( hp16500_state::crtc_update_row )
}
}
+MC6845_UPDATE_ROW( hp16500_state::crtc_update_row_1650 )
+{
+ UINT32 *p = &bitmap.pix32(y);
+ int i, pos;
+
+ pos = y * 148;
+
+ for (i = 0; i < x_count; i++)
+ {
+ *p++ = m_palette[m_vram[pos+0x00000]];
+ *p++ = m_palette[m_vram[pos+0x10000]];
+ *p++ = m_palette[m_vram[pos+0x20000]];
+ *p++ = m_palette[m_vram[pos+0x30000]];
+ pos++;
+ *p++ = m_palette[m_vram[pos+0x00000]];
+ *p++ = m_palette[m_vram[pos+0x10000]];
+ *p++ = m_palette[m_vram[pos+0x20000]];
+ *p++ = m_palette[m_vram[pos+0x30000]];
+ pos++;
+ }
+}
+
WRITE8_MEMBER(hp16500_state::pal_ctrl_w)
{
m_clutoffs = data & 0xf;
@@ -164,6 +205,57 @@ WRITE16_MEMBER(hp16500_state::maskval_w)
m_mask = (data & 0xff) ^ 0xff;
}
+static ADDRESS_MAP_START(hp1650_map, AS_PROGRAM, 16, hp16500_state)
+ AM_RANGE(0x000000, 0x00ffff) AM_ROM AM_REGION("bios", 0)
+
+ AM_RANGE(0x201000, 0x201001) AM_WRITE(maskval_w)
+
+ AM_RANGE(0x204000, 0x204001) AM_WRITE8(pal_ctrl_w, 0x00ff)
+ AM_RANGE(0x205000, 0x205001) AM_WRITE8(pal_r_w, 0x00ff)
+ AM_RANGE(0x206000, 0x206001) AM_WRITE8(pal_g_w, 0x00ff)
+ AM_RANGE(0x207000, 0x207001) AM_WRITE8(pal_b_w, 0x00ff)
+
+ AM_RANGE(0x20c000, 0x20c001) AM_DEVREADWRITE8(CRTC_TAG, mc6845_device, status_r, address_w, 0x00ff)
+ AM_RANGE(0x20c002, 0x20c003) AM_DEVREADWRITE8(CRTC_TAG, mc6845_device, register_r, register_w, 0x00ff)
+
+ AM_RANGE(0x20e000, 0x20e001) AM_READWRITE(vbl_ack16_r, vbl_ack16_w)
+
+ AM_RANGE(0x2050fe, 0x2050ff) AM_NOP
+ AM_RANGE(0x206000, 0x206001) AM_NOP
+ AM_RANGE(0x20f000, 0x20f001) AM_NOP
+
+ AM_RANGE(0x600000, 0x61ffff) AM_WRITE(vram_w)
+ AM_RANGE(0x600000, 0x67ffff) AM_READ8(vram_r, 0x00ff)
+
+ AM_RANGE(0x900000, 0x9fffff) AM_RAM
+ADDRESS_MAP_END
+
+// like 1650 but moves main RAM to match 16500a
+static ADDRESS_MAP_START(hp1651_map, AS_PROGRAM, 16, hp16500_state)
+ AM_RANGE(0x000000, 0x00ffff) AM_ROM AM_REGION("bios", 0)
+
+ AM_RANGE(0x201000, 0x201001) AM_WRITE(maskval_w)
+
+ AM_RANGE(0x204000, 0x204001) AM_WRITE8(pal_ctrl_w, 0x00ff)
+ AM_RANGE(0x205000, 0x205001) AM_WRITE8(pal_r_w, 0x00ff)
+ AM_RANGE(0x206000, 0x206001) AM_WRITE8(pal_g_w, 0x00ff)
+ AM_RANGE(0x207000, 0x207001) AM_WRITE8(pal_b_w, 0x00ff)
+
+ AM_RANGE(0x20c000, 0x20c001) AM_DEVREADWRITE8(CRTC_TAG, mc6845_device, status_r, address_w, 0x00ff)
+ AM_RANGE(0x20c002, 0x20c003) AM_DEVREADWRITE8(CRTC_TAG, mc6845_device, register_r, register_w, 0x00ff)
+
+ AM_RANGE(0x20e000, 0x20e001) AM_READWRITE(vbl_ack16_r, vbl_ack16_w)
+
+ AM_RANGE(0x2050fe, 0x2050ff) AM_NOP
+ AM_RANGE(0x206000, 0x206001) AM_NOP
+ AM_RANGE(0x20f000, 0x20f001) AM_NOP
+
+ AM_RANGE(0x600000, 0x61ffff) AM_WRITE(vram_w)
+ AM_RANGE(0x600000, 0x67ffff) AM_READ8(vram_r, 0x00ff)
+
+ AM_RANGE(0x980000, 0xa7ffff) AM_RAM
+ADDRESS_MAP_END
+
static ADDRESS_MAP_START(hp16500a_map, AS_PROGRAM, 16, hp16500_state)
AM_RANGE(0x000000, 0x00ffff) AM_ROM AM_REGION("bios", 0)
@@ -174,10 +266,10 @@ static ADDRESS_MAP_START(hp16500a_map, AS_PROGRAM, 16, hp16500_state)
AM_RANGE(0x206000, 0x206001) AM_WRITE8(pal_g_w, 0x00ff)
AM_RANGE(0x207000, 0x207001) AM_WRITE8(pal_b_w, 0x00ff)
- AM_RANGE(0x20c000, 0x20c001) AM_DEVREADWRITE8("crtc", mc6845_device, status_r, address_w, 0x00ff)
- AM_RANGE(0x20c002, 0x20c003) AM_DEVREADWRITE8("crtc", mc6845_device, register_r, register_w, 0x00ff)
+ AM_RANGE(0x20c000, 0x20c001) AM_DEVREADWRITE8(CRTC_TAG, mc6845_device, status_r, address_w, 0x00ff)
+ AM_RANGE(0x20c002, 0x20c003) AM_DEVREADWRITE8(CRTC_TAG, mc6845_device, register_r, register_w, 0x00ff)
- AM_RANGE(0x20e000, 0x20e001) AM_WRITE(vbl_ack16_w)
+ AM_RANGE(0x20e000, 0x20e001) AM_READWRITE(vbl_ack16_r, vbl_ack16_w)
AM_RANGE(0x600000, 0x61ffff) AM_WRITE(vram_w)
AM_RANGE(0x600000, 0x67ffff) AM_READ8(vram_r, 0x00ff)
@@ -301,42 +393,98 @@ UINT32 hp16500_state::screen_update_hp16500(screen_device &screen, bitmap_rgb32
return 0;
}
+static MACHINE_CONFIG_START( hp1650, hp16500_state )
+ /* basic machine hardware */
+ MCFG_CPU_ADD(MAINCPU_TAG, M68000, 10000000)
+ MCFG_CPU_PROGRAM_MAP(hp1650_map)
+
+ MCFG_SCREEN_ADD(SCREEN_TAG, RASTER)
+ MCFG_SCREEN_RAW_PARAMS(25000000, 0x330, 0, 0x250, 0x198, 0, 0x180 )
+ MCFG_SCREEN_UPDATE_DEVICE( CRTC_TAG, mc6845_device, screen_update )
+
+ MCFG_MC6845_ADD(CRTC_TAG, MC6845, SCREEN_TAG, 25000000/9)
+ MCFG_MC6845_SHOW_BORDER_AREA(false)
+ MCFG_MC6845_CHAR_WIDTH(8)
+ MCFG_MC6845_UPDATE_ROW_CB(hp16500_state, crtc_update_row_1650)
+ MCFG_MC6845_OUT_VSYNC_CB(WRITELINE(hp16500_state, vsync_changed))
+
+ MCFG_DEVICE_ADD(DUART_TAG, MC68681, 20000000)
+
+ MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
+MACHINE_CONFIG_END
+
+static MACHINE_CONFIG_START( hp1651, hp16500_state )
+ /* basic machine hardware */
+ MCFG_CPU_ADD(MAINCPU_TAG, M68000, 10000000)
+ MCFG_CPU_PROGRAM_MAP(hp1651_map)
+
+ MCFG_SCREEN_ADD(SCREEN_TAG, RASTER)
+ MCFG_SCREEN_RAW_PARAMS(25000000, 0x330, 0, 0x250, 0x198, 0, 0x180 )
+ MCFG_SCREEN_UPDATE_DEVICE( CRTC_TAG, mc6845_device, screen_update )
+
+ MCFG_MC6845_ADD(CRTC_TAG, MC6845, SCREEN_TAG, 25000000/9)
+ MCFG_MC6845_SHOW_BORDER_AREA(false)
+ MCFG_MC6845_CHAR_WIDTH(8)
+ MCFG_MC6845_UPDATE_ROW_CB(hp16500_state, crtc_update_row_1650)
+ MCFG_MC6845_OUT_VSYNC_CB(WRITELINE(hp16500_state, vsync_changed))
+
+ MCFG_DEVICE_ADD(DUART_TAG, MC68681, 20000000)
+
+ MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
+MACHINE_CONFIG_END
+
static MACHINE_CONFIG_START( hp16500a, hp16500_state )
/* basic machine hardware */
- MCFG_CPU_ADD("maincpu", M68000, 10000000)
+ MCFG_CPU_ADD(MAINCPU_TAG, M68000, 10000000)
MCFG_CPU_PROGRAM_MAP(hp16500a_map)
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_RAW_PARAMS(10000000, 0x320, 0, 0x240, 0x19c, 0, 0x170 )
- MCFG_SCREEN_UPDATE_DEVICE( "crtc", mc6845_device, screen_update )
+ MCFG_SCREEN_ADD(SCREEN_TAG, RASTER)
+ MCFG_SCREEN_RAW_PARAMS(25000000, 0x320, 0, 0x240, 0x19c, 0, 0x170 )
+ MCFG_SCREEN_UPDATE_DEVICE( CRTC_TAG, mc6845_device, screen_update )
- MCFG_MC6845_ADD("crtc", MC6845, "screen", 10000000/9)
+ MCFG_MC6845_ADD(CRTC_TAG, MC6845, SCREEN_TAG, 25000000/9)
MCFG_MC6845_SHOW_BORDER_AREA(false)
MCFG_MC6845_CHAR_WIDTH(8)
MCFG_MC6845_UPDATE_ROW_CB(hp16500_state, crtc_update_row)
MCFG_MC6845_OUT_VSYNC_CB(WRITELINE(hp16500_state, vsync_changed))
+ MCFG_DEVICE_ADD(DUART_TAG, MC68681, 20000000)
+
MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
MACHINE_CONFIG_END
static MACHINE_CONFIG_START( hp16500, hp16500_state )
/* basic machine hardware */
- MCFG_CPU_ADD("maincpu", M68EC030, 25000000)
+ MCFG_CPU_ADD(MAINCPU_TAG, M68EC030, 25000000)
MCFG_CPU_PROGRAM_MAP(hp16500_map)
- MCFG_CPU_VBLANK_INT_DRIVER("screen", hp16500_state, vblank)
+ MCFG_CPU_VBLANK_INT_DRIVER(SCREEN_TAG, hp16500_state, vblank)
- MCFG_SCREEN_ADD("screen", RASTER)
+ MCFG_SCREEN_ADD(SCREEN_TAG, RASTER)
MCFG_SCREEN_UPDATE_DRIVER(hp16500_state, screen_update_hp16500)
MCFG_SCREEN_SIZE(576,384)
MCFG_SCREEN_VISIBLE_AREA(0, 576-1, 0, 384-1)
MCFG_SCREEN_REFRESH_RATE(60)
+ MCFG_DEVICE_ADD(DUART_TAG, MC68681, 20000000)
+
MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
MACHINE_CONFIG_END
static INPUT_PORTS_START( hp16500 )
INPUT_PORTS_END
+ROM_START( hp1650b )
+ ROM_REGION16_BE(0x20000, "bios", 0)
+ ROM_LOAD16_BYTE( "la1.bin", 0x000000, 0x008000, CRC(7c60e334) SHA1(c3661e4bb58e0951e9c13208b4991f5d9dda633b) )
+ ROM_LOAD16_BYTE( "la2.bin", 0x000001, 0x008000, CRC(b0c6fe60) SHA1(a77b2e7098f26af93b0946abe6e89711b3332210) )
+ROM_END
+
+ROM_START( hp1651b )
+ ROM_REGION16_BE(0x20000, "bios", 0)
+ ROM_LOAD16_BYTE( "u102.bin", 0x000000, 0x008000, CRC(d7e1b091) SHA1(af813cc7ae748aedf1b1d9d522ee2154961315c2) )
+ ROM_LOAD16_BYTE( "u103.bin", 0x000001, 0x008000, CRC(f32a37c7) SHA1(8addda59923f64fd9b7e909eb0e3a17cc02bb70e) )
+ROM_END
+
ROM_START( hp165ka0 )
ROM_REGION16_BE(0x20000, "bios", 0)
ROM_LOAD16_BYTE( "16500-80002.bin", 0x000000, 0x008000, CRC(0324b75a) SHA1(837855fce9288139226c914cc0c43061e25b57d2) )
@@ -351,5 +499,7 @@ ROM_START( hp16500b )
ROM_LOAD32_BYTE( "16500-80017.bin", 0x000003, 0x008000, CRC(e0b1096b) SHA1(426bb9a4756d8087bded4f6b61365d733ffbb09a) )
ROM_END
-COMP( 1994, hp165ka0, 0, 0, hp16500a, hp16500, driver_device, 0, "Hewlett Packard", "HP 16500a", GAME_NOT_WORKING|GAME_NO_SOUND)
-COMP( 1994, hp16500b, 0, 0, hp16500, hp16500, driver_device, 0, "Hewlett Packard", "HP 16500b", GAME_NOT_WORKING|GAME_NO_SOUND)
+COMP( 1989, hp1650b, 0, 0, hp1650, hp16500, driver_device, 0, "Hewlett Packard", "HP 1650b", GAME_NOT_WORKING|GAME_NO_SOUND)
+COMP( 1989, hp1651b, 0, 0, hp1651, hp16500, driver_device, 0, "Hewlett Packard", "HP 1651b", GAME_NOT_WORKING|GAME_NO_SOUND)
+COMP( 1991, hp165ka0, 0, 0, hp16500a, hp16500, driver_device, 0, "Hewlett Packard", "HP 16500a", GAME_NOT_WORKING|GAME_NO_SOUND)
+COMP( 1991, hp16500b, 0, 0, hp16500, hp16500, driver_device, 0, "Hewlett Packard", "HP 16500b", GAME_NOT_WORKING|GAME_NO_SOUND)
diff --git a/src/mess/mess.lst b/src/mess/mess.lst
index 3452b67c9fc..82f456263f0 100644
--- a/src/mess/mess.lst
+++ b/src/mess/mess.lst
@@ -1723,6 +1723,8 @@ hp48gx // HP 48GX
hp48gp // HP 48G+
hp49g
hp49gp // HP 49G+
+hp1650b
+hp1651b
hp165ka0
hp16500b
hp9816