summaryrefslogtreecommitdiffstatshomepage
path: root/src/mess
diff options
context:
space:
mode:
Diffstat (limited to 'src/mess')
-rw-r--r--src/mess/includes/ondra.h46
-rw-r--r--src/mess/machine/ondra.c71
-rw-r--r--src/mess/video/ondra.c4
3 files changed, 84 insertions, 37 deletions
diff --git a/src/mess/includes/ondra.h b/src/mess/includes/ondra.h
index 427441c4763..ca2cac6b647 100644
--- a/src/mess/includes/ondra.h
+++ b/src/mess/includes/ondra.h
@@ -7,11 +7,33 @@
#ifndef ONDRA_H_
#define ONDRA_H_
+#include "imagedev/cassette.h"
+#include "machine/ram.h"
+
class ondra_state : public driver_device
{
public:
ondra_state(const machine_config &mconfig, device_type type, const char *tag)
- : driver_device(mconfig, type, tag) { }
+ : driver_device(mconfig, type, tag)
+ , m_maincpu(*this, "maincpu")
+ , m_cassette(*this, CASSETTE_TAG)
+ , 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_line7(*this, "LINE7")
+ , m_line8(*this, "LINE8")
+ , m_line9(*this, "LINE9")
+ , m_nmi(*this, "NMI")
+ { }
UINT8 m_video_enable;
UINT8 m_bank1_status;
@@ -26,6 +48,28 @@ public:
UINT32 screen_update_ondra(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
INTERRUPT_GEN_MEMBER(ondra_interrupt);
TIMER_CALLBACK_MEMBER(nmi_check_callback);
+
+protected:
+ required_device<cpu_device> m_maincpu;
+ required_device<cassette_image_device> m_cassette;
+ required_device<ram_device> m_ram;
+ 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_line7;
+ required_ioport m_line8;
+ required_ioport m_line9;
+ required_ioport m_nmi;
+
+ void ondra_update_banks();
};
#endif
diff --git a/src/mess/machine/ondra.c b/src/mess/machine/ondra.c
index f51bd814a35..83e75302fe3 100644
--- a/src/mess/machine/ondra.c
+++ b/src/mess/machine/ondra.c
@@ -9,52 +9,55 @@
#include "emu.h"
#include "cpu/z80/z80.h"
-#include "imagedev/cassette.h"
#include "includes/ondra.h"
-#include "machine/ram.h"
-
-
-static cassette_image_device *cassette_device_image(running_machine &machine)
-{
- return machine.device<cassette_image_device>(CASSETTE_TAG);
-}
READ8_MEMBER(ondra_state::ondra_keyboard_r)
{
UINT8 retVal = 0x00;
- UINT8 ondra_keyboard_line = offset & 0x000f;
- static const char *const keynames[] = { "LINE0", "LINE1", "LINE2", "LINE3", "LINE4", "LINE5", "LINE6", "LINE7", "LINE8", "LINE9" };
- double valcas = (cassette_device_image(machine())->input());
+ double valcas = m_cassette->input();
+
if ( valcas < 0.00) {
retVal = 0x80;
}
- if (ondra_keyboard_line > 9) {
- retVal |= 0x1f;
- } else {
- retVal |= ioport(keynames[ondra_keyboard_line])->read();
+
+ switch ( offset & 0x0f )
+ {
+ case 0: retVal |= m_line0->read(); break;
+ case 1: retVal |= m_line1->read(); break;
+ case 2: retVal |= m_line2->read(); break;
+ case 3: retVal |= m_line3->read(); break;
+ case 4: retVal |= m_line4->read(); break;
+ case 5: retVal |= m_line5->read(); break;
+ case 6: retVal |= m_line6->read(); break;
+ case 7: retVal |= m_line7->read(); break;
+ case 8: retVal |= m_line8->read(); break;
+ case 9: retVal |= m_line9->read(); break;
+ default: retVal |= 0x1f; break;
}
+
return retVal;
}
-static void ondra_update_banks(running_machine &machine)
+void ondra_state::ondra_update_banks()
{
- ondra_state *state = machine.driver_data<ondra_state>();
- UINT8 *mem = state->memregion("maincpu")->base();
- if (state->m_bank1_status==0) {
- machine.device("maincpu")->memory().space(AS_PROGRAM).unmap_write(0x0000, 0x3fff);
- state->membank("bank1")->set_base(mem + 0x010000);
+ address_space &space = m_maincpu->space(AS_PROGRAM);
+ UINT8 *mem = m_region_maincpu->base();
+
+ if (m_bank1_status==0) {
+ space.unmap_write(0x0000, 0x3fff);
+ m_bank1->set_base(mem + 0x010000);
} else {
- machine.device("maincpu")->memory().space(AS_PROGRAM).install_write_bank(0x0000, 0x3fff, "bank1");
- state->membank("bank1")->set_base(machine.device<ram_device>(RAM_TAG)->pointer() + 0x0000);
+ space.install_write_bank(0x0000, 0x3fff, "bank1");
+ m_bank1->set_base(m_ram->pointer() + 0x0000);
}
- state->membank("bank2")->set_base(machine.device<ram_device>(RAM_TAG)->pointer() + 0x4000);
- if (state->m_bank2_status==0) {
- machine.device("maincpu")->memory().space(AS_PROGRAM).install_readwrite_bank(0xe000, 0xffff, "bank3");
- state->membank("bank3")->set_base(machine.device<ram_device>(RAM_TAG)->pointer() + 0xe000);
+ m_bank2->set_base(m_ram->pointer() + 0x4000);
+ if (m_bank2_status==0) {
+ space.install_readwrite_bank(0xe000, 0xffff, "bank3");
+ m_bank3->set_base(m_ram->pointer() + 0xe000);
} else {
- machine.device("maincpu")->memory().space(AS_PROGRAM).unmap_write(0xe000, 0xffff);
- machine.device("maincpu")->memory().space(AS_PROGRAM).install_read_handler (0xe000, 0xffff, read8_delegate(FUNC(ondra_state::ondra_keyboard_r),state));
+ space.unmap_write(0xe000, 0xffff);
+ space.install_read_handler (0xe000, 0xffff, read8_delegate(FUNC(ondra_state::ondra_keyboard_r),this));
}
}
@@ -63,8 +66,8 @@ WRITE8_MEMBER(ondra_state::ondra_port_03_w)
m_video_enable = data & 1;
m_bank1_status = (data >> 1) & 1;
m_bank2_status = (data >> 2) & 1;
- ondra_update_banks(machine());
- cassette_device_image(machine())->output(((data >> 3) & 1) ? -1.0 : +1.0);
+ ondra_update_banks();
+ m_cassette->output(((data >> 3) & 1) ? -1.0 : +1.0);
}
WRITE8_MEMBER(ondra_state::ondra_port_09_w)
@@ -77,9 +80,9 @@ WRITE8_MEMBER(ondra_state::ondra_port_0a_w)
TIMER_CALLBACK_MEMBER(ondra_state::nmi_check_callback)
{
- if ((machine().root_device().ioport("NMI")->read() & 1) == 1)
+ if ((m_nmi->read() & 1) == 1)
{
- machine().device("maincpu")->execute().set_input_line(INPUT_LINE_NMI, PULSE_LINE);
+ m_maincpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE);
}
}
@@ -87,7 +90,7 @@ void ondra_state::machine_reset()
{
m_bank1_status = 0;
m_bank2_status = 0;
- ondra_update_banks(machine());
+ ondra_update_banks();
}
void ondra_state::machine_start()
diff --git a/src/mess/video/ondra.c b/src/mess/video/ondra.c
index 49169f2d35b..f55385ebcdb 100644
--- a/src/mess/video/ondra.c
+++ b/src/mess/video/ondra.c
@@ -29,8 +29,8 @@ UINT32 ondra_state::screen_update_ondra(screen_device &screen, bitmap_ind16 &bit
{
for (y = 127; y >=0; y--)
{
- code1 = machine().device<ram_device>(RAM_TAG)->pointer()[0xd700 + Vaddr + 0x80];
- code2 = machine().device<ram_device>(RAM_TAG)->pointer()[0xd700 + Vaddr + 0x00];
+ code1 = m_ram->pointer()[0xd700 + Vaddr + 0x80];
+ code2 = m_ram->pointer()[0xd700 + Vaddr + 0x00];
for (b = 0; b < 8; b++)
{
bitmap.pix16(2*y, x*8+b) = ((code1 << b) & 0x80) ? 1 : 0;