smc777: updated to use the new wd fdc. fixed drive type & softlist.

master
Dirk Best 2015-06-01 14:24:43 +02:00
parent 9a4e011f0c
commit 64a8916420
2 changed files with 82 additions and 110 deletions

View File

@ -140,7 +140,7 @@ Known to be dumped, but no longer available: (If you do have any of these please
<year>198?</year>
<publisher>Sony Corp.</publisher>
<part name="flop1" interface="floppy_5_25">
<part name="flop1" interface="floppy_3_5">
<dataarea name="flop" size="121414">
<rom name="cpm22.imd" size="121414" crc="02db74fe" sha1="3f27609dd2d17e983bc337a5530e95883140e5b7" offset="0x0000" />
</dataarea>
@ -153,7 +153,7 @@ Known to be dumped, but no longer available: (If you do have any of these please
<year>198?</year>
<publisher>&lt;unknown&gt;</publisher>
<part name="flop1" interface="floppy_5_25">
<part name="flop1" interface="floppy_3_5">
<dataarea name="flop" size="305328">
<rom name="develop.1dd" size="305328" crc="13e5971a" sha1="c15d61e00ea2495ef5406a0a6f637ab2746e91cc" offset="0x0000" />
</dataarea>
@ -166,7 +166,7 @@ Known to be dumped, but no longer available: (If you do have any of these please
<year>198?</year>
<publisher>&lt;unknown&gt;</publisher>
<part name="flop1" interface="floppy_5_25">
<part name="flop1" interface="floppy_3_5">
<dataarea name="flop" size="261808">
<rom name="system 12j.1dd" size="261808" crc="c66e1a07" sha1="44e5ffb697c20f3652d6673885c9824f49a307bb" offset="0x0000" />
</dataarea>
@ -178,7 +178,7 @@ Known to be dumped, but no longer available: (If you do have any of these please
<year>198?</year>
<publisher>&lt;unknown&gt;</publisher>
<part name="flop1" interface="floppy_5_25">
<part name="flop1" interface="floppy_3_5">
<dataarea name="flop" size="305328">
<rom name="system 11.1dd" size="305328" crc="fcf54a39" sha1="d5aa09c73cef0cf639ef3adbe6e64a109f883ad6" offset="0x0000" />
</dataarea>
@ -190,7 +190,7 @@ Known to be dumped, but no longer available: (If you do have any of these please
<year>198?</year>
<publisher>&lt;unknown&gt;</publisher>
<part name="flop1" interface="floppy_5_25">
<part name="flop1" interface="floppy_3_5">
<dataarea name="flop" size="305328">
<rom name="system 10.1dd" size="305328" crc="89a0c347" sha1="2d3fdacef43d6b89861b90997715a80d784dd2d9" offset="0x0000" />
</dataarea>
@ -202,7 +202,7 @@ Known to be dumped, but no longer available: (If you do have any of these please
<year>198?</year>
<publisher>Sony</publisher>
<part name="flop1" interface="floppy_5_25">
<part name="flop1" interface="floppy_3_5">
<dataarea name="flop" size="211808">
<rom name="choplifter.1dd" size="211808" crc="bf2ea51c" sha1="4610f7456ca6bd1740b9c98fb3d2bd67aadffb5c" offset="0x0000" />
</dataarea>
@ -215,7 +215,7 @@ Known to be dumped, but no longer available: (If you do have any of these please
<publisher>Sony</publisher>
<info name="alt_title" value="ストリッツb.h." />
<part name="flop1" interface="floppy_5_25">
<part name="flop1" interface="floppy_3_5">
<dataarea name="flop" size="305328">
<rom name="strizbh.1dd" size="305328" crc="efa24635" sha1="c2308afeb555197c6d583e6cd46e6c5c5c9b4ea9" offset="0x0000" />
</dataarea>
@ -228,7 +228,7 @@ Known to be dumped, but no longer available: (If you do have any of these please
<year>198?</year>
<publisher>&lt;unknown&gt;</publisher>
<part name="flop1" interface="floppy_5_25">
<part name="flop1" interface="floppy_3_5">
<dataarea name="flop" size="305056">
<rom name="floppy magazine.1dd" size="305056" crc="44f18e58" sha1="dc4d8bda72d408e53edd4be4f1d9497d9179d35e" offset="0x0000" />
</dataarea>
@ -243,7 +243,7 @@ Known to be dumped, but no longer available: (If you do have any of these please
<year>1987</year>
<publisher>Y. Sato</publisher>
<part name="flop1" interface="floppy_5_25">
<part name="flop1" interface="floppy_3_5">
<dataarea name="flop" size="305328">
<rom name="corewars.1dd" size="305328" crc="4bbc1e35" sha1="22d1ba809d69d7e1679842f1d348cc9d6da850c5" offset="0x0000" />
</dataarea>
@ -256,7 +256,7 @@ Known to be dumped, but no longer available: (If you do have any of these please
<year>1987</year>
<publisher>M &amp; M / Alines Soft</publisher>
<part name="flop1" interface="floppy_5_25">
<part name="flop1" interface="floppy_3_5">
<dataarea name="flop" size="305328">
<rom name="dragon.1dd" size="305328" crc="dc23c4bc" sha1="45c0d8510f660108d20c82ef116e8dfa8b66b9c2" offset="0x0000" />
</dataarea>
@ -270,7 +270,7 @@ Known to be dumped, but no longer available: (If you do have any of these please
<year>1987</year>
<publisher>M &amp; M</publisher>
<part name="flop1" interface="floppy_5_25">
<part name="flop1" interface="floppy_3_5">
<dataarea name="flop" size="305328">
<rom name="dragon (freeware).1dd" size="305328" crc="168925c7" sha1="cf5b4b3f3ae0b77787613c7168eb8cb25dabbe52" offset="0x0000" />
</dataarea>
@ -282,7 +282,7 @@ Known to be dumped, but no longer available: (If you do have any of these please
<year>1987</year>
<publisher>Kawaguchiya</publisher>
<part name="flop1" interface="floppy_5_25">
<part name="flop1" interface="floppy_3_5">
<dataarea name="flop" size="305328">
<rom name="develop.1dd" size="305328" crc="b7605b47" sha1="927d173f5d08c7a0ad178af1c191cba7d5435a05" offset="0x0000" />
</dataarea>
@ -295,7 +295,7 @@ Known to be dumped, but no longer available: (If you do have any of these please
<year>198?</year>
<publisher>&lt;unknown&gt;</publisher>
<part name="flop1" interface="floppy_5_25">
<part name="flop1" interface="floppy_3_5">
<dataarea name="flop" size="305328">
<rom name="s-os sword monitor 2.0.1dd" size="305328" crc="27bc0b34" sha1="18840fab993716e7929b6e0600c446d8fba93059" offset="0x0000" />
</dataarea>
@ -308,7 +308,7 @@ Known to be dumped, but no longer available: (If you do have any of these please
<year>198?</year>
<publisher>&lt;unknown&gt;</publisher>
<part name="flop1" interface="floppy_5_25">
<part name="flop1" interface="floppy_3_5">
<dataarea name="flop" size="348848">
<rom name="s-os sword monitor 2.2.1dd" size="348848" crc="6e3215ce" sha1="1fffac3db3005e3de750c63ce1285f6b8a40310a" offset="0x0000" />
</dataarea>
@ -322,7 +322,7 @@ Known to be dumped, but no longer available: (If you do have any of these please
<year>198?</year>
<publisher>&lt;unknown&gt;</publisher>
<part name="flop1" interface="floppy_5_25">
<part name="flop1" interface="floppy_3_5">
<dataarea name="flop" size="261808">
<rom name="compilation 1.1dd" size="261808" crc="cc7827f5" sha1="8c24ec40cab047cff716d57ce44066709d238f5a" offset="0x0000" />
</dataarea>
@ -334,7 +334,7 @@ Known to be dumped, but no longer available: (If you do have any of these please
<year>198?</year>
<publisher>&lt;unknown&gt;</publisher>
<part name="flop1" interface="floppy_5_25">
<part name="flop1" interface="floppy_3_5">
<dataarea name="flop" size="261808">
<rom name="compilation 2.1dd" size="261808" crc="6be3d020" sha1="9398acca8f44c868abc3a837f91c56833962c17f" offset="0x0000" />
</dataarea>

View File

@ -24,11 +24,11 @@
#include "sound/sn76496.h"
#include "sound/beep.h"
#include "video/mc6845.h"
#include "machine/wd17xx.h"
#include "formats/basicdsk.h"
#include "machine/wd_fdc.h"
#include "imagedev/flopdrv.h"
#define MASTER_CLOCK XTAL_4_028MHz
#define mc6845_h_char_total (m_crtc_vreg[0]+1)
#define mc6845_h_display (m_crtc_vreg[1])
#define mc6845_h_sync_pos (m_crtc_vreg[2])
@ -54,15 +54,19 @@ public:
m_maincpu(*this, "maincpu"),
m_crtc(*this, "crtc"),
m_fdc(*this, "fdc"),
m_floppy0(*this, "fdc:0"),
m_floppy1(*this, "fdc:1"),
m_sn(*this, "sn1"),
m_beeper(*this, "beeper"),
m_gfxdecode(*this, "gfxdecode"),
m_palette(*this, "palette")
m_palette(*this, "palette")
{ }
required_device<cpu_device> m_maincpu;
required_device<mc6845_device> m_crtc;
required_device<mb8876_device> m_fdc;
required_device<mb8876_t> m_fdc;
required_device<floppy_connector> m_floppy0;
required_device<floppy_connector> m_floppy1;
optional_device<sn76489a_device> m_sn;
required_device<beep_device> m_beeper;
@ -99,8 +103,6 @@ public:
DECLARE_WRITE8_MEMBER(smc777_pcg_w);
DECLARE_READ8_MEMBER(smc777_fbuf_r);
DECLARE_WRITE8_MEMBER(smc777_fbuf_w);
DECLARE_READ8_MEMBER(smc777_fdc1_r);
DECLARE_WRITE8_MEMBER(smc777_fdc1_w);
DECLARE_READ8_MEMBER(key_r);
DECLARE_WRITE8_MEMBER(key_w);
DECLARE_WRITE8_MEMBER(border_col_w);
@ -124,9 +126,14 @@ public:
UINT32 screen_update_smc777(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
INTERRUPT_GEN_MEMBER(smc777_vblank_irq);
TIMER_DEVICE_CALLBACK_MEMBER(keyboard_callback);
DECLARE_WRITE_LINE_MEMBER(smc777_fdc_intrq_w);
DECLARE_WRITE_LINE_MEMBER(smc777_fdc_drq_w);
void check_floppy_inserted();
DECLARE_READ8_MEMBER(fdc_r);
DECLARE_WRITE8_MEMBER(fdc_w);
DECLARE_READ8_MEMBER(fdc_request_r);
DECLARE_WRITE8_MEMBER(floppy_select_w);
DECLARE_WRITE_LINE_MEMBER(fdc_intrq_w);
DECLARE_WRITE_LINE_MEMBER(fdc_drq_w);
required_device<gfxdecode_device> m_gfxdecode;
required_device<palette_device> m_palette;
};
@ -379,79 +386,53 @@ WRITE8_MEMBER(smc777_state::smc777_fbuf_w)
m_gvram[vram_index] = data;
}
void smc777_state::check_floppy_inserted()
READ8_MEMBER( smc777_state::fdc_r )
{
int f_num;
floppy_image_legacy *floppy;
/* check if a floppy is there, automatically disconnect the ready line if so (HW doesn't control the ready line) */
/* FIXME: floppy drive 1 doesn't work? */
for(f_num=0;f_num<2;f_num++)
{
floppy = floppy_get_device(machine(), f_num)->flopimg_get_image();
floppy_get_device(machine(), f_num)->floppy_mon_w((floppy != NULL) ? 0 : 1);
floppy_get_device(machine(), f_num)->floppy_drive_set_ready_state((floppy != NULL) ? 1 : 0,0);
}
return m_fdc->read(space, offset) ^ 0xff;
}
READ8_MEMBER(smc777_state::smc777_fdc1_r)
WRITE8_MEMBER( smc777_state::fdc_w )
{
check_floppy_inserted();
switch(offset)
{
case 0x00:
return m_fdc->status_r(space, offset) ^ 0xff;
case 0x01:
return m_fdc->track_r(space, offset) ^ 0xff;
case 0x02:
return m_fdc->sector_r(space, offset) ^ 0xff;
case 0x03:
return m_fdc->data_r(space, offset) ^ 0xff;
case 0x04: //irq / drq status
//popmessage("%02x %02x\n",m_fdc_irq_flag,m_fdc_drq_flag);
return (m_fdc_irq_flag ? 0x80 : 0x00) | (m_fdc_drq_flag ? 0x00 : 0x40);
}
return 0x00;
m_fdc->write(space, offset, data ^ 0xff);
}
WRITE8_MEMBER(smc777_state::smc777_fdc1_w)
READ8_MEMBER( smc777_state::fdc_request_r )
{
check_floppy_inserted();
UINT8 data = 0;
switch(offset)
{
case 0x00:
m_fdc->command_w(space, offset,data ^ 0xff);
break;
case 0x01:
m_fdc->track_w(space, offset,data ^ 0xff);
break;
case 0x02:
m_fdc->sector_w(space, offset,data ^ 0xff);
break;
case 0x03:
m_fdc->data_w(space, offset,data ^ 0xff);
break;
case 0x04:
// ---- xxxx select floppy drive (yes, 15 of them, A to P)
m_fdc->set_drive(data & 0x01);
// m_fdc->set_side((data & 0x10)>>4);
if(data & 0xf0)
printf("floppy access %02x\n",data);
break;
}
data |= !m_fdc_drq_flag << 6;
data |= m_fdc_irq_flag << 7;
return data;
}
WRITE_LINE_MEMBER(smc777_state::smc777_fdc_intrq_w)
WRITE8_MEMBER( smc777_state::floppy_select_w )
{
floppy_image_device *floppy = NULL;
// ---- xxxx select floppy drive (yes, 15 of them, A to P)
switch (data & 0x01)
{
case 0: floppy = m_floppy0->get_device(); break;
case 1: floppy = m_floppy1->get_device(); break;
}
m_fdc->set_floppy(floppy);
// no idea where the motor on signal is
if (floppy)
floppy->mon_w(0);
if(data & 0xf0)
printf("floppy access %02x\n", data);
}
WRITE_LINE_MEMBER( smc777_state::fdc_intrq_w )
{
m_fdc_irq_flag = state;
}
WRITE_LINE_MEMBER(smc777_state::smc777_fdc_drq_w)
WRITE_LINE_MEMBER( smc777_state::fdc_drq_w )
{
m_fdc_drq_flag = state;
}
@ -652,7 +633,8 @@ READ8_MEMBER(smc777_state::smc777_io_r)
else if(low_offs == 0x26) { logerror("RS-232c RX %04x\n",space.device().safe_pc()); return 0xff; }
else if(low_offs >= 0x28 && low_offs <= 0x2c) { logerror("FDC 2 read %02x\n",low_offs & 7); return 0xff; }
else if(low_offs >= 0x2d && low_offs <= 0x2f) { logerror("RS-232c no. 2 read %02x\n",low_offs & 3); return 0xff; }
else if(low_offs >= 0x30 && low_offs <= 0x34) { return smc777_fdc1_r(space,low_offs & 7); }
else if(low_offs >= 0x30 && low_offs <= 0x33) { return fdc_r(space, low_offs & 3); }
else if(low_offs >= 0x34 && low_offs <= 0x34) { return fdc_request_r(space, 0); }
else if(low_offs >= 0x35 && low_offs <= 0x37) { logerror("RS-232c no. 3 read %02x\n",low_offs & 3); return 0xff; }
else if(low_offs >= 0x38 && low_offs <= 0x3b) { logerror("Cache disk unit read %02x\n",low_offs & 7); return 0xff; }
else if(low_offs >= 0x3c && low_offs <= 0x3d) { logerror("RGB superimposer read %02x\n",low_offs & 1); return 0xff; }
@ -693,7 +675,8 @@ WRITE8_MEMBER(smc777_state::smc777_io_w)
else if(low_offs == 0x26) { logerror("RS-232c TX %02x\n",data); }
else if(low_offs >= 0x28 && low_offs <= 0x2c) { logerror("FDC 2 write %02x %02x\n",low_offs & 7,data); }
else if(low_offs >= 0x2d && low_offs <= 0x2f) { logerror("RS-232c no. 2 write %02x %02x\n",low_offs & 3,data); }
else if(low_offs >= 0x30 && low_offs <= 0x34) { smc777_fdc1_w(space,low_offs & 7,data); }
else if(low_offs >= 0x30 && low_offs <= 0x33) { fdc_w(space, low_offs & 3, data); }
else if(low_offs >= 0x34 && low_offs <= 0x34) { floppy_select_w(space, 0, data); }
else if(low_offs >= 0x35 && low_offs <= 0x37) { logerror("RS-232c no. 3 write %02x %02x\n",low_offs & 3,data); }
else if(low_offs >= 0x38 && low_offs <= 0x3b) { logerror("Cache disk unit write %02x %02x\n",low_offs & 7,data); }
else if(low_offs >= 0x3c && low_offs <= 0x3d) { logerror("RGB superimposer write %02x %02x\n",low_offs & 1,data); }
@ -1021,21 +1004,6 @@ PALETTE_INIT_MEMBER(smc777_state, smc777)
}
}
static LEGACY_FLOPPY_OPTIONS_START( smc777 )
LEGACY_FLOPPY_OPTION( img, "img", "SMC70 disk image", basicdsk_identify_default, basicdsk_construct_default, NULL,
HEADS([1])
TRACKS([70])
SECTORS([16])
SECTOR_LENGTH([256])
FIRST_SECTOR_ID([1]))
LEGACY_FLOPPY_OPTIONS_END
static const floppy_interface smc777_floppy_interface =
{
FLOPPY_STANDARD_5_25_SSDD,
LEGACY_FLOPPY_OPTIONS_NAME(smc777),
"floppy_5_25"
};
INTERRUPT_GEN_MEMBER(smc777_state::smc777_vblank_irq)
{
@ -1044,7 +1012,10 @@ INTERRUPT_GEN_MEMBER(smc777_state::smc777_vblank_irq)
}
#define MASTER_CLOCK XTAL_4_028MHz
static SLOT_INTERFACE_START( smc777_floppies )
SLOT_INTERFACE("ssdd", FLOPPY_35_SSDD)
SLOT_INTERFACE_END
static MACHINE_CONFIG_START( smc777, smc777_state )
/* basic machine hardware */
@ -1071,15 +1042,16 @@ static MACHINE_CONFIG_START( smc777, smc777_state )
MCFG_MC6845_SHOW_BORDER_AREA(true)
MCFG_MC6845_CHAR_WIDTH(8)
/* devices */
MCFG_DEVICE_ADD("fdc", MB8876, 0)
MCFG_WD17XX_DEFAULT_DRIVE2_TAGS
MCFG_WD17XX_INTRQ_CALLBACK(WRITELINE(smc777_state, smc777_fdc_intrq_w))
MCFG_WD17XX_DRQ_CALLBACK(WRITELINE(smc777_state, smc777_fdc_drq_w))
// floppy controller
MCFG_MB8876x_ADD("fdc", XTAL_1MHz)
MCFG_WD_FDC_INTRQ_CALLBACK(WRITELINE(smc777_state, fdc_intrq_w))
MCFG_WD_FDC_DRQ_CALLBACK(WRITELINE(smc777_state, fdc_drq_w))
MCFG_LEGACY_FLOPPY_2_DRIVES_ADD(smc777_floppy_interface)
// does it really support 16 of them?
MCFG_FLOPPY_DRIVE_ADD("fdc:0", smc777_floppies, "ssdd", floppy_image_device::default_floppy_formats)
MCFG_FLOPPY_DRIVE_ADD("fdc:1", smc777_floppies, "ssdd", floppy_image_device::default_floppy_formats)
MCFG_SOFTWARE_LIST_ADD("flop_list","smc777")
MCFG_SOFTWARE_LIST_ADD("flop_list", "smc777")
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")