hp9845b: added capability to load optional ROMs

This commit is contained in:
fulivi 2016-04-22 14:37:04 +02:00
parent 996a4fd9c0
commit b9f17449ee
6 changed files with 289 additions and 25 deletions

View File

@ -10,7 +10,8 @@
<info name="serial" value="09845-65516" />
<part name="rom" interface="hp9845b_rom">
<dataarea name="rom" size="0x4000">
<feature name="base" value="0x091000" />
<dataarea name="rom" size="0x4000" width="16" endianness="big">
<rom name="09845-65516-11_10-revb-mass_storage.bin" size="0x2000" crc="1cc55094" sha1="d0ffa8e5da9483f3ab2802a1a7092eddd40cddc0" offset="0x0000" />
<rom name="09845-65516-11_20-revb-mass_storage.bin" size="0x2000" crc="b95ac9de" sha1="6263f5849f7789d3d47cbbf4c249c256d2d50b7b" offset="0x2000" />
</dataarea>
@ -24,7 +25,8 @@
<info name="serial" value="09845-65516" />
<part name="rom" interface="hp9845b_rom">
<dataarea name="rom" size="0x4000">
<feature name="base" value="0x091000" />
<dataarea name="rom" size="0x4000" width="16" endianness="big">
<rom name="09845-65516-11_10-revc-mass_storage.bin" size="0x2000" crc="1cc55094" sha1="d0ffa8e5da9483f3ab2802a1a7092eddd40cddc0" offset="0x0000" />
<rom name="09845-65516-11_20-revc-mass_storage.bin" size="0x2000" crc="20025674" sha1="84adabc8b620c208cac1b9e7a88cf20f4fbf83a3" offset="0x2000" />
</dataarea>
@ -38,7 +40,8 @@
<info name="serial" value="09845-65516" />
<part name="rom" interface="hp9845b_rom">
<dataarea name="rom" size="0x6000">
<feature name="base" value="0x091000" />
<dataarea name="rom" size="0x6000" width="16" endianness="big">
<rom name="09845-65516-11_10-revd-mass_storage.bin" size="0x2000" crc="1cc55094" sha1="d0ffa8e5da9483f3ab2802a1a7092eddd40cddc0" offset="0x0000" />
<rom name="09845-65516-11_20-revd-mass_storage.bin" size="0x2000" crc="20025674" sha1="84adabc8b620c208cac1b9e7a88cf20f4fbf83a3" offset="0x2000" />
<rom name="09845-65516-11_30-revd-mass_storage.bin" size="0x2000" crc="47cc4fa8" sha1="dd5557e7728cf36308a7b588172fb1d697ffee72" offset="0x4000" />
@ -53,7 +56,8 @@
<info name="serial" value="09845-65517" />
<part name="rom" interface="hp9845b_rom">
<dataarea name="rom" size="0x4000">
<feature name="base" value="0x073000" />
<dataarea name="rom" size="0x4000" width="16" endianness="big">
<rom name="09845-65517-07_30-revb-graphics.bin" size="0x2000" crc="00f49b6e" sha1="81bcab408ea72e0ab3756226184adbb5966e2e65" offset="0x0000" />
<rom name="09845-65517-07_40-revb-graphics.bin" size="0x2000" crc="511d6c82" sha1="4546767a92d3059dc47fe6a9ca8a5db0fdcda904" offset="0x2000" />
</dataarea>
@ -67,7 +71,9 @@
<info name="serial" value="09845-65518" />
<part name="rom" interface="hp9845b_rom">
<dataarea name="rom" size="0x4000">
<!-- Correct BSC is probably 0x0b (or ROM wouldn't belong to LPU)-->
<feature name="base" value="0x0b5000" />
<dataarea name="rom" size="0x4000" width="16" endianness="big">
<rom name="09845-65518-11_50-reva-io_lpu.bin" size="0x2000" crc="98bd769e" sha1="8c28f838982d1b77f5b5dfd0923869bcff755a78" offset="0x0000" />
<rom name="09845-65518-11_60-reva-io_lpu.bin" size="0x2000" crc="4fc249f8" sha1="cb80e382eb456d6bead110077536564c1a170071" offset="0x2000" />
</dataarea>
@ -81,7 +87,8 @@
<info name="serial" value="09845-65518" />
<part name="rom" interface="hp9845b_rom">
<dataarea name="rom" size="0x4000">
<feature name="base" value="0x0b5000" />
<dataarea name="rom" size="0x4000" width="16" endianness="big">
<rom name="09845-65518-13_50-revb-io_lpu.bin" size="0x2000" crc="3d642769" sha1="18e41b9d6c39c26f42d197ef455b4085b936b3da" offset="0x0000" />
<rom name="09845-65518-13_60-revb-io_lpu.bin" size="0x2000" crc="4fc249f8" sha1="cb80e382eb456d6bead110077536564c1a170071" offset="0x2000" />
</dataarea>
@ -95,7 +102,8 @@
<info name="serial" value="09845-65519" />
<part name="rom" interface="hp9845b_rom">
<dataarea name="rom" size="0x4000">
<feature name="base" value="0x094000" />
<dataarea name="rom" size="0x4000" width="16" endianness="big">
<rom name="09845-65519-09_40-revb-io_ppu.bin" size="0x2000" crc="fb49c7d8" sha1="f2e4f196a4fb3859081495e1be7062afc7769544" offset="0x0000" />
<rom name="09845-65519-09_50-revb-io_ppu.bin" size="0x2000" crc="861a77c6" sha1="6f419275d2cf13daa9345ea55e03d5ad15e438a7" offset="0x2000" />
</dataarea>
@ -109,7 +117,8 @@
<info name="serial" value="09845-65519" />
<part name="rom" interface="hp9845b_rom">
<dataarea name="rom" size="0x4000">
<feature name="base" value="0x094000" />
<dataarea name="rom" size="0x4000" width="16" endianness="big">
<rom name="09845-65519-11_40-revc-io_ppu.bin" size="0x2000" crc="de2d5b1e" sha1="1b14e77de85eba555f576bddc5f5a84ae741875b" offset="0x0000" />
<rom name="09845-65519-11_50-revc-io_ppu.bin" size="0x2000" crc="861a77c6" sha1="6f419275d2cf13daa9345ea55e03d5ad15e438a7" offset="0x2000" />
</dataarea>
@ -123,7 +132,8 @@
<info name="serial" value="09845-65521" />
<part name="rom" interface="hp9845b_rom">
<dataarea name="rom" size="0x2000">
<feature name="base" value="0x0b1000" />
<dataarea name="rom" size="0x2000" width="16" endianness="big">
<rom name="09845-65521-13_10-reva-advanced_programming.bin" size="0x2000" crc="c39a193e" sha1="0193fa7308c58469517973b1425c966460283b37" offset="0x0000" />
</dataarea>
</part>
@ -136,7 +146,8 @@
<info name="serial" value="09845-65524" />
<part name="rom" interface="hp9845b_rom">
<dataarea name="rom" size="0x4000">
<feature name="base" value="0x0f4000" />
<dataarea name="rom" size="0x4000" width="16" endianness="big">
<rom name="09845-65524-17_40-reva-assembly_execution.bin" size="0x2000" crc="ff91e559" sha1="52d8d1d535cf1cd39a1e794115f94dced545d1af" offset="0x0000" />
<rom name="09845-65524-17_50-reva-assembly_execution.bin" size="0x2000" crc="52d8c5b4" sha1="c015fbdc14d9dd2eb5f23cb9e03412fb05b81e42" offset="0x2000" />
</dataarea>
@ -150,7 +161,8 @@
<info name="serial" value="09845-65525" />
<part name="rom" interface="hp9845b_rom">
<dataarea name="rom" size="0x8000">
<feature name="base" value="0x0f4000" />
<dataarea name="rom" size="0x8000" width="16" endianness="big" >
<rom name="09845-65525-17_40-reva-assembly_execution_and_development.bin" size="0x2000" crc="ff91e559" sha1="52d8d1d535cf1cd39a1e794115f94dced545d1af" offset="0x0000" />
<rom name="09845-65525-17_50-reva-assembly_execution_and_development.bin" size="0x2000" crc="52d8c5b4" sha1="c015fbdc14d9dd2eb5f23cb9e03412fb05b81e42" offset="0x2000" />
<rom name="09845-65525-17_60-reva-assembly_execution_and_development.bin" size="0x2000" crc="dc79c562" sha1="8a8bd52b0467e3ffc5685e12537cccc56c78492a" offset="0x4000" />
@ -159,6 +171,7 @@
</part>
</software>
<!-- To be fixed, cannot be used as is -->
<software name="image45">
<description>IMAGE/45 Database Manager (Rev B)</description>
<year>198?</year>
@ -179,6 +192,7 @@
</part>
</software>
<!-- To be fixed, cannot be used as is -->
<software name="image45c" cloneof="image45">
<description>IMAGE/45 Database Manager (Rev C)</description>
<year>198?</year>
@ -206,12 +220,14 @@
<info name="serial" value="09845-65528" />
<part name="rom" interface="hp9845b_rom">
<dataarea name="rom" size="0x2000">
<feature name="base" value="0x0f3000" />
<dataarea name="rom" size="0x2000" width="16" endianness="big">
<rom name="09845-65528-17_30-reva-structured_programming.bin" size="0x2000" crc="f2829f93" sha1="74d760eb1ff57e3c9e8deee131d4d56bf4ef0b05" offset="0x0000" />
</dataarea>
</part>
</software>
<!-- To be fixed, cannot be used as is -->
<software name="resmgmt">
<description>Resource Management</description>
<year>198?</year>
@ -237,7 +253,8 @@
<info name="serial" value="09845-66520" />
<part name="rom" interface="hp9845b_rom">
<dataarea name="rom" size="0x4000">
<feature name="base" value="0x250000" />
<dataarea name="rom" size="0x4000" width="16" endianness="big" >
<rom name="09845-66520-45_00-test_rom.bin" size="0x2000" crc="95a5b299" sha1="ef362f8fe0049ba4bb483aca873812ceaa4c8d7c" offset="0x0000" />
<rom name="09845-66520-45_10-test_rom.bin" size="0x2000" crc="257e4c66" sha1="4443ca1e7b9565c290e3c2f743602bdf64d0cae0" offset="0x2000" />
</dataarea>
@ -251,7 +268,8 @@
<info name="serial" value="09845-67965" />
<part name="rom" interface="hp9845b_rom">
<dataarea name="rom" size="0x8000">
<feature name="base" value="0x110000" />
<dataarea name="rom" size="0x8000" width="16" endianness="big">
<rom name="09845-67965-21_00-reva-basic_data_comm_async.bin" size="0x2000" crc="cc82edcd" sha1="cb89c3e31609c73db5c4d9d99d91acd914b1f11f" offset="0x0000" />
<rom name="09845-67965-21_10-reva-basic_data_comm_async.bin" size="0x2000" crc="f0dda2fb" sha1="46e0330215a20a281b66b16140dcfbef37510519" offset="0x2000" />
<rom name="09845-67965-21_20-reva-basic_data_comm_async.bin" size="0x2000" crc="342f2cca" sha1="f2c70598a0b3ade466570f12783b0db293ed5dc5" offset="0x4000" />
@ -267,7 +285,8 @@
<info name="serial" value="09845-67986" />
<part name="rom" interface="hp9845b_rom">
<dataarea name="rom" size="0x4000">
<feature name="base" value="0x114000" />
<dataarea name="rom" size="0x4000" width="16" endianness="big">
<rom name="09845-67986-21_40_rje_datacom_bisync.bin" size="0x2000" crc="59123e07" sha1="3baf9066bca2307633dabac4b4873c6f2030c529" offset="0x0000" />
<rom name="09845-67986-21_50_rje_datacom_bisync.bin" size="0x2000" crc="a753991a" sha1="33a8a059d212a4ee3a656f3c11a0d8cdaeb64c3a" offset="0x2000" />
</dataarea>
@ -281,7 +300,8 @@
<info name="serial" value="98770-65501" />
<part name="rom" interface="hp9845b_rom">
<dataarea name="rom" size="0x8000">
<feature name="base" value="0x073000" />
<dataarea name="rom" size="0x8000" width="16" endianness="big">
<rom name="98770-65501-07_30-revd-color_graphics.bin" size="0x2000" crc="012d729e" sha1="f2a6a25bfaff7aecabdc608bc07613a10641ccce" offset="0x0000" />
<rom name="98770-65501-07_40-revd-color_graphics.bin" size="0x2000" crc="656799f5" sha1="0ba3f9018eed8c385f600fc78b70e4ce903e5233" offset="0x2000" />
<rom name="98770-65501-07_50-revd-color_graphics.bin" size="0x2000" crc="f59a71a4" sha1="abff654f1a18c4c6492431117ce8bcf30c69ceb0" offset="0x4000" />
@ -297,7 +317,8 @@
<info name="serial" value="98770-65501" />
<part name="rom" interface="hp9845b_rom">
<dataarea name="rom" size="0xa000">
<feature name="base" value="0x072000" />
<dataarea name="rom" size="0xa000" width="16" endianness="big">
<rom name="98780-65501-07_20-reva-enhancend_graphics.bin" size="0x2000" crc="57598821" sha1="cb6e46d7226bee5c3cbe33176c44adc64477e5c2" offset="0x0000" />
<rom name="98780-65501-07_30-reva-enhancend_graphics.bin" size="0x2000" crc="19278727" sha1="3321cf18005f90db39992b31224697b62ab4682b" offset="0x2000" />
<rom name="98780-65501-07_40-reva-enhancend_graphics.bin" size="0x2000" crc="656799f5" sha1="0ba3f9018eed8c385f600fc78b70e4ce903e5233" offset="0x4000" />
@ -314,7 +335,8 @@
<info name="serial" value="98780-65501" />
<part name="rom" interface="hp9845b_rom">
<dataarea name="rom" size="0xa000">
<feature name="base" value="0x072000" />
<dataarea name="rom" size="0xa000" width="16" endianness="big">
<rom name="98780-65501-07_20-revb-enhancend_graphics.bin" size="0x2000" crc="57598821" sha1="cb6e46d7226bee5c3cbe33176c44adc64477e5c2" offset="0x0000" />
<rom name="98780-65501-07_30-revb-enhancend_graphics.bin" size="0x2000" crc="19278727" sha1="3321cf18005f90db39992b31224697b62ab4682b" offset="0x2000" />
<rom name="98780-65501-07_40-revb-enhancend_graphics.bin" size="0x2000" crc="656799f5" sha1="0ba3f9018eed8c385f600fc78b70e4ce903e5233" offset="0x4000" />

View File

@ -2673,3 +2673,14 @@ if (BUSES["SVI_SLOT"]~=null) then
MAME_DIR .. "src/devices/bus/svi3x8/slot/sv807.h",
}
end
---------------------------------------------------
--
--@src/devices/bus/hp_optroms/hp_optrom.h,BUSES["HP_OPTROM"] = true
---------------------------------------------------
if (BUSES["HP_OPTROM"]~=null) then
files {
MAME_DIR .. "src/devices/bus/hp_optroms/hp_optrom.cpp",
}
end

View File

@ -623,6 +623,7 @@ BUSES["INTV_CTRL"] = true
BUSES["IQ151"] = true
BUSES["ISA"] = true
BUSES["ISBX"] = true
BUSES["HP_OPTROM"] = true
BUSES["KC"] = true
BUSES["LPCI"] = true
BUSES["M5"] = true

View File

@ -0,0 +1,151 @@
// license:BSD-3-Clause
// copyright-holders: F. Ulivi
/*********************************************************************
hp_optrom.cpp
Optional ROMs for HP9845 systems
*********************************************************************/
#include "hp_optrom.h"
#include "softlist.h"
#include "cpu/hphybrid/hphybrid.h"
const device_type HP_OPTROM_CART = &device_creator<hp_optrom_cart_device>;
const device_type HP_OPTROM_SLOT = &device_creator<hp_optrom_slot_device>;
// +---------------------+
// |hp_optrom_cart_device|
// +---------------------+
hp_optrom_cart_device::hp_optrom_cart_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source) :
device_t(mconfig, type, name, tag, owner, clock, shortname, source),
device_slot_card_interface(mconfig, *this)
{
}
hp_optrom_cart_device::hp_optrom_cart_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) :
device_t(mconfig, HP_OPTROM_CART, "HP9845 optional ROM cartridge", tag, owner, clock, "hp_optrom_cart", __FILE__),
device_slot_card_interface(mconfig, *this)
{
}
// +---------------------+
// |hp_optrom_slot_device|
// +---------------------+
hp_optrom_slot_device::hp_optrom_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) :
device_t(mconfig, HP_OPTROM_SLOT, "HP9845 optional ROM Slot", tag, owner, clock, "hp_optrom_slot", __FILE__),
device_image_interface(mconfig, *this),
device_slot_interface(mconfig, *this),
m_cart(nullptr),
m_base_addr(0),
m_end_addr(0)
{
}
hp_optrom_slot_device::~hp_optrom_slot_device()
{
}
void hp_optrom_slot_device::device_start()
{
m_cart = dynamic_cast<hp_optrom_cart_device *>(get_card_device());
}
void hp_optrom_slot_device::device_config_complete()
{
update_names(HP_OPTROM_SLOT , "optional_rom" , "optrom");
}
bool hp_optrom_slot_device::call_load()
{
logerror("hp_optrom: call_load\n");
if (m_cart == nullptr || !m_from_swlist) {
logerror("hp_optrom: fail 1\n");
return IMAGE_INIT_FAIL;
}
const software_part *part_ptr = part_entry();
if (part_ptr == nullptr) {
logerror("hp_optrom: fail 2\n");
return IMAGE_INIT_FAIL;
}
const char *base_feature = part_ptr->feature("base");
if (base_feature == nullptr) {
logerror("hp_optrom: no 'base' feature\n");
return IMAGE_INIT_FAIL;
}
offs_t base_addr;
if (base_feature[ 0 ] != '0' || base_feature[ 1 ] != 'x' || sscanf(&base_feature[ 2 ] , "%x" , &base_addr) != 1) {
logerror("hp_optrom: can't parse 'base' feature\n");
return IMAGE_INIT_FAIL;
}
// Valid BSC values for ROMs on LPU drawer: 0x07 0x0b .... 0x3b
// Valid BSC values for ROMs on PPU drawer: 0x09 0x0d .... 0x3d
// (BSC is field in bits 16..21 of base address)
// Bit 15 of base address must be 0
// Base address must be multiple of 0x1000
if ((base_addr & ~0x3f7000UL) != 0 || ((base_addr & 0x30000) != 0x10000 && (base_addr & 0x30000) != 0x30000) || base_addr < 0x70000) {
logerror("hp_optrom: illegal base address (%x)\n" , base_addr);
return IMAGE_INIT_FAIL;
}
auto length = get_software_region_length("rom") / 2;
if (length < 0x1000 || length > 0x8000 || (length & 0xfff) != 0 || ((base_addr & 0x7000) + length) > 0x8000) {
logerror("hp_optrom: illegal region length (%x)\n" , length);
return IMAGE_INIT_FAIL;
}
offs_t end_addr = base_addr + length - 1;
logerror("hp_optrom: base_addr = %06x end_addr = %06x\n" , base_addr , end_addr);
m_content.resize(length * 2);
UINT8 *buffer = m_content.data();
memcpy(buffer , get_software_region("rom") , length * 2);
// Install ROM in address space of every CPU
device_interface_iterator<hp_hybrid_cpu_device> iter(machine().root_device());
for (hp_hybrid_cpu_device *cpu = iter.first(); cpu != nullptr; cpu = iter.next()) {
logerror("hp_optrom: install in %s AS\n" , cpu->tag());
cpu->space(AS_PROGRAM).install_rom(base_addr , end_addr , buffer);
}
m_base_addr = base_addr;
m_end_addr = end_addr;
return IMAGE_INIT_PASS;
}
void hp_optrom_slot_device::call_unload()
{
logerror("hp_optrom: call_unload\n");
if (m_cart != nullptr && m_base_addr != 0 && m_end_addr != 0) {
device_interface_iterator<hp_hybrid_cpu_device> iter(machine().root_device());
for (hp_hybrid_cpu_device *cpu = iter.first(); cpu != nullptr; cpu = iter.next()) {
cpu->space(AS_PROGRAM).unmap_read(m_base_addr , m_end_addr);
}
m_content.resize(0);
m_base_addr = 0;
m_end_addr = 0;
}
}
bool hp_optrom_slot_device::call_softlist_load(software_list_device &swlist, const char *swname, const rom_entry *start_entry)
{
logerror("hp_optrom: call_softlist_load\n");
machine().rom_load().load_software_part_region(*this, swlist, swname, start_entry);
return TRUE;
}
std::string hp_optrom_slot_device::get_default_card_software()
{
return software_get_default_slot("rom");
}
SLOT_INTERFACE_START(hp_optrom_slot_device)
SLOT_INTERFACE_INTERNAL("rom", HP_OPTROM_CART)
SLOT_INTERFACE_END

View File

@ -0,0 +1,74 @@
// license:BSD-3-Clause
// copyright-holders: F. Ulivi
/*********************************************************************
hp_optrom.h
Optional ROMs for HP9845 systems
*********************************************************************/
#pragma once
#ifndef _HP_OPTROM_H_
#define _HP_OPTROM_H_
#include "emu.h"
class hp_optrom_cart_device : public device_t,
public device_slot_card_interface
{
public:
// construction/destruction
hp_optrom_cart_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source);
hp_optrom_cart_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
// device-level overrides
virtual void device_start() override {}
};
class hp_optrom_slot_device : public device_t,
public device_image_interface,
public device_slot_interface
{
public:
// construction/destruction
hp_optrom_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
virtual ~hp_optrom_slot_device();
// device-level overrides
virtual void device_start() override;
virtual void device_config_complete() override;
// image-level overrides
virtual bool call_load() override;
virtual void call_unload() override;
virtual bool call_softlist_load(software_list_device &swlist, const char *swname, const rom_entry *start_entry) override;
virtual iodevice_t image_type() const override { return IO_CARTSLOT; }
virtual bool is_readable() const override { return true; }
virtual bool is_writeable() const override { return false; }
virtual bool is_creatable() const override { return false; }
virtual bool must_be_loaded() const override { return false; }
virtual bool is_reset_on_load() const override { return true; }
virtual const option_guide *create_option_guide() const override { return nullptr; }
virtual const char *image_interface() const override { return "hp9845b_rom"; }
virtual const char *file_extensions() const override { return "bin"; }
// slot interface overrides
virtual std::string get_default_card_software() override;
protected:
hp_optrom_cart_device *m_cart;
dynamic_buffer m_content;
offs_t m_base_addr;
offs_t m_end_addr;
};
// device type definition
extern const device_type HP_OPTROM_SLOT;
extern const device_type HP_OPTROM_CART;
SLOT_INTERFACE_EXTERN(hp_optrom_slot_device);
#endif /* _HP_OPTROM_H_ */

View File

@ -18,22 +18,22 @@
// - Text mode screen
// - Keyboard
// - T15 tape drive
// - Software list to load optional ROMs
// What's not yet in:
// - Beeper
// - Graphic screen
// - Better naming of tape drive image (it's now "magt", should be "t15")
// - Better documentation of this file
// - Software list to load optional ROMs
// What's wrong:
// - I'm using character generator from HP64K (another driver of mine): no known dump of the original one
// - Speed, as usual
// - There are a couple of undocumented opcodes that PPU executes at each keyboard interrupt: don't know if ignoring them is a Bad Thing (tm) or not
#include "emu.h"
#include "cpu/z80/z80.h"
#include "softlist.h"
#include "cpu/hphybrid/hphybrid.h"
#include "machine/hp_taco.h"
#include "bus/hp_optroms/hp_optrom.h"
#define BIT_MASK(n) (1U << (n))
@ -674,7 +674,6 @@ static ADDRESS_MAP_START(global_mem_map , AS_PROGRAM , 16 , hp9845b_state)
AM_RANGE(0x014000 , 0x017fff) AM_RAM AM_SHARE("ppu_ram")
AM_RANGE(0x030000 , 0x037fff) AM_ROM AM_REGION("lpu" , 0)
AM_RANGE(0x050000 , 0x057fff) AM_ROM AM_REGION("ppu" , 0)
//AM_RANGE(0x250000 , 0x251fff) AM_ROM AM_REGION("test_rom" , 0)
ADDRESS_MAP_END
static ADDRESS_MAP_START(ppu_io_map , AS_IO , 16 , hp9845b_state)
@ -719,6 +718,16 @@ static MACHINE_CONFIG_START( hp9845b, hp9845b_state )
MCFG_TACO_FLG_HANDLER(WRITELINE(hp9845b_state , t15_flg_w))
MCFG_TACO_STS_HANDLER(WRITELINE(hp9845b_state , t15_sts_w))
// In real machine there were 8 slots for LPU ROMs and 8 slots for PPU ROMs in
// right-hand side and left-hand side drawers, respectively.
// Here we do away with the distinction between LPU & PPU ROMs: in the end they
// are visible to both CPUs at the same addresses.
// For now we define just a couple of slots..
MCFG_DEVICE_ADD("drawer1", HP_OPTROM_SLOT, 0)
MCFG_DEVICE_SLOT_INTERFACE(hp_optrom_slot_device, NULL, false)
MCFG_DEVICE_ADD("drawer2", HP_OPTROM_SLOT, 0)
MCFG_DEVICE_SLOT_INTERFACE(hp_optrom_slot_device, NULL, false)
MCFG_SOFTWARE_LIST_ADD("optrom_list", "hp9845b_rom")
MACHINE_CONFIG_END
@ -755,10 +764,6 @@ ROM_END
#define rom_hp9835b rom_hp9835a
ROM_START( hp9845b )
ROM_REGION(0x4000 , "test_rom" , ROMREGION_16BIT | ROMREGION_BE)
ROM_LOAD("09845-66520-45_00-Test_ROM.bin" , 0x0000 , 0x2000 , CRC(95a5b299))
ROM_LOAD("09845-66520-45_10-Test_ROM.bin" , 0x2000 , 0x2000 , CRC(257e4c66))
ROM_REGION(0x800 , "chargen" , 0)
// Don't have the real character generator from HP9845, use the one from HP64000 for now
ROM_LOAD("1818_2668.bin" , 0 , 0x800 , BAD_DUMP CRC(32a52664) SHA1(8b2a49a32510103ff424e8481d5ed9887f609f2f))