diff options
Diffstat (limited to 'src/devices/machine/tc009xlvc.h')
-rw-r--r-- | src/devices/machine/tc009xlvc.h | 32 |
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; |