diff options
Diffstat (limited to 'src/mess/drivers/apricotp.c')
-rw-r--r-- | src/mess/drivers/apricotp.c | 151 |
1 files changed, 126 insertions, 25 deletions
diff --git a/src/mess/drivers/apricotp.c b/src/mess/drivers/apricotp.c index f19887f7c56..d9132dfd2bd 100644 --- a/src/mess/drivers/apricotp.c +++ b/src/mess/drivers/apricotp.c @@ -1,8 +1,8 @@ // license:LGPL-2.1+ -// copyright-holders:Angelo Salese, Dirk Best +// copyright-holders:Angelo Salese /*************************************************************************** - ACT Apricot F1 series + ACT Apricot FP preliminary driver by Angelo Salese @@ -24,15 +24,44 @@ */ -#include "includes/apricotp.h" +#include "emu.h" +#include "cpu/i86/i86.h" +#include "cpu/m6800/m6800.h" +#include "machine/am9517a.h" +#include "machine/apricotkb.h" +#include "bus/centronics/ctronics.h" +#include "machine/pic8259.h" +#include "machine/pit8253.h" +#include "machine/ram.h" +#include "machine/wd_fdc.h" +#include "machine/z80dart.h" +#include "sound/sn76496.h" +#include "video/mc6845.h" +#include "formats/apridisk.h" #include "apricotp.lh" - //************************************************************************** -// MACROS/CONSTANTS +// MACROS / CONSTANTS //************************************************************************** +#define I8086_TAG "ic7" +#define I8284_TAG "ic30" +#define I8237_TAG "ic17" +#define I8259A_TAG "ic51" +#define I8253A5_TAG "ic20" +#define TMS4500_TAG "ic42" +#define MC6845_TAG "ic69" +#define HD63B01V1_TAG "ic29" +#define AD7574_TAG "ic34" +#define AD1408_TAG "ic37" +#define Z80SIO0_TAG "ic6" +#define WD2797_TAG "ic5" +#define SN76489AN_TAG "ic13" +#define CENTRONICS_TAG "centronics" +#define SCREEN_LCD_TAG "screen0" +#define SCREEN_CRT_TAG "screen1" + enum { LED_STOP = 0, @@ -45,6 +74,86 @@ enum }; +//************************************************************************** +// TYPE DEFINITIONS +//************************************************************************** + +// ======================> fp_state + +class fp_state : public driver_device +{ +public: + fp_state(const machine_config &mconfig, device_type type, const char *tag) + : driver_device(mconfig, type, tag), + m_maincpu(*this, I8086_TAG), + m_soundcpu(*this, HD63B01V1_TAG), + m_dmac(*this, I8237_TAG), + m_pic(*this, I8259A_TAG), + m_pit(*this, I8253A5_TAG), + m_sio(*this, Z80SIO0_TAG), + m_fdc(*this, WD2797_TAG), + m_crtc(*this, MC6845_TAG), + m_ram(*this, RAM_TAG), + m_floppy0(*this, WD2797_TAG":0"), + m_floppy1(*this, WD2797_TAG":1"), + m_floppy(NULL), + m_centronics(*this, CENTRONICS_TAG), + m_work_ram(*this, "work_ram"), + m_video_ram(*this, "video_ram") + { } + + DECLARE_FLOPPY_FORMATS(floppy_formats); + + required_device<cpu_device> m_maincpu; + required_device<cpu_device> m_soundcpu; + required_device<am9517a_device> m_dmac; + required_device<pic8259_device> m_pic; + required_device<pit8253_device> m_pit; + required_device<z80dart_device> m_sio; + required_device<wd2797_t> m_fdc; + required_device<mc6845_device> m_crtc; + required_device<ram_device> m_ram; + required_device<floppy_connector> m_floppy0; + required_device<floppy_connector> m_floppy1; + floppy_image_device *m_floppy; + required_device<centronics_device> m_centronics; + + virtual void machine_start(); + virtual void machine_reset(); + + virtual void video_start(); + UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); + + MC6845_UPDATE_ROW(update_row); + DECLARE_READ16_MEMBER( mem_r ); + DECLARE_WRITE16_MEMBER( mem_w ); + DECLARE_READ8_MEMBER( prtr_snd_r ); + DECLARE_WRITE8_MEMBER( pint_clr_w ); + DECLARE_WRITE8_MEMBER( ls_w ); + DECLARE_WRITE8_MEMBER( contrast_w ); + DECLARE_WRITE8_MEMBER( palette_w ); + DECLARE_WRITE16_MEMBER( video_w ); + DECLARE_WRITE8_MEMBER( lat_w ); + + void lat_ls259_w(offs_t offset, int state); + + optional_shared_ptr<UINT16> m_work_ram; + + // video state + optional_shared_ptr<UINT16> m_video_ram; + UINT8 m_video; + + int m_centronics_busy; + int m_centronics_select; + int m_centronics_fault; + int m_centronics_perror; + + DECLARE_WRITE_LINE_MEMBER( write_centronics_busy ); + DECLARE_WRITE_LINE_MEMBER( write_centronics_select ); + DECLARE_WRITE_LINE_MEMBER( write_centronics_fault ); + DECLARE_WRITE_LINE_MEMBER( write_centronics_perror ); +}; + //************************************************************************** // VIDEO @@ -211,10 +320,7 @@ void fp_state::lat_ls259_w(offs_t offset, int state) m_fdc->set_floppy(m_floppy); if (m_floppy) - { - m_floppy->set_rpm(600); m_floppy->mon_w(0); - } } break; } @@ -399,20 +505,6 @@ INPUT_PORTS_END */ -static SLOT_INTERFACE_START( fp_floppies ) - SLOT_INTERFACE( "35dd", FLOPPY_35_DD ) // Sony OA-D32W (600 rpm) -SLOT_INTERFACE_END -/* -static LEGACY_FLOPPY_OPTIONS_START( act ) - LEGACY_FLOPPY_OPTION( img2hd, "dsk", "2HD disk image", basicdsk_identify_default, basicdsk_construct_default, NULL, - HEADS([2]) - TRACKS([80]) - SECTORS([16]) - SECTOR_LENGTH([256]) - FIRST_SECTOR_ID([1])) -LEGACY_FLOPPY_OPTIONS_END -*/ - WRITE_LINE_MEMBER( fp_state::write_centronics_busy ) { m_centronics_busy = state; @@ -467,6 +559,15 @@ void fp_state::machine_reset() // MACHINE DRIVERS //************************************************************************** +FLOPPY_FORMATS_MEMBER( fp_state::floppy_formats ) + FLOPPY_APRIDISK_FORMAT +FLOPPY_FORMATS_END + +static SLOT_INTERFACE_START( fp_floppies ) + SLOT_INTERFACE("d32w", SONY_OA_D32W) +SLOT_INTERFACE_END + + //------------------------------------------------- // MACHINE_CONFIG( fp ) //------------------------------------------------- @@ -531,12 +632,12 @@ static MACHINE_CONFIG_START( fp, fp_state ) MCFG_Z80SIO0_ADD(Z80SIO0_TAG, 2500000, 0, 0, 0, 0) MCFG_Z80DART_OUT_INT_CB(DEVWRITELINE(I8259A_TAG, pic8259_device, ir4_w)) - MCFG_WD2797x_ADD(WD2797_TAG, 2000000) + MCFG_WD2797_ADD(WD2797_TAG, 2000000) MCFG_WD_FDC_INTRQ_CALLBACK(DEVWRITELINE(I8259A_TAG, pic8259_device, ir1_w)) MCFG_WD_FDC_DRQ_CALLBACK(DEVWRITELINE(I8237_TAG, am9517a_device, dreq1_w)) - MCFG_FLOPPY_DRIVE_ADD(WD2797_TAG":0", fp_floppies, "35dd", floppy_image_device::default_floppy_formats) - MCFG_FLOPPY_DRIVE_ADD(WD2797_TAG":1", fp_floppies, NULL, floppy_image_device::default_floppy_formats) + MCFG_FLOPPY_DRIVE_ADD(WD2797_TAG ":0", fp_floppies, "d32w", fp_state::floppy_formats) + MCFG_FLOPPY_DRIVE_ADD(WD2797_TAG ":1", fp_floppies, NULL, fp_state::floppy_formats) MCFG_CENTRONICS_ADD("centronics", centronics_devices, "printer") MCFG_CENTRONICS_BUSY_HANDLER(WRITELINE(fp_state, write_centronics_busy)) |