summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/machine/spg110.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/machine/spg110.h')
-rw-r--r--src/devices/machine/spg110.h62
1 files changed, 40 insertions, 22 deletions
diff --git a/src/devices/machine/spg110.h b/src/devices/machine/spg110.h
index dd51e1883b1..64464e1ba9d 100644
--- a/src/devices/machine/spg110.h
+++ b/src/devices/machine/spg110.h
@@ -9,6 +9,7 @@
//#include "spg2xx.h"
#include "cpu/unsp/unsp.h"
#include "emupal.h"
+#include "spg2xx_io.h"
class spg110_device : public device_t, public device_memory_interface
@@ -18,11 +19,12 @@ public:
spg110_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
spg110_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- template <typename T>
- spg110_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock, T &&cpu_tag)
+ template <typename T, typename U>
+ spg110_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock, T &&cpu_tag, U &&screen_tag)
: spg110_device(mconfig, tag, owner, clock)
{
m_cpu.set_tag(std::forward<T>(cpu_tag));
+ m_screen.set_tag(std::forward<U>(screen_tag));
}
void map(address_map &map);
@@ -32,6 +34,17 @@ public:
uint32_t screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
DECLARE_WRITE_LINE_MEMBER(vblank);
+ auto porta_out() { return m_porta_out.bind(); }
+ auto portb_out() { return m_portb_out.bind(); }
+ auto portc_out() { return m_portc_out.bind(); }
+ auto porta_in() { return m_porta_in.bind(); }
+ auto portb_in() { return m_portb_in.bind(); }
+ auto portc_in() { return m_portc_in.bind(); }
+
+ template <size_t Line> auto adc_in() { return m_adc_in[Line].bind(); }
+
+ auto chip_select() { return m_chip_sel.bind(); }
+
protected:
virtual void device_start() override;
virtual void device_reset() override;
@@ -66,9 +79,11 @@ private:
};
required_device<unsp_device> m_cpu;
+ required_device<screen_device> m_screen;
required_device<palette_device> m_palette;
required_device<gfxdecode_device> m_gfxdecode;
required_shared_ptr<uint16_t> m_palram;
+ required_device<spg2xx_io_device> m_spg_io;
//TIMER_CALLBACK_MEMBER(test_timer);
//emu_timer *m_test_timer;
@@ -132,26 +147,6 @@ private:
DECLARE_READ16_MEMBER(dma_len_status_r);
DECLARE_READ16_MEMBER(spg110_2063_r);
- DECLARE_WRITE16_MEMBER(spg110_3200_w);
- DECLARE_WRITE16_MEMBER(spg110_3201_w);
- DECLARE_WRITE16_MEMBER(spg110_3203_w);
- DECLARE_WRITE16_MEMBER(spg110_3204_w);
- DECLARE_WRITE16_MEMBER(spg110_3206_w);
- DECLARE_WRITE16_MEMBER(spg110_3208_w);
- DECLARE_WRITE16_MEMBER(spg110_3209_w);
-
- DECLARE_READ16_MEMBER(spg110_3201_r);
-
- DECLARE_WRITE16_MEMBER(spg110_3221_w);
- DECLARE_WRITE16_MEMBER(spg110_3223_w);
- DECLARE_WRITE16_MEMBER(spg110_3225_w);
-
- DECLARE_READ16_MEMBER(spg110_3225_r);
- DECLARE_READ16_MEMBER(spg110_322c_r);
-
- READ16_MEMBER(datasegment_r);
- WRITE16_MEMBER(datasegment_w);
-
DECLARE_WRITE16_MEMBER(spg110_3100_w);
DECLARE_WRITE16_MEMBER(spg110_3101_w);
@@ -195,6 +190,29 @@ private:
void blit(const rectangle &cliprect, uint32_t line, uint32_t xoff, uint32_t yoff, uint32_t attr, uint32_t ctrl, uint32_t bitmap_addr, uint16_t tile);
void blit_page(const rectangle &cliprect, uint32_t scanline, int depth, uint32_t bitmap_addr, uint16_t *regs);
uint32_t m_screenbuf[320 * 240];
+
+ devcb_write16 m_porta_out;
+ devcb_write16 m_portb_out;
+ devcb_write16 m_portc_out;
+ devcb_read16 m_porta_in;
+ devcb_read16 m_portb_in;
+ devcb_read16 m_portc_in;
+
+ devcb_read16 m_adc_in[2];
+
+ devcb_write8 m_chip_sel;
+
+ DECLARE_READ16_MEMBER(porta_r) { return m_porta_in(); };
+ DECLARE_READ16_MEMBER(portb_r) { return m_portb_in(); };
+ DECLARE_READ16_MEMBER(portc_r) { return m_portc_in(); };
+ DECLARE_WRITE16_MEMBER(porta_w) { m_porta_out(offset, data, mem_mask); };
+ DECLARE_WRITE16_MEMBER(portb_w) { m_portb_out(offset, data, mem_mask); };
+ DECLARE_WRITE16_MEMBER(portc_w) { m_portc_out(offset, data, mem_mask); };
+ template <size_t Line> DECLARE_READ16_MEMBER(adc_r) { return m_adc_in[Line](); };
+ DECLARE_WRITE8_MEMBER(cs_w) { m_chip_sel(offset, data, mem_mask); };
+ DECLARE_READ16_MEMBER(get_pal_r) { return 0; /*m_pal_flag;*/ };
+ void configure_spg_io(spg2xx_io_device* io);
+
};
DECLARE_DEVICE_TYPE(SPG110, spg110_device)