summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/machine/tc009xlvc.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/machine/tc009xlvc.h')
-rw-r--r--src/devices/machine/tc009xlvc.h32
1 files changed, 24 insertions, 8 deletions
diff --git a/src/devices/machine/tc009xlvc.h b/src/devices/machine/tc009xlvc.h
index 5654d1a6f8b..c4be5989a78 100644
--- a/src/devices/machine/tc009xlvc.h
+++ b/src/devices/machine/tc009xlvc.h
@@ -11,10 +11,10 @@
#pragma once
-#include "machine/bankdev.h"
+#include "cpu/z80/z80.h"
#include "tilemap.h"
-class tc0090lvc_device : public device_t, public device_gfx_interface
+class tc0090lvc_device : public z80_device, public device_gfx_interface
{
public:
typedef device_delegate<void (u32 &code)> tc009xlvc_cb_delegate;
@@ -27,7 +27,7 @@ public:
void set_tilemap_yoffs(int yoffs, int flipped_yoffs) { m_tilemap_yoffs = yoffs; m_tilemap_flipped_yoffs = flipped_yoffs; }
// memory handlers
- u8 rom_r(offs_t offset) { return m_rom[offset & m_rom.mask()]; }
+ u8 rom_r(offs_t offset) { return m_rom[offset & (m_rom.length() - 1)]; }
// internal functions
u8 vregs_r(offs_t offset) { return m_vregs[offset]; }
@@ -37,7 +37,7 @@ public:
u8 irq_enable_r() { return m_irq_enable; }
void irq_enable_w(u8 data) { m_irq_enable = data; }
u8 ram_bank_r(offs_t offset) { return m_ram_bank[offset]; }
- void ram_bank_w(offs_t offset, u8 data);
+ void ram_bank_w(offs_t offset, u8 data) { m_ram_bank[offset] = data; }
u8 rom_bank_r() { return m_rom_bank; }
void rom_bank_w(u8 data) { m_rom_bank = data; }
@@ -56,11 +56,28 @@ public:
protected:
tc0090lvc_device(const machine_config &mconfig, device_type &type, const char *tag, device_t *owner, u32 clock);
+ // device-level overrides
virtual void device_add_mconfig(machine_config &config) override;
virtual void device_post_load() override;
virtual void device_start() override;
virtual void device_reset() override;
+ // device_config_memory_interface overrides
+ virtual space_config_vector memory_space_config() const override;
+
+ // address space configurations
+ const address_space_config m_program_space_config;
+ const address_space_config m_vram_space_config;
+ const address_space_config m_io_space_config;
+
+ memory_access<20, 0, 0, ENDIANNESS_LITTLE>::specific m_vram_space;
+
+ // vram space handlers
+ const inline offs_t vram_addr(offs_t offset) { return (m_ram_bank[BIT(offset, 12, 2)] << 12) | (offset & 0xfff); }
+
+ u8 banked_vram_r(offs_t offset) { return m_vram_space.read_byte(vram_addr(offset)); }
+ void banked_vram_w(offs_t offset, u8 data) { m_vram_space.write_byte(vram_addr(offset), data); }
+
void draw_sprites(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
void update_scroll(u8 *ram);
@@ -69,12 +86,12 @@ protected:
template<unsigned Offset> TILE_GET_INFO_MEMBER(get_tile_info);
TILE_GET_INFO_MEMBER(get_tx_tile_info);
- void banked_map(address_map &map);
+ void vram_map(address_map &map);
u8 m_bg_scroll[2][4];
- tilemap_t *bg_tilemap[2];
- tilemap_t *tx_tilemap;
+ tilemap_t *m_bg_tilemap[2];
+ tilemap_t *m_tx_tilemap;
DECLARE_GFXDECODE_MEMBER(gfxinfo);
@@ -96,7 +113,6 @@ protected:
std::unique_ptr<u8[]> m_vregs;
std::unique_ptr<u8[]> m_sprram_buffer;
- required_device_array<address_map_bank_device, 4> m_bankdev;
required_shared_ptr<u8> m_vram;
required_shared_ptr<u8> m_bitmap_ram;
required_region_ptr<u8> m_rom;