split up hp98603 basic rom card

The 98603A and 98603B cards have different base addresses and sizes
for the rom region. Split up the cards so that we can boot HP BASIC 4
and HP BASIC 5.1.

Signed-off-by: Sven Schnelle <svens@stackframe.org>
This commit is contained in:
Sven Schnelle 2018-04-16 15:00:04 +02:00
parent ed3345e84f
commit 5832c7c2de
7 changed files with 204 additions and 107 deletions

View File

@ -836,8 +836,10 @@ if (BUSES["HPDIO"]~=null) then
MAME_DIR .. "src/devices/bus/hp_dio/hp_dio.h",
MAME_DIR .. "src/devices/bus/hp_dio/hp98544.cpp",
MAME_DIR .. "src/devices/bus/hp_dio/hp98544.h",
MAME_DIR .. "src/devices/bus/hp_dio/hp98603.cpp",
MAME_DIR .. "src/devices/bus/hp_dio/hp98603.h",
MAME_DIR .. "src/devices/bus/hp_dio/hp98603a.cpp",
MAME_DIR .. "src/devices/bus/hp_dio/hp98603a.h",
MAME_DIR .. "src/devices/bus/hp_dio/hp98603b.cpp",
MAME_DIR .. "src/devices/bus/hp_dio/hp98603b.h",
MAME_DIR .. "src/devices/bus/hp_dio/hp98644.cpp",
MAME_DIR .. "src/devices/bus/hp_dio/hp98644.h",
}

View File

@ -1,94 +0,0 @@
// license:BSD-3-Clause
// copyright-holders:Sven Schnelle
/***************************************************************************
HP98603 BASIC ROM card
***************************************************************************/
#include "emu.h"
#include "hp98603.h"
DEFINE_DEVICE_TYPE(HPDIO_98603, dio16_98603_device, "dio98603", "HP98603 BASIC ROM card")
#define HP98603_ROM_REGION "98603_rom"
ROM_START(hp98603)
ROM_REGION(0x100000, HP98603_ROM_REGION, 0)
ROM_SYSTEM_BIOS(0, "basic4", "BASIC 4.0")
ROMX_LOAD("98603_80001.bin", 0x00001, 32768, CRC(5d8c9657) SHA1(f5d89e7f8a61072f362532d1b5e05f5b5e3f42b3), ROM_SKIP(1) | ROM_BIOS(1))
ROMX_LOAD("98603_80002.bin", 0x10001, 32768, CRC(7e4e0ca8) SHA1(3230c7825f5058a1e1a06776da6064b049417b50), ROM_SKIP(1) | ROM_BIOS(1))
ROMX_LOAD("98603_80003.bin", 0x20001, 32768, CRC(b5da5f81) SHA1(69578ee197531e9474a0edb4c2f068b20118d25f), ROM_SKIP(1) | ROM_BIOS(1))
ROMX_LOAD("98603_80004.bin", 0x30001, 32768, CRC(ea050835) SHA1(3be7c1bd394b11fdfee38ebf40beb9352f38722d), ROM_SKIP(1) | ROM_BIOS(1))
ROMX_LOAD("98603_80005.bin", 0x00000, 32768, CRC(1380d489) SHA1(e346857d9df9a06269f9fa57684fbe64edd0134b), ROM_SKIP(1) | ROM_BIOS(1))
ROMX_LOAD("98603_80006.bin", 0x10000, 32768, CRC(19752031) SHA1(5e28ee9d527b297a8898dde50ab6e41bbc0c2572), ROM_SKIP(1) | ROM_BIOS(1))
ROMX_LOAD("98603_80007.bin", 0x20000, 32768, CRC(72aa2225) SHA1(3c92cdd40adc7438d30b95eae14e4497b7e14f38), ROM_SKIP(1) | ROM_BIOS(1))
ROMX_LOAD("98603_80008.bin", 0x30000, 32768, CRC(f617ae2e) SHA1(f59b63058e7e87eabc5dc5233895bb57579eb3f7), ROM_SKIP(1) | ROM_BIOS(1))
ROMX_LOAD("98603_80009.bin", 0x40001, 32768, CRC(9c128571) SHA1(7827cfbf710d8bba3ce9b42ec3368b17a5b5ff78), ROM_SKIP(1) | ROM_BIOS(1))
ROMX_LOAD("98603_80010.bin", 0x50001, 32768, CRC(12528317) SHA1(e11d6c40334c41be68e2717d816e0895f8f7afa8), ROM_SKIP(1) | ROM_BIOS(1))
ROMX_LOAD("98603_80011.bin", 0x60001, 32768, CRC(1d279451) SHA1(2ce966b8499d2d810056d147f71ba2b6cc909bc6), ROM_SKIP(1) | ROM_BIOS(1))
ROMX_LOAD("98603_80012.bin", 0x70001, 32768, CRC(a1d6374e) SHA1(ca860b762503a05a4bfbd17a77bef28d01d7d279), ROM_SKIP(1) | ROM_BIOS(1))
ROMX_LOAD("98603_80013.bin", 0x40000, 32768, CRC(e554d97e) SHA1(c792c4f0097bed032ca31c88fde660d4db25b3dc), ROM_SKIP(1) | ROM_BIOS(1))
ROMX_LOAD("98603_80014.bin", 0x50000, 32768, CRC(c0db7e02) SHA1(add3e7312ac07e5ed4281aae2d46e1a4389d6ea2), ROM_SKIP(1) | ROM_BIOS(1))
ROMX_LOAD("98603_80015.bin", 0x60000, 32768, CRC(f85bb699) SHA1(bd7f690e3b4fb8952517b0acd6ac878cd50f5736), ROM_SKIP(1) | ROM_BIOS(1))
ROMX_LOAD("98603_80016.bin", 0x70000, 32768, CRC(d887acab) SHA1(a9cbbaa5f053f374d6cbda614b727df35a61ace1), ROM_SKIP(1) | ROM_BIOS(1))
ROM_SYSTEM_BIOS(1, "basic51", "BASIC 5.1")
ROMX_LOAD("u1.bin", 0x00000, 65536, CRC(ba50d9e0) SHA1(064e3cbbc7ee01f279a289684616ae3b8744a7c9), ROM_SKIP(1) | ROM_BIOS(2))
ROMX_LOAD("u2.bin", 0x20000, 65536, CRC(65f58d3e) SHA1(8367cecb46fa6f9abe9e78b42c25ce8699d5d3f3), ROM_SKIP(1) | ROM_BIOS(2))
ROMX_LOAD("u3.bin", 0x40000, 65536, CRC(9bc70573) SHA1(b7e375e11f6758d59d32236fc1c42eafc892d247), ROM_SKIP(1) | ROM_BIOS(2))
ROMX_LOAD("u4.bin", 0x60000, 65536, CRC(52debeba) SHA1(996e83e604501979fd80ae47ff1cda9890613982), ROM_SKIP(1) | ROM_BIOS(2))
ROMX_LOAD("u5.bin", 0x80000, 65536, CRC(93b4bce8) SHA1(77efec9a95b9e543e1cdb00196d1794ca0c8b4ba), ROM_SKIP(1) | ROM_BIOS(2))
ROMX_LOAD("u6.bin", 0xa0000, 65536, CRC(bda3d054) SHA1(c83d6f571ce5aa63ad3954ac02ff4069c01a1464), ROM_SKIP(1) | ROM_BIOS(2))
ROMX_LOAD("u9.bin", 0x00001, 65536, CRC(009e9fcb) SHA1(520f583a826516f7d676391daf31ed035162c263), ROM_SKIP(1) | ROM_BIOS(2))
ROMX_LOAD("u10.bin", 0x20001, 65536, CRC(84f90a1d) SHA1(9358aa7fa83ed9617d318936cbab79002853b0ce), ROM_SKIP(1) | ROM_BIOS(2))
ROMX_LOAD("u11.bin", 0x40001, 65536, CRC(e486e0f3) SHA1(66b5dd6c2c277156ad6c3ee5b99c34e243d897be), ROM_SKIP(1) | ROM_BIOS(2))
ROMX_LOAD("u12.bin", 0x60001, 65536, CRC(d5a08c7b) SHA1(be997cf9bbdb8fdd6c7e95754747016293c51c7f), ROM_SKIP(1) | ROM_BIOS(2))
ROMX_LOAD("u13.bin", 0x80001, 65536, CRC(9811c34c) SHA1(1655cac651889950b881e6be72f035c7de0a1aed), ROM_SKIP(1) | ROM_BIOS(2))
ROMX_LOAD("u14.bin", 0xa0001, 65536, CRC(96527d4e) SHA1(6706ab97eab4465ea4fa2d6b07e8107468e83818), ROM_SKIP(1) | ROM_BIOS(2))
ROM_END
MACHINE_CONFIG_START(dio16_98603_device::device_add_mconfig)
MACHINE_CONFIG_END
const tiny_rom_entry *dio16_98603_device::device_rom_region() const
{
return ROM_NAME(hp98603);
}
dio16_98603_device::dio16_98603_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
dio16_98603_device(mconfig, HPDIO_98603, tag, owner, clock)
{
}
dio16_98603_device::dio16_98603_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_dio16_card_interface(mconfig, *this)
{
}
void dio16_98603_device::device_start()
{
set_dio_device();
}
void dio16_98603_device::device_reset()
{
m_rom = device().machine().root_device().memregion(this->subtag(HP98603_ROM_REGION).c_str())->base();
m_dio->install_memory(0x100000, 0x1fffff, read16_delegate(FUNC(dio16_98603_device::rom_r), this),
write16_delegate(FUNC(dio16_98603_device::rom_w), this));
}
READ16_MEMBER(dio16_98603_device::rom_r)
{
return m_rom[offset*2] | (m_rom[offset*2+1] << 8);
}
WRITE16_MEMBER(dio16_98603_device::rom_w)
{
}

View File

@ -0,0 +1,77 @@
// license:BSD-3-Clause
// copyright-holders:Sven Schnelle
/***************************************************************************
HP98603A BASIC ROM card
***************************************************************************/
#include "emu.h"
#include "hp98603a.h"
DEFINE_DEVICE_TYPE(HPDIO_98603A, dio16_98603a_device, "dio98603a", "HP98603A BASIC 4.0 ROM card")
#define HP98603A_ROM_REGION "98603a_rom"
ROM_START(hp98603a)
ROM_REGION(0x80000, HP98603A_ROM_REGION, 0)
ROM_LOAD16_BYTE("98603_80001.bin", 0x00001, 32768, CRC(5d8c9657) SHA1(f5d89e7f8a61072f362532d1b5e05f5b5e3f42b3))
ROM_LOAD16_BYTE("98603_80002.bin", 0x10001, 32768, CRC(7e4e0ca8) SHA1(3230c7825f5058a1e1a06776da6064b049417b50))
ROM_LOAD16_BYTE("98603_80003.bin", 0x20001, 32768, CRC(b5da5f81) SHA1(69578ee197531e9474a0edb4c2f068b20118d25f))
ROM_LOAD16_BYTE("98603_80004.bin", 0x30001, 32768, CRC(ea050835) SHA1(3be7c1bd394b11fdfee38ebf40beb9352f38722d))
ROM_LOAD16_BYTE("98603_80005.bin", 0x00000, 32768, CRC(1380d489) SHA1(e346857d9df9a06269f9fa57684fbe64edd0134b))
ROM_LOAD16_BYTE("98603_80006.bin", 0x10000, 32768, CRC(19752031) SHA1(5e28ee9d527b297a8898dde50ab6e41bbc0c2572))
ROM_LOAD16_BYTE("98603_80007.bin", 0x20000, 32768, CRC(72aa2225) SHA1(3c92cdd40adc7438d30b95eae14e4497b7e14f38))
ROM_LOAD16_BYTE("98603_80008.bin", 0x30000, 32768, CRC(f617ae2e) SHA1(f59b63058e7e87eabc5dc5233895bb57579eb3f7))
ROM_LOAD16_BYTE("98603_80009.bin", 0x40001, 32768, CRC(9c128571) SHA1(7827cfbf710d8bba3ce9b42ec3368b17a5b5ff78))
ROM_LOAD16_BYTE("98603_80010.bin", 0x50001, 32768, CRC(12528317) SHA1(e11d6c40334c41be68e2717d816e0895f8f7afa8))
ROM_LOAD16_BYTE("98603_80011.bin", 0x60001, 32768, CRC(1d279451) SHA1(2ce966b8499d2d810056d147f71ba2b6cc909bc6))
ROM_LOAD16_BYTE("98603_80012.bin", 0x70001, 32768, CRC(a1d6374e) SHA1(ca860b762503a05a4bfbd17a77bef28d01d7d279))
ROM_LOAD16_BYTE("98603_80013.bin", 0x40000, 32768, CRC(e554d97e) SHA1(c792c4f0097bed032ca31c88fde660d4db25b3dc))
ROM_LOAD16_BYTE("98603_80014.bin", 0x50000, 32768, CRC(c0db7e02) SHA1(add3e7312ac07e5ed4281aae2d46e1a4389d6ea2))
ROM_LOAD16_BYTE("98603_80015.bin", 0x60000, 32768, CRC(f85bb699) SHA1(bd7f690e3b4fb8952517b0acd6ac878cd50f5736))
ROM_LOAD16_BYTE("98603_80016.bin", 0x70000, 32768, CRC(d887acab) SHA1(a9cbbaa5f053f374d6cbda614b727df35a61ace1))
ROM_END
MACHINE_CONFIG_START(dio16_98603a_device::device_add_mconfig)
MACHINE_CONFIG_END
const tiny_rom_entry *dio16_98603a_device::device_rom_region() const
{
return ROM_NAME(hp98603a);
}
dio16_98603a_device::dio16_98603a_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
dio16_98603a_device(mconfig, HPDIO_98603A, tag, owner, clock)
{
}
dio16_98603a_device::dio16_98603a_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_dio16_card_interface(mconfig, *this)
{
}
void dio16_98603a_device::device_start()
{
set_dio_device();
}
void dio16_98603a_device::device_reset()
{
m_rom = device().machine().root_device().memregion(this->subtag(HP98603A_ROM_REGION).c_str())->base();
m_dio->install_memory(0x80000, 0xfffff, read16_delegate(FUNC(dio16_98603a_device::rom_r), this),
write16_delegate(FUNC(dio16_98603a_device::rom_w), this));
}
READ16_MEMBER(dio16_98603a_device::rom_r)
{
return m_rom[offset*2] | (m_rom[offset*2+1] << 8);
}
WRITE16_MEMBER(dio16_98603a_device::rom_w)
{
}

View File

@ -1,25 +1,25 @@
// license:BSD-3-Clause
// copyright-holders:Sven Schnelle
#ifndef MAME_BUS_HPDIO_98603_H
#define MAME_BUS_HPDIO_98603_H
#ifndef MAME_BUS_HPDIO_98603A_H
#define MAME_BUS_HPDIO_98603A_H
#pragma once
#include "hp_dio.h"
class dio16_98603_device :
class dio16_98603a_device :
public device_t,
public device_dio16_card_interface
{
public:
// construction/destruction
dio16_98603_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
dio16_98603a_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
DECLARE_READ16_MEMBER(rom_r);
DECLARE_WRITE16_MEMBER(rom_w);
protected:
dio16_98603_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
dio16_98603a_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
// device-level overrides
virtual void device_start() override;
@ -33,6 +33,6 @@ private:
uint8_t *m_rom;
};
DECLARE_DEVICE_TYPE(HPDIO_98603, dio16_98603_device)
DECLARE_DEVICE_TYPE(HPDIO_98603A, dio16_98603a_device)
#endif // MAME_BUS_HPDIO_98603_H
#endif // MAME_BUS_HPDIO_98603A_H

View File

@ -0,0 +1,72 @@
// license:BSD-3-Clause
// copyright-holders:Sven Schnelle
/***************************************************************************
HP98603B BASIC ROM card
***************************************************************************/
#include "emu.h"
#include "hp98603b.h"
DEFINE_DEVICE_TYPE(HPDIO_98603B, dio16_98603b_device, "dio98603b", "HP98603 BASIC ROM card")
#define HP98603B_ROM_REGION "98603b_rom"
ROM_START(hp98603b)
ROM_REGION(0x100000, HP98603B_ROM_REGION, 0)
ROM_LOAD16_BYTE("u1.bin", 0x00000, 65536, CRC(ba50d9e0) SHA1(064e3cbbc7ee01f279a289684616ae3b8744a7c9))
ROM_LOAD16_BYTE("u2.bin", 0x20000, 65536, CRC(65f58d3e) SHA1(8367cecb46fa6f9abe9e78b42c25ce8699d5d3f3))
ROM_LOAD16_BYTE("u3.bin", 0x40000, 65536, CRC(9bc70573) SHA1(b7e375e11f6758d59d32236fc1c42eafc892d247))
ROM_LOAD16_BYTE("u4.bin", 0x60000, 65536, CRC(52debeba) SHA1(996e83e604501979fd80ae47ff1cda9890613982))
ROM_LOAD16_BYTE("u5.bin", 0x80000, 65536, CRC(93b4bce8) SHA1(77efec9a95b9e543e1cdb00196d1794ca0c8b4ba))
ROM_LOAD16_BYTE("u6.bin", 0xa0000, 65536, CRC(bda3d054) SHA1(c83d6f571ce5aa63ad3954ac02ff4069c01a1464))
ROM_LOAD16_BYTE("u9.bin", 0x00001, 65536, CRC(009e9fcb) SHA1(520f583a826516f7d676391daf31ed035162c263))
ROM_LOAD16_BYTE("u10.bin", 0x20001, 65536, CRC(84f90a1d) SHA1(9358aa7fa83ed9617d318936cbab79002853b0ce))
ROM_LOAD16_BYTE("u11.bin", 0x40001, 65536, CRC(e486e0f3) SHA1(66b5dd6c2c277156ad6c3ee5b99c34e243d897be))
ROM_LOAD16_BYTE("u12.bin", 0x60001, 65536, CRC(d5a08c7b) SHA1(be997cf9bbdb8fdd6c7e95754747016293c51c7f))
ROM_LOAD16_BYTE("u13.bin", 0x80001, 65536, CRC(9811c34c) SHA1(1655cac651889950b881e6be72f035c7de0a1aed))
ROM_LOAD16_BYTE("u14.bin", 0xa0001, 65536, CRC(96527d4e) SHA1(6706ab97eab4465ea4fa2d6b07e8107468e83818))
ROM_END
MACHINE_CONFIG_START(dio16_98603b_device::device_add_mconfig)
MACHINE_CONFIG_END
const tiny_rom_entry *dio16_98603b_device::device_rom_region() const
{
return ROM_NAME(hp98603b);
}
dio16_98603b_device::dio16_98603b_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
dio16_98603b_device(mconfig, HPDIO_98603B, tag, owner, clock)
{
}
dio16_98603b_device::dio16_98603b_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_dio16_card_interface(mconfig, *this)
{
}
void dio16_98603b_device::device_start()
{
set_dio_device();
}
void dio16_98603b_device::device_reset()
{
m_rom = device().machine().root_device().memregion(this->subtag(HP98603B_ROM_REGION).c_str())->base();
m_dio->install_memory(0x100000, 0x1fffff, read16_delegate(FUNC(dio16_98603b_device::rom_r), this),
write16_delegate(FUNC(dio16_98603b_device::rom_w), this));
}
READ16_MEMBER(dio16_98603b_device::rom_r)
{
return m_rom[offset*2] | (m_rom[offset*2+1] << 8);
}
WRITE16_MEMBER(dio16_98603b_device::rom_w)
{
}

View File

@ -0,0 +1,38 @@
// license:BSD-3-Clause
// copyright-holders:Sven Schnelle
#ifndef MAME_BUS_HPDIO_98603B_H
#define MAME_BUS_HPDIO_98603B_H
#pragma once
#include "hp_dio.h"
class dio16_98603b_device :
public device_t,
public device_dio16_card_interface
{
public:
// construction/destruction
dio16_98603b_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
DECLARE_READ16_MEMBER(rom_r);
DECLARE_WRITE16_MEMBER(rom_w);
protected:
dio16_98603b_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
// device-level overrides
virtual void device_start() override;
virtual void device_reset() override;
// optional information overrides
virtual void device_add_mconfig(machine_config &config) override;
virtual const tiny_rom_entry *device_rom_region() const override;
private:
uint8_t *m_rom;
};
DECLARE_DEVICE_TYPE(HPDIO_98603B, dio16_98603b_device)
#endif // MAME_BUS_HPDIO_98603B_H

View File

@ -63,7 +63,8 @@
#include "bus/hp_dio/hp98544.h"
#include "bus/hp_hil/hp_hil.h"
#include "bus/hp_hil/hil_devices.h"
#include "bus/hp_dio/hp98603.h"
#include "bus/hp_dio/hp98603a.h"
#include "bus/hp_dio/hp98603b.h"
#include "bus/hp_dio/hp98644.h"
#include "screen.h"
#include "speaker.h"
@ -383,7 +384,8 @@ READ8_MEMBER(hp9k3xx_state::iocpu_test0_r)
static SLOT_INTERFACE_START(dio16_cards)
SLOT_INTERFACE("98544", HPDIO_98544) /* 98544 High Resolution Monochrome Card */
SLOT_INTERFACE("98603", HPDIO_98603) /* 98603 ROM BASIC */
SLOT_INTERFACE("98603a", HPDIO_98603A) /* 98603A ROM BASIC (4.0) */
SLOT_INTERFACE("98603b", HPDIO_98603B) /* 98603B ROM BASIC (5.1) */
SLOT_INTERFACE("98644", HPDIO_98644) /* 98644 Async serial interface */
SLOT_INTERFACE_END
@ -412,7 +414,7 @@ MACHINE_CONFIG_START(hp9k3xx_state::hp9k310)
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, "98603", true)
MCFG_DIO16_SLOT_ADD("diobus", "sl2", dio16_cards, "98603b", true)
MCFG_DIO16_SLOT_ADD("diobus", "sl3", dio16_cards, "98644", true)
MCFG_DIO16_SLOT_ADD("diobus", "sl4", dio16_cards, nullptr, false)
MACHINE_CONFIG_END
@ -442,7 +444,7 @@ MACHINE_CONFIG_START(hp9k3xx_state::hp9k320)
MCFG_DEVICE_ADD("diobus", DIO32, 0)
MCFG_DIO32_CPU(":maincpu")
MCFG_DIO32_SLOT_ADD("diobus", "sl1", dio16_cards, "98544", true)
MCFG_DIO16_SLOT_ADD("diobus", "sl2", dio16_cards, "98603", true)
MCFG_DIO16_SLOT_ADD("diobus", "sl2", dio16_cards, "98603b", true)
MCFG_DIO16_SLOT_ADD("diobus", "sl3", dio16_cards, "98644", true)
MCFG_DIO32_SLOT_ADD("diobus", "sl4", dio16_cards, nullptr, false)
MACHINE_CONFIG_END