summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/sinclair/tsconf.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/sinclair/tsconf.h')
-rw-r--r--src/mame/sinclair/tsconf.h57
1 files changed, 37 insertions, 20 deletions
diff --git a/src/mame/sinclair/tsconf.h b/src/mame/sinclair/tsconf.h
index 34ce5cd5df9..8810cc6aacf 100644
--- a/src/mame/sinclair/tsconf.h
+++ b/src/mame/sinclair/tsconf.h
@@ -16,10 +16,10 @@
#include "tsconfdma.h"
#include "beta_m.h"
-#include "bus/centronics/ctronics.h"
#include "machine/pckeybrd.h"
#include "machine/spi_sdcard.h"
#include "sound/ay8910.h"
+#include "sound/dac.h"
#include "tilemap.h"
@@ -29,6 +29,8 @@ public:
tsconf_state(const machine_config &mconfig, device_type type, const char *tag)
: spectrum_128_state(mconfig, type, tag)
, m_bank0_rom(*this, "bank0_rom")
+ , m_tiles_raw(*this, "tiles%u_raw", 0U, 64U * 64 * 8 * 8, ENDIANNESS_LITTLE)
+ , m_sprites_raw(*this, "sprites_raw", 64U * 64 * 8 * 8, ENDIANNESS_LITTLE)
, m_keyboard(*this, "pc_keyboard")
, m_io_mouse(*this, "mouse_input%u", 1U)
, m_beta(*this, BETA_DISK_TAG)
@@ -39,7 +41,7 @@ public:
, m_gfxdecode(*this, "gfxdecode")
, m_cram(*this, "cram")
, m_sfile(*this, "sfile")
- , m_centronics(*this, "centronics")
+ , m_dac(*this, "dac")
, m_ay(*this, "ay%u", 0U)
, m_mod_ay(*this, "MOD_AY")
{
@@ -51,11 +53,12 @@ public:
static constexpr u16 with_vblank(u16 pixclocks) { return 32 + pixclocks; }
protected:
- void video_start() override;
- void machine_start() override;
- void machine_reset() override;
+ virtual void video_start() override ATTR_COLD;
+ virtual void machine_start() override ATTR_COLD;
+ virtual void machine_reset() override ATTR_COLD;
+ virtual void device_post_load() override ATTR_COLD;
- TIMER_CALLBACK_MEMBER(irq_off) override;
+ virtual TIMER_CALLBACK_MEMBER(irq_off) override;
TIMER_CALLBACK_MEMBER(irq_frame);
TIMER_CALLBACK_MEMBER(irq_scanline);
@@ -136,6 +139,17 @@ private:
T1_Y_OFFSET_H = 0x47
};
+ struct sprite_data
+ {
+ u32 code;
+ u32 color;
+ int flipx;
+ int flipy;
+ s32 destx;
+ s32 desty;
+ u32 pmask;
+ };
+
void update_frame_timer();
emu_timer *m_frame_irq_timer = nullptr;
emu_timer *m_scanline_irq_timer = nullptr;
@@ -149,16 +163,17 @@ private:
template <u8 Layer>
TILE_GET_INFO_MEMBER(get_tile_info_16c);
- u8 get_border_color(u16 hpos = ~0, u16 vpos = ~0) override;
+ virtual u8 get_border_color(u16 hpos = ~0, u16 vpos = ~0) override;
u32 get_vpage_offset();
- rectangle get_screen_area() override;
- void spectrum_update_screen(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) override;
- void tsconf_UpdateZxScreenBitmap(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
- void tsconf_UpdateTxtBitmap(bitmap_ind16 &bitmap, const rectangle &cliprect);
- void tsconf_UpdateGfxBitmap(bitmap_ind16 &bitmap, const rectangle &cliprect);
- void draw_sprites(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
- void tsconf_palette(palette_device &palette) const;
+ virtual rectangle get_screen_area() override;
+ u32 screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
+ void tsconf_update_screen(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
+ void tsconf_draw_zx(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
+ void tsconf_draw_txt(bitmap_rgb32 &bitmap, const rectangle &cliprect);
+ void tsconf_draw_gfx(bitmap_rgb32 &bitmap, const rectangle &cliprect);
+ void draw_sprites(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
void tsconf_update_video_mode();
+ void copy_tiles_to_raw(const u8 *tiles_src, u8 *raw_target);
u8 tsconf_port_xx1f_r(offs_t offset);
void tsconf_port_7ffd_w(u8 data);
@@ -179,9 +194,9 @@ private:
u8 beta_enable_r(offs_t offset);
u8 beta_disable_r(offs_t offset);
- void tsconf_io(address_map &map);
- void tsconf_mem(address_map &map);
- void tsconf_switch(address_map &map);
+ void tsconf_io(address_map &map) ATTR_COLD;
+ void tsconf_mem(address_map &map) ATTR_COLD;
+ void tsconf_switch(address_map &map) ATTR_COLD;
u8 mem_bank_read(u8 bank, offs_t offset);
template <u8 Bank>
@@ -199,15 +214,16 @@ private:
std::map<tsconf_regs, u8> m_scanline_delayed_regs_update;
u8 m_regs[0x100];
- memory_access<16, 0, 0, ENDIANNESS_LITTLE>::specific m_program;
memory_view m_bank0_rom;
+ memory_share_array_creator<u8, 2> m_tiles_raw;
+ memory_share_creator<u8> m_sprites_raw;
required_device<at_keyboard_device> m_keyboard;
required_ioport_array<3> m_io_mouse;
required_device<beta_disk_device> m_beta;
required_device<tsconfdma_device> m_dma;
- required_device<spi_sdcard_sdhc_device> m_sdcard;
+ required_device<spi_sdcard_device> m_sdcard;
u8 m_zctl_di = 0;
u8 m_zctl_cs = 0;
@@ -220,8 +236,9 @@ private:
tilemap_t *m_ts_tilemap[3]{};
required_device<ram_device> m_cram;
required_device<ram_device> m_sfile;
- required_device<centronics_device> m_centronics;
+ std::vector<sprite_data> m_sprites_cache;
+ required_device<dac_byte_interface> m_dac;
required_device_array<ym2149_device, 2> m_ay;
u8 m_ay_selected;
required_ioport m_mod_ay;