summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author cracyc <cracyc@users.noreply.github.com>2018-02-15 12:32:20 -0600
committer cracyc <cracyc@users.noreply.github.com>2018-02-15 12:32:20 -0600
commit12d7ed9a75e07b3f1d16c635bf3d60f822abcd0e (patch)
treeb8ddad40158652f5a08efc67e539c0a9ed36852d
parent7d333b2604c8a3fa0db43a711f0a23c6a8e5fb9a (diff)
olyboss: get programs running (nw)
-rw-r--r--src/mame/drivers/olyboss.cpp47
1 files changed, 35 insertions, 12 deletions
diff --git a/src/mame/drivers/olyboss.cpp b/src/mame/drivers/olyboss.cpp
index 606ee02e58e..08334108df4 100644
--- a/src/mame/drivers/olyboss.cpp
+++ b/src/mame/drivers/olyboss.cpp
@@ -68,7 +68,17 @@ public:
m_char_rom(*this, UPD3301_TAG)
{ }
- DECLARE_DRIVER_INIT(olyboss);
+public:
+ void olybossb(machine_config &config);
+ void olybossc(machine_config &config);
+ void olybossd(machine_config &config);
+
+protected:
+ virtual void machine_start() override;
+ virtual void machine_reset() override;
+ virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
+
+private:
DECLARE_READ8_MEMBER(keyboard_read);
UPD3301_DRAW_CHARACTER_MEMBER( olyboss_display_pixels );
@@ -87,14 +97,9 @@ public:
DECLARE_WRITE8_MEMBER( vchrmap_w );
DECLARE_WRITE8_MEMBER( vchrram_w );
DECLARE_WRITE8_MEMBER( ppic_w );
-
- void olybossb(machine_config &config);
- void olybossc(machine_config &config);
- void olybossd(machine_config &config);
void olyboss_io(address_map &map);
void olyboss_mem(address_map &map);
-private:
required_device<cpu_device> m_maincpu;
required_device<i8257_device> m_dma;
required_device<upd3301_device> m_crtc;
@@ -111,8 +116,15 @@ private:
u8 m_fdcctrl;
u8 m_channel, m_vchrmap, m_vchrpage;
u8 m_vchrram[0x800];
+ emu_timer *m_timer;
};
+void olyboss_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
+{
+ m_uic->ireq7_w(ASSERT_LINE);
+ m_uic->ireq7_w(CLEAR_LINE);
+}
+
//**************************************************************************
// ADDRESS MAPS
//**************************************************************************
@@ -127,6 +139,7 @@ ADDRESS_MAP_START(olyboss_state::olyboss_io)
ADDRESS_MAP_UNMAP_HIGH
AM_RANGE(0x0, 0x8) AM_DEVREADWRITE(I8257_TAG, i8257_device, read, write)
AM_RANGE(0x10, 0x11) AM_DEVICE("fdc", upd765a_device, map)
+ //AM_RANGE(0x20, 0x20) //beeper?
AM_RANGE(0x30, 0x30) AM_DEVREADWRITE("uic", am9519_device, data_r, data_w)
AM_RANGE(0x31, 0x31) AM_DEVREADWRITE("uic", am9519_device, stat_r, cmd_w)
AM_RANGE(0x40, 0x43) AM_DEVREADWRITE("ppi", i8255_device, read, write)
@@ -166,7 +179,7 @@ WRITE8_MEMBER( olyboss_state::vchrmap_w )
WRITE8_MEMBER( olyboss_state::vchrram_w )
{
- m_vchrram[(m_vchrpage << 4) + offset] = data;
+ m_vchrram[(m_vchrpage << 4) + (offset ^ 0xf)] = data;
}
//**************************************************************************
@@ -175,7 +188,11 @@ WRITE8_MEMBER( olyboss_state::vchrram_w )
UPD3301_DRAW_CHARACTER_MEMBER( olyboss_state::olyboss_display_pixels )
{
- uint8_t data = m_char_rom->base()[(cc << 4) | lc];
+ uint8_t data = cc & 0x7f;
+ if(cc & 0x80)
+ data = m_vchrram[(data << 4) | lc];
+ else
+ data = m_char_rom->base()[(data << 4) | lc];
int i;
//if (lc >= 8) return;
@@ -213,13 +230,19 @@ WRITE8_MEMBER( olyboss_state::ppic_w )
m_fdcctrl = (m_fdcctrl & ~0x10) | (BIT(data, 5) ? 0x10 : 0);
}
-DRIVER_INIT_MEMBER( olyboss_state, olyboss )
+void olyboss_state::machine_start()
+{
+ m_timer = timer_alloc();
+}
+
+void olyboss_state::machine_reset()
{
m_keybhit=false;
m_fdcctrl = 0;
m_vchrmap = 0;
m_vchrpage = 0;
+ m_timer->adjust(attotime::from_hz(60), 0, attotime::from_hz(60)); // unknown timer freq, possibly com2651 BRCLK
}
void olyboss_state::keyboard_put(u8 data)
@@ -404,6 +427,6 @@ ROM_END
//**************************************************************************
// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS
-COMP(1981, olybossb, olybossd, 0, olybossb, olyboss, olyboss_state, olyboss, "Olympia International", "Olympia BOSS B", MACHINE_NOT_WORKING | MACHINE_NO_SOUND )
-COMP(1981, olybossc, olybossd, 0, olybossc, olyboss, olyboss_state, olyboss, "Olympia International", "Olympia BOSS C", MACHINE_NOT_WORKING | MACHINE_NO_SOUND )
-COMP(1981, olybossd, 0, 0, olybossd, olyboss, olyboss_state, olyboss, "Olympia International", "Olympia BOSS D", MACHINE_NOT_WORKING | MACHINE_NO_SOUND )
+COMP(1981, olybossb, olybossd, 0, olybossb, olyboss, olyboss_state, 0, "Olympia International", "Olympia BOSS B", MACHINE_NOT_WORKING | MACHINE_NO_SOUND )
+COMP(1981, olybossc, olybossd, 0, olybossc, olyboss, olyboss_state, 0, "Olympia International", "Olympia BOSS C", MACHINE_NOT_WORKING | MACHINE_NO_SOUND )
+COMP(1981, olybossd, 0, 0, olybossd, olyboss, olyboss_state, 0, "Olympia International", "Olympia BOSS D", MACHINE_NOT_WORKING | MACHINE_NO_SOUND )