mirror of
https://github.com/holub/mame
synced 2025-04-16 13:34:55 +03:00
smc777: updated to use the new wd fdc. fixed drive type & softlist.
This commit is contained in:
parent
9a4e011f0c
commit
64a8916420
@ -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><unknown></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><unknown></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><unknown></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><unknown></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><unknown></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 & 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 & 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><unknown></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><unknown></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><unknown></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><unknown></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>
|
||||
|
@ -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")
|
||||
|
Loading…
Reference in New Issue
Block a user