1 // license:BSD-3-Clause 2 // copyright-holders:Curt Coder 3 #ifndef MAME_INCLUDES_NEWBRAIN_H 4 #define MAME_INCLUDES_NEWBRAIN_H 5 6 #pragma once 7 8 9 #include "bus/newbrain/exp.h" 10 #include "bus/rs232/rs232.h" 11 #include "cpu/z80/z80.h" 12 #include "machine/z80daisy.h" 13 #include "cpu/cop400/cop400.h" 14 #include "imagedev/cassette.h" 15 #include "machine/rescap.h" 16 #include "machine/ram.h" 17 #include "emupal.h" 18 19 #define SCREEN_TAG "screen" 20 #define Z80_TAG "409" 21 #define COP420_TAG "419" 22 #define RS232_V24_TAG "to" 23 #define RS232_PRN_TAG "po" 24 25 class newbrain_state : public driver_device 26 { 27 public: newbrain_state(const machine_config & mconfig,device_type type,const char * tag)28 newbrain_state(const machine_config &mconfig, device_type type, const char *tag) : 29 driver_device(mconfig, type, tag), 30 m_maincpu(*this, Z80_TAG), 31 m_cop(*this, COP420_TAG), 32 m_palette(*this, "palette"), 33 m_exp(*this, NEWBRAIN_EXPANSION_SLOT_TAG), 34 m_cassette1(*this, "cassette1"), 35 m_cassette2(*this, "cassette2"), 36 m_rs232_v24(*this, RS232_V24_TAG), 37 m_rs232_prn(*this, RS232_PRN_TAG), 38 m_ram(*this, RAM_TAG), 39 m_rom(*this, Z80_TAG), 40 m_char_rom(*this, "chargen"), 41 m_y(*this, "Y%u", 0), 42 m_digits(*this, "digit%u", 0U), 43 m_pwrup(0), 44 m_userint(1), 45 m_clkint(1), 46 m_copint(1), 47 m_405_q(0), 48 m_403_q(0xf) 49 { 50 } 51 52 void newbrain(machine_config &config); 53 void newbrain_a(machine_config &config); 54 void newbrain_ad(machine_config &config); 55 void newbrain_md(machine_config &config); 56 void newbrain_video(machine_config &config); 57 58 private: 59 uint32_t screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); 60 61 uint8_t mreq_r(offs_t offset); 62 void mreq_w(offs_t offset, uint8_t data); 63 uint8_t iorq_r(offs_t offset); 64 void iorq_w(offs_t offset, uint8_t data); 65 66 void enrg_w(uint8_t data); 67 void tvtl_w(uint8_t data); 68 uint8_t ust_a_r(); 69 uint8_t ust_b_r(); 70 71 void cop_g_w(uint8_t data); 72 uint8_t cop_g_r(); 73 void cop_d_w(uint8_t data); 74 uint8_t cop_in_r(); 75 DECLARE_WRITE_LINE_MEMBER( k2_w ); 76 DECLARE_READ_LINE_MEMBER( tdi_r ); 77 DECLARE_WRITE_LINE_MEMBER( k1_w ); 78 79 void newbrain_iorq(address_map &map); 80 void newbrain_mreq(address_map &map); 81 82 virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; 83 virtual void machine_start() override; 84 virtual void machine_reset() override; 85 86 virtual void video_start() override; 87 88 enum 89 { 90 TIMER_ID_RESET, 91 TIMER_ID_PWRUP, 92 TIMER_ID_CLKINT 93 }; 94 95 void check_interrupt(); 96 void clclk(); 97 int tpin(); 98 void tm(); 99 100 int get_reset_t(); 101 int get_pwrup_t(); 102 103 void do_screen_update(bitmap_rgb32 &bitmap, const rectangle &cliprect); 104 void tvl(uint8_t data, int a6); 105 106 required_device<z80_device> m_maincpu; 107 required_device<cop400_cpu_device> m_cop; 108 required_device<palette_device> m_palette; 109 required_device<newbrain_expansion_slot_device> m_exp; 110 required_device<cassette_image_device> m_cassette1; 111 required_device<cassette_image_device> m_cassette2; 112 required_device<rs232_port_device> m_rs232_v24; 113 required_device<rs232_port_device> m_rs232_prn; 114 required_device<ram_device> m_ram; 115 required_memory_region m_rom; 116 required_memory_region m_char_rom; 117 required_ioport_array<16> m_y; 118 output_finder<16> m_digits; 119 120 int m_clk; 121 int m_tvp; 122 int m_pwrup; 123 int m_userint; 124 int m_clkint; 125 int m_copint; 126 127 int m_cop_so; 128 int m_cop_tdo; 129 int m_cop_g1; 130 int m_cop_g3; 131 int m_cop_k6; 132 133 int m_405_q; 134 uint8_t m_403_q; 135 uint8_t m_403_d; 136 uint16_t m_402_q; 137 138 int m_rv; 139 int m_fs; 140 int m_32_40; 141 int m_ucr; 142 int m_80l; 143 uint16_t m_tvl; 144 145 emu_timer *m_clkint_timer; 146 }; 147 148 #endif 149