diff options
Diffstat (limited to 'src/mame/includes/swtpc09.h')
-rw-r--r-- | src/mame/includes/swtpc09.h | 117 |
1 files changed, 70 insertions, 47 deletions
diff --git a/src/mame/includes/swtpc09.h b/src/mame/includes/swtpc09.h index 17178c7434c..8dc3b9169e7 100644 --- a/src/mame/includes/swtpc09.h +++ b/src/mame/includes/swtpc09.h @@ -1,5 +1,5 @@ // license:BSD-3-Clause -// copyright-holders:Robert Justice +// copyright-holders:Robert Justice,68bit /*************************************************************************** swtpc09 include file Robert Justice ,2009-2014 @@ -17,14 +17,10 @@ #include "imagedev/floppy.h" #include "machine/6840ptm.h" #include "machine/6821pia.h" -#include "machine/6850acia.h" #include "machine/6522via.h" #include "imagedev/harddriv.h" -#include "machine/idectrl.h" #include "machine/bankdev.h" #include "machine/mc14411.h" -#include "bus/rs232/rs232.h" - class swtpc09_state : public driver_device @@ -36,18 +32,22 @@ public: , m_brg(*this, "brg") , m_pia(*this, "pia") , m_ptm(*this, "ptm") - , m_acia(*this, "acia") , m_fdc(*this, "fdc") , m_floppy0(*this, "fdc:0") , m_floppy1(*this, "fdc:1") , m_floppy2(*this, "fdc:2") , m_floppy3(*this, "fdc:3") , m_via(*this, "via") - , m_piaide(*this, "piaide") - , m_harddisk(*this, "harddisk") - , m_ide(*this, "ide") , m_dat(*this, "dat") , m_bankdev(*this, "bankdev") + , m_maincpu_clock(*this, "maincpu_clock") + , m_fdc_clock(*this, "fdc_clock") + , m_baud_rate_high(*this, "baud_rate_high") + , m_floppy_expected_density(*this, "floppy_expected_density") + , m_floppy_expected_sectors(*this, "floppy_expected_sectors") + , m_floppy_track_zero_expected_sectors(*this, "floppy_track_zero_expected_sectors") + , m_sbug_double_density(*this, "sbug_double_density") + , m_piaide_flex_boot_cd00(*this, "piaide_flex_boot_cd00") { } void swtpc09_base(machine_config &config); @@ -62,42 +62,46 @@ public: void init_swtpc09d3(); private: - DECLARE_FLOPPY_FORMATS(floppy_formats); + DECLARE_FLOPPY_FORMATS(floppy_flex_formats); + DECLARE_FLOPPY_FORMATS(floppy_uniflex_formats); DECLARE_READ8_MEMBER(pia0_a_r); DECLARE_READ8_MEMBER(pia0_ca1_r); DECLARE_WRITE_LINE_MEMBER( pia0_irq_a ); + DECLARE_WRITE_LINE_MEMBER(io_irq_w); + DECLARE_WRITE_LINE_MEMBER( ptm_o1_callback ); DECLARE_WRITE_LINE_MEMBER( ptm_o3_callback ); DECLARE_WRITE_LINE_MEMBER( ptm_irq ); - DECLARE_WRITE_LINE_MEMBER( acia_interrupt ); - DECLARE_WRITE_LINE_MEMBER( fdc_intrq_w ); DECLARE_WRITE_LINE_MEMBER( fdc_drq_w ); + DECLARE_WRITE_LINE_MEMBER( fdc_sso_w ); - DECLARE_READ8_MEMBER( dmf3_via_read_porta ); - DECLARE_READ8_MEMBER( dmf3_via_read_portb ); - DECLARE_WRITE8_MEMBER( dmf3_via_write_porta ); - DECLARE_WRITE_LINE_MEMBER( dmf3_via_irq ); + DECLARE_READ8_MEMBER( dmaf3_via_read_porta ); + DECLARE_READ8_MEMBER( dmaf3_via_read_portb ); + DECLARE_WRITE8_MEMBER( dmaf3_via_write_porta ); + DECLARE_WRITE_LINE_MEMBER( dmaf3_via_irq ); - DECLARE_READ8_MEMBER(piaide_a_r); - DECLARE_READ8_MEMBER(piaide_b_r); - DECLARE_WRITE8_MEMBER(piaide_a_w); - DECLARE_WRITE8_MEMBER(piaide_b_w); + TIMER_CALLBACK_MEMBER(floppy_motor_callback); - DECLARE_READ8_MEMBER ( dmf2_dma_address_reg_r ); - DECLARE_WRITE8_MEMBER ( dmf2_dma_address_reg_w ); - DECLARE_READ8_MEMBER ( dmf2_control_reg_r ); - DECLARE_WRITE8_MEMBER ( dmf2_control_reg_w ); + DECLARE_READ8_MEMBER( dmaf2_fdc_r ); + DECLARE_WRITE8_MEMBER( dmaf2_fdc_w ); + DECLARE_READ8_MEMBER ( dmaf2_dma_address_reg_r ); + DECLARE_WRITE8_MEMBER ( dmaf2_dma_address_reg_w ); + DECLARE_READ8_MEMBER ( dmaf2_control_reg_r ); + DECLARE_WRITE8_MEMBER ( dmaf2_control_reg_w ); - DECLARE_READ8_MEMBER ( dmf3_dma_address_reg_r ); - DECLARE_WRITE8_MEMBER ( dmf3_dma_address_reg_w ); - DECLARE_READ8_MEMBER ( dmf3_control_reg_r ); - DECLARE_WRITE8_MEMBER ( dmf3_control_reg_w ); + DECLARE_READ8_MEMBER( dmaf3_fdc_r ); + DECLARE_WRITE8_MEMBER( dmaf3_fdc_w ); + DECLARE_READ8_MEMBER ( dmaf3_dma_address_reg_r ); + DECLARE_WRITE8_MEMBER ( dmaf3_dma_address_reg_w ); + DECLARE_READ8_MEMBER ( dmaf3_control_reg_r ); + DECLARE_WRITE8_MEMBER ( dmaf3_control_reg_w ); - DECLARE_WRITE8_MEMBER ( dc4_control_reg_w ); + DECLARE_READ8_MEMBER( dmaf3_wd_r ); + DECLARE_WRITE8_MEMBER( dmaf3_wd_w ); DECLARE_WRITE8_MEMBER(dat_w); DECLARE_READ8_MEMBER(main_r); @@ -106,44 +110,63 @@ private: DECLARE_READ8_MEMBER ( m6844_r ); DECLARE_WRITE8_MEMBER ( m6844_w ); - void flex_dc4_piaide_mem(address_map &map); - void flex_dmf2_mem(address_map &map); + DECLARE_READ8_MEMBER ( unmapped_r ); + DECLARE_WRITE8_MEMBER ( unmapped_w ); + + void flex_dc5_piaide_mem(address_map &map); + void flex_dmaf2_mem(address_map &map); void mp09_mem(address_map &map); - void uniflex_dmf2_mem(address_map &map); - void uniflex_dmf3_mem(address_map &map); + void uniflex_dmaf2_mem(address_map &map); + void uniflex_dmaf3_mem(address_map &map); virtual void machine_start() override; + virtual void machine_reset() override; void swtpc09_fdc_dma_transfer(); void swtpc09_irq_handler(uint8_t peripheral, uint8_t state); + void floppy_motor_trigger(); + + void validate_floppy_side(uint8_t cmd); + uint8_t validate_fdc_sector_size(uint8_t cmd); + uint8_t validate_fdc_dden(uint8_t dden); + offs_t dat_translate(offs_t offset) const; required_device<mc6809_device> m_maincpu; required_device<mc14411_device> m_brg; required_device<pia6821_device> m_pia; required_device<ptm6840_device> m_ptm; - required_device<acia6850_device> m_acia; - required_device<fd1793_device> m_fdc; - required_device<floppy_connector> m_floppy0; - required_device<floppy_connector> m_floppy1; - required_device<floppy_connector> m_floppy2; - required_device<floppy_connector> m_floppy3; + + optional_device<fd1797_device> m_fdc; + optional_device<floppy_connector> m_floppy0; + optional_device<floppy_connector> m_floppy1; + optional_device<floppy_connector> m_floppy2; + optional_device<floppy_connector> m_floppy3; + optional_device<via6522_device> m_via; - optional_device<pia6821_device> m_piaide; - optional_device<device_t> m_harddisk; - optional_device<ide_controller_device> m_ide; required_shared_ptr<uint8_t> m_dat; required_device<address_map_bank_device> m_bankdev; + required_ioport m_maincpu_clock; + required_ioport m_fdc_clock; + required_ioport m_baud_rate_high; + required_ioport m_floppy_expected_density; + required_ioport m_floppy_expected_sectors; + required_ioport m_floppy_track_zero_expected_sectors; + required_ioport m_sbug_double_density; + required_ioport m_piaide_flex_boot_cd00; uint8_t m_pia_counter; // this is the counter on pia porta - uint8_t m_fdc_dma_address_reg; // dmf2 or dmf3 dma extended address reg + + uint8_t m_fdc_dma_address_reg; // dmaf2 or dmaf3 dma extended address reg uint8_t m_system_type; // flag to indicate hw and rom combination uint8_t m_fdc_status; // for floppy controller - uint8_t m_via_ca1_input; // dmf3 fdc interrupt is connected here - uint8_t m_dmf3_via_porta; - uint8_t m_piaide_porta; - uint8_t m_piaide_portb; + int m_floppy_motor_on; + emu_timer *m_floppy_motor_timer; + floppy_image_device *m_fdc_floppy; // Current selected floppy. + uint8_t m_fdc_side; // Current floppy side. + uint8_t m_via_ca1_input; // dmaf3 fdc interrupt is connected here + uint8_t m_dmaf3_via_porta; uint8_t m_active_interrupt; uint8_t m_interrupt; |