mirror of
https://github.com/holub/mame
synced 2025-04-19 23:12:11 +03:00
hp9k_3xx updates:
- Preliminary working DIO/DIO-II bus implementation and 98544 video card - Hooked up i8042 I/O microcontroller comms to main CPU - Support medium-res built-in video on 9000/332
This commit is contained in:
parent
fcd0ec717d
commit
469c2bbc4b
@ -17,8 +17,8 @@
|
||||
#define VRAM_SIZE (0x100000)
|
||||
|
||||
ROM_START( hp98544 )
|
||||
ROM_REGION( 0x4000, HP98544_ROM_REGION, ROMREGION_ERASEFF | ROMREGION_BE | ROMREGION_32BIT )
|
||||
ROM_LOAD16_BYTE( "98544_1818-1999.bin", 0x000001, 0x002000, CRC(8c7d6480) SHA1(d2bcfd39452c38bc652df39f84c7041cfdf6bd51) )
|
||||
ROM_REGION( 0x2000, HP98544_ROM_REGION, 0 )
|
||||
ROM_LOAD( "98544_1818-1999.bin", 0x000000, 0x002000, CRC(8c7d6480) SHA1(d2bcfd39452c38bc652df39f84c7041cfdf6bd51) )
|
||||
ROM_END
|
||||
|
||||
//**************************************************************************
|
||||
@ -77,11 +77,13 @@ void dio16_98544_device::device_start()
|
||||
// set_nubus_device makes m_slot valid
|
||||
set_dio_device();
|
||||
|
||||
uint8_t *rom = device().machine().root_device().memregion(this->subtag(HP98544_ROM_REGION).c_str())->base();
|
||||
m_rom = device().machine().root_device().memregion(this->subtag(HP98544_ROM_REGION).c_str())->base();
|
||||
|
||||
m_vram.resize(VRAM_SIZE);
|
||||
m_dio->install_bank(0x200000, 0x2fffff, "bank_98544", reinterpret_cast<uint8_t *>(&m_vram[0]));
|
||||
m_dio->install_bank(0x580000, 0x583fff, "rom_98544", rom);
|
||||
m_dio->install_memory(0x200000, 0x2fffff, read16_delegate(FUNC(dio16_98544_device::vram_r), this),
|
||||
write16_delegate(FUNC(dio16_98544_device::vram_w), this));
|
||||
m_dio->install_memory(0x560000, 0x563fff, read16_delegate(FUNC(dio16_98544_device::rom_r), this),
|
||||
write16_delegate(FUNC(dio16_98544_device::rom_w), this));
|
||||
}
|
||||
|
||||
//-------------------------------------------------
|
||||
@ -96,21 +98,40 @@ void dio16_98544_device::device_reset()
|
||||
m_palette[0] = rgb_t(0, 0, 0);
|
||||
}
|
||||
|
||||
READ16_MEMBER(dio16_98544_device::vram_r)
|
||||
{
|
||||
return m_vram[offset];
|
||||
}
|
||||
|
||||
WRITE16_MEMBER(dio16_98544_device::vram_w)
|
||||
{
|
||||
COMBINE_DATA(&m_vram[offset]);
|
||||
}
|
||||
|
||||
READ16_MEMBER(dio16_98544_device::rom_r)
|
||||
{
|
||||
return 0xff00 | m_rom[offset];
|
||||
}
|
||||
|
||||
// the video chip registers live here, so these writes are valid
|
||||
WRITE16_MEMBER(dio16_98544_device::rom_w)
|
||||
{
|
||||
printf("rom_w: %02x at %x (mask %04x)\n", data, offset, mem_mask);
|
||||
}
|
||||
|
||||
uint32_t dio16_98544_device::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
|
||||
{
|
||||
uint32_t *scanline;
|
||||
int x, y;
|
||||
uint32_t pixels;
|
||||
|
||||
|
||||
for (y = 0; y < 768; y++)
|
||||
{
|
||||
scanline = &bitmap.pix32(y);
|
||||
for (x = 0; x < 1024/4; x++)
|
||||
for (x = 0; x < 1024/2; x++)
|
||||
{
|
||||
pixels = m_vram[((y * 256) + x)];
|
||||
pixels = m_vram[(y * 512) + x];
|
||||
|
||||
*scanline++ = m_palette[(pixels>>24) & 1];
|
||||
*scanline++ = m_palette[(pixels>>16) & 1];
|
||||
*scanline++ = m_palette[(pixels>>8) & 1];
|
||||
*scanline++ = m_palette[(pixels & 1)];
|
||||
}
|
||||
|
@ -22,6 +22,11 @@ public:
|
||||
// construction/destruction
|
||||
dio16_98544_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
|
||||
|
||||
DECLARE_READ16_MEMBER(vram_r);
|
||||
DECLARE_WRITE16_MEMBER(vram_w);
|
||||
DECLARE_READ16_MEMBER(rom_r);
|
||||
DECLARE_WRITE16_MEMBER(rom_w);
|
||||
|
||||
protected:
|
||||
dio16_98544_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
|
||||
|
||||
@ -36,8 +41,9 @@ protected:
|
||||
private:
|
||||
uint32_t screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
|
||||
|
||||
std::vector<uint32_t> m_vram;
|
||||
std::vector<uint16_t> m_vram;
|
||||
uint32_t m_palette[2];
|
||||
uint8_t *m_rom;
|
||||
};
|
||||
|
||||
// device type definition
|
||||
|
@ -48,9 +48,12 @@ void dio16_slot_device::static_set_dio16_slot(device_t &device, device_t *owner,
|
||||
void dio16_slot_device::device_start()
|
||||
{
|
||||
device_dio16_card_interface *dev = dynamic_cast<device_dio16_card_interface *>(get_card_device());
|
||||
|
||||
const device_dio32_card_interface *intf;
|
||||
if (get_card_device() && get_card_device()->interface(intf))
|
||||
{
|
||||
fatalerror("DIO32 device in DIO16 slot\n");
|
||||
}
|
||||
|
||||
if (dev) device_dio16_card_interface::static_set_diobus(*dev,m_owner->subdevice(m_dio_tag));
|
||||
}
|
||||
@ -120,9 +123,6 @@ dio16_device::dio16_device(const machine_config &mconfig, const char *tag, devic
|
||||
|
||||
dio16_device::dio16_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock) :
|
||||
device_t(mconfig, type, tag, owner, clock),
|
||||
device_memory_interface(mconfig, *this),
|
||||
m_program_config("DIO 16-bit program", ENDIANNESS_LITTLE, 8, 24, 0, nullptr),
|
||||
m_program32_config("DIO-II 32-bit program", ENDIANNESS_LITTLE, 16, 32, 0, nullptr),
|
||||
m_maincpu(nullptr),
|
||||
m_prgspace(nullptr),
|
||||
m_out_irq3_cb(*this),
|
||||
@ -159,55 +159,21 @@ void dio16_device::device_reset()
|
||||
}
|
||||
|
||||
|
||||
void dio16_device::install_space(address_spacenum spacenum, offs_t start, offs_t end, read8_delegate rhandler, write8_delegate whandler)
|
||||
void dio16_device::install_memory(offs_t start, offs_t end, read16_delegate rhandler, write16_delegate whandler)
|
||||
{
|
||||
int buswidth;
|
||||
address_space *space;
|
||||
|
||||
if (spacenum == AS_PROGRAM)
|
||||
{
|
||||
space = m_prgspace;
|
||||
buswidth = m_prgwidth;
|
||||
}
|
||||
else
|
||||
{
|
||||
fatalerror("Unknown space passed to dio16_device::install_space!\n");
|
||||
}
|
||||
|
||||
switch(buswidth)
|
||||
switch (m_prgwidth)
|
||||
{
|
||||
case 16:
|
||||
space->install_readwrite_handler(start, end, rhandler, whandler, 0xffff);
|
||||
m_prgspace->install_readwrite_handler(start, end, rhandler, whandler);
|
||||
break;
|
||||
case 32:
|
||||
if ((start % 4) == 0) {
|
||||
if ((end-start)==1) {
|
||||
space->install_readwrite_handler(start, end+2, rhandler, whandler, 0x0000ffff);
|
||||
} else {
|
||||
space->install_readwrite_handler(start, end, rhandler, whandler, 0xffffffff);
|
||||
}
|
||||
} else {
|
||||
// we handle just misaligned by 2
|
||||
space->install_readwrite_handler(start-2, end, rhandler, whandler, 0xffff0000);
|
||||
}
|
||||
m_prgspace->install_readwrite_handler(start, end, rhandler, whandler, 0xffffffff);
|
||||
break;
|
||||
default:
|
||||
fatalerror("DIO16: Bus width %d not supported\n", buswidth);
|
||||
fatalerror("DIO: Bus width %d not supported\n", m_prgwidth);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void dio16_device::install_memory(offs_t start, offs_t end, read8_delegate rhandler, write8_delegate whandler)
|
||||
{
|
||||
install_space(AS_PROGRAM, start, end, rhandler, whandler);
|
||||
}
|
||||
|
||||
void dio16_device::install_device(offs_t start, offs_t end, read8_delegate rhandler, write8_delegate whandler)
|
||||
{
|
||||
install_space(AS_IO, start, end, rhandler, whandler);
|
||||
}
|
||||
|
||||
|
||||
void dio16_device::install_bank(offs_t start, offs_t end, const char *tag, uint8_t *data)
|
||||
{
|
||||
m_prgspace->install_readwrite_bank(start, end, 0, tag );
|
||||
@ -219,17 +185,10 @@ void dio16_device::unmap_bank(offs_t start, offs_t end)
|
||||
m_prgspace->unmap_readwrite(start, end);
|
||||
}
|
||||
|
||||
void dio16_device::install_rom(device_t *dev, offs_t start, offs_t end, const char *tag, const char *region)
|
||||
void dio16_device::install_rom(offs_t start, offs_t end, const char *tag, uint8_t *data)
|
||||
{
|
||||
if (machine().root_device().memregion("dio")) {
|
||||
uint8_t *src = dev->memregion(region)->base();
|
||||
uint8_t *dest = machine().root_device().memregion("dio")->base() + start - 0xc0000;
|
||||
memcpy(dest,src, end - start + 1);
|
||||
} else {
|
||||
m_prgspace->install_read_bank(start, end, 0, tag);
|
||||
m_prgspace->unmap_write(start, end);
|
||||
machine().root_device().membank(m_prgspace->device().siblingtag(tag).c_str())->set_base(machine().root_device().memregion(dev->subtag(region).c_str())->base());
|
||||
}
|
||||
m_prgspace->install_read_bank(start, end, 0, tag );
|
||||
machine().root_device().membank(m_prgspace->device().siblingtag(tag).c_str())->set_base(data);
|
||||
}
|
||||
|
||||
void dio16_device::unmap_rom(offs_t start, offs_t end)
|
||||
|
@ -78,8 +78,7 @@ DECLARE_DEVICE_TYPE(DIO16_SLOT, dio16_slot_device)
|
||||
|
||||
class device_dio16_card_interface;
|
||||
// ======================> dio16_device
|
||||
class dio16_device : public device_t,
|
||||
public device_memory_interface
|
||||
class dio16_device : public device_t
|
||||
{
|
||||
public:
|
||||
// construction/destruction
|
||||
@ -91,22 +90,14 @@ public:
|
||||
template <class Object> static devcb_base &set_out_irq5_callback(device_t &device, Object &&cb) { return downcast<dio16_device &>(device).m_out_irq5_cb.set_callback(std::forward<Object>(cb)); }
|
||||
template <class Object> static devcb_base &set_out_irq6_callback(device_t &device, Object &&cb) { return downcast<dio16_device &>(device).m_out_irq6_cb.set_callback(std::forward<Object>(cb)); }
|
||||
|
||||
// for DIO16, put the 16-bit configs in the primary slots and the 32-bit configs in the secondary
|
||||
virtual const address_space_config *memory_space_config(address_spacenum spacenum) const override
|
||||
{
|
||||
switch (spacenum)
|
||||
{
|
||||
case AS_PROGRAM: return &m_program_config;
|
||||
case AS_DATA: return &m_program32_config;
|
||||
default: return nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
void install_device(offs_t start, offs_t end, read8_delegate rhandler, write8_delegate whandler);
|
||||
|
||||
void install_memory(offs_t start, offs_t end, read16_delegate rhandler, write16_delegate whandler);
|
||||
|
||||
// DANGER: these will currently produce different results for a DIO-I card on DIO-I and DIO-II systems
|
||||
// due to the varying bus widths. Using all install_memory() shields you from this problem.
|
||||
// either know what you're doing (m_prgwidth is available to cards for this purpose) or
|
||||
// only use these for 32-bit DIO-II cards.
|
||||
void install_bank(offs_t start, offs_t end, const char *tag, uint8_t *data);
|
||||
void install_rom(device_t *dev, offs_t start, offs_t end, const char *tag, const char *region);
|
||||
void install_memory(offs_t start, offs_t end, read8_delegate rhandler, write8_delegate whandler);
|
||||
void install_rom(offs_t start, offs_t end, const char *tag, uint8_t *data);
|
||||
|
||||
void unmap_bank(offs_t start, offs_t end);
|
||||
void unmap_rom(offs_t start, offs_t end);
|
||||
@ -117,7 +108,7 @@ public:
|
||||
DECLARE_WRITE_LINE_MEMBER( irq5_w );
|
||||
DECLARE_WRITE_LINE_MEMBER( irq6_w );
|
||||
|
||||
const address_space_config m_program_config, m_program32_config;
|
||||
int m_prgwidth;
|
||||
|
||||
protected:
|
||||
dio16_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
|
||||
@ -133,7 +124,6 @@ protected:
|
||||
|
||||
// address spaces
|
||||
address_space *m_prgspace;
|
||||
int m_prgwidth;
|
||||
|
||||
devcb_write_line m_out_irq3_cb;
|
||||
devcb_write_line m_out_irq4_cb;
|
||||
@ -204,17 +194,6 @@ public:
|
||||
|
||||
void install16_device(offs_t start, offs_t end, read16_delegate rhandler, write16_delegate whandler);
|
||||
|
||||
// for DIO32, put the 32-bit configs in the primary slots and the 16-bit configs in the secondary
|
||||
virtual const address_space_config *memory_space_config(address_spacenum spacenum) const override
|
||||
{
|
||||
switch (spacenum)
|
||||
{
|
||||
case AS_PROGRAM: return &m_program32_config;
|
||||
case AS_DATA: return &m_program_config;
|
||||
default: return nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
protected:
|
||||
// device-level overrides
|
||||
|
@ -3,6 +3,9 @@
|
||||
/***************************************************************************
|
||||
|
||||
hp9k3xx.c: preliminary driver for HP9000 300 Series (aka HP9000/3xx)
|
||||
By R. Belmont
|
||||
|
||||
TODO: Add DIO/DIO-II slot capability and modularize the video cards
|
||||
|
||||
Currently supporting:
|
||||
|
||||
@ -23,6 +26,10 @@
|
||||
340:
|
||||
MC68030 CPU @ 16.67 MHz w/built-in MMU
|
||||
MC68881 FPU
|
||||
|
||||
370:
|
||||
MC68030 CPU @ 33 MHz w/built-in MMU
|
||||
MC68881 FPU
|
||||
|
||||
380:
|
||||
MC68040 CPU @ 25 MHz w/built-in MMU and FPU
|
||||
@ -49,10 +56,14 @@
|
||||
|
||||
#include "emu.h"
|
||||
#include "cpu/m68000/m68000.h"
|
||||
#include "cpu/mcs48/mcs48.h"
|
||||
#include "machine/6840ptm.h"
|
||||
#include "bus/hp_dio/hp_dio.h"
|
||||
#include "bus/hp_dio/hp98544.h"
|
||||
#include "screen.h"
|
||||
|
||||
#define MAINCPU_TAG "maincpu"
|
||||
#define IOCPU_TAG "iocpu"
|
||||
#define PTM6840_TAG "ptm"
|
||||
|
||||
class hp9k3xx_state : public driver_device
|
||||
@ -61,63 +72,64 @@ public:
|
||||
hp9k3xx_state(const machine_config &mconfig, device_type type, const char *tag)
|
||||
: driver_device(mconfig, type, tag),
|
||||
m_maincpu(*this, MAINCPU_TAG),
|
||||
m_iocpu(*this, IOCPU_TAG),
|
||||
m_vram16(*this, "vram16"),
|
||||
m_vram(*this, "vram")
|
||||
{ }
|
||||
|
||||
required_device<cpu_device> m_maincpu;
|
||||
optional_device<i8042_device> m_iocpu;
|
||||
virtual void machine_reset() override;
|
||||
|
||||
optional_shared_ptr<uint16_t> m_vram16;
|
||||
optional_shared_ptr<uint32_t> m_vram;
|
||||
|
||||
uint32_t screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
|
||||
uint32_t hp98544_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
|
||||
uint32_t hp98544_16_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
|
||||
uint32_t hp_medres_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
|
||||
|
||||
DECLARE_READ16_MEMBER(buserror16_r);
|
||||
DECLARE_WRITE16_MEMBER(buserror16_w);
|
||||
DECLARE_READ32_MEMBER(buserror_r);
|
||||
DECLARE_WRITE32_MEMBER(buserror_w);
|
||||
DECLARE_WRITE32_MEMBER(led_w)
|
||||
{
|
||||
if (mem_mask != 0x000000ff)
|
||||
{
|
||||
return;
|
||||
}
|
||||
#if 0
|
||||
printf("LED: %02x (", data&0xff);
|
||||
for (int i = 7; i >= 0; i--)
|
||||
{
|
||||
if (data & (1 << i))
|
||||
{
|
||||
printf("o");
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("*");
|
||||
}
|
||||
}
|
||||
printf(")\n");
|
||||
#endif
|
||||
}
|
||||
|
||||
private:
|
||||
bool m_in_buserr;
|
||||
uint32_t m_last_buserr_pc;
|
||||
};
|
||||
|
||||
uint32_t hp9k3xx_state::hp98544_16_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
|
||||
{
|
||||
uint32_t *scanline;
|
||||
int x, y;
|
||||
uint16_t pixels;
|
||||
uint32_t m_palette[2] = { 0x00000000, 0xffffffff };
|
||||
|
||||
for (y = 0; y < 768; y++)
|
||||
{
|
||||
scanline = &bitmap.pix32(y);
|
||||
for (x = 0; x < 1024/2; x++)
|
||||
{
|
||||
pixels = m_vram16[(y * 512) + x];
|
||||
|
||||
*scanline++ = m_palette[(pixels>>8) & 1];
|
||||
*scanline++ = m_palette[(pixels & 1)];
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
uint32_t hp9k3xx_state::hp98544_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
|
||||
uint32_t hp9k3xx_state::hp_medres_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
|
||||
{
|
||||
uint32_t *scanline;
|
||||
int x, y;
|
||||
uint32_t pixels;
|
||||
uint32_t m_palette[2] = { 0x00000000, 0xffffffff };
|
||||
|
||||
for (y = 0; y < 768; y++)
|
||||
for (y = 0; y < 390; y++)
|
||||
{
|
||||
scanline = &bitmap.pix32(y);
|
||||
for (x = 0; x < 1024/4; x++)
|
||||
for (x = 0; x < 512/4; x++)
|
||||
{
|
||||
pixels = m_vram[(y * 256) + x];
|
||||
|
||||
@ -133,7 +145,9 @@ uint32_t hp9k3xx_state::hp98544_update(screen_device &screen, bitmap_rgb32 &bitm
|
||||
|
||||
// shared mappings for all 9000/3xx systems
|
||||
static ADDRESS_MAP_START(hp9k3xx_common, AS_PROGRAM, 32, hp9k3xx_state)
|
||||
AM_RANGE(0x00000000, 0x0001ffff) AM_ROM AM_REGION("maincpu",0) AM_WRITENOP // writes to 1fffc are the LED
|
||||
AM_RANGE(0x00000000, 0x0001ffff) AM_ROM AM_REGION("maincpu",0) AM_WRITE(led_w) // writes to 1fffc are the LED
|
||||
|
||||
AM_RANGE(0x00428000, 0x00428003) AM_DEVREADWRITE8(IOCPU_TAG, upi41_cpu_device, upi41_master_r, upi41_master_w, 0x00ff00ff)
|
||||
|
||||
AM_RANGE(0x00500000, 0x0050000f) AM_RAM // this is sufficient to pass the DMA test for now
|
||||
|
||||
@ -153,18 +167,12 @@ static ADDRESS_MAP_START(hp9k310_map, AS_PROGRAM, 16, hp9k3xx_state)
|
||||
|
||||
AM_RANGE(0x5f8000, 0x5f800f) AM_DEVREADWRITE8(PTM6840_TAG, ptm6840_device, read, write, 0x00ff)
|
||||
|
||||
AM_RANGE(0x200000, 0x2fffff) AM_RAM AM_SHARE("vram16") // 98544 mono framebuffer
|
||||
AM_RANGE(0x560000, 0x563fff) AM_ROM AM_REGION("graphics", 0x0000) // 98544 mono ROM
|
||||
|
||||
AM_RANGE(0x700000, 0x7fffff) AM_READWRITE(buserror16_r, buserror16_w)
|
||||
AM_RANGE(0x800000, 0xffffff) AM_RAM
|
||||
ADDRESS_MAP_END
|
||||
|
||||
// 9000/320
|
||||
static ADDRESS_MAP_START(hp9k320_map, AS_PROGRAM, 32, hp9k3xx_state)
|
||||
AM_RANGE(0x00200000, 0x002fffff) AM_RAM AM_SHARE("vram") // 98544 mono framebuffer
|
||||
AM_RANGE(0x00560000, 0x00563fff) AM_ROM AM_REGION("graphics", 0x0000) // 98544 mono ROM
|
||||
|
||||
AM_RANGE(0xffe00000, 0xffefffff) AM_READWRITE(buserror_r, buserror_w)
|
||||
AM_RANGE(0xfff00000, 0xffffffff) AM_RAM
|
||||
|
||||
@ -173,6 +181,14 @@ ADDRESS_MAP_END
|
||||
|
||||
// 9000/330 and 9000/340
|
||||
static ADDRESS_MAP_START(hp9k330_map, AS_PROGRAM, 32, hp9k3xx_state)
|
||||
AM_RANGE(0xffb00000, 0xffbfffff) AM_READWRITE(buserror_r, buserror_w)
|
||||
AM_RANGE(0xffc00000, 0xffffffff) AM_RAM
|
||||
|
||||
AM_IMPORT_FROM(hp9k3xx_common)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
// 9000/332, with built-in medium-res video
|
||||
static ADDRESS_MAP_START(hp9k332_map, AS_PROGRAM, 32, hp9k3xx_state)
|
||||
AM_RANGE(0x00200000, 0x002fffff) AM_RAM AM_SHARE("vram") // 98544 mono framebuffer
|
||||
AM_RANGE(0x00560000, 0x00563fff) AM_ROM AM_REGION("graphics", 0x0000) // 98544 mono ROM
|
||||
|
||||
@ -184,23 +200,35 @@ ADDRESS_MAP_END
|
||||
|
||||
// 9000/370 - 8 MB RAM standard
|
||||
static ADDRESS_MAP_START(hp9k370_map, AS_PROGRAM, 32, hp9k3xx_state)
|
||||
AM_RANGE(0x00200000, 0x002fffff) AM_RAM AM_SHARE("vram") // 98544 mono framebuffer
|
||||
AM_RANGE(0x00560000, 0x00563fff) AM_ROM AM_REGION("graphics", 0x0000) // 98544 mono ROM
|
||||
|
||||
AM_RANGE(0xff700000, 0xff7fffff) AM_READWRITE(buserror_r, buserror_w)
|
||||
AM_RANGE(0xff800000, 0xffffffff) AM_RAM
|
||||
|
||||
AM_IMPORT_FROM(hp9k3xx_common)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
// 9000/380 - '040
|
||||
static ADDRESS_MAP_START(hp9k380_map, AS_PROGRAM, 32, hp9k3xx_state)
|
||||
AM_RANGE(0x0051a000, 0x0051afff) AM_READWRITE(buserror_r, buserror_w) // no "Alpha display"
|
||||
|
||||
AM_RANGE(0xc0000000, 0xff7fffff) AM_READWRITE(buserror_r, buserror_w)
|
||||
AM_RANGE(0xff800000, 0xffffffff) AM_RAM
|
||||
|
||||
AM_IMPORT_FROM(hp9k3xx_common)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
// 9000/382 - onboard VGA compatible video (where?)
|
||||
static ADDRESS_MAP_START(hp9k382_map, AS_PROGRAM, 32, hp9k3xx_state)
|
||||
AM_RANGE(0xffb00000, 0xffbfffff) AM_READWRITE(buserror_r, buserror_w)
|
||||
AM_RANGE(0xffc00000, 0xffffffff) AM_RAM
|
||||
|
||||
AM_RANGE(0x0051a000, 0x0051afff) AM_READWRITE(buserror_r, buserror_w) // no "Alpha display"
|
||||
|
||||
AM_IMPORT_FROM(hp9k3xx_common)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START(iocpu_map, AS_PROGRAM, 8, hp9k3xx_state)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
uint32_t hp9k3xx_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
|
||||
{
|
||||
return 0;
|
||||
@ -287,109 +315,90 @@ WRITE32_MEMBER(hp9k3xx_state::buserror_w)
|
||||
}
|
||||
}
|
||||
|
||||
static SLOT_INTERFACE_START(dio16_cards)
|
||||
SLOT_INTERFACE("98544", HPDIO_98544) /* 98544 High Resolution Monochrome Card */
|
||||
SLOT_INTERFACE_END
|
||||
|
||||
static MACHINE_CONFIG_START( hp9k310 )
|
||||
/* basic machine hardware */
|
||||
MCFG_CPU_ADD(MAINCPU_TAG, M68010, 10000000)
|
||||
MCFG_CPU_PROGRAM_MAP(hp9k310_map)
|
||||
|
||||
MCFG_CPU_ADD(IOCPU_TAG, I8042, 5000000)
|
||||
MCFG_CPU_PROGRAM_MAP(iocpu_map)
|
||||
|
||||
MCFG_DEVICE_ADD(PTM6840_TAG, PTM6840, 250000) // from oscillator module next to the 6840
|
||||
MCFG_PTM6840_EXTERNAL_CLOCKS(250000.0f, 250000.0f, 250000.0f)
|
||||
|
||||
MCFG_SCREEN_ADD( "screen", RASTER)
|
||||
MCFG_SCREEN_UPDATE_DRIVER(hp9k3xx_state, hp98544_16_update)
|
||||
MCFG_SCREEN_SIZE(1024,768)
|
||||
MCFG_SCREEN_VISIBLE_AREA(0, 1024-1, 0, 768-1)
|
||||
MCFG_SCREEN_REFRESH_RATE(70)
|
||||
MCFG_DEVICE_ADD("diobus", DIO16, 0)
|
||||
MCFG_DIO16_CPU(":maincpu")
|
||||
MCFG_DIO16_SLOT_ADD("diobus", "sl1", dio16_cards, "98544", true)
|
||||
MCFG_DIO16_SLOT_ADD("diobus", "sl2", dio16_cards, nullptr, false)
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
static MACHINE_CONFIG_START( hp9k320 )
|
||||
/* basic machine hardware */
|
||||
MCFG_CPU_ADD(MAINCPU_TAG, M68020FPU, 16670000)
|
||||
MCFG_CPU_PROGRAM_MAP(hp9k320_map)
|
||||
|
||||
|
||||
MCFG_CPU_ADD(IOCPU_TAG, I8042, 5000000)
|
||||
MCFG_CPU_PROGRAM_MAP(iocpu_map)
|
||||
|
||||
MCFG_DEVICE_ADD(PTM6840_TAG, PTM6840, 250000) // from oscillator module next to the 6840
|
||||
MCFG_PTM6840_EXTERNAL_CLOCKS(250000.0f, 250000.0f, 250000.0f)
|
||||
|
||||
MCFG_SCREEN_ADD( "screen", RASTER)
|
||||
MCFG_SCREEN_UPDATE_DRIVER(hp9k3xx_state, hp98544_update)
|
||||
MCFG_SCREEN_SIZE(1024,768)
|
||||
MCFG_SCREEN_VISIBLE_AREA(0, 1024-1, 0, 768-1)
|
||||
MCFG_SCREEN_REFRESH_RATE(70)
|
||||
MCFG_DEVICE_ADD("diobus", DIO32, 0)
|
||||
MCFG_DIO32_CPU(":maincpu")
|
||||
MCFG_DIO32_SLOT_ADD("diobus", "sl1", dio16_cards, "98544", true)
|
||||
MCFG_DIO32_SLOT_ADD("diobus", "sl2", dio16_cards, nullptr, false)
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
static MACHINE_CONFIG_START( hp9k330 )
|
||||
static MACHINE_CONFIG_DERIVED( hp9k330, hp9k320 )
|
||||
/* basic machine hardware */
|
||||
MCFG_CPU_REPLACE(MAINCPU_TAG, M68020PMMU, 16670000)
|
||||
MCFG_CPU_PROGRAM_MAP(hp9k330_map)
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
static MACHINE_CONFIG_START( hp9k332 )
|
||||
/* basic machine hardware */
|
||||
MCFG_CPU_ADD(MAINCPU_TAG, M68020PMMU, 16670000)
|
||||
MCFG_CPU_PROGRAM_MAP(hp9k330_map)
|
||||
MCFG_CPU_PROGRAM_MAP(hp9k332_map)
|
||||
|
||||
MCFG_CPU_ADD(IOCPU_TAG, I8042, 5000000)
|
||||
MCFG_CPU_PROGRAM_MAP(iocpu_map)
|
||||
|
||||
MCFG_DEVICE_ADD(PTM6840_TAG, PTM6840, 250000) // from oscillator module next to the 6840
|
||||
MCFG_PTM6840_EXTERNAL_CLOCKS(250000.0f, 250000.0f, 250000.0f)
|
||||
|
||||
MCFG_SCREEN_ADD( "screen", RASTER)
|
||||
MCFG_SCREEN_UPDATE_DRIVER(hp9k3xx_state, hp98544_update)
|
||||
MCFG_SCREEN_SIZE(1024,768)
|
||||
MCFG_SCREEN_VISIBLE_AREA(0, 1024-1, 0, 768-1)
|
||||
MCFG_SCREEN_UPDATE_DRIVER(hp9k3xx_state, hp_medres_update)
|
||||
MCFG_SCREEN_SIZE(512,390)
|
||||
MCFG_SCREEN_VISIBLE_AREA(0, 512-1, 0, 390-1)
|
||||
MCFG_SCREEN_REFRESH_RATE(70)
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
static MACHINE_CONFIG_START( hp9k340 )
|
||||
static MACHINE_CONFIG_DERIVED( hp9k340, hp9k320 )
|
||||
/* basic machine hardware */
|
||||
MCFG_CPU_ADD(MAINCPU_TAG, M68030, 16670000)
|
||||
MCFG_CPU_REPLACE(MAINCPU_TAG, M68030, 16670000)
|
||||
MCFG_CPU_PROGRAM_MAP(hp9k330_map)
|
||||
|
||||
MCFG_DEVICE_ADD(PTM6840_TAG, PTM6840, 250000) // from oscillator module next to the 6840
|
||||
MCFG_PTM6840_EXTERNAL_CLOCKS(250000.0f, 250000.0f, 250000.0f)
|
||||
|
||||
MCFG_SCREEN_ADD( "screen", RASTER)
|
||||
MCFG_SCREEN_UPDATE_DRIVER(hp9k3xx_state, hp98544_update)
|
||||
MCFG_SCREEN_SIZE(1024,768)
|
||||
MCFG_SCREEN_VISIBLE_AREA(0, 1024-1, 0, 768-1)
|
||||
MCFG_SCREEN_REFRESH_RATE(70)
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
static MACHINE_CONFIG_START( hp9k370 )
|
||||
static MACHINE_CONFIG_DERIVED( hp9k370, hp9k320 )
|
||||
/* basic machine hardware */
|
||||
MCFG_CPU_ADD(MAINCPU_TAG, M68030, 33000000)
|
||||
MCFG_CPU_REPLACE(MAINCPU_TAG, M68030, 33000000)
|
||||
MCFG_CPU_PROGRAM_MAP(hp9k370_map)
|
||||
|
||||
MCFG_DEVICE_ADD(PTM6840_TAG, PTM6840, 250000) // from oscillator module next to the 6840
|
||||
MCFG_PTM6840_EXTERNAL_CLOCKS(250000.0f, 250000.0f, 250000.0f)
|
||||
|
||||
MCFG_SCREEN_ADD( "screen", RASTER)
|
||||
MCFG_SCREEN_UPDATE_DRIVER(hp9k3xx_state, hp98544_update)
|
||||
MCFG_SCREEN_SIZE(1024,768)
|
||||
MCFG_SCREEN_VISIBLE_AREA(0, 1024-1, 0, 768-1)
|
||||
MCFG_SCREEN_REFRESH_RATE(70)
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
static MACHINE_CONFIG_START( hp9k380 )
|
||||
static MACHINE_CONFIG_DERIVED( hp9k380, hp9k320 )
|
||||
/* basic machine hardware */
|
||||
MCFG_CPU_ADD(MAINCPU_TAG, M68040, 25000000) // 25 MHz? 33?
|
||||
MCFG_CPU_PROGRAM_MAP(hp9k330_map)
|
||||
|
||||
MCFG_DEVICE_ADD(PTM6840_TAG, PTM6840, 250000) // from oscillator module next to the 6840
|
||||
MCFG_PTM6840_EXTERNAL_CLOCKS(250000.0f, 250000.0f, 250000.0f)
|
||||
|
||||
MCFG_SCREEN_ADD( "screen", RASTER)
|
||||
MCFG_SCREEN_UPDATE_DRIVER(hp9k3xx_state, hp98544_update)
|
||||
MCFG_SCREEN_SIZE(1024,768)
|
||||
MCFG_SCREEN_VISIBLE_AREA(0, 1024-1, 0, 768-1)
|
||||
MCFG_SCREEN_REFRESH_RATE(70)
|
||||
MCFG_CPU_REPLACE(MAINCPU_TAG, M68040, 25000000)
|
||||
MCFG_CPU_PROGRAM_MAP(hp9k380_map)
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
static MACHINE_CONFIG_START( hp9k382 )
|
||||
static MACHINE_CONFIG_DERIVED( hp9k382, hp9k320 )
|
||||
/* basic machine hardware */
|
||||
MCFG_CPU_ADD(MAINCPU_TAG, M68040, 25000000) // 25 MHz? 33?
|
||||
MCFG_CPU_REPLACE(MAINCPU_TAG, M68040, 25000000)
|
||||
MCFG_CPU_PROGRAM_MAP(hp9k382_map)
|
||||
|
||||
MCFG_DEVICE_ADD(PTM6840_TAG, PTM6840, 250000) // from oscillator module next to the 6840
|
||||
MCFG_PTM6840_EXTERNAL_CLOCKS(250000.0f, 250000.0f, 250000.0f)
|
||||
|
||||
MCFG_SCREEN_ADD( "screen", RASTER)
|
||||
MCFG_SCREEN_UPDATE_DRIVER(hp9k3xx_state, screen_update)
|
||||
MCFG_SCREEN_SIZE(1024,768)
|
||||
MCFG_SCREEN_VISIBLE_AREA(0, 1024-1, 0, 768-1)
|
||||
MCFG_SCREEN_REFRESH_RATE(70)
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
ROM_START( hp9k310 )
|
||||
@ -397,7 +406,7 @@ ROM_START( hp9k310 )
|
||||
ROM_LOAD16_BYTE( "1818-3771.bin", 0x000001, 0x008000, CRC(b9e4e3ad) SHA1(ed6f1fad94a15d95362701dbe124b52877fc3ec4) )
|
||||
ROM_LOAD16_BYTE( "1818-3772.bin", 0x000000, 0x008000, CRC(a3665919) SHA1(ec1bc7e5b7990a1b09af947a06401e8ed3cb0516) )
|
||||
|
||||
ROM_REGION( 0x800, "mcu", 0 )
|
||||
ROM_REGION( 0x800, IOCPU_TAG, 0 )
|
||||
ROM_LOAD( "1820-4784_1.bin", 0x000000, 0x000800, CRC(e929044a) SHA1(90849a10bdb8c6e38e73ce027c9c0ad8b3956b1b) )
|
||||
ROM_LOAD( "1820-4784_2.bin", 0x000000, 0x000800, CRC(8defcf50) SHA1(d3abfea468a43db7c2369500a3e390e77a8e22e6) )
|
||||
|
||||
@ -412,8 +421,8 @@ ROM_START( hp9k320 )
|
||||
ROM_LOAD16_BYTE( "5061-6540.bin", 0x008001, 0x004000, CRC(4f6796d6) SHA1(fd254897ac1afb8628f40ea93213f60a082c8d36) )
|
||||
ROM_LOAD16_BYTE( "5061-6541.bin", 0x008000, 0x004000, CRC(39d32998) SHA1(6de1bda75187b0878c03c074942b807cf2924f0e) )
|
||||
|
||||
ROM_REGION( 0x4000, "graphics", ROMREGION_ERASEFF | ROMREGION_BE | ROMREGION_32BIT )
|
||||
ROM_LOAD16_BYTE( "98544_1818-1999.bin", 0x000001, 0x002000, CRC(8c7d6480) SHA1(d2bcfd39452c38bc652df39f84c7041cfdf6bd51) )
|
||||
ROM_REGION( 0x800, IOCPU_TAG, 0 )
|
||||
ROM_LOAD( "1820-4874.bin", 0x000000, 0x000800, CRC(e929044a) SHA1(90849a10bdb8c6e38e73ce027c9c0ad8b3956b1b) )
|
||||
ROM_END
|
||||
|
||||
ROM_START( hp9k330 )
|
||||
@ -421,8 +430,20 @@ ROM_START( hp9k330 )
|
||||
ROM_LOAD16_BYTE( "1818-4416.bin", 0x000000, 0x010000, CRC(cd71e85e) SHA1(3e83a80682f733417fdc3720410e45a2cfdcf869) )
|
||||
ROM_LOAD16_BYTE( "1818-4417.bin", 0x000001, 0x010000, CRC(374d49db) SHA1(a12cbf6c151e2f421da4571000b5dffa3ef403b3) )
|
||||
|
||||
ROM_REGION( 0x800, IOCPU_TAG, 0 )
|
||||
ROM_LOAD( "1820-4874.bin", 0x000000, 0x000800, CRC(e929044a) SHA1(90849a10bdb8c6e38e73ce027c9c0ad8b3956b1b) )
|
||||
ROM_END
|
||||
|
||||
ROM_START( hp9k332 )
|
||||
ROM_REGION( 0x20000, MAINCPU_TAG, 0 )
|
||||
ROM_LOAD16_BYTE( "1818-4796.bin", 0x000000, 0x010000, CRC(8a7642da) SHA1(7ba12adcea85916d18b021255391bec806c32e94) )
|
||||
ROM_LOAD16_BYTE( "1818-4797.bin", 0x000001, 0x010000, CRC(98129eb1) SHA1(f3451a854060f1be1bee9f17c5c198b4b1cd61ac) )
|
||||
|
||||
ROM_REGION( 0x800, IOCPU_TAG, 0 )
|
||||
ROM_LOAD( "1820-4874.bin", 0x000000, 0x000800, CRC(e929044a) SHA1(90849a10bdb8c6e38e73ce027c9c0ad8b3956b1b) )
|
||||
|
||||
ROM_REGION( 0x4000, "graphics", ROMREGION_ERASEFF | ROMREGION_BE | ROMREGION_32BIT )
|
||||
ROM_LOAD16_BYTE( "98544_1818-1999.bin", 0x000001, 0x002000, CRC(8c7d6480) SHA1(d2bcfd39452c38bc652df39f84c7041cfdf6bd51) )
|
||||
ROM_LOAD16_BYTE( "5180-0471.bin", 0x000001, 0x002000, CRC(7256af2e) SHA1(584e8d4dcae8c898c1438125dc9c4709631b32f7) )
|
||||
ROM_END
|
||||
|
||||
ROM_START( hp9k340 )
|
||||
@ -430,8 +451,8 @@ ROM_START( hp9k340 )
|
||||
ROM_LOAD16_BYTE( "1818-4416.bin", 0x000000, 0x010000, CRC(cd71e85e) SHA1(3e83a80682f733417fdc3720410e45a2cfdcf869) )
|
||||
ROM_LOAD16_BYTE( "1818-4417.bin", 0x000001, 0x010000, CRC(374d49db) SHA1(a12cbf6c151e2f421da4571000b5dffa3ef403b3) )
|
||||
|
||||
ROM_REGION( 0x4000, "graphics", ROMREGION_ERASEFF | ROMREGION_BE | ROMREGION_32BIT )
|
||||
ROM_LOAD16_BYTE( "98544_1818-1999.bin", 0x000001, 0x002000, CRC(8c7d6480) SHA1(d2bcfd39452c38bc652df39f84c7041cfdf6bd51) )
|
||||
ROM_REGION( 0x800, IOCPU_TAG, 0 )
|
||||
ROM_LOAD( "1820-4874.bin", 0x000000, 0x000800, CRC(e929044a) SHA1(90849a10bdb8c6e38e73ce027c9c0ad8b3956b1b) )
|
||||
ROM_END
|
||||
|
||||
ROM_START( hp9k370 )
|
||||
@ -439,22 +460,25 @@ ROM_START( hp9k370 )
|
||||
ROM_LOAD16_BYTE( "1818-4416.bin", 0x000000, 0x010000, CRC(cd71e85e) SHA1(3e83a80682f733417fdc3720410e45a2cfdcf869) )
|
||||
ROM_LOAD16_BYTE( "1818-4417.bin", 0x000001, 0x010000, CRC(374d49db) SHA1(a12cbf6c151e2f421da4571000b5dffa3ef403b3) )
|
||||
|
||||
ROM_REGION( 0x4000, "graphics", ROMREGION_ERASEFF | ROMREGION_BE | ROMREGION_32BIT )
|
||||
ROM_LOAD16_BYTE( "98544_1818-1999.bin", 0x000001, 0x002000, CRC(8c7d6480) SHA1(d2bcfd39452c38bc652df39f84c7041cfdf6bd51) )
|
||||
ROM_REGION( 0x800, IOCPU_TAG, 0 )
|
||||
ROM_LOAD( "1820-4874.bin", 0x000000, 0x000800, CRC(e929044a) SHA1(90849a10bdb8c6e38e73ce027c9c0ad8b3956b1b) )
|
||||
ROM_END
|
||||
|
||||
ROM_START( hp9k380 )
|
||||
ROM_REGION( 0x20000, MAINCPU_TAG, 0 )
|
||||
ROM_LOAD16_WORD_SWAP( "1818-5062_98754_9000-380_27c210.bin", 0x000000, 0x020000, CRC(500a0797) SHA1(4c0a3929e45202a2689e353657e5c4b58ff9a1fd) )
|
||||
|
||||
ROM_REGION( 0x4000, "graphics", ROMREGION_ERASEFF | ROMREGION_BE | ROMREGION_32BIT )
|
||||
ROM_LOAD16_BYTE( "98544_1818-1999.bin", 0x000001, 0x002000, CRC(8c7d6480) SHA1(d2bcfd39452c38bc652df39f84c7041cfdf6bd51) )
|
||||
ROM_REGION( 0x800, IOCPU_TAG, 0 )
|
||||
ROM_LOAD( "1820-4874.bin", 0x000000, 0x000800, CRC(e929044a) SHA1(90849a10bdb8c6e38e73ce027c9c0ad8b3956b1b) )
|
||||
ROM_END
|
||||
|
||||
ROM_START( hp9k382 )
|
||||
ROM_REGION( 0x20000, MAINCPU_TAG, 0 )
|
||||
ROM_LOAD16_WORD_SWAP( "1818-5468_27c1024.bin", 0x000000, 0x020000, CRC(d1d9ef13) SHA1(6bbb17b9adad402fbc516dc2f3143e9c38ceef8e) )
|
||||
|
||||
ROM_REGION( 0x800, IOCPU_TAG, 0 )
|
||||
ROM_LOAD( "1820-4874.bin", 0x000000, 0x000800, CRC(e929044a) SHA1(90849a10bdb8c6e38e73ce027c9c0ad8b3956b1b) )
|
||||
|
||||
ROM_REGION( 0x2000, "unknown", ROMREGION_ERASEFF | ROMREGION_BE | ROMREGION_32BIT )
|
||||
ROM_LOAD( "1818-5282_8ce61e951207_28c64.bin", 0x000000, 0x002000, CRC(740442f3) SHA1(ab65bd4eec1024afb97fc2dd3bd3f017e90f49ae) )
|
||||
ROM_END
|
||||
@ -463,6 +487,7 @@ ROM_END
|
||||
COMP( 1985, hp9k310, 0, 0, hp9k310, hp9k330, hp9k3xx_state, 0, "Hewlett-Packard", "HP9000/310", MACHINE_NOT_WORKING | MACHINE_NO_SOUND)
|
||||
COMP( 1985, hp9k320, 0, 0, hp9k320, hp9k330, hp9k3xx_state, 0, "Hewlett-Packard", "HP9000/320", MACHINE_NOT_WORKING | MACHINE_NO_SOUND)
|
||||
COMP( 1987, hp9k330, 0, 0, hp9k330, hp9k330, hp9k3xx_state, 0, "Hewlett-Packard", "HP9000/330", MACHINE_NOT_WORKING | MACHINE_NO_SOUND)
|
||||
COMP( 1987, hp9k332, 0, 0, hp9k332, hp9k330, hp9k3xx_state, 0, "Hewlett-Packard", "HP9000/332", MACHINE_NOT_WORKING | MACHINE_NO_SOUND)
|
||||
COMP( 1989, hp9k340, hp9k330,0, hp9k340, hp9k330, hp9k3xx_state, 0, "Hewlett-Packard", "HP9000/340", MACHINE_NOT_WORKING | MACHINE_NO_SOUND)
|
||||
COMP( 1988, hp9k370, hp9k330,0, hp9k370, hp9k330, hp9k3xx_state, 0, "Hewlett-Packard", "HP9000/370", MACHINE_NOT_WORKING | MACHINE_NO_SOUND)
|
||||
COMP( 1991, hp9k380, 0, 0, hp9k380, hp9k330, hp9k3xx_state, 0, "Hewlett-Packard", "HP9000/380", MACHINE_NOT_WORKING | MACHINE_NO_SOUND)
|
||||
|
@ -14806,6 +14806,7 @@ hp9816 //
|
||||
hp9k310 //
|
||||
hp9k320 //
|
||||
hp9k330 //
|
||||
hp9k332 //
|
||||
hp9k340 //
|
||||
hp9k370 //
|
||||
hp9k380 //
|
||||
|
Loading…
Reference in New Issue
Block a user