Merge remote-tracking branch 'mainline/master'

This commit is contained in:
therealmogminer@gmail.com 2016-07-23 00:38:56 +02:00
commit 197d01d385
29 changed files with 1893 additions and 573 deletions

View File

@ -4,13 +4,144 @@
Missing:
- econet
- axr2 (APP Laboratories)
-->
<softwarelist name="atom_rom" description="Acorn Atom expansion ROMs">
<softwarelist name="atom_cart" description="Acorn Atom Utility ROMs">
<software name="josbox">
<software name="ace20">
<description>ACE-2.0</description>
<year>198?</year>
<publisher>&lt;homebrew&gt;</publisher>
<info name="author" value="Gerard van den Brandhof" />
<part name="cart" interface="atom_cart">
<dataarea name="rom" size="4096">
<rom name="ace20.rom" size="4096" crc="55fa7172" sha1="93b080d3e00b8837f72b12852dabe3194249b08a" offset="0"/>
</dataarea>
</part>
</software>
<software name="ace22">
<description>ACE-2.2</description>
<year>198?</year>
<publisher>&lt;homebrew&gt;</publisher>
<info name="author" value="Gerard van den Brandhof" />
<part name="cart" interface="atom_cart">
<dataarea name="rom" size="4096">
<rom name="ace22.rom" size="4096" crc="f435ffd4" sha1="0ded6633b455f11d1df119224ab19b4f01323f87" offset="0"/>
</dataarea>
</part>
</software>
<software name="ace30">
<description>ACE-3.0</description>
<year>198?</year>
<publisher>&lt;homebrew&gt;</publisher>
<info name="author" value="Gerard van den Brandhof" />
<part name="cart" interface="atom_cart">
<dataarea name="rom" size="4096">
<rom name="ace30.rom" size="4096" crc="c054fd62" sha1="a49bb8ef3db877e5bf9ae214dcbc5fa7eb06aead" offset="0"/>
</dataarea>
</part>
</software>
<software name="aekmon">
<description>AEK Monitor ROM</description>
<year>1982</year>
<publisher>&lt;homebrew&gt;</publisher>
<info name="usage" value="Type LINK #A7C7" />
<info name="author" value="Alan Knowles" />
<part name="cart" interface="atom_cart">
<dataarea name="rom" size="4096">
<rom name="aek_monitor.rom" size="4096" crc="097d4e13" sha1="0dcdb884d5f38ff7c0c32810a397c18469edc348" offset="0"/>
</dataarea>
</part>
</software>
<software name="aekscrn">
<description>AEK Screen ROM</description>
<year>1983</year>
<publisher>&lt;homebrew&gt;</publisher>
<info name="usage" value="Type LINK #AFF0" />
<info name="author" value="Alan Knowles" />
<part name="cart" interface="atom_cart">
<dataarea name="rom" size="4096">
<rom name="aek_screen.rom" size="4096" crc="1be4706a" sha1="d43104f2f28f5a79a54aca7c41dbc8047d6d2120" offset="0"/>
</dataarea>
</part>
</software>
<software name="afutilik">
<description>A&amp;F UtiliKit</description>
<year>1982</year>
<publisher>A&amp;F Software</publisher>
<part name="cart" interface="atom_cart">
<dataarea name="rom" size="4096">
<rom name="utilikit.rom" size="4096" crc="013b8f93" sha1="b4341f116a6d1e0cbcd39d64e0b5d14a90dc0356" offset="0" />
</dataarea>
</part>
</software>
<software name="atomcalc">
<description>Atom Calc</description>
<year>1982</year>
<publisher>Acornsoft</publisher>
<part name="cart" interface="atom_cart">
<dataarea name="rom" size="4096">
<rom name="atomcalc.rom" size="4096" crc="3a7409cd" sha1="102e43a446e9ad5459916d432551044f419da0c3" offset="0" />
</dataarea>
</part>
</software>
<software name="atomdemo">
<description>Atom Demo</description>
<year>1980</year>
<publisher>Acornsoft</publisher>
<info name="usage" value="Type RUN" />
<part name="cart" interface="atom_cart">
<dataarea name="rom" size="4096">
<rom name="atomdemo.rom" size="4096" crc="cdf4810f" sha1="36054b1a85341b2131d7c43231a6349a5c984116" offset="0"/>
</dataarea>
</part>
</software>
<software name="atmwin10">
<description>Atomic Windows v1.0</description>
<year>19??</year>
<publisher>&lt;homebrew&gt;</publisher>
<info name="author" value="Kees van Oss" />
<part name="cart" interface="atom_cart">
<dataarea name="rom" size="4096">
<rom name="atomicw.rom" size="4096" crc="a3fd737d" sha1="d418d9322c69c49106ed2c268ad0864c0f2c4c1b" offset="0" />
</dataarea>
</part>
</software>
<software name="atmwin11">
<description>Atomic Windows v1.1</description>
<year>19??</year>
<publisher>&lt;homebrew&gt;</publisher>
<info name="author" value="Kees van Oss" />
<part name="cart" interface="atom_cart">
<dataarea name="rom" size="4096">
<rom name="atomicw11.rom" size="4096" crc="c3ad78cc" sha1="5177929bd26bd455f7bfade3a245e8f5221c751e" offset="0" />
</dataarea>
</part>
</software>
<software name="atmwin12">
<description>Atomic Windows 1.2 BD</description>
<year>19??</year>
<publisher>&lt;homebrew&gt;</publisher>
<info name="author" value="Kees van Oss" />
<part name="cart" interface="atom_cart">
<dataarea name="rom" size="4096">
<rom name="atomicw12.rom" size="4096" crc="0801b4f1" sha1="40c2f0418bd9b38b17a913d23e5ed574f991cdeb" offset="0"/>
</dataarea>
</part>
</software>
<software name="axr1">
<description>AXR1</description>
<year>198?</year>
<publisher>ECD Computer Workshop</publisher>
@ -21,10 +152,117 @@
</part>
</software>
<software name="combox">
<description>COM-Box</description>
<year>198?</year>
<publisher>&lt;homebrew&gt;</publisher>
<info name="author" value="Bram Poot" />
<part name="cart" interface="atom_cart">
<dataarea name="rom" size="4096">
<rom name="combox.rom" size="4096" crc="9c8210ab" sha1="ea293f49a98721cdbdf985d6f2fe636290ef0e75" offset="0" />
</dataarea>
</part>
</software>
<software name="disatom">
<description>DisAtom Super ROM</description>
<year>1982</year>
<publisher>Procyon</publisher>
<part name="cart" interface="atom_cart">
<dataarea name="rom" size="4096">
<rom name="disatom.rom" size="4096" crc="f0a28f40" sha1="c48f3c43dea6a71cdfba7d8beac617af5fabbbab" offset="0"/>
</dataarea>
</part>
</software>
<software name="diskrom">
<description>Disk ROM</description>
<year>198?</year>
<publisher>&lt;homebrew&gt;</publisher>
<info name="author" value="Frans le Blanc" />
<part name="cart" interface="atom_cart">
<dataarea name="rom" size="4096">
<rom name="diskrom.rom" size="4096" crc="797ae59d" sha1="93dd8731e4daec31aeb150b279e2da1493a0dbd1" offset="0"/>
</dataarea>
</part>
</software>
<software name="econet">
<description>Econet</description>
<year>198?</year>
<publisher>Acorn</publisher>
<part name="cart" interface="atom_cart">
<dataarea name="rom" size="4096">
<rom name="econet.rom" size="4096" crc="f4e0fc4a" sha1="a3aaaa0f41557c94f668cf1aa019659116a38cfd" offset="0"/>
</dataarea>
</part>
</software>
<software name="gags21" cloneof="gags24">
<description>GAGS v2.1</description>
<year>198?</year>
<publisher>&lt;homebrew&gt;</publisher>
<info name="author" value="Gerrit Hillebrand" />
<part name="cart" interface="atom_cart">
<dataarea name="rom" size="4096">
<rom name="gags21.rom" size="4096" crc="eb4a72c2" sha1="059261bbee866c8f2ea19e04ebe84dfc55945bff" offset="0" />
</dataarea>
</part>
</software>
<software name="gags22" cloneof="gags24">
<description>GAGS v2.2</description>
<year>198?</year>
<publisher>&lt;homebrew&gt;</publisher>
<info name="author" value="Gerrit Hillebrand" />
<part name="cart" interface="atom_cart">
<dataarea name="rom" size="4096">
<rom name="gags22.rom" size="4096" crc="cfa943f5" sha1="a750735839b78837e27bb0256890c1759a9278c8" offset="0" />
</dataarea>
</part>
</software>
<software name="gags23" cloneof="gags24">
<description>GAGS v2.3</description>
<year>198?</year>
<publisher>&lt;homebrew&gt;</publisher>
<info name="author" value="Gerrit Hillebrand" />
<part name="cart" interface="atom_cart">
<dataarea name="rom" size="4096">
<rom name="gags23.rom" size="4096" crc="35e1d713" sha1="94cc2887ad9fea1849d1d53c64d0668e77696ef4" offset="0" />
</dataarea>
</part>
</software>
<software name="gags24">
<description>GAGS v2.4</description>
<year>198?</year>
<publisher>&lt;homebrew&gt;</publisher>
<info name="author" value="Gerrit Hillebrand" />
<part name="cart" interface="atom_cart">
<dataarea name="rom" size="4096">
<rom name="gags24.rom" size="4096" crc="578dc6c7" sha1="de8fb4f6a67b18e5b73afb11738c348b1517f6e6" offset="0"/>
</dataarea>
</part>
</software>
<software name="josbox">
<description>JosBox</description>
<year>198?</year>
<publisher>&lt;homebrew&gt;</publisher>
<info name="author" value="Jos Horsmeijer" />
<part name="cart" interface="atom_cart">
<dataarea name="rom" size="4096">
<rom name="josbox.rom" size="4096" crc="ee8df1cd" sha1="5654332f668b52c0021dd277ddfc2400d0140182" offset="0"/>
</dataarea>
</part>
</software>
<software name="pcharme">
<description>P-Charme Interpreter</description>
<description>P-Charme</description>
<year>1984</year>
<publisher>Frans van Hoesel</publisher>
<publisher>&lt;homebrew&gt;</publisher>
<info name="author" value="Frans van Hoesel" />
<part name="cart" interface="atom_cart">
<dataarea name="rom" size="4096">
<rom name="pcharme.rom" size="4096" crc="9e8bd79f" sha1="66c57622448b448aa6080911dccb03456d0e3b81" offset="0" />
@ -32,13 +270,149 @@
</part>
</software>
<software name="gags">
<description>GAGS v2.3</description>
<year>198?</year>
<publisher>G. Hillebrand</publisher>
<software name="pcharmea" cloneof="pcharme">
<description>P-Charme (Alt)</description>
<year>1984</year>
<publisher>&lt;homebrew&gt;</publisher>
<info name="author" value="Frans van Hoesel" />
<part name="cart" interface="atom_cart">
<dataarea name="rom" size="4096">
<rom name="gags.rom" size="4096" crc="35e1d713" sha1="94cc2887ad9fea1849d1d53c64d0668e77696ef4" offset="0" />
<rom name="pcharme_alt.rom" size="4096" crc="3824cce5" sha1="fd50428e18f039b642c967255c435e14df26c949" offset="0"/>
</dataarea>
</part>
</software>
<software name="mousebox">
<description>Mouse-Dos Box v1.01</description>
<year>19??</year>
<publisher>&lt;homebrew&gt;</publisher>
<info name="author" value="Wouter Ras" />
<part name="cart" interface="atom_cart">
<dataarea name="rom" size="4096">
<rom name="mousebox.rom" size="4096" crc="0dff30e4" sha1="b7c0b9c23fcc5cfdc06cb2d2a9e7c2658e248ef7" offset="0" />
</dataarea>
</part>
</software>
<software name="toolbox">
<description>Programmer's Toolbox</description>
<year>1981</year>
<publisher>Program Power</publisher>
<info name="usage" value="Type LINK #AF00" />
<part name="cart" interface="atom_cart">
<dataarea name="rom" size="4096">
<rom name="toolbox.rom" size="4096" crc="3d8d5c18" sha1="b80736c7a63152d89e66b9848e197b54f698aedc" offset="0" />
</dataarea>
</part>
</software>
<software name="toolkit" cloneof="toolbox">
<description>Programmer's Toolkit</description>
<year>1981</year>
<publisher>Program Power</publisher>
<info name="usage" value="Type LINK #AF00" />
<part name="cart" interface="atom_cart">
<dataarea name="rom" size="4096">
<rom name="toolkit.rom" size="4096" crc="9661561c" sha1="faa0394232caf7626499c9bc57c6af36017fe852" offset="0" />
</dataarea>
</part>
</software>
<software name="psdebug">
<description>Psion Debug</description>
<year>198?</year>
<publisher>Psion</publisher>
<info name="usage" value="Type DEBUG" />
<part name="cart" interface="atom_cart">
<dataarea name="rom" size="4096">
<rom name="psion_debug.rom" size="4096" crc="1a317711" sha1="a3dd1a5f25470006e0c76694796cf01b0f01ec64" offset="0"/>
</dataarea>
</part>
</software>
<software name="psedit">
<description>Psion Edit</description>
<year>198?</year>
<publisher>Psion</publisher>
<info name="usage" value="Type EDIT" />
<part name="cart" interface="atom_cart">
<dataarea name="rom" size="4096">
<rom name="psion_edit" size="4096" crc="4a80d67a" sha1="9c0bc1d41c88d88b601627de92026903d3d6a154" offset="0"/>
</dataarea>
</part>
</software>
<software name="rossutil">
<description>Ross Utility</description>
<year>198?</year>
<publisher>Ross Software</publisher>
<info name="usage" value="Type LINK 44992" />
<part name="cart" interface="atom_cart">
<dataarea name="rom" size="4096">
<rom name="ross_utility.rom" size="4096" crc="4e284c5e" sha1="9d6dd5d4bce4ea2c0d65131b56d666fecf590492" offset="0"/>
</dataarea>
</part>
</software>
<software name="rxbox">
<description>RX Box</description>
<year>198?</year>
<publisher>BiboSoft</publisher>
<info name="usage" value="Type RXBOX" />
<part name="cart" interface="atom_cart">
<dataarea name="rom" size="4096">
<rom name="rxbox.rom" size="4096" crc="109d879b" sha1="6a52769860933798492490a31fc82fd3865e3386" offset="0"/>
</dataarea>
</part>
</software>
<software name="salfaa">
<description>Salfaa 2.6</description>
<year>198?</year>
<publisher>&lt;homebrew&gt;</publisher>
<info name="usage" value="Type SALFAA" />
<info name="author" value="B.Poot/J.Jobse" />
<part name="cart" interface="atom_cart">
<dataarea name="rom" size="4096">
<rom name="salfaa26.rom" size="4096" crc="48bfffaa" sha1="e267ef008eeb15ee598d5d81ae7d218b50f2ec20" offset="0" />
</dataarea>
</part>
</software>
<software name="salfaac20" cloneof="salfaa">
<description>Salfaa C2.0</description>
<year>198?</year>
<publisher>&lt;homebrew&gt;</publisher>
<info name="usage" value="Type SALFAA" />
<info name="author" value="B.Poot/J.Jobse" />
<part name="cart" interface="atom_cart">
<dataarea name="rom" size="4096">
<rom name="salfaac20.rom" size="4096" crc="45876648" sha1="b0419d0bc57e07c154230ce5ed0b441dc5f0d113" offset="0" />
</dataarea>
</part>
</software>
<software name="sdrom3">
<description>SDDOS v3.2</description>
<year>2011</year>
<publisher>&lt;homebrew&gt;</publisher>
<info name="usage" value="Type SDDOS" />
<info name="author" value="Kees van Oss" />
<part name="cart" interface="atom_cart">
<dataarea name="rom" size="4096">
<rom name="sdrom3.rom" size="4096" crc="1a9c9dd1" sha1="1a722878d00433f541ae26b95db325dd80de579a" offset="0" />
</dataarea>
</part>
</software>
<software name="superbas">
<description>SuperBasic</description>
<year>1983</year>
<publisher>Program Power</publisher>
<info name="usage" value="Type LINK #AF00" />
<part name="cart" interface="atom_cart">
<dataarea name="rom" size="4096">
<rom name="superbasic.rom" size="4096" crc="d5392f92" sha1="2815eef95f4471a3674745abbb5547b6cf16d4ad" offset="0"/>
</dataarea>
</part>
</software>
@ -54,69 +428,52 @@
</part>
</software>
<software name="afuk">
<description>A&amp;F Utility Kit</description>
<year>1982</year>
<publisher>A&amp;F Software</publisher>
<software name="willow">
<description>Willow Utility</description>
<year>1981</year>
<publisher>Willow Software</publisher>
<info name="usage" value="Type LINK #A000" />
<part name="cart" interface="atom_cart">
<dataarea name="rom" size="4096">
<rom name="utilikit.rom" size="4096" crc="013b8f93" sha1="b4341f116a6d1e0cbcd39d64e0b5d14a90dc0356" offset="0" />
<rom name="willow_utility.rom" size="4096" crc="5f058699" sha1="4bfdd06f6298218d359f494c029d7099c50c1a8f" offset="0"/>
</dataarea>
</part>
</software>
<software name="combox">
<description>COM-Box</description>
<software name="wordpack">
<description>Word Pack</description>
<year>198?</year>
<publisher>B. Poot</publisher>
<publisher>Acornsoft</publisher>
<info name="usage" value="Type EDIT" />
<part name="cart" interface="atom_cart">
<dataarea name="rom" size="4096">
<rom name="combox.rom" size="4096" crc="9c8210ab" sha1="ea293f49a98721cdbdf985d6f2fe636290ef0e75" offset="0" />
<rom name="wordpack.rom" size="4096" crc="a2c49c46" sha1="892aaae1ba349410e1ca20adbdddad1d999953a4" offset="0"/>
</dataarea>
</part>
</software>
<software name="salfaa">
<description>SALFAA v2.6</description>
<software name="wordpack64" cloneof="wordpack">
<description>Word Pack - ED64</description>
<year>198?</year>
<publisher>B. Poot &amp; J. Jobse</publisher>
<publisher>Acornsoft</publisher>
<info name="usage" value="Type ED64" />
<part name="cart" interface="atom_cart">
<dataarea name="rom" size="4096">
<rom name="salfaa.rom" size="4096" crc="ef857b25" sha1="b3812427233060972fa01faf3ce381a21576a5ed" offset="0" />
<rom name="wordpack64.rom" size="4096" crc="54e828dd" sha1="65b373800c5d816192e72cc9a817215840f83ed4" offset="0"/>
</dataarea>
</part>
</software>
<software name="mousebox">
<description>Mouse-Dos Box v1.01</description>
<software name="wordpack80" cloneof="wordpack">
<description>Word Pack - ED80</description>
<year>198?</year>
<publisher>&lt;unknown&gt;</publisher>
<publisher>Acornsoft</publisher>
<info name="usage" value="Requires 80 column VDU board" />
<part name="cart" interface="atom_cart">
<dataarea name="rom" size="4096">
<rom name="mousebox.rom" size="4096" crc="0dff30e4" sha1="b7c0b9c23fcc5cfdc06cb2d2a9e7c2658e248ef7" offset="0" />
<rom name="wordpack80.rom" size="4096" crc="0716607a" sha1="d85814c5aedadd4ca4fa8312483ce62eb4de9d5e" offset="0"/>
</dataarea>
</part>
</software>
<software name="windows">
<description>Atomic Windows v1.0</description>
<year>198?</year>
<publisher>Kees van Oss</publisher>
<part name="cart" interface="atom_cart">
<dataarea name="rom" size="4096">
<rom name="atomicw.rom" size="4096" crc="a3fd737d" sha1="d418d9322c69c49106ed2c268ad0864c0f2c4c1b" offset="0" />
</dataarea>
</part>
</software>
<software name="toolkit">
<description>Programmer's Toolkit</description>
<year>198?</year>
<publisher>&lt;unknown&gt;</publisher>
<part name="cart" interface="atom_cart">
<dataarea name="rom" size="4096">
<rom name="toolkit.rom" size="4096" crc="9661561c" sha1="faa0394232caf7626499c9bc57c6af36017fe852" offset="0" />
</dataarea>
</part>
</software>
</softwarelist>

View File

@ -153,7 +153,7 @@ Demonstration Tape (included with the VZ300)
<software name="hamsam">
<description>Hamburger Sam</description>
<year>????</year>
<publisher></publisher>
<publisher>&lt;unknown&gt;</publisher>
<part name="cass1" interface="vtech1_cass">
<dataarea name="cass" size="5109472">
<rom name="hamsam.wav" size="5109472" crc="7aed86a7" sha1="b5061edb1401cea4aee97d8cd92c582c9c14e66b" offset="0" />
@ -201,7 +201,7 @@ Demonstration Tape (included with the VZ300)
<software name="missile">
<description>Missile</description>
<year>????</year>
<publisher></publisher>
<publisher>&lt;unknown&gt;</publisher>
<part name="cass1" interface="vtech1_cass">
<dataarea name="cass" size="5109776">
<rom name="missile.wav" size="5109776" crc="55a1fda4" sha1="1de495534447cee16d3db22b043d53b6d15f05fe" offset="0" />

View File

@ -1662,6 +1662,8 @@ if (BUSES["RS232"]~=null) then
MAME_DIR .. "src/devices/bus/rs232/pty.h",
MAME_DIR .. "src/devices/bus/rs232/ser_mouse.cpp",
MAME_DIR .. "src/devices/bus/rs232/ser_mouse.h",
MAME_DIR .. "src/devices/bus/rs232/sun_kbd.cpp",
MAME_DIR .. "src/devices/bus/rs232/sun_kbd.h",
MAME_DIR .. "src/devices/bus/rs232/terminal.cpp",
MAME_DIR .. "src/devices/bus/rs232/terminal.h",
MAME_DIR .. "src/devices/bus/rs232/xvd701.cpp",
@ -2580,8 +2582,8 @@ end
if (BUSES["SUNKBD"]~=null) then
files {
MAME_DIR .. "src/devices/bus/sunkbd/sparckbd.cpp",
MAME_DIR .. "src/devices/bus/sunkbd/sparckbd.h",
MAME_DIR .. "src/devices/bus/sunkbd/hlekbd.cpp",
MAME_DIR .. "src/devices/bus/sunkbd/hlekbd.h",
MAME_DIR .. "src/devices/bus/sunkbd/sunkbd.cpp",
MAME_DIR .. "src/devices/bus/sunkbd/sunkbd.h",
}

View File

@ -126,6 +126,18 @@ const rom_entry *e01_device::device_rom_region() const
}
//-------------------------------------------------
// MC146818_INTERFACE( rtc_intf )
//-------------------------------------------------
WRITE_LINE_MEMBER(e01_device::rtc_irq_w)
{
m_rtc_irq = state;
update_interrupts();
}
//-------------------------------------------------
// mc6854_interface adlc_intf
//-------------------------------------------------
@ -142,6 +154,13 @@ WRITE_LINE_MEMBER( e01_device::econet_data_w )
m_econet->data_w(this, state);
}
WRITE_LINE_MEMBER(e01_device::via_irq_w)
{
m_via_irq = state;
update_interrupts();
}
WRITE_LINE_MEMBER( e01_device::clk_en_w )
{
m_clk_en = state;
@ -225,12 +244,12 @@ static MACHINE_CONFIG_FRAGMENT( e01 )
MCFG_CPU_PROGRAM_MAP(e01_mem)
MCFG_MC146818_ADD(HD146818_TAG, XTAL_32_768kHz)
MCFG_MC146818_IRQ_HANDLER(INPUTLINE(R65C102_TAG, M6502_IRQ_LINE))
MCFG_MC146818_IRQ_HANDLER(WRITELINE(e01_device, rtc_irq_w))
// devices
MCFG_DEVICE_ADD(R6522_TAG, VIA6522, XTAL_8MHz/4)
MCFG_DEVICE_ADD(R6522_TAG, VIA6522, XTAL_8MHz / 4)
MCFG_VIA6522_WRITEPA_HANDLER(DEVWRITE8("cent_data_out", output_latch_device, write))
MCFG_VIA6522_IRQ_HANDLER(INPUTLINE(R65C102_TAG, M6502_IRQ_LINE))
MCFG_VIA6522_IRQ_HANDLER(WRITELINE(e01_device, via_irq_w))
MCFG_DEVICE_ADD(MC6854_TAG, MC6854, 0)
MCFG_MC6854_OUT_IRQ_CB(WRITELINE(e01_device, adlc_irq_w))
@ -317,7 +336,7 @@ ioport_constructor e01_device::device_input_ports() const
inline void e01_device::update_interrupts()
{
int irq = (m_hdc_ie & m_hdc_irq) ? ASSERT_LINE : CLEAR_LINE;
int irq = (m_via_irq || (m_hdc_ie & m_hdc_irq) || m_rtc_irq) ? ASSERT_LINE : CLEAR_LINE;
int nmi = (m_fdc_irq || m_fdc_drq || (m_adlc_ie & m_adlc_irq)) ? ASSERT_LINE : CLEAR_LINE;
m_maincpu->set_input_line(M6502_IRQ_LINE, irq);
@ -376,6 +395,8 @@ e01_device::e01_device(const machine_config &mconfig, const char *tag, device_t
m_centronics(*this, CENTRONICS_TAG),
m_adlc_ie(0),
m_hdc_ie(0),
m_rtc_irq(CLEAR_LINE),
m_via_irq(CLEAR_LINE),
m_hdc_irq(CLEAR_LINE),
m_fdc_irq(CLEAR_LINE),
m_fdc_drq(CLEAR_LINE),
@ -404,6 +425,8 @@ e01_device::e01_device(const machine_config &mconfig, device_type type, const ch
m_centronics(*this, CENTRONICS_TAG),
m_adlc_ie(0),
m_hdc_ie(0),
m_rtc_irq(CLEAR_LINE),
m_via_irq(CLEAR_LINE),
m_hdc_irq(CLEAR_LINE),
m_fdc_irq(CLEAR_LINE),
m_fdc_drq(CLEAR_LINE),
@ -425,6 +448,8 @@ void e01_device::device_start()
// register for state saving
save_item(NAME(m_adlc_ie));
save_item(NAME(m_hdc_ie));
save_item(NAME(m_rtc_irq));
save_item(NAME(m_via_irq));
save_item(NAME(m_hdc_irq));
save_item(NAME(m_fdc_drq));
save_item(NAME(m_adlc_irq));

View File

@ -56,8 +56,10 @@ public:
DECLARE_WRITE8_MEMBER( rtc_address_w );
DECLARE_READ8_MEMBER( rtc_data_r );
DECLARE_WRITE8_MEMBER( rtc_data_w );
DECLARE_WRITE_LINE_MEMBER( rtc_irq_w );
DECLARE_WRITE_LINE_MEMBER( adlc_irq_w );
DECLARE_WRITE_LINE_MEMBER( econet_data_w );
DECLARE_WRITE_LINE_MEMBER( via_irq_w );
DECLARE_WRITE_LINE_MEMBER( clk_en_w );
DECLARE_WRITE_LINE_MEMBER( fdc_irq_w );
DECLARE_WRITE_LINE_MEMBER( fdc_drq_w );
@ -100,6 +102,8 @@ protected:
// interrupt state
int m_adlc_ie;
int m_hdc_ie;
int m_rtc_irq;
int m_via_irq;
int m_hdc_irq;
int m_fdc_irq;
bool m_fdc_drq;

View File

@ -112,8 +112,9 @@ device_rs232_port_interface::~device_rs232_port_interface()
#include "loopback.h"
#include "null_modem.h"
#include "printer.h"
#include "terminal.h"
#include "pty.h"
#include "sun_kbd.h"
#include "terminal.h"
SLOT_INTERFACE_START( default_rs232_devices )
SLOT_INTERFACE("keyboard", SERIAL_KEYBOARD)
@ -122,4 +123,5 @@ SLOT_INTERFACE_START( default_rs232_devices )
SLOT_INTERFACE("printer", SERIAL_PRINTER)
SLOT_INTERFACE("terminal", SERIAL_TERMINAL)
SLOT_INTERFACE("pty", PSEUDO_TERMINAL)
SLOT_INTERFACE("sunkbd", SUN_KBD_ADAPTOR)
SLOT_INTERFACE_END

View File

@ -0,0 +1,55 @@
#include "sun_kbd.h"
device_type const SUN_KBD_ADAPTOR = &device_creator<sun_keyboard_adaptor_device>;
namespace {
MACHINE_CONFIG_FRAGMENT(sun_keyboard_adaptor)
MCFG_SUNKBD_PORT_ADD("keyboard", default_sun_keyboard_devices, nullptr)
MCFG_SUNKBD_RXD_HANDLER(WRITELINE(sun_keyboard_adaptor_device, output_rxd))
MACHINE_CONFIG_END
} // anonymous namespace
sun_keyboard_adaptor_device::sun_keyboard_adaptor_device(
machine_config const &mconfig,
char const *tag,
device_t *owner,
UINT32 clock)
: device_t(mconfig, SUN_KBD_ADAPTOR, "Sun Keyboard Adaptor", tag, owner, clock, "sunkbd_adaptor", __FILE__)
, device_rs232_port_interface(mconfig, *this)
, m_keyboard_port(*this, "keyboard")
{
}
sun_keyboard_adaptor_device::~sun_keyboard_adaptor_device()
{
}
machine_config_constructor sun_keyboard_adaptor_device::device_mconfig_additions() const
{
return MACHINE_CONFIG_NAME(sun_keyboard_adaptor);
}
WRITE_LINE_MEMBER( sun_keyboard_adaptor_device::input_txd )
{
m_keyboard_port->write_txd(state);
}
void sun_keyboard_adaptor_device::device_start()
{
}
void sun_keyboard_adaptor_device::device_reset()
{
output_rxd(1);
output_dcd(0);
output_dsr(0);
output_cts(0);
}

View File

@ -0,0 +1,33 @@
// license:BSD-3-Clause
// copyright-holders:Vas Crabb
#ifndef MAME_DEVICES_RS232_SUN_KBD_H
#define MAME_DEVICES_RS232_SUN_KBD_H
#pragma once
#include "rs232.h"
#include "bus/sunkbd/sunkbd.h"
extern device_type const SUN_KBD_ADAPTOR;
class sun_keyboard_adaptor_device : public device_t, public device_rs232_port_interface
{
public:
sun_keyboard_adaptor_device(machine_config const &mconfig, char const *tag, device_t *owner, UINT32 clock);
virtual ~sun_keyboard_adaptor_device() override;
virtual machine_config_constructor device_mconfig_additions() const override;
virtual DECLARE_WRITE_LINE_MEMBER( input_txd ) override;
protected:
virtual void device_start() override;
virtual void device_reset() override;
private:
required_device<sun_keyboard_port_device> m_keyboard_port;
};
#endif // MAME_DEVICES_RS232_SUN_KBD_H

View File

@ -0,0 +1,211 @@
// license:BSD-3-Clause
// copyright-holders:Vas Crabb
#ifndef MAME_DEVICES_SUNKBD_HLEKBD_H
#define MAME_DEVICES_SUNKBD_HLEKBD_H
#pragma once
#include "sunkbd.h"
#include "sound/beep.h"
extern device_type const SUN_TYPE3_HLE_KEYBOARD;
extern device_type const SUN_TYPE4_HLE_KEYBOARD;
extern device_type const SUN_TYPE5_HLE_KEYBOARD;
extern device_type const SUN_TYPE5_UK_HLE_KEYBOARD;
namespace bus { namespace sunkbd {
class hle_device_base : public device_t, public device_serial_interface, public device_sun_keyboard_port_interface
{
public:
virtual machine_config_constructor device_mconfig_additions() const override;
virtual DECLARE_WRITE_LINE_MEMBER( input_txd ) override;
protected:
// constructor/destructor
hle_device_base(
machine_config const &mconfig,
char const *tag,
device_t *owner,
UINT32 clock);
hle_device_base(
machine_config const &mconfig,
device_type type, char const *name,
char const *tag,
device_t *owner,
UINT32 clock,
char const *shortname,
char const *source);
virtual ~hle_device_base() override;
// device overrides
virtual void device_start() override;
virtual void device_reset() override;
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
// device_serial_interface overrides
virtual void tra_callback() override;
virtual void tra_complete() override;
virtual void rcv_complete() override;
required_ioport m_dips;
required_ioport m_key_inputs[8];
private:
// device_serial_interface uses 10'000 range
enum {
SCAN_TIMER_ID = 20'000,
CLICK_TIMER_ID
};
// TODO: ensure these don't clash with diagnostic LEDs on host computer
enum : int {
LED_NUM = 0,
LED_COMPOSE,
LED_SCROLL,
LED_CAPS
};
enum : UINT8 {
BEEPER_BELL = 0x01U,
BEEPER_CLICK = 0x02U
};
enum : UINT8 {
RX_IDLE,
RX_LED
};
enum : UINT8 {
COMMAND_RESET = 0x01U,
COMMAND_BELL_ON = 0x02U,
COMMAND_BELL_OFF = 0x03U,
COMMAND_CLICK_ON = 0x0aU,
COMMAND_CLICK_OFF = 0x0bU,
COMMAND_LED = 0x0eU,
COMMAND_LAYOUT = 0x0fU
};
virtual UINT8 ident_byte() = 0;
void scan_row();
void send_byte(UINT8 code);
emu_timer *m_scan_timer;
emu_timer *m_click_timer;
required_device<beep_device> m_beeper;
UINT16 m_current_keys[8];
UINT8 m_next_row;
UINT8 m_fifo[16];
UINT8 m_head, m_tail;
UINT8 m_empty;
UINT8 m_rx_state;
UINT8 m_keyclick;
UINT8 m_beeper_state;
};
class hle_type3_device : public hle_device_base
{
public:
hle_type3_device(
machine_config const &mconfig,
char const *tag,
device_t *owner,
UINT32 clock);
hle_type3_device(
machine_config const &mconfig,
device_type type, char const *name,
char const *tag,
device_t *owner,
UINT32 clock,
char const *shortname,
char const *source);
virtual ioport_constructor device_input_ports() const override;
private:
virtual UINT8 ident_byte() override;
};
class hle_type4_device : public hle_device_base
{
public:
hle_type4_device(
machine_config const &mconfig,
char const *tag,
device_t *owner,
UINT32 clock);
hle_type4_device(
machine_config const &mconfig,
device_type type, char const *name,
char const *tag,
device_t *owner,
UINT32 clock,
char const *shortname,
char const *source);
virtual ioport_constructor device_input_ports() const override;
private:
virtual UINT8 ident_byte() override;
};
class hle_type5_device : public hle_device_base
{
public:
hle_type5_device(
machine_config const &mconfig,
char const *tag,
device_t *owner,
UINT32 clock);
hle_type5_device(
machine_config const &mconfig,
device_type type, char const *name,
char const *tag,
device_t *owner,
UINT32 clock,
char const *shortname,
char const *source);
virtual ioport_constructor device_input_ports() const override;
private:
virtual UINT8 ident_byte() override;
};
class hle_type5_uk_device : public hle_device_base
{
public:
hle_type5_uk_device(
machine_config const &mconfig,
char const *tag,
device_t *owner,
UINT32 clock);
hle_type5_uk_device(
machine_config const &mconfig,
device_type type, char const *name,
char const *tag,
device_t *owner,
UINT32 clock,
char const *shortname,
char const *source);
virtual ioport_constructor device_input_ports() const override;
private:
virtual UINT8 ident_byte() override;
};
} } // namespace bus::sunkbd
#endif // MAME_DEVICES_SUNKBD_HLEKBD_H

View File

@ -1,93 +0,0 @@
// license:BSD-3-Clause
// copyright-holders:Vas Crabb
#ifndef MAME_DEVICES_SUNKBD_SPARCKBD_H
#define MAME_DEVICES_SUNKBD_SPARCKBD_H
#pragma once
#include "sunkbd.h"
#include "sound/beep.h"
class sparc_keyboard_device : public device_t, public device_serial_interface, public device_sun_keyboard_port_interface
{
public:
sparc_keyboard_device(machine_config const &mconfig, char const *tag, device_t *owner, UINT32 clock);
sparc_keyboard_device(machine_config const &mconfig, device_type type, char const *name, char const *tag, device_t *owner, UINT32 clock, char const *shortname, char const *source);
virtual machine_config_constructor device_mconfig_additions() const override;
virtual ioport_constructor device_input_ports() const override;
virtual DECLARE_WRITE_LINE_MEMBER( input_txd ) override;
protected:
// device overrides
virtual void device_start() override;
virtual void device_reset() override;
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
// device_serial_interface overrides
virtual void tra_callback() override;
virtual void tra_complete() override;
virtual void rcv_complete() override;
private:
// device_serial_interface uses 10'000 range
enum {
SCAN_TIMER_ID = 20'000,
CLICK_TIMER_ID
};
// TODO: ensure these don't clash with diagnostic LEDs on host computer
enum : int {
LED_NUM = 0,
LED_COMPOSE,
LED_SCROLL,
LED_CAPS
};
enum : UINT8 {
BEEPER_BELL = 0x01U,
BEEPER_CLICK = 0x02U
};
enum : UINT8 {
RX_IDLE,
RX_LED
};
enum : UINT8 {
COMMAND_RESET = 0x01U,
COMMAND_BELL_ON = 0x02U,
COMMAND_BELL_OFF = 0x03U,
COMMAND_CLICK_ON = 0x0aU,
COMMAND_CLICK_OFF = 0x0bU,
COMMAND_LED = 0x0eU,
COMMAND_LAYOUT = 0x0fU
};
void scan_row();
void send_byte(UINT8 code);
emu_timer *m_scan_timer;
emu_timer *m_click_timer;
required_ioport m_dips;
required_ioport m_key_inputs[8];
required_device<beep_device> m_beeper;
UINT16 m_current_keys[8];
UINT8 m_next_row;
UINT8 m_fifo[16];
UINT8 m_head, m_tail;
UINT8 m_empty;
UINT8 m_rx_state;
UINT8 m_keyclick;
UINT8 m_beeper_state;
};
extern const device_type SPARC_KEYBOARD;
#endif // MAME_DEVICES_SUNKBD_SPARCKBD_H

View File

@ -87,9 +87,11 @@ device_sun_keyboard_port_interface::~device_sun_keyboard_port_interface()
#include "sparckbd.h"
#include "hlekbd.h"
SLOT_INTERFACE_START( default_sun_keyboard_devices )
SLOT_INTERFACE("sparckbd", SPARC_KEYBOARD)
SLOT_INTERFACE("type3hle", SUN_TYPE3_HLE_KEYBOARD)
SLOT_INTERFACE("type4hle", SUN_TYPE4_HLE_KEYBOARD)
SLOT_INTERFACE("type5hle", SUN_TYPE5_HLE_KEYBOARD)
SLOT_INTERFACE("type5ukhle", SUN_TYPE5_UK_HLE_KEYBOARD)
SLOT_INTERFACE_END

View File

@ -158,7 +158,10 @@ void acia6850_device::device_start()
save_item(NAME(m_rx_parity));
save_item(NAME(m_rx_counter));
save_item(NAME(m_rx_irq_enable));
}
void acia6850_device::device_reset()
{
output_txd(1);
output_rts(1);
output_irq(1);

View File

@ -51,6 +51,7 @@ protected:
// device-level overrides
virtual void device_start() override;
virtual void device_reset() override;
virtual void update_irq();
int calculate_txirq();

View File

@ -56,6 +56,7 @@ private:
// internal helpers
template <typename T> std::vector<std::string> parse_attributes(const char **attributes, const T &attrlist);
bool parse_name_and_value(const char **attributes, std::string &name, std::string &value);
void add_rom_entry(const char *name, const char *hashdata, UINT32 offset, UINT32 length, UINT32 flags);
// expat callbacks
@ -518,13 +519,20 @@ const software_info *software_list_device::find(const char *look_for)
bool iswild = strchr(look_for, '*') != nullptr || strchr(look_for, '?');
// find a match (will cause a parse if needed when calling get_info)
for (const software_info &info : get_info())
{
if ((iswild && core_strwildcmp(look_for, info.shortname().c_str()) == 0) || core_stricmp(look_for, info.shortname().c_str()) == 0)
return &info;
}
const auto &info_list = get_info();
auto iter = std::find_if(
info_list.begin(),
info_list.end(),
[&](const software_info &info)
{
const char *shortname = info.shortname().c_str();
return (iswild && core_strwildcmp(look_for, shortname) == 0)
|| core_stricmp(look_for, shortname) == 0;
});
return nullptr;
return iter != info_list.end()
? &*iter
: nullptr;
}
@ -645,7 +653,7 @@ void software_list_device::internal_validity_check(validity_checker &valid)
osd_printf_error("%s: %s is a duplicate description (%s)\n", filename(), swinfo.longname().c_str(), swinfo.shortname().c_str());
bool is_clone = false;
if (swinfo.parentname().empty())
if (!swinfo.parentname().empty())
{
is_clone = true;
if (swinfo.parentname() == swinfo.shortname())
@ -659,7 +667,7 @@ void software_list_device::internal_validity_check(validity_checker &valid)
if (swinfo2 == nullptr)
osd_printf_error("%s: parent '%s' software for '%s' not found\n", filename(), swinfo.parentname().c_str(), swinfo.shortname().c_str());
else if (swinfo2->parentname().empty())
else if (!swinfo2->parentname().empty())
osd_printf_error("%s: %s is a clone of a clone\n", filename(), swinfo.shortname().c_str());
}
@ -807,6 +815,40 @@ std::vector<std::string> softlist_parser::parse_attributes(const char **attribut
}
//-------------------------------------------------
// parse_name_and_value - helper to parse "name"
// and "value" attribute pairs (allowing the
// latter to be defined as an empty string)
//-------------------------------------------------
bool softlist_parser::parse_name_and_value(const char **attributes, std::string &name, std::string &value)
{
bool found_value = false;
// iterate over attribute/value pairs
for( ; attributes[0]; attributes += 2)
{
// if found, set the corresponding output entry to the value
if (strcmp(attributes[0], "name") == 0)
{
name = attributes[1];
}
else if (strcmp(attributes[0], "value") == 0)
{
value = attributes[1];
found_value = true;
}
// if not found, report an unknown attribute
else
unknown_attribute(attributes[0]);
}
return !name.empty() && found_value;
}
//-------------------------------------------------
// add_rom_entry - append a new ROM entry to the
// current part's list
@ -1011,11 +1053,10 @@ void softlist_parser::parse_soft_start(const char *tagname, const char **attribu
// <info name='' value=''>
else if (strcmp(tagname, "info") == 0)
{
static const char *attrnames[] = { "name", "value" };
auto attrvalues = parse_attributes(attributes, attrnames);
std::string infoname, infovalue;
if (!attrvalues[0].empty() && !attrvalues[1].empty())
m_current_info->m_other_info.emplace_back(std::move(attrvalues[0]), std::move(attrvalues[1]));
if (parse_name_and_value(attributes, infoname, infovalue))
m_current_info->m_other_info.emplace_back(std::move(infoname), std::move(infovalue));
else
parse_error("Incomplete other_info definition");
}
@ -1023,11 +1064,10 @@ void softlist_parser::parse_soft_start(const char *tagname, const char **attribu
// <sharedfeat name='' value=''>
else if (strcmp(tagname, "sharedfeat") == 0)
{
static const char *attrnames[] = { "name", "value" };
auto attrvalues = parse_attributes(attributes, attrnames);
std::string featname, featvalue;
if (!attrvalues[0].empty() && !attrvalues[1].empty())
m_current_info->m_shared_info.emplace_back(std::move(attrvalues[0]), std::move(attrvalues[1]));
if (parse_name_and_value(attributes, featname, featvalue))
m_current_info->m_shared_info.emplace_back(std::move(featname), std::move(featvalue));
else
parse_error("Incomplete sharedfeat definition");
}
@ -1122,11 +1162,10 @@ void softlist_parser::parse_part_start(const char *tagname, const char **attribu
// <feature name='' value=''>
else if (strcmp(tagname, "feature") == 0)
{
static const char *attrnames[] = { "name", "value" };
auto attrvalues = parse_attributes(attributes, attrnames);
std::string featname, featvalue;
if (!attrvalues[0].empty())
m_current_part->m_featurelist.emplace_back(std::move(attrvalues[0]), std::move(attrvalues[1]));
if (parse_name_and_value(attributes, featname, featvalue))
m_current_part->m_featurelist.emplace_back(std::move(featname), std::move(featvalue));
else
parse_error("Incomplete feature definition");
}

View File

@ -810,6 +810,15 @@ static SLOT_INTERFACE_START( bbc_floppies_35 )
SLOT_INTERFACE("qd", FLOPPY_35_DD)
SLOT_INTERFACE_END
WRITE_LINE_MEMBER(bbc_state::adlc_irq_w)
{
m_adlc_irq = state;
bbc_update_nmi();
}
WRITE_LINE_MEMBER(bbc_state::econet_clk_w)
{
m_adlc->rxc_w(state);
@ -906,7 +915,7 @@ static MACHINE_CONFIG_START( bbca, bbc_state )
MCFG_DEVICE_ADD("acia6850", ACIA6850, 0)
MCFG_ACIA6850_TXD_HANDLER(WRITELINE(bbc_state, bbc_txd_w))
MCFG_ACIA6850_RTS_HANDLER(WRITELINE(bbc_state, bbc_rts_w))
MCFG_ACIA6850_IRQ_HANDLER(INPUTLINE("maincpu", M6502_IRQ_LINE))
MCFG_ACIA6850_IRQ_HANDLER(WRITELINE(bbc_state, bbcb_acia6850_irq_w))
MCFG_RS232_PORT_ADD(RS232_TAG, default_rs232_devices, nullptr)
MCFG_RS232_RXD_HANDLER(WRITELINE(bbc_state, write_rxd_serial))
@ -922,7 +931,7 @@ static MACHINE_CONFIG_START( bbca, bbc_state )
MCFG_VIA6522_READPB_HANDLER(READ8(bbc_state, bbcb_via_system_read_portb))
MCFG_VIA6522_WRITEPA_HANDLER(WRITE8(bbc_state, bbcb_via_system_write_porta))
MCFG_VIA6522_WRITEPB_HANDLER(WRITE8(bbc_state, bbcb_via_system_write_portb))
MCFG_VIA6522_IRQ_HANDLER(INPUTLINE("maincpu", M6502_IRQ_LINE))
MCFG_VIA6522_IRQ_HANDLER(WRITELINE(bbc_state, bbcb_via_system_irq_w))
/* EPROM sockets */
MCFG_FRAGMENT_ADD(bbc_eprom_sockets)
@ -954,7 +963,7 @@ static MACHINE_CONFIG_DERIVED( bbcb, bbca )
MCFG_VIA6522_WRITEPA_HANDLER(DEVWRITE8("cent_data_out", output_latch_device, write))
MCFG_VIA6522_WRITEPB_HANDLER(WRITE8(bbc_state, bbcb_via_user_write_portb))
MCFG_VIA6522_CA2_HANDLER(DEVWRITELINE("centronics", centronics_device, write_strobe))
MCFG_VIA6522_IRQ_HANDLER(INPUTLINE("maincpu", M6502_IRQ_LINE))
MCFG_VIA6522_IRQ_HANDLER(WRITELINE(bbc_state, bbcb_via_user_irq_w))
/* adc */
MCFG_DEVICE_ADD("upd7002", UPD7002, 0)
@ -968,7 +977,7 @@ static MACHINE_CONFIG_DERIVED( bbcb, bbca )
/* fdc */
MCFG_DEVICE_ADD("i8271", I8271, 0)
MCFG_I8271_IRQ_CALLBACK(INPUTLINE("maincpu", INPUT_LINE_NMI))
MCFG_I8271_IRQ_CALLBACK(WRITELINE(bbc_state, fdc_intrq_w))
MCFG_I8271_HDL_CALLBACK(WRITELINE(bbc_state, motor_w))
MCFG_I8271_OPT_CALLBACK(WRITELINE(bbc_state, side_w))
MCFG_FLOPPY_DRIVE_ADD("i8271:0", bbc_floppies_525, "qd", bbc_state::floppy_formats_bbc)
@ -979,7 +988,7 @@ static MACHINE_CONFIG_DERIVED( bbcb, bbca )
/* econet */
MCFG_DEVICE_ADD("mc6854", MC6854, 0)
MCFG_MC6854_OUT_TXD_CB(DEVWRITELINE(ECONET_TAG, econet_device, data_w))
MCFG_MC6854_OUT_IRQ_CB(INPUTLINE("maincpu", M6502_NMI_LINE))
MCFG_MC6854_OUT_IRQ_CB(WRITELINE(bbc_state, adlc_irq_w))
MCFG_ECONET_ADD()
MCFG_ECONET_CLK_CALLBACK(WRITELINE(bbc_state, econet_clk_w))
MCFG_ECONET_DATA_CALLBACK(DEVWRITELINE("mc6854", mc6854_device, set_rx))
@ -1296,7 +1305,7 @@ static MACHINE_CONFIG_START( bbcm, bbc_state )
MCFG_CASSETTE_DEFAULT_STATE(CASSETTE_PLAY)
MCFG_CASSETTE_INTERFACE("bbc_cass")
// 2 x EPROM sockets (32K) in BBC-Master
// 2 x cartridge sockets in BBC-Master
MCFG_GENERIC_SOCKET_ADD("exp_rom1", generic_plain_slot, "bbcm_cart")
MCFG_GENERIC_LOAD(bbc_state, bbcm_exp1_load)
@ -1319,7 +1328,7 @@ static MACHINE_CONFIG_START( bbcm, bbc_state )
MCFG_DEVICE_ADD("acia6850", ACIA6850, 0)
MCFG_ACIA6850_TXD_HANDLER(WRITELINE(bbc_state, bbc_txd_w))
MCFG_ACIA6850_RTS_HANDLER(WRITELINE(bbc_state, bbc_rts_w))
MCFG_ACIA6850_IRQ_HANDLER(INPUTLINE("maincpu", M6502_IRQ_LINE))
MCFG_ACIA6850_IRQ_HANDLER(WRITELINE(bbc_state, bbcb_acia6850_irq_w))
MCFG_RS232_PORT_ADD(RS232_TAG, default_rs232_devices, nullptr)
MCFG_RS232_RXD_HANDLER(WRITELINE(bbc_state, write_rxd_serial))
@ -1340,7 +1349,7 @@ static MACHINE_CONFIG_START( bbcm, bbc_state )
MCFG_VIA6522_READPB_HANDLER(READ8(bbc_state, bbcb_via_system_read_portb))
MCFG_VIA6522_WRITEPA_HANDLER(WRITE8(bbc_state, bbcb_via_system_write_porta))
MCFG_VIA6522_WRITEPB_HANDLER(WRITE8(bbc_state, bbcb_via_system_write_portb))
MCFG_VIA6522_IRQ_HANDLER(INPUTLINE("maincpu", M6502_IRQ_LINE))
MCFG_VIA6522_IRQ_HANDLER(WRITELINE(bbc_state, bbcb_via_system_irq_w))
/* user via */
MCFG_DEVICE_ADD("via6522_1", VIA6522, XTAL_16MHz / 16)
@ -1348,7 +1357,7 @@ static MACHINE_CONFIG_START( bbcm, bbc_state )
MCFG_VIA6522_WRITEPA_HANDLER(DEVWRITE8("cent_data_out", output_latch_device, write))
MCFG_VIA6522_WRITEPB_HANDLER(WRITE8(bbc_state, bbcb_via_user_write_portb))
MCFG_VIA6522_CA2_HANDLER(DEVWRITELINE("centronics", centronics_device, write_strobe))
MCFG_VIA6522_IRQ_HANDLER(INPUTLINE("maincpu", M6502_IRQ_LINE))
MCFG_VIA6522_IRQ_HANDLER(WRITELINE(bbc_state, bbcb_via_user_irq_w))
/* fdc */
MCFG_WD1770_ADD("wd1770", XTAL_16MHz / 2)
@ -1363,7 +1372,7 @@ static MACHINE_CONFIG_START( bbcm, bbc_state )
/* econet */
MCFG_DEVICE_ADD("mc6854", MC6854, 0)
MCFG_MC6854_OUT_TXD_CB(DEVWRITELINE(ECONET_TAG, econet_device, data_w))
MCFG_MC6854_OUT_IRQ_CB(INPUTLINE("maincpu", M6502_NMI_LINE))
MCFG_MC6854_OUT_IRQ_CB(WRITELINE(bbc_state, adlc_irq_w))
MCFG_ECONET_ADD()
MCFG_ECONET_CLK_CALLBACK(WRITELINE(bbc_state, econet_clk_w))
MCFG_ECONET_DATA_CALLBACK(DEVWRITELINE("mc6854", mc6854_device, set_rx))

View File

@ -25,16 +25,16 @@ public:
m_maincpu(*this, "maincpu"),
m_fdc(*this, "fdc"),
m_crtc(*this, "crtc"),
m_floppy0(*this, "fdc:0:8dsdd"),
m_floppy1(*this, "fdc:1:8dsdd"),
m_floppy0(*this, "fdc:0"),
m_floppy1(*this, "fdc:1"),
m_p_vram(*this, "p_vram"),
m_palette(*this, "palette") { }
required_device<cpu_device> m_maincpu;
required_device<mb8877_t> m_fdc;
required_device<mc6845_device> m_crtc;
required_device<floppy_image_device> m_floppy0;
required_device<floppy_image_device> m_floppy1;
required_device<floppy_connector> m_floppy0;
required_device<floppy_connector> m_floppy1;
DECLARE_WRITE8_MEMBER(myb3k_6845_address_w);
DECLARE_WRITE8_MEMBER(myb3k_6845_data_w);
DECLARE_WRITE8_MEMBER(myb3k_video_mode_w);
@ -130,8 +130,8 @@ WRITE8_MEMBER( myb3k_state::myb3k_fdc_output_w )
/* TODO: complete guesswork! (it just does a 0x24 -> 0x20 in there) */
floppy_image_device *floppy = nullptr;
if (data & 1) floppy = m_floppy0;
if (data & 2) floppy = m_floppy1;
if (data & 1) floppy = m_floppy0->get_device();
if (data & 2) floppy = m_floppy1->get_device();
if (floppy)
{

View File

@ -24,13 +24,11 @@ WRITE16_MEMBER(ohmygod_state::ohmygod_ctrl_w)
{
if (ACCESSING_BITS_0_7)
{
UINT8 *rom = memregion("oki")->base();
/* ADPCM bank switch */
if (m_sndbank != ((data >> m_adpcm_bank_shift) & 0x0f))
{
m_sndbank = (data >> m_adpcm_bank_shift) & 0x0f;
memcpy(rom + 0x20000, rom + 0x40000 + 0x20000 * m_sndbank, 0x20000);
membank("okibank")->set_entry(m_sndbank);
}
}
if (ACCESSING_BITS_8_15)
@ -61,6 +59,10 @@ static ADDRESS_MAP_START( ohmygod_map, AS_PROGRAM, 16, ohmygod_state )
AM_RANGE(0xd00000, 0xd00001) AM_WRITE(ohmygod_spritebank_w)
ADDRESS_MAP_END
static ADDRESS_MAP_START( oki_map, AS_0, 8, ohmygod_state )
AM_RANGE(0x00000, 0x1ffff) AM_ROM
AM_RANGE(0x20000, 0x3ffff) AM_ROMBANK("okibank")
ADDRESS_MAP_END
static INPUT_PORTS_START( ohmygod )
PORT_START("P1")
@ -297,6 +299,8 @@ GFXDECODE_END
void ohmygod_state::machine_start()
{
membank("okibank")->configure_entries(0, 16, memregion("oki")->base(), 0x20000);
save_item(NAME(m_spritebank));
save_item(NAME(m_scrollx));
save_item(NAME(m_scrolly));
@ -305,11 +309,7 @@ void ohmygod_state::machine_start()
void ohmygod_state::machine_reset()
{
UINT8 *rom = memregion("oki")->base();
m_sndbank = 0;
memcpy(rom + 0x20000, rom + 0x40000 + 0x20000 * m_sndbank, 0x20000);
m_spritebank = 0;
m_scrollx = 0;
m_scrolly = 0;
@ -344,6 +344,7 @@ static MACHINE_CONFIG_START( ohmygod, ohmygod_state )
MCFG_SPEAKER_STANDARD_MONO("mono")
MCFG_OKIM6295_ADD("oki", 14000000/8, OKIM6295_PIN7_HIGH)
MCFG_DEVICE_ADDRESS_MAP(AS_0, oki_map)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
MACHINE_CONFIG_END
@ -364,10 +365,8 @@ ROM_START( ohmygod )
ROM_REGION( 0x80000, "gfx2", 0 )
ROM_LOAD( "omg-s.120", 0x00000, 0x80000, CRC(6413bd36) SHA1(52c455d727496eae80bfab9460127c4c5a874e32) )
ROM_REGION( 0x240000, "oki", 0 )
ROM_LOAD( "omg-g.107", 0x00000, 0x200000, CRC(7405573c) SHA1(f4e7318c0a58f43d3c6370490637aea53b28547e) )
/* 00000-1ffff is fixed, 20000-3ffff is banked */
ROM_RELOAD( 0x40000, 0x200000 )
ROM_REGION( 0x200000, "oki", 0 )
ROM_LOAD( "omg-g.107", 0x00000, 0x200000, CRC(7405573c) SHA1(f4e7318c0a58f43d3c6370490637aea53b28547e) ) /* 00000-1ffff is fixed, 20000-3ffff is banked */
ROM_END
ROM_START( naname )
@ -380,10 +379,8 @@ ROM_START( naname )
ROM_REGION( 0x80000, "gfx2", 0 )
ROM_LOAD( "036-spr.120", 0x00000, 0x80000, CRC(e36d8731) SHA1(652709d7884d40459c95761c8abcb394c4b712bf) )
ROM_REGION( 0x240000, "oki", 0 )
ROM_LOAD( "036-snd.107", 0x00000, 0x200000, CRC(a3e0caf4) SHA1(35b0eb4ae5b9df1b7c99ec2476a6d834ea50d2e3) )
/* 00000-1ffff is fixed, 20000-3ffff is banked */
ROM_RELOAD( 0x40000, 0x200000 )
ROM_REGION( 0x200000, "oki", 0 )
ROM_LOAD( "036-snd.107", 0x00000, 0x200000, CRC(a3e0caf4) SHA1(35b0eb4ae5b9df1b7c99ec2476a6d834ea50d2e3) ) /* 00000-1ffff is fixed, 20000-3ffff is banked */
ROM_END

View File

@ -945,21 +945,15 @@ READ8_MEMBER(seibuspi_state::sb_coin_r)
READ32_MEMBER(seibuspi_state::ejsakura_keyboard_r)
{
switch (m_ejsakura_input_port)
{
case 0x01:
return ioport("INPUT01")->read();
case 0x02:
return ioport("INPUT02")->read();
case 0x04:
return ioport("INPUT04")->read();
case 0x08:
return ioport("INPUT08")->read();
case 0x10:
return ioport("INPUT10")->read();
default:
return ioport("SYSTEM")->read();
}
// coins/eeprom data
UINT32 ret = m_special->read();
// multiplexed inputs
for (int i = 0; i < 5; i++)
if (m_ejsakura_input_port >> i & 1)
ret &= m_key[i]->read();
return ret;
}
WRITE32_MEMBER(seibuspi_state::ejsakura_input_select_w)
@ -977,7 +971,7 @@ static ADDRESS_MAP_START( base_map, AS_PROGRAM, 32, seibuspi_state )
AM_RANGE(0x00000498, 0x0000049b) AM_WRITENOP // ? dma address high bits? (always writes 0)
AM_RANGE(0x00000600, 0x00000603) AM_READ8(spi_status_r, 0x000000ff)
AM_RANGE(0x00000604, 0x00000607) AM_READ_PORT("INPUTS")
AM_RANGE(0x00000608, 0x0000060b) AM_READ_PORT("UNKNOWN")
AM_RANGE(0x00000608, 0x0000060b) AM_READ_PORT("EXCH")
AM_RANGE(0x0000060c, 0x0000060f) AM_READ_PORT("SYSTEM")
AM_RANGE(0x00000000, 0x0003ffff) AM_RAM AM_SHARE("mainram")
AM_RANGE(0x00200000, 0x003fffff) AM_ROM AM_SHARE("share1")
@ -1074,7 +1068,7 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START( sys386f_map, AS_PROGRAM, 32, seibuspi_state )
AM_IMPORT_FROM( rise_map )
AM_RANGE(0x00000010, 0x00000013) AM_READ8(spi_status_r, 0x000000ff)
AM_RANGE(0x00000400, 0x00000403) AM_WRITE(ejsakura_input_select_w)
AM_RANGE(0x00000400, 0x00000403) AM_READ_PORT("SYSTEM") AM_WRITE(ejsakura_input_select_w)
AM_RANGE(0x00000404, 0x00000407) AM_WRITE8(eeprom_w, 0x000000ff)
AM_RANGE(0x00000408, 0x0000040f) AM_DEVWRITE8("ymz", ymz280b_device, write, 0x000000ff)
AM_RANGE(0x00000484, 0x00000487) AM_WRITE(palette_dma_start_w)
@ -1144,7 +1138,7 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START( spi_soundmap, AS_PROGRAM, 8, seibuspi_state )
AM_RANGE(0x4008, 0x4008) AM_DEVWRITE("soundfifo2", fifo7200_device, data_byte_w)
AM_RANGE(0x400a, 0x400a) AM_READ_PORT("JP1") // is JP1 physically really here?
AM_RANGE(0x400a, 0x400a) AM_READ_PORT("JUMPERS") // TO DO: get these to actually work
AM_IMPORT_FROM( sxx2e_soundmap )
ADDRESS_MAP_END
@ -1180,30 +1174,30 @@ WRITE_LINE_MEMBER(seibuspi_state::ymf_irqhandler)
CUSTOM_INPUT_MEMBER(seibuspi_state::ejanhs_encode)
{
/* E-Jan Highschool has a keyboard with the following keys
The keys are encoded with 6 bits
A - 000010 port 0
B - 010000 port 0
C - 000010 port 1
D - 010000 port 1
E - 000011 port 0
F - 011000 port 0
G - 000011 port 1
H - 011000 port 1
I - 000100 port 0
J - 100000 port 0
K - 000100 port 1
L - 100000 port 1
M - 000101 port 0
N - 101000 port 0
CHI - 000101 port 1
PON - 101000 port 1
KAN - 000110 port 0
REACH - 110000 port 0
RON - 000110 port 1
Start - 000111 port 0
The keys are encoded with 3 bits for each input port
A - 010 port A
B - 010 port B
C - 010 port C
D - 010 port D
E - 011 port A
F - 011 port B
G - 011 port C
H - 011 port D
I - 100 port A
J - 100 port B
K - 100 port C
L - 100 port D
M - 101 port A
N - 101 port B
CHI - 101 port C
PON - 101 port D
KAN - 110 port A
REACH - 110 port B
RON - 110 port C
Start - 111 port A
*/
static const UINT8 encoding[] = { 0x02, 0x10, 0x03, 0x18, 0x04, 0x20, 0x05, 0x28, 0x06, 0x30, 0x07 };
ioport_value state = ioport((const char *)param)->read();
static const UINT8 encoding[] = { 6, 5, 4, 3, 2, 7 };
ioport_value state = ~m_key[(FPTR)param]->read();
for (int bit = 0; bit < ARRAY_LENGTH(encoding); bit++)
if (state & (1 << bit))
@ -1231,7 +1225,7 @@ static INPUT_PORTS_START( sxx2e )
PORT_BIT( 0x00001000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2)
PORT_BIT( 0x00002000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2)
PORT_BIT( 0x00004000, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2)
PORT_BIT( 0x00008000, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_SPECIAL_ONOFF_DIPLOC( 0x00008000, 0x00000000, Flip_Screen, "SW1:1" )
PORT_BIT( 0xffff0000, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START("SYSTEM")
@ -1245,7 +1239,8 @@ static INPUT_PORTS_START( sxx2e )
PORT_BIT( 0x00000080, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_BIT( 0xffffff00, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START("UNKNOWN")
// Some sets still read unused 3P and 4P inputs from here as in Zero Team
PORT_START("EXCH")
PORT_BIT( 0xffffffff, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_START("COIN")
@ -1258,11 +1253,11 @@ INPUT_PORTS_END
static INPUT_PORTS_START( spi_3button )
PORT_INCLUDE( sxx2e )
PORT_START("JP1")
PORT_CONFNAME( 0x03, 0x03, "JP1" )
PORT_CONFSETTING( 0x03, "Update" )
PORT_CONFSETTING( 0x01, DEF_STR( Off ) )
PORT_CONFSETTING( 0x00, DEF_STR( On ) )
PORT_START("JUMPERS")
PORT_DIPNAME( 0x03, 0x03, "JP1" )
PORT_DIPSETTING( 0x03, "Update" )
PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_BIT( 0xfc, IP_ACTIVE_LOW, IPT_UNUSED )
INPUT_PORTS_END
@ -1291,6 +1286,9 @@ INPUT_PORTS_END
static INPUT_PORTS_START( sys386i )
PORT_INCLUDE( sxx2f )
PORT_MODIFY("INPUTS")
PORT_BIT( 0x00008000, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_MODIFY("SYSTEM")
PORT_BIT( 0x00000010, IP_ACTIVE_LOW, IPT_COIN1 )
PORT_BIT( 0x00000020, IP_ACTIVE_LOW, IPT_COIN2 )
@ -1300,61 +1298,8 @@ static INPUT_PORTS_START( sys386i )
INPUT_PORTS_END
static INPUT_PORTS_START( spi_ejanhs )
PORT_START("INPUTS")
PORT_BIT( 0x0000003f, IP_ACTIVE_LOW, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, seibuspi_state,ejanhs_encode, "IN0BITS")
PORT_BIT( 0x00003f00, IP_ACTIVE_LOW, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, seibuspi_state,ejanhs_encode, "IN1BITS")
PORT_BIT( 0xffff0000, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START("SYSTEM")
PORT_SERVICE_NO_TOGGLE( 0x00000004, IP_ACTIVE_LOW )
PORT_BIT( 0x00000008, IP_ACTIVE_LOW, IPT_SERVICE1 )
PORT_BIT( 0x000000f3, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0xffffff00, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START("UNKNOWN")
PORT_BIT( 0xffffffff, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_START("JP1")
PORT_CONFNAME( 0x03, 0x03, "JP1" )
PORT_CONFSETTING( 0x03, "Update" )
PORT_CONFSETTING( 0x01, DEF_STR( Off ) )
PORT_CONFSETTING( 0x00, DEF_STR( On ) )
PORT_BIT( 0xfc, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START("COIN")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 )
PORT_BIT( 0xfc, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START("IN0BITS")
PORT_BIT( 0x001, IP_ACTIVE_HIGH, IPT_MAHJONG_A )
PORT_BIT( 0x002, IP_ACTIVE_HIGH, IPT_MAHJONG_B )
PORT_BIT( 0x004, IP_ACTIVE_HIGH, IPT_MAHJONG_E )
PORT_BIT( 0x008, IP_ACTIVE_HIGH, IPT_MAHJONG_F )
PORT_BIT( 0x010, IP_ACTIVE_HIGH, IPT_MAHJONG_I )
PORT_BIT( 0x020, IP_ACTIVE_HIGH, IPT_MAHJONG_J )
PORT_BIT( 0x040, IP_ACTIVE_HIGH, IPT_MAHJONG_M )
PORT_BIT( 0x080, IP_ACTIVE_HIGH, IPT_MAHJONG_N )
PORT_BIT( 0x100, IP_ACTIVE_HIGH, IPT_MAHJONG_KAN )
PORT_BIT( 0x200, IP_ACTIVE_HIGH, IPT_MAHJONG_REACH )
PORT_BIT( 0x400, IP_ACTIVE_HIGH, IPT_START1 )
PORT_START("IN1BITS")
PORT_BIT( 0x001, IP_ACTIVE_HIGH, IPT_MAHJONG_C )
PORT_BIT( 0x002, IP_ACTIVE_HIGH, IPT_MAHJONG_D )
PORT_BIT( 0x004, IP_ACTIVE_HIGH, IPT_MAHJONG_G )
PORT_BIT( 0x008, IP_ACTIVE_HIGH, IPT_MAHJONG_H )
PORT_BIT( 0x010, IP_ACTIVE_HIGH, IPT_MAHJONG_K )
PORT_BIT( 0x020, IP_ACTIVE_HIGH, IPT_MAHJONG_L )
PORT_BIT( 0x040, IP_ACTIVE_HIGH, IPT_MAHJONG_CHI )
PORT_BIT( 0x080, IP_ACTIVE_HIGH, IPT_MAHJONG_PON )
PORT_BIT( 0x100, IP_ACTIVE_HIGH, IPT_MAHJONG_RON )
INPUT_PORTS_END
static INPUT_PORTS_START( sys386f )
PORT_START("INPUT01")
static INPUT_PORTS_START( spi_mahjong_keyboard )
PORT_START("KEY.0")
PORT_BIT( 0x00000001, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x00000002, IP_ACTIVE_LOW, IPT_MAHJONG_PON )
PORT_BIT( 0x00000004, IP_ACTIVE_LOW, IPT_MAHJONG_L )
@ -1362,7 +1307,7 @@ static INPUT_PORTS_START( sys386f )
PORT_BIT( 0x00000010, IP_ACTIVE_LOW, IPT_MAHJONG_D )
PORT_BIT( 0xffffffe0, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START("INPUT02")
PORT_START("KEY.1")
PORT_BIT( 0x00000001, IP_ACTIVE_LOW, IPT_MAHJONG_BIG )
PORT_BIT( 0x00000002, IP_ACTIVE_LOW, IPT_MAHJONG_FLIP_FLOP )
PORT_BIT( 0x00000004, IP_ACTIVE_LOW, IPT_MAHJONG_DOUBLE_UP )
@ -1371,7 +1316,7 @@ static INPUT_PORTS_START( sys386f )
PORT_BIT( 0x00000020, IP_ACTIVE_LOW, IPT_MAHJONG_SMALL )
PORT_BIT( 0xffffffc0, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START("INPUT04")
PORT_START("KEY.2")
PORT_BIT( 0x00000001, IP_ACTIVE_LOW, IPT_MAHJONG_RON )
PORT_BIT( 0x00000002, IP_ACTIVE_LOW, IPT_MAHJONG_CHI )
PORT_BIT( 0x00000004, IP_ACTIVE_LOW, IPT_MAHJONG_K )
@ -1379,7 +1324,7 @@ static INPUT_PORTS_START( sys386f )
PORT_BIT( 0x00000010, IP_ACTIVE_LOW, IPT_MAHJONG_C )
PORT_BIT( 0xffffffe0, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START("INPUT08")
PORT_START("KEY.3")
PORT_BIT( 0x00000001, IP_ACTIVE_LOW, IPT_MAHJONG_KAN )
PORT_BIT( 0x00000002, IP_ACTIVE_LOW, IPT_MAHJONG_M )
PORT_BIT( 0x00000004, IP_ACTIVE_LOW, IPT_MAHJONG_I )
@ -1388,28 +1333,75 @@ static INPUT_PORTS_START( sys386f )
PORT_BIT( 0x00000020, IP_ACTIVE_LOW, IPT_START1 )
PORT_BIT( 0xffffffc0, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START("INPUT10")
PORT_START("KEY.4")
PORT_BIT( 0x00000001, IP_ACTIVE_LOW, IPT_MAHJONG_REACH )
PORT_BIT( 0x00000002, IP_ACTIVE_LOW, IPT_MAHJONG_N )
PORT_BIT( 0x00000004, IP_ACTIVE_LOW, IPT_MAHJONG_J )
PORT_BIT( 0x00000008, IP_ACTIVE_LOW, IPT_MAHJONG_F )
PORT_BIT( 0x00000010, IP_ACTIVE_LOW, IPT_MAHJONG_B )
PORT_BIT( 0x00000020, IP_ACTIVE_LOW, IPT_MAHJONG_BET )
PORT_BIT( 0xffffffc0, IP_ACTIVE_LOW, IPT_UNUSED )
INPUT_PORTS_END
static INPUT_PORTS_START( spi_ejanhs )
PORT_INCLUDE( spi_mahjong_keyboard )
PORT_START("INPUTS")
PORT_BIT( 0x00000007, IP_ACTIVE_LOW, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, seibuspi_state,ejanhs_encode, (FPTR)3)
PORT_BIT( 0x00000038, IP_ACTIVE_LOW, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, seibuspi_state,ejanhs_encode, (FPTR)4)
PORT_BIT( 0x00000700, IP_ACTIVE_LOW, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, seibuspi_state,ejanhs_encode, (FPTR)2)
PORT_BIT( 0x00003800, IP_ACTIVE_LOW, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, seibuspi_state,ejanhs_encode, (FPTR)0)
PORT_SPECIAL_ONOFF_DIPLOC( 0x00008000, 0x00000000, Flip_Screen, "SW1:1" )
PORT_BIT( 0xffff4000, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START("SYSTEM")
// These need a noncontiguous encoding, but are nonfunctional in any case
//PORT_BIT( 0x00000013, IP_ACTIVE_LOW, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, seibuspi_state,ejanhs_encode, (FPTR)1)
PORT_SERVICE_NO_TOGGLE( 0x00000004, IP_ACTIVE_LOW )
PORT_BIT( 0x00000008, IP_ACTIVE_LOW, IPT_SERVICE1 )
PORT_BIT( 0x000000f3, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0xffffff00, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_MODIFY("KEY.1")
PORT_BIT( 0x0000003f, IP_ACTIVE_LOW, IPT_UNUSED ) // Decoded but not recognized
PORT_MODIFY("KEY.4")
PORT_BIT( 0x00000020, IP_ACTIVE_LOW, IPT_UNUSED ) // Decoded but not recognized
PORT_START("EXCH") // Another set of mahjong inputs is decoded from here but not used
PORT_BIT( 0xffffffff, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_START("JUMPERS")
PORT_DIPNAME( 0x03, 0x03, "JP1" )
PORT_DIPSETTING( 0x03, "Update" )
PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_BIT( 0xfc, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START("COIN")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 )
PORT_BIT( 0xfc, IP_ACTIVE_LOW, IPT_UNUSED )
INPUT_PORTS_END
static INPUT_PORTS_START( ejsakura )
PORT_INCLUDE( spi_mahjong_keyboard )
PORT_MODIFY("KEY.4")
PORT_SERVICE_NO_TOGGLE( 0x00000200, IP_ACTIVE_LOW)
PORT_BIT( 0x00000800, IP_ACTIVE_LOW, IPT_SERVICE1 ) PORT_NAME("Payout") PORT_CODE(KEYCODE_Q)
PORT_BIT( 0xfffff5c0, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START("SYSTEM")
PORT_START("SPECIAL")
PORT_BIT( 0x00000040, IP_ACTIVE_LOW, IPT_COIN1 )
PORT_BIT( 0x00000080, IP_ACTIVE_LOW, IPT_COIN2 )
PORT_BIT( 0x00004000, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read)
PORT_BIT( 0xffffbf3f, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START("INPUTS")
PORT_START("SYSTEM")
PORT_BIT( 0xffffffff, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START("UNKNOWN")
PORT_BIT( 0xffffffff, IP_ACTIVE_LOW, IPT_UNKNOWN )
INPUT_PORTS_END
@ -3979,9 +3971,6 @@ GAME( 1997, rdft2jb, rdft2, rdft2, spi_2button, seibuspi_state, rdft2,
GAME( 1997, rdft2t, rdft2, rdft2, spi_2button, seibuspi_state, rdft2, ROT270, "Seibu Kaihatsu", "Raiden Fighters 2 - Operation Hell Dive (Taiwan)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
GAME( 1997, rdft2u, rdft2, rdft2, spi_2button, seibuspi_state, rdft2, ROT270, "Seibu Kaihatsu (Fabtek license)", "Raiden Fighters 2 - Operation Hell Dive (US)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
GAME( 1998, rfjet, 0, rdft2, spi_2button, seibuspi_state, rfjet, ROT270, "Seibu Kaihatsu (Tuning license)", "Raiden Fighters Jet (Germany)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
GAME( 1998, rfjetu, rfjet, rdft2, spi_2button, seibuspi_state, rfjet, ROT270, "Seibu Kaihatsu (Fabtek license)", "Raiden Fighters Jet (US)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
GAME( 1998, rfjetj, rfjet, rdft2, spi_2button, seibuspi_state, rfjet, ROT270, "Seibu Kaihatsu", "Raiden Fighters Jet (Japan)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
@ -4003,5 +3992,5 @@ GAME( 2000, rdft22kc, rdft2, sys386i, sys386i, seibuspi_state, rdft2,
GAME( 2000, rfjet2kc, rfjet, sys386i, sys386i, seibuspi_state, rfjet, ROT270, "Seibu Kaihatsu", "Raiden Fighters Jet 2000 (China, SYS386I)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS )
/* SYS386F */
GAME( 1999, ejsakura, 0, sys386f, sys386f, seibuspi_state, sys386f, ROT0, "Seibu Kaihatsu", "E-Jan Sakurasou (Japan, SYS386F V2.0)", MACHINE_SUPPORTS_SAVE )
GAME( 1999, ejsakura12, ejsakura, sys386f, sys386f, seibuspi_state, sys386f, ROT0, "Seibu Kaihatsu", "E-Jan Sakurasou (Japan, SYS386F V1.2)", MACHINE_SUPPORTS_SAVE )
GAME( 1999, ejsakura, 0, sys386f, ejsakura, seibuspi_state, sys386f, ROT0, "Seibu Kaihatsu", "E-Jan Sakurasou (Japan, SYS386F V2.0)", MACHINE_SUPPORTS_SAVE )
GAME( 1999, ejsakura12, ejsakura, sys386f, ejsakura, seibuspi_state, sys386f, ROT0, "Seibu Kaihatsu", "E-Jan Sakurasou (Japan, SYS386F V1.2)", MACHINE_SUPPORTS_SAVE )

View File

@ -186,12 +186,14 @@ fefc34a - start of mem_size, which queries ECC registers for each memory board
#include "machine/bankdev.h"
#include "machine/nvram.h"
#include "bus/rs232/rs232.h"
#include "bus/sunkbd/sunkbd.h"
#define TIMEKEEPER_TAG "timekpr"
#define SCC1_TAG "scc1"
#define SCC2_TAG "scc2"
#define RS232A_TAG "rs232a"
#define RS232B_TAG "rs232b"
#define KEYBOARD_TAG "keyboard"
// page table entry constants
#define PM_VALID (0x80000000) // page is valid
@ -992,6 +994,11 @@ static MACHINE_CONFIG_START( sun3, sun3_state )
MCFG_TIMER_DRIVER_ADD_PERIODIC("timer", sun3_state, sun3_timer, attotime::from_hz(100))
MCFG_SCC8530_ADD(SCC1_TAG, XTAL_4_9152MHz, 0, 0, 0, 0)
MCFG_Z80SCC_OUT_TXDA_CB(DEVWRITELINE(KEYBOARD_TAG, sun_keyboard_port_device, write_txd))
MCFG_SUNKBD_PORT_ADD(KEYBOARD_TAG, default_sun_keyboard_devices, "type3hle")
MCFG_SUNKBD_RXD_HANDLER(DEVWRITELINE(SCC1_TAG, z80scc_device, rxa_w))
MCFG_SCC8530_ADD(SCC2_TAG, XTAL_4_9152MHz, 0, 0, 0, 0)
MCFG_Z80SCC_OUT_TXDA_CB(DEVWRITELINE(RS232A_TAG, rs232_port_device, write_txd))
MCFG_Z80SCC_OUT_TXDB_CB(DEVWRITELINE(RS232B_TAG, rs232_port_device, write_txd))
@ -1089,6 +1096,11 @@ static MACHINE_CONFIG_START( sun3_50, sun3_state )
MCFG_ADDRESS_MAP_BANK_STRIDE(0x80000000)
MCFG_SCC8530_ADD(SCC1_TAG, XTAL_4_9152MHz, 0, 0, 0, 0)
MCFG_Z80SCC_OUT_TXDA_CB(DEVWRITELINE(KEYBOARD_TAG, sun_keyboard_port_device, write_txd))
MCFG_SUNKBD_PORT_ADD(KEYBOARD_TAG, default_sun_keyboard_devices, "type3hle")
MCFG_SUNKBD_RXD_HANDLER(DEVWRITELINE(SCC1_TAG, z80scc_device, rxa_w))
MCFG_SCC8530_ADD(SCC2_TAG, XTAL_4_9152MHz, 0, 0, 0, 0)
MCFG_Z80SCC_OUT_TXDA_CB(DEVWRITELINE(RS232A_TAG, rs232_port_device, write_txd))
MCFG_Z80SCC_OUT_TXDB_CB(DEVWRITELINE(RS232B_TAG, rs232_port_device, write_txd))

View File

@ -1971,7 +1971,7 @@ static MACHINE_CONFIG_START( sun4, sun4_state )
MCFG_Z80SCC_OUT_INT_CB(WRITELINE(sun4_state, scc1_int))
MCFG_Z80SCC_OUT_TXDA_CB(DEVWRITELINE(KEYBOARD_TAG, sun_keyboard_port_device, write_txd))
MCFG_SUNKBD_PORT_ADD(KEYBOARD_TAG, default_sun_keyboard_devices, "sparckbd")
MCFG_SUNKBD_PORT_ADD(KEYBOARD_TAG, default_sun_keyboard_devices, "type4hle")
MCFG_SUNKBD_RXD_HANDLER(DEVWRITELINE(SCC1_TAG, z80scc_device, rxa_w))
// RS232 serial ports
@ -2036,7 +2036,7 @@ static MACHINE_CONFIG_START( sun4c, sun4_state )
MCFG_Z80SCC_OUT_INT_CB(WRITELINE(sun4_state, scc1_int))
MCFG_Z80SCC_OUT_TXDA_CB(DEVWRITELINE(KEYBOARD_TAG, sun_keyboard_port_device, write_txd))
MCFG_SUNKBD_PORT_ADD(KEYBOARD_TAG, default_sun_keyboard_devices, "sparckbd")
MCFG_SUNKBD_PORT_ADD(KEYBOARD_TAG, default_sun_keyboard_devices, "type5hle")
MCFG_SUNKBD_RXD_HANDLER(DEVWRITELINE(SCC1_TAG, z80scc_device, rxa_w))
// RS232 serial ports

View File

@ -164,6 +164,7 @@ public:
TIMER_CALLBACK_MEMBER(bbc_tape_timer_cb);
DECLARE_WRITE_LINE_MEMBER(write_acia_clock);
DECLARE_WRITE_LINE_MEMBER(bbcb_acia6850_irq_w);
DECLARE_WRITE_LINE_MEMBER(adlc_irq_w);
DECLARE_WRITE_LINE_MEMBER(econet_clk_w);
DECLARE_WRITE8_MEMBER(bbcb_via_system_write_porta);
DECLARE_WRITE8_MEMBER(bbcb_via_system_write_portb);
@ -336,9 +337,12 @@ public: // HACK FOR MC6845
int m_MC146818_CE; // 6522 port b bit 6
int m_via_system_porta;
// interrupt state
int m_via_system_irq;
int m_via_user_irq;
int m_acia_irq;
int m_adlc_irq;
int m_column; // this is a counter in the keyboard circuit

View File

@ -38,8 +38,8 @@ public:
m_fdc(*this, "mb8877"),
m_ram(*this, RAM_TAG),
m_ieee(*this, IEEE488_TAG),
m_floppy0(*this, "mb8877:0:525ssdd"),
m_floppy1(*this, "mb8877:1:525ssdd"),
m_floppy0(*this, "mb8877:0"),
m_floppy1(*this, "mb8877:1"),
m_keyb_row0(*this, "ROW0"),
m_keyb_row1(*this, "ROW1"),
m_keyb_row2(*this, "ROW2"),
@ -95,8 +95,8 @@ public:
required_device<mb8877_t> m_fdc;
required_device<ram_device> m_ram;
required_device<ieee488_device> m_ieee;
required_device<floppy_image_device> m_floppy0;
required_device<floppy_image_device> m_floppy1;
required_device<floppy_connector> m_floppy0;
required_device<floppy_connector> m_floppy1;
protected:
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;

View File

@ -28,7 +28,9 @@ public:
m_oki1(*this, "oki1"),
m_oki2(*this, "oki2"),
m_gfxdecode(*this, "gfxdecode"),
m_palette(*this, "palette")
m_palette(*this, "palette"),
m_key(*this, "KEY"),
m_special(*this, "SPECIAL")
{ }
required_device<cpu_device> m_maincpu;
@ -45,6 +47,9 @@ public:
required_device<gfxdecode_device> m_gfxdecode;
required_device<palette_device> m_palette;
optional_ioport_array<5> m_key;
optional_ioport m_special;
int m_z80_prg_transfer_pos;
int m_z80_lastbank;
UINT8 m_sb_coin_latch;

View File

@ -24,7 +24,9 @@
void bbc_state::check_interrupts()
{
m_maincpu->set_input_line(M6502_IRQ_LINE, m_via_system_irq || m_via_user_irq || m_acia_irq || m_ACCCON_IRR);
int irq = (m_via_system_irq || m_via_user_irq || m_acia_irq || m_ACCCON_IRR) ? ASSERT_LINE : CLEAR_LINE;
m_maincpu->set_input_line(M6502_IRQ_LINE, irq);
}
/*************************
@ -1344,6 +1346,14 @@ WRITE_LINE_MEMBER( bbc_state::bbc_txd_w )
}
WRITE_LINE_MEMBER( bbc_state::bbcb_acia6850_irq_w )
{
m_acia_irq = state;
check_interrupts();
}
void bbc_state::BBC_Cassette_motor(unsigned char status)
{
if (status)

View File

@ -546,7 +546,7 @@ TIMER_CALLBACK_MEMBER(opwolf_state::opwolf_timer_callback)
m_cchip_ram[0x1a] = 0;
m_cchip_ram[0x7a] = 1; // Signal command complete
logerror("Signal level command complete\n");
//logerror("Signal level command complete\n");
}
m_current_cmd = 0;
@ -867,7 +867,7 @@ TIMER_CALLBACK_MEMBER(opwolf_state::cchip_timer)
// starts the 'WARNING' sequences for the boss.
else if (m_cchip_ram[0x1b] == 0x2)
{
if (m_triggeredLevel2==0)
if (m_triggeredLevel2==0 && m_cchip_ram[0x5f]==0) // Don't write unless 68K is ready (0 at 0x5f)
{
m_cchip_ram[0x5f] = 4; // 0xBE at 68K side
m_triggeredLevel2=1;
@ -879,6 +879,7 @@ TIMER_CALLBACK_MEMBER(opwolf_state::cchip_timer)
{
// Signal end of level
m_cchip_ram[0x32] = 1;
m_cchip_ram[0x5d] = 0; // acknowledge 68K command
}
}
else if (m_cchip_ram[0x1b] == 0x4)
@ -886,10 +887,11 @@ TIMER_CALLBACK_MEMBER(opwolf_state::cchip_timer)
m_cchip_ram[0x32] = 1;
// When level 4 (powder magazine) is complete the c-chip triggers an explosion animation.
if (m_triggeredLevel4==0)
if (m_triggeredLevel4==0 && m_cchip_ram[0x5f]==0) // Don't write unless 68K is ready (0 at 0x5f))
{
m_cchip_ram[0x5f]=10;
m_triggeredLevel4=1;
m_triggeredLevel4=1;
}
}
else
{
@ -905,21 +907,21 @@ TIMER_CALLBACK_MEMBER(opwolf_state::cchip_timer)
if (m_cchip_ram[0x1c] == 0 && m_cchip_ram[0x1d] == 0)
{
// Compare code at 0x96DC in prototype with 0xC3A2 in protected version
if (m_cchip_ram[0x1b] == 0x1 && m_triggeredLevel1b==0)
if (m_cchip_ram[0x1b] == 0x1 && m_triggeredLevel1b==0 && m_cchip_ram[0x5f]==0) // Don't write unless 68K is ready (0 at 0x5f))
{
m_cchip_ram[0x5f]=7;
m_triggeredLevel1b=1;
}
// Compare code at 0x96BC in prototype with 0xC3B2 in protected version
if (m_cchip_ram[0x1b] == 0x3 && m_triggeredLevel3b==0)
if (m_cchip_ram[0x1b] == 0x3 && m_triggeredLevel3b==0 && m_cchip_ram[0x5f]==0) // Don't write unless 68K is ready (0 at 0x5f))
{
m_cchip_ram[0x5f]=8;
m_triggeredLevel3b=1;
}
// Compare code at 0x96BC in prototype with 0xC3C8 in protected version
if ((m_cchip_ram[0x1b] != 0x1 && m_cchip_ram[0x1b] != 0x3) && m_triggeredLevel13b==0)
if ((m_cchip_ram[0x1b] != 0x1 && m_cchip_ram[0x1b] != 0x3) && m_triggeredLevel13b==0 && m_cchip_ram[0x5f]==0) // Don't write unless 68K is ready (0 at 0x5f))
{
m_cchip_ram[0x5f]=9;
m_triggeredLevel13b=1;
@ -934,14 +936,15 @@ TIMER_CALLBACK_MEMBER(opwolf_state::cchip_timer)
if (m_cchip_ram[0x1b] == 0x2)
{
// (Note: it's correct that 25 decimal is represented as 0x25 in hex here).
if (((m_cchip_ram[0x1d]<<8) + m_cchip_ram[0x1c])<0x25 && m_triggeredLevel2b==1 && m_triggeredLevel2c==0)
int numMen=(m_cchip_ram[0x1d]<<8) + m_cchip_ram[0x1c];
if (numMen<0x25 && m_triggeredLevel2b==1 && m_triggeredLevel2c==0 && m_cchip_ram[0x5f]==0) // Don't write unless 68K is ready (0 at 0x5f))
{
m_cchip_ram[0x5f]=6;
m_triggeredLevel2c=1;
}
// (Note: it's correct that 45 decimal is represented as 0x45 in hex here).
if (((m_cchip_ram[0x1d]<<8) + m_cchip_ram[0x1c])<0x45 && m_triggeredLevel2b==0)
if (numMen<0x45 && m_triggeredLevel2b==0 && m_cchip_ram[0x5f]==0) // Don't write unless 68K is ready (0 at 0x5f))
{
m_cchip_ram[0x5f]=5;
m_triggeredLevel2b=1;
@ -1032,7 +1035,7 @@ TIMER_CALLBACK_MEMBER(opwolf_state::cchip_timer)
//-------------------------------------------------------------------------------------------------
// Start of level 7 - should trigger '1' in level thread table (compare 0xC164 in protected to 0x9468 in unprotected)
if (m_cchip_ram[0x1b] == 0x7 && m_triggeredLevel7==0)
if (m_cchip_ram[0x1b] == 0x7 && m_triggeredLevel7==0 && m_cchip_ram[0x5f]==0) // Don't write unless 68K is ready (0 at 0x5f))
{
m_triggeredLevel7 = 1;
m_cchip_ram[0x5f] = 1;
@ -1041,7 +1044,7 @@ TIMER_CALLBACK_MEMBER(opwolf_state::cchip_timer)
//-------------------------------------------------------------------------------------------------
// Start of level 8 - should trigger '2' in level thread table (compare 0xC18E in protected to 0x9358 in unprotected)
// This controls the 'zoom in helicopters' enemy
if (m_cchip_ram[0x1b] == 0x8 && m_triggeredLevel8==0)
if (m_cchip_ram[0x1b] == 0x8 && m_triggeredLevel8==0 && m_cchip_ram[0x5f]==0) // Don't write unless 68K is ready (0 at 0x5f))
{
m_triggeredLevel8 = 1;
m_cchip_ram[0x5f] = 2;
@ -1050,7 +1053,7 @@ TIMER_CALLBACK_MEMBER(opwolf_state::cchip_timer)
//-------------------------------------------------------------------------------------------------
// Start of level 9 - should trigger '3' in level thread table (compare 0xC1B0 in protected to 0x9500 in unprotected)
// This controls the 'zoom in helicopters' enemy
if (m_cchip_ram[0x1b] == 0x9 && m_triggeredLevel9==0)
if (m_cchip_ram[0x1b] == 0x9 && m_triggeredLevel9==0 && m_cchip_ram[0x5f]==0) // Don't write unless 68K is ready (0 at 0x5f))
{
m_triggeredLevel9 = 1;
m_cchip_ram[0x5f] = 3;

View File

@ -221,13 +221,13 @@ WRITE8_MEMBER( osborne1_state::video_pia_port_b_w )
if (BIT(data, 6))
{
m_fdc->set_floppy(m_floppy0);
m_floppy0->mon_w(0);
m_fdc->set_floppy(m_floppy0->get_device());
m_floppy0->get_device()->mon_w(0);
}
else if (BIT(data, 7))
{
m_fdc->set_floppy(m_floppy1);
m_floppy1->mon_w(0);
m_fdc->set_floppy(m_floppy1->get_device());
m_floppy1->get_device()->mon_w(0);
}
else
{

View File

@ -226,8 +226,8 @@ victor_9000_fdc_t::victor_9000_fdc_t(const machine_config &mconfig, const char *
m_via4(*this, M6522_4_TAG),
m_via5(*this, M6522_5_TAG),
m_via6(*this, M6522_6_TAG),
m_floppy0(*this, I8048_TAG":0:525qd"),
m_floppy1(*this, I8048_TAG":1:525qd"),
m_floppy0(*this, I8048_TAG":0"),
m_floppy1(*this, I8048_TAG":1"),
m_gcr_rom(*this, "gcr"),
m_da(0),
m_da0(0),
@ -321,11 +321,17 @@ void victor_9000_fdc_t::device_reset()
m_via6->reset();
// set floppy callbacks
m_floppy0->setup_load_cb(floppy_image_device::load_cb(FUNC(victor_9000_fdc_t::load0_cb), this));
m_floppy0->setup_unload_cb(floppy_image_device::unload_cb(FUNC(victor_9000_fdc_t::unload0_cb), this));
if (m_floppy0->get_device())
{
m_floppy0->get_device()->setup_load_cb(floppy_image_device::load_cb(FUNC(victor_9000_fdc_t::load0_cb), this));
m_floppy0->get_device()->setup_unload_cb(floppy_image_device::unload_cb(FUNC(victor_9000_fdc_t::unload0_cb), this));
}
m_floppy1->setup_load_cb(floppy_image_device::load_cb(FUNC(victor_9000_fdc_t::load1_cb), this));
m_floppy1->setup_unload_cb(floppy_image_device::unload_cb(FUNC(victor_9000_fdc_t::unload1_cb), this));
if (m_floppy1->get_device())
{
m_floppy1->get_device()->setup_load_cb(floppy_image_device::load_cb(FUNC(victor_9000_fdc_t::load1_cb), this));
m_floppy1->get_device()->setup_unload_cb(floppy_image_device::unload_cb(FUNC(victor_9000_fdc_t::unload1_cb), this));
}
}
@ -491,16 +497,16 @@ WRITE8_MEMBER( victor_9000_fdc_t::floppy_p2_w )
m_start0 = start0;
m_stop0 = stop0;
m_sel0 = sel0;
//update_spindle_motor(m_floppy0, t_tach0, m_start0, m_stop0, m_sel0, m_da0);
//update_spindle_motor(m_floppy0->get_device(), t_tach0, m_start0, m_stop0, m_sel0, m_da0);
m_start1 = start1;
m_stop1 = stop1;
m_sel1 = sel1;
//update_spindle_motor(m_floppy1, t_tach1, m_start1, m_stop1, m_sel1, m_da1);
//update_spindle_motor(m_floppy1->get_device(), t_tach1, m_start1, m_stop1, m_sel1, m_da1);
checkpoint();
if (!m_floppy0->mon_r() || !m_floppy1->mon_r()) {
if ((m_floppy0->get_device() && !m_floppy0->get_device()->mon_r()) || (m_floppy1->get_device() && !m_floppy1->get_device()->mon_r())) {
if(cur_live.state == IDLE) {
live_start();
}
@ -610,8 +616,8 @@ WRITE8_MEMBER( victor_9000_fdc_t::da_w )
{
live_sync();
m_da = data;
update_spindle_motor(m_floppy0, t_tach0, m_start0, m_stop0, m_sel0, m_da0);
update_spindle_motor(m_floppy1, t_tach1, m_start1, m_stop1, m_sel1, m_da1);
if (m_floppy0->get_device()) update_spindle_motor(m_floppy0->get_device(), t_tach0, m_start0, m_stop0, m_sel0, m_da0);
if (m_floppy1->get_device()) update_spindle_motor(m_floppy1->get_device(), t_tach1, m_start1, m_stop1, m_sel1, m_da1);
checkpoint();
live_run();
}
@ -657,8 +663,11 @@ WRITE8_MEMBER( victor_9000_fdc_t::via4_pa_w )
m_l0ms = data & 0x0f;
{ // HACK to bypass SCP
m_floppy0->mon_w((m_l0ms == 0xf) ? 1 : 0);
m_floppy0->set_rpm(victor9k_format::get_rpm(m_side, m_floppy0->get_cyl()));
if (m_floppy0->get_device())
{
m_floppy0->get_device()->mon_w((m_l0ms == 0xf) ? 1 : 0);
m_floppy0->get_device()->set_rpm(victor9k_format::get_rpm(m_side, m_floppy0->get_device()->get_cyl()));
}
m_rdy0 = (m_l0ms == 0xf) ? 0 : 1;
m_via5->write_ca2(m_rdy0);
}
@ -670,7 +679,7 @@ WRITE8_MEMBER( victor_9000_fdc_t::via4_pa_w )
if (m_st0 != st0)
{
live_sync();
update_stepper_motor(m_floppy0, m_stp0, st0, m_st0);
if (m_floppy0->get_device()) update_stepper_motor(m_floppy0->get_device(), m_stp0, st0, m_st0);
m_st0 = st0;
checkpoint();
live_run();
@ -717,8 +726,11 @@ WRITE8_MEMBER( victor_9000_fdc_t::via4_pb_w )
m_l1ms = data & 0x0f;
{ // HACK to bypass SCP
m_floppy1->mon_w((m_l1ms == 0xf) ? 1 : 0);
m_floppy1->set_rpm(victor9k_format::get_rpm(m_side, m_floppy1->get_cyl()));
if (m_floppy1->get_device())
{
m_floppy1->get_device()->mon_w((m_l1ms == 0xf) ? 1 : 0);
m_floppy1->get_device()->set_rpm(victor9k_format::get_rpm(m_side, m_floppy1->get_device()->get_cyl()));
}
m_rdy1 = (m_l1ms == 0xf) ? 0 : 1;
m_via5->write_cb2(m_rdy1);
}
@ -730,7 +742,7 @@ WRITE8_MEMBER( victor_9000_fdc_t::via4_pb_w )
if (m_st1 != st1)
{
live_sync();
update_stepper_motor(m_floppy1, m_stp1, st1, m_st1);
if (m_floppy1->get_device()) update_stepper_motor(m_floppy1->get_device(), m_stp1, st1, m_st1);
m_st1 = st1;
checkpoint();
live_run();
@ -830,18 +842,18 @@ READ8_MEMBER( victor_9000_fdc_t::via6_pa_r )
*/
if (LOG_VIA) logerror("%s %s TRK0D0 %u TRK0D1 %u SYNC %u\n", machine().time().as_string(), machine().describe_context(), m_floppy0->trk00_r(), m_floppy1->trk00_r(), checkpoint_live.sync);
if (LOG_VIA) logerror("%s %s TRK0D0 %u TRK0D1 %u SYNC %u\n", machine().time().as_string(), machine().describe_context(), m_floppy0->get_device() ? m_floppy0->get_device()->trk00_r() : 0, m_floppy1->get_device() ? m_floppy1->get_device()->trk00_r() : 0, checkpoint_live.sync);
UINT8 data = 0;
// track 0 drive A sense
data |= m_floppy0->trk00_r() << 1;
data |= (m_floppy0->get_device() ? m_floppy0->get_device()->trk00_r() : 0) << 1;
// track 0 drive B sense
data |= m_floppy1->trk00_r() << 3;
data |= (m_floppy1->get_device() ? m_floppy1->get_device()->trk00_r() : 0) << 3;
// write protect sense
data |= (m_drive ? m_floppy1->wpt_r() : m_floppy0->wpt_r()) << 6;
data |= (m_drive ? (m_floppy1->get_device() ? m_floppy1->get_device()->wpt_r() : 0) : (m_floppy0->get_device() ? m_floppy0->get_device()->wpt_r() : 0)) << 6;
// disk sync detect
data |= checkpoint_live.sync << 7;
@ -888,8 +900,8 @@ WRITE8_MEMBER( victor_9000_fdc_t::via6_pa_w )
m_side = side;
cur_live.side = side;
m_floppy0->ss_w(side);
m_floppy1->ss_w(side);
if (m_floppy0->get_device()) m_floppy0->get_device()->ss_w(side);
if (m_floppy1->get_device()) m_floppy1->get_device()->ss_w(side);
m_drive = drive;
cur_live.drive = drive;
@ -927,10 +939,10 @@ READ8_MEMBER( victor_9000_fdc_t::via6_pb_r )
data |= m_rdy1 << 1;
// door B sense
data |= (m_floppy1->exists() ? 0 : 1) << 3;
data |= ((m_floppy1->get_device() && m_floppy1->get_device()->exists()) ? 0 : 1) << 3;
// door A sense
data |= (m_floppy0->exists() ? 0 : 1) << 4;
data |= ((m_floppy0->get_device() && m_floppy0->get_device()->exists()) ? 0 : 1) << 4;
// single/double sided jumper
//data |= 0x20;
@ -977,10 +989,10 @@ WRITE8_MEMBER( victor_9000_fdc_t::via6_pb_w )
live_sync();
m_stp0 = stp0;
update_stepper_motor(m_floppy0, m_stp0, m_st0, m_st0);
if (m_floppy0->get_device()) update_stepper_motor(m_floppy0->get_device(), m_stp0, m_st0, m_st0);
m_stp1 = stp1;
update_stepper_motor(m_floppy1, m_stp1, m_st1, m_st1);
if (m_floppy1->get_device()) update_stepper_motor(m_floppy1->get_device(), m_stp1, m_st1, m_st1);
if (LOG_VIA) logerror("%s %s STP0 %u STP1 %u\n", machine().time().as_string(), machine().describe_context(), stp0, stp1);
@ -1045,7 +1057,7 @@ WRITE8_MEMBER( victor_9000_fdc_t::cs7_w )
floppy_image_device* victor_9000_fdc_t::get_floppy()
{
return m_drive ? m_floppy1 : m_floppy0;
return m_drive ? m_floppy1->get_device() : m_floppy0->get_device();
}
void victor_9000_fdc_t::live_start()

View File

@ -159,8 +159,8 @@ private:
required_device<via6522_device> m_via4;
required_device<via6522_device> m_via5;
required_device<via6522_device> m_via6;
required_device<floppy_image_device> m_floppy0;
required_device<floppy_image_device> m_floppy1;
required_device<floppy_connector> m_floppy0;
required_device<floppy_connector> m_floppy1;
required_memory_region m_gcr_rom;
void update_stepper_motor(floppy_image_device *floppy, int stp, int old_st, int st);