System ROM up and running, ROM/RAM adress map ok, started to add PIT

This commit is contained in:
Joakim Larsson Edstrom 2015-08-31 23:15:51 +02:00
parent 00bfb01e9b
commit ac9da1ef31

View File

@ -71,18 +71,16 @@
*---------------------------------
* TBD
*
* Misc links about Motorola VME division and this board:
* Misc links about Motorola VME division and this board: TBD
*
* Address Map
* --------------------------------------------------------------------------
* Local to VME Decscription
* --------------------------------------------------------------------------
* 0xffffff To of A24
* 0xfc0000
* 0x200000 (top of 2 meg RAM)
* 0x100000 (top of 1 meg RAM)
* Exception Vectors
* 0x000000 (bottom of memory)
* 0x000000 Up to 128Kb System ROM with RESET vector
* 0x020000 RAM with vectors
* 0x020500 RAM Top of stack
* 0x040000 PIT device
* --------------------------------------------------------------------------
*
* Interrupt sources MVME
@ -114,6 +112,7 @@
#include "emu.h"
#include "cpu/m68000/m68000.h"
#include "machine/68230pit.h"
#define LOG(x) x
@ -122,12 +121,11 @@ class mvme350_state : public driver_device
public:
mvme350_state(const machine_config &mconfig, device_type type, const char *tag) :
driver_device (mconfig, type, tag),
m_maincpu (*this, "maincpu")
m_maincpu (*this, "maincpu"),
m_pit(*this, "pit")
{
}
//DECLARE_READ16_MEMBER (bootvect_r);
//DECLARE_WRITE16_MEMBER (bootvect_w);
DECLARE_READ16_MEMBER (vme_a24_r);
DECLARE_WRITE16_MEMBER (vme_a24_w);
DECLARE_READ16_MEMBER (vme_a16_r);
@ -137,20 +135,16 @@ virtual void machine_reset ();
protected:
private:
required_device<cpu_device> m_maincpu;
required_device<cpu_device> m_maincpu;
required_device<pit68230_device> m_pit;
// Pointer to System ROMs needed by bootvect_r and masking RAM buffer for post reset accesses
// UINT16 *m_sysrom;
// UINT16 m_sysram[4];
};
static ADDRESS_MAP_START (mvme350_mem, AS_PROGRAM, 16, mvme350_state)
ADDRESS_MAP_UNMAP_HIGH
//AM_RANGE (0x000000, 0x000007) AM_ROM AM_READ (bootvect_r) /* ROM mirror just durin reset */
//AM_RANGE (0x000000, 0x000007) AM_RAM AM_WRITE (bootvect_w) /* After first write we act as RAM */
//AM_RANGE (0x000008, 0x0fffff) AM_RAM /* 1 Mb RAM */
AM_RANGE (0x000000, 0x01ffff) AM_ROM /* 128 Mb ROM */
AM_RANGE (0x020000, 0x03ffff) AM_RAM /* 128 Mb RAM */
//AM_RANGE(0x060000, 0x060035) AM_DEVREADWRITE8("pit", pit68230_device, data_r, data_w, 0x00ff)
//AM_RANGE(0x100000, 0xfeffff) AM_READWRITE(vme_a24_r, vme_a24_w) /* VMEbus Rev B addresses (24 bits) - not verified */
//AM_RANGE(0xff0000, 0xffffff) AM_READWRITE(vme_a16_r, vme_a16_w) /* VMEbus Rev B addresses (16 bits) - not verified */
ADDRESS_MAP_END
@ -163,40 +157,14 @@ INPUT_PORTS_END
void mvme350_state::machine_start ()
{
LOG (logerror ("machine_start\n"));
/* Setup pointer to bootvector in ROM for bootvector handler bootvect_r */
// m_sysrom = (UINT16*)(memregion ("maincpu")->base () + 0x0fc0000);
}
/* Support CPU resets
TODO: Investigate why the user need two 'softreset' commands for the below to work.
If only one 'softreset' is given the reset PC gets the RAM content, not the intended ROM vector.
Race conditions? Wrong call order in memory system? Debugger prefetch accesses?
*/
void mvme350_state::machine_reset ()
{
LOG (logerror ("machine_reset\n"));
/* Reset pointer to bootvector in ROM for bootvector handler bootvect_r */
// if (m_sysrom == &m_sysram[0]) /* Condition needed because memory map is not setup first time */
// m_sysrom = (UINT16*)(memregion ("maincpu")->base () + 0x0fc0000);
}
#if 0
/* Boot vector handler, the PCB hardwires the first 8 bytes from 0xfc0000 to 0x0 at reset*/
READ16_MEMBER (mvme350_state::bootvect_r){
//LOG (logerror ("bootvect_r %s\n", m_sysrom != &m_sysram[0] ? "as reset" : "as swapped"));
return m_sysrom [offset];
}
WRITE16_MEMBER (mvme350_state::bootvect_w){
LOG (logerror("bootvect_w offset %08x, mask %08x, data %04x\n", offset, mem_mask, data));
m_sysram[offset % sizeof(m_sysram)] &= ~mem_mask;
m_sysram[offset % sizeof(m_sysram)] |= (data & mem_mask);
m_sysrom = &m_sysram[0]; // redirect all upcomming accesses to masking RAM until reset.
}
/* Dummy VME access methods until the VME bus device is ready for use */
READ16_MEMBER (mvme350_state::vme_a24_r){
LOG (logerror ("vme_a24_r\n"));
@ -221,11 +189,11 @@ WRITE16_MEMBER (mvme350_state::vme_a16_w){
* Machine configuration
*/
static MACHINE_CONFIG_START (mvme350, mvme350_state)
/* basic machine hardware */
MCFG_CPU_ADD ("maincpu", M68010, XTAL_10MHz)
MCFG_CPU_PROGRAM_MAP (mvme350_mem)
/* Terminal Port config */
/* basic machine hardware */
MCFG_CPU_ADD ("maincpu", M68010, XTAL_10MHz)
MCFG_CPU_PROGRAM_MAP (mvme350_mem)
/* PIT Parallel Interface and Timer device, assuming strapped for on board clock */
MCFG_DEVICE_ADD("pit", PIT68230, XTAL_16MHz / 2)
MACHINE_CONFIG_END
@ -233,16 +201,18 @@ MACHINE_CONFIG_END
ROM_START (mvme350)
ROM_REGION (0x1000000, "maincpu", 0)
ROM_LOAD16_BYTE ("hk68kv10U23.bin", 0xFC0001, 0x2000, CRC (632aa026) SHA1 (f2b1ed0cc38dfbeb1602c013e00757015400720d))
ROM_LOAD16_BYTE ("hk68kv10U12.bin", 0xFC0000, 0x2000, CRC (f2d688e9) SHA1 (e68699965645f0ce53de47625163c3eb02c8b727))
ROM_LOAD16_BYTE ("mvme350U40v2.3.bin", 0x0000, 0x4000, CRC (bcef82ef) SHA1 (e6fdf26e4714cbaeb3e97d7b5acf02d64d8ad744))
ROM_LOAD16_BYTE ("mvme350U47v2.3.bin", 0x0001, 0x4000, CRC (582ce095) SHA1 (d0929dbfeb0cfda63df6b5bc29ee27fbf665def7))
/*
* System ROM information
*
* The ROMs known commands from different sources:
*
* TBD
*
* NONE
*
* This is controller board which sets up the board and then executes a STOP instruction
* awaiting a CPU on the VME bus to request its services.
*/
ROM_END