1 // license:BSD-3-Clause 2 // copyright-holders:Curt Coder, Frode van der Meeren 3 #ifndef MAME_INCLUDES_TIKI100_H 4 #define MAME_INCLUDES_TIKI100_H 5 6 #pragma once 7 8 #include "bus/centronics/ctronics.h" 9 #include "bus/rs232/rs232.h" 10 #include "bus/tiki100/exp.h" 11 #include "cpu/z80/z80.h" 12 #include "machine/z80daisy.h" 13 #include "formats/tiki100_dsk.h" 14 #include "imagedev/cassette.h" 15 #include "imagedev/floppy.h" 16 #include "machine/ram.h" 17 #include "machine/timer.h" 18 #include "machine/z80ctc.h" 19 #include "machine/z80pio.h" 20 #include "machine/z80sio.h" 21 #include "machine/wd_fdc.h" 22 #include "sound/ay8910.h" 23 #include "emupal.h" 24 25 #define Z80_TAG "z80" 26 #define Z80DART_TAG "z80dart" 27 #define Z80PIO_TAG "z80pio" 28 #define Z80CTC_TAG "z80ctc" 29 #define FD1797_TAG "fd1797" 30 #define AY8912_TAG "ay8912" 31 #define RS232_A_TAG "rs232a" 32 #define RS232_B_TAG "rs232b" 33 #define CASSETTE_TAG "cassette" 34 #define CENTRONICS_TAG "centronics" 35 #define SCREEN_TAG "screen" 36 37 #define TIKI100_VIDEORAM_SIZE 0x8000 38 #define TIKI100_VIDEORAM_MASK 0x7fff 39 40 #define BANK_ROM 0 41 #define BANK_RAM 1 42 #define BANK_VIDEO_RAM 2 43 44 class tiki100_state : public driver_device 45 { 46 public: tiki100_state(const machine_config & mconfig,device_type type,const char * tag)47 tiki100_state(const machine_config &mconfig, device_type type, const char *tag) : 48 driver_device(mconfig, type, tag), 49 m_screen(*this, "screen"), 50 m_maincpu(*this, Z80_TAG), 51 m_ctc(*this, Z80CTC_TAG), 52 m_fdc(*this, FD1797_TAG), 53 m_pio(*this, Z80PIO_TAG), 54 m_dart(*this, Z80DART_TAG), 55 m_psg(*this, AY8912_TAG), 56 m_ram(*this, RAM_TAG), 57 m_floppy0(*this, FD1797_TAG":0"), 58 m_floppy1(*this, FD1797_TAG":1"), 59 m_cassette(*this, CASSETTE_TAG), 60 m_centronics(*this, CENTRONICS_TAG), 61 m_exp(*this, "tiki100bus"), 62 m_rom(*this, Z80_TAG), 63 m_prom(*this, "u4"), 64 m_video_ram(*this, "video_ram"), 65 m_y(*this, "Y%u", 1), 66 m_st_io(*this, "ST"), 67 m_palette(*this, "palette"), 68 m_leds(*this, "led%u", 1U), 69 m_rome(1), 70 m_vire(1) 71 { } 72 73 void tiki100(machine_config &config); 74 75 private: 76 uint32_t screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); 77 78 uint8_t mrq_r(offs_t offset); 79 void mrq_w(offs_t offset, uint8_t data); 80 uint8_t iorq_r(offs_t offset); 81 void iorq_w(offs_t offset, uint8_t data); 82 83 uint8_t keyboard_r(); 84 void keyboard_w(uint8_t data); 85 void video_mode_w(uint8_t data); 86 void palette_w(uint8_t data); 87 void system_w(uint8_t data); 88 DECLARE_WRITE_LINE_MEMBER( bar0_w ); 89 DECLARE_WRITE_LINE_MEMBER( bar2_w ); 90 void video_scroll_w(uint8_t data); 91 92 uint8_t pio_pb_r(); 93 void pio_pb_w(uint8_t data); 94 95 DECLARE_FLOPPY_FORMATS( floppy_formats ); 96 97 TIMER_DEVICE_CALLBACK_MEMBER( ctc_tick ); 98 TIMER_DEVICE_CALLBACK_MEMBER( tape_tick ); 99 TIMER_DEVICE_CALLBACK_MEMBER( scanline_start ); 100 101 DECLARE_WRITE_LINE_MEMBER(write_centronics_ack); 102 DECLARE_WRITE_LINE_MEMBER(write_centronics_busy); 103 DECLARE_WRITE_LINE_MEMBER(write_centronics_perror); 104 105 DECLARE_WRITE_LINE_MEMBER( busrq_w ); 106 107 void tiki100_io(address_map &map); 108 void tiki100_mem(address_map &map); 109 110 virtual void machine_start() override; 111 virtual void machine_reset() override; 112 113 required_device<screen_device> m_screen; 114 required_device<z80_device> m_maincpu; 115 required_device<z80ctc_device> m_ctc; 116 required_device<fd1797_device> m_fdc; 117 required_device<z80pio_device> m_pio; 118 required_device<z80dart_device> m_dart; 119 required_device<ay8912_device> m_psg; 120 required_device<ram_device> m_ram; 121 required_device<floppy_connector> m_floppy0; 122 required_device<floppy_connector> m_floppy1; 123 required_device<cassette_image_device> m_cassette; 124 required_device<centronics_device> m_centronics; 125 required_device<tiki100_bus_device> m_exp; 126 required_memory_region m_rom; 127 required_memory_region m_prom; 128 optional_shared_ptr<uint8_t> m_video_ram; 129 required_ioport_array<13> m_y; 130 required_ioport m_st_io; 131 required_device<palette_device> m_palette; 132 output_finder<2> m_leds; 133 134 enum 135 { 136 ROM0 = 0x01, 137 ROM1 = 0x02, 138 VIR = 0x04, 139 RAM0 = 0x08 140 }; 141 142 // memory state 143 bool m_rome; 144 bool m_vire; 145 146 // video state 147 uint8_t m_scroll; 148 uint8_t m_mode; 149 uint8_t m_palette_val; 150 uint8_t m_current_pixel; 151 152 // keyboard state 153 int m_keylatch; 154 155 // printer state 156 int m_centronics_ack; 157 int m_centronics_busy; 158 int m_centronics_perror; 159 160 // serial state 161 bool m_st; 162 163 }; 164 165 #endif // MAME_INCLUDES_TIKI100_H 166