summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/video/starfield_05xx.h
blob: 805e16c1cc4902849902a4981e84c9f664be2a6f (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
// license:BSD-3-Clause
// copyright-holders:Robert Hildinger
#ifndef MAME_VIDEO_STARFIELD_05XX_H
#define MAME_VIDEO_STARFIELD_05XX_H

// used by galaga, bosconian, and their various clones
class starfield_05xx_device : public device_t
{
public:
	starfield_05xx_device(machine_config const &mconfig, char const *tag, device_t *owner, uint32_t clock);

	void enable_starfield(uint8_t on);
	void set_scroll_speed(uint8_t index_x, uint8_t index_y);
	void set_active_starfield_sets(uint8_t set_a, uint8_t set_b);
	void set_starfield_config(uint16_t off_x, uint16_t off_y, uint16_t lim_x);
	void draw_starfield(bitmap_ind16 &bitmap, const rectangle &cliprect, int flip);

protected:
	virtual void device_start() override;
	virtual void device_reset() override;

private:
	uint16_t get_next_lfsr_state(uint16_t lfsr);
	
	uint8_t  m_enable;
	uint16_t m_lfsr;
	uint16_t m_pre_vis_cycle_count;
	uint16_t m_post_vis_cycle_count;
	uint8_t  m_set_a;
	uint8_t  m_set_b;
	
	uint16_t m_offset_x;
	uint16_t m_offset_y;
	uint16_t m_limit_x;
};


DECLARE_DEVICE_TYPE(STARFIELD_05XX, starfield_05xx_device)

#endif // MAME_VIDEO_STARFIELD_05XX_H