(MESS) nanos.c: Reduce tagmap lookups (nw)

This commit is contained in:
Wilbert Pol 2013-02-07 21:38:46 +00:00
parent b84b7a1e63
commit 07b57e8bc0

View File

@ -31,7 +31,20 @@ public:
m_ctc_0(*this, "z80ctc_0"),
m_ctc_1(*this, "z80ctc_1"),
m_fdc(*this, "upd765"),
m_key_t(*this, "keyboard_timer")
m_key_t(*this, "keyboard_timer"),
m_ram(*this, RAM_TAG),
m_region_maincpu(*this, "maincpu"),
m_bank1(*this, "bank1"),
m_bank2(*this, "bank2"),
m_bank3(*this, "bank3"),
m_line0(*this, "LINE0"),
m_line1(*this, "LINE1"),
m_line2(*this, "LINE2"),
m_line3(*this, "LINE3"),
m_line4(*this, "LINE4"),
m_line5(*this, "LINE5"),
m_line6(*this, "LINE6"),
m_linec(*this, "LINEC")
{ }
required_device<cpu_device> m_maincpu;
@ -44,6 +57,7 @@ public:
required_device<z80ctc_device> m_ctc_1;
required_device<upd765a_device> m_fdc;
required_device<timer_device> m_key_t;
required_device<ram_device> m_ram;
const UINT8 *m_p_chargen;
UINT8 m_key_command;
UINT8 m_last_code;
@ -62,6 +76,20 @@ public:
DECLARE_READ8_MEMBER(nanos_port_b_r);
DECLARE_WRITE8_MEMBER(nanos_port_b_w);
DECLARE_FLOPPY_FORMATS( floppy_formats );
protected:
required_memory_region m_region_maincpu;
required_memory_bank m_bank1;
required_memory_bank m_bank2;
required_memory_bank m_bank3;
required_ioport m_line0;
required_ioport m_line1;
required_ioport m_line2;
required_ioport m_line3;
required_ioport m_line4;
required_ioport m_line5;
required_ioport m_line6;
required_ioport m_linec;
};
@ -127,7 +155,7 @@ static Z80PIO_INTERFACE( pio2_intf )
WRITE_LINE_MEMBER(nanos_state::z80daisy_interrupt)
{
machine().device("maincpu")->execute().set_input_line(INPUT_LINE_IRQ0, state);
m_maincpu->set_input_line(INPUT_LINE_IRQ0, state);
}
static const z80sio_interface sio_intf =
@ -286,7 +314,7 @@ UINT32 nanos_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, c
{
if (ra < 8)
{
chr = machine().device<ram_device>(RAM_TAG)->pointer()[0xf800+ x];
chr = m_ram->pointer()[0xf800+ x];
/* get pattern of pixels for that character scanline */
gfx = m_p_chargen[(chr<<3) | ra ];
@ -332,9 +360,9 @@ WRITE8_MEMBER(nanos_state::nanos_port_b_w)
{
m_key_command = BIT(data,1);
if (BIT(data,7)) {
membank("bank1")->set_base(memregion("maincpu")->base());
m_bank1->set_base(m_region_maincpu->base());
} else {
membank("bank1")->set_base(machine().device<ram_device>(RAM_TAG)->pointer());
m_bank1->set_base(m_ram->pointer());
}
}
@ -352,17 +380,17 @@ static UINT8 row_number(UINT8 code) {
TIMER_DEVICE_CALLBACK_MEMBER(nanos_state::keyboard_callback)
{
static const char *const keynames[] = { "LINE0", "LINE1", "LINE2", "LINE3", "LINE4", "LINE5", "LINE6" };
ioport_port *io_ports[] = { m_line0, m_line1, m_line2, m_line3, m_line4, m_line5, m_line6 };
int i;
UINT8 code;
UINT8 key_code = 0;
UINT8 shift = machine().root_device().ioport("LINEC")->read() & 0x02 ? 1 : 0;
UINT8 ctrl = machine().root_device().ioport("LINEC")->read() & 0x01 ? 1 : 0;
UINT8 shift = m_linec->read() & 0x02 ? 1 : 0;
UINT8 ctrl = m_linec->read() & 0x01 ? 1 : 0;
m_key_pressed = 0xff;
for(i = 0; i < 7; i++)
{
code = machine().root_device().ioport(keynames[i])->read();
code = io_ports[i]->read();
if (code != 0)
{
if (i==0 && shift==0) {
@ -439,14 +467,14 @@ void nanos_state::machine_start()
void nanos_state::machine_reset()
{
address_space &space = machine().device("maincpu")->memory().space(AS_PROGRAM);
address_space &space = m_maincpu->space(AS_PROGRAM);
space.install_write_bank(0x0000, 0x0fff, "bank3");
space.install_write_bank(0x1000, 0xffff, "bank2");
membank("bank1")->set_base(machine().root_device().memregion("maincpu")->base());
membank("bank2")->set_base(machine().device<ram_device>(RAM_TAG)->pointer() + 0x1000);
membank("bank3")->set_base(machine().device<ram_device>(RAM_TAG)->pointer());
m_bank1->set_base(m_region_maincpu->base());
m_bank2->set_base(m_ram->pointer() + 0x1000);
m_bank3->set_base(m_ram->pointer());
machine().device<floppy_connector>("upd765:0")->get_device()->mon_w(false);
}