1 // license:LGPL-2.1+
2 // copyright-holders:Angelo Salese, R. Belmont
3 #ifndef MAME_INCLUDES_DCCONS_H
4 #define MAME_INCLUDES_DCCONS_H
5 
6 #pragma once
7 
8 #include "dc.h"
9 
10 #include "bus/ata/ataintf.h"
11 #include "imagedev/chd_cd.h"
12 #include "machine/gdrom.h"
13 #include "machine/intelfsh.h"
14 
15 class dc_cons_state : public dc_state
16 {
17 public:
dc_cons_state(const machine_config & mconfig,device_type type,const char * tag)18 	dc_cons_state(const machine_config &mconfig, device_type type, const char *tag)
19 		: dc_state(mconfig, type, tag)
20 		, m_ata(*this, "ata")
21 		, m_dcflash(*this, "dcflash")
22 		, atapi_xfercomplete(0)
23 	{ }
24 
25 	required_device<ata_interface_device> m_ata;
26 	required_device<fujitsu_29lv002tc_device> m_dcflash;
27 
28 	void init_dc();
29 	void init_dcus();
30 	void init_dcjp();
31 	void init_tream();
32 
33 	uint64_t dcus_idle_skip_r();
34 	uint64_t dcjp_idle_skip_r();
35 
36 	uint64_t dc_pdtra_r();
37 	void dc_pdtra_w(uint64_t data);
38 	DECLARE_WRITE_LINE_MEMBER(aica_irq);
39 	DECLARE_WRITE_LINE_MEMBER(sh4_aica_irq);
40 	DECLARE_WRITE_LINE_MEMBER(ata_interrupt);
41 
42 	TIMER_CALLBACK_MEMBER( atapi_xfer_end );
43 
44 	void dreamcast_atapi_init();
45 	uint32_t dc_mess_g1_ctrl_r(offs_t offset);
46 	void dc_mess_g1_ctrl_w(offs_t offset, uint32_t data, uint32_t mem_mask = ~0);
47 	uint8_t dc_flash_r(offs_t offset);
48 	void dc_flash_w(offs_t offset, uint8_t data);
49 
50 	static void gdrom_config(device_t *device);
51 	void dc_base(machine_config &config);
52 	void dc(machine_config &config);
53 	void dc_fish(machine_config &config);
54 	void aica_map(address_map &map);
55 	void dc_audio_map(address_map &map);
56 	void dc_map(address_map &map);
57 	void dc_port(address_map &map);
58 private:
59 	uint64_t PDTRA, PCTRA;
60 	emu_timer *atapi_timer;
61 	int atapi_xferlen, atapi_xferbase, atapi_xfercomplete;
62 };
63 
64 #endif // MAME_INCLUDES_DCCONS_H
65