mirror of
https://github.com/holub/mame
synced 2025-10-06 17:08:28 +03:00
ti89.cpp: TI-92 is ROM-based; all others use flash memory (nw)
This commit is contained in:
parent
6f6a87dd45
commit
cb2b4628fa
@ -143,23 +143,9 @@ READ16_MEMBER ( ti68k_state::ti68k_io2_r )
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
WRITE16_MEMBER ( ti68k_state::flash_w )
|
READ16_MEMBER ( ti68k_state::rom_r )
|
||||||
{
|
{
|
||||||
// verification if it is flash memory
|
return m_rom_base[offset];
|
||||||
if (m_flash_mem)
|
|
||||||
m_flash->write(offset, data);
|
|
||||||
}
|
|
||||||
|
|
||||||
READ16_MEMBER ( ti68k_state::flash_r )
|
|
||||||
{
|
|
||||||
if (m_flash_mem)
|
|
||||||
{
|
|
||||||
return m_flash->read(offset);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return m_rom_base[offset];
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -208,7 +194,7 @@ void ti68k_state::ti89_mem(address_map &map)
|
|||||||
{
|
{
|
||||||
map.unmap_value_high();
|
map.unmap_value_high();
|
||||||
map(0x000000, 0x0fffff).ram().share("nvram");
|
map(0x000000, 0x0fffff).ram().share("nvram");
|
||||||
map(0x200000, 0x3fffff).rw(FUNC(ti68k_state::flash_r), FUNC(ti68k_state::flash_w));
|
map(0x200000, 0x3fffff).rw(m_flash, FUNC(intelfsh16_device::read), FUNC(intelfsh16_device::write));
|
||||||
map(0x400000, 0x5fffff).noprw();
|
map(0x400000, 0x5fffff).noprw();
|
||||||
map(0x600000, 0x6fffff).rw(FUNC(ti68k_state::ti68k_io_r), FUNC(ti68k_state::ti68k_io_w));
|
map(0x600000, 0x6fffff).rw(FUNC(ti68k_state::ti68k_io_r), FUNC(ti68k_state::ti68k_io_w));
|
||||||
map(0x700000, 0x7fffff).rw(FUNC(ti68k_state::ti68k_io2_r), FUNC(ti68k_state::ti68k_io2_w));
|
map(0x700000, 0x7fffff).rw(FUNC(ti68k_state::ti68k_io2_r), FUNC(ti68k_state::ti68k_io2_w));
|
||||||
@ -220,7 +206,7 @@ void ti68k_state::ti92p_mem(address_map &map)
|
|||||||
map.unmap_value_high();
|
map.unmap_value_high();
|
||||||
map(0x000000, 0x0fffff).ram().share("nvram");
|
map(0x000000, 0x0fffff).ram().share("nvram");
|
||||||
map(0x200000, 0x3fffff).noprw();
|
map(0x200000, 0x3fffff).noprw();
|
||||||
map(0x400000, 0x5fffff).rw(FUNC(ti68k_state::flash_r), FUNC(ti68k_state::flash_w));
|
map(0x400000, 0x5fffff).rw(m_flash, FUNC(intelfsh16_device::read), FUNC(intelfsh16_device::write));
|
||||||
map(0x600000, 0x6fffff).rw(FUNC(ti68k_state::ti68k_io_r), FUNC(ti68k_state::ti68k_io_w));
|
map(0x600000, 0x6fffff).rw(FUNC(ti68k_state::ti68k_io_r), FUNC(ti68k_state::ti68k_io_w));
|
||||||
map(0x700000, 0x7fffff).rw(FUNC(ti68k_state::ti68k_io2_r), FUNC(ti68k_state::ti68k_io2_w));
|
map(0x700000, 0x7fffff).rw(FUNC(ti68k_state::ti68k_io2_r), FUNC(ti68k_state::ti68k_io2_w));
|
||||||
}
|
}
|
||||||
@ -230,7 +216,7 @@ void ti68k_state::v200_mem(address_map &map)
|
|||||||
{
|
{
|
||||||
map.unmap_value_high();
|
map.unmap_value_high();
|
||||||
map(0x000000, 0x0fffff).ram().share("nvram");
|
map(0x000000, 0x0fffff).ram().share("nvram");
|
||||||
map(0x200000, 0x5fffff).rw(FUNC(ti68k_state::flash_r), FUNC(ti68k_state::flash_w));
|
map(0x200000, 0x5fffff).rw(m_flash, FUNC(intelfsh16_device::read), FUNC(intelfsh16_device::write));
|
||||||
map(0x600000, 0x6fffff).rw(FUNC(ti68k_state::ti68k_io_r), FUNC(ti68k_state::ti68k_io_w));
|
map(0x600000, 0x6fffff).rw(FUNC(ti68k_state::ti68k_io_r), FUNC(ti68k_state::ti68k_io_w));
|
||||||
map(0x700000, 0x70ffff).rw(FUNC(ti68k_state::ti68k_io2_r), FUNC(ti68k_state::ti68k_io2_w));
|
map(0x700000, 0x70ffff).rw(FUNC(ti68k_state::ti68k_io2_r), FUNC(ti68k_state::ti68k_io2_w));
|
||||||
}
|
}
|
||||||
@ -242,7 +228,7 @@ void ti68k_state::ti89t_mem(address_map &map)
|
|||||||
map(0x000000, 0x0fffff).ram().mirror(0x200000).share("nvram");
|
map(0x000000, 0x0fffff).ram().mirror(0x200000).share("nvram");
|
||||||
map(0x600000, 0x6fffff).rw(FUNC(ti68k_state::ti68k_io_r), FUNC(ti68k_state::ti68k_io_w));
|
map(0x600000, 0x6fffff).rw(FUNC(ti68k_state::ti68k_io_r), FUNC(ti68k_state::ti68k_io_w));
|
||||||
map(0x700000, 0x70ffff).rw(FUNC(ti68k_state::ti68k_io2_r), FUNC(ti68k_state::ti68k_io2_w));
|
map(0x700000, 0x70ffff).rw(FUNC(ti68k_state::ti68k_io2_r), FUNC(ti68k_state::ti68k_io2_w));
|
||||||
map(0x800000, 0xbfffff).rw(FUNC(ti68k_state::flash_r), FUNC(ti68k_state::flash_w));
|
map(0x800000, 0xbfffff).rw(m_flash, FUNC(intelfsh16_device::read), FUNC(intelfsh16_device::write));
|
||||||
map(0xc00000, 0xffffff).noprw();
|
map(0xc00000, 0xffffff).noprw();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -432,13 +418,10 @@ INPUT_PORTS_END
|
|||||||
|
|
||||||
void ti68k_state::machine_start()
|
void ti68k_state::machine_start()
|
||||||
{
|
{
|
||||||
int i;
|
if (m_flash.found())
|
||||||
|
|
||||||
m_flash_mem = !((m_rom_base[0x32] & 0x0f) != 0);
|
|
||||||
|
|
||||||
if (m_flash_mem)
|
|
||||||
{
|
{
|
||||||
uint32_t base = ((((m_rom_base[0x82]) << 16) | m_rom_base[0x83]) & 0xffff)>>1;
|
uint32_t base = ((((m_rom_base[0x82]) << 16) | m_rom_base[0x83]) & 0xffff)>>1;
|
||||||
|
int i;
|
||||||
|
|
||||||
if (m_rom_base[base] >= 8)
|
if (m_rom_base[base] >= 8)
|
||||||
m_hw_version = ((m_rom_base[base + 0x0b]) << 16) | m_rom_base[base + 0x0c];
|
m_hw_version = ((m_rom_base[base + 0x0b]) << 16) | m_rom_base[base + 0x0c];
|
||||||
@ -461,15 +444,15 @@ void ti68k_state::machine_start()
|
|||||||
|
|
||||||
if (m_initial_pc > 0x400000)
|
if (m_initial_pc > 0x400000)
|
||||||
{
|
{
|
||||||
m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0x400000, 0x5fffff, read16_delegate(FUNC(ti68k_state::flash_r), this),write16_delegate(FUNC(ti68k_state::flash_w), this));
|
m_maincpu->space(AS_PROGRAM).install_read_handler(0x400000, 0x5fffff, read16_delegate(FUNC(ti68k_state::rom_r), this));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0x200000, 0x3fffff, read16_delegate(FUNC(ti68k_state::flash_r), this), write16_delegate(FUNC(ti68k_state::flash_w), this));
|
m_maincpu->space(AS_PROGRAM).install_read_handler(0x200000, 0x3fffff, read16_delegate(FUNC(ti68k_state::rom_r), this));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
logerror("HW=v%x, PC=%06x, Type=%s\n", m_hw_version, m_initial_pc, (m_flash_mem) ? "Flash" : "ROM");
|
logerror("HW=v%x, PC=%06x, Type=%s\n", m_hw_version, m_initial_pc, m_flash.found() ? "Flash" : "ROM");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -549,6 +532,8 @@ void ti68k_state::ti92(machine_config &config)
|
|||||||
ti89(config);
|
ti89(config);
|
||||||
m_maincpu->set_addrmap(AS_PROGRAM, &ti68k_state::ti92_mem);
|
m_maincpu->set_addrmap(AS_PROGRAM, &ti68k_state::ti92_mem);
|
||||||
|
|
||||||
|
config.device_remove("flash");
|
||||||
|
|
||||||
/* video hardware */
|
/* video hardware */
|
||||||
subdevice<screen_device>("screen")->set_visarea(0, 240-1, 0, 128-1);
|
subdevice<screen_device>("screen")->set_visarea(0, 240-1, 0, 128-1);
|
||||||
}
|
}
|
||||||
@ -556,17 +541,23 @@ void ti68k_state::ti92(machine_config &config)
|
|||||||
|
|
||||||
void ti68k_state::ti92p(machine_config &config)
|
void ti68k_state::ti92p(machine_config &config)
|
||||||
{
|
{
|
||||||
ti92(config);
|
ti89(config);
|
||||||
m_maincpu->set_clock(XTAL(12'000'000));
|
m_maincpu->set_clock(XTAL(12'000'000));
|
||||||
m_maincpu->set_addrmap(AS_PROGRAM, &ti68k_state::ti92p_mem);
|
m_maincpu->set_addrmap(AS_PROGRAM, &ti68k_state::ti92p_mem);
|
||||||
|
|
||||||
|
/* video hardware */
|
||||||
|
subdevice<screen_device>("screen")->set_visarea(0, 240-1, 0, 128-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void ti68k_state::v200(machine_config &config)
|
void ti68k_state::v200(machine_config &config)
|
||||||
{
|
{
|
||||||
ti92(config);
|
ti89(config);
|
||||||
m_maincpu->set_clock(XTAL(12'000'000));
|
m_maincpu->set_clock(XTAL(12'000'000));
|
||||||
m_maincpu->set_addrmap(AS_PROGRAM, &ti68k_state::v200_mem);
|
m_maincpu->set_addrmap(AS_PROGRAM, &ti68k_state::v200_mem);
|
||||||
|
|
||||||
|
/* video hardware */
|
||||||
|
subdevice<screen_device>("screen")->set_visarea(0, 240-1, 0, 128-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -49,7 +49,7 @@ private:
|
|||||||
enum { HW1=1, HW2, HW3, HW4 };
|
enum { HW1=1, HW2, HW3, HW4 };
|
||||||
|
|
||||||
required_device<cpu_device> m_maincpu;
|
required_device<cpu_device> m_maincpu;
|
||||||
required_device<sharp_unk128mbit_device> m_flash;
|
optional_device<sharp_unk128mbit_device> m_flash;
|
||||||
required_region_ptr<uint16_t> m_rom_base;
|
required_region_ptr<uint16_t> m_rom_base;
|
||||||
required_ioport m_io_bit0;
|
required_ioport m_io_bit0;
|
||||||
required_ioport m_io_bit1;
|
required_ioport m_io_bit1;
|
||||||
@ -62,7 +62,6 @@ private:
|
|||||||
|
|
||||||
// HW specifications
|
// HW specifications
|
||||||
uint8_t m_hw_version;
|
uint8_t m_hw_version;
|
||||||
bool m_flash_mem;
|
|
||||||
uint32_t m_initial_pc;
|
uint32_t m_initial_pc;
|
||||||
|
|
||||||
// keyboard
|
// keyboard
|
||||||
@ -93,8 +92,7 @@ private:
|
|||||||
DECLARE_READ16_MEMBER( ti68k_io_r );
|
DECLARE_READ16_MEMBER( ti68k_io_r );
|
||||||
DECLARE_WRITE16_MEMBER( ti68k_io2_w );
|
DECLARE_WRITE16_MEMBER( ti68k_io2_w );
|
||||||
DECLARE_READ16_MEMBER( ti68k_io2_r );
|
DECLARE_READ16_MEMBER( ti68k_io2_r );
|
||||||
DECLARE_WRITE16_MEMBER( flash_w );
|
DECLARE_READ16_MEMBER( rom_r );
|
||||||
DECLARE_READ16_MEMBER( flash_r );
|
|
||||||
void ti68k_palette(palette_device &palette) const;
|
void ti68k_palette(palette_device &palette) const;
|
||||||
|
|
||||||
TIMER_DEVICE_CALLBACK_MEMBER(ti68k_timer_callback);
|
TIMER_DEVICE_CALLBACK_MEMBER(ti68k_timer_callback);
|
||||||
|
Loading…
Reference in New Issue
Block a user