1 // license:BSD-3-Clause 2 // copyright-holders:Nathan Woods,Frank Palazzolo 3 /***************************************************************************** 4 * 5 * includes/intv.h 6 * 7 ****************************************************************************/ 8 #ifndef MAME_INCLUDES_INTV_H 9 #define MAME_INCLUDES_INTV_H 10 11 #pragma once 12 13 #include "sound/ay8910.h" 14 #include "video/stic.h" 15 #include "video/tms9927.h" 16 17 #include "bus/intv/ecs.h" 18 #include "bus/intv/slot.h" 19 #include "bus/intv/voice.h" 20 //#include "bus/intv/keycomp.h" 21 22 #include "bus/intv_ctrl/ctrl.h" 23 #include "bus/intv_ctrl/handctrl.h" 24 25 #include "bus/generic/slot.h" 26 #include "bus/generic/carts.h" 27 28 #include "emupal.h" 29 30 31 class intv_state : public driver_device 32 { 33 public: intv_state(const machine_config & mconfig,device_type type,const char * tag)34 intv_state(const machine_config &mconfig, device_type type, const char *tag) : 35 driver_device(mconfig, type, tag), 36 m_maincpu(*this, "maincpu"), 37 m_sound(*this, "ay8914"), 38 m_stic(*this, "stic"), 39 m_crtc(*this, "crtc"), 40 m_cart(*this, "cartslot"), 41 m_intvkbd_dualport_ram(*this, "dualport_ram"), 42 m_videoram(*this, "videoram"), 43 m_keyboard(*this, "keyboard"), 44 m_iocart1(*this, "ioslot1"), 45 m_iocart2(*this, "ioslot2"), 46 m_region_maincpu(*this, "maincpu"), 47 m_region_keyboard(*this, "keyboard"), 48 m_io_test(*this, "TEST"), 49 m_gfxdecode(*this, "gfxdecode"), 50 m_palette(*this, "palette") 51 { } 52 53 void intvkbd(machine_config &config); 54 void intv2(machine_config &config); 55 void intvoice(machine_config &config); 56 void intvecs(machine_config &config); 57 void intv(machine_config &config); 58 59 void init_intvecs(); 60 void init_intvkbd(); 61 void init_intv(); 62 63 private: 64 enum 65 { 66 TIMER_INTV_INTERRUPT2_COMPLETE, 67 TIMER_INTV_INTERRUPT_COMPLETE, 68 TIMER_INTV_BTB_FILL 69 }; 70 71 required_device<cpu_device> m_maincpu; 72 required_device<ay8914_device> m_sound; 73 required_device<stic_device> m_stic; 74 optional_device<tms9927_device> m_crtc; 75 optional_device<intv_cart_slot_device> m_cart; 76 optional_shared_ptr<uint16_t> m_intvkbd_dualport_ram; 77 optional_shared_ptr<uint8_t> m_videoram; 78 79 uint16_t intv_stic_r(offs_t offset); 80 void intv_stic_w(offs_t offset, uint16_t data); 81 uint16_t intv_gram_r(offs_t offset); 82 void intv_gram_w(offs_t offset, uint16_t data); 83 uint16_t intv_ram8_r(offs_t offset); 84 void intv_ram8_w(offs_t offset, uint16_t data); 85 uint16_t intv_ram16_r(offs_t offset); 86 void intv_ram16_w(offs_t offset, uint16_t data); 87 uint8_t intvkb_iocart_r(offs_t offset); 88 89 uint8_t m_bus_copy_mode; 90 uint8_t m_backtab_row; 91 uint16_t m_ram16[0x160]; 92 int m_sr1_int_pending; 93 uint8_t m_ram8[256]; 94 bool m_maincpu_reset; 95 96 // Keyboard Component 97 void intvkbd_dualport16_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); 98 uint8_t intvkbd_dualport8_lsb_r(offs_t offset); 99 void intvkbd_dualport8_lsb_w(offs_t offset, uint8_t data); 100 uint8_t intvkbd_dualport8_msb_r(offs_t offset); 101 void intvkbd_dualport8_msb_w(offs_t offset, uint8_t data); 102 uint8_t intvkbd_io_r(offs_t offset); 103 void intvkbd_io_w(offs_t offset, uint8_t data); 104 uint8_t intvkbd_periph_r(offs_t offset); 105 void intvkbd_periph_w(offs_t offset, uint8_t data); 106 107 uint16_t iab_r(); 108 109 bool m_printer_not_busy; // printer state 110 bool m_printer_no_paper; // printer state 111 bool m_printer_not_busy_enable; // printer interface state 112 113 int m_intvkbd_text_blanked; 114 int m_intvkbd_keyboard_col; 115 int m_tape_int_pending; 116 int m_tape_interrupts_enabled; 117 int m_tape_motor_mode; 118 119 virtual void machine_start() override; 120 virtual void machine_reset() override; 121 virtual void video_start() override; 122 void intv_palette(palette_device &palette) const; 123 uint32_t screen_update_intv(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); 124 uint32_t screen_update_intvkbd(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); 125 INTERRUPT_GEN_MEMBER(intv_interrupt2); 126 INTERRUPT_GEN_MEMBER(intv_interrupt); 127 TIMER_CALLBACK_MEMBER(intv_interrupt2_complete); 128 TIMER_CALLBACK_MEMBER(intv_interrupt_complete); 129 TIMER_CALLBACK_MEMBER(intv_btb_fill); 130 131 void intv2_mem(address_map &map); 132 void intv_mem(address_map &map); 133 void intvecs_mem(address_map &map); 134 void intvkbd2_mem(address_map &map); 135 void intvkbd_mem(address_map &map); 136 void intvoice_mem(address_map &map); 137 138 int m_is_keybd; 139 140 optional_device<cpu_device> m_keyboard; 141 optional_device<generic_slot_device> m_iocart1; 142 optional_device<generic_slot_device> m_iocart2; 143 required_memory_region m_region_maincpu; 144 optional_memory_region m_region_keyboard; 145 optional_ioport m_io_test; 146 147 optional_device<gfxdecode_device> m_gfxdecode; 148 required_device<palette_device> m_palette; 149 150 ioport_port *m_intv_keyboard[10]; 151 152 virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; 153 }; 154 155 #endif // MAME_INCLUDES_INTV_H 156