(MESS) vixen: Floppy modernization. (nw)

This commit is contained in:
Curt Coder 2012-11-29 19:02:30 +00:00
parent ff114f9e77
commit 622a0adf0c
2 changed files with 45 additions and 64 deletions

View File

@ -54,15 +54,6 @@ Notes:
*/ */
#include "emu.h"
#include "cpu/z80/z80.h"
#include "imagedev/flopdrv.h"
#include "machine/ram.h"
#include "machine/i8155.h"
#include "machine/ieee488.h"
#include "machine/i8251.h"
#include "machine/wd17xx.h"
#include "sound/discrete.h"
#include "includes/vixen.h" #include "includes/vixen.h"
@ -242,13 +233,11 @@ READ8_MEMBER( vixen_state::port3_r )
*/ */
UINT8 data = 0xff; //0xfc; UINT8 data = 0xff;
// TODO ring indicator // TODO ring indicator
//data |= rs232_ri_r(m_rs232);
// TODO data carrier detect // TODO data carrier detect
//data |= rs232_dcd_r(m_rs232) << 1;
return data; return data;
} }
@ -277,7 +266,7 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START( vixen_io, AS_IO, 8, vixen_state ) static ADDRESS_MAP_START( vixen_io, AS_IO, 8, vixen_state )
ADDRESS_MAP_UNMAP_HIGH ADDRESS_MAP_UNMAP_HIGH
ADDRESS_MAP_GLOBAL_MASK(0xff) ADDRESS_MAP_GLOBAL_MASK(0xff)
AM_RANGE(0x00, 0x03) AM_DEVREADWRITE_LEGACY(FDC1797_TAG, wd17xx_r, wd17xx_w) AM_RANGE(0x00, 0x03) AM_DEVREADWRITE(FDC1797_TAG, fd1797_t, read, write)
AM_RANGE(0x04, 0x04) AM_MIRROR(0x03) AM_READWRITE(status_r, cmd_w) AM_RANGE(0x04, 0x04) AM_MIRROR(0x03) AM_READWRITE(status_r, cmd_w)
AM_RANGE(0x08, 0x08) AM_MIRROR(0x01) AM_DEVREADWRITE(P8155H_TAG, i8155_device, read, write) AM_RANGE(0x08, 0x08) AM_MIRROR(0x01) AM_DEVREADWRITE(P8155H_TAG, i8155_device, read, write)
AM_RANGE(0x0c, 0x0d) AM_DEVWRITE(P8155H_TAG, i8155_device, ale_w) AM_RANGE(0x0c, 0x0d) AM_DEVWRITE(P8155H_TAG, i8155_device, ale_w)
@ -422,10 +411,10 @@ void vixen_state::video_start()
//------------------------------------------------- //-------------------------------------------------
// SCREEN_UPDATE_IND16( vixen ) // SCREEN_UPDATE( vixen )
//------------------------------------------------- //-------------------------------------------------
UINT32 vixen_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) UINT32 vixen_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
{ {
for (int txadr = 0; txadr < 26; txadr++) for (int txadr = 0; txadr < 26; txadr++)
{ {
@ -470,7 +459,7 @@ UINT32 vixen_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, c
{ {
int color = (BIT(char_data, 7 - x) ^ reverse) & !blank; int color = (BIT(char_data, 7 - x) ^ reverse) & !blank;
bitmap.pix16((txadr * 10) + scan, (chadr * 8) + x) = color; bitmap.pix32((txadr * 10) + scan, (chadr * 8) + x) = RGB_MONOCHROME_AMBER[color];
} }
} }
} }
@ -532,10 +521,10 @@ WRITE8_MEMBER( vixen_state::i8155_pc_w )
bit description bit description
0 DSEL1 0 DSEL1/
1 DSEL2 1 DSEL2/
2 DDEN 2 DDEN/
3 ALT CHARSET 3 ALT CHARSET/
4 256 CHARS 4 256 CHARS
5 BEEP ENB 5 BEEP ENB
6 6
@ -544,11 +533,17 @@ WRITE8_MEMBER( vixen_state::i8155_pc_w )
*/ */
// drive select // drive select
if (!BIT(data, 0)) wd17xx_set_drive(m_fdc, 0); floppy_image_device *floppy = NULL;
if (!BIT(data, 1)) wd17xx_set_drive(m_fdc, 1);
if (!BIT(data, 0)) floppy = m_floppy0->get_device();
if (!BIT(data, 1)) floppy = m_floppy1->get_device();
m_fdc->set_floppy(floppy);
if (floppy) floppy->mon_w(0);
// density select // density select
wd17xx_dden_w(m_fdc, BIT(data, 2)); m_fdc->dden_w(BIT(data, 2));
// charset // charset
m_alt = BIT(data, 3); m_alt = BIT(data, 3);
@ -720,38 +715,16 @@ static IEEE488_INTERFACE( ieee488_intf )
DEVCB_NULL DEVCB_NULL
}; };
static SLOT_INTERFACE_START( vixen_floppies )
SLOT_INTERFACE( "525dd", FLOPPY_525_DD )
SLOT_INTERFACE_END
//------------------------------------------------- void vixen_state::fdc_intrq_w(bool state)
// wd17xx_interface fdc_intf
//-------------------------------------------------
static const floppy_interface vixen_floppy_interface =
{
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
FLOPPY_STANDARD_5_25_SSDD_40,
LEGACY_FLOPPY_OPTIONS_NAME(default),
"floppy_5_25",
NULL
};
WRITE_LINE_MEMBER( vixen_state::fdint_w )
{ {
m_fdint = state; m_fdint = state;
update_interrupt(); update_interrupt();
} }
static const wd17xx_interface fdc_intf =
{
DEVCB_NULL,
DEVCB_DRIVER_LINE_MEMBER(vixen_state, fdint_w),
DEVCB_NULL,
{ FLOPPY_0, FLOPPY_1, NULL, NULL }
};
//************************************************************************** //**************************************************************************
@ -822,6 +795,10 @@ void vixen_state::machine_reset()
m_cmd_d0 = 0; m_cmd_d0 = 0;
m_cmd_d1 = 0; m_cmd_d1 = 0;
update_interrupt(); update_interrupt();
m_fdc->reset();
m_io_i8155->reset();
m_usart->reset();
} }
@ -846,9 +823,6 @@ static MACHINE_CONFIG_START( vixen, vixen_state )
MCFG_SCREEN_RAW_PARAMS(XTAL_23_9616MHz/2, 96*8, 0*8, 81*8, 27*10, 0*10, 26*10) MCFG_SCREEN_RAW_PARAMS(XTAL_23_9616MHz/2, 96*8, 0*8, 81*8, 27*10, 0*10, 26*10)
MCFG_TIMER_DRIVER_ADD_SCANLINE("vsync", vixen_state, vsync_tick, SCREEN_TAG, 26*10, 27*10) MCFG_TIMER_DRIVER_ADD_SCANLINE("vsync", vixen_state, vsync_tick, SCREEN_TAG, 26*10, 27*10)
MCFG_PALETTE_LENGTH(2)
MCFG_PALETTE_INIT(monochrome_amber)
// sound hardware // sound hardware
MCFG_SPEAKER_STANDARD_MONO("mono") MCFG_SPEAKER_STANDARD_MONO("mono")
MCFG_SOUND_ADD(DISCRETE_TAG, DISCRETE, 0) MCFG_SOUND_ADD(DISCRETE_TAG, DISCRETE, 0)
@ -859,12 +833,13 @@ static MACHINE_CONFIG_START( vixen, vixen_state )
MCFG_I8155_ADD(P8155H_TAG, XTAL_23_9616MHz/6, i8155_intf) MCFG_I8155_ADD(P8155H_TAG, XTAL_23_9616MHz/6, i8155_intf)
MCFG_I8155_ADD(P8155H_IO_TAG, XTAL_23_9616MHz/6, io_i8155_intf) MCFG_I8155_ADD(P8155H_IO_TAG, XTAL_23_9616MHz/6, io_i8155_intf)
MCFG_I8251_ADD(P8251A_TAG, usart_intf) MCFG_I8251_ADD(P8251A_TAG, usart_intf)
MCFG_FD1797_ADD(FDC1797_TAG, fdc_intf) MCFG_FD1797x_ADD(FDC1797_TAG, XTAL_23_9616MHz/24)
MCFG_LEGACY_FLOPPY_2_DRIVES_ADD(vixen_floppy_interface) MCFG_FLOPPY_DRIVE_ADD(FDC1797_TAG":0", vixen_floppies, "525dd", NULL, floppy_image_device::default_floppy_formats)
MCFG_FLOPPY_DRIVE_ADD(FDC1797_TAG":1", vixen_floppies, "525dd", NULL, floppy_image_device::default_floppy_formats)
MCFG_IEEE488_BUS_ADD(ieee488_intf) MCFG_IEEE488_BUS_ADD(ieee488_intf)
/* software lists */ /* software lists */
MCFG_SOFTWARE_LIST_ADD("disk_list","vixen") MCFG_SOFTWARE_LIST_ADD("disk_list", "vixen")
// internal ram // internal ram
MCFG_RAM_ADD(RAM_TAG) MCFG_RAM_ADD(RAM_TAG)

View File

@ -3,7 +3,14 @@
#ifndef __VIXEN__ #ifndef __VIXEN__
#define __VIXEN__ #define __VIXEN__
#include "emu.h"
#include "cpu/z80/z80.h"
#include "machine/i8155.h"
#include "machine/i8251.h"
#include "machine/ieee488.h"
#include "machine/ram.h" #include "machine/ram.h"
#include "machine/wd_fdc.h"
#include "sound/discrete.h"
#define Z8400A_TAG "5f" #define Z8400A_TAG "5f"
#define FDC1797_TAG "5n" #define FDC1797_TAG "5n"
@ -25,8 +32,8 @@ public:
m_discrete(*this, DISCRETE_TAG), m_discrete(*this, DISCRETE_TAG),
m_ieee488(*this, IEEE488_TAG), m_ieee488(*this, IEEE488_TAG),
m_ram(*this, RAM_TAG), m_ram(*this, RAM_TAG),
m_floppy0(*this, FLOPPY_0), m_floppy0(*this, FDC1797_TAG":0"),
m_floppy1(*this, FLOPPY_1), m_floppy1(*this, FDC1797_TAG":1"),
m_fdint(0), m_fdint(0),
m_vsync(0), m_vsync(0),
m_srq(1), m_srq(1),
@ -37,20 +44,20 @@ public:
{ } { }
required_device<cpu_device> m_maincpu; required_device<cpu_device> m_maincpu;
required_device<fd1797_device> m_fdc; required_device<fd1797_t> m_fdc;
required_device<i8155_device> m_io_i8155; required_device<i8155_device> m_io_i8155;
required_device<i8251_device> m_usart; required_device<i8251_device> m_usart;
required_device<discrete_sound_device> m_discrete; required_device<discrete_sound_device> m_discrete;
required_device<ieee488_device> m_ieee488; required_device<ieee488_device> m_ieee488;
required_device<ram_device> m_ram; required_device<ram_device> m_ram;
required_device<legacy_floppy_image_device> m_floppy0; required_device<floppy_connector> m_floppy0;
required_device<legacy_floppy_image_device> m_floppy1; required_device<floppy_connector> m_floppy1;
virtual void machine_start(); virtual void machine_start();
virtual void machine_reset(); virtual void machine_reset();
virtual void video_start(); virtual void video_start();
UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); UINT32 screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
void update_interrupt(); void update_interrupt();
@ -69,7 +76,7 @@ public:
DECLARE_WRITE_LINE_MEMBER( atn_w ); DECLARE_WRITE_LINE_MEMBER( atn_w );
DECLARE_WRITE_LINE_MEMBER( rxrdy_w ); DECLARE_WRITE_LINE_MEMBER( rxrdy_w );
DECLARE_WRITE_LINE_MEMBER( txrdy_w ); DECLARE_WRITE_LINE_MEMBER( txrdy_w );
DECLARE_WRITE_LINE_MEMBER( fdint_w ); void fdc_intrq_w(bool state);
DIRECT_UPDATE_MEMBER(vixen_direct_update_handler); DIRECT_UPDATE_MEMBER(vixen_direct_update_handler);
// memory state // memory state
@ -82,7 +89,7 @@ public:
int m_cmd_d0; int m_cmd_d0;
int m_cmd_d1; int m_cmd_d1;
int m_fdint; bool m_fdint;
int m_vsync; int m_vsync;
int m_srq; int m_srq;
@ -104,7 +111,6 @@ public:
const UINT8 *m_sync_rom; const UINT8 *m_sync_rom;
const UINT8 *m_char_rom; const UINT8 *m_char_rom;
DECLARE_DRIVER_INIT(vixen); DECLARE_DRIVER_INIT(vixen);
UINT32 screen_update_vixen(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
TIMER_DEVICE_CALLBACK_MEMBER(vsync_tick); TIMER_DEVICE_CALLBACK_MEMBER(vsync_tick);
}; };