mirror of
https://github.com/holub/mame
synced 2025-05-20 04:39:11 +03:00
158 lines
4.4 KiB
C
158 lines
4.4 KiB
C
/***************************************************************************
|
|
|
|
Hewlett-Packard HP16500b Logic Analyzer
|
|
|
|
MC68EC030 @ 25 MHz
|
|
|
|
WD37C65C floppy controller (NEC765 type)
|
|
Bt475 video RAMDAC
|
|
TMS9914A GPIB bus interface
|
|
Dallas DS1286 RTC/CMOS RAM
|
|
|
|
IRQ 1 = 17732
|
|
IRQ 2 = 35b8
|
|
IRQ 3 = 35ce (jump 840120)
|
|
IRQ 4 = 17768
|
|
IRQ 5 = 814a
|
|
IRQ 6 = 35c8 (jump 840120)
|
|
IRQ 7 = 35d4 (jump 840120)
|
|
|
|
****************************************************************************/
|
|
|
|
#include "emu.h"
|
|
#include "cpu/m68000/m68000.h"
|
|
|
|
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_vram(*this, "vram")
|
|
{ }
|
|
|
|
virtual void video_start();
|
|
UINT32 screen_update_hp16500(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
|
|
|
|
required_device<cpu_device> m_maincpu;
|
|
required_shared_ptr<UINT32> m_vram;
|
|
|
|
|
|
DECLARE_WRITE32_MEMBER(palette_w);
|
|
|
|
private:
|
|
UINT32 m_palette[256], m_colors[3], m_count, m_clutoffs;
|
|
};
|
|
|
|
static ADDRESS_MAP_START(hp16500_map, AS_PROGRAM, 32, hp16500_state)
|
|
AM_RANGE(0x00000000, 0x0001ffff) AM_ROM AM_REGION("bios", 0)
|
|
AM_RANGE(0x0020f000, 0x0020f003) AM_WRITE(palette_w)
|
|
AM_RANGE(0x00600000, 0x0063ffff) AM_RAM AM_SHARE("vram")
|
|
AM_RANGE(0x00800000, 0x009fffff) AM_RAM // 284e end of test - d0 = 0 for pass
|
|
ADDRESS_MAP_END
|
|
|
|
void hp16500_state::video_start()
|
|
{
|
|
m_count = 0;
|
|
m_clutoffs = 0;
|
|
memset(m_palette, 0, sizeof(m_palette));
|
|
}
|
|
|
|
WRITE32_MEMBER(hp16500_state::palette_w)
|
|
{
|
|
if (mem_mask == 0xff000000)
|
|
{
|
|
m_clutoffs = (data>>24) & 0xff;
|
|
}
|
|
else if (mem_mask == 0x00ff0000)
|
|
{
|
|
UINT8 tmpcolor = (data>>16) & 0xff;
|
|
|
|
if ((tmpcolor & 0xf0) == 0x00)
|
|
{
|
|
tmpcolor |= (tmpcolor << 4);
|
|
}
|
|
|
|
m_colors[m_count++] = tmpcolor;
|
|
|
|
if (m_count == 3)
|
|
{
|
|
m_palette[m_clutoffs] = rgb_t(m_colors[0], m_colors[1], m_colors[2]);
|
|
m_clutoffs++;
|
|
if (m_clutoffs > 255)
|
|
{
|
|
m_clutoffs = 0;
|
|
}
|
|
m_count = 0;
|
|
}
|
|
}
|
|
}
|
|
|
|
// 4 bpp
|
|
// addr = ((Y * 0xfc0) + 0x360) + (X * 4)
|
|
UINT32 hp16500_state::screen_update_hp16500(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
|
|
{
|
|
UINT32 *scanline;
|
|
int x, y;
|
|
UINT32 pixels;
|
|
|
|
for (y = 0; y < 400; y++)
|
|
{
|
|
scanline = &bitmap.pix32(y);
|
|
|
|
for (x = 0; x < 576/8; x++)
|
|
{
|
|
pixels = m_vram[(y * (288/4)) + x];
|
|
|
|
UINT8 gfx = ((pixels & 0xf0000) >> 12) | (pixels & 15);
|
|
*scanline++ = m_palette[BIT(gfx, 7) ? 2 : 0];
|
|
*scanline++ = m_palette[BIT(gfx, 6) ? 2 : 0];
|
|
*scanline++ = m_palette[BIT(gfx, 5) ? 2 : 0];
|
|
*scanline++ = m_palette[BIT(gfx, 4) ? 2 : 0];
|
|
*scanline++ = m_palette[BIT(gfx, 3) ? 2 : 0];
|
|
*scanline++ = m_palette[BIT(gfx, 2) ? 2 : 0];
|
|
*scanline++ = m_palette[BIT(gfx, 1) ? 2 : 0];
|
|
*scanline++ = m_palette[BIT(gfx, 0) ? 2 : 0];
|
|
#if 0
|
|
*scanline++ = m_palette[((pixels&0xf0000000)>>28)];
|
|
*scanline++ = m_palette[((pixels&0xf000000)>>24)];
|
|
*scanline++ = m_palette[((pixels&0xf00000)>>20)];
|
|
*scanline++ = m_palette[((pixels&0xf0000)>>16)];
|
|
*scanline++ = m_palette[((pixels&0xf000)>>12)];
|
|
*scanline++ = m_palette[((pixels&0xf00)>>8)];
|
|
*scanline++ = m_palette[((pixels&0xf0)>>4)];
|
|
*scanline++ = m_palette[(pixels&0xf)];
|
|
#endif
|
|
}
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
static MACHINE_CONFIG_START( hp16500, hp16500_state )
|
|
/* basic machine hardware */
|
|
MCFG_CPU_ADD("maincpu", M68EC030, 25000000)
|
|
MCFG_CPU_PROGRAM_MAP(hp16500_map)
|
|
|
|
MCFG_SCREEN_ADD("screen", RASTER)
|
|
MCFG_SCREEN_UPDATE_DRIVER(hp16500_state, screen_update_hp16500)
|
|
MCFG_SCREEN_SIZE(576,400)
|
|
MCFG_SCREEN_VISIBLE_AREA(0, 576-1, 0, 400-1)
|
|
MCFG_SCREEN_REFRESH_RATE(60)
|
|
|
|
MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
|
|
MACHINE_CONFIG_END
|
|
|
|
static INPUT_PORTS_START( hp16500 )
|
|
INPUT_PORTS_END
|
|
|
|
ROM_START( hp16500b )
|
|
ROM_REGION32_BE(0x20000, "bios", 0)
|
|
ROM_LOAD32_BYTE( "16500-80014.bin", 0x000000, 0x008000, CRC(35187716) SHA1(82067737892ecd356a5454a43d9ce9b38ac2397f) )
|
|
ROM_LOAD32_BYTE( "16500-80015.bin", 0x000001, 0x008000, CRC(d8d26c1c) SHA1(b5b956c17c9d6e54519a686b5e4aa733b266bf6f) )
|
|
ROM_LOAD32_BYTE( "16500-80016.bin", 0x000002, 0x008000, CRC(61457b39) SHA1(f209315ec22a8ee9d44a0ec009b1afb47794bece) )
|
|
ROM_LOAD32_BYTE( "16500-80017.bin", 0x000003, 0x008000, CRC(e0b1096b) SHA1(426bb9a4756d8087bded4f6b61365d733ffbb09a) )
|
|
ROM_END
|
|
|
|
COMP( 1994, hp16500b, 0, 0, hp16500, hp16500, driver_device, 0, "Hewlett Packard", "HP 16500b", GAME_NOT_WORKING|GAME_NO_SOUND)
|