1 // license:BSD-3-Clause
2 // copyright-holders:Wilbert Pol
3 #ifndef MAME_BUS_MSX_CART_CARTRIDGE_H
4 #define MAME_BUS_MSX_CART_CARTRIDGE_H
5 
6 #pragma once
7 
8 
9 void msx_cart(device_slot_interface &device);
10 void msx_yamaha_60pin(device_slot_interface &device);   // 60 pin expansion slots as found in yamaha machines
11 
12 
13 class msx_slot_cartridge_device;
14 
15 class msx_cart_interface : public device_interface
16 {
17 	friend class msx_slot_cartridge_device;
18 
19 public:
20 	// This is called after loading cartridge contents and allows the cartridge
21 	// implementation to perform some additional initialization based on the
22 	// cartridge contents.
initialize_cartridge()23 	virtual void initialize_cartridge() { }
interface_pre_start()24 	virtual void interface_pre_start() override { assert(m_exp != nullptr); }
25 
26 	// reading and writing
read_cart(offs_t offset)27 	virtual uint8_t read_cart(offs_t offset) { return 0xff; }
write_cart(offs_t offset,uint8_t data)28 	virtual void write_cart(offs_t offset, uint8_t data) { }
29 
30 	DECLARE_WRITE_LINE_MEMBER(irq_out);
31 	address_space &memory_space() const;
32 	address_space &io_space() const;
33 
34 	// ROM/RAM/SRAM management
35 	// Mainly used by the cartridge slot when loading images
36 	void rom_alloc(uint32_t size);
37 	void ram_alloc(uint32_t size);
38 	void rom_vlm5030_alloc(uint32_t size);
39 	void sram_alloc(uint32_t size);
40 
get_rom_base()41 	uint8_t* get_rom_base() { return &m_rom[0]; }
get_rom_vlm5030_base()42 	uint8_t* get_rom_vlm5030_base() { return &m_rom_vlm5030[0]; }
get_ram_base()43 	uint8_t* get_ram_base() { return &m_ram[0]; }
get_sram_base()44 	uint8_t* get_sram_base() { return &m_sram[0]; }
get_rom_size()45 	uint32_t get_rom_size() { return m_rom.size(); }
get_rom_vlm5030_size()46 	uint32_t get_rom_vlm5030_size() { return m_rom_vlm5030.size(); }
get_ram_size()47 	uint32_t get_ram_size() { return m_ram.size(); }
get_sram_size()48 	uint32_t get_sram_size() { return m_sram.size(); }
49 
50 protected:
51 	msx_cart_interface(const machine_config &mconfig, device_t &device);
52 
53 	std::vector<uint8_t> m_rom;
54 	std::vector<uint8_t> m_ram;
55 	std::vector<uint8_t> m_rom_vlm5030;
56 	std::vector<uint8_t> m_sram;
57 
58 private:
59 	msx_slot_cartridge_device *m_exp;
60 };
61 
62 
63 #endif // MAME_BUS_MSX_CART_CARTRIDGE_H
64