1 // license:BSD-3-Clause 2 // copyright-holders:Curt Coder 3 4 #ifndef MAME_INCLUDES_BW12_H 5 #define MAME_INCLUDES_BW12_H 6 7 #include "cpu/z80/z80.h" 8 #include "machine/ram.h" 9 #include "formats/bw12_dsk.h" 10 #include "imagedev/floppy.h" 11 #include "machine/74259.h" 12 #include "machine/6821pia.h" 13 #include "bus/centronics/ctronics.h" 14 #include "machine/kb3600.h" 15 #include "machine/pit8253.h" 16 #include "machine/ram.h" 17 #include "machine/rescap.h" 18 #include "machine/timer.h" 19 #include "machine/upd765.h" 20 #include "machine/z80sio.h" 21 #include "video/mc6845.h" 22 #include "emupal.h" 23 24 #define SCREEN_TAG "screen" 25 #define Z80_TAG "ic35" 26 #define MC6845_TAG "ic14" 27 #define UPD765_TAG "ic45" 28 #define Z80SIO_TAG "ic15" 29 #define PIT8253_TAG "ic34" 30 #define PIA6821_TAG "ic16" 31 #define AY3600PRO002_TAG "ic74" 32 #define CENTRONICS_TAG "centronics" 33 #define FLOPPY_TIMER_TAG "motor_off" 34 #define RS232_A_TAG "rs232a" 35 #define RS232_B_TAG "rs232b" 36 37 #define BW12_VIDEORAM_MASK 0x7ff 38 #define BW12_CHARROM_MASK 0xfff 39 40 class bw12_state : public driver_device 41 { 42 public: bw12_state(const machine_config & mconfig,device_type type,const char * tag)43 bw12_state(const machine_config &mconfig, device_type type, const char *tag) 44 : driver_device(mconfig, type, tag) 45 , m_maincpu(*this, Z80_TAG) 46 , m_latch(*this, "latch") 47 , m_pia(*this, PIA6821_TAG) 48 , m_sio(*this, Z80SIO_TAG) 49 , m_fdc(*this, UPD765_TAG) 50 , m_kbc(*this, AY3600PRO002_TAG) 51 , m_crtc(*this, MC6845_TAG) 52 , m_pit(*this, PIT8253_TAG) 53 , m_palette(*this, "palette") 54 , m_centronics(*this, CENTRONICS_TAG) 55 , m_ram(*this, RAM_TAG) 56 , m_floppy0(*this, UPD765_TAG ":1:525dd") 57 , m_floppy1(*this, UPD765_TAG ":2:525dd") 58 , m_floppy_timer(*this, FLOPPY_TIMER_TAG) 59 , m_rom(*this, Z80_TAG) 60 , m_char_rom(*this, "chargen") 61 , m_video_ram(*this, "video_ram") 62 , m_modifiers(*this, "MODIFIERS") 63 { } 64 65 void bw14(machine_config &config); 66 void bw12(machine_config &config); 67 68 private: 69 void bankswitch(); 70 71 DECLARE_WRITE_LINE_MEMBER( ls138_a0_w ); 72 DECLARE_WRITE_LINE_MEMBER( ls138_a1_w ); 73 DECLARE_WRITE_LINE_MEMBER( init_w ); 74 DECLARE_WRITE_LINE_MEMBER( motor0_w ); 75 DECLARE_WRITE_LINE_MEMBER( motor1_w ); 76 77 uint8_t ls259_r(offs_t offset); 78 uint8_t pia_pa_r(); 79 DECLARE_WRITE_LINE_MEMBER( pia_cb2_w ); 80 DECLARE_WRITE_LINE_MEMBER( pit_out2_w ); 81 DECLARE_READ_LINE_MEMBER( ay3600_shift_r ); 82 DECLARE_READ_LINE_MEMBER( ay3600_control_r ); 83 DECLARE_WRITE_LINE_MEMBER( ay3600_data_ready_w ); 84 MC6845_UPDATE_ROW( crtc_update_row ); 85 86 void floppy_motor_on_off(); 87 TIMER_DEVICE_CALLBACK_MEMBER(floppy_motor_off_tick); 88 DECLARE_FLOPPY_FORMATS( bw12_floppy_formats ); 89 DECLARE_FLOPPY_FORMATS( bw14_floppy_formats ); 90 91 DECLARE_WRITE_LINE_MEMBER(write_centronics_busy); 92 DECLARE_WRITE_LINE_MEMBER(write_centronics_fault); 93 DECLARE_WRITE_LINE_MEMBER(write_centronics_perror); 94 95 void common(machine_config &config); 96 void bw12_io(address_map &map); 97 void bw12_mem(address_map &map); 98 99 protected: 100 virtual void machine_start() override; 101 virtual void machine_reset() override; 102 103 required_device<cpu_device> m_maincpu; 104 required_device<ls259_device> m_latch; 105 required_device<pia6821_device> m_pia; 106 required_device<z80sio_device> m_sio; 107 required_device<upd765a_device> m_fdc; 108 required_device<ay3600_device> m_kbc; 109 required_device<mc6845_device> m_crtc; 110 required_device<pit8253_device> m_pit; 111 required_device<palette_device> m_palette; 112 required_device<centronics_device> m_centronics; 113 required_device<ram_device> m_ram; 114 required_device<floppy_image_device> m_floppy0; 115 required_device<floppy_image_device> m_floppy1; 116 required_device<timer_device> m_floppy_timer; 117 required_memory_region m_rom; 118 required_memory_region m_char_rom; 119 required_shared_ptr<uint8_t> m_video_ram; 120 required_ioport m_modifiers; 121 122 /* memory state */ 123 int m_bank; 124 125 /* PIT state */ 126 int m_pit_out2; 127 128 /* keyboard state */ 129 int m_key_data[9]; 130 int m_key_sin; 131 int m_key_stb; 132 int m_key_shift; 133 134 /* floppy state */ 135 int m_motor_on; 136 int m_motor0; 137 int m_motor1; 138 139 int m_centronics_busy; 140 int m_centronics_fault; 141 int m_centronics_perror; 142 }; 143 144 #endif 145