1 // license:BSD-3-Clause 2 // copyright-holders:Curt Coder 3 #pragma once 4 5 #ifndef MAME_INCLUDES_COMX35_H 6 #define MAME_INCLUDES_COMX35_H 7 8 #include "bus/comx35/exp.h" 9 #include "cpu/cosmac/cosmac.h" 10 #include "imagedev/cassette.h" 11 #include "imagedev/printer.h" 12 #include "imagedev/snapquik.h" 13 #include "machine/cdp1871.h" 14 #include "machine/ram.h" 15 #include "machine/rescap.h" 16 #include "sound/cdp1869.h" 17 18 #define SCREEN_TAG "screen" 19 20 #define CDP1870_TAG "u1" 21 #define CDP1869_TAG "u2" 22 #define CDP1802_TAG "u3" 23 #define CDP1871_TAG "u4" 24 #define EXPANSION_TAG "exp" 25 26 #define COMX35_CHARRAM_SIZE 0x800 27 #define COMX35_CHARRAM_MASK 0x7ff 28 29 class comx35_state : public driver_device 30 { 31 public: comx35_state(const machine_config & mconfig,device_type type,const char * tag)32 comx35_state(const machine_config &mconfig, device_type type, const char *tag) 33 : driver_device(mconfig, type, tag), 34 m_maincpu(*this, CDP1802_TAG), 35 m_vis(*this, CDP1869_TAG), 36 m_kbe(*this, CDP1871_TAG), 37 m_cassette(*this, "cassette"), 38 m_ram(*this, RAM_TAG), 39 m_exp(*this, EXPANSION_TAG), 40 m_rom(*this, CDP1802_TAG), 41 m_char_ram(*this, "char_ram"), 42 m_d6(*this, "D6"), 43 m_modifiers(*this, "MODIFIERS") 44 { } 45 46 required_device<cosmac_device> m_maincpu; 47 required_device<cdp1869_device> m_vis; 48 required_device<cdp1871_device> m_kbe; 49 required_device<cassette_image_device> m_cassette; 50 required_device<ram_device> m_ram; 51 required_device<comx_expansion_slot_device> m_exp; 52 required_memory_region m_rom; 53 optional_shared_ptr<uint8_t> m_char_ram; 54 required_ioport m_d6; 55 required_ioport m_modifiers; 56 57 virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; 58 virtual void machine_start() override; 59 virtual void machine_reset() override; 60 61 virtual void video_start() override; 62 63 enum 64 { 65 TIMER_ID_RESET 66 }; 67 68 void check_interrupt(); 69 70 uint8_t mem_r(offs_t offset); 71 void mem_w(offs_t offset, uint8_t data); 72 uint8_t io_r(offs_t offset); 73 void io_w(offs_t offset, uint8_t data); 74 void cdp1869_w(offs_t offset, uint8_t data); 75 DECLARE_READ_LINE_MEMBER( clear_r ); 76 DECLARE_READ_LINE_MEMBER( ef2_r ); 77 DECLARE_READ_LINE_MEMBER( ef4_r ); 78 DECLARE_WRITE_LINE_MEMBER( q_w ); 79 void sc_w(uint8_t data); 80 DECLARE_WRITE_LINE_MEMBER( irq_w ); 81 DECLARE_WRITE_LINE_MEMBER( prd_w ); 82 DECLARE_INPUT_CHANGED_MEMBER( trigger_reset ); 83 DECLARE_QUICKLOAD_LOAD_MEMBER( quickload_cb ); 84 void image_fread_memory(device_image_interface &image, uint16_t addr, uint32_t count); 85 CDP1869_CHAR_RAM_READ_MEMBER(comx35_charram_r); 86 CDP1869_CHAR_RAM_WRITE_MEMBER(comx35_charram_w); 87 CDP1869_PCB_READ_MEMBER(comx35_pcb_r); 88 89 void base(machine_config &config, const XTAL clock); 90 void pal(machine_config &config); 91 void ntsc(machine_config &config); 92 void comx35_pal_video(machine_config &config); 93 void comx35_ntsc_video(machine_config &config); 94 95 void cdp1869_page_ram(address_map &map); 96 void comx35_io(address_map &map); 97 void comx35_mem(address_map &map); 98 // processor state 99 int m_clear; // CPU mode 100 int m_q; // Q flag 101 int m_iden; // interrupt/DMA enable 102 int m_dma; // memory refresh DMA 103 int m_int; // interrupt request 104 int m_prd; // predisplay 105 int m_cr1; // interrupt enable 106 }; 107 108 #endif 109