mirror of
https://github.com/holub/mame
synced 2025-04-16 13:34:55 +03:00
IPC skeleton (nw)
This commit is contained in:
parent
1f78170b4d
commit
43e4d38a6f
@ -1623,7 +1623,8 @@ files {
|
||||
MAME_DIR .. "src/mess/drivers/hp9845.c",
|
||||
MAME_DIR .. "src/mess/drivers/hp9k.c",
|
||||
MAME_DIR .. "src/mess/drivers/hp9k_3xx.c",
|
||||
MAME_DIR .. "src/mess/drivers/hp64k.c",
|
||||
MAME_DIR .. "src/mess/drivers/hp64k.c",
|
||||
MAME_DIR .. "src/mess/drivers/hp_ipc.c",
|
||||
}
|
||||
|
||||
createMESSProjects(_target, _subtarget, "hec2hrp")
|
||||
|
@ -2726,4 +2726,5 @@ bitgrpha
|
||||
bitgrphb
|
||||
tvgame
|
||||
aussieby
|
||||
hp_ipc
|
||||
|
||||
|
160
src/mess/drivers/hp_ipc.c
Normal file
160
src/mess/drivers/hp_ipc.c
Normal file
@ -0,0 +1,160 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:
|
||||
/******************************************************************************
|
||||
|
||||
HP Integral Personal Computer (IPC) skeleton driver
|
||||
|
||||
Interrupt levels:
|
||||
7 - Soft reset from keyboard
|
||||
6 - Real-time clock or NBIR3 (external)
|
||||
5 - Disc drive or NBIR2 (external)
|
||||
4 - GPU or NBIR1 (external)
|
||||
3 - HP-IB, printer, or NBIR0 (external)
|
||||
2 - HP-HIL devices (keyboard, mouse, etc)
|
||||
1 - Real-time clock
|
||||
|
||||
******************************************************************************/
|
||||
|
||||
#include "emu.h"
|
||||
#include "cpu/m68000/m68000.h"
|
||||
|
||||
|
||||
class hp_ipc_state : public driver_device
|
||||
{
|
||||
public:
|
||||
hp_ipc_state(const machine_config &mconfig, device_type type, const char *tag)
|
||||
: driver_device(mconfig, type, tag)
|
||||
, m_maincpu(*this, "maincpu")
|
||||
{ }
|
||||
|
||||
DECLARE_WRITE16_MEMBER(mmu_w);
|
||||
DECLARE_READ16_MEMBER(ram_r);
|
||||
DECLARE_WRITE16_MEMBER(ram_w);
|
||||
|
||||
private:
|
||||
required_device<m68000_device> m_maincpu;
|
||||
|
||||
UINT32 m_mmu[4];
|
||||
UINT16 m_internal_ram[0x40000];
|
||||
|
||||
inline UINT32 get_ram_address(offs_t offset) { return (m_mmu[(m_maincpu->get_fc() >> 1) & 3] + offset) & 0x3FFFFF; }
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
Physical Address Map:
|
||||
000000 - 07FFFF Internal ROM (operating system PCA)
|
||||
080000 - 0FFFFF Internal ROM (option ROM PCA)
|
||||
100000 - 4FFFFF External ROM modules
|
||||
500000 - 5FFFFF Reserved
|
||||
600000 - 6FFFFF Internal I/O
|
||||
600000 - 60FFFF MMU
|
||||
610000 - 61FFFF Disc Drive
|
||||
620000 - 62FFFF Display
|
||||
630000 - 63FFFF HP-IB
|
||||
640000 - 64FFFF Real-Time Clock
|
||||
650000 - 65FFFF Printer
|
||||
660000 - 66FFFF Keyboard
|
||||
670000 - 67FFFF Speaker
|
||||
680000 - 68FFFF Reserved
|
||||
690000 - 69FFFF Reserved
|
||||
6A0000 - 6AFFFF Reserved
|
||||
6B0000 - 6BFFFF Reserved
|
||||
6C0000 - 6CFFFF Reserved
|
||||
6D0000 - 6DFFFF Reserved
|
||||
6E0000 - 6EFFFF Reserved
|
||||
6F0000 - 6FFFFF Reserved
|
||||
700000 - 7FFFFF External I/O
|
||||
700000 - 70FFFF Mainframe Port A
|
||||
710000 - 71FFFF Mainframe Port B
|
||||
720000 - 72FFFF Bus Expander Port A1
|
||||
730000 - 73FFFF Bus Expander Port A2
|
||||
740000 - 74FFFF Bus Expander Port A3
|
||||
750000 - 75FFFF Bus Expander Port A4
|
||||
760000 - 76FFFF Bus Expander Port A5
|
||||
770000 - 77FFFF Reserved
|
||||
780000 - 78FFFF Reserved
|
||||
790000 - 79FFFF Reserved
|
||||
7A0000 - 7AFFFF Bus Expander Port B1
|
||||
7B0000 - 7BFFFF Bus Expander Port B2
|
||||
7C0000 - 7CFFFF Bus Expander Port B3
|
||||
7D0000 - 7DFFFF Bus Expander Port B4
|
||||
7E0000 - 7EFFFF Bus Expander Port B5
|
||||
7F0000 - 7FFFFF Reserved
|
||||
800000 - EFFFFF External RAM modules
|
||||
F00000 - F7FFFF Internal RAM
|
||||
F80000 - FFFFFF Reserved
|
||||
|
||||
All accesses to 800000-FFFFFF go through the "MMU" to form a final physical address
|
||||
|
||||
*/
|
||||
static ADDRESS_MAP_START(hp_ipc_mem, AS_PROGRAM, 16, hp_ipc_state)
|
||||
AM_RANGE(0x000000, 0x07FFFF) AM_ROM
|
||||
AM_RANGE(0x600000, 0x60FFFF) AM_WRITE(mmu_w)
|
||||
AM_RANGE(0x800000, 0xFFFFFF) AM_READWRITE(ram_r, ram_w)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
|
||||
static INPUT_PORTS_START(hp_ipc)
|
||||
INPUT_PORTS_END
|
||||
|
||||
|
||||
WRITE16_MEMBER(hp_ipc_state::mmu_w)
|
||||
{
|
||||
logerror("mmu_w: offset = %08x, data = %04x, register = %d, data_to_add = %08x\n", offset, data, offset & 3, (data & 0xFFF) << 10);
|
||||
m_mmu[offset & 3] = (data & 0xFFF) << 10;
|
||||
}
|
||||
|
||||
|
||||
READ16_MEMBER(hp_ipc_state::ram_r)
|
||||
{
|
||||
UINT32 ram_address = get_ram_address(offset);
|
||||
|
||||
//logerror("RAM read, offset = %08x, ram address = %08X\n", offset, ram_address);
|
||||
|
||||
if (ram_address < 0x380000)
|
||||
{
|
||||
// External RAM modules
|
||||
}
|
||||
else if (ram_address < 0x3c0000)
|
||||
{
|
||||
// Internal RAM
|
||||
return m_internal_ram[offset & 0x3ffff];
|
||||
}
|
||||
return 0xffff;
|
||||
}
|
||||
|
||||
|
||||
WRITE16_MEMBER(hp_ipc_state::ram_w)
|
||||
{
|
||||
UINT32 ram_address = get_ram_address(offset);
|
||||
|
||||
//logerror("RAM write, offset = %08x, ram address = %08X, data = %04x\n", offset, ram_address, data);
|
||||
|
||||
if (ram_address < 0x380000)
|
||||
{
|
||||
// External RAM modules
|
||||
}
|
||||
else if (ram_address < 0x3c0000)
|
||||
{
|
||||
// Internal RAM
|
||||
m_internal_ram[offset & 0x3ffff] = data;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static MACHINE_CONFIG_START(hp_ipc, hp_ipc_state)
|
||||
/* basic machine hardware */
|
||||
MCFG_CPU_ADD("maincpu", M68000, 15920000 / 2)
|
||||
MCFG_CPU_PROGRAM_MAP(hp_ipc_mem)
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
|
||||
ROM_START(hp_ipc)
|
||||
ROM_REGION(0x100000, "maincpu" , 0)
|
||||
ROM_LOAD("hp ipc os 82991A.bin", 0x00000, 0x80000, BAD_DUMP CRC(df45a37b) SHA1(476af9923bca0d2d0f40aeb81be5145ca76fddf5)) // Should be spread across 4 x 128K ROMs
|
||||
ROM_END
|
||||
|
||||
|
||||
COMP(198?, hp_ipc, 0, 0, hp_ipc, hp_ipc, driver_device, 0, "HP", "Integral Personal Computer", MACHINE_IS_SKELETON)
|
||||
|
Loading…
Reference in New Issue
Block a user