Merge pull request #2969 from shattered/_b26597f
tosh1000: hook up NVRAM for CONFIG.SYS storage
This commit is contained in:
commit
bfffc50606
@ -2635,6 +2635,8 @@ files {
|
|||||||
MAME_DIR .. "src/mame/drivers/pcipc.cpp",
|
MAME_DIR .. "src/mame/drivers/pcipc.cpp",
|
||||||
MAME_DIR .. "src/mame/drivers/tandy1t.cpp",
|
MAME_DIR .. "src/mame/drivers/tandy1t.cpp",
|
||||||
MAME_DIR .. "src/mame/drivers/tosh1000.cpp",
|
MAME_DIR .. "src/mame/drivers/tosh1000.cpp",
|
||||||
|
MAME_DIR .. "src/mame/machine/tosh1000_bram.cpp",
|
||||||
|
MAME_DIR .. "src/mame/machine/tosh1000_bram.h",
|
||||||
MAME_DIR .. "src/mame/drivers/compc.cpp",
|
MAME_DIR .. "src/mame/drivers/compc.cpp",
|
||||||
MAME_DIR .. "src/mame/video/pc_t1t.cpp",
|
MAME_DIR .. "src/mame/video/pc_t1t.cpp",
|
||||||
MAME_DIR .. "src/mame/video/pc_t1t.h",
|
MAME_DIR .. "src/mame/video/pc_t1t.h",
|
||||||
|
@ -26,11 +26,12 @@
|
|||||||
- backup ram (stores config.sys)
|
- backup ram (stores config.sys)
|
||||||
- HardRAM (static RAM board)
|
- HardRAM (static RAM board)
|
||||||
- native keyboard (MCU dump missing)
|
- native keyboard (MCU dump missing)
|
||||||
- font selector (CRTC register 0x12)
|
- font selector (CRTC register 0x12; DIP switches PJ20, PJ21)
|
||||||
|
|
||||||
Useful links:
|
Useful links:
|
||||||
- board photo: http://s8.hostingkartinok.com/uploads/images/2016/05/579e9d152bc772d9c16bc8ac611eb97f.jpg
|
- board photo: http://s8.hostingkartinok.com/uploads/images/2016/05/579e9d152bc772d9c16bc8ac611eb97f.jpg
|
||||||
- manuals: http://www.minuszerodegrees.net/manuals/Toshiba/Toshiba.htm
|
- manuals: http://www.minuszerodegrees.net/manuals/Toshiba/Toshiba.htm
|
||||||
|
- http://www.seasip.info/VintagePC/t1000.html
|
||||||
|
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
|
|
||||||
@ -44,6 +45,7 @@
|
|||||||
#include "machine/bankdev.h"
|
#include "machine/bankdev.h"
|
||||||
#include "machine/ram.h"
|
#include "machine/ram.h"
|
||||||
#include "machine/rp5c01.h"
|
#include "machine/rp5c01.h"
|
||||||
|
#include "machine/tosh1000_bram.h"
|
||||||
#include "softlist.h"
|
#include "softlist.h"
|
||||||
|
|
||||||
|
|
||||||
@ -67,6 +69,7 @@ public:
|
|||||||
: driver_device(mconfig, type, tag)
|
: driver_device(mconfig, type, tag)
|
||||||
, m_maincpu(*this, "maincpu")
|
, m_maincpu(*this, "maincpu")
|
||||||
, m_bankdev(*this, "bankdev")
|
, m_bankdev(*this, "bankdev")
|
||||||
|
, m_bram(*this, "bram")
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
DECLARE_MACHINE_RESET(tosh1000);
|
DECLARE_MACHINE_RESET(tosh1000);
|
||||||
@ -75,9 +78,22 @@ public:
|
|||||||
DECLARE_WRITE8_MEMBER(romdos_bank_w);
|
DECLARE_WRITE8_MEMBER(romdos_bank_w);
|
||||||
DECLARE_READ8_MEMBER(romdos_bank_r);
|
DECLARE_READ8_MEMBER(romdos_bank_r);
|
||||||
|
|
||||||
|
DECLARE_WRITE8_MEMBER(bram_w);
|
||||||
|
DECLARE_READ8_MEMBER(bram_r);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
required_device<cpu_device> m_maincpu;
|
required_device<cpu_device> m_maincpu;
|
||||||
required_device<address_map_bank_device> m_bankdev;
|
required_device<address_map_bank_device> m_bankdev;
|
||||||
|
required_device<tosh1000_bram_device> m_bram;
|
||||||
|
|
||||||
|
private:
|
||||||
|
enum {
|
||||||
|
IDLE, READ_DATA, WRITE_DATA
|
||||||
|
};
|
||||||
|
|
||||||
|
bool m_bram_latch = false;
|
||||||
|
int m_bram_offset = 0;
|
||||||
|
int m_bram_state = IDLE;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -87,6 +103,9 @@ DRIVER_INIT_MEMBER(tosh1000_state, tosh1000)
|
|||||||
|
|
||||||
MACHINE_RESET_MEMBER(tosh1000_state, tosh1000)
|
MACHINE_RESET_MEMBER(tosh1000_state, tosh1000)
|
||||||
{
|
{
|
||||||
|
m_bram_latch = false;
|
||||||
|
m_bram_offset = 0;
|
||||||
|
m_bram_state = IDLE;
|
||||||
m_bankdev->set_bank(8);
|
m_bankdev->set_bank(8);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -105,6 +124,92 @@ WRITE8_MEMBER(tosh1000_state::romdos_bank_w)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
WRITE8_MEMBER(tosh1000_state::bram_w)
|
||||||
|
{
|
||||||
|
DBG_LOG(2, "BRAM", ("%02x <- %02x\n", 0xc0 + offset, data));
|
||||||
|
|
||||||
|
switch (offset)
|
||||||
|
{
|
||||||
|
case 1:
|
||||||
|
if (m_bram_latch)
|
||||||
|
{
|
||||||
|
DBG_LOG(1, "Backup RAM", ("%02x <- %02x\n", m_bram_offset % 160, data));
|
||||||
|
m_bram->write(m_bram_offset % 160, data);
|
||||||
|
m_bram_offset++;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (m_bram_state == WRITE_DATA)
|
||||||
|
{
|
||||||
|
m_bram_latch = true;
|
||||||
|
m_bram_offset = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 3:
|
||||||
|
switch (data & 0xc0)
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
m_bram_state = IDLE;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 0x40:
|
||||||
|
m_bram_state = READ_DATA;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 0x80:
|
||||||
|
m_bram_state = WRITE_DATA;
|
||||||
|
m_bram_latch = false;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
m_bram_state = IDLE;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
READ8_MEMBER(tosh1000_state::bram_r)
|
||||||
|
{
|
||||||
|
uint8_t data = 0;
|
||||||
|
|
||||||
|
switch (offset)
|
||||||
|
{
|
||||||
|
case 2:
|
||||||
|
if (m_bram_state == READ_DATA)
|
||||||
|
{
|
||||||
|
data = m_bram->read(m_bram_offset % 160);
|
||||||
|
DBG_LOG(1, "BRAM", ("@ %02x == %02x\n", m_bram_offset % 160, data));
|
||||||
|
m_bram_offset++;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 3:
|
||||||
|
data = 0x2c;
|
||||||
|
switch (m_bram_state)
|
||||||
|
{
|
||||||
|
case IDLE:
|
||||||
|
// bit 4 -- floppy drive disk change signal
|
||||||
|
break;
|
||||||
|
|
||||||
|
case READ_DATA:
|
||||||
|
data |= 0x43; // always ready to read (and write ??)
|
||||||
|
break;
|
||||||
|
|
||||||
|
case WRITE_DATA:
|
||||||
|
data |= 0x82; // always ready to write
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
DBG_LOG(2, "BRAM", ("%02x == %02x\n", 0xc0 + offset, data));
|
||||||
|
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static ADDRESS_MAP_START( tosh1000_romdos, AS_PROGRAM, 8, tosh1000_state )
|
static ADDRESS_MAP_START( tosh1000_romdos, AS_PROGRAM, 8, tosh1000_state )
|
||||||
AM_RANGE(0x00000, 0x0ffff) AM_ROM AM_REGION("romdos", 0)
|
AM_RANGE(0x00000, 0x0ffff) AM_ROM AM_REGION("romdos", 0)
|
||||||
@ -126,6 +231,7 @@ ADDRESS_MAP_END
|
|||||||
static ADDRESS_MAP_START( tosh1000_io, AS_IO, 8, tosh1000_state )
|
static ADDRESS_MAP_START( tosh1000_io, AS_IO, 8, tosh1000_state )
|
||||||
ADDRESS_MAP_UNMAP_HIGH
|
ADDRESS_MAP_UNMAP_HIGH
|
||||||
AM_RANGE(0x0000, 0x00ff) AM_DEVICE("mb", ibm5160_mb_device, map)
|
AM_RANGE(0x0000, 0x00ff) AM_DEVICE("mb", ibm5160_mb_device, map)
|
||||||
|
AM_RANGE(0x00c0, 0x00c3) AM_READWRITE(bram_r, bram_w)
|
||||||
AM_RANGE(0x00c8, 0x00c8) AM_WRITE(romdos_bank_w) // ROM-DOS page select [p. B-15]
|
AM_RANGE(0x00c8, 0x00c8) AM_WRITE(romdos_bank_w) // ROM-DOS page select [p. B-15]
|
||||||
AM_RANGE(0x02c0, 0x02df) AM_DEVREADWRITE("rtc", tc8521_device, read, write)
|
AM_RANGE(0x02c0, 0x02df) AM_DEVREADWRITE("rtc", tc8521_device, read, write)
|
||||||
ADDRESS_MAP_END
|
ADDRESS_MAP_END
|
||||||
@ -173,6 +279,8 @@ static MACHINE_CONFIG_START( tosh1000 )
|
|||||||
|
|
||||||
MCFG_RAM_ADD(RAM_TAG)
|
MCFG_RAM_ADD(RAM_TAG)
|
||||||
MCFG_RAM_DEFAULT_SIZE("512K")
|
MCFG_RAM_DEFAULT_SIZE("512K")
|
||||||
|
|
||||||
|
MCFG_TOSH1000_BRAM_ADD("bram")
|
||||||
MACHINE_CONFIG_END
|
MACHINE_CONFIG_END
|
||||||
|
|
||||||
|
|
||||||
|
92
src/mame/machine/tosh1000_bram.cpp
Normal file
92
src/mame/machine/tosh1000_bram.cpp
Normal file
@ -0,0 +1,92 @@
|
|||||||
|
// license:BSD-3-Clause
|
||||||
|
// copyright-holders:Sergey Svishchev
|
||||||
|
/***************************************************************************
|
||||||
|
|
||||||
|
Toshiba 1000 Backup RAM
|
||||||
|
|
||||||
|
Simulation of interface provided by 80C50 keyboard controller.
|
||||||
|
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
#include "emu.h"
|
||||||
|
#include "tosh1000_bram.h"
|
||||||
|
|
||||||
|
|
||||||
|
DEFINE_DEVICE_TYPE(TOSH1000_BRAM, tosh1000_bram_device, "tosh1000_bram", "Toshiba T1000 Backup RAM")
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// ctor
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
tosh1000_bram_device::tosh1000_bram_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
|
||||||
|
: device_t(mconfig, TOSH1000_BRAM, tag, owner, clock)
|
||||||
|
, device_nvram_interface(mconfig, *this)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
uint8_t tosh1000_bram_device::read(int offset)
|
||||||
|
{
|
||||||
|
return m_bram[offset];
|
||||||
|
}
|
||||||
|
|
||||||
|
void tosh1000_bram_device::write(int offset, uint8_t data)
|
||||||
|
{
|
||||||
|
m_bram[offset] = data;
|
||||||
|
}
|
||||||
|
|
||||||
|
READ8_MEMBER( tosh1000_bram_device::read )
|
||||||
|
{
|
||||||
|
return m_bram[offset];
|
||||||
|
}
|
||||||
|
|
||||||
|
WRITE8_MEMBER( tosh1000_bram_device::write )
|
||||||
|
{
|
||||||
|
m_bram[offset] = data;
|
||||||
|
}
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// nvram_default - called to initialize NVRAM to
|
||||||
|
// its default state
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
void tosh1000_bram_device::nvram_default()
|
||||||
|
{
|
||||||
|
memset(m_bram, 0x1a, BRAM_SIZE);
|
||||||
|
}
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// nvram_read - called to read NVRAM from the
|
||||||
|
// .nv file
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
void tosh1000_bram_device::nvram_read(emu_file &file)
|
||||||
|
{
|
||||||
|
file.read(m_bram, BRAM_SIZE);
|
||||||
|
}
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// nvram_write - called to write NVRAM to the
|
||||||
|
// .nv file
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
void tosh1000_bram_device::nvram_write(emu_file &file)
|
||||||
|
{
|
||||||
|
file.write(m_bram, BRAM_SIZE);
|
||||||
|
}
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// device_start - device-specific startup
|
||||||
|
//-------------------------------------------------
|
||||||
|
void tosh1000_bram_device::device_start()
|
||||||
|
{
|
||||||
|
/* register for save states */
|
||||||
|
save_item(NAME(m_bram));
|
||||||
|
}
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// device_reset - device-specific reset
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
void tosh1000_bram_device::device_reset()
|
||||||
|
{
|
||||||
|
}
|
57
src/mame/machine/tosh1000_bram.h
Normal file
57
src/mame/machine/tosh1000_bram.h
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
// license:BSD-3-Clause
|
||||||
|
// copyright-holders:Sergey Svishchev
|
||||||
|
/***************************************************************************
|
||||||
|
|
||||||
|
Toshiba 1000 Backup RAM
|
||||||
|
|
||||||
|
Simulation of interface provided by 80C50 keyboard controller.
|
||||||
|
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
#ifndef __TOSH1000_BRAM_H__
|
||||||
|
#define __TOSH1000_BRAM_H__
|
||||||
|
|
||||||
|
/***************************************************************************
|
||||||
|
DEVICE CONFIGURATION MACROS
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
#define MCFG_TOSH1000_BRAM_ADD(_tag) \
|
||||||
|
MCFG_DEVICE_ADD(_tag, TOSH1000_BRAM, 0)
|
||||||
|
|
||||||
|
|
||||||
|
#define BRAM_SIZE 160
|
||||||
|
|
||||||
|
// ======================> tosh1000_bram_device
|
||||||
|
|
||||||
|
class tosh1000_bram_device : public device_t,
|
||||||
|
public device_nvram_interface
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
// construction/destruction
|
||||||
|
tosh1000_bram_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
// device-level overrides
|
||||||
|
virtual void device_start() override;
|
||||||
|
virtual void device_reset() override;
|
||||||
|
|
||||||
|
// device_nvram_interface overrides
|
||||||
|
virtual void nvram_default() override;
|
||||||
|
virtual void nvram_read(emu_file &file) override;
|
||||||
|
virtual void nvram_write(emu_file &file) override;
|
||||||
|
|
||||||
|
public:
|
||||||
|
DECLARE_READ8_MEMBER( read );
|
||||||
|
DECLARE_WRITE8_MEMBER( write );
|
||||||
|
|
||||||
|
uint8_t read(int offset);
|
||||||
|
void write(int offset, uint8_t data);
|
||||||
|
|
||||||
|
private:
|
||||||
|
uint8_t m_bram[BRAM_SIZE];
|
||||||
|
};
|
||||||
|
|
||||||
|
// device type definition
|
||||||
|
extern const device_type TOSH1000_BRAM;
|
||||||
|
|
||||||
|
#endif
|
Loading…
Reference in New Issue
Block a user