1 // license:BSD-3-Clause
2 // copyright-holders:Krzysztof Strzecha
3 /*****************************************************************************
4  *
5  * includes/primo.h
6  *
7  ****************************************************************************/
8 
9 #ifndef MAME_INCLUDES_PRIMO_H
10 #define MAME_INCLUDES_PRIMO_H
11 
12 #pragma once
13 
14 #include "imagedev/snapquik.h"
15 #include "imagedev/cassette.h"
16 #include "sound/spkrdev.h"
17 #include "screen.h"
18 
19 #include "bus/cbmiec/cbmiec.h"
20 #include "bus/generic/slot.h"
21 #include "bus/generic/carts.h"
22 
23 class primo_state : public driver_device
24 {
25 public:
primo_state(const machine_config & mconfig,device_type type,const char * tag)26 	primo_state(const machine_config &mconfig, device_type type, const char *tag)
27 		: driver_device(mconfig, type, tag)
28 		, m_maincpu(*this, "maincpu")
29 		, m_iec(*this, CBM_IEC_TAG)
30 		, m_speaker(*this, "speaker")
31 		, m_cassette(*this, "cassette")
32 		, m_cart1(*this, "cartslot1")
33 		, m_cart2(*this, "cartslot2")
34 		, m_screen(*this, "screen")
35 		, m_mem_exp_port(*this, "MEMORY_EXPANSION")
36 		, m_clock_port(*this, "CPU_CLOCK")
37 		, m_keyboard_port(*this, "IN%u", 0U)
38 		, m_reset_port(*this, "RESET")
39 		, m_vram(*this, "videoram")
40 	{ }
41 
42 	void init_primo();
43 
44 	void primob32(machine_config &config);
45 	void primob64(machine_config &config);
46 	void primoa32(machine_config &config);
47 	void primob48(machine_config &config);
48 	void primoa64(machine_config &config);
49 	void primoc64(machine_config &config);
50 	void primoa48(machine_config &config);
51 
52 private:
53 	uint8_t be_1_r(offs_t offset);
54 	uint8_t be_2_r();
55 	void ki_1_w(uint8_t data);
56 	void ki_2_w(uint8_t data);
57 	void FD_w(uint8_t data);
58 	void machine_reset() override;
59 	void machine_start() override;
60 	DECLARE_MACHINE_RESET(primob);
61 	uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
62 	DECLARE_WRITE_LINE_MEMBER(vblank_irq);
63 	void update_memory();
64 	void common_machine_init();
65 	void setup_pss(uint8_t* snapshot_data, uint32_t snapshot_size);
66 	void setup_pp(uint8_t* quickload_data, uint32_t quickload_size);
67 	DECLARE_SNAPSHOT_LOAD_MEMBER(snapshot_cb);
68 	DECLARE_QUICKLOAD_LOAD_MEMBER(quickload_cb);
69 
70 	void primo32_mem(address_map &map);
71 	void primo48_mem(address_map &map);
72 	void primo64_mem(address_map &map);
73 	void primoa_io(address_map &map);
74 	void primob_io(address_map &map);
75 
76 	required_device<cpu_device> m_maincpu;
77 	required_device<cbm_iec_device> m_iec;
78 	required_device<speaker_sound_device> m_speaker;
79 	required_device<cassette_image_device> m_cassette;
80 	required_device<generic_slot_device> m_cart1;
81 	required_device<generic_slot_device> m_cart2;
82 	required_device<screen_device> m_screen;
83 	required_ioport m_mem_exp_port;
84 	required_ioport m_clock_port;
85 	required_ioport_array<4> m_keyboard_port;
86 	required_ioport m_reset_port;
87 	required_shared_ptr<uint8_t> m_vram;
88 
89 	memory_region *m_cart1_rom;
90 	memory_region *m_cart2_rom;
91 
92 	uint16_t m_video_memory_base;
93 	uint8_t m_port_FD;
94 	int m_nmi;
95 };
96 
97 
98 #endif // MAME_INCLUDES_PRIMO_H
99