1 // license:BSD-3-Clause 2 // copyright-holders:Curt Coder 3 #ifndef MAME_INCLUDES_XEROX820_H 4 #define MAME_INCLUDES_XEROX820_H 5 6 #pragma once 7 8 #include "bus/scsi/sa1403d.h" 9 #include "bus/rs232/rs232.h" 10 #include "cpu/z80/z80.h" 11 #include "machine/z80daisy.h" 12 #include "cpu/i86/i86.h" 13 #include "machine/com8116.h" 14 #include "machine/ram.h" 15 #include "bus/scsi/scsi.h" 16 #include "bus/scsi/scsihd.h" 17 #include "machine/timer.h" 18 #include "machine/wd_fdc.h" 19 #include "machine/x820kb.h" 20 #include "machine/z80pio.h" 21 #include "machine/z80ctc.h" 22 #include "machine/z80sio.h" 23 #include "sound/spkrdev.h" 24 #include "sound/beep.h" 25 #include "machine/timer.h" 26 #include "imagedev/floppy.h" 27 #include "imagedev/snapquik.h" 28 #include "emupal.h" 29 30 #define SCREEN_TAG "screen" 31 32 #define Z80_TAG "u46" 33 #define Z80PIO_KB_TAG "u105" 34 #define Z80PIO_GP_TAG "u101" 35 #define Z80PIO_RD_TAG "u8" 36 #define Z80SIO_TAG "u96" 37 #define Z80CTC_TAG "u99" 38 #define FD1771_TAG "u109" 39 #define FD1797_TAG "u109" 40 #define COM8116_TAG "u76" 41 #define I8086_TAG "i8086" 42 #define SASIBUS_TAG "sasi" 43 #define RS232_A_TAG "rs232a" 44 #define RS232_B_TAG "rs232b" 45 #define KEYBOARD_TAG "kb" 46 47 #define XEROX820_VIDEORAM_SIZE 0x1000 48 #define XEROX820_VIDEORAM_MASK 0x0fff 49 50 class xerox820_state : public driver_device 51 { 52 public: xerox820_state(const machine_config & mconfig,device_type type,const char * tag)53 xerox820_state(const machine_config &mconfig, device_type type, const char *tag) : 54 driver_device(mconfig, type, tag), 55 m_maincpu(*this, Z80_TAG), 56 m_kbpio(*this, Z80PIO_KB_TAG), 57 m_ctc(*this, Z80CTC_TAG), 58 m_sio(*this, Z80SIO_TAG), 59 m_fdc(*this, FD1771_TAG), 60 m_ram(*this, RAM_TAG), 61 m_palette(*this, "palette"), 62 m_floppy0(*this, FD1771_TAG":0"), 63 m_floppy1(*this, FD1771_TAG":1"), 64 m_kb(*this, KEYBOARD_TAG), 65 m_rom(*this, Z80_TAG), 66 m_char_rom(*this, "chargen"), 67 m_video_ram(*this, "video_ram"), 68 m_fdc_irq(0), 69 m_fdc_drq(0), 70 m_8n5(0), 71 m_400_460(0) 72 { } 73 74 void mk83(machine_config &config); 75 void xerox820(machine_config &config); 76 77 DECLARE_QUICKLOAD_LOAD_MEMBER(quickload_cb); 78 79 uint8_t fdc_r(offs_t offset); 80 void fdc_w(offs_t offset, uint8_t data); 81 void scroll_w(offs_t offset, uint8_t data); 82 //void x120_system_w(uint8_t data); 83 uint8_t kbpio_pa_r(); 84 void kbpio_pa_w(uint8_t data); 85 uint8_t kbpio_pb_r(); 86 DECLARE_WRITE_LINE_MEMBER( fdc_intrq_w ); 87 DECLARE_WRITE_LINE_MEMBER( fdc_drq_w ); 88 89 protected: 90 uint32_t screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); 91 92 93 TIMER_DEVICE_CALLBACK_MEMBER(ctc_tick); 94 95 void mk83_mem(address_map &map); 96 void xerox820_io(address_map &map); 97 void xerox820_mem(address_map &map); 98 99 virtual void machine_start() override; 100 virtual void machine_reset() override; 101 102 required_device<z80_device> m_maincpu; 103 required_device<z80pio_device> m_kbpio; 104 required_device<z80ctc_device> m_ctc; 105 required_device<z80sio_device> m_sio; 106 required_device<wd_fdc_device_base> m_fdc; 107 required_device<ram_device> m_ram; 108 required_device<palette_device> m_palette; 109 required_device<floppy_connector> m_floppy0; 110 required_device<floppy_connector> m_floppy1; 111 required_device<xerox_820_keyboard_device> m_kb; 112 required_memory_region m_rom; 113 required_memory_region m_char_rom; 114 required_shared_ptr<uint8_t> m_video_ram; 115 116 virtual void bankswitch(int bank); 117 void update_nmi(); 118 119 /* video state */ 120 uint8_t m_scroll; /* vertical scroll */ 121 uint8_t m_framecnt; 122 int m_ncset2; /* national character set */ 123 int m_vatt; /* X120 video attribute */ 124 int m_lowlite; /* low light attribute */ 125 int m_chrom; /* character ROM index */ 126 127 /* floppy state */ 128 bool m_fdc_irq; /* interrupt request */ 129 bool m_fdc_drq; /* data request */ 130 int m_8n5; /* 5.25" / 8" drive select */ 131 int m_400_460; /* double sided disk detect */ 132 }; 133 134 class bigboard_state : public xerox820_state 135 { 136 public: bigboard_state(const machine_config & mconfig,device_type type,const char * tag)137 bigboard_state(const machine_config &mconfig, device_type type, const char *tag) 138 : xerox820_state(mconfig, type, tag) 139 , m_beeper(*this, "beeper") 140 , m_beep_timer(*this, "beep_timer") 141 { } 142 143 void kbpio_pa_w(uint8_t data); 144 145 void bigboard(machine_config &config); 146 protected: 147 virtual void machine_reset() override; 148 149 TIMER_DEVICE_CALLBACK_MEMBER(beep_timer); 150 151 required_device<beep_device> m_beeper; 152 required_device<timer_device> m_beep_timer; 153 154 bool m_bit5; 155 }; 156 157 class xerox820ii_state : public xerox820_state 158 { 159 public: xerox820ii_state(const machine_config & mconfig,device_type type,const char * tag)160 xerox820ii_state(const machine_config &mconfig, device_type type, const char *tag) : 161 xerox820_state(mconfig, type, tag), 162 m_speaker(*this, "speaker"), 163 m_sasibus(*this, SASIBUS_TAG) 164 { 165 } 166 167 void bell_w(offs_t offset, uint8_t data); 168 void slden_w(offs_t offset, uint8_t data); 169 void chrom_w(offs_t offset, uint8_t data); 170 void lowlite_w(uint8_t data); 171 void sync_w(offs_t offset, uint8_t data); 172 173 void rdpio_pb_w(uint8_t data); 174 DECLARE_WRITE_LINE_MEMBER( rdpio_pardy_w ); 175 176 void xerox168(machine_config &config); 177 void xerox820ii(machine_config &config); 178 void xerox168_mem(address_map &map); 179 void xerox820ii_io(address_map &map); 180 void xerox820ii_mem(address_map &map); 181 protected: 182 virtual void machine_reset() override; 183 184 void bankswitch(int bank) override; 185 186 required_device<speaker_sound_device> m_speaker; 187 required_device<scsi_port_device> m_sasibus; 188 }; 189 190 #endif // MAME_INCLUDES_XEROX820_H 191