summaryrefslogblamecommitdiffstatshomepage
path: root/src/mame/includes/swtpc09.h
blob: 6bf76e40628599d0586698c00386c8598eef9256 (plain) (tree)
1
2
3
4
5
6
7
8
                       
                                   
                                                                            

                             


                                                                             



                               
 

                            
                           
                             






                              
                            
                            






                                          
                                                                                       

                                                   
                                     











                                               
                                     

           

                                               



                                                

                                                     
                                             

                                                    
 

                                                 



                                                      



                                                  

                                          
 












                                                         

                                      
 



                              
 


                                          




                                                  




                                                   
          

                                              
                                        
                                                                    
 

                                                  
                                              
                                              











                                                     
                                           
 




                                                                                     
                                                                                  




                                   
 

                                      
                                           
 
                                                                           
                                 



                            
                                

                                  
          


                                              


                                  

  
                                 
// license:BSD-3-Clause
// copyright-holders:Robert Justice
/***************************************************************************
    swtpc09 include file
    Robert Justice ,2009-2014

****************************************************************************/

#ifndef MAME_INCLUDES_SWTPC09_H
#define MAME_INCLUDES_SWTPC09_H

#pragma once

#include "cpu/m6809/m6809.h"
#include "video/generic.h"
#include "machine/wd_fdc.h"
#include "imagedev/flopdrv.h"
#include "machine/6840ptm.h"
#include "machine/6821pia.h"
#include "machine/6850acia.h"
#include "machine/6522via.h"
#include "machine/terminal.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
{
public:
	swtpc09_state(const machine_config &mconfig, device_type type, const char *tag)
		: driver_device(mconfig, type, tag)
		, m_maincpu(*this, "maincpu")
		, 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")
	{ }

	DECLARE_FLOPPY_FORMATS(floppy_formats);

	DECLARE_READ8_MEMBER(pia0_a_r);
	DECLARE_READ8_MEMBER(pia0_ca1_r);
	DECLARE_WRITE_LINE_MEMBER( pia0_irq_a );

	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_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(piaide_a_r);
	DECLARE_READ8_MEMBER(piaide_b_r);
	DECLARE_WRITE8_MEMBER(piaide_a_w);
	DECLARE_WRITE8_MEMBER(piaide_b_w);

	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 ( 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_WRITE8_MEMBER ( dc4_control_reg_w );

	DECLARE_WRITE8_MEMBER(dat_w);
	DECLARE_READ8_MEMBER(main_r);
	DECLARE_WRITE8_MEMBER(main_w);

	void init_swtpc09();
	void init_swtpc09i();
	void init_swtpc09u();
	void init_swtpc09d3();

	DECLARE_READ8_MEMBER ( m6844_r );
	DECLARE_WRITE8_MEMBER ( m6844_w );

	void swtpc09_base(machine_config &config);
	void swtpc09i(machine_config &config);
	void swtpc09d3(machine_config &config);
	void swtpc09u(machine_config &config);
	void swtpc09(machine_config &config);
	void flex_dc4_piaide_mem(address_map &map);
	void flex_dmf2_mem(address_map &map);
	void mp09_mem(address_map &map);
	void uniflex_dmf2_mem(address_map &map);
	void uniflex_dmf3_mem(address_map &map);
protected:
	virtual void machine_start() override;

	void swtpc09_fdc_dma_transfer();
	void swtpc09_irq_handler(uint8_t peripheral, uint8_t state);

	offs_t dat_translate(offs_t offset) const;

	required_device<cpu_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<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;

	uint8_t m_term_data;               // terminal keyboard value
	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_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;
	uint8_t m_active_interrupt;
	uint8_t m_interrupt;

	address_space *m_banked_space;

	// TODO: move this in proper device

	/* channel_data structure holds info about each 6844 DMA channel */
	struct m6844_channel_data
	{
		int active;
		int address;
		int counter;
		uint8_t control;
		int start_address;
		int start_counter;
	};

	/* 6844 description */
	m6844_channel_data m_m6844_channel[4];
	uint8_t m_m6844_priority;
	uint8_t m_m6844_interrupt;
	uint8_t m_m6844_chain;
};

#endif // MAME_INCLUDES_SWTPC09_H