1 // license:BSD-3-Clause 2 // copyright-holders:Robbbert 3 #ifndef MAME_INCLUDES_KAYPRO_H 4 #define MAME_INCLUDES_KAYPRO_H 5 6 #pragma once 7 8 #include "cpu/z80/z80.h" 9 #include "machine/z80daisy.h" 10 #include "machine/z80pio.h" 11 #include "bus/centronics/ctronics.h" 12 #include "imagedev/floppy.h" 13 #include "imagedev/snapquik.h" 14 #include "sound/beep.h" 15 #include "video/mc6845.h" 16 #include "machine/wd_fdc.h" 17 #include "machine/timer.h" 18 #include "emupal.h" 19 #include "screen.h" 20 21 class kaypro_state : public driver_device 22 { 23 public: kaypro_state(const machine_config & mconfig,device_type type,const char * tag)24 kaypro_state(const machine_config &mconfig, device_type type, const char *tag) 25 : driver_device(mconfig, type, tag) 26 , m_palette(*this, "palette") 27 , m_screen(*this, "screen") 28 , m_maincpu(*this, "maincpu") 29 , m_p_chargen(*this, "chargen") 30 , m_pio_g(*this, "z80pio_g") 31 , m_pio_s(*this, "z80pio_s") 32 , m_centronics(*this, "centronics") 33 , m_fdc(*this, "fdc") 34 , m_floppy0(*this, "fdc:0") 35 , m_floppy1(*this, "fdc:1") 36 , m_crtc(*this, "crtc") 37 , m_beep(*this, "beeper") 38 , m_bankr(*this, "bankr") 39 , m_bankw(*this, "bankw") 40 , m_bank3(*this, "bank3") 41 , m_floppy_timer(*this, "floppy_timer") 42 , m_leds(*this, "led%c", unsigned('A')) 43 {} 44 45 void omni2(machine_config &config); 46 void kayproiv(machine_config &config); 47 void kayproii(machine_config &config); 48 void kaypronew2(machine_config &config); 49 void kaypro484(machine_config &config); 50 void kaypro10(machine_config &config); 51 void kaypro284(machine_config &config); 52 void kaypro4x(machine_config &config); 53 void kaypro1(machine_config &config); 54 55 void init_kaypro(); 56 57 protected: 58 virtual void machine_start() override; 59 virtual void machine_reset() override; 60 61 private: 62 void kaypro484_io(address_map &map); 63 void kaypro_map(address_map &map); 64 void kayproii_io(address_map &map); 65 66 DECLARE_WRITE_LINE_MEMBER(write_centronics_busy); 67 TIMER_DEVICE_CALLBACK_MEMBER(floppy_timer); 68 u8 kaypro484_87_r(); 69 u8 kaypro484_system_port_r(); 70 u8 kaypro484_status_r(); 71 u8 kaypro484_videoram_r(); 72 void kaypro484_system_port_w(u8 data); 73 void kaypro484_index_w(u8 data); 74 void kaypro484_register_w(u8 data); 75 void kaypro484_videoram_w(u8 data); 76 u8 pio_system_r(); 77 void kayproii_pio_system_w(u8 data); 78 void kayproiv_pio_system_w(u8 data); 79 DECLARE_WRITE_LINE_MEMBER(fdc_intrq_w); 80 DECLARE_WRITE_LINE_MEMBER(fdc_drq_w); 81 u8 kaypro_videoram_r(offs_t offset); 82 void kaypro_videoram_w(offs_t offset, u8 data); 83 84 void kaypro_palette(palette_device &palette) const; 85 uint32_t screen_update_kayproii(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); 86 uint32_t screen_update_kaypro484(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); 87 uint32_t screen_update_omni2(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); 88 MC6845_UPDATE_ROW(kaypro484_update_row); 89 DECLARE_QUICKLOAD_LOAD_MEMBER(quickload_cb); 90 91 void mc6845_screen_configure(); 92 93 u8 m_mc6845_reg[32]; 94 u8 m_mc6845_ind; 95 u8 m_framecnt; 96 std::unique_ptr<u8[]> m_ram; 97 std::unique_ptr<u8[]> m_vram; // video ram 98 std::unique_ptr<u8[]> m_dummy; // black hole for write to rom 99 int m_centronics_busy; 100 bool m_is_motor_off; 101 u8 m_fdc_rq; 102 u8 m_system_port; 103 uint16_t m_mc6845_video_address; 104 floppy_image_device *m_floppy; 105 106 required_device<palette_device> m_palette; 107 required_device<screen_device> m_screen; 108 required_device<z80_device> m_maincpu; 109 required_region_ptr<u8> m_p_chargen; 110 optional_device<z80pio_device> m_pio_g; 111 optional_device<z80pio_device> m_pio_s; 112 required_device<centronics_device> m_centronics; 113 required_device<fd1793_device> m_fdc; 114 required_device<floppy_connector> m_floppy0; 115 optional_device<floppy_connector> m_floppy1; 116 optional_device<mc6845_device> m_crtc; 117 required_device<beep_device> m_beep; 118 required_memory_bank m_bankr; 119 required_memory_bank m_bankw; 120 required_memory_bank m_bank3; 121 required_device<timer_device> m_floppy_timer; 122 output_finder<2> m_leds; 123 }; 124 125 #endif // MAME_INCLUDES_KAYPRO_H 126