1 // license:LGPL-2.1+ 2 // copyright-holders:Michael Zapf 3 /*************************************************************************** 4 Gromport (Cartridge port) of the TI-99 consoles 5 For details see gromport.cpp 6 7 Michael Zapf 8 ***************************************************************************/ 9 10 #ifndef MAME_BUS_TI99_GROMPORT_GROMPORT_H 11 #define MAME_BUS_TI99_GROMPORT_GROMPORT_H 12 13 #pragma once 14 15 #define TI99_GROMPORT_TAG "gromport" 16 17 namespace bus { namespace ti99 { namespace gromport { 18 19 struct pcb_type 20 { 21 int id; 22 const char* name; 23 }; 24 25 class ti99_cartridge_device; 26 class cartridge_connector_device; 27 28 class gromport_device : public device_t, public device_slot_interface 29 { 30 public: 31 template <typename U> gromport_device(const machine_config & mconfig,const char * tag,device_t * owner,uint32_t clock,U && opts,const char * dflt)32 gromport_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock, U &&opts, const char *dflt) 33 : gromport_device(mconfig, tag, owner, clock) 34 { 35 option_reset(); 36 opts(*this); 37 set_default_option(dflt); 38 set_fixed(false); 39 } 40 41 gromport_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); 42 43 void readz(offs_t offset, uint8_t *value); 44 void write(offs_t offset, uint8_t data); 45 void crureadz(offs_t offset, uint8_t *value); 46 void cruwrite(offs_t offset, uint8_t data); 47 DECLARE_WRITE_LINE_MEMBER(ready_line); 48 DECLARE_WRITE_LINE_MEMBER(romgq_line); 49 void set_gromlines(line_state mline, line_state moline, line_state gsq); 50 DECLARE_WRITE_LINE_MEMBER(gclock_in); 51 52 void cartridge_inserted(); 53 bool is_grom_idle(); 54 ready_cb()55 auto ready_cb() { return m_console_ready.bind(); } reset_cb()56 auto reset_cb() { return m_console_reset.bind(); } 57 58 // Configure for 16K ROM space (TI-99/8 only) extend()59 gromport_device& extend() { m_mask = 0x3fff; return *this; } 60 61 protected: 62 void device_start() override; 63 void device_reset() override; 64 void device_config_complete() override; 65 ioport_constructor device_input_ports() const override; 66 67 private: 68 cartridge_connector_device* m_connector; 69 bool m_reset_on_insert; 70 devcb_write_line m_console_ready; 71 devcb_write_line m_console_reset; 72 int m_romgq; 73 int m_mask; 74 }; 75 76 class cartridge_connector_device : public device_t 77 { 78 public: 79 virtual void readz(offs_t offset, uint8_t *value) = 0; 80 virtual void write(offs_t offset, uint8_t data) = 0; setaddress_dbin(offs_t offset,int state)81 virtual void setaddress_dbin(offs_t offset, int state) { } 82 83 virtual void crureadz(offs_t offset, uint8_t *value) = 0; 84 virtual void cruwrite(offs_t offset, uint8_t data) = 0; 85 86 virtual DECLARE_WRITE_LINE_MEMBER(romgq_line) = 0; 87 virtual void set_gromlines(line_state mline, line_state moline, line_state gsq) =0; 88 89 virtual DECLARE_WRITE_LINE_MEMBER(gclock_in) = 0; 90 91 DECLARE_WRITE_LINE_MEMBER(ready_line); 92 insert(int index,bus::ti99::gromport::ti99_cartridge_device * cart)93 virtual void insert(int index, bus::ti99::gromport::ti99_cartridge_device* cart) { m_gromport->cartridge_inserted(); } remove(int index)94 virtual void remove(int index) { } 95 virtual bool is_grom_idle() = 0; 96 97 protected: 98 cartridge_connector_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); 99 virtual void device_config_complete() override; 100 101 gromport_device* m_gromport; 102 bool m_grom_selected; 103 }; 104 105 } } } // end namespace bus::ti99::gromport 106 107 DECLARE_DEVICE_TYPE_NS(TI99_GROMPORT, bus::ti99::gromport, gromport_device) 108 109 void ti99_gromport_options(device_slot_interface &device); 110 void ti99_gromport_options_998(device_slot_interface &device); 111 112 #endif // MAME_BUS_TI99_GROMPORT_GROMPORT_H 113