1 // license:BSD-3-Clause 2 // copyright-holders:Curt Coder 3 #ifndef MAME_INCLUDES_MIKROMIK_H 4 #define MAME_INCLUDES_MIKROMIK_H 5 6 #pragma once 7 8 #include "bus/rs232/rs232.h" 9 #include "cpu/i8085/i8085.h" 10 #include "formats/mm_dsk.h" 11 #include "imagedev/floppy.h" 12 #include "machine/am9517a.h" 13 #include "machine/bankdev.h" 14 #include "machine/i8212.h" 15 #include "machine/mm1kb.h" 16 #include "machine/pit8253.h" 17 #include "machine/ram.h" 18 #include "machine/z80sio.h" 19 #include "machine/upd765.h" 20 #include "video/i8275.h" 21 #include "video/upd7220.h" 22 #include "emupal.h" 23 24 #define SCREEN_TAG "screen" 25 #define I8085A_TAG "ic40" 26 #define I8212_TAG "ic12" 27 #define I8237_TAG "ic45" 28 #define I8253_TAG "ic6" 29 #define UPD765_TAG "ic15" 30 #define I8275_TAG "ic59" 31 #define UPD7201_TAG "ic11" 32 #define UPD7220_TAG "ic101" 33 #define RS232_A_TAG "rs232a" 34 #define RS232_B_TAG "rs232b" 35 #define RS232_C_TAG "rs232c" 36 #define KB_TAG "kb" 37 38 class mm1_state : public driver_device 39 { 40 public: mm1_state(const machine_config & mconfig,device_type type,const char * tag)41 mm1_state(const machine_config &mconfig, device_type type, const char *tag) : 42 driver_device(mconfig, type, tag), 43 m_maincpu(*this, I8085A_TAG), 44 m_io(*this, "io"), 45 m_iop(*this, I8212_TAG), 46 m_dmac(*this, I8237_TAG), 47 m_pit(*this, I8253_TAG), 48 m_crtc(*this, I8275_TAG), 49 m_fdc(*this, UPD765_TAG), 50 m_mpsc(*this, UPD7201_TAG), 51 m_hgdc(*this, UPD7220_TAG), 52 m_palette(*this, "palette"), 53 m_floppy0(*this, UPD765_TAG ":0:525qd"), 54 m_floppy1(*this, UPD765_TAG ":1:525qd"), 55 m_rs232a(*this, RS232_A_TAG), 56 m_rs232b(*this, RS232_B_TAG), 57 m_rs232c(*this, RS232_C_TAG), 58 m_ram(*this, RAM_TAG), 59 m_rom(*this, I8085A_TAG), 60 m_mmu_rom(*this, "address"), 61 m_char_rom(*this, "chargen"), 62 m_video_ram(*this, "video_ram"), 63 m_a8(0), 64 m_recall(0), 65 m_dack3(1), 66 m_tc(CLEAR_LINE), 67 m_fdc_tc(0) 68 { } 69 70 void mm1(machine_config &config); 71 void mm1m6(machine_config &config); 72 void mm1m6_video(machine_config &config); 73 void mm1m7(machine_config &config); 74 75 protected: 76 virtual void machine_start() override; 77 virtual void machine_reset() override; 78 79 private: 80 required_device<i8085a_cpu_device> m_maincpu; 81 required_device<address_map_bank_device> m_io; 82 required_device<i8212_device> m_iop; 83 required_device<am9517a_device> m_dmac; 84 required_device<pit8253_device> m_pit; 85 required_device<i8275_device> m_crtc; 86 required_device<upd765a_device> m_fdc; 87 required_device<upd7201_device> m_mpsc; 88 required_device<upd7220_device> m_hgdc; 89 required_device<palette_device> m_palette; 90 required_device<floppy_image_device> m_floppy0; 91 required_device<floppy_image_device> m_floppy1; 92 required_device<rs232_port_device> m_rs232a; 93 required_device<rs232_port_device> m_rs232b; 94 required_device<rs232_port_device> m_rs232c; 95 required_device<ram_device> m_ram; 96 required_memory_region m_rom; 97 required_memory_region m_mmu_rom; 98 required_memory_region m_char_rom; 99 required_shared_ptr<uint16_t> m_video_ram; 100 101 int m_a8; 102 103 // video state 104 int m_llen; 105 106 // serial state 107 int m_intc; 108 int m_rx21; 109 int m_tx21; 110 int m_rcl; 111 112 // floppy state 113 int m_recall; 114 int m_dack3; 115 int m_tc; 116 int m_fdc_tc; 117 118 uint32_t screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); 119 120 uint8_t read(offs_t offset); 121 void write(offs_t offset, uint8_t data); 122 DECLARE_WRITE_LINE_MEMBER( a8_w ); 123 DECLARE_WRITE_LINE_MEMBER( recall_w ); 124 DECLARE_WRITE_LINE_MEMBER( rx21_w ); 125 DECLARE_WRITE_LINE_MEMBER( tx21_w ); 126 DECLARE_WRITE_LINE_MEMBER( rcl_w ); 127 DECLARE_WRITE_LINE_MEMBER( intc_w ); 128 DECLARE_WRITE_LINE_MEMBER( llen_w ); 129 DECLARE_WRITE_LINE_MEMBER( motor_on_w ); 130 DECLARE_WRITE_LINE_MEMBER( dma_hrq_w ); 131 uint8_t mpsc_dack_r(); 132 void mpsc_dack_w(uint8_t data); 133 DECLARE_WRITE_LINE_MEMBER( dma_eop_w ); 134 DECLARE_WRITE_LINE_MEMBER( dack3_w ); 135 DECLARE_WRITE_LINE_MEMBER( itxc_w ); 136 DECLARE_WRITE_LINE_MEMBER( irxc_w ); 137 DECLARE_WRITE_LINE_MEMBER( auxc_w ); 138 DECLARE_WRITE_LINE_MEMBER( drq2_w ); 139 DECLARE_WRITE_LINE_MEMBER( drq1_w ); 140 DECLARE_READ_LINE_MEMBER( dsra_r ); 141 142 void update_tc(); 143 144 DECLARE_FLOPPY_FORMATS( floppy_formats ); 145 I8275_DRAW_CHARACTER_MEMBER( crtc_display_pixels ); 146 UPD7220_DISPLAY_PIXELS_MEMBER( hgdc_display_pixels ); 147 void mm1_palette(palette_device &palette) const; 148 void mm1_map(address_map &map); 149 void mmu_io_map(address_map &map); 150 void mm1_upd7220_map(address_map &map); 151 }; 152 153 #endif // MAME_INCLUDES_MIKROMIK_H 154