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