summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/includes/swtpc09.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/includes/swtpc09.h')
-rw-r--r--src/mame/includes/swtpc09.h117
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;