MAME/src/mame/kaneko/kaneko_rlespr.h
2026-05-23 01:35:04 +10:00

44 lines
1.2 KiB
C++

// license:BSD-3-Clause
// copyright-holders:David Haywood
#ifndef MAME_KANEKO_KANEKO_RLESPR_H
#define MAME_KANEKO_KANEKO_RLESPR_H
#pragma once
#include "dirom.h"
// TODO : Unknown address bits; maybe 27?
class kaneko_rle_sprites_device : public device_t, public device_video_interface, public device_rom_interface<27>
{
public:
kaneko_rle_sprites_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
// configurations
void set_sprite_kludge(int x, int y);
void draw_sprites(const rectangle &cliprect, u32* spriteram_source, size_t spriteram_size, u32* sprite_regs);
// getters
bitmap_ind16 &bitmap() { return m_sprite_bitmap[m_buffer]; }
protected:
virtual void device_start() override ATTR_COLD;
virtual void device_reset() override ATTR_COLD;
private:
static constexpr unsigned DECODE_BUFFER_SIZE = 0x2000;
static constexpr unsigned DECODE_BUFFER_MASK = DECODE_BUFFER_SIZE - 1;
static constexpr size_t ROM_ADDRESS_MASK = (1 << 27) - 1;
int m_sprite_kludge_x, m_sprite_kludge_y;
std::unique_ptr<u8[]> m_decodebuffer;
bitmap_ind16 m_sprite_bitmap[2];
u8 m_buffer;
int rle_decode(int romoffset, int size);
};
DECLARE_DEVICE_TYPE(KANEKO_RLE_SPRITES, kaneko_rle_sprites_device)
#endif // MAME_KANEKO_KANEKO_RLESPR_H