mirror of
https://github.com/holub/mame
synced 2025-04-23 00:39:36 +03:00
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/tandy1t.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/video/pc_t1t.cpp",
|
||||
MAME_DIR .. "src/mame/video/pc_t1t.h",
|
||||
|
@ -26,11 +26,12 @@
|
||||
- backup ram (stores config.sys)
|
||||
- HardRAM (static RAM board)
|
||||
- native keyboard (MCU dump missing)
|
||||
- font selector (CRTC register 0x12)
|
||||
- font selector (CRTC register 0x12; DIP switches PJ20, PJ21)
|
||||
|
||||
Useful links:
|
||||
- board photo: http://s8.hostingkartinok.com/uploads/images/2016/05/579e9d152bc772d9c16bc8ac611eb97f.jpg
|
||||
- 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/ram.h"
|
||||
#include "machine/rp5c01.h"
|
||||
#include "machine/tosh1000_bram.h"
|
||||
#include "softlist.h"
|
||||
|
||||
|
||||
@ -67,6 +69,7 @@ public:
|
||||
: driver_device(mconfig, type, tag)
|
||||
, m_maincpu(*this, "maincpu")
|
||||
, m_bankdev(*this, "bankdev")
|
||||
, m_bram(*this, "bram")
|
||||
{ }
|
||||
|
||||
DECLARE_MACHINE_RESET(tosh1000);
|
||||
@ -75,9 +78,22 @@ public:
|
||||
DECLARE_WRITE8_MEMBER(romdos_bank_w);
|
||||
DECLARE_READ8_MEMBER(romdos_bank_r);
|
||||
|
||||
DECLARE_WRITE8_MEMBER(bram_w);
|
||||
DECLARE_READ8_MEMBER(bram_r);
|
||||
|
||||
protected:
|
||||
required_device<cpu_device> m_maincpu;
|
||||
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)
|
||||
{
|
||||
m_bram_latch = false;
|
||||
m_bram_offset = 0;
|
||||
m_bram_state = IDLE;
|
||||
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 )
|
||||
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 )
|
||||
ADDRESS_MAP_UNMAP_HIGH
|
||||
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(0x02c0, 0x02df) AM_DEVREADWRITE("rtc", tc8521_device, read, write)
|
||||
ADDRESS_MAP_END
|
||||
@ -173,6 +279,8 @@ static MACHINE_CONFIG_START( tosh1000 )
|
||||
|
||||
MCFG_RAM_ADD(RAM_TAG)
|
||||
MCFG_RAM_DEFAULT_SIZE("512K")
|
||||
|
||||
MCFG_TOSH1000_BRAM_ADD("bram")
|
||||
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