mirror of
https://github.com/holub/mame
synced 2025-10-06 17:08:28 +03:00
tiki100: Used PROM for memory mapping. [Curt Coder]
This commit is contained in:
parent
c18820c99d
commit
93d9d28df9
@ -30,67 +30,55 @@
|
|||||||
|
|
||||||
/* Memory Banking */
|
/* Memory Banking */
|
||||||
|
|
||||||
READ8_MEMBER( tiki100_state::gfxram_r )
|
READ8_MEMBER( tiki100_state::read )
|
||||||
{
|
{
|
||||||
UINT16 addr = (offset + (m_scroll << 7)) & TIKI100_VIDEORAM_MASK;
|
int mdis = 1;
|
||||||
|
offs_t prom_addr = mdis << 5 | m_vire << 4 | m_rome << 3 | (offset >> 13);
|
||||||
|
UINT8 prom = m_prom->base()[prom_addr] ^ 0xff;
|
||||||
|
|
||||||
return m_video_ram[addr];
|
UINT8 data = 0xff;
|
||||||
}
|
|
||||||
|
|
||||||
WRITE8_MEMBER( tiki100_state::gfxram_w )
|
if (prom & ROM0)
|
||||||
{
|
|
||||||
UINT16 addr = (offset + (m_scroll << 7)) & TIKI100_VIDEORAM_MASK;
|
|
||||||
|
|
||||||
m_video_ram[addr] = data;
|
|
||||||
}
|
|
||||||
|
|
||||||
void tiki100_state::bankswitch()
|
|
||||||
{
|
|
||||||
address_space &program = m_maincpu->space(AS_PROGRAM);
|
|
||||||
|
|
||||||
if (m_vire)
|
|
||||||
{
|
{
|
||||||
if (!m_rome)
|
data = m_rom->base()[offset & 0x3fff];
|
||||||
{
|
|
||||||
/* reserved */
|
|
||||||
program.unmap_readwrite(0x0000, 0xffff);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
/* GFXRAM, GFXRAM, RAM */
|
|
||||||
program.install_readwrite_handler(0x0000, 0x7fff, READ8_DELEGATE(tiki100_state, gfxram_r), WRITE8_DELEGATE(tiki100_state, gfxram_w));
|
|
||||||
program.install_readwrite_bank(0x8000, 0xffff, "bank3");
|
|
||||||
|
|
||||||
membank("bank1")->set_entry(BANK_VIDEO_RAM);
|
|
||||||
membank("bank2")->set_entry(BANK_VIDEO_RAM);
|
|
||||||
membank("bank3")->set_entry(BANK_RAM);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else
|
|
||||||
|
if (prom & ROM1)
|
||||||
{
|
{
|
||||||
if (!m_rome)
|
data = m_rom->base()[0x2000 | (offset & 0x3fff)];
|
||||||
{
|
}
|
||||||
/* ROM, RAM, RAM */
|
|
||||||
program.install_read_bank(0x0000, 0x3fff, "bank1");
|
|
||||||
program.unmap_write(0x0000, 0x3fff);
|
|
||||||
program.install_readwrite_bank(0x4000, 0x7fff, "bank2");
|
|
||||||
program.install_readwrite_bank(0x8000, 0xffff, "bank3");
|
|
||||||
|
|
||||||
membank("bank1")->set_entry(BANK_ROM);
|
if (prom & VIR)
|
||||||
membank("bank2")->set_entry(BANK_RAM);
|
{
|
||||||
membank("bank3")->set_entry(BANK_RAM);
|
UINT16 addr = (offset + (m_scroll << 7)) & TIKI100_VIDEORAM_MASK;
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
/* RAM, RAM, RAM */
|
|
||||||
program.install_readwrite_bank(0x0000, 0x3fff, "bank1");
|
|
||||||
program.install_readwrite_bank(0x4000, 0x7fff, "bank2");
|
|
||||||
program.install_readwrite_bank(0x8000, 0xffff, "bank3");
|
|
||||||
|
|
||||||
membank("bank1")->set_entry(BANK_RAM);
|
data = m_video_ram[addr];
|
||||||
membank("bank2")->set_entry(BANK_RAM);
|
}
|
||||||
membank("bank3")->set_entry(BANK_RAM);
|
|
||||||
}
|
if (prom & RAM)
|
||||||
|
{
|
||||||
|
data = m_ram->pointer()[offset];
|
||||||
|
}
|
||||||
|
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
|
||||||
|
WRITE8_MEMBER( tiki100_state::write )
|
||||||
|
{
|
||||||
|
int mdis = 1;
|
||||||
|
offs_t prom_addr = mdis << 5 | m_vire << 4 | m_rome << 3 | (offset >> 13);
|
||||||
|
UINT8 prom = m_prom->base()[prom_addr] ^ 0xff;
|
||||||
|
|
||||||
|
if (prom & VIR)
|
||||||
|
{
|
||||||
|
UINT16 addr = (offset + (m_scroll << 7)) & TIKI100_VIDEORAM_MASK;
|
||||||
|
|
||||||
|
m_video_ram[addr] = data;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (prom & RAM)
|
||||||
|
{
|
||||||
|
m_ram->pointer()[offset] = data;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -215,17 +203,13 @@ WRITE8_MEMBER( tiki100_state::system_w )
|
|||||||
/* bankswitch */
|
/* bankswitch */
|
||||||
m_rome = BIT(data, 2);
|
m_rome = BIT(data, 2);
|
||||||
m_vire = BIT(data, 3);
|
m_vire = BIT(data, 3);
|
||||||
|
|
||||||
bankswitch();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Memory Maps */
|
/* Memory Maps */
|
||||||
|
|
||||||
static ADDRESS_MAP_START( tiki100_mem, AS_PROGRAM, 8, tiki100_state )
|
static ADDRESS_MAP_START( tiki100_mem, AS_PROGRAM, 8, tiki100_state )
|
||||||
ADDRESS_MAP_UNMAP_HIGH
|
ADDRESS_MAP_UNMAP_HIGH
|
||||||
AM_RANGE(0x0000, 0x3fff) AM_RAMBANK("bank1")
|
AM_RANGE(0x0000, 0xffff) AM_READWRITE(read, write)
|
||||||
AM_RANGE(0x4000, 0x7fff) AM_RAMBANK("bank2")
|
|
||||||
AM_RANGE(0x8000, 0xffff) AM_RAMBANK("bank3")
|
|
||||||
ADDRESS_MAP_END
|
ADDRESS_MAP_END
|
||||||
|
|
||||||
static ADDRESS_MAP_START( tiki100_io, AS_IO, 8, tiki100_state )
|
static ADDRESS_MAP_START( tiki100_io, AS_IO, 8, tiki100_state )
|
||||||
@ -601,20 +585,6 @@ void tiki100_state::machine_start()
|
|||||||
/* allocate video RAM */
|
/* allocate video RAM */
|
||||||
m_video_ram.allocate(TIKI100_VIDEORAM_SIZE);
|
m_video_ram.allocate(TIKI100_VIDEORAM_SIZE);
|
||||||
|
|
||||||
/* setup memory banking */
|
|
||||||
UINT8 *ram = m_ram->pointer();
|
|
||||||
|
|
||||||
membank("bank1")->configure_entry(BANK_ROM, m_rom->base());
|
|
||||||
membank("bank1")->configure_entry(BANK_RAM, ram);
|
|
||||||
membank("bank1")->configure_entry(BANK_VIDEO_RAM, m_video_ram);
|
|
||||||
|
|
||||||
membank("bank2")->configure_entry(BANK_RAM, ram + 0x4000);
|
|
||||||
membank("bank2")->configure_entry(BANK_VIDEO_RAM, m_video_ram + 0x4000);
|
|
||||||
|
|
||||||
membank("bank3")->configure_entry(BANK_RAM, ram + 0x8000);
|
|
||||||
|
|
||||||
bankswitch();
|
|
||||||
|
|
||||||
/* register for state saving */
|
/* register for state saving */
|
||||||
save_item(NAME(m_rome));
|
save_item(NAME(m_rome));
|
||||||
save_item(NAME(m_vire));
|
save_item(NAME(m_vire));
|
||||||
@ -718,15 +688,15 @@ MACHINE_CONFIG_END
|
|||||||
/* ROMs */
|
/* ROMs */
|
||||||
|
|
||||||
ROM_START( kontiki )
|
ROM_START( kontiki )
|
||||||
ROM_REGION( 0x10000, Z80_TAG, ROMREGION_ERASEFF )
|
ROM_REGION( 0x4000, Z80_TAG, ROMREGION_ERASEFF )
|
||||||
ROM_LOAD( "tikirom-1.30.u10", 0x0000, 0x2000, CRC(c482dcaf) SHA1(d140706bb7fc8b1fbb37180d98921f5bdda73cf9) )
|
ROM_LOAD( "tikirom-1.30.u10", 0x0000, 0x2000, CRC(c482dcaf) SHA1(d140706bb7fc8b1fbb37180d98921f5bdda73cf9) )
|
||||||
|
|
||||||
ROM_REGION( 0x100, "proms", 0 )
|
ROM_REGION( 0x100, "u4", 0 )
|
||||||
ROM_LOAD( "53ls140.u4", 0x000, 0x100, CRC(894b756f) SHA1(429e10de0e0e749246895801b18186ff514c12bc) )
|
ROM_LOAD( "53ls140.u4", 0x000, 0x100, CRC(894b756f) SHA1(429e10de0e0e749246895801b18186ff514c12bc) )
|
||||||
ROM_END
|
ROM_END
|
||||||
|
|
||||||
ROM_START( tiki100 )
|
ROM_START( tiki100 )
|
||||||
ROM_REGION( 0x10000, Z80_TAG, ROMREGION_ERASEFF )
|
ROM_REGION( 0x4000, Z80_TAG, ROMREGION_ERASEFF )
|
||||||
ROM_DEFAULT_BIOS( "v203w" )
|
ROM_DEFAULT_BIOS( "v203w" )
|
||||||
|
|
||||||
ROM_SYSTEM_BIOS( 0, "v135", "TIKI ROM v1.35" )
|
ROM_SYSTEM_BIOS( 0, "v135", "TIKI ROM v1.35" )
|
||||||
@ -734,7 +704,7 @@ ROM_START( tiki100 )
|
|||||||
ROM_SYSTEM_BIOS( 1, "v203w", "TIKI ROM v2.03 W" )
|
ROM_SYSTEM_BIOS( 1, "v203w", "TIKI ROM v2.03 W" )
|
||||||
ROMX_LOAD( "tikirom-2.03w.u10", 0x0000, 0x2000, CRC(79662476) SHA1(96336633ecaf1b2190c36c43295ac9f785d1f83a), ROM_BIOS(2) )
|
ROMX_LOAD( "tikirom-2.03w.u10", 0x0000, 0x2000, CRC(79662476) SHA1(96336633ecaf1b2190c36c43295ac9f785d1f83a), ROM_BIOS(2) )
|
||||||
|
|
||||||
ROM_REGION( 0x100, "proms", 0 )
|
ROM_REGION( 0x100, "u4", 0 )
|
||||||
ROM_LOAD( "53ls140.u4", 0x000, 0x100, CRC(894b756f) SHA1(429e10de0e0e749246895801b18186ff514c12bc) )
|
ROM_LOAD( "53ls140.u4", 0x000, 0x100, CRC(894b756f) SHA1(429e10de0e0e749246895801b18186ff514c12bc) )
|
||||||
|
|
||||||
ROM_REGION( 0x1000, "8088", 0 )
|
ROM_REGION( 0x1000, "8088", 0 )
|
||||||
|
@ -41,8 +41,8 @@
|
|||||||
class tiki100_state : public driver_device
|
class tiki100_state : public driver_device
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
tiki100_state(const machine_config &mconfig, device_type type, const char *tag)
|
tiki100_state(const machine_config &mconfig, device_type type, const char *tag) :
|
||||||
: driver_device(mconfig, type, tag),
|
driver_device(mconfig, type, tag),
|
||||||
m_maincpu(*this, Z80_TAG),
|
m_maincpu(*this, Z80_TAG),
|
||||||
m_ctc(*this, Z80CTC_TAG),
|
m_ctc(*this, Z80CTC_TAG),
|
||||||
m_fdc(*this, FD1797_TAG),
|
m_fdc(*this, FD1797_TAG),
|
||||||
@ -54,6 +54,7 @@ public:
|
|||||||
m_cassette(*this, CASSETTE_TAG),
|
m_cassette(*this, CASSETTE_TAG),
|
||||||
m_centronics(*this, CENTRONICS_TAG),
|
m_centronics(*this, CENTRONICS_TAG),
|
||||||
m_rom(*this, Z80_TAG),
|
m_rom(*this, Z80_TAG),
|
||||||
|
m_prom(*this, "u4"),
|
||||||
m_video_ram(*this, "video_ram"),
|
m_video_ram(*this, "video_ram"),
|
||||||
m_y1(*this, "Y1"),
|
m_y1(*this, "Y1"),
|
||||||
m_y2(*this, "Y2"),
|
m_y2(*this, "Y2"),
|
||||||
@ -67,7 +68,9 @@ public:
|
|||||||
m_y10(*this, "Y10"),
|
m_y10(*this, "Y10"),
|
||||||
m_y11(*this, "Y11"),
|
m_y11(*this, "Y11"),
|
||||||
m_y12(*this, "Y12"),
|
m_y12(*this, "Y12"),
|
||||||
m_palette(*this, "palette")
|
m_palette(*this, "palette"),
|
||||||
|
m_rome(1),
|
||||||
|
m_vire(1)
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
required_device<cpu_device> m_maincpu;
|
required_device<cpu_device> m_maincpu;
|
||||||
@ -81,6 +84,7 @@ public:
|
|||||||
required_device<cassette_image_device> m_cassette;
|
required_device<cassette_image_device> m_cassette;
|
||||||
required_device<centronics_device> m_centronics;
|
required_device<centronics_device> m_centronics;
|
||||||
required_memory_region m_rom;
|
required_memory_region m_rom;
|
||||||
|
required_memory_region m_prom;
|
||||||
optional_shared_ptr<UINT8> m_video_ram;
|
optional_shared_ptr<UINT8> m_video_ram;
|
||||||
required_ioport m_y1;
|
required_ioport m_y1;
|
||||||
required_ioport m_y2;
|
required_ioport m_y2;
|
||||||
@ -101,8 +105,9 @@ public:
|
|||||||
|
|
||||||
UINT32 screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
|
UINT32 screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
|
||||||
|
|
||||||
DECLARE_READ8_MEMBER( gfxram_r );
|
DECLARE_READ8_MEMBER( read );
|
||||||
DECLARE_WRITE8_MEMBER( gfxram_w );
|
DECLARE_WRITE8_MEMBER( write );
|
||||||
|
|
||||||
DECLARE_READ8_MEMBER( keyboard_r );
|
DECLARE_READ8_MEMBER( keyboard_r );
|
||||||
DECLARE_WRITE8_MEMBER( keyboard_w );
|
DECLARE_WRITE8_MEMBER( keyboard_w );
|
||||||
DECLARE_WRITE8_MEMBER( video_mode_w );
|
DECLARE_WRITE8_MEMBER( video_mode_w );
|
||||||
@ -117,7 +122,13 @@ public:
|
|||||||
|
|
||||||
DECLARE_FLOPPY_FORMATS( floppy_formats );
|
DECLARE_FLOPPY_FORMATS( floppy_formats );
|
||||||
|
|
||||||
void bankswitch();
|
enum
|
||||||
|
{
|
||||||
|
ROM0 = 0x01,
|
||||||
|
ROM1 = 0x02,
|
||||||
|
VIR = 0x04,
|
||||||
|
RAM = 0x08
|
||||||
|
};
|
||||||
|
|
||||||
/* memory state */
|
/* memory state */
|
||||||
int m_rome;
|
int m_rome;
|
||||||
|
Loading…
Reference in New Issue
Block a user