summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--hash/ibm5170.xml106
-rw-r--r--hash/mikro80.xml12
-rw-r--r--hash/smc777.xml34
-rw-r--r--scripts/src/bus.lua2
-rw-r--r--scripts/src/netlist.lua30
-rw-r--r--scripts/target/mame/arcade.lua4
-rw-r--r--scripts/target/mame/nl.lua43
-rw-r--r--src/devices/bus/a2bus/cmsscsi.cpp247
-rw-r--r--src/devices/bus/a2bus/cmsscsi.h61
-rw-r--r--src/devices/bus/odyssey2/4in1.cpp2
-rw-r--r--src/devices/bus/odyssey2/4in1.h2
-rw-r--r--src/devices/cpu/mcs48/mcs48.cpp547
-rw-r--r--src/devices/cpu/mcs48/mcs48.h483
-rw-r--r--src/devices/cpu/upd78k/upd78k1d.cpp2
-rw-r--r--src/devices/cpu/upd78k/upd78k3d.cpp2
-rw-r--r--src/devices/machine/icm7170.cpp140
-rw-r--r--src/devices/machine/icm7170.h1
-rw-r--r--src/devices/video/epic12.cpp63
-rw-r--r--src/emu/debug/debughlp.cpp8
-rw-r--r--src/emu/screen.cpp51
-rw-r--r--src/emu/screen.h1
-rw-r--r--src/emu/video.cpp5
-rw-r--r--src/frontend/mame/audit.cpp11
-rw-r--r--src/lib/netlist/build/makefile12
-rw-r--r--src/lib/netlist/core/analog.h5
-rw-r--r--src/lib/netlist/core/base_objects.h3
-rw-r--r--src/lib/netlist/core/core_device.h130
-rw-r--r--src/lib/netlist/core/device.h124
-rw-r--r--src/lib/netlist/core/exec.h120
-rw-r--r--src/lib/netlist/core/nets.h119
-rw-r--r--src/lib/netlist/core/param.h67
-rw-r--r--src/lib/netlist/devices/net_lib.h21
-rw-r--r--src/lib/netlist/generated/static_solvers.cpp8267
-rw-r--r--src/lib/netlist/macro/nlm_base_lib.cpp (renamed from src/lib/netlist/macro/nlm_base.cpp)19
-rw-r--r--src/lib/netlist/macro/nlm_base_lib.h (renamed from src/lib/netlist/macro/nlm_base.h)2
-rw-r--r--src/lib/netlist/macro/nlm_cd4xxx_lib.cpp (renamed from src/lib/netlist/macro/nlm_cd4xxx.cpp)2
-rw-r--r--src/lib/netlist/macro/nlm_cd4xxx_lib.h (renamed from src/lib/netlist/macro/nlm_cd4xxx.h)0
-rw-r--r--src/lib/netlist/macro/nlm_mc3340.h34
-rw-r--r--src/lib/netlist/macro/nlm_opamp_lib.cpp (renamed from src/lib/netlist/macro/nlm_opamp.cpp)4
-rw-r--r--src/lib/netlist/macro/nlm_opamp_lib.h (renamed from src/lib/netlist/macro/nlm_opamp.h)3
-rw-r--r--src/lib/netlist/macro/nlm_otheric_lib.cpp (renamed from src/lib/netlist/macro/nlm_other.cpp)0
-rw-r--r--src/lib/netlist/macro/nlm_otheric_lib.h (renamed from src/lib/netlist/macro/nlm_other.h)0
-rw-r--r--src/lib/netlist/macro/nlm_roms_lib.cpp (renamed from src/lib/netlist/macro/nlm_roms.cpp)2
-rw-r--r--src/lib/netlist/macro/nlm_roms_lib.h (renamed from src/lib/netlist/macro/nlm_roms.h)0
-rw-r--r--src/lib/netlist/macro/nlm_ttl74xx_lib.cpp (renamed from src/lib/netlist/macro/nlm_ttl74xx.cpp)2
-rw-r--r--src/lib/netlist/macro/nlm_ttl74xx_lib.h (renamed from src/lib/netlist/macro/nlm_ttl74xx.h)0
-rw-r--r--src/lib/netlist/nl_base.cpp83
-rw-r--r--src/lib/netlist/nl_base.h493
-rw-r--r--src/lib/netlist/nl_parser.cpp24
-rw-r--r--src/lib/netlist/nl_parser.h5
-rw-r--r--src/lib/netlist/plib/pstream.h36
-rw-r--r--src/lib/netlist/plib/ptokenizer.cpp7
-rw-r--r--src/lib/netlist/plib/ptokenizer.h5
-rw-r--r--src/mame/audio/nl_armora.cpp1
-rw-r--r--src/mame/audio/nl_barrier.cpp1
-rw-r--r--src/mame/audio/nl_boxingb.cpp2
-rw-r--r--src/mame/audio/nl_carpolo.cpp1
-rw-r--r--src/mame/audio/nl_fireone.cpp191
-rw-r--r--src/mame/audio/nl_ripoff.cpp2
-rw-r--r--src/mame/audio/nl_solarq.cpp1
-rw-r--r--src/mame/audio/nl_spacewar.cpp1
-rw-r--r--src/mame/audio/nl_starcas.cpp1
-rw-r--r--src/mame/audio/nl_starcrus.cpp1
-rw-r--r--src/mame/audio/nl_starfire.cpp437
-rw-r--r--src/mame/audio/nl_starfire.h10
-rw-r--r--src/mame/audio/nl_sundance.cpp1
-rw-r--r--src/mame/audio/nl_tailg.cpp1
-rw-r--r--src/mame/audio/nl_tankbatt.cpp1
-rw-r--r--src/mame/audio/nl_warrior.cpp1
-rw-r--r--src/mame/audio/pinsnd88.cpp274
-rw-r--r--src/mame/audio/pinsnd88.h74
-rw-r--r--src/mame/drivers/apple2e.cpp2
-rw-r--r--src/mame/drivers/apple2gs.cpp7
-rw-r--r--src/mame/drivers/champbas.cpp62
-rw-r--r--src/mame/drivers/generalplus_gpl16250_nand.cpp77
-rw-r--r--src/mame/drivers/midwunit.cpp7
-rw-r--r--src/mame/drivers/mikro80.cpp19
-rw-r--r--src/mame/drivers/mpu4vid.cpp191
-rw-r--r--src/mame/drivers/peoplepc.cpp52
-rw-r--r--src/mame/drivers/qvt70.cpp32
-rw-r--r--src/mame/drivers/raiden_ms.cpp189
-rw-r--r--src/mame/drivers/s11.cpp4
-rw-r--r--src/mame/drivers/s11b.cpp48
-rw-r--r--src/mame/drivers/segattl.cpp4
-rw-r--r--src/mame/drivers/starfire.cpp196
-rw-r--r--src/mame/drivers/vtech1.cpp175
-rw-r--r--src/mame/includes/mikro80.h6
-rw-r--r--src/mame/includes/s11.h3
-rw-r--r--src/mame/includes/s11b.h2
-rw-r--r--src/mame/includes/starfire.h58
-rw-r--r--src/mame/machine/midwayic.cpp65
-rw-r--r--src/mame/machine/midwayic.h20
-rw-r--r--src/mame/machine/midwunit.cpp4
-rw-r--r--src/mame/machine/mikro80.cpp9
-rw-r--r--src/mame/machine/mpu4.cpp3
-rw-r--r--src/mame/mame.lst12
-rw-r--r--src/mame/nl.lst11
97 files changed, 12003 insertions, 1702 deletions
diff --git a/hash/ibm5170.xml b/hash/ibm5170.xml
index 025ae2c7317..d6703fe5203 100644
--- a/hash/ibm5170.xml
+++ b/hash/ibm5170.xml
@@ -8964,6 +8964,58 @@ license:CC0
</part>
</software>
+ <software name="aitd2us" cloneof="aitd2">
+ <description>Alone in the Dark 2 (USA)</description>
+ <year>1994</year>
+ <publisher>IĀ·Motion</publisher>
+ <info name="developer" value="Infogrames" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size = "1474560">
+ <rom name="Alone in the Dark 2 (USA) [I-Motion] [1994] [3.5HD] [Disk 1 of 9].img" size="1474560" crc="3b785f3b" sha1="e1a3743725394545fcc06c3e8291968461782c32"/>
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_3_5">
+ <dataarea name="flop" size = "1474560">
+ <rom name="Alone in the Dark 2 (USA) [I-Motion] [1994] [3.5HD] [Disk 2 of 9].img" size="1474560" crc="b9202a73" sha1="661a943bc7e1d4609f9ce932f4128a149d0ce105"/>
+ </dataarea>
+ </part>
+ <part name="flop3" interface="floppy_3_5">
+ <dataarea name="flop" size = "1474560">
+ <rom name="Alone in the Dark 2 (USA) [I-Motion] [1994] [3.5HD] [Disk 3 of 9].img" size="1474560" crc="cc584179" sha1="e600d6479f9bedfc895527b14f2341ba2ab1008c"/>
+ </dataarea>
+ </part>
+ <part name="flop4" interface="floppy_3_5">
+ <dataarea name="flop" size = "1474560">
+ <rom name="Alone in the Dark 2 (USA) [I-Motion] [1994] [3.5HD] [Disk 4 of 9].img" size="1474560" crc="4f33d82f" sha1="321c23775b437e94cb8fe836bb25572a630b0665"/>
+ </dataarea>
+ </part>
+ <part name="flop5" interface="floppy_3_5">
+ <dataarea name="flop" size = "1474560">
+ <rom name="Alone in the Dark 2 (USA) [I-Motion] [1994] [3.5HD] [Disk 5 of 9].img" size="1474560" crc="ef75d09f" sha1="9d82237451ebdfe70359be84a93c3a2856e3870a"/>
+ </dataarea>
+ </part>
+ <part name="flop6" interface="floppy_3_5">
+ <dataarea name="flop" size = "1474560">
+ <rom name="Alone in the Dark 2 (USA) [I-Motion] [1994] [3.5HD] [Disk 6 of 9].img" size="1474560" crc="f3e11e88" sha1="b6f7b89ea1b9babf941056a23f7be2c9d3c83cf0"/>
+ </dataarea>
+ </part>
+ <part name="flop7" interface="floppy_3_5">
+ <dataarea name="flop" size = "1474560">
+ <rom name="Alone in the Dark 2 (USA) [I-Motion] [1994] [3.5HD] [Disk 7 of 9].img" size="1474560" crc="bef5bb00" sha1="05042ab1d9a3197069381095549781a3908c45de"/>
+ </dataarea>
+ </part>
+ <part name="flop8" interface="floppy_3_5">
+ <dataarea name="flop" size = "1474560">
+ <rom name="Alone in the Dark 2 (USA) [I-Motion] [1994] [3.5HD] [Disk 8 of 9].img" size="1474560" crc="2b82a8f4" sha1="2f1343a5d7636e10858cdc8623fb0d46bde2706c"/>
+ </dataarea>
+ </part>
+ <part name="flop9" interface="floppy_3_5">
+ <dataarea name="flop" size = "1474560">
+ <rom name="Alone in the Dark 2 (USA) [I-Motion] [1994] [3.5HD] [Disk 9 of 9].img" size="1474560" crc="45d8eaa3" sha1="029691f33419c1a5c690ebf98ce813761e39831c"/>
+ </dataarea>
+ </part>
+ </software>
+
<software name="amazon">
<description>Amazon - Guardians of Eden</description>
<year>1992</year>
@@ -11866,11 +11918,11 @@ license:CC0
</software>
<software name="lslvga">
- <description>Leisure Suit Larry 1: In the Land of the Lounge Lizards (VGA release)</description>
+ <description>Leisure Suit Larry 1: In the Land of the Lounge Lizards (3.5", VGA release, v2.1)</description>
<year>1991</year>
<publisher>Sierra On-Line</publisher>
<info name="developer" value="Sierra On-Line" />
- <info name="version" value="2.1" />
+ <info name="version" value="2.1, July 4, 1991" />
<part name="flop1" interface="floppy_3_5">
<dataarea name="flop" size = "1474560">
<rom name="Leisure Suit Larry 1 (VGA release) [Sierra] [1991] [3.5HD] [Disk 1 of 3] (Startup Disk).img" size="1474560" crc="c8caf78b" sha1="88eb7c5442fba643acc15daccebda62a6b5d6aa5"/>
@@ -11888,12 +11940,58 @@ license:CC0
</part>
</software>
+ <software name="lslvgaa" cloneof="lslvga">
+ <description>Leisure Suit Larry 1: In the Land of the Lounge Lizards (3.5", VGA release, v2.0)</description>
+ <year>1991</year>
+ <publisher>Sierra On-Line</publisher>
+ <info name="developer" value="Sierra On-Line" />
+ <info name="version" value="2.0, June 26, 1991" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size = "1474560">
+ <rom name="Leisure Suit Larry 1 (VGA release) (v2.0) [Sierra] [1991] [3.5HD] [Disk 1 of 3] (Startup Disk).img" size="1474560" crc="41a3b667" sha1="1ace473185189cd1aca13702975d0fa006cc3c80"/>
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_3_5">
+ <dataarea name="flop" size = "1474560">
+ <rom name="Leisure Suit Larry 1 (VGA release) (v2.0) [Sierra] [1991] [3.5HD] [Disk 2 of 3] (Disk 1).img" size="1474560" crc="bd041272" sha1="05d0764b2311f8f0a72d16aecc03415d79ebf430"/>
+ </dataarea>
+ </part>
+ <part name="flop3" interface="floppy_3_5">
+ <dataarea name="flop" size = "1474560">
+ <rom name="Leisure Suit Larry 1 (VGA release) (v2.0) [Sierra] [1991] [3.5HD] [Disk 3 of 3] (Disk 2).img" size="1474560" crc="7bcfd73f" sha1="798c2b094f240ff3c52564c1a52fb2b33a9c2dbd"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="lslvga525" cloneof="lslvga">
+ <description>Leisure Suit Larry 1: In the Land of the Lounge Lizards (5.25", VGA release, v2.1)</description>
+ <year>1991</year>
+ <publisher>Sierra On-Line</publisher>
+ <info name="developer" value="Sierra On-Line" />
+ <info name="version" value="2.1, July 4, 1991" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size = "1228800">
+ <rom name="Leisure Suit Larry 1 (VGA release) [Sierra] [1991] [5.25HD] [Disk 1 of 3] (Startup Disk).img" size="1228800" crc="d2c8ff1d" sha1="595a07c61e5156a1e89349b6671bbc83395da3fe"/>
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_3_5">
+ <dataarea name="flop" size = "1228800">
+ <rom name="Leisure Suit Larry 1 (VGA release) [Sierra] [1991] [5.25HD] [Disk 2 of 3] (Disk 1).img" size="1228800" crc="823fe8c1" sha1="b513f7a0dee3a726569342c8ee785a8434a4565f"/>
+ </dataarea>
+ </part>
+ <part name="flop3" interface="floppy_3_5">
+ <dataarea name="flop" size = "1228800">
+ <rom name="Leisure Suit Larry 1 (VGA release) [Sierra] [1991] [5.25HD] [Disk 3 of 3] (Disk 2).img" size="1228800" crc="f852defb" sha1="cc2999277aaad66e01de94db3e314b9d7dfee0f5"/>
+ </dataarea>
+ </part>
+ </software>
+
<software name="lslega" cloneof="lslvga">
- <description>Leisure Suit Larry 1: In the Land of the Lounge Lizards (EGA release)</description>
+ <description>Leisure Suit Larry 1: In the Land of the Lounge Lizards (EGA release, v2.0)</description>
<year>1991</year>
<publisher>Sierra On-Line</publisher>
<info name="developer" value="Sierra On-Line" />
- <info name="version" value="2.0" />
+ <info name="version" value="2.0, July 4, 1991" />
<part name="flop1" interface="floppy_3_5">
<dataarea name="flop" size = "737280">
<rom name="Leisure Suit Larry 1 (EGA release) [Sierra] [1991] [3.5DD] [Disk 1 of 4] (Startup Disk).img" size="737280" crc="58f85d3d" sha1="e893f0463faa25daaf6c3d6904ff8165254137c2"/>
diff --git a/hash/mikro80.xml b/hash/mikro80.xml
index 3fc128b6456..63a23e027c6 100644
--- a/hash/mikro80.xml
+++ b/hash/mikro80.xml
@@ -2,6 +2,9 @@
<!DOCTYPE softwarelist SYSTEM "softwarelist.dtd">
<!--
license:CC0
+
+The general method of loading a tape is to type I, press Return, select Play. When it's finished, type G and press Return to run it.
+
-->
<softwarelist name="mikro80" description="Mikro-80 cassettes">
@@ -9,6 +12,7 @@ license:CC0
<description>Mikro-80 BASIC</description>
<year>1984</year>
<publisher>&lt;unknown&gt;</publisher>
+ <info name="usage" value="I, Play, G" />
<part name="cass1" interface="mikro80_cass">
<dataarea name="cass" size="6665">
<rom name="mikro-80 basic (1984)(-).rk8" size="6665" crc="38d15a6a" sha1="df9e126fa8d118a1ff4b883115b7f10c393a765d"/>
@@ -18,8 +22,10 @@ license:CC0
<software name="basica" cloneof="basic">
<description>Mikro-80 BASIC (Alt)</description>
+ <!-- This loads ok, and signs on as RADIO86-RK basic, then immediately exits back to the monitor -->
<year>1984</year>
<publisher>&lt;unknown&gt;</publisher>
+ <info name="usage" value="I, Play, G" />
<part name="cass1" interface="mikro80_cass">
<dataarea name="cass" size="6665">
<rom name="mikro-80 basic (1984)(-)[a].rk8" size="6665" crc="751a4063" sha1="67fb4fbaefbcbe774413c79e4fecc4626f5a3d76"/>
@@ -29,9 +35,13 @@ license:CC0
<software name="proverki">
<description>Programma Proverki</description>
+ <!-- This does a checksum of a section of RAM, and compares to internal values. It should only be used after loading "basic" above -->
+ <!-- If successful, you get a message in Russian, "END OF WORK. TO RETURN TO THE MONITOR PRESS ANY KEY" -->
+ <!-- In case a failure, you'll get a list of bad blocks -->
+ <!-- Testing method: Start mikro80 in the debugger. Load basic. Load proverki. In the debugger, pc=2800, g -->
<year>19??</year>
<publisher>&lt;unknown&gt;</publisher>
-
+ <info name="usage" value="I, Play, G. See notes in mikro80.xml" />
<part name="cass1" interface="mikro80_cass">
<dataarea name="cass" size="217">
<rom name="programma proverki (19xx)(-).rk8" size="217" crc="d4718cad" sha1="03f466d6ebd7b6c1ffea766461bb8cb13466f085"/>
diff --git a/hash/smc777.xml b/hash/smc777.xml
index 38eadf763d2..2d175253c7b 100644
--- a/hash/smc777.xml
+++ b/hash/smc777.xml
@@ -144,7 +144,7 @@ Known to be dumped, but no longer available: (If you do have any of these please
<part name="flop1" interface="floppy_3_5">
<dataarea name="flop" size="121414">
- <rom name="cpm22.imd" size="121414" crc="02db74fe" sha1="3f27609dd2d17e983bc337a5530e95883140e5b7" offset="0x0000" />
+ <rom name="cpm22.imd" size="121414" crc="02db74fe" sha1="3f27609dd2d17e983bc337a5530e95883140e5b7" />
</dataarea>
</part>
</software>
@@ -157,7 +157,7 @@ Known to be dumped, but no longer available: (If you do have any of these please
<part name="flop1" interface="floppy_3_5">
<dataarea name="flop" size="305328">
- <rom name="develop.1dd" size="305328" crc="13e5971a" sha1="c15d61e00ea2495ef5406a0a6f637ab2746e91cc" offset="0x0000" />
+ <rom name="develop.1dd" size="305328" crc="13e5971a" sha1="c15d61e00ea2495ef5406a0a6f637ab2746e91cc" />
</dataarea>
</part>
</software>
@@ -170,7 +170,7 @@ Known to be dumped, but no longer available: (If you do have any of these please
<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" />
+ <rom name="system 12j.1dd" size="261808" crc="c66e1a07" sha1="44e5ffb697c20f3652d6673885c9824f49a307bb" />
</dataarea>
</part>
</software>
@@ -182,7 +182,7 @@ Known to be dumped, but no longer available: (If you do have any of these please
<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" />
+ <rom name="system 11.1dd" size="305328" crc="fcf54a39" sha1="d5aa09c73cef0cf639ef3adbe6e64a109f883ad6" />
</dataarea>
</part>
</software>
@@ -194,7 +194,7 @@ Known to be dumped, but no longer available: (If you do have any of these please
<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" />
+ <rom name="system 10.1dd" size="305328" crc="89a0c347" sha1="2d3fdacef43d6b89861b90997715a80d784dd2d9" />
</dataarea>
</part>
</software>
@@ -206,7 +206,7 @@ Known to be dumped, but no longer available: (If you do have any of these please
<part name="flop1" interface="floppy_3_5">
<dataarea name="flop" size="211808">
- <rom name="choplifter.1dd" size="211808" crc="bf2ea51c" sha1="4610f7456ca6bd1740b9c98fb3d2bd67aadffb5c" offset="0x0000" />
+ <rom name="choplifter.1dd" size="211808" crc="bf2ea51c" sha1="4610f7456ca6bd1740b9c98fb3d2bd67aadffb5c" />
</dataarea>
</part>
</software>
@@ -219,7 +219,7 @@ Known to be dumped, but no longer available: (If you do have any of these please
<part name="flop1" interface="floppy_3_5">
<dataarea name="flop" size="305328">
- <rom name="strizbh.1dd" size="305328" crc="efa24635" sha1="c2308afeb555197c6d583e6cd46e6c5c5c9b4ea9" offset="0x0000" />
+ <rom name="strizbh.1dd" size="305328" crc="efa24635" sha1="c2308afeb555197c6d583e6cd46e6c5c5c9b4ea9" />
</dataarea>
</part>
</software>
@@ -232,7 +232,7 @@ Known to be dumped, but no longer available: (If you do have any of these please
<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" />
+ <rom name="floppy magazine.1dd" size="305056" crc="44f18e58" sha1="dc4d8bda72d408e53edd4be4f1d9497d9179d35e" />
</dataarea>
</part>
</software>
@@ -246,7 +246,7 @@ Known to be dumped, but no longer available: (If you do have any of these please
<part name="flop1" interface="floppy_3_5">
<dataarea name="flop" size="70352">
- <rom name="yakyuu-kyou (smc-777) [fd].d88" size="70352" crc="3d92559a" sha1="b1d326a8b8e6cd69723686e3a47474539741d9f8" offset="0x0000" />
+ <rom name="yakyuu-kyou (smc-777) [fd].d88" size="70352" crc="3d92559a" sha1="b1d326a8b8e6cd69723686e3a47474539741d9f8" />
</dataarea>
</part>
</software>
@@ -260,7 +260,7 @@ Known to be dumped, but no longer available: (If you do have any of these please
<part name="flop1" interface="floppy_3_5">
<dataarea name="flop" size="305328">
- <rom name="corewars.1dd" size="305328" crc="4bbc1e35" sha1="22d1ba809d69d7e1679842f1d348cc9d6da850c5" offset="0x0000" />
+ <rom name="corewars.1dd" size="305328" crc="4bbc1e35" sha1="22d1ba809d69d7e1679842f1d348cc9d6da850c5" />
</dataarea>
</part>
</software>
@@ -273,7 +273,7 @@ Known to be dumped, but no longer available: (If you do have any of these please
<part name="flop1" interface="floppy_3_5">
<dataarea name="flop" size="305328">
- <rom name="dragon.1dd" size="305328" crc="dc23c4bc" sha1="45c0d8510f660108d20c82ef116e8dfa8b66b9c2" offset="0x0000" />
+ <rom name="dragon.1dd" size="305328" crc="dc23c4bc" sha1="45c0d8510f660108d20c82ef116e8dfa8b66b9c2" />
</dataarea>
</part>
</software>
@@ -287,7 +287,7 @@ Known to be dumped, but no longer available: (If you do have any of these please
<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" />
+ <rom name="dragon (freeware).1dd" size="305328" crc="168925c7" sha1="cf5b4b3f3ae0b77787613c7168eb8cb25dabbe52" />
</dataarea>
</part>
</software -->
@@ -299,7 +299,7 @@ Known to be dumped, but no longer available: (If you do have any of these please
<part name="flop1" interface="floppy_3_5">
<dataarea name="flop" size="305328">
- <rom name="develop.1dd" size="305328" crc="b7605b47" sha1="927d173f5d08c7a0ad178af1c191cba7d5435a05" offset="0x0000" />
+ <rom name="develop.1dd" size="305328" crc="b7605b47" sha1="927d173f5d08c7a0ad178af1c191cba7d5435a05" />
</dataarea>
</part>
</software>
@@ -312,7 +312,7 @@ Known to be dumped, but no longer available: (If you do have any of these please
<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" />
+ <rom name="s-os sword monitor 2.0.1dd" size="305328" crc="27bc0b34" sha1="18840fab993716e7929b6e0600c446d8fba93059" />
</dataarea>
</part>
</software>
@@ -325,7 +325,7 @@ Known to be dumped, but no longer available: (If you do have any of these please
<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" />
+ <rom name="s-os sword monitor 2.2.1dd" size="348848" crc="6e3215ce" sha1="1fffac3db3005e3de750c63ce1285f6b8a40310a" />
</dataarea>
</part>
</software>
@@ -339,7 +339,7 @@ Known to be dumped, but no longer available: (If you do have any of these please
<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" />
+ <rom name="compilation 1.1dd" size="261808" crc="cc7827f5" sha1="8c24ec40cab047cff716d57ce44066709d238f5a" />
</dataarea>
</part>
</software>
@@ -351,7 +351,7 @@ Known to be dumped, but no longer available: (If you do have any of these please
<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" />
+ <rom name="compilation 2.1dd" size="261808" crc="6be3d020" sha1="9398acca8f44c868abc3a837f91c56833962c17f" />
</dataarea>
</part>
</software>
diff --git a/scripts/src/bus.lua b/scripts/src/bus.lua
index caee6d08d12..9c3c3fe2210 100644
--- a/scripts/src/bus.lua
+++ b/scripts/src/bus.lua
@@ -2358,6 +2358,8 @@ if (BUSES["A2BUS"]~=null) then
MAME_DIR .. "src/devices/bus/a2bus/computereyes2.h",
MAME_DIR .. "src/devices/bus/a2bus/byte8251.cpp",
MAME_DIR .. "src/devices/bus/a2bus/byte8251.h",
+ MAME_DIR .. "src/devices/bus/a2bus/cmsscsi.cpp",
+ MAME_DIR .. "src/devices/bus/a2bus/cmsscsi.h",
}
end
diff --git a/scripts/src/netlist.lua b/scripts/src/netlist.lua
index 0d55049d7b3..20c83daf992 100644
--- a/scripts/src/netlist.lua
+++ b/scripts/src/netlist.lua
@@ -50,9 +50,15 @@ project "netlist"
MAME_DIR .. "src/lib/netlist/nl_setup.cpp",
MAME_DIR .. "src/lib/netlist/nl_setup.h",
MAME_DIR .. "src/lib/netlist/nl_types.h",
+ MAME_DIR .. "src/lib/netlist/core/analog.h",
MAME_DIR .. "src/lib/netlist/core/base_objects.h",
+ MAME_DIR .. "src/lib/netlist/core/core_device.h",
+ MAME_DIR .. "src/lib/netlist/core/device.h",
+ MAME_DIR .. "src/lib/netlist/core/exec.h",
MAME_DIR .. "src/lib/netlist/core/logic_family.h",
+ MAME_DIR .. "src/lib/netlist/core/logic.h",
MAME_DIR .. "src/lib/netlist/core/nets.h",
+ MAME_DIR .. "src/lib/netlist/core/object_array.h",
MAME_DIR .. "src/lib/netlist/core/param.h",
MAME_DIR .. "src/lib/netlist/core/setup.h",
MAME_DIR .. "src/lib/netlist/core/state_var.h",
@@ -245,18 +251,18 @@ project "netlist"
MAME_DIR .. "src/lib/netlist/devices/nlid_system.h",
MAME_DIR .. "src/lib/netlist/devices/nlid_proxy.cpp",
MAME_DIR .. "src/lib/netlist/devices/nlid_proxy.h",
- MAME_DIR .. "src/lib/netlist/macro/nlm_base.cpp",
- MAME_DIR .. "src/lib/netlist/macro/nlm_base.h",
- MAME_DIR .. "src/lib/netlist/macro/nlm_ttl74xx.cpp",
- MAME_DIR .. "src/lib/netlist/macro/nlm_ttl74xx.h",
- MAME_DIR .. "src/lib/netlist/macro/nlm_cd4xxx.cpp",
- MAME_DIR .. "src/lib/netlist/macro/nlm_cd4xxx.h",
- MAME_DIR .. "src/lib/netlist/macro/nlm_opamp.cpp",
- MAME_DIR .. "src/lib/netlist/macro/nlm_opamp.h",
- MAME_DIR .. "src/lib/netlist/macro/nlm_other.cpp",
- MAME_DIR .. "src/lib/netlist/macro/nlm_other.h",
- MAME_DIR .. "src/lib/netlist/macro/nlm_roms.cpp",
- MAME_DIR .. "src/lib/netlist/macro/nlm_roms.h",
+ MAME_DIR .. "src/lib/netlist/macro/nlm_base_lib.cpp",
+ MAME_DIR .. "src/lib/netlist/macro/nlm_base_lib.h",
+ MAME_DIR .. "src/lib/netlist/macro/nlm_ttl74xx_lib.cpp",
+ MAME_DIR .. "src/lib/netlist/macro/nlm_ttl74xx_lib.h",
+ MAME_DIR .. "src/lib/netlist/macro/nlm_cd4xxx_lib.cpp",
+ MAME_DIR .. "src/lib/netlist/macro/nlm_cd4xxx_lib.h",
+ MAME_DIR .. "src/lib/netlist/macro/nlm_opamp_lib.cpp",
+ MAME_DIR .. "src/lib/netlist/macro/nlm_opamp_lib.h",
+ MAME_DIR .. "src/lib/netlist/macro/nlm_otheric_lib.cpp",
+ MAME_DIR .. "src/lib/netlist/macro/nlm_otheric_lib.h",
+ MAME_DIR .. "src/lib/netlist/macro/nlm_roms_lib.cpp",
+ MAME_DIR .. "src/lib/netlist/macro/nlm_roms_lib.h",
MAME_DIR .. "src/lib/netlist/generated/static_solvers.cpp",
}
diff --git a/scripts/target/mame/arcade.lua b/scripts/target/mame/arcade.lua
index f464af156e8..4589901ecbe 100644
--- a/scripts/target/mame/arcade.lua
+++ b/scripts/target/mame/arcade.lua
@@ -1950,6 +1950,8 @@ files {
MAME_DIR .. "src/mame/video/gtia.h",
MAME_DIR .. "src/mame/audio/nl_fireone.h",
MAME_DIR .. "src/mame/audio/nl_fireone.cpp",
+ MAME_DIR .. "src/mame/audio/nl_starfire.h",
+ MAME_DIR .. "src/mame/audio/nl_starfire.cpp",
MAME_DIR .. "src/mame/drivers/starfire.cpp",
MAME_DIR .. "src/mame/includes/starfire.h",
MAME_DIR .. "src/mame/video/starfire.cpp",
@@ -4629,6 +4631,8 @@ files {
MAME_DIR .. "src/mame/includes/s11b.h",
MAME_DIR .. "src/mame/drivers/s11c.cpp",
MAME_DIR .. "src/mame/includes/s11c.h",
+ MAME_DIR .. "src/mame/audio/pinsnd88.cpp",
+ MAME_DIR .. "src/mame/audio/pinsnd88.h",
MAME_DIR .. "src/mame/audio/s11c_bg.cpp",
MAME_DIR .. "src/mame/audio/s11c_bg.h",
MAME_DIR .. "src/mame/drivers/s3.cpp",
diff --git a/scripts/target/mame/nl.lua b/scripts/target/mame/nl.lua
index 6cd5fda0016..2c5d6950961 100644
--- a/scripts/target/mame/nl.lua
+++ b/scripts/target/mame/nl.lua
@@ -80,7 +80,10 @@ MACHINES["AY31015"] = true
MACHINES["KB3600"] = true
MACHINES["COM8116"] = true
+MACHINES["TTL7474"] = true
MACHINES["TTL74145"] = true
+MACHINES["TTL74148"] = true
+MACHINES["TTL74153"] = true
MACHINES["TTL74259"] = true
MACHINES["6522VIA"] = true
@@ -187,12 +190,13 @@ files{
MAME_DIR .. "src/mame/audio/nl_kidniki.cpp",
MAME_DIR .. "src/mame/audio/nl_kidniki.h",
- MAME_DIR .. "src/mame/machine/mw8080bw.cpp",
- MAME_DIR .. "src/mame/drivers/mw8080bw.cpp",
- MAME_DIR .. "src/mame/includes/mw8080bw.h",
- MAME_DIR .. "src/mame/audio/mw8080bw.h",
- MAME_DIR .. "src/mame/audio/mw8080bw.cpp",
- MAME_DIR .. "src/mame/video/mw8080bw.cpp",
+ MAME_DIR .. "src/mame/machine/mw8080bw.cpp",
+ MAME_DIR .. "src/mame/drivers/mw8080bw.cpp",
+ MAME_DIR .. "src/mame/includes/mw8080bw.h",
+ MAME_DIR .. "src/mame/audio/mw8080bw.h",
+ MAME_DIR .. "src/mame/audio/mw8080bw.cpp",
+ MAME_DIR .. "src/mame/video/mw8080bw.cpp",
+
MAME_DIR .. "src/mame/audio/nl_gunfight.cpp",
MAME_DIR .. "src/mame/audio/nl_gunfight.h",
MAME_DIR .. "src/mame/audio/nl_280zzzap.cpp",
@@ -291,6 +295,33 @@ files{
MAME_DIR .. "src/mame/machine/nl_tp1983.h",
MAME_DIR .. "src/mame/machine/nl_tp1985.cpp",
MAME_DIR .. "src/mame/machine/nl_tp1985.h",
+
+ MAME_DIR .. "src/mame/audio/nl_starcrus.h",
+ MAME_DIR .. "src/mame/audio/nl_starcrus.cpp",
+ MAME_DIR .. "src/mame/drivers/starcrus.cpp",
+ MAME_DIR .. "src/mame/includes/starcrus.h",
+ MAME_DIR .. "src/mame/video/starcrus.cpp",
+
+ MAME_DIR .. "src/mame/audio/nl_carpolo.h",
+ MAME_DIR .. "src/mame/audio/nl_carpolo.cpp",
+ MAME_DIR .. "src/mame/drivers/carpolo.cpp",
+ MAME_DIR .. "src/mame/includes/carpolo.h",
+ MAME_DIR .. "src/mame/machine/carpolo.cpp",
+ MAME_DIR .. "src/mame/video/carpolo.cpp",
+
+ MAME_DIR .. "src/mame/audio/nl_fireone.h",
+ MAME_DIR .. "src/mame/audio/nl_fireone.cpp",
+ MAME_DIR .. "src/mame/audio/nl_starfire.h",
+ MAME_DIR .. "src/mame/audio/nl_starfire.cpp",
+ MAME_DIR .. "src/mame/drivers/starfire.cpp",
+ MAME_DIR .. "src/mame/includes/starfire.h",
+ MAME_DIR .. "src/mame/video/starfire.cpp",
+
+ MAME_DIR .. "src/mame/audio/nl_starcrus.cpp",
+ MAME_DIR .. "src/mame/audio/nl_starcrus.h",
+ MAME_DIR .. "src/mame/drivers/starcrus.cpp",
+ MAME_DIR .. "src/mame/includes/starcrus.h",
+ MAME_DIR .. "src/mame/video/starcrus.cpp",
-- Skeletons ...
MAME_DIR .. "src/mame/drivers/a1supply.cpp",
diff --git a/src/devices/bus/a2bus/cmsscsi.cpp b/src/devices/bus/a2bus/cmsscsi.cpp
new file mode 100644
index 00000000000..273b922eb78
--- /dev/null
+++ b/src/devices/bus/a2bus/cmsscsi.cpp
@@ -0,0 +1,247 @@
+// license:BSD-3-Clause
+// copyright-holders:R. Belmont
+/*********************************************************************
+
+ cmsscsi.cpp
+
+ Implementation of the CMS SCSI II Card
+
+ Details:
+ ROM is $2000 bytes. The last $800 bytes are 7 slot images at
+ offset (slot*$100). There is no slot 0 image, naturally, so $1800-$18FF
+ is blank.
+
+ The other $1800 bytes of the ROM are banked at $C800. The first $80
+ bytes at $C800 are the first $80 bytes of the 2K SRAM chip regardless
+ of the ROM bank setting. This also means the first $80 bytes of each
+ ROM bank are inaccessible. (Most of the SRAM is also inaccessible)
+
+ $C0(n+8)X space:
+ $0-$7: NCR5380 registers
+ $8: Appears to control SCSI delay time. 1 is shortest, 0 is longest ($FF is second longest, etc)
+ $9: ROM bank at $C800 in the low 2 bits.
+ $A: read/write to the DMA data register on the 5380
+ $B, $C, $D, $E: the jumpers on the card. Not sure yet which is which.
+ $F: Card will not boot if it doesn't return 0.
+
+*********************************************************************/
+
+#include "emu.h"
+#include "cmsscsi.h"
+#include "bus/nscsi/devices.h"
+
+/***************************************************************************
+ PARAMETERS
+***************************************************************************/
+
+//**************************************************************************
+// GLOBAL VARIABLES
+//**************************************************************************
+
+DEFINE_DEVICE_TYPE(A2BUS_CMSSCSI, a2bus_cmsscsi_device, "cmsscsi", "CMS SCSI II Card")
+
+#define SCSI_ROM_REGION "scsi_rom"
+#define SCSI_BUS_TAG "scsibus"
+#define SCSI_5380_TAG "scsibus:7:ncr5380"
+
+ROM_START( scsi )
+ ROM_REGION(0x4000, SCSI_ROM_REGION, 0)
+ ROM_DEFAULT_BIOS("cms3190")
+ ROM_SYSTEM_BIOS( 0, "cms3190", "CMS SCSI BIOS dated 3-1-90" )
+ ROMX_LOAD( "cms scsi ii interface card rom 3-1-90.bin", 0x000000, 0x002000, CRC(9452cc76) SHA1(b981ce644dde479c22d2ba270d472fe3b5d7f3e9), ROM_BIOS(0) )
+
+ ROM_SYSTEM_BIOS( 1, "cms871109", "CMS SCSI BIOS dated 1987-11-09" )
+ ROMX_LOAD( "cms 1987-11-09 scsi.bin", 0x000000, 0x002000, CRC(89d1d917) SHA1(f6028f6f2b16250950297e2ff5317ce463006796), ROM_BIOS(1) )
+ROM_END
+
+/***************************************************************************
+ FUNCTION PROTOTYPES
+***************************************************************************/
+
+//-------------------------------------------------
+// device_add_mconfig - add device configuration
+//-------------------------------------------------
+
+void a2bus_cmsscsi_device::device_add_mconfig(machine_config &config)
+{
+ NSCSI_BUS(config, m_scsibus);
+ NSCSI_CONNECTOR(config, "scsibus:0", default_scsi_devices, nullptr, false);
+ NSCSI_CONNECTOR(config, "scsibus:1", default_scsi_devices, nullptr, false);
+ NSCSI_CONNECTOR(config, "scsibus:2", default_scsi_devices, nullptr, false);
+ NSCSI_CONNECTOR(config, "scsibus:3", default_scsi_devices, nullptr, false);
+ NSCSI_CONNECTOR(config, "scsibus:4", default_scsi_devices, nullptr, false);
+ NSCSI_CONNECTOR(config, "scsibus:5", default_scsi_devices, nullptr, false);
+ NSCSI_CONNECTOR(config, "scsibus:6", default_scsi_devices, "harddisk", false);
+ NSCSI_CONNECTOR(config, "scsibus:7").option_set("ncr5380", NCR5380N);
+}
+
+//-------------------------------------------------
+// rom_region - device-specific ROM region
+//-------------------------------------------------
+
+const tiny_rom_entry *a2bus_cmsscsi_device::device_rom_region() const
+{
+ return ROM_NAME( scsi );
+}
+
+//**************************************************************************
+// LIVE DEVICE
+//**************************************************************************
+
+a2bus_cmsscsi_device::a2bus_cmsscsi_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock) :
+ device_t(mconfig, type, tag, owner, clock),
+ device_a2bus_card_interface(mconfig, *this),
+ m_ncr5380(*this, SCSI_5380_TAG),
+ m_scsibus(*this, SCSI_BUS_TAG), m_rom(nullptr), m_rombank(0)
+{
+}
+
+a2bus_cmsscsi_device::a2bus_cmsscsi_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
+ a2bus_cmsscsi_device(mconfig, A2BUS_CMSSCSI, tag, owner, clock)
+{
+}
+
+//-------------------------------------------------
+// device_start - device-specific startup
+//-------------------------------------------------
+
+void a2bus_cmsscsi_device::device_start()
+{
+ m_rom = device().machine().root_device().memregion(this->subtag(SCSI_ROM_REGION).c_str())->base();
+
+ memset(m_ram, 0, 2048);
+
+ save_item(NAME(m_ram));
+ save_item(NAME(m_rombank));
+}
+
+void a2bus_cmsscsi_device::device_reset()
+{
+ m_rombank = 0;
+}
+
+
+/*-------------------------------------------------
+ read_c0nx - called for reads from this card's c0nx space
+-------------------------------------------------*/
+
+uint8_t a2bus_cmsscsi_device::read_c0nx(uint8_t offset)
+{
+ switch (offset)
+ {
+ case 0:
+ case 1:
+ case 2:
+ case 3:
+ case 4:
+ case 5:
+ case 6:
+ case 7:
+// logerror("Read 5380 @ %x\n", offset);
+ return m_ncr5380->read(offset);
+
+ case 8: // appears to be delay time
+ return 1;
+
+ case 0xa: // read and DACK
+ return m_ncr5380->dma_r();
+
+ case 0xb: //
+ return 0x1;
+
+ case 0xc: //
+ return 0x1;
+
+ case 0xd: //
+ return 0x1;
+
+ case 0xe: //
+ return 0x1;
+
+ case 0xf: // must be 0 to boot
+ return 0;
+
+ default:
+ logerror("Read c0n%x (%s)\n", offset, machine().describe_context().c_str());
+ break;
+ }
+
+ return 0xff;
+}
+
+
+/*-------------------------------------------------
+ write_c0nx - called for writes to this card's c0nx space
+-------------------------------------------------*/
+
+void a2bus_cmsscsi_device::write_c0nx(uint8_t offset, uint8_t data)
+{
+ switch (offset)
+ {
+ case 0:
+ case 1:
+ case 2:
+ case 3:
+ case 4:
+ case 5:
+ case 6:
+ case 7:
+// logerror("%02x to 5380 reg %x\n", data, offset);
+ m_ncr5380->write(offset, data);
+ break;
+
+ case 9:
+ m_rombank = (data & 3) * 0x800;
+ //printf("ROM bank to %x\n", m_rombank);
+ break;
+
+ case 0xa: // write and DACK
+ m_ncr5380->dma_w(data);
+ break;
+
+ default:
+ logerror("Write %02x to c0n%x (%s)\n", data, offset, machine().describe_context().c_str());
+ break;
+ }
+}
+
+/*-------------------------------------------------
+ read_cnxx - called for reads from this card's cnxx space
+-------------------------------------------------*/
+
+uint8_t a2bus_cmsscsi_device::read_cnxx(uint8_t offset)
+{
+ // slot images at $1800 + (slot * 100)
+ return m_rom[offset + (slotno() * 0x100) + 0x1800];
+}
+
+void a2bus_cmsscsi_device::write_cnxx(uint8_t offset, uint8_t data)
+{
+ // there are writes to cn0A, possibly misguided C0nA (bank select?) writes?
+// logerror("Write %02x to cn%02x (%s)\n", data, offset, machine().describe_context());
+}
+
+/*-------------------------------------------------
+ read_c800 - called for reads from this card's c800 space
+-------------------------------------------------*/
+
+uint8_t a2bus_cmsscsi_device::read_c800(uint16_t offset)
+{
+ if (offset < 0x80)
+ {
+ return m_ram[offset];
+ }
+
+ return m_rom[offset + m_rombank];
+}
+
+/*-------------------------------------------------
+ write_c800 - called for writes to this card's c800 space
+-------------------------------------------------*/
+void a2bus_cmsscsi_device::write_c800(uint16_t offset, uint8_t data)
+{
+ if (offset < 0x80)
+ {
+ m_ram[offset] = data;
+ }
+}
diff --git a/src/devices/bus/a2bus/cmsscsi.h b/src/devices/bus/a2bus/cmsscsi.h
new file mode 100644
index 00000000000..5fc9b43fe93
--- /dev/null
+++ b/src/devices/bus/a2bus/cmsscsi.h
@@ -0,0 +1,61 @@
+// license:BSD-3-Clause
+// copyright-holders:R. Belmont
+/*********************************************************************
+
+ cmsscsi.h
+
+ Implementation of the CMS SCSI II Card
+
+*********************************************************************/
+
+#ifndef MAME_BUS_A2BUS_CMSSCSI_H
+#define MAME_BUS_A2BUS_CMSSCSI_H
+
+#pragma once
+
+#include "a2bus.h"
+#include "machine/ncr5380n.h"
+
+//**************************************************************************
+// TYPE DEFINITIONS
+//**************************************************************************
+
+class a2bus_cmsscsi_device:
+ public device_t,
+ public device_a2bus_card_interface
+{
+public:
+ // construction/destruction
+ a2bus_cmsscsi_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+
+ DECLARE_WRITE_LINE_MEMBER( drq_w );
+
+protected:
+ a2bus_cmsscsi_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
+
+ virtual void device_start() override;
+ virtual void device_reset() override;
+ virtual void device_add_mconfig(machine_config &config) override;
+ virtual const tiny_rom_entry *device_rom_region() const override;
+
+ // overrides of standard a2bus slot functions
+ virtual uint8_t read_c0nx(uint8_t offset) override;
+ virtual void write_c0nx(uint8_t offset, uint8_t data) override;
+ virtual uint8_t read_cnxx(uint8_t offset) override;
+ virtual void write_cnxx(uint8_t offset, uint8_t data) override;
+ virtual uint8_t read_c800(uint16_t offset) override;
+ virtual void write_c800(uint16_t offset, uint8_t data) override;
+
+ required_device<ncr5380n_device> m_ncr5380;
+ required_device<nscsi_bus_device> m_scsibus;
+
+private:
+ uint8_t *m_rom;
+ uint8_t m_ram[2048]; // 2K SRAM chip on the card, only 128 bytes are used?
+ int m_rombank;
+};
+
+// device type definition
+DECLARE_DEVICE_TYPE(A2BUS_CMSSCSI, a2bus_cmsscsi_device)
+
+#endif // MAME_BUS_A2BUS_CMSSCSI_H
diff --git a/src/devices/bus/odyssey2/4in1.cpp b/src/devices/bus/odyssey2/4in1.cpp
index e1c382e7fe9..fac0c1337d1 100644
--- a/src/devices/bus/odyssey2/4in1.cpp
+++ b/src/devices/bus/odyssey2/4in1.cpp
@@ -4,7 +4,7 @@
Videopac 40 cartridge emulation
-3KB program ROM + 1KB bankswitched data ROM
+4KB ROM (program ROM is fixed, data ROM is 'bankswitched' via P11)
Used in:
- #31: Musician
diff --git a/src/devices/bus/odyssey2/4in1.h b/src/devices/bus/odyssey2/4in1.h
index 825eeb3108a..51585ff5dc1 100644
--- a/src/devices/bus/odyssey2/4in1.h
+++ b/src/devices/bus/odyssey2/4in1.h
@@ -33,7 +33,7 @@ protected:
virtual u8 read_rom0c(offs_t offset) override { return m_rom[offset + 0xc00]; }
virtual void write_p1(u8 data) override { m_control = data; }
- virtual void write_p2(u8 data) override { m_bank = data & 3; }
+ virtual void write_p2(u8 data) override { m_bank = data; }
virtual u8 io_read(offs_t offset) override;
private:
diff --git a/src/devices/cpu/mcs48/mcs48.cpp b/src/devices/cpu/mcs48/mcs48.cpp
index 728f7ea4a3c..c28fc570551 100644
--- a/src/devices/cpu/mcs48/mcs48.cpp
+++ b/src/devices/cpu/mcs48/mcs48.cpp
@@ -13,7 +13,6 @@
reimplement as a push, not a pull
- add CMOS devices, 1 new opcode (01 IDL)
- add special 8022 opcodes (RAD, SEL AN0, SEL AN1, RETI)
- - IRQ timing is hacked due to WY-100 needing to take JNI branch before servicing interrupt
****************************************************************************
@@ -577,80 +576,82 @@ void mcs48_cpu_device::expander_operation(expander_op operation, uint8_t port)
OPCODE HANDLERS
***************************************************************************/
-#define OPHANDLER(_name) int mcs48_cpu_device::_name()
+#define OPHANDLER(_name) void mcs48_cpu_device::_name()
OPHANDLER( illegal )
{
+ burn_cycles(1);
logerror("MCS-48 PC:%04X - Illegal opcode = %02x\n", m_pc - 1, program_r(m_pc - 1));
- return 0;
}
-OPHANDLER( add_a_r0 ) { execute_add(R0); return 0; }
-OPHANDLER( add_a_r1 ) { execute_add(R1); return 0; }
-OPHANDLER( add_a_r2 ) { execute_add(R2); return 0; }
-OPHANDLER( add_a_r3 ) { execute_add(R3); return 0; }
-OPHANDLER( add_a_r4 ) { execute_add(R4); return 0; }
-OPHANDLER( add_a_r5 ) { execute_add(R5); return 0; }
-OPHANDLER( add_a_r6 ) { execute_add(R6); return 0; }
-OPHANDLER( add_a_r7 ) { execute_add(R7); return 0; }
-OPHANDLER( add_a_xr0 ) { execute_add(ram_r(R0)); return 0; }
-OPHANDLER( add_a_xr1 ) { execute_add(ram_r(R1)); return 0; }
-OPHANDLER( add_a_n ) { execute_add(argument_fetch()); return 1; }
-
-OPHANDLER( adc_a_r0 ) { execute_addc(R0); return 0; }
-OPHANDLER( adc_a_r1 ) { execute_addc(R1); return 0; }
-OPHANDLER( adc_a_r2 ) { execute_addc(R2); return 0; }
-OPHANDLER( adc_a_r3 ) { execute_addc(R3); return 0; }
-OPHANDLER( adc_a_r4 ) { execute_addc(R4); return 0; }
-OPHANDLER( adc_a_r5 ) { execute_addc(R5); return 0; }
-OPHANDLER( adc_a_r6 ) { execute_addc(R6); return 0; }
-OPHANDLER( adc_a_r7 ) { execute_addc(R7); return 0; }
-OPHANDLER( adc_a_xr0 ) { execute_addc(ram_r(R0)); return 0; }
-OPHANDLER( adc_a_xr1 ) { execute_addc(ram_r(R1)); return 0; }
-OPHANDLER( adc_a_n ) { execute_addc(argument_fetch()); return 1; }
-
-OPHANDLER( anl_a_r0 ) { m_a &= R0; return 0; }
-OPHANDLER( anl_a_r1 ) { m_a &= R1; return 0; }
-OPHANDLER( anl_a_r2 ) { m_a &= R2; return 0; }
-OPHANDLER( anl_a_r3 ) { m_a &= R3; return 0; }
-OPHANDLER( anl_a_r4 ) { m_a &= R4; return 0; }
-OPHANDLER( anl_a_r5 ) { m_a &= R5; return 0; }
-OPHANDLER( anl_a_r6 ) { m_a &= R6; return 0; }
-OPHANDLER( anl_a_r7 ) { m_a &= R7; return 0; }
-OPHANDLER( anl_a_xr0 ) { m_a &= ram_r(R0); return 0; }
-OPHANDLER( anl_a_xr1 ) { m_a &= ram_r(R1); return 0; }
-OPHANDLER( anl_a_n ) { m_a &= argument_fetch(); return 1; }
-
-OPHANDLER( anl_bus_n ) { bus_w(bus_r() & argument_fetch()); return 1; }
-OPHANDLER( anl_p1_n ) { port_w(1, m_p1 &= argument_fetch()); return 1; }
-OPHANDLER( anl_p2_n ) { port_w(2, m_p2 &= argument_fetch() | ~p2_mask()); return 1; }
-OPHANDLER( anld_p4_a ) { expander_operation(EXPANDER_OP_AND, 4); return 1; }
-OPHANDLER( anld_p5_a ) { expander_operation(EXPANDER_OP_AND, 5); return 1; }
-OPHANDLER( anld_p6_a ) { expander_operation(EXPANDER_OP_AND, 6); return 1; }
-OPHANDLER( anld_p7_a ) { expander_operation(EXPANDER_OP_AND, 7); return 1; }
-
-OPHANDLER( call_0 ) { execute_call(argument_fetch() | 0x000); return 1; }
-OPHANDLER( call_1 ) { execute_call(argument_fetch() | 0x100); return 1; }
-OPHANDLER( call_2 ) { execute_call(argument_fetch() | 0x200); return 1; }
-OPHANDLER( call_3 ) { execute_call(argument_fetch() | 0x300); return 1; }
-OPHANDLER( call_4 ) { execute_call(argument_fetch() | 0x400); return 1; }
-OPHANDLER( call_5 ) { execute_call(argument_fetch() | 0x500); return 1; }
-OPHANDLER( call_6 ) { execute_call(argument_fetch() | 0x600); return 1; }
-OPHANDLER( call_7 ) { execute_call(argument_fetch() | 0x700); return 1; }
-
-OPHANDLER( clr_a ) { m_a = 0; return 0; }
-OPHANDLER( clr_c ) { m_psw &= ~C_FLAG; return 0; }
-OPHANDLER( clr_f0 ) { m_psw &= ~F_FLAG; m_sts &= ~STS_F0; return 0; }
-OPHANDLER( clr_f1 ) { m_sts &= ~STS_F1; return 0; }
-
-OPHANDLER( cpl_a ) { m_a ^= 0xff; return 0; }
-OPHANDLER( cpl_c ) { m_psw ^= C_FLAG; return 0; }
-OPHANDLER( cpl_f0 ) { m_psw ^= F_FLAG; m_sts ^= STS_F0; return 0; }
-OPHANDLER( cpl_f1 ) { m_sts ^= STS_F1; return 0; }
+OPHANDLER( add_a_r0 ) { burn_cycles(1); execute_add(R0); }
+OPHANDLER( add_a_r1 ) { burn_cycles(1); execute_add(R1); }
+OPHANDLER( add_a_r2 ) { burn_cycles(1); execute_add(R2); }
+OPHANDLER( add_a_r3 ) { burn_cycles(1); execute_add(R3); }
+OPHANDLER( add_a_r4 ) { burn_cycles(1); execute_add(R4); }
+OPHANDLER( add_a_r5 ) { burn_cycles(1); execute_add(R5); }
+OPHANDLER( add_a_r6 ) { burn_cycles(1); execute_add(R6); }
+OPHANDLER( add_a_r7 ) { burn_cycles(1); execute_add(R7); }
+OPHANDLER( add_a_xr0 ) { burn_cycles(1); execute_add(ram_r(R0)); }
+OPHANDLER( add_a_xr1 ) { burn_cycles(1); execute_add(ram_r(R1)); }
+OPHANDLER( add_a_n ) { burn_cycles(2); execute_add(argument_fetch()); }
+
+OPHANDLER( adc_a_r0 ) { burn_cycles(1); execute_addc(R0); }
+OPHANDLER( adc_a_r1 ) { burn_cycles(1); execute_addc(R1); }
+OPHANDLER( adc_a_r2 ) { burn_cycles(1); execute_addc(R2); }
+OPHANDLER( adc_a_r3 ) { burn_cycles(1); execute_addc(R3); }
+OPHANDLER( adc_a_r4 ) { burn_cycles(1); execute_addc(R4); }
+OPHANDLER( adc_a_r5 ) { burn_cycles(1); execute_addc(R5); }
+OPHANDLER( adc_a_r6 ) { burn_cycles(1); execute_addc(R6); }
+OPHANDLER( adc_a_r7 ) { burn_cycles(1); execute_addc(R7); }
+OPHANDLER( adc_a_xr0 ) { burn_cycles(1); execute_addc(ram_r(R0)); }
+OPHANDLER( adc_a_xr1 ) { burn_cycles(1); execute_addc(ram_r(R1)); }
+OPHANDLER( adc_a_n ) { burn_cycles(2); execute_addc(argument_fetch()); }
+
+OPHANDLER( anl_a_r0 ) { burn_cycles(1); m_a &= R0; }
+OPHANDLER( anl_a_r1 ) { burn_cycles(1); m_a &= R1; }
+OPHANDLER( anl_a_r2 ) { burn_cycles(1); m_a &= R2; }
+OPHANDLER( anl_a_r3 ) { burn_cycles(1); m_a &= R3; }
+OPHANDLER( anl_a_r4 ) { burn_cycles(1); m_a &= R4; }
+OPHANDLER( anl_a_r5 ) { burn_cycles(1); m_a &= R5; }
+OPHANDLER( anl_a_r6 ) { burn_cycles(1); m_a &= R6; }
+OPHANDLER( anl_a_r7 ) { burn_cycles(1); m_a &= R7; }
+OPHANDLER( anl_a_xr0 ) { burn_cycles(1); m_a &= ram_r(R0); }
+OPHANDLER( anl_a_xr1 ) { burn_cycles(1); m_a &= ram_r(R1); }
+OPHANDLER( anl_a_n ) { burn_cycles(2); m_a &= argument_fetch(); }
+
+OPHANDLER( anl_bus_n ) { burn_cycles(2); bus_w(bus_r() & argument_fetch()); }
+OPHANDLER( anl_p1_n ) { burn_cycles(2); port_w(1, m_p1 &= argument_fetch()); }
+OPHANDLER( anl_p2_n ) { burn_cycles(2); port_w(2, m_p2 &= argument_fetch() | ~p2_mask()); }
+OPHANDLER( anld_p4_a ) { burn_cycles(2); expander_operation(EXPANDER_OP_AND, 4); }
+OPHANDLER( anld_p5_a ) { burn_cycles(2); expander_operation(EXPANDER_OP_AND, 5); }
+OPHANDLER( anld_p6_a ) { burn_cycles(2); expander_operation(EXPANDER_OP_AND, 6); }
+OPHANDLER( anld_p7_a ) { burn_cycles(2); expander_operation(EXPANDER_OP_AND, 7); }
+
+OPHANDLER( call_0 ) { burn_cycles(2); execute_call(argument_fetch() | 0x000); }
+OPHANDLER( call_1 ) { burn_cycles(2); execute_call(argument_fetch() | 0x100); }
+OPHANDLER( call_2 ) { burn_cycles(2); execute_call(argument_fetch() | 0x200); }
+OPHANDLER( call_3 ) { burn_cycles(2); execute_call(argument_fetch() | 0x300); }
+OPHANDLER( call_4 ) { burn_cycles(2); execute_call(argument_fetch() | 0x400); }
+OPHANDLER( call_5 ) { burn_cycles(2); execute_call(argument_fetch() | 0x500); }
+OPHANDLER( call_6 ) { burn_cycles(2); execute_call(argument_fetch() | 0x600); }
+OPHANDLER( call_7 ) { burn_cycles(2); execute_call(argument_fetch() | 0x700); }
+
+OPHANDLER( clr_a ) { burn_cycles(1); m_a = 0; }
+OPHANDLER( clr_c ) { burn_cycles(1); m_psw &= ~C_FLAG; }
+OPHANDLER( clr_f0 ) { burn_cycles(1); m_psw &= ~F_FLAG; m_sts &= ~STS_F0; }
+OPHANDLER( clr_f1 ) { burn_cycles(1); m_sts &= ~STS_F1; }
+
+OPHANDLER( cpl_a ) { burn_cycles(1); m_a ^= 0xff; }
+OPHANDLER( cpl_c ) { burn_cycles(1); m_psw ^= C_FLAG; }
+OPHANDLER( cpl_f0 ) { burn_cycles(1); m_psw ^= F_FLAG; m_sts ^= STS_F0; }
+OPHANDLER( cpl_f1 ) { burn_cycles(1); m_sts ^= STS_F1; }
OPHANDLER( da_a )
{
+ burn_cycles(1);
+
if ((m_a & 0x0f) > 0x09 || (m_psw & A_FLAG))
{
m_a += 0x06;
@@ -664,50 +665,52 @@ OPHANDLER( da_a )
}
else
m_psw &= ~C_FLAG;
- return 0;
}
-OPHANDLER( dec_a ) { m_a--; return 0; }
-OPHANDLER( dec_r0 ) { R0--; return 0; }
-OPHANDLER( dec_r1 ) { R1--; return 0; }
-OPHANDLER( dec_r2 ) { R2--; return 0; }
-OPHANDLER( dec_r3 ) { R3--; return 0; }
-OPHANDLER( dec_r4 ) { R4--; return 0; }
-OPHANDLER( dec_r5 ) { R5--; return 0; }
-OPHANDLER( dec_r6 ) { R6--; return 0; }
-OPHANDLER( dec_r7 ) { R7--; return 0; }
-
-OPHANDLER( dis_i ) { m_xirq_enabled = false; return 0; }
-OPHANDLER( dis_tcnti ) { m_tirq_enabled = false; m_timer_overflow = false; return 0; }
-
-OPHANDLER( djnz_r0 ) { execute_jcc(--R0 != 0); return 1; }
-OPHANDLER( djnz_r1 ) { execute_jcc(--R1 != 0); return 1; }
-OPHANDLER( djnz_r2 ) { execute_jcc(--R2 != 0); return 1; }
-OPHANDLER( djnz_r3 ) { execute_jcc(--R3 != 0); return 1; }
-OPHANDLER( djnz_r4 ) { execute_jcc(--R4 != 0); return 1; }
-OPHANDLER( djnz_r5 ) { execute_jcc(--R5 != 0); return 1; }
-OPHANDLER( djnz_r6 ) { execute_jcc(--R6 != 0); return 1; }
-OPHANDLER( djnz_r7 ) { execute_jcc(--R7 != 0); return 1; }
-
-OPHANDLER( en_i ) { m_xirq_enabled = true; return 0; }
-OPHANDLER( en_tcnti ) { m_tirq_enabled = true; return 0; }
-OPHANDLER( en_dma ) { m_dma_enabled = true; port_w(2, m_p2); return 0; }
-OPHANDLER( en_flags ) { m_flags_enabled = true; port_w(2, m_p2); return 0; }
+OPHANDLER( dec_a ) { burn_cycles(1); m_a--; }
+OPHANDLER( dec_r0 ) { burn_cycles(1); R0--; }
+OPHANDLER( dec_r1 ) { burn_cycles(1); R1--; }
+OPHANDLER( dec_r2 ) { burn_cycles(1); R2--; }
+OPHANDLER( dec_r3 ) { burn_cycles(1); R3--; }
+OPHANDLER( dec_r4 ) { burn_cycles(1); R4--; }
+OPHANDLER( dec_r5 ) { burn_cycles(1); R5--; }
+OPHANDLER( dec_r6 ) { burn_cycles(1); R6--; }
+OPHANDLER( dec_r7 ) { burn_cycles(1); R7--; }
+
+OPHANDLER( dis_i ) { burn_cycles(1); m_xirq_enabled = false; }
+OPHANDLER( dis_tcnti ) { burn_cycles(1); m_tirq_enabled = false; m_timer_overflow = false; }
+
+OPHANDLER( djnz_r0 ) { burn_cycles(2); execute_jcc(--R0 != 0); }
+OPHANDLER( djnz_r1 ) { burn_cycles(2); execute_jcc(--R1 != 0); }
+OPHANDLER( djnz_r2 ) { burn_cycles(2); execute_jcc(--R2 != 0); }
+OPHANDLER( djnz_r3 ) { burn_cycles(2); execute_jcc(--R3 != 0); }
+OPHANDLER( djnz_r4 ) { burn_cycles(2); execute_jcc(--R4 != 0); }
+OPHANDLER( djnz_r5 ) { burn_cycles(2); execute_jcc(--R5 != 0); }
+OPHANDLER( djnz_r6 ) { burn_cycles(2); execute_jcc(--R6 != 0); }
+OPHANDLER( djnz_r7 ) { burn_cycles(2); execute_jcc(--R7 != 0); }
+
+OPHANDLER( en_i ) { burn_cycles(1); m_xirq_enabled = true; }
+OPHANDLER( en_tcnti ) { burn_cycles(1); m_tirq_enabled = true; }
+OPHANDLER( en_dma ) { burn_cycles(1); m_dma_enabled = true; port_w(2, m_p2); }
+OPHANDLER( en_flags ) { burn_cycles(1); m_flags_enabled = true; port_w(2, m_p2); }
OPHANDLER( ent0_clk )
{
+ burn_cycles(1);
+
if (!m_t0_clk_func.isnull())
m_t0_clk_func(clock() / 3);
else
logerror("T0 clock enabled\n");
- return 0;
}
-OPHANDLER( in_a_p0 ) { m_a = bus_r() & m_dbbo; return 1; }
-OPHANDLER( in_a_p1 ) { m_a = port_r(1) & m_p1; return 1; }
-OPHANDLER( in_a_p2 ) { m_a = port_r(2) & m_p2; return 1; }
-OPHANDLER( ins_a_bus ) { m_a = bus_r(); return 1; }
+OPHANDLER( in_a_p0 ) { burn_cycles(2); m_a = bus_r() & m_dbbo; }
+OPHANDLER( in_a_p1 ) { burn_cycles(2); m_a = port_r(1) & m_p1; }
+OPHANDLER( in_a_p2 ) { burn_cycles(2); m_a = port_r(2) & m_p2; }
+OPHANDLER( ins_a_bus ) { burn_cycles(2); m_a = bus_r(); }
OPHANDLER( in_a_dbb )
{
+ burn_cycles(2);
+
/* acknowledge the IBF IRQ and clear the bit in STS */
if ((m_sts & STS_IBF) != 0)
standard_irq_callback(UPI41_INPUT_IBF);
@@ -717,137 +720,138 @@ OPHANDLER( in_a_dbb )
if (m_flags_enabled && (m_p2 & P2_NIBF) == 0)
port_w(2, m_p2 |= P2_NIBF);
m_a = m_dbbi;
- return 1;
-}
-
-OPHANDLER( inc_a ) { m_a++; return 0; }
-OPHANDLER( inc_r0 ) { R0++; return 0; }
-OPHANDLER( inc_r1 ) { R1++; return 0; }
-OPHANDLER( inc_r2 ) { R2++; return 0; }
-OPHANDLER( inc_r3 ) { R3++; return 0; }
-OPHANDLER( inc_r4 ) { R4++; return 0; }
-OPHANDLER( inc_r5 ) { R5++; return 0; }
-OPHANDLER( inc_r6 ) { R6++; return 0; }
-OPHANDLER( inc_r7 ) { R7++; return 0; }
-OPHANDLER( inc_xr0 ) { ram_w(R0, ram_r(R0) + 1); return 0; }
-OPHANDLER( inc_xr1 ) { ram_w(R1, ram_r(R1) + 1); return 0; }
-
-OPHANDLER( jb_0 ) { execute_jcc((m_a & 0x01) != 0); return 1; }
-OPHANDLER( jb_1 ) { execute_jcc((m_a & 0x02) != 0); return 1; }
-OPHANDLER( jb_2 ) { execute_jcc((m_a & 0x04) != 0); return 1; }
-OPHANDLER( jb_3 ) { execute_jcc((m_a & 0x08) != 0); return 1; }
-OPHANDLER( jb_4 ) { execute_jcc((m_a & 0x10) != 0); return 1; }
-OPHANDLER( jb_5 ) { execute_jcc((m_a & 0x20) != 0); return 1; }
-OPHANDLER( jb_6 ) { execute_jcc((m_a & 0x40) != 0); return 1; }
-OPHANDLER( jb_7 ) { execute_jcc((m_a & 0x80) != 0); return 1; }
-OPHANDLER( jc ) { execute_jcc((m_psw & C_FLAG) != 0); return 1; }
-OPHANDLER( jf0 ) { execute_jcc((m_psw & F_FLAG) != 0); return 1; }
-OPHANDLER( jf1 ) { execute_jcc((m_sts & STS_F1) != 0); return 1; }
-OPHANDLER( jnc ) { execute_jcc((m_psw & C_FLAG) == 0); return 1; }
-OPHANDLER( jni ) { m_irq_polled = (m_irq_state == 0); execute_jcc(m_irq_state != 0); return 1; }
-OPHANDLER( jnibf ) { m_irq_polled = (m_sts & STS_IBF) != 0; execute_jcc((m_sts & STS_IBF) == 0); return 1; }
-OPHANDLER( jnt_0 ) { execute_jcc(test_r(0) == 0); return 1; }
-OPHANDLER( jnt_1 ) { execute_jcc(test_r(1) == 0); return 1; }
-OPHANDLER( jnz ) { execute_jcc(m_a != 0); return 1; }
-OPHANDLER( jobf ) { execute_jcc((m_sts & STS_OBF) != 0); return 1; }
-OPHANDLER( jtf ) { execute_jcc(m_timer_flag); m_timer_flag = false; return 1; }
-OPHANDLER( jt_0 ) { execute_jcc(test_r(0) != 0); return 1; }
-OPHANDLER( jt_1 ) { execute_jcc(test_r(1) != 0); return 1; }
-OPHANDLER( jz ) { execute_jcc(m_a == 0); return 1; }
-
-OPHANDLER( jmp_0 ) { execute_jmp(argument_fetch() | 0x000); return 1; }
-OPHANDLER( jmp_1 ) { execute_jmp(argument_fetch() | 0x100); return 1; }
-OPHANDLER( jmp_2 ) { execute_jmp(argument_fetch() | 0x200); return 1; }
-OPHANDLER( jmp_3 ) { execute_jmp(argument_fetch() | 0x300); return 1; }
-OPHANDLER( jmp_4 ) { execute_jmp(argument_fetch() | 0x400); return 1; }
-OPHANDLER( jmp_5 ) { execute_jmp(argument_fetch() | 0x500); return 1; }
-OPHANDLER( jmp_6 ) { execute_jmp(argument_fetch() | 0x600); return 1; }
-OPHANDLER( jmp_7 ) { execute_jmp(argument_fetch() | 0x700); return 1; }
-OPHANDLER( jmpp_xa ) { m_pc &= 0xf00; m_pc |= program_r(m_pc | m_a); return 1; }
-
-OPHANDLER( mov_a_n ) { m_a = argument_fetch(); return 1; }
-OPHANDLER( mov_a_psw ) { m_a = m_psw; return 0; }
-OPHANDLER( mov_a_r0 ) { m_a = R0; return 0; }
-OPHANDLER( mov_a_r1 ) { m_a = R1; return 0; }
-OPHANDLER( mov_a_r2 ) { m_a = R2; return 0; }
-OPHANDLER( mov_a_r3 ) { m_a = R3; return 0; }
-OPHANDLER( mov_a_r4 ) { m_a = R4; return 0; }
-OPHANDLER( mov_a_r5 ) { m_a = R5; return 0; }
-OPHANDLER( mov_a_r6 ) { m_a = R6; return 0; }
-OPHANDLER( mov_a_r7 ) { m_a = R7; return 0; }
-OPHANDLER( mov_a_xr0 ) { m_a = ram_r(R0); return 0; }
-OPHANDLER( mov_a_xr1 ) { m_a = ram_r(R1); return 0; }
-OPHANDLER( mov_a_t ) { m_a = m_timer; return 0; }
-
-OPHANDLER( mov_psw_a ) { m_psw = m_a; update_regptr(); return 0; }
-OPHANDLER( mov_sts_a ) { m_sts = (m_sts & 0x0f) | (m_a & 0xf0); return 0; }
-OPHANDLER( mov_r0_a ) { R0 = m_a; return 0; }
-OPHANDLER( mov_r1_a ) { R1 = m_a; return 0; }
-OPHANDLER( mov_r2_a ) { R2 = m_a; return 0; }
-OPHANDLER( mov_r3_a ) { R3 = m_a; return 0; }
-OPHANDLER( mov_r4_a ) { R4 = m_a; return 0; }
-OPHANDLER( mov_r5_a ) { R5 = m_a; return 0; }
-OPHANDLER( mov_r6_a ) { R6 = m_a; return 0; }
-OPHANDLER( mov_r7_a ) { R7 = m_a; return 0; }
-OPHANDLER( mov_r0_n ) { R0 = argument_fetch(); return 1; }
-OPHANDLER( mov_r1_n ) { R1 = argument_fetch(); return 1; }
-OPHANDLER( mov_r2_n ) { R2 = argument_fetch(); return 1; }
-OPHANDLER( mov_r3_n ) { R3 = argument_fetch(); return 1; }
-OPHANDLER( mov_r4_n ) { R4 = argument_fetch(); return 1; }
-OPHANDLER( mov_r5_n ) { R5 = argument_fetch(); return 1; }
-OPHANDLER( mov_r6_n ) { R6 = argument_fetch(); return 1; }
-OPHANDLER( mov_r7_n ) { R7 = argument_fetch(); return 1; }
-OPHANDLER( mov_t_a ) { m_timer = m_a; return 0; }
-OPHANDLER( mov_xr0_a ) { ram_w(R0, m_a); return 0; }
-OPHANDLER( mov_xr1_a ) { ram_w(R1, m_a); return 0; }
-OPHANDLER( mov_xr0_n ) { ram_w(R0, argument_fetch()); return 1; }
-OPHANDLER( mov_xr1_n ) { ram_w(R1, argument_fetch()); return 1; }
-
-OPHANDLER( movd_a_p4 ) { expander_operation(EXPANDER_OP_READ, 4); return 1; }
-OPHANDLER( movd_a_p5 ) { expander_operation(EXPANDER_OP_READ, 5); return 1; }
-OPHANDLER( movd_a_p6 ) { expander_operation(EXPANDER_OP_READ, 6); return 1; }
-OPHANDLER( movd_a_p7 ) { expander_operation(EXPANDER_OP_READ, 7); return 1; }
-OPHANDLER( movd_p4_a ) { expander_operation(EXPANDER_OP_WRITE, 4); return 1; }
-OPHANDLER( movd_p5_a ) { expander_operation(EXPANDER_OP_WRITE, 5); return 1; }
-OPHANDLER( movd_p6_a ) { expander_operation(EXPANDER_OP_WRITE, 6); return 1; }
-OPHANDLER( movd_p7_a ) { expander_operation(EXPANDER_OP_WRITE, 7); return 1; }
-
-OPHANDLER( movp_a_xa ) { m_a = program_r((m_pc & 0xf00) | m_a); return 1; }
-OPHANDLER( movp3_a_xa ) { m_a = program_r(0x300 | m_a); return 1; }
-
-OPHANDLER( movx_a_xr0 ) { m_a = ext_r(R0); return 1; }
-OPHANDLER( movx_a_xr1 ) { m_a = ext_r(R1); return 1; }
-OPHANDLER( movx_xr0_a ) { ext_w(R0, m_a); return 1; }
-OPHANDLER( movx_xr1_a ) { ext_w(R1, m_a); return 1; }
-
-OPHANDLER( nop ) { return 0; }
-
-OPHANDLER( orl_a_r0 ) { m_a |= R0; return 0; }
-OPHANDLER( orl_a_r1 ) { m_a |= R1; return 0; }
-OPHANDLER( orl_a_r2 ) { m_a |= R2; return 0; }
-OPHANDLER( orl_a_r3 ) { m_a |= R3; return 0; }
-OPHANDLER( orl_a_r4 ) { m_a |= R4; return 0; }
-OPHANDLER( orl_a_r5 ) { m_a |= R5; return 0; }
-OPHANDLER( orl_a_r6 ) { m_a |= R6; return 0; }
-OPHANDLER( orl_a_r7 ) { m_a |= R7; return 0; }
-OPHANDLER( orl_a_xr0 ) { m_a |= ram_r(R0); return 0; }
-OPHANDLER( orl_a_xr1 ) { m_a |= ram_r(R1); return 0; }
-OPHANDLER( orl_a_n ) { m_a |= argument_fetch(); return 1; }
-
-OPHANDLER( orl_bus_n ) { bus_w(bus_r() | argument_fetch()); return 1; }
-OPHANDLER( orl_p1_n ) { port_w(1, m_p1 |= argument_fetch()); return 1; }
-OPHANDLER( orl_p2_n ) { port_w(2, m_p2 |= argument_fetch() & p2_mask()); return 1; }
-OPHANDLER( orld_p4_a ) { expander_operation(EXPANDER_OP_OR, 4); return 1; }
-OPHANDLER( orld_p5_a ) { expander_operation(EXPANDER_OP_OR, 5); return 1; }
-OPHANDLER( orld_p6_a ) { expander_operation(EXPANDER_OP_OR, 6); return 1; }
-OPHANDLER( orld_p7_a ) { expander_operation(EXPANDER_OP_OR, 7); return 1; }
-
-OPHANDLER( outl_bus_a ) { bus_w(m_a); return 1; }
-OPHANDLER( outl_p0_a ) { bus_w(m_dbbo = m_a); return 1; }
-OPHANDLER( outl_p1_a ) { port_w(1, m_p1 = m_a); return 1; }
-OPHANDLER( outl_p2_a ) { uint8_t mask = p2_mask(); port_w(2, m_p2 = (m_p2 & ~mask) | (m_a & mask)); return 1; }
+}
+
+OPHANDLER( inc_a ) { burn_cycles(1); m_a++; }
+OPHANDLER( inc_r0 ) { burn_cycles(1); R0++; }
+OPHANDLER( inc_r1 ) { burn_cycles(1); R1++; }
+OPHANDLER( inc_r2 ) { burn_cycles(1); R2++; }
+OPHANDLER( inc_r3 ) { burn_cycles(1); R3++; }
+OPHANDLER( inc_r4 ) { burn_cycles(1); R4++; }
+OPHANDLER( inc_r5 ) { burn_cycles(1); R5++; }
+OPHANDLER( inc_r6 ) { burn_cycles(1); R6++; }
+OPHANDLER( inc_r7 ) { burn_cycles(1); R7++; }
+OPHANDLER( inc_xr0 ) { burn_cycles(1); ram_w(R0, ram_r(R0) + 1); }
+OPHANDLER( inc_xr1 ) { burn_cycles(1); ram_w(R1, ram_r(R1) + 1); }
+
+OPHANDLER( jb_0 ) { burn_cycles(2); execute_jcc((m_a & 0x01) != 0); }
+OPHANDLER( jb_1 ) { burn_cycles(2); execute_jcc((m_a & 0x02) != 0); }
+OPHANDLER( jb_2 ) { burn_cycles(2); execute_jcc((m_a & 0x04) != 0); }
+OPHANDLER( jb_3 ) { burn_cycles(2); execute_jcc((m_a & 0x08) != 0); }
+OPHANDLER( jb_4 ) { burn_cycles(2); execute_jcc((m_a & 0x10) != 0); }
+OPHANDLER( jb_5 ) { burn_cycles(2); execute_jcc((m_a & 0x20) != 0); }
+OPHANDLER( jb_6 ) { burn_cycles(2); execute_jcc((m_a & 0x40) != 0); }
+OPHANDLER( jb_7 ) { burn_cycles(2); execute_jcc((m_a & 0x80) != 0); }
+OPHANDLER( jc ) { burn_cycles(2); execute_jcc((m_psw & C_FLAG) != 0); }
+OPHANDLER( jf0 ) { burn_cycles(2); execute_jcc((m_psw & F_FLAG) != 0); }
+OPHANDLER( jf1 ) { burn_cycles(2); execute_jcc((m_sts & STS_F1) != 0); }
+OPHANDLER( jnc ) { burn_cycles(2); execute_jcc((m_psw & C_FLAG) == 0); }
+OPHANDLER( jni ) { burn_cycles(2); execute_jcc(m_irq_state != 0); }
+OPHANDLER( jnibf ) { burn_cycles(2); execute_jcc((m_sts & STS_IBF) == 0); }
+OPHANDLER( jnt_0 ) { burn_cycles(2); execute_jcc(test_r(0) == 0); }
+OPHANDLER( jnt_1 ) { burn_cycles(2); execute_jcc(test_r(1) == 0); }
+OPHANDLER( jnz ) { burn_cycles(2); execute_jcc(m_a != 0); }
+OPHANDLER( jobf ) { burn_cycles(2); execute_jcc((m_sts & STS_OBF) != 0); }
+OPHANDLER( jtf ) { burn_cycles(2); execute_jcc(m_timer_flag); m_timer_flag = false; }
+OPHANDLER( jt_0 ) { burn_cycles(2); execute_jcc(test_r(0) != 0); }
+OPHANDLER( jt_1 ) { burn_cycles(2); execute_jcc(test_r(1) != 0); }
+OPHANDLER( jz ) { burn_cycles(2); execute_jcc(m_a == 0); }
+
+OPHANDLER( jmp_0 ) { burn_cycles(2); execute_jmp(argument_fetch() | 0x000); }
+OPHANDLER( jmp_1 ) { burn_cycles(2); execute_jmp(argument_fetch() | 0x100); }
+OPHANDLER( jmp_2 ) { burn_cycles(2); execute_jmp(argument_fetch() | 0x200); }
+OPHANDLER( jmp_3 ) { burn_cycles(2); execute_jmp(argument_fetch() | 0x300); }
+OPHANDLER( jmp_4 ) { burn_cycles(2); execute_jmp(argument_fetch() | 0x400); }
+OPHANDLER( jmp_5 ) { burn_cycles(2); execute_jmp(argument_fetch() | 0x500); }
+OPHANDLER( jmp_6 ) { burn_cycles(2); execute_jmp(argument_fetch() | 0x600); }
+OPHANDLER( jmp_7 ) { burn_cycles(2); execute_jmp(argument_fetch() | 0x700); }
+OPHANDLER( jmpp_xa ) { burn_cycles(2); m_pc &= 0xf00; m_pc |= program_r(m_pc | m_a); }
+
+OPHANDLER( mov_a_n ) { burn_cycles(2); m_a = argument_fetch(); }
+OPHANDLER( mov_a_psw ) { burn_cycles(1); m_a = m_psw; }
+OPHANDLER( mov_a_r0 ) { burn_cycles(1); m_a = R0; }
+OPHANDLER( mov_a_r1 ) { burn_cycles(1); m_a = R1; }
+OPHANDLER( mov_a_r2 ) { burn_cycles(1); m_a = R2; }
+OPHANDLER( mov_a_r3 ) { burn_cycles(1); m_a = R3; }
+OPHANDLER( mov_a_r4 ) { burn_cycles(1); m_a = R4; }
+OPHANDLER( mov_a_r5 ) { burn_cycles(1); m_a = R5; }
+OPHANDLER( mov_a_r6 ) { burn_cycles(1); m_a = R6; }
+OPHANDLER( mov_a_r7 ) { burn_cycles(1); m_a = R7; }
+OPHANDLER( mov_a_xr0 ) { burn_cycles(1); m_a = ram_r(R0); }
+OPHANDLER( mov_a_xr1 ) { burn_cycles(1); m_a = ram_r(R1); }
+OPHANDLER( mov_a_t ) { burn_cycles(1); m_a = m_timer; }
+
+OPHANDLER( mov_psw_a ) { burn_cycles(1); m_psw = m_a; update_regptr(); }
+OPHANDLER( mov_sts_a ) { burn_cycles(1); m_sts = (m_sts & 0x0f) | (m_a & 0xf0); }
+OPHANDLER( mov_r0_a ) { burn_cycles(1); R0 = m_a; }
+OPHANDLER( mov_r1_a ) { burn_cycles(1); R1 = m_a; }
+OPHANDLER( mov_r2_a ) { burn_cycles(1); R2 = m_a; }
+OPHANDLER( mov_r3_a ) { burn_cycles(1); R3 = m_a; }
+OPHANDLER( mov_r4_a ) { burn_cycles(1); R4 = m_a; }
+OPHANDLER( mov_r5_a ) { burn_cycles(1); R5 = m_a; }
+OPHANDLER( mov_r6_a ) { burn_cycles(1); R6 = m_a; }
+OPHANDLER( mov_r7_a ) { burn_cycles(1); R7 = m_a; }
+OPHANDLER( mov_r0_n ) { burn_cycles(2); R0 = argument_fetch(); }
+OPHANDLER( mov_r1_n ) { burn_cycles(2); R1 = argument_fetch(); }
+OPHANDLER( mov_r2_n ) { burn_cycles(2); R2 = argument_fetch(); }
+OPHANDLER( mov_r3_n ) { burn_cycles(2); R3 = argument_fetch(); }
+OPHANDLER( mov_r4_n ) { burn_cycles(2); R4 = argument_fetch(); }
+OPHANDLER( mov_r5_n ) { burn_cycles(2); R5 = argument_fetch(); }
+OPHANDLER( mov_r6_n ) { burn_cycles(2); R6 = argument_fetch(); }
+OPHANDLER( mov_r7_n ) { burn_cycles(2); R7 = argument_fetch(); }
+OPHANDLER( mov_t_a ) { burn_cycles(1); m_timer = m_a; }
+OPHANDLER( mov_xr0_a ) { burn_cycles(1); ram_w(R0, m_a); }
+OPHANDLER( mov_xr1_a ) { burn_cycles(1); ram_w(R1, m_a); }
+OPHANDLER( mov_xr0_n ) { burn_cycles(2); ram_w(R0, argument_fetch()); }
+OPHANDLER( mov_xr1_n ) { burn_cycles(2); ram_w(R1, argument_fetch()); }
+
+OPHANDLER( movd_a_p4 ) { burn_cycles(2); expander_operation(EXPANDER_OP_READ, 4); }
+OPHANDLER( movd_a_p5 ) { burn_cycles(2); expander_operation(EXPANDER_OP_READ, 5); }
+OPHANDLER( movd_a_p6 ) { burn_cycles(2); expander_operation(EXPANDER_OP_READ, 6); }
+OPHANDLER( movd_a_p7 ) { burn_cycles(2); expander_operation(EXPANDER_OP_READ, 7); }
+OPHANDLER( movd_p4_a ) { burn_cycles(2); expander_operation(EXPANDER_OP_WRITE, 4); }
+OPHANDLER( movd_p5_a ) { burn_cycles(2); expander_operation(EXPANDER_OP_WRITE, 5); }
+OPHANDLER( movd_p6_a ) { burn_cycles(2); expander_operation(EXPANDER_OP_WRITE, 6); }
+OPHANDLER( movd_p7_a ) { burn_cycles(2); expander_operation(EXPANDER_OP_WRITE, 7); }
+
+OPHANDLER( movp_a_xa ) { burn_cycles(2); m_a = program_r((m_pc & 0xf00) | m_a); }
+OPHANDLER( movp3_a_xa ) { burn_cycles(2); m_a = program_r(0x300 | m_a); }
+
+OPHANDLER( movx_a_xr0 ) { burn_cycles(2); m_a = ext_r(R0); }
+OPHANDLER( movx_a_xr1 ) { burn_cycles(2); m_a = ext_r(R1); }
+OPHANDLER( movx_xr0_a ) { burn_cycles(2); ext_w(R0, m_a); }
+OPHANDLER( movx_xr1_a ) { burn_cycles(2); ext_w(R1, m_a); }
+
+OPHANDLER( nop ) { burn_cycles(1); }
+
+OPHANDLER( orl_a_r0 ) { burn_cycles(1); m_a |= R0; }
+OPHANDLER( orl_a_r1 ) { burn_cycles(1); m_a |= R1; }
+OPHANDLER( orl_a_r2 ) { burn_cycles(1); m_a |= R2; }
+OPHANDLER( orl_a_r3 ) { burn_cycles(1); m_a |= R3; }
+OPHANDLER( orl_a_r4 ) { burn_cycles(1); m_a |= R4; }
+OPHANDLER( orl_a_r5 ) { burn_cycles(1); m_a |= R5; }
+OPHANDLER( orl_a_r6 ) { burn_cycles(1); m_a |= R6; }
+OPHANDLER( orl_a_r7 ) { burn_cycles(1); m_a |= R7; }
+OPHANDLER( orl_a_xr0 ) { burn_cycles(1); m_a |= ram_r(R0); }
+OPHANDLER( orl_a_xr1 ) { burn_cycles(1); m_a |= ram_r(R1); }
+OPHANDLER( orl_a_n ) { burn_cycles(2); m_a |= argument_fetch(); }
+
+OPHANDLER( orl_bus_n ) { burn_cycles(2); bus_w(bus_r() | argument_fetch()); }
+OPHANDLER( orl_p1_n ) { burn_cycles(2); port_w(1, m_p1 |= argument_fetch()); }
+OPHANDLER( orl_p2_n ) { burn_cycles(2); port_w(2, m_p2 |= argument_fetch() & p2_mask()); }
+OPHANDLER( orld_p4_a ) { burn_cycles(2); expander_operation(EXPANDER_OP_OR, 4); }
+OPHANDLER( orld_p5_a ) { burn_cycles(2); expander_operation(EXPANDER_OP_OR, 5); }
+OPHANDLER( orld_p6_a ) { burn_cycles(2); expander_operation(EXPANDER_OP_OR, 6); }
+OPHANDLER( orld_p7_a ) { burn_cycles(2); expander_operation(EXPANDER_OP_OR, 7); }
+
+OPHANDLER( outl_bus_a ) { burn_cycles(2); bus_w(m_a); }
+OPHANDLER( outl_p0_a ) { burn_cycles(2); bus_w(m_dbbo = m_a); }
+OPHANDLER( outl_p1_a ) { burn_cycles(2); port_w(1, m_p1 = m_a); }
+OPHANDLER( outl_p2_a ) { burn_cycles(2); uint8_t mask = p2_mask(); port_w(2, m_p2 = (m_p2 & ~mask) | (m_a & mask)); }
OPHANDLER( out_dbb_a )
{
+ burn_cycles(2);
+
/* copy to the DBBO and update the bit in STS */
m_dbbo = m_a;
m_sts |= STS_OBF;
@@ -855,64 +859,63 @@ OPHANDLER( out_dbb_a )
/* if P2 flags are enabled, update the state of P2 */
if (m_flags_enabled && (m_p2 & P2_OBF) == 0)
port_w(2, m_p2 |= P2_OBF);
- return 1;
}
-OPHANDLER( ret ) { pull_pc(); return 1; }
+OPHANDLER( ret ) { burn_cycles(2); pull_pc(); }
OPHANDLER( retr )
{
+ burn_cycles(2);
pull_pc_psw();
/* implicitly clear the IRQ in progress flip flop */
m_irq_in_progress = false;
- return 1;
}
-OPHANDLER( rl_a ) { m_a = (m_a << 1) | (m_a >> 7); return 0; }
-OPHANDLER( rlc_a ) { uint8_t newc = m_a & C_FLAG; m_a = (m_a << 1) | (m_psw >> 7); m_psw = (m_psw & ~C_FLAG) | newc; return 0; }
+OPHANDLER( rl_a ) { burn_cycles(1); m_a = (m_a << 1) | (m_a >> 7); }
+OPHANDLER( rlc_a ) { burn_cycles(1); uint8_t newc = m_a & C_FLAG; m_a = (m_a << 1) | (m_psw >> 7); m_psw = (m_psw & ~C_FLAG) | newc; }
-OPHANDLER( rr_a ) { m_a = (m_a >> 1) | (m_a << 7); return 0; }
-OPHANDLER( rrc_a ) { uint8_t newc = (m_a << 7) & C_FLAG; m_a = (m_a >> 1) | (m_psw & C_FLAG); m_psw = (m_psw & ~C_FLAG) | newc; return 0; }
+OPHANDLER( rr_a ) { burn_cycles(1); m_a = (m_a >> 1) | (m_a << 7); }
+OPHANDLER( rrc_a ) { burn_cycles(1); uint8_t newc = (m_a << 7) & C_FLAG; m_a = (m_a >> 1) | (m_psw & C_FLAG); m_psw = (m_psw & ~C_FLAG) | newc; }
-OPHANDLER( sel_mb0 ) { m_a11 = 0x000; return 0; }
-OPHANDLER( sel_mb1 ) { m_a11 = 0x800; return 0; }
+OPHANDLER( sel_mb0 ) { burn_cycles(1); m_a11 = 0x000; }
+OPHANDLER( sel_mb1 ) { burn_cycles(1); m_a11 = 0x800; }
-OPHANDLER( sel_rb0 ) { m_psw &= ~B_FLAG; update_regptr(); return 0; }
-OPHANDLER( sel_rb1 ) { m_psw |= B_FLAG; update_regptr(); return 0; }
+OPHANDLER( sel_rb0 ) { burn_cycles(1); m_psw &= ~B_FLAG; update_regptr(); }
+OPHANDLER( sel_rb1 ) { burn_cycles(1); m_psw |= B_FLAG; update_regptr(); }
-OPHANDLER( stop_tcnt ) { m_timecount_enabled = 0; return 0; }
+OPHANDLER( stop_tcnt ) { burn_cycles(1); m_timecount_enabled = 0; }
-OPHANDLER( strt_cnt ) { m_timecount_enabled = COUNTER_ENABLED; m_t1_history = test_r(1); return 0; }
-OPHANDLER( strt_t ) { m_timecount_enabled = TIMER_ENABLED; m_prescaler = 0; return 0; }
+OPHANDLER( strt_cnt ) { burn_cycles(1); m_timecount_enabled = COUNTER_ENABLED; m_t1_history = test_r(1); }
+OPHANDLER( strt_t ) { burn_cycles(1); m_timecount_enabled = TIMER_ENABLED; m_prescaler = 0; }
-OPHANDLER( swap_a ) { m_a = (m_a << 4) | (m_a >> 4); return 0; }
+OPHANDLER( swap_a ) { burn_cycles(1); m_a = (m_a << 4) | (m_a >> 4); }
-OPHANDLER( xch_a_r0 ) { uint8_t tmp = m_a; m_a = R0; R0 = tmp; return 0; }
-OPHANDLER( xch_a_r1 ) { uint8_t tmp = m_a; m_a = R1; R1 = tmp; return 0; }
-OPHANDLER( xch_a_r2 ) { uint8_t tmp = m_a; m_a = R2; R2 = tmp; return 0; }
-OPHANDLER( xch_a_r3 ) { uint8_t tmp = m_a; m_a = R3; R3 = tmp; return 0; }
-OPHANDLER( xch_a_r4 ) { uint8_t tmp = m_a; m_a = R4; R4 = tmp; return 0; }
-OPHANDLER( xch_a_r5 ) { uint8_t tmp = m_a; m_a = R5; R5 = tmp; return 0; }
-OPHANDLER( xch_a_r6 ) { uint8_t tmp = m_a; m_a = R6; R6 = tmp; return 0; }
-OPHANDLER( xch_a_r7 ) { uint8_t tmp = m_a; m_a = R7; R7 = tmp; return 0; }
-OPHANDLER( xch_a_xr0 ) { uint8_t tmp = m_a; m_a = ram_r(R0); ram_w(R0, tmp); return 0; }
-OPHANDLER( xch_a_xr1 ) { uint8_t tmp = m_a; m_a = ram_r(R1); ram_w(R1, tmp); return 0; }
+OPHANDLER( xch_a_r0 ) { burn_cycles(1); uint8_t tmp = m_a; m_a = R0; R0 = tmp; }
+OPHANDLER( xch_a_r1 ) { burn_cycles(1); uint8_t tmp = m_a; m_a = R1; R1 = tmp; }
+OPHANDLER( xch_a_r2 ) { burn_cycles(1); uint8_t tmp = m_a; m_a = R2; R2 = tmp; }
+OPHANDLER( xch_a_r3 ) { burn_cycles(1); uint8_t tmp = m_a; m_a = R3; R3 = tmp; }
+OPHANDLER( xch_a_r4 ) { burn_cycles(1); uint8_t tmp = m_a; m_a = R4; R4 = tmp; }
+OPHANDLER( xch_a_r5 ) { burn_cycles(1); uint8_t tmp = m_a; m_a = R5; R5 = tmp; }
+OPHANDLER( xch_a_r6 ) { burn_cycles(1); uint8_t tmp = m_a; m_a = R6; R6 = tmp; }
+OPHANDLER( xch_a_r7 ) { burn_cycles(1); uint8_t tmp = m_a; m_a = R7; R7 = tmp; }
+OPHANDLER( xch_a_xr0 ) { burn_cycles(1); uint8_t tmp = m_a; m_a = ram_r(R0); ram_w(R0, tmp); }
+OPHANDLER( xch_a_xr1 ) { burn_cycles(1); uint8_t tmp = m_a; m_a = ram_r(R1); ram_w(R1, tmp); }
-OPHANDLER( xchd_a_xr0 ) { uint8_t oldram = ram_r(R0); ram_w(R0, (oldram & 0xf0) | (m_a & 0x0f)); m_a = (m_a & 0xf0) | (oldram & 0x0f); return 0; }
-OPHANDLER( xchd_a_xr1 ) { uint8_t oldram = ram_r(R1); ram_w(R1, (oldram & 0xf0) | (m_a & 0x0f)); m_a = (m_a & 0xf0) | (oldram & 0x0f); return 0; }
+OPHANDLER( xchd_a_xr0 ) { burn_cycles(1); uint8_t oldram = ram_r(R0); ram_w(R0, (oldram & 0xf0) | (m_a & 0x0f)); m_a = (m_a & 0xf0) | (oldram & 0x0f); }
+OPHANDLER( xchd_a_xr1 ) { burn_cycles(1); uint8_t oldram = ram_r(R1); ram_w(R1, (oldram & 0xf0) | (m_a & 0x0f)); m_a = (m_a & 0xf0) | (oldram & 0x0f); }
-OPHANDLER( xrl_a_r0 ) { m_a ^= R0; return 0; }
-OPHANDLER( xrl_a_r1 ) { m_a ^= R1; return 0; }
-OPHANDLER( xrl_a_r2 ) { m_a ^= R2; return 0; }
-OPHANDLER( xrl_a_r3 ) { m_a ^= R3; return 0; }
-OPHANDLER( xrl_a_r4 ) { m_a ^= R4; return 0; }
-OPHANDLER( xrl_a_r5 ) { m_a ^= R5; return 0; }
-OPHANDLER( xrl_a_r6 ) { m_a ^= R6; return 0; }
-OPHANDLER( xrl_a_r7 ) { m_a ^= R7; return 0; }
-OPHANDLER( xrl_a_xr0 ) { m_a ^= ram_r(R0); return 0; }
-OPHANDLER( xrl_a_xr1 ) { m_a ^= ram_r(R1); return 0; }
-OPHANDLER( xrl_a_n ) { m_a ^= argument_fetch(); return 1; }
+OPHANDLER( xrl_a_r0 ) { burn_cycles(1); m_a ^= R0; }
+OPHANDLER( xrl_a_r1 ) { burn_cycles(1); m_a ^= R1; }
+OPHANDLER( xrl_a_r2 ) { burn_cycles(1); m_a ^= R2; }
+OPHANDLER( xrl_a_r3 ) { burn_cycles(1); m_a ^= R3; }
+OPHANDLER( xrl_a_r4 ) { burn_cycles(1); m_a ^= R4; }
+OPHANDLER( xrl_a_r5 ) { burn_cycles(1); m_a ^= R5; }
+OPHANDLER( xrl_a_r6 ) { burn_cycles(1); m_a ^= R6; }
+OPHANDLER( xrl_a_r7 ) { burn_cycles(1); m_a ^= R7; }
+OPHANDLER( xrl_a_xr0 ) { burn_cycles(1); m_a ^= ram_r(R0); }
+OPHANDLER( xrl_a_xr1 ) { burn_cycles(1); m_a ^= ram_r(R1); }
+OPHANDLER( xrl_a_n ) { burn_cycles(2); m_a ^= argument_fetch(); }
@@ -1097,7 +1100,6 @@ void mcs48_cpu_device::device_start()
m_dbbi = 0;
m_dbbo = 0;
m_irq_state = 0;
- m_irq_polled = 0;
/* FIXME: Current implementation suboptimal */
m_ea = (m_int_rom_size ? 0 : 1);
@@ -1166,7 +1168,6 @@ void mcs48_cpu_device::device_start()
save_item(NAME(m_dbbo));
save_item(NAME(m_irq_state));
- save_item(NAME(m_irq_polled));
save_item(NAME(m_irq_in_progress));
save_item(NAME(m_timer_overflow));
save_item(NAME(m_timer_flag));
@@ -1229,10 +1230,6 @@ int mcs48_cpu_device::check_irqs()
{
m_irq_in_progress = true;
- // force JNI to be taken (hack)
- if (m_irq_polled)
- m_pc = ((m_pc - 1) & 0xf00) | m_program.read_byte(m_pc - 1);
-
/* transfer to location 0x03 */
push_pc_psw();
m_pc = 0x03;
@@ -1317,17 +1314,15 @@ void mcs48_cpu_device::execute_run()
// iterate over remaining cycles, guaranteeing at least one instruction
do
{
- // check interrupts - also burn the 1st opcode cycle:
- // timer is updated on S4 while I/O(for single cycle opcodes) happens on S5
- burn_cycles(check_irqs() + 1);
-
m_prevpc = m_pc;
- m_irq_polled = false;
debugger_instruction_hook(m_pc);
// fetch and process opcode
unsigned opcode = opcode_fetch();
- burn_cycles((this->*m_opcode_table[opcode])());
+ (this->*m_opcode_table[opcode])();
+
+ // check interrupts
+ burn_cycles(check_irqs());
} while (m_icount > 0);
}
diff --git a/src/devices/cpu/mcs48/mcs48.h b/src/devices/cpu/mcs48/mcs48.h
index b5f04190a1e..bb6d131bb5a 100644
--- a/src/devices/cpu/mcs48/mcs48.h
+++ b/src/devices/cpu/mcs48/mcs48.h
@@ -138,7 +138,7 @@ public:
template <typename... T> void set_t0_clk_cb(T &&... args) { m_t0_clk_func.set(std::forward<T>(args)...); }
protected:
- typedef int (mcs48_cpu_device::*mcs48_ophandler)();
+ typedef void (mcs48_cpu_device::*mcs48_ophandler)();
// construction/destruction
mcs48_cpu_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock, int rom_size, int ram_size, uint8_t feature_mask, const mcs48_ophandler *opcode_table);
@@ -199,7 +199,6 @@ protected:
uint8_t m_dbbo; /* 8-bit output data buffer (UPI-41 only) */
bool m_irq_state; /* true if the IRQ line is active */
- bool m_irq_polled; /* true if last instruction was JNI (and not taken) */
bool m_irq_in_progress; /* true if an IRQ is in progress */
bool m_timer_overflow; /* true on a timer overflow; cleared by taking interrupt */
bool m_timer_flag; /* true on a timer overflow; cleared on JTF */
@@ -264,246 +263,246 @@ protected:
int check_irqs();
void burn_cycles(int count);
- int illegal();
- int add_a_r0();
- int add_a_r1();
- int add_a_r2();
- int add_a_r3();
- int add_a_r4();
- int add_a_r5();
- int add_a_r6();
- int add_a_r7();
- int add_a_xr0();
- int add_a_xr1();
- int add_a_n();
- int adc_a_r0();
- int adc_a_r1();
- int adc_a_r2();
- int adc_a_r3();
- int adc_a_r4();
- int adc_a_r5();
- int adc_a_r6();
- int adc_a_r7();
- int adc_a_xr0();
- int adc_a_xr1();
- int adc_a_n();
- int anl_a_r0();
- int anl_a_r1();
- int anl_a_r2();
- int anl_a_r3();
- int anl_a_r4();
- int anl_a_r5();
- int anl_a_r6();
- int anl_a_r7();
- int anl_a_xr0();
- int anl_a_xr1();
- int anl_a_n();
- int anl_bus_n();
- int anl_p1_n();
- int anl_p2_n();
- int anld_p4_a();
- int anld_p5_a();
- int anld_p6_a();
- int anld_p7_a();
- int call_0();
- int call_1();
- int call_2();
- int call_3();
- int call_4();
- int call_5();
- int call_6();
- int call_7();
- int clr_a();
- int clr_c();
- int clr_f0();
- int clr_f1();
- int cpl_a();
- int cpl_c();
- int cpl_f0();
- int cpl_f1();
- int da_a();
- int dec_a();
- int dec_r0();
- int dec_r1();
- int dec_r2();
- int dec_r3();
- int dec_r4();
- int dec_r5();
- int dec_r6();
- int dec_r7();
- int dis_i();
- int dis_tcnti();
- int djnz_r0();
- int djnz_r1();
- int djnz_r2();
- int djnz_r3();
- int djnz_r4();
- int djnz_r5();
- int djnz_r6();
- int djnz_r7();
- int en_i();
- int en_tcnti();
- int en_dma();
- int en_flags();
- int ent0_clk();
- int in_a_p0();
- int in_a_p1();
- int in_a_p2();
- int ins_a_bus();
- int in_a_dbb();
- int inc_a();
- int inc_r0();
- int inc_r1();
- int inc_r2();
- int inc_r3();
- int inc_r4();
- int inc_r5();
- int inc_r6();
- int inc_r7();
- int inc_xr0();
- int inc_xr1();
- int jb_0();
- int jb_1();
- int jb_2();
- int jb_3();
- int jb_4();
- int jb_5();
- int jb_6();
- int jb_7();
- int jc();
- int jf0();
- int jf1();
- int jnc();
- int jni();
- int jnibf();
- int jnt_0();
- int jnt_1();
- int jnz();
- int jobf();
- int jtf();
- int jt_0();
- int jt_1();
- int jz();
- int jmp_0();
- int jmp_1();
- int jmp_2();
- int jmp_3();
- int jmp_4();
- int jmp_5();
- int jmp_6();
- int jmp_7();
- int jmpp_xa();
- int mov_a_n();
- int mov_a_psw();
- int mov_a_r0();
- int mov_a_r1();
- int mov_a_r2();
- int mov_a_r3();
- int mov_a_r4();
- int mov_a_r5();
- int mov_a_r6();
- int mov_a_r7();
- int mov_a_xr0();
- int mov_a_xr1();
- int mov_a_t();
- int mov_psw_a();
- int mov_sts_a();
- int mov_r0_a();
- int mov_r1_a();
- int mov_r2_a();
- int mov_r3_a();
- int mov_r4_a();
- int mov_r5_a();
- int mov_r6_a();
- int mov_r7_a();
- int mov_r0_n();
- int mov_r1_n();
- int mov_r2_n();
- int mov_r3_n();
- int mov_r4_n();
- int mov_r5_n();
- int mov_r6_n();
- int mov_r7_n();
- int mov_t_a();
- int mov_xr0_a();
- int mov_xr1_a();
- int mov_xr0_n();
- int mov_xr1_n();
- int movd_a_p4();
- int movd_a_p5();
- int movd_a_p6();
- int movd_a_p7();
- int movd_p4_a();
- int movd_p5_a();
- int movd_p6_a();
- int movd_p7_a();
- int movp_a_xa();
- int movp3_a_xa();
- int movx_a_xr0();
- int movx_a_xr1();
- int movx_xr0_a();
- int movx_xr1_a();
- int nop();
- int orl_a_r0();
- int orl_a_r1();
- int orl_a_r2();
- int orl_a_r3();
- int orl_a_r4();
- int orl_a_r5();
- int orl_a_r6();
- int orl_a_r7();
- int orl_a_xr0();
- int orl_a_xr1();
- int orl_a_n();
- int orl_bus_n();
- int orl_p1_n();
- int orl_p2_n();
- int orld_p4_a();
- int orld_p5_a();
- int orld_p6_a();
- int orld_p7_a();
- int outl_bus_a();
- int outl_p0_a();
- int outl_p1_a();
- int outl_p2_a();
- int out_dbb_a();
- int ret();
- int retr();
- int rl_a();
- int rlc_a();
- int rr_a();
- int rrc_a();
- int sel_mb0();
- int sel_mb1();
- int sel_rb0();
- int sel_rb1();
- int stop_tcnt();
- int strt_cnt();
- int strt_t();
- int swap_a();
- int xch_a_r0();
- int xch_a_r1();
- int xch_a_r2();
- int xch_a_r3();
- int xch_a_r4();
- int xch_a_r5();
- int xch_a_r6();
- int xch_a_r7();
- int xch_a_xr0();
- int xch_a_xr1();
- int xchd_a_xr0();
- int xchd_a_xr1();
- int xrl_a_r0();
- int xrl_a_r1();
- int xrl_a_r2();
- int xrl_a_r3();
- int xrl_a_r4();
- int xrl_a_r5();
- int xrl_a_r6();
- int xrl_a_r7();
- int xrl_a_xr0();
- int xrl_a_xr1();
- int xrl_a_n();
+ void illegal();
+ void add_a_r0();
+ void add_a_r1();
+ void add_a_r2();
+ void add_a_r3();
+ void add_a_r4();
+ void add_a_r5();
+ void add_a_r6();
+ void add_a_r7();
+ void add_a_xr0();
+ void add_a_xr1();
+ void add_a_n();
+ void adc_a_r0();
+ void adc_a_r1();
+ void adc_a_r2();
+ void adc_a_r3();
+ void adc_a_r4();
+ void adc_a_r5();
+ void adc_a_r6();
+ void adc_a_r7();
+ void adc_a_xr0();
+ void adc_a_xr1();
+ void adc_a_n();
+ void anl_a_r0();
+ void anl_a_r1();
+ void anl_a_r2();
+ void anl_a_r3();
+ void anl_a_r4();
+ void anl_a_r5();
+ void anl_a_r6();
+ void anl_a_r7();
+ void anl_a_xr0();
+ void anl_a_xr1();
+ void anl_a_n();
+ void anl_bus_n();
+ void anl_p1_n();
+ void anl_p2_n();
+ void anld_p4_a();
+ void anld_p5_a();
+ void anld_p6_a();
+ void anld_p7_a();
+ void call_0();
+ void call_1();
+ void call_2();
+ void call_3();
+ void call_4();
+ void call_5();
+ void call_6();
+ void call_7();
+ void clr_a();
+ void clr_c();
+ void clr_f0();
+ void clr_f1();
+ void cpl_a();
+ void cpl_c();
+ void cpl_f0();
+ void cpl_f1();
+ void da_a();
+ void dec_a();
+ void dec_r0();
+ void dec_r1();
+ void dec_r2();
+ void dec_r3();
+ void dec_r4();
+ void dec_r5();
+ void dec_r6();
+ void dec_r7();
+ void dis_i();
+ void dis_tcnti();
+ void djnz_r0();
+ void djnz_r1();
+ void djnz_r2();
+ void djnz_r3();
+ void djnz_r4();
+ void djnz_r5();
+ void djnz_r6();
+ void djnz_r7();
+ void en_i();
+ void en_tcnti();
+ void en_dma();
+ void en_flags();
+ void ent0_clk();
+ void in_a_p0();
+ void in_a_p1();
+ void in_a_p2();
+ void ins_a_bus();
+ void in_a_dbb();
+ void inc_a();
+ void inc_r0();
+ void inc_r1();
+ void inc_r2();
+ void inc_r3();
+ void inc_r4();
+ void inc_r5();
+ void inc_r6();
+ void inc_r7();
+ void inc_xr0();
+ void inc_xr1();
+ void jb_0();
+ void jb_1();
+ void jb_2();
+ void jb_3();
+ void jb_4();
+ void jb_5();
+ void jb_6();
+ void jb_7();
+ void jc();
+ void jf0();
+ void jf1();
+ void jnc();
+ void jni();
+ void jnibf();
+ void jnt_0();
+ void jnt_1();
+ void jnz();
+ void jobf();
+ void jtf();
+ void jt_0();
+ void jt_1();
+ void jz();
+ void jmp_0();
+ void jmp_1();
+ void jmp_2();
+ void jmp_3();
+ void jmp_4();
+ void jmp_5();
+ void jmp_6();
+ void jmp_7();
+ void jmpp_xa();
+ void mov_a_n();
+ void mov_a_psw();
+ void mov_a_r0();
+ void mov_a_r1();
+ void mov_a_r2();
+ void mov_a_r3();
+ void mov_a_r4();
+ void mov_a_r5();
+ void mov_a_r6();
+ void mov_a_r7();
+ void mov_a_xr0();
+ void mov_a_xr1();
+ void mov_a_t();
+ void mov_psw_a();
+ void mov_sts_a();
+ void mov_r0_a();
+ void mov_r1_a();
+ void mov_r2_a();
+ void mov_r3_a();
+ void mov_r4_a();
+ void mov_r5_a();
+ void mov_r6_a();
+ void mov_r7_a();
+ void mov_r0_n();
+ void mov_r1_n();
+ void mov_r2_n();
+ void mov_r3_n();
+ void mov_r4_n();
+ void mov_r5_n();
+ void mov_r6_n();
+ void mov_r7_n();
+ void mov_t_a();
+ void mov_xr0_a();
+ void mov_xr1_a();
+ void mov_xr0_n();
+ void mov_xr1_n();
+ void movd_a_p4();
+ void movd_a_p5();
+ void movd_a_p6();
+ void movd_a_p7();
+ void movd_p4_a();
+ void movd_p5_a();
+ void movd_p6_a();
+ void movd_p7_a();
+ void movp_a_xa();
+ void movp3_a_xa();
+ void movx_a_xr0();
+ void movx_a_xr1();
+ void movx_xr0_a();
+ void movx_xr1_a();
+ void nop();
+ void orl_a_r0();
+ void orl_a_r1();
+ void orl_a_r2();
+ void orl_a_r3();
+ void orl_a_r4();
+ void orl_a_r5();
+ void orl_a_r6();
+ void orl_a_r7();
+ void orl_a_xr0();
+ void orl_a_xr1();
+ void orl_a_n();
+ void orl_bus_n();
+ void orl_p1_n();
+ void orl_p2_n();
+ void orld_p4_a();
+ void orld_p5_a();
+ void orld_p6_a();
+ void orld_p7_a();
+ void outl_bus_a();
+ void outl_p0_a();
+ void outl_p1_a();
+ void outl_p2_a();
+ void out_dbb_a();
+ void ret();
+ void retr();
+ void rl_a();
+ void rlc_a();
+ void rr_a();
+ void rrc_a();
+ void sel_mb0();
+ void sel_mb1();
+ void sel_rb0();
+ void sel_rb1();
+ void stop_tcnt();
+ void strt_cnt();
+ void strt_t();
+ void swap_a();
+ void xch_a_r0();
+ void xch_a_r1();
+ void xch_a_r2();
+ void xch_a_r3();
+ void xch_a_r4();
+ void xch_a_r5();
+ void xch_a_r6();
+ void xch_a_r7();
+ void xch_a_xr0();
+ void xch_a_xr1();
+ void xchd_a_xr0();
+ void xchd_a_xr1();
+ void xrl_a_r0();
+ void xrl_a_r1();
+ void xrl_a_r2();
+ void xrl_a_r3();
+ void xrl_a_r4();
+ void xrl_a_r5();
+ void xrl_a_r6();
+ void xrl_a_r7();
+ void xrl_a_xr0();
+ void xrl_a_xr1();
+ void xrl_a_n();
};
class i8021_device : public mcs48_cpu_device
diff --git a/src/devices/cpu/upd78k/upd78k1d.cpp b/src/devices/cpu/upd78k/upd78k1d.cpp
index f3bb9086ea7..e3c8dc80625 100644
--- a/src/devices/cpu/upd78k/upd78k1d.cpp
+++ b/src/devices/cpu/upd78k/upd78k1d.cpp
@@ -122,7 +122,7 @@ offs_t upd78k1_disassembler::dasm_02xx(std::ostream &stream, u8 op1, u8 op2, off
util::stream_format(stream, "%s.%d,", s_r_names[(op2 & 0x08) >> 3], op2 & 0x07);
else
util::stream_format(stream, "%s,", s_psw_bits[op2 & 0x07]);
- format_jdisp8(stream, pc + 4, opcodes.r8(pc + 3));
+ format_jdisp8(stream, pc + 3, opcodes.r8(pc + 2));
return 3 | SUPPORTED;
}
else
diff --git a/src/devices/cpu/upd78k/upd78k3d.cpp b/src/devices/cpu/upd78k/upd78k3d.cpp
index 009a21aa929..87cfb6bf4c8 100644
--- a/src/devices/cpu/upd78k/upd78k3d.cpp
+++ b/src/devices/cpu/upd78k/upd78k3d.cpp
@@ -234,7 +234,7 @@ offs_t upd78k3_disassembler::dasm_02xx(std::ostream &stream, u8 op1, u8 op2, off
util::stream_format(stream, "%c.%d,", BIT(op2, 3) ? 'A' : 'X', op2 & 0x07);
else
util::stream_format(stream, "%s,", m_psw_bits[op2 & 0x0f]);
- format_jdisp8(stream, pc + 4, opcodes.r8(pc + 3));
+ format_jdisp8(stream, pc + 3, opcodes.r8(pc + 2));
return 3 | SUPPORTED;
}
else
diff --git a/src/devices/machine/icm7170.cpp b/src/devices/machine/icm7170.cpp
index 77a507ba8a1..005626b6348 100644
--- a/src/devices/machine/icm7170.cpp
+++ b/src/devices/machine/icm7170.cpp
@@ -10,7 +10,7 @@
#include "icm7170.h"
#include "coreutil.h"
-#define VERBOSE (1)
+#define VERBOSE (0)
#include "logmacro.h"
DEFINE_DEVICE_TYPE(ICM7170, icm7170_device, "icm7170", "Intersil/Renesas ICM7170 Real Time Clock")
@@ -73,7 +73,8 @@ icm7170_device::icm7170_device(const machine_config &mconfig, const char *tag, d
: device_t(mconfig, ICM7170, tag, owner, clock),
device_rtc_interface(mconfig, *this),
device_nvram_interface(mconfig, *this),
- m_out_irq_cb(*this)
+ m_out_irq_cb(*this),
+ m_out_irq_state(false)
{
}
@@ -87,9 +88,13 @@ void icm7170_device::device_start()
m_out_irq_cb.resolve_safe();
m_timer = timer_alloc(ICM7170_TIMER_ID);
- m_timer->adjust(attotime::never);
+
+ // TODO: frequency should be based on input clock and divisor
+ m_timer->adjust(attotime::from_hz(100), 0, attotime::from_hz(100));
+ m_timer->enable(false);
save_item(NAME(m_regs));
+ save_item(NAME(m_out_irq_state));
}
//-------------------------------------------------
@@ -109,6 +114,93 @@ void icm7170_device::device_reset()
void icm7170_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
{
+ // advance hundredths
+ m_irq_status |= IRQ_BIT_100TH_SECOND;
+ if (m_regs[REG_CNT_100TH_SEC]++ == 99)
+ {
+ m_regs[REG_CNT_100TH_SEC] = 0;
+
+ if (m_regs[REG_COMMAND] & CMD_REG_24_HOUR)
+ LOG("device_timer %02d-%02d-%02d %02d:%02d:%02d\n",
+ m_regs[REG_CNT_YEAR], m_regs[REG_CNT_MONTH], m_regs[REG_CNT_DAY],
+ m_regs[REG_CNT_HOURS], m_regs[REG_CNT_MINUTES], m_regs[REG_CNT_SECONDS]);
+ else
+ LOG("device_timer %02d-%02d-%02d %02d:%02d:%02d %s\n",
+ m_regs[REG_CNT_YEAR], m_regs[REG_CNT_MONTH], m_regs[REG_CNT_DAY],
+ m_regs[REG_CNT_HOURS] & 0xf, m_regs[REG_CNT_MINUTES], m_regs[REG_CNT_SECONDS],
+ (m_regs[REG_CNT_HOURS] & 0x80) ? "pm" : "am");
+
+ // advance seconds
+ m_irq_status |= IRQ_BIT_SECOND;
+ if (m_regs[REG_CNT_SECONDS]++ == 59)
+ {
+ m_regs[REG_CNT_SECONDS] = 0;
+
+ // advance minutes
+ m_irq_status |= IRQ_BIT_MINUTE;
+ if (m_regs[REG_CNT_MINUTES]++ == 59)
+ {
+ m_regs[REG_CNT_MINUTES] = 0;
+
+ // invert am/pm bit at 12:00
+ if (!(m_regs[REG_COMMAND] & CMD_REG_24_HOUR) && (m_regs[REG_CNT_HOURS] & 0xf) == 11)
+ m_regs[REG_CNT_HOURS] ^= 0x80;
+
+ // advance hours
+ m_irq_status |= IRQ_BIT_HOUR;
+ if (((m_regs[REG_COMMAND] & CMD_REG_24_HOUR) && (m_regs[REG_CNT_HOURS] == 23))
+ || (!(m_regs[REG_COMMAND] & CMD_REG_24_HOUR) && (m_regs[REG_CNT_HOURS] & 0xf) == 12))
+ {
+ if (m_regs[REG_COMMAND] & CMD_REG_24_HOUR)
+ m_regs[REG_CNT_HOURS] = 0;
+ else
+ m_regs[REG_CNT_HOURS] = (m_regs[REG_CNT_HOURS] & 0x80) | 1;
+
+ // advance days
+ m_irq_status |= IRQ_BIT_DAY;
+ if (m_regs[REG_CNT_DAY]++ == gregorian_days_in_month(m_regs[REG_CNT_MONTH] & 0xf, (m_regs[REG_CNT_YEAR] & 0x7f) + 2000))
+ {
+ m_regs[REG_CNT_DAY] = 1;
+
+ // advance months
+ if (m_regs[REG_CNT_MONTH]++ == 12)
+ {
+ m_regs[REG_CNT_MONTH] = 1;
+
+ // advance years
+ if (m_regs[REG_CNT_YEAR]++ == 99)
+ m_regs[REG_CNT_YEAR] = 0;
+ }
+ }
+
+ // advance day of week
+ if (m_regs[REG_CNT_DAY_OF_WEEK]++ == 6)
+ m_regs[REG_CNT_DAY_OF_WEEK] = 0;
+ }
+ else
+ m_regs[REG_CNT_HOURS]++;
+ }
+ }
+ }
+
+ // check tenths interrupt
+ if (!(m_regs[REG_CNT_100TH_SEC] % 10))
+ m_irq_status |= IRQ_BIT_10TH_SECOND;
+
+ // check alarm
+ if (m_irq_mask & IRQ_BIT_ALARM)
+ if (BIT(m_regs[REG_RAM_YEAR], 7) || !((m_regs[REG_RAM_YEAR] ^ m_regs[REG_CNT_YEAR]) & 0x7f))
+ if (BIT(m_regs[REG_RAM_MONTH], 7) || !((m_regs[REG_RAM_MONTH] ^ m_regs[REG_CNT_MONTH]) & 0xf))
+ if (BIT(m_regs[REG_RAM_DAY], 7) || !((m_regs[REG_RAM_DAY] ^ m_regs[REG_CNT_DAY]) & 0x1f))
+ if (BIT(m_regs[REG_RAM_HOURS], 6)
+ || ((m_regs[REG_COMMAND] & CMD_REG_24_HOUR) && !((m_regs[REG_RAM_HOURS] ^ m_regs[REG_CNT_HOURS]) & 0x1f))
+ || (!(m_regs[REG_COMMAND] & CMD_REG_24_HOUR) && !((m_regs[REG_RAM_HOURS] ^ m_regs[REG_CNT_HOURS]) & 0x8f)))
+ if (BIT(m_regs[REG_RAM_MINUTES], 7) || !((m_regs[REG_RAM_MINUTES] ^ m_regs[REG_CNT_MINUTES]) & 0x3f))
+ if (BIT(m_regs[REG_RAM_SECONDS], 7) || !((m_regs[REG_RAM_SECONDS] ^ m_regs[REG_CNT_SECONDS]) & 0x3f))
+ if (BIT(m_regs[REG_RAM_100TH_SEC], 7) || !((m_regs[REG_RAM_100TH_SEC] ^ m_regs[REG_CNT_100TH_SEC]) & 0x7f))
+ m_irq_status |= IRQ_BIT_ALARM;
+
+ recalc_irqs();
}
@@ -124,9 +216,29 @@ void icm7170_device::rtc_clock_updated(int year, int month, int day, int day_of_
m_regs[REG_CNT_MONTH] = month;
m_regs[REG_CNT_DAY] = day;
m_regs[REG_CNT_DAY_OF_WEEK] = day_of_week;
- m_regs[REG_CNT_HOURS] = hour;
+ if (!(m_regs[REG_COMMAND] & CMD_REG_24_HOUR))
+ {
+ // transform hours from 0..23 to 1..12
+ m_regs[REG_CNT_HOURS] = (hour > 12) ? hour - 12 : hour ? hour : 1;
+
+ // set am/pm bit
+ if (hour > 11)
+ m_regs[REG_CNT_HOURS] |= 0x80;
+ }
+ else
+ m_regs[REG_CNT_HOURS] = hour;
m_regs[REG_CNT_MINUTES] = minute;
m_regs[REG_CNT_SECONDS] = second;
+
+ if (m_regs[REG_COMMAND] & CMD_REG_24_HOUR)
+ LOG("rtc_clock_updated %02d-%02d-%02d %02d:%02d:%02d\n",
+ m_regs[REG_CNT_YEAR], m_regs[REG_CNT_MONTH], m_regs[REG_CNT_DAY],
+ m_regs[REG_CNT_HOURS], m_regs[REG_CNT_MINUTES], m_regs[REG_CNT_SECONDS]);
+ else
+ LOG("rtc_clock_updated %02d-%02d-%02d %02d:%02d:%02d %s\n",
+ m_regs[REG_CNT_YEAR], m_regs[REG_CNT_MONTH], m_regs[REG_CNT_DAY],
+ m_regs[REG_CNT_HOURS] & 0xf, m_regs[REG_CNT_MINUTES], m_regs[REG_CNT_SECONDS],
+ (m_regs[REG_CNT_HOURS] & 0x80) ? "pm" : "am");
}
}
@@ -166,11 +278,13 @@ void icm7170_device::nvram_write(emu_file &file)
// non-inherited device functions
uint8_t icm7170_device::read(offs_t offset)
{
- uint8_t data = m_regs[offset & 0x1f];
+ uint8_t data = m_regs[offset & 0x1f];
if ((offset & 0x1f) == REG_INT_STATUS_AND_MASK)
{
data = m_irq_status;
+ m_irq_status = 0;
+ recalc_irqs();
}
LOG("ICM7170 Register %d Read %02x\n", offset, data);
@@ -180,6 +294,7 @@ uint8_t icm7170_device::read(offs_t offset)
void icm7170_device::write(offs_t offset, uint8_t data)
{
+ // TODO: unused register bits should be masked
switch (offset & 0x1f)
{
case REG_INT_STATUS_AND_MASK:
@@ -188,6 +303,10 @@ void icm7170_device::write(offs_t offset, uint8_t data)
recalc_irqs();
break;
+ case REG_COMMAND:
+ m_timer->enable(data & CMD_REG_RUN);
+ // fall through
+
default:
m_regs[offset & 0x1f] = data;
LOG("ICM7170 Register %d Write %02x\n", offset & 0x1f, data);
@@ -197,5 +316,16 @@ void icm7170_device::write(offs_t offset, uint8_t data)
void icm7170_device::recalc_irqs()
{
+ if (m_irq_status & m_irq_mask & ~IRQ_BIT_GLOBAL)
+ m_irq_status |= IRQ_BIT_GLOBAL;
+ else
+ m_irq_status &= ~IRQ_BIT_GLOBAL;
+
+ bool const irq_state = (m_regs[REG_COMMAND] & CMD_REG_IRQ_ENABLE) && (m_irq_status & IRQ_BIT_GLOBAL);
+ if (m_out_irq_state != irq_state)
+ {
+ m_out_irq_state = irq_state;
+ m_out_irq_cb(m_out_irq_state);
+ }
}
diff --git a/src/devices/machine/icm7170.h b/src/devices/machine/icm7170.h
index 0d5a7fb262c..e38a556b06c 100644
--- a/src/devices/machine/icm7170.h
+++ b/src/devices/machine/icm7170.h
@@ -75,6 +75,7 @@ private:
void recalc_irqs();
devcb_write_line m_out_irq_cb;
+ bool m_out_irq_state;
uint8_t m_regs[0x20];
uint8_t m_irq_mask, m_irq_status;
diff --git a/src/devices/video/epic12.cpp b/src/devices/video/epic12.cpp
index 3adca495c8c..ed23f2ebe88 100644
--- a/src/devices/video/epic12.cpp
+++ b/src/devices/video/epic12.cpp
@@ -49,7 +49,7 @@ void epic12_device::device_start()
m_clip = m_bitmaps->cliprect();
m_clip.set(0, 0x2000 - 1, 0, 0x1000 - 1);
-#ifdef DEBUG_VRAM_VIEWER
+#if DEBUG_VRAM_VIEWER
m_debug_vram_view_en = false;
m_prev_screen_width = m_curr_screen_width = screen().width();
m_prev_screen_height = m_curr_screen_height = screen().height();
@@ -140,6 +140,23 @@ inline u16 epic12_device::COPY_NEXT_WORD(address_space &space, offs_t *addr)
return data;
}
+/*
+ Upload command
+ This command uploads gfx data to VRAM, from Main CPU RAM.
+
+ Offset Bits Description
+ fedcba98 76543210
+ 00 0010---- -------- 0x2 for upload
+ ----0000 00000000 Fixed for upload?
+ 02 00000000 00000000 ""
+ 04 10011001 10011001 ""
+ 06 10011001 10011001 ""
+ 08 ---xxxxx xxxxxxxx Destination X start position
+ 0a ----xxxx xxxxxxxx Destination Y start position
+ 0c ---xxxxx xxxxxxxx Source Width
+ 0e ----xxxx xxxxxxxx Source Height
+ 10...10 + (Width * Height * 2) Source GFX data (ARGB1555 format)
+*/
inline void epic12_device::gfx_upload_shadow_copy(address_space &space, offs_t *addr)
{
@@ -301,6 +318,41 @@ const epic12_device::blitfunction epic12_device::f1_ti0_tr0_blit_funcs[64] =
};
+/*
+ Draw command
+ This command draws gfx data.
+
+ Offset Bits Description
+ fedcba98 76543210
+ 00 0001---- -------- 0x1 for draw
+ ----x--- -------- Flip X
+ -----x-- -------- Flip Y
+ ------x- -------- Enable Blending
+ -------x -------- Enable Transparent
+ -------- -xxx---- Source Blending mode
+ -------- -----xxx Destination Blending mode
+ 02 xxxxxxxx -------- Source Alpha value
+ -------- xxxxxxxx Destination Alpha value
+ 04 ---xxxxx xxxxxxxx Source X start position
+ 06 ----xxxx xxxxxxxx Source Y start position
+ 08 sxxxxxxx xxxxxxxx Destination X start position
+ 0a sxxxxxxx xxxxxxxx Destination Y start position
+ 0c ---xxxxx xxxxxxxx Source Width
+ 0e ----xxxx xxxxxxxx Source Height
+ 10 -------- xxxxxxxx Source Red multiplication (0x80 = 100%)
+ 12 xxxxxxxx -------- Source Green multiplication (0x80 = 100%)
+ -------- xxxxxxxx Source Blue multiplication (0x80 = 100%)
+
+ Blending mode (description from ibara test mode)
+ 000 +alpha
+ 001 +source
+ 010 +destination
+ 100 -alpha
+ 101 -source
+ 110 -destination
+ others are reserved/disable?
+*/
+
inline void epic12_device::gfx_draw_shadow_copy(address_space &space, offs_t *addr)
{
COPY_NEXT_WORD(space, addr);
@@ -534,6 +586,7 @@ void epic12_device::gfx_create_shadow_copy(address_space &space)
while (1)
{
+ // request commands from main CPU RAM
const u16 data = COPY_NEXT_WORD(space, &addr);
switch (data & 0xf000)
@@ -576,6 +629,7 @@ void epic12_device::gfx_exec(void)
while (1)
{
+ // request commands from main CPU RAM
const u16 data = READ_NEXT_WORD(&addr);
switch (data & 0xf000)
@@ -618,6 +672,7 @@ void epic12_device::gfx_exec_unsafe(void)
while (1)
{
+ // request commands from main CPU RAM
const u16 data = READ_NEXT_WORD(&addr);
switch (data & 0xf000)
@@ -714,7 +769,7 @@ void epic12_device::gfx_exec_w(address_space &space, offs_t offset, u32 data, u3
}
m_gfx_addr_shadowcopy = m_gfx_addr;
- m_gfx_scroll_0_x_shadowcopy = m_gfx_scroll_0_x;
+ m_gfx_scroll_0_x_shadowcopy = m_gfx_scroll_0_x;
m_gfx_scroll_0_y_shadowcopy = m_gfx_scroll_0_y;
m_gfx_scroll_1_x_shadowcopy = m_gfx_scroll_1_x;
m_gfx_scroll_1_y_shadowcopy = m_gfx_scroll_1_y;
@@ -782,7 +837,7 @@ void epic12_device::draw_screen(bitmap_rgb32 &bitmap, const rectangle &cliprect)
bitmap.fill(0, cliprect);
-#ifdef DEBUG_VRAM_VIEWER
+#if DEBUG_VRAM_VIEWER
int curr_width = m_curr_screen_width;
int curr_height = m_curr_screen_height;
rectangle curr_visarea = m_curr_screen_visarea;
@@ -809,7 +864,7 @@ void epic12_device::draw_screen(bitmap_rgb32 &bitmap, const rectangle &cliprect)
//printf("SCREEN UPDATE\n %d %d %d %d\n", scroll_0_x, scroll_0_y, scroll_1_x, scroll_1_y);
-#ifdef DEBUG_VRAM_VIEWER
+#if DEBUG_VRAM_VIEWER
if (m_debug_vram_view_en)
copybitmap(bitmap, *m_bitmaps, 0, 0, 0, 0, cliprect);
else
diff --git a/src/emu/debug/debughlp.cpp b/src/emu/debug/debughlp.cpp
index 88dcf85bda8..55e3524f7ef 100644
--- a/src/emu/debug/debughlp.cpp
+++ b/src/emu/debug/debughlp.cpp
@@ -112,10 +112,10 @@ static const help_item static_help_list[] =
" f[ind] <address>,<length>[,<data>[,...]] -- search program memory for data\n"
" f[ind]d <address>,<length>[,<data>[,...]] -- search data memory for data\n"
" f[ind]i <address>,<length>[,<data>[,...]] -- search I/O memory for data\n"
- " dump <filename>,<address>,<length>[,<size>[,<ascii>[,<CPU>]]] -- dump program memory as text\n"
- " dumpd <filename>,<address>,<length>[,<size>[,<ascii>[,<CPU>]]] -- dump data memory as text\n"
- " dumpi <filename>,<address>,<length>[,<size>[,<ascii>[,<CPU>]]] -- dump I/O memory as text\n"
- " dumpo <filename>,<address>,<length>[,<size>[,<ascii>[,<CPU>]]] -- dump opcodes memory as text\n"
+ " dump <filename>,<address>,<length>[,<size>[,<ascii>[,<rowsize>[,<CPU>]]]] -- dump program memory as text\n"
+ " dumpd <filename>,<address>,<length>[,<size>[,<ascii>[,<rowsize>[,<CPU>]]]] -- dump data memory as text\n"
+ " dumpi <filename>,<address>,<length>[,<size>[,<ascii>[,<rowsize>[,<CPU>]]]] -- dump I/O memory as text\n"
+ " dumpo <filename>,<address>,<length>[,<size>[,<ascii>[,<rowsize>[,<CPU>]]]] -- dump opcodes memory as text\n"
" save <filename>,<address>,<length>[,<CPU>] -- save binary program memory to the given file\n"
" saved <filename>,<address>,<length>[,<CPU>] -- save binary data memory to the given file\n"
" savei <filename>,<address>,<length>[,<CPU>] -- save binary I/O memory to the given file\n"
diff --git a/src/emu/screen.cpp b/src/emu/screen.cpp
index 22a55bdb531..1a4fc9faf9b 100644
--- a/src/emu/screen.cpp
+++ b/src/emu/screen.cpp
@@ -569,7 +569,7 @@ screen_device::screen_device(const machine_config &mconfig, const char *tag, dev
, m_curtexture(0)
, m_changed(true)
, m_last_partial_scan(0)
- , m_partial_scan_hpos(0)
+ , m_partial_scan_hpos(-1)
, m_color(rgb_t(0xff, 0xff, 0xff, 0xff))
, m_brightness(0xff)
, m_frame_period(DEFAULT_FRAME_PERIOD.as_attoseconds())
@@ -1293,16 +1293,23 @@ void screen_device::update_now()
int current_hpos = hpos();
rectangle clip = m_visarea;
+ // if beam position is the same, there's nothing to update
+ if (current_vpos == m_last_partial_scan && current_hpos == m_partial_scan_hpos)
+ {
+ LOG_PARTIAL_UPDATES(("skipped because beam position is unchanged\n"));
+ return;
+ }
+
LOG_PARTIAL_UPDATES(("update_now(): Y=%d, X=%d, last partial %d, partial hpos %d (vis %d %d)\n", current_vpos, current_hpos, m_last_partial_scan, m_partial_scan_hpos, m_visarea.right(), m_visarea.bottom()));
// start off by doing a partial update up to the line before us, in case that was necessary
if (current_vpos > m_last_partial_scan)
{
// if the line before us was incomplete, we must do it in two pieces
- if (m_partial_scan_hpos > 0)
+ if (m_partial_scan_hpos >= 0)
{
// now finish the previous partial scanline
- clip.set((std::max)(clip.left(), m_partial_scan_hpos),
+ clip.set((std::max)(clip.left(), m_partial_scan_hpos + 1),
clip.right(),
(std::max)(clip.top(), m_last_partial_scan),
(std::min)(clip.bottom(), m_last_partial_scan));
@@ -1312,6 +1319,7 @@ void screen_device::update_now()
{
g_profiler.start(PROFILER_VIDEO);
+ u32 flags = 0;
screen_bitmap &curbitmap = m_bitmap[m_curbitmap];
if (m_video_attributes & VIDEO_VARIABLE_WIDTH)
{
@@ -1319,8 +1327,8 @@ void screen_device::update_now()
switch (curbitmap.format())
{
default:
- case BITMAP_FORMAT_IND16: m_screen_update_ind16(*this, *(bitmap_ind16 *)m_scan_bitmaps[m_curbitmap][m_last_partial_scan], clip); break;
- case BITMAP_FORMAT_RGB32: m_screen_update_rgb32(*this, *(bitmap_rgb32 *)m_scan_bitmaps[m_curbitmap][m_last_partial_scan], clip); break;
+ case BITMAP_FORMAT_IND16: flags = m_screen_update_ind16(*this, *(bitmap_ind16 *)m_scan_bitmaps[m_curbitmap][m_last_partial_scan], clip); break;
+ case BITMAP_FORMAT_RGB32: flags = m_screen_update_rgb32(*this, *(bitmap_rgb32 *)m_scan_bitmaps[m_curbitmap][m_last_partial_scan], clip); break;
}
}
else
@@ -1328,16 +1336,20 @@ void screen_device::update_now()
switch (curbitmap.format())
{
default:
- case BITMAP_FORMAT_IND16: m_screen_update_ind16(*this, curbitmap.as_ind16(), clip); break;
- case BITMAP_FORMAT_RGB32: m_screen_update_rgb32(*this, curbitmap.as_rgb32(), clip); break;
+ case BITMAP_FORMAT_IND16: flags = m_screen_update_ind16(*this, curbitmap.as_ind16(), clip); break;
+ case BITMAP_FORMAT_RGB32: flags = m_screen_update_rgb32(*this, curbitmap.as_rgb32(), clip); break;
}
}
- m_partial_updates_this_frame++;
g_profiler.stop();
- m_partial_scan_hpos = 0;
- m_last_partial_scan++;
+ m_partial_updates_this_frame++;
+
+ // if we modified the bitmap, we have to commit
+ m_changed |= ~flags & UPDATE_HAS_NOT_CHANGED;
}
+
+ m_partial_scan_hpos = -1;
+ m_last_partial_scan++;
}
if (current_vpos > m_last_partial_scan)
{
@@ -1348,7 +1360,7 @@ void screen_device::update_now()
// now draw this partial scanline
clip = m_visarea;
- clip.set((std::max)(clip.left(), m_partial_scan_hpos),
+ clip.set((std::max)(clip.left(), m_partial_scan_hpos + 1),
(std::min)(clip.right(), current_hpos),
(std::max)(clip.top(), current_vpos),
(std::min)(clip.bottom(), current_vpos));
@@ -1387,18 +1399,11 @@ void screen_device::update_now()
// if we modified the bitmap, we have to commit
m_changed |= ~flags & UPDATE_HAS_NOT_CHANGED;
-
- // remember where we left off
- m_partial_scan_hpos = current_hpos;
- m_last_partial_scan = current_vpos;
-
- // if we completed the line, mark it so
- if (current_hpos >= m_visarea.right())
- {
- m_partial_scan_hpos = 0;
- m_last_partial_scan = current_vpos + 1;
- }
}
+
+ // remember where we left off
+ m_partial_scan_hpos = current_hpos;
+ m_last_partial_scan = current_vpos;
}
@@ -1410,7 +1415,7 @@ void screen_device::update_now()
void screen_device::reset_partial_updates()
{
m_last_partial_scan = 0;
- m_partial_scan_hpos = 0;
+ m_partial_scan_hpos = -1;
m_partial_updates_this_frame = 0;
m_scanline0_timer->adjust(time_until_pos(0));
}
diff --git a/src/emu/screen.h b/src/emu/screen.h
index 87545fc99a5..62b32ee8b99 100644
--- a/src/emu/screen.h
+++ b/src/emu/screen.h
@@ -408,6 +408,7 @@ public:
// updating
int partial_updates() const { return m_partial_updates_this_frame; }
+ int partial_scan_hpos() const { return m_partial_scan_hpos; }
bool update_partial(int scanline);
void update_now();
void reset_partial_updates();
diff --git a/src/emu/video.cpp b/src/emu/video.cpp
index 2d93baddeb5..e14ad211f23 100644
--- a/src/emu/video.cpp
+++ b/src/emu/video.cpp
@@ -266,7 +266,7 @@ void video_manager::frame_update(bool from_debugger)
screen_device *const screen = screen_device_iterator(machine().root_device()).first();
bool const debugger_enabled = machine().debug_flags & DEBUG_FLAG_ENABLED;
bool const within_instruction_hook = debugger_enabled && machine().debugger().within_instruction_hook();
- if (screen && (machine().paused() || from_debugger || within_instruction_hook))
+ if (screen && ((machine().paused() && machine().options().update_in_pause()) || from_debugger || within_instruction_hook))
screen->reset_partial_updates();
}
}
@@ -642,7 +642,10 @@ bool video_manager::finish_screen_updates()
bool has_live_screen = false;
for (screen_device &screen : iter)
{
+ if (screen.partial_scan_hpos() >= 0) // previous update ended mid-scanline
+ screen.update_now();
screen.update_partial(screen.visible_area().max_y);
+
if (machine().render().is_live(screen))
has_live_screen = true;
}
diff --git a/src/frontend/mame/audit.cpp b/src/frontend/mame/audit.cpp
index 6f2157a3ac4..f8d2cbdd9d4 100644
--- a/src/frontend/mame/audit.cpp
+++ b/src/frontend/mame/audit.cpp
@@ -72,10 +72,11 @@ media_auditor::summary media_auditor::audit_media(const char *validation)
char const *const name(ROM_GETNAME(rom));
util::hash_collection const hashes(ROM_GETHASHDATA(rom));
- device_t *const shared_device(find_shared_device(device, name, hashes, ROM_GETLENGTH(rom)));
+ device_t *const shared_device(find_shared_device(device, name, hashes, rom_file_size(rom)));
+ const auto dumped(!hashes.flag(util::hash_collection::FLAG_NO_DUMP));
// count the number of files with hashes
- if (!hashes.flag(util::hash_collection::FLAG_NO_DUMP) && !ROM_ISOPTIONAL(rom))
+ if (dumped && !ROM_ISOPTIONAL(rom))
{
required++;
if (shared_device)
@@ -91,7 +92,7 @@ media_auditor::summary media_auditor::audit_media(const char *validation)
if (record)
{
// count the number of files that are found.
- if ((record->status() == audit_status::GOOD) || ((record->status() == audit_status::FOUND_INVALID) && !find_shared_device(device, name, record->actual_hashes(), record->actual_length())))
+ if (!device.owner() && ((record->status() == audit_status::GOOD && dumped) || (record->status() == audit_status::FOUND_INVALID && !find_shared_device(device, name, record->actual_hashes(), record->actual_length()))))
{
found++;
if (shared_device)
@@ -515,7 +516,7 @@ device_t *media_auditor::find_shared_device(device_t &device, const char *name,
{
for (const rom_entry *rom = rom_first_file(region); rom; rom = rom_next_file(rom))
{
- if (ROM_GETLENGTH(rom) == romlength)
+ if (rom_file_size(rom) == romlength)
{
util::hash_collection hashes(ROM_GETHASHDATA(rom));
if ((dumped && hashes == romhashes) || (!dumped && ROM_GETNAME(rom) == name))
@@ -535,7 +536,7 @@ device_t *media_auditor::find_shared_device(device_t &device, const char *name,
{
for (const rom_entry *rom = rom_first_file(region); rom; rom = rom_next_file(rom))
{
- if (ROM_GETLENGTH(rom) == romlength)
+ if (rom_file_size(rom) == romlength)
{
util::hash_collection hashes(ROM_GETHASHDATA(rom));
if ((dumped && hashes == romhashes) || (!dumped && ROM_GETNAME(rom) == name))
diff --git a/src/lib/netlist/build/makefile b/src/lib/netlist/build/makefile
index e142f7c0d7e..07c1e8d89f9 100644
--- a/src/lib/netlist/build/makefile
+++ b/src/lib/netlist/build/makefile
@@ -209,12 +209,12 @@ NLOBJS := \
$(NLOBJ)/devices/nlid_proxy.o \
$(NLOBJ)/devices/nld_system.o \
$(NLOBJ)/devices/nlid_truthtable.o \
- $(NLOBJ)/macro/nlm_base.o \
- $(NLOBJ)/macro/nlm_cd4xxx.o \
- $(NLOBJ)/macro/nlm_opamp.o \
- $(NLOBJ)/macro/nlm_other.o \
- $(NLOBJ)/macro/nlm_roms.o \
- $(NLOBJ)/macro/nlm_ttl74xx.o \
+ $(NLOBJ)/macro/nlm_base_lib.o \
+ $(NLOBJ)/macro/nlm_cd4xxx_lib.o \
+ $(NLOBJ)/macro/nlm_opamp_lib.o \
+ $(NLOBJ)/macro/nlm_otheric_lib.o \
+ $(NLOBJ)/macro/nlm_roms_lib.o \
+ $(NLOBJ)/macro/nlm_ttl74xx_lib.o \
TESTOBJS := \
$(TESTOBJ)/test_pfunction.o \
diff --git a/src/lib/netlist/core/analog.h b/src/lib/netlist/core/analog.h
index a868443b8d2..4bc986f48fc 100644
--- a/src/lib/netlist/core/analog.h
+++ b/src/lib/netlist/core/analog.h
@@ -156,6 +156,11 @@ namespace netlist
analog_net_t m_my_net;
};
+ inline solver::matrix_solver_t *analog_t::solver() const noexcept
+ {
+ return (this->has_net() ? net().solver() : nullptr);
+ }
+
} // namespace netlist
diff --git a/src/lib/netlist/core/base_objects.h b/src/lib/netlist/core/base_objects.h
index 656898b21d0..140fde1149e 100644
--- a/src/lib/netlist/core/base_objects.h
+++ b/src/lib/netlist/core/base_objects.h
@@ -181,9 +181,6 @@ namespace netlist
netlist_state_t &state() noexcept;
const netlist_state_t &state() const noexcept;
- netlist_t &exec() noexcept;
- const netlist_t &exec() const noexcept;
-
private:
core_device_t * m_device;
};
diff --git a/src/lib/netlist/core/core_device.h b/src/lib/netlist/core/core_device.h
new file mode 100644
index 00000000000..e1df57deb50
--- /dev/null
+++ b/src/lib/netlist/core/core_device.h
@@ -0,0 +1,130 @@
+// license:GPL-2.0+
+// copyright-holders:Couriersud
+
+///
+/// \file device.h
+///
+
+#ifndef NL_CORE_DEVICE_H_
+#define NL_CORE_DEVICE_H_
+
+#include "../nltypes.h"
+#include "../plib/pstring.h"
+#include "base_objects.h"
+#include "logic_family.h"
+
+namespace netlist
+{
+ // -----------------------------------------------------------------------------
+ // core_device_t
+ // -----------------------------------------------------------------------------
+ // FIXME: belongs into detail namespace
+ class core_device_t : public detail::netlist_object_t
+ {
+ public:
+ core_device_t(netlist_state_t &owner, const pstring &name);
+ core_device_t(core_device_t &owner, const pstring &name);
+
+ PCOPYASSIGNMOVE(core_device_t, delete)
+
+ virtual ~core_device_t() noexcept = default;
+
+ void do_inc_active() noexcept
+ {
+ if (m_hint_deactivate)
+ {
+ if (++m_active_outputs == 1)
+ {
+ if (m_stats)
+ m_stats->m_stat_inc_active.inc();
+ inc_active();
+ }
+ }
+ }
+
+ void do_dec_active() noexcept
+ {
+ if (m_hint_deactivate)
+ if (--m_active_outputs == 0)
+ {
+ dec_active();
+ }
+ }
+
+ void set_hint_deactivate(bool v) noexcept { m_hint_deactivate = v; }
+ bool get_hint_deactivate() const noexcept { return m_hint_deactivate; }
+ // Has to be set in device reset
+ void set_active_outputs(int n) noexcept { m_active_outputs = n; }
+
+ // stats
+ struct stats_t
+ {
+ // NL_KEEP_STATISTICS
+ plib::pperftime_t<true> m_stat_total_time;
+ plib::pperfcount_t<true> m_stat_call_count;
+ plib::pperfcount_t<true> m_stat_inc_active;
+ };
+
+ stats_t * stats() const noexcept { return m_stats.get(); }
+#if 0
+ virtual void update() noexcept { }
+#endif
+ virtual void reset() { }
+
+ protected:
+
+ virtual void inc_active() noexcept { }
+ virtual void dec_active() noexcept { }
+
+ log_type & log();
+
+ public:
+ virtual void timestep(timestep_type ts_type, nl_fptype st) noexcept { plib::unused_var(ts_type, st); }
+ virtual void update_terminals() noexcept { }
+
+ virtual void update_param() noexcept {}
+ virtual bool is_dynamic() const noexcept { return false; }
+ virtual bool is_timestep() const noexcept { return false; }
+
+ private:
+ bool m_hint_deactivate;
+ state_var_s32 m_active_outputs;
+ device_arena::unique_ptr<stats_t> m_stats;
+ };
+
+ // -----------------------------------------------------------------------------
+ // base_device_t
+ // -----------------------------------------------------------------------------
+
+ class base_device_t : public core_device_t
+ {
+ public:
+ base_device_t(netlist_state_t &owner, const pstring &name);
+ base_device_t(base_device_t &owner, const pstring &name);
+
+ PCOPYASSIGNMOVE(base_device_t, delete)
+
+ ~base_device_t() noexcept override = default;
+
+ template<class O, class C, typename... Args>
+ void create_and_register_subdevice(O& owner, const pstring &name, device_arena::unique_ptr<C> &dev, Args&&... args)
+ {
+ dev = state().make_pool_object<C>(owner, name, std::forward<Args>(args)...);
+ }
+
+ void register_subalias(const pstring &name, const detail::core_terminal_t &term);
+ void register_subalias(const pstring &name, const pstring &aliased);
+
+ void connect(const pstring &t1, const pstring &t2);
+ void connect(const detail::core_terminal_t &t1, const detail::core_terminal_t &t2);
+ protected:
+
+ //NETLIB_UPDATE_TERMINALSI() { }
+
+ private:
+ };
+
+} // namespace netlist
+
+
+#endif // NL_CORE_DEVICE_H_
diff --git a/src/lib/netlist/core/device.h b/src/lib/netlist/core/device.h
index 99a5a1884ec..c087686b0dc 100644
--- a/src/lib/netlist/core/device.h
+++ b/src/lib/netlist/core/device.h
@@ -5,132 +5,20 @@
/// \file device.h
///
-#ifndef NL_CORE_DEVICE_H_
-#define NL_CORE_DEVICE_H_
+#ifndef NL_DEVICE_H_
+#define NL_DEVICE_H_
-#include "../nltypes.h"
-#include "../plib/pstring.h"
-#include "base_objects.h"
-#include "logic_family.h"
+#include "core_device.h"
#include "param.h"
namespace netlist
{
// -----------------------------------------------------------------------------
- // core_device_t
- // -----------------------------------------------------------------------------
- // FIXME: belongs into detail namespace
- class core_device_t : public detail::netlist_object_t
- {
- public:
- core_device_t(netlist_state_t &owner, const pstring &name);
- core_device_t(core_device_t &owner, const pstring &name);
-
- PCOPYASSIGNMOVE(core_device_t, delete)
-
- virtual ~core_device_t() noexcept = default;
-
- void do_inc_active() noexcept
- {
- if (m_hint_deactivate)
- {
- if (++m_active_outputs == 1)
- {
- if (m_stats)
- m_stats->m_stat_inc_active.inc();
- inc_active();
- }
- }
- }
-
- void do_dec_active() noexcept
- {
- if (m_hint_deactivate)
- if (--m_active_outputs == 0)
- {
- dec_active();
- }
- }
-
- void set_hint_deactivate(bool v) noexcept { m_hint_deactivate = v; }
- bool get_hint_deactivate() const noexcept { return m_hint_deactivate; }
- // Has to be set in device reset
- void set_active_outputs(int n) noexcept { m_active_outputs = n; }
-
- // stats
- struct stats_t
- {
- // NL_KEEP_STATISTICS
- plib::pperftime_t<true> m_stat_total_time;
- plib::pperfcount_t<true> m_stat_call_count;
- plib::pperfcount_t<true> m_stat_inc_active;
- };
-
- stats_t * stats() const noexcept { return m_stats.get(); }
-#if 0
- virtual void update() noexcept { }
-#endif
- virtual void reset() { }
-
- protected:
-
- virtual void inc_active() noexcept { }
- virtual void dec_active() noexcept { }
-
- log_type & log();
-
- public:
- virtual void timestep(timestep_type ts_type, nl_fptype st) noexcept { plib::unused_var(ts_type, st); }
- virtual void update_terminals() noexcept { }
-
- virtual void update_param() noexcept {}
- virtual bool is_dynamic() const noexcept { return false; }
- virtual bool is_timestep() const noexcept { return false; }
-
- private:
- bool m_hint_deactivate;
- state_var_s32 m_active_outputs;
- device_arena::unique_ptr<stats_t> m_stats;
- };
-
- // -----------------------------------------------------------------------------
- // base_device_t
- // -----------------------------------------------------------------------------
-
- class base_device_t : public core_device_t
- {
- public:
- base_device_t(netlist_state_t &owner, const pstring &name);
- base_device_t(base_device_t &owner, const pstring &name);
-
- PCOPYASSIGNMOVE(base_device_t, delete)
-
- ~base_device_t() noexcept override = default;
-
- template<class O, class C, typename... Args>
- void create_and_register_subdevice(O& owner, const pstring &name, device_arena::unique_ptr<C> &dev, Args&&... args)
- {
- dev = state().make_pool_object<C>(owner, name, std::forward<Args>(args)...);
- }
-
- void register_subalias(const pstring &name, const detail::core_terminal_t &term);
- void register_subalias(const pstring &name, const pstring &aliased);
-
- void connect(const pstring &t1, const pstring &t2);
- void connect(const detail::core_terminal_t &t1, const detail::core_terminal_t &t2);
- protected:
-
- //NETLIB_UPDATE_TERMINALSI() { }
-
- private:
- };
-
- // -----------------------------------------------------------------------------
// device_t
// -----------------------------------------------------------------------------
- class device_t : public base_device_t,
- public logic_family_t
+ class device_t : public base_device_t,
+ public logic_family_t
{
public:
device_t(netlist_state_t &owner, const pstring &name);
@@ -160,4 +48,4 @@ namespace netlist
} // namespace netlist
-#endif // NL_CORE_DEVICE_H_
+#endif // NL_DEVICE_H_
diff --git a/src/lib/netlist/core/exec.h b/src/lib/netlist/core/exec.h
new file mode 100644
index 00000000000..307baa6b0f2
--- /dev/null
+++ b/src/lib/netlist/core/exec.h
@@ -0,0 +1,120 @@
+// license:GPL-2.0+
+// copyright-holders:Couriersud
+
+///
+/// \file exec.h
+///
+
+#ifndef NL_CORE_EXEC_H_
+#define NL_CORE_EXEC_H_
+
+#include "base_objects.h"
+#include "state_var.h"
+
+#include "../nltypes.h"
+#include "../plib/plists.h"
+#include "../plib/pstring.h"
+
+namespace netlist
+{
+ // -----------------------------------------------------------------------------
+ // netlist_t
+ // -----------------------------------------------------------------------------
+
+ class netlist_t // NOLINT(clang-analyzer-optin.performance.Padding)
+ {
+ public:
+
+ explicit netlist_t(netlist_state_t &state, const pstring &aname);
+
+ PCOPYASSIGNMOVE(netlist_t, delete)
+
+ virtual ~netlist_t() noexcept = default;
+
+ // run functions
+
+ netlist_time_ext time() const noexcept { return m_time; }
+
+ void process_queue(netlist_time_ext delta) noexcept;
+ void abort_current_queue_slice() noexcept
+ {
+ if (!NL_USE_QUEUE_STATS || !m_use_stats)
+ m_queue.retime<false>(detail::queue_t::entry_t(m_time, nullptr));
+ else
+ m_queue.retime<true>(detail::queue_t::entry_t(m_time, nullptr));
+ }
+
+ const detail::queue_t &queue() const noexcept { return m_queue; }
+
+ template<typename... Args>
+ void qpush(Args&&...args) noexcept
+ {
+ if (!NL_USE_QUEUE_STATS || !m_use_stats)
+ m_queue.emplace<false>(std::forward<Args>(args)...); // NOLINT(performance-move-const-arg)
+ else
+ m_queue.emplace<true>(std::forward<Args>(args)...); // NOLINT(performance-move-const-arg)
+ }
+
+ template <class R>
+ void qremove(const R &elem) noexcept
+ {
+ if (!NL_USE_QUEUE_STATS || !m_use_stats)
+ m_queue.remove<false>(elem);
+ else
+ m_queue.remove<true>(elem);
+ }
+
+ // Control functions
+
+ void stop();
+ void reset();
+
+ // only used by nltool to create static c-code
+ devices::nld_solver *solver() const noexcept { return m_solver; }
+
+ // force late type resolution
+ template <typename X = devices::nld_solver>
+ nl_fptype gmin(X *solv = nullptr) const noexcept
+ {
+ plib::unused_var(solv);
+ return static_cast<X *>(m_solver)->gmin();
+ }
+
+ netlist_state_t &nlstate() noexcept { return m_state; }
+ const netlist_state_t &nlstate() const noexcept { return m_state; }
+
+ log_type & log() noexcept { return m_state.log(); }
+ const log_type &log() const noexcept { return m_state.log(); }
+
+ void print_stats() const;
+ bool use_stats() const { return m_use_stats; }
+
+ bool stats_enabled() const noexcept { return m_use_stats; }
+ void enable_stats(bool val) noexcept { m_use_stats = val; }
+
+ private:
+
+ template <bool KEEP_STATS>
+ void process_queue_stats(netlist_time_ext delta) noexcept;
+
+ netlist_state_t & m_state;
+ devices::nld_solver * m_solver;
+
+ // mostly rw
+ //PALIGNAS(16)
+ netlist_time_ext m_time;
+ devices::nld_mainclock * m_mainclock;
+
+ //PALIGNAS_CACHELINE()
+ //PALIGNAS(16)
+ detail::queue_t m_queue;
+ bool m_use_stats;
+ // performance
+ plib::pperftime_t<true> m_stat_mainloop;
+ plib::pperfcount_t<true> m_perf_out_processed;
+ };
+
+} // namespace netlist
+
+
+#endif // NL_CORE_EXEC_H_
diff --git a/src/lib/netlist/core/nets.h b/src/lib/netlist/core/nets.h
index 5eced2379e4..7b872250d56 100644
--- a/src/lib/netlist/core/nets.h
+++ b/src/lib/netlist/core/nets.h
@@ -10,6 +10,8 @@
#include "base_objects.h"
#include "state_var.h"
+#include "core_device.h"
+#include "exec.h"
#include "../nltypes.h"
#include "../plib/plists.h"
@@ -43,6 +45,12 @@ namespace netlist
virtual void reset() noexcept;
+ // -----------------------------------------------------------------------------
+ // Hot section
+ //
+ // Any changes below will impact performance.
+ // -----------------------------------------------------------------------------
+
void toggle_new_Q() noexcept { m_new_Q = (m_cur_Q ^ 1); }
void toggle_and_push_to_queue(const netlist_time &delay) noexcept
@@ -51,11 +59,42 @@ namespace netlist
push_to_queue(delay);
}
- void push_to_queue(const netlist_time &delay) noexcept;
+ void push_to_queue(const netlist_time &delay) noexcept
+ {
+ if (has_connections())
+ {
+ if (!!is_queued())
+ exec().qremove(this);
+
+ const auto nst(exec().time() + delay);
+ m_next_scheduled_time = nst;
+
+ if (!m_list_active.empty())
+ {
+ m_in_queue = queue_status::QUEUED;
+ exec().qpush(nst, this);
+ }
+ else
+ {
+ m_in_queue = queue_status::DELAYED_DUE_TO_INACTIVE;
+ update_inputs();
+ }
+ }
+ }
NVCC_CONSTEXPR bool is_queued() const noexcept { return m_in_queue == queue_status::QUEUED; }
template <bool KEEP_STATS>
- inline void update_devs() noexcept;
+ inline void update_devs() noexcept
+ {
+ nl_assert(this->is_rail_net());
+
+ m_in_queue = queue_status::DELIVERED; // mark as taken ...
+ if (m_new_Q ^ m_cur_Q)
+ {
+ process<KEEP_STATS>((m_new_Q << core_terminal_t::INP_LH_SHIFT)
+ | (m_cur_Q << core_terminal_t::INP_HL_SHIFT), m_new_Q);
+ }
+ }
netlist_time_ext next_scheduled_time() const noexcept { return m_next_scheduled_time; }
void set_next_scheduled_time(netlist_time_ext ntime) noexcept { m_next_scheduled_time = ntime; }
@@ -65,10 +104,47 @@ namespace netlist
bool has_connections() const noexcept { return !m_core_terms.empty(); }
- void add_to_active_list(core_terminal_t &term) noexcept;
- void remove_from_active_list(core_terminal_t &term) noexcept;
+ void add_to_active_list(core_terminal_t &term) noexcept
+ {
+ if (!m_list_active.empty())
+ {
+ term.set_copied_input(m_cur_Q);
+ m_list_active.push_front(&term);
+ }
+ else
+ {
+ m_list_active.push_front(&term);
+ railterminal().device().do_inc_active();
+ if (m_in_queue == queue_status::DELAYED_DUE_TO_INACTIVE)
+ {
+ if (m_next_scheduled_time > exec().time())
+ {
+ m_in_queue = queue_status::QUEUED; // pending
+ exec().qpush(m_next_scheduled_time, this);
+ }
+ else
+ {
+ m_in_queue = queue_status::DELIVERED;
+ m_cur_Q = m_new_Q;
+ }
+ update_inputs();
+ }
+ else
+ term.set_copied_input(m_cur_Q);
+ }
+ }
- // setup stuff
+ void remove_from_active_list(core_terminal_t &term) noexcept
+ {
+ gsl_Expects(!m_list_active.empty());
+ m_list_active.remove(&term);
+ if (m_list_active.empty())
+ railterminal().device().do_dec_active();
+ }
+
+ // -----------------------------------------------------------------------------
+ // setup stuff - cold
+ // -----------------------------------------------------------------------------
bool is_logic() const noexcept;
bool is_analog() const noexcept;
@@ -135,8 +211,39 @@ namespace netlist
plib::linkedlist_t<core_terminal_t> m_list_active;
std::vector<core_terminal_t *> m_core_terms; // save post-start m_list ...
+ // -----------------------------------------------------------------------------
+ // Very hot
+ // -----------------------------------------------------------------------------
+
template <bool KEEP_STATS, typename T, typename S>
- void process(T mask, const S &sig) noexcept;
+ void process(T mask, const S &sig) noexcept
+ {
+ m_cur_Q = sig;
+
+ if (KEEP_STATS)
+ {
+ for (auto & p : m_list_active)
+ {
+ p.set_copied_input(sig);
+ auto *stats(p.device().stats());
+ stats->m_stat_call_count.inc();
+ if ((p.terminal_state() & mask))
+ {
+ auto g(stats->m_stat_total_time.guard());
+ p.run_delegate();
+ }
+ }
+ }
+ else
+ {
+ for (auto &p : m_list_active)
+ {
+ p.set_copied_input(sig);
+ if ((p.terminal_state() & mask) != 0)
+ p.run_delegate();
+ }
+ }
+ }
};
} // namespace detail
diff --git a/src/lib/netlist/core/param.h b/src/lib/netlist/core/param.h
index 9b353d0bdef..609c89d1cf3 100644
--- a/src/lib/netlist/core/param.h
+++ b/src/lib/netlist/core/param.h
@@ -24,11 +24,14 @@
#include "../nltypes.h"
#include "base_objects.h"
+#include "core_device.h"
+#include "setup.h"
#include "../plib/palloc.h"
#include "../plib/pstream.h"
#include "../plib/pstring.h"
#include "../plib/putil.h" // psource_t
+#include "../plib/pfunction.h"
#include <memory>
@@ -63,8 +66,6 @@ namespace netlist
protected:
- void update_param() noexcept;
-
pstring get_initial(const core_device_t *dev, bool *found) const;
template<typename C>
@@ -73,7 +74,7 @@ namespace netlist
if (p != v)
{
p = v;
- update_param();
+ device().update_param();
}
}
@@ -170,13 +171,14 @@ namespace netlist
{
*m_param = param;
changed();
- update_param();
+ device().update_param();
}
}
pstring valstr() const override
{
return *m_param;
}
+
protected:
virtual void changed() noexcept;
pstring str() const noexcept { return *m_param; }
@@ -269,6 +271,63 @@ namespace netlist
std::array<ST, 1 << AW> m_data;
};
+ template <typename T>
+ param_num_t<T>::param_num_t(core_device_t &device, const pstring &name, const T val)
+ : param_t(device, name)
+ , m_param(val)
+ {
+ bool found = false;
+ pstring p = this->get_initial(&device, &found);
+ if (found)
+ {
+ plib::pfunction<nl_fptype> func;
+ func.compile_infix(p, {});
+ auto valx = func.evaluate();
+ if (plib::is_integral<T>::value)
+ if (plib::abs(valx - plib::trunc(valx)) > nlconst::magic(1e-6))
+ throw nl_exception(MF_INVALID_NUMBER_CONVERSION_1_2(device.name() + "." + name, p));
+ m_param = plib::narrow_cast<T>(valx);
+ }
+
+ device.state().save(*this, m_param, this->name(), "m_param");
+ }
+
+ template <typename T>
+ param_enum_t<T>::param_enum_t(core_device_t &device, const pstring &name, const T val)
+ : param_t(device, name)
+ , m_param(val)
+ {
+ bool found = false;
+ pstring p = this->get_initial(&device, &found);
+ if (found)
+ {
+ T temp(val);
+ bool ok = temp.set_from_string(p);
+ if (!ok)
+ {
+ device.state().log().fatal(MF_INVALID_ENUM_CONVERSION_1_2(name, p));
+ throw nl_exception(MF_INVALID_ENUM_CONVERSION_1_2(name, p));
+ }
+ m_param = temp;
+ }
+
+ device.state().save(*this, m_param, this->name(), "m_param");
+ }
+
+ template <typename ST, std::size_t AW, std::size_t DW>
+ param_rom_t<ST, AW, DW>::param_rom_t(core_device_t &device, const pstring &name)
+ : param_data_t(device, name)
+ {
+ auto f = this->stream();
+ if (!f.empty())
+ {
+ plib::istream_read(f.stream(), m_data.data(), 1<<AW);
+ // FIXME: check for failbit if not in validation.
+ }
+ else
+ device.state().log().warning(MW_ROM_NOT_FOUND(str()));
+ }
+
} // namespace netlist
diff --git a/src/lib/netlist/devices/net_lib.h b/src/lib/netlist/devices/net_lib.h
index f677e140eaa..a5779cf162e 100644
--- a/src/lib/netlist/devices/net_lib.h
+++ b/src/lib/netlist/devices/net_lib.h
@@ -28,12 +28,12 @@
#define IND_P(ind) ((ind) * 1e-12)
#endif
-NETLIST_EXTERNAL(base)
-NETLIST_EXTERNAL(CD4XXX_lib)
-NETLIST_EXTERNAL(OPAMP_lib)
+NETLIST_EXTERNAL(base_lib)
+NETLIST_EXTERNAL(cd4xxx_lib)
+NETLIST_EXTERNAL(opamp_lib)
NETLIST_EXTERNAL(otheric_lib)
-NETLIST_EXTERNAL(TTL74XX_lib)
-NETLIST_EXTERNAL(ROMS_lib)
+NETLIST_EXTERNAL(ttl74xx_lib)
+NETLIST_EXTERNAL(roms_lib)
#if NL_AUTO_DEVICES
#include "nld_devinc.h"
@@ -104,12 +104,11 @@ NETLIST_EXTERNAL(ROMS_lib)
#include "nld_log.h"
-#include "netlist/macro/nlm_cd4xxx.h"
-#include "netlist/macro/nlm_mc3340.h"
-#include "netlist/macro/nlm_opamp.h"
-#include "netlist/macro/nlm_other.h"
-#include "netlist/macro/nlm_roms.h"
-#include "netlist/macro/nlm_ttl74xx.h"
+#include "../macro/nlm_cd4xxx_lib.h"
+#include "../macro/nlm_opamp_lib.h"
+#include "../macro/nlm_otheric_lib.h"
+#include "../macro/nlm_roms_lib.h"
+#include "../macro/nlm_ttl74xx_lib.h"
#include "netlist/analog/nld_bjt.h"
#include "netlist/analog/nld_fourterm.h"
diff --git a/src/lib/netlist/generated/static_solvers.cpp b/src/lib/netlist/generated/static_solvers.cpp
index e184c0337cc..5845f51ff3d 100644
--- a/src/lib/netlist/generated/static_solvers.cpp
+++ b/src/lib/netlist/generated/static_solvers.cpp
@@ -8809,6 +8809,313 @@ static void nl_gcr_4e4931ccbfb7a3c_70_double_double(double * __restrict V, const
V[0] = (RHS0 - tmp0) / m_A0;
}
+// fireone
+static void nl_gcr_4f2b2f3cdc384f75_41_double_double(double * __restrict V, const double * __restrict go, const double * __restrict gt, const double * __restrict Idr, const double * const * __restrict cnV)
+
+{
+
+ plib::unused_var(cnV);
+ double m_A0(0.0);
+ double m_A1(0.0);
+ double m_A2(0.0);
+ double m_A3(0.0);
+ double m_A4(0.0);
+ double m_A5(0.0);
+ double m_A6(0.0);
+ double m_A7(0.0);
+ double m_A8(0.0);
+ double m_A9(0.0);
+ double m_A10(0.0);
+ double m_A11(0.0);
+ double m_A12(0.0);
+ double m_A13(0.0);
+ double m_A14(0.0);
+ double m_A15(0.0);
+ double m_A16(0.0);
+ double m_A17(0.0);
+ double m_A18(0.0);
+ double m_A19(0.0);
+ double m_A20(0.0);
+ double m_A21(0.0);
+ double m_A22(0.0);
+ double m_A23(0.0);
+ double m_A24(0.0);
+ double m_A25(0.0);
+ double m_A26(0.0);
+ double m_A27(0.0);
+ double m_A28(0.0);
+ double m_A29(0.0);
+ double m_A30(0.0);
+ double m_A31(0.0);
+ double m_A32(0.0);
+ double m_A33(0.0);
+ double m_A34(0.0);
+ double m_A35(0.0);
+ double m_A36(0.0);
+ double m_A37(0.0);
+ double m_A38(0.0);
+ double m_A39(0.0);
+ double m_A40(0.0);
+ m_A0 += gt[0];
+ m_A0 += gt[1];
+ m_A0 += gt[2];
+ m_A0 += gt[3];
+ m_A0 += gt[4];
+ m_A0 += gt[5];
+ m_A0 += gt[6];
+ m_A1 += go[0];
+ double RHS0 = Idr[0];
+ RHS0 += Idr[1];
+ RHS0 += Idr[2];
+ RHS0 += Idr[3];
+ RHS0 += Idr[4];
+ RHS0 += Idr[5];
+ RHS0 += Idr[6];
+ RHS0 -= go[1] * *cnV[1];
+ RHS0 -= go[2] * *cnV[2];
+ RHS0 -= go[3] * *cnV[3];
+ RHS0 -= go[4] * *cnV[4];
+ RHS0 -= go[5] * *cnV[5];
+ RHS0 -= go[6] * *cnV[6];
+ m_A2 += gt[7];
+ m_A2 += gt[8];
+ m_A4 += go[7];
+ m_A3 += go[8];
+ double RHS1 = Idr[7];
+ RHS1 += Idr[8];
+ m_A5 += gt[9];
+ m_A5 += gt[10];
+ m_A5 += gt[11];
+ m_A5 += gt[12];
+ m_A5 += gt[13];
+ m_A5 += gt[14];
+ m_A5 += gt[15];
+ m_A6 += go[9];
+ double RHS2 = Idr[9];
+ RHS2 += Idr[10];
+ RHS2 += Idr[11];
+ RHS2 += Idr[12];
+ RHS2 += Idr[13];
+ RHS2 += Idr[14];
+ RHS2 += Idr[15];
+ RHS2 -= go[10] * *cnV[10];
+ RHS2 -= go[11] * *cnV[11];
+ RHS2 -= go[12] * *cnV[12];
+ RHS2 -= go[13] * *cnV[13];
+ RHS2 -= go[14] * *cnV[14];
+ RHS2 -= go[15] * *cnV[15];
+ m_A7 += gt[16];
+ m_A7 += gt[17];
+ m_A7 += gt[18];
+ m_A8 += go[16];
+ m_A9 += go[17];
+ double RHS3 = Idr[16];
+ RHS3 += Idr[17];
+ RHS3 += Idr[18];
+ RHS3 -= go[18] * *cnV[18];
+ m_A10 += gt[19];
+ m_A10 += gt[20];
+ m_A10 += gt[21];
+ m_A10 += gt[22];
+ m_A10 += gt[23];
+ m_A10 += gt[24];
+ m_A10 += gt[25];
+ m_A11 += go[19];
+ m_A12 += go[20];
+ m_A13 += go[21];
+ double RHS4 = Idr[19];
+ RHS4 += Idr[20];
+ RHS4 += Idr[21];
+ RHS4 += Idr[22];
+ RHS4 += Idr[23];
+ RHS4 += Idr[24];
+ RHS4 += Idr[25];
+ RHS4 -= go[22] * *cnV[22];
+ RHS4 -= go[23] * *cnV[23];
+ RHS4 -= go[24] * *cnV[24];
+ RHS4 -= go[25] * *cnV[25];
+ m_A16 += gt[26];
+ m_A16 += gt[27];
+ m_A16 += gt[28];
+ m_A16 += gt[29];
+ m_A16 += gt[30];
+ m_A15 += go[26];
+ m_A14 += go[27];
+ double RHS5 = Idr[26];
+ RHS5 += Idr[27];
+ RHS5 += Idr[28];
+ RHS5 += Idr[29];
+ RHS5 += Idr[30];
+ RHS5 -= go[28] * *cnV[28];
+ RHS5 -= go[29] * *cnV[29];
+ RHS5 -= go[30] * *cnV[30];
+ m_A19 += gt[31];
+ m_A19 += gt[32];
+ m_A19 += gt[33];
+ m_A19 += gt[34];
+ m_A19 += gt[35];
+ m_A19 += gt[36];
+ m_A19 += gt[37];
+ m_A20 += go[31];
+ m_A18 += go[32];
+ double RHS6 = Idr[31];
+ RHS6 += Idr[32];
+ RHS6 += Idr[33];
+ RHS6 += Idr[34];
+ RHS6 += Idr[35];
+ RHS6 += Idr[36];
+ RHS6 += Idr[37];
+ RHS6 -= go[33] * *cnV[33];
+ RHS6 -= go[34] * *cnV[34];
+ RHS6 -= go[35] * *cnV[35];
+ RHS6 -= go[36] * *cnV[36];
+ RHS6 -= go[37] * *cnV[37];
+ m_A24 += gt[38];
+ m_A24 += gt[39];
+ m_A24 += gt[40];
+ m_A25 += go[38];
+ m_A22 += go[39];
+ double RHS7 = Idr[38];
+ RHS7 += Idr[39];
+ RHS7 += Idr[40];
+ RHS7 -= go[40] * *cnV[40];
+ m_A29 += gt[41];
+ m_A29 += gt[42];
+ m_A29 += gt[43];
+ m_A27 += go[41];
+ m_A26 += go[42];
+ double RHS8 = Idr[41];
+ RHS8 += Idr[42];
+ RHS8 += Idr[43];
+ RHS8 -= go[43] * *cnV[43];
+ m_A35 += gt[44];
+ m_A35 += gt[45];
+ m_A35 += gt[46];
+ m_A32 += go[44];
+ m_A31 += go[45];
+ m_A36 += go[46];
+ double RHS9 = Idr[44];
+ RHS9 += Idr[45];
+ RHS9 += Idr[46];
+ m_A40 += gt[47];
+ m_A40 += gt[48];
+ m_A40 += gt[49];
+ m_A40 += gt[50];
+ m_A40 += gt[51];
+ m_A37 += go[47];
+ m_A39 += go[48];
+ m_A38 += go[49];
+ double RHS10 = Idr[47];
+ RHS10 += Idr[48];
+ RHS10 += Idr[49];
+ RHS10 += Idr[50];
+ RHS10 += Idr[51];
+ RHS10 -= go[50] * *cnV[50];
+ RHS10 -= go[51] * *cnV[51];
+ const double f0 = 1.0 / m_A0;
+ const double f0_5 = -f0 * m_A14;
+ m_A16 += m_A1 * f0_5;
+ RHS5 += f0_5 * RHS0;
+ const double f1 = 1.0 / m_A2;
+ const double f1_5 = -f1 * m_A15;
+ m_A16 += m_A3 * f1_5;
+ m_A17 += m_A4 * f1_5;
+ RHS5 += f1_5 * RHS1;
+ const double f1_7 = -f1 * m_A22;
+ m_A23 += m_A3 * f1_7;
+ m_A24 += m_A4 * f1_7;
+ RHS7 += f1_7 * RHS1;
+ const double f2 = 1.0 / m_A5;
+ const double f2_10 = -f2 * m_A37;
+ m_A38 += m_A6 * f2_10;
+ RHS10 += f2_10 * RHS2;
+ const double f3 = 1.0 / m_A7;
+ const double f3_6 = -f3 * m_A18;
+ m_A20 += m_A8 * f3_6;
+ m_A21 += m_A9 * f3_6;
+ RHS6 += f3_6 * RHS3;
+ const double f3_8 = -f3 * m_A26;
+ m_A29 += m_A8 * f3_8;
+ m_A30 += m_A9 * f3_8;
+ RHS8 += f3_8 * RHS3;
+ const double f3_9 = -f3 * m_A31;
+ m_A34 += m_A8 * f3_9;
+ m_A35 += m_A9 * f3_9;
+ RHS9 += f3_9 * RHS3;
+ const double f4 = 1.0 / m_A10;
+ const double f4_8 = -f4 * m_A27;
+ m_A28 += m_A11 * f4_8;
+ m_A29 += m_A12 * f4_8;
+ m_A30 += m_A13 * f4_8;
+ RHS8 += f4_8 * RHS4;
+ const double f4_9 = -f4 * m_A32;
+ m_A33 += m_A11 * f4_9;
+ m_A34 += m_A12 * f4_9;
+ m_A35 += m_A13 * f4_9;
+ RHS9 += f4_9 * RHS4;
+ const double f5 = 1.0 / m_A16;
+ const double f5_7 = -f5 * m_A23;
+ m_A24 += m_A17 * f5_7;
+ RHS7 += f5_7 * RHS5;
+ const double f6 = 1.0 / m_A19;
+ const double f6_8 = -f6 * m_A28;
+ m_A29 += m_A20 * f6_8;
+ m_A30 += m_A21 * f6_8;
+ RHS8 += f6_8 * RHS6;
+ const double f6_9 = -f6 * m_A33;
+ m_A34 += m_A20 * f6_9;
+ m_A35 += m_A21 * f6_9;
+ RHS9 += f6_9 * RHS6;
+ const double f7 = 1.0 / m_A24;
+ const double f7_10 = -f7 * m_A38;
+ m_A40 += m_A25 * f7_10;
+ RHS10 += f7_10 * RHS7;
+ const double f8 = 1.0 / m_A29;
+ const double f8_9 = -f8 * m_A34;
+ m_A35 += m_A30 * f8_9;
+ RHS9 += f8_9 * RHS8;
+ const double f9 = 1.0 / m_A35;
+ const double f9_10 = -f9 * m_A39;
+ m_A40 += m_A36 * f9_10;
+ RHS10 += f9_10 * RHS9;
+ V[10] = RHS10 / m_A40;
+ double tmp9 = 0.0;
+ tmp9 += m_A36 * V[10];
+ V[9] = (RHS9 - tmp9) / m_A35;
+ double tmp8 = 0.0;
+ tmp8 += m_A30 * V[9];
+ V[8] = (RHS8 - tmp8) / m_A29;
+ double tmp7 = 0.0;
+ tmp7 += m_A25 * V[10];
+ V[7] = (RHS7 - tmp7) / m_A24;
+ double tmp6 = 0.0;
+ tmp6 += m_A20 * V[8];
+ tmp6 += m_A21 * V[9];
+ V[6] = (RHS6 - tmp6) / m_A19;
+ double tmp5 = 0.0;
+ tmp5 += m_A17 * V[7];
+ V[5] = (RHS5 - tmp5) / m_A16;
+ double tmp4 = 0.0;
+ tmp4 += m_A11 * V[6];
+ tmp4 += m_A12 * V[8];
+ tmp4 += m_A13 * V[9];
+ V[4] = (RHS4 - tmp4) / m_A10;
+ double tmp3 = 0.0;
+ tmp3 += m_A8 * V[8];
+ tmp3 += m_A9 * V[9];
+ V[3] = (RHS3 - tmp3) / m_A7;
+ double tmp2 = 0.0;
+ tmp2 += m_A6 * V[7];
+ V[2] = (RHS2 - tmp2) / m_A5;
+ double tmp1 = 0.0;
+ tmp1 += m_A3 * V[5];
+ tmp1 += m_A4 * V[7];
+ V[1] = (RHS1 - tmp1) / m_A2;
+ double tmp0 = 0.0;
+ tmp0 += m_A1 * V[5];
+ V[0] = (RHS0 - tmp0) / m_A0;
+}
+
// boxingb
static void nl_gcr_50f5194a994d56ec_16_double_double(double * __restrict V, const double * __restrict go, const double * __restrict gt, const double * __restrict Idr, const double * const * __restrict cnV)
@@ -14594,6 +14901,714 @@ static void nl_gcr_62b99b9904a8c804_49_double_double(double * __restrict V, cons
V[0] = (RHS0 - tmp0) / m_A0;
}
+// fireone
+static void nl_gcr_643133e86b2b1628_73_double_double(double * __restrict V, const double * __restrict go, const double * __restrict gt, const double * __restrict Idr, const double * const * __restrict cnV)
+
+{
+
+ plib::unused_var(cnV);
+ double m_A0(0.0);
+ double m_A1(0.0);
+ double m_A2(0.0);
+ double m_A3(0.0);
+ double m_A4(0.0);
+ double m_A5(0.0);
+ double m_A6(0.0);
+ double m_A7(0.0);
+ double m_A8(0.0);
+ double m_A9(0.0);
+ double m_A10(0.0);
+ double m_A11(0.0);
+ double m_A12(0.0);
+ double m_A13(0.0);
+ double m_A14(0.0);
+ double m_A15(0.0);
+ double m_A16(0.0);
+ double m_A17(0.0);
+ double m_A18(0.0);
+ double m_A19(0.0);
+ double m_A20(0.0);
+ double m_A21(0.0);
+ double m_A22(0.0);
+ double m_A23(0.0);
+ double m_A24(0.0);
+ double m_A25(0.0);
+ double m_A26(0.0);
+ double m_A27(0.0);
+ double m_A28(0.0);
+ double m_A29(0.0);
+ double m_A30(0.0);
+ double m_A31(0.0);
+ double m_A32(0.0);
+ double m_A33(0.0);
+ double m_A34(0.0);
+ double m_A35(0.0);
+ double m_A36(0.0);
+ double m_A37(0.0);
+ double m_A38(0.0);
+ double m_A39(0.0);
+ double m_A40(0.0);
+ double m_A41(0.0);
+ double m_A42(0.0);
+ double m_A43(0.0);
+ double m_A44(0.0);
+ double m_A45(0.0);
+ double m_A46(0.0);
+ double m_A47(0.0);
+ double m_A48(0.0);
+ double m_A49(0.0);
+ double m_A50(0.0);
+ double m_A51(0.0);
+ double m_A52(0.0);
+ double m_A53(0.0);
+ double m_A54(0.0);
+ double m_A55(0.0);
+ double m_A56(0.0);
+ double m_A57(0.0);
+ double m_A58(0.0);
+ double m_A59(0.0);
+ double m_A60(0.0);
+ double m_A61(0.0);
+ double m_A62(0.0);
+ double m_A63(0.0);
+ double m_A64(0.0);
+ double m_A65(0.0);
+ double m_A66(0.0);
+ double m_A67(0.0);
+ double m_A68(0.0);
+ double m_A69(0.0);
+ double m_A70(0.0);
+ double m_A71(0.0);
+ double m_A72(0.0);
+ m_A0 += gt[0];
+ m_A0 += gt[1];
+ m_A0 += gt[2];
+ m_A0 += gt[3];
+ m_A0 += gt[4];
+ m_A0 += gt[5];
+ m_A0 += gt[6];
+ m_A1 += go[0];
+ double RHS0 = Idr[0];
+ RHS0 += Idr[1];
+ RHS0 += Idr[2];
+ RHS0 += Idr[3];
+ RHS0 += Idr[4];
+ RHS0 += Idr[5];
+ RHS0 += Idr[6];
+ RHS0 -= go[1] * *cnV[1];
+ RHS0 -= go[2] * *cnV[2];
+ RHS0 -= go[3] * *cnV[3];
+ RHS0 -= go[4] * *cnV[4];
+ RHS0 -= go[5] * *cnV[5];
+ RHS0 -= go[6] * *cnV[6];
+ m_A2 += gt[7];
+ m_A2 += gt[8];
+ m_A2 += gt[9];
+ m_A2 += gt[10];
+ m_A2 += gt[11];
+ m_A2 += gt[12];
+ m_A2 += gt[13];
+ m_A3 += go[7];
+ double RHS1 = Idr[7];
+ RHS1 += Idr[8];
+ RHS1 += Idr[9];
+ RHS1 += Idr[10];
+ RHS1 += Idr[11];
+ RHS1 += Idr[12];
+ RHS1 += Idr[13];
+ RHS1 -= go[8] * *cnV[8];
+ RHS1 -= go[9] * *cnV[9];
+ RHS1 -= go[10] * *cnV[10];
+ RHS1 -= go[11] * *cnV[11];
+ RHS1 -= go[12] * *cnV[12];
+ RHS1 -= go[13] * *cnV[13];
+ m_A4 += gt[14];
+ m_A4 += gt[15];
+ m_A4 += gt[16];
+ m_A4 += gt[17];
+ m_A4 += gt[18];
+ m_A5 += go[14];
+ m_A6 += go[15];
+ double RHS2 = Idr[14];
+ RHS2 += Idr[15];
+ RHS2 += Idr[16];
+ RHS2 += Idr[17];
+ RHS2 += Idr[18];
+ RHS2 -= go[16] * *cnV[16];
+ RHS2 -= go[17] * *cnV[17];
+ RHS2 -= go[18] * *cnV[18];
+ m_A7 += gt[19];
+ m_A7 += gt[20];
+ m_A8 += go[19];
+ double RHS3 = Idr[19];
+ RHS3 += Idr[20];
+ RHS3 -= go[20] * *cnV[20];
+ m_A9 += gt[21];
+ m_A9 += gt[22];
+ m_A10 += go[21];
+ double RHS4 = Idr[21];
+ RHS4 += Idr[22];
+ RHS4 -= go[22] * *cnV[22];
+ m_A11 += gt[23];
+ m_A11 += gt[24];
+ m_A11 += gt[25];
+ m_A12 += go[23];
+ double RHS5 = Idr[23];
+ RHS5 += Idr[24];
+ RHS5 += Idr[25];
+ RHS5 -= go[24] * *cnV[24];
+ RHS5 -= go[25] * *cnV[25];
+ m_A13 += gt[26];
+ m_A13 += gt[27];
+ m_A13 += gt[28];
+ m_A14 += go[26];
+ double RHS6 = Idr[26];
+ RHS6 += Idr[27];
+ RHS6 += Idr[28];
+ RHS6 -= go[27] * *cnV[27];
+ RHS6 -= go[28] * *cnV[28];
+ m_A16 += gt[29];
+ m_A16 += gt[30];
+ m_A16 += gt[31];
+ m_A16 += gt[32];
+ m_A16 += gt[33];
+ m_A16 += gt[34];
+ m_A15 += go[29];
+ m_A18 += go[30];
+ m_A19 += go[31];
+ m_A19 += go[32];
+ double RHS7 = Idr[29];
+ RHS7 += Idr[30];
+ RHS7 += Idr[31];
+ RHS7 += Idr[32];
+ RHS7 += Idr[33];
+ RHS7 += Idr[34];
+ RHS7 -= go[33] * *cnV[33];
+ RHS7 -= go[34] * *cnV[34];
+ m_A20 += gt[35];
+ m_A20 += gt[36];
+ m_A20 += gt[37];
+ m_A21 += go[35];
+ double RHS8 = Idr[35];
+ RHS8 += Idr[36];
+ RHS8 += Idr[37];
+ RHS8 -= go[36] * *cnV[36];
+ RHS8 -= go[37] * *cnV[37];
+ m_A22 += gt[38];
+ m_A22 += gt[39];
+ m_A23 += go[38];
+ double RHS9 = Idr[38];
+ RHS9 += Idr[39];
+ RHS9 -= go[39] * *cnV[39];
+ m_A25 += gt[40];
+ m_A25 += gt[41];
+ m_A25 += gt[42];
+ m_A27 += go[40];
+ m_A24 += go[41];
+ double RHS10 = Idr[40];
+ RHS10 += Idr[41];
+ RHS10 += Idr[42];
+ RHS10 -= go[42] * *cnV[42];
+ m_A30 += gt[43];
+ m_A30 += gt[44];
+ m_A30 += gt[45];
+ m_A32 += go[43];
+ m_A28 += go[44];
+ double RHS11 = Idr[43];
+ RHS11 += Idr[44];
+ RHS11 += Idr[45];
+ RHS11 -= go[45] * *cnV[45];
+ m_A34 += gt[46];
+ m_A34 += gt[47];
+ m_A34 += gt[48];
+ m_A33 += go[46];
+ m_A35 += go[47];
+ double RHS12 = Idr[46];
+ RHS12 += Idr[47];
+ RHS12 += Idr[48];
+ RHS12 -= go[48] * *cnV[48];
+ m_A37 += gt[49];
+ m_A37 += gt[50];
+ m_A37 += gt[51];
+ m_A37 += gt[52];
+ m_A38 += go[49];
+ m_A36 += go[50];
+ double RHS13 = Idr[49];
+ RHS13 += Idr[50];
+ RHS13 += Idr[51];
+ RHS13 += Idr[52];
+ RHS13 -= go[51] * *cnV[51];
+ RHS13 -= go[52] * *cnV[52];
+ m_A42 += gt[53];
+ m_A42 += gt[54];
+ m_A40 += go[53];
+ m_A39 += go[54];
+ double RHS14 = Idr[53];
+ RHS14 += Idr[54];
+ m_A45 += gt[55];
+ m_A45 += gt[56];
+ m_A45 += gt[57];
+ m_A45 += gt[58];
+ m_A46 += go[55];
+ m_A44 += go[56];
+ double RHS15 = Idr[55];
+ RHS15 += Idr[56];
+ RHS15 += Idr[57];
+ RHS15 += Idr[58];
+ RHS15 -= go[57] * *cnV[57];
+ RHS15 -= go[58] * *cnV[58];
+ m_A52 += gt[59];
+ m_A52 += gt[60];
+ m_A52 += gt[61];
+ m_A48 += go[59];
+ m_A49 += go[60];
+ m_A47 += go[61];
+ double RHS16 = Idr[59];
+ RHS16 += Idr[60];
+ RHS16 += Idr[61];
+ m_A57 += gt[62];
+ m_A57 += gt[63];
+ m_A57 += gt[64];
+ m_A57 += gt[65];
+ m_A57 += gt[66];
+ m_A54 += go[62];
+ m_A55 += go[63];
+ m_A58 += go[64];
+ double RHS17 = Idr[62];
+ RHS17 += Idr[63];
+ RHS17 += Idr[64];
+ RHS17 += Idr[65];
+ RHS17 += Idr[66];
+ RHS17 -= go[65] * *cnV[65];
+ RHS17 -= go[66] * *cnV[66];
+ m_A65 += gt[67];
+ m_A65 += gt[68];
+ m_A65 += gt[69];
+ m_A65 += gt[70];
+ m_A65 += gt[71];
+ m_A65 += gt[72];
+ m_A61 += go[67];
+ m_A61 += go[68];
+ m_A63 += go[69];
+ m_A60 += go[70];
+ m_A59 += go[71];
+ double RHS18 = Idr[67];
+ RHS18 += Idr[68];
+ RHS18 += Idr[69];
+ RHS18 += Idr[70];
+ RHS18 += Idr[71];
+ RHS18 += Idr[72];
+ RHS18 -= go[72] * *cnV[72];
+ m_A72 += gt[73];
+ m_A72 += gt[74];
+ m_A72 += gt[75];
+ m_A72 += gt[76];
+ m_A72 += gt[77];
+ m_A68 += go[73];
+ m_A70 += go[74];
+ m_A69 += go[75];
+ m_A67 += go[76];
+ m_A66 += go[77];
+ double RHS19 = Idr[73];
+ RHS19 += Idr[74];
+ RHS19 += Idr[75];
+ RHS19 += Idr[76];
+ RHS19 += Idr[77];
+ const double f0 = 1.0 / m_A0;
+ const double f0_17 = -f0 * m_A54;
+ m_A56 += m_A1 * f0_17;
+ RHS17 += f0_17 * RHS0;
+ const double f1 = 1.0 / m_A2;
+ const double f1_7 = -f1 * m_A15;
+ m_A17 += m_A3 * f1_7;
+ RHS7 += f1_7 * RHS1;
+ const double f2 = 1.0 / m_A4;
+ const double f2_10 = -f2 * m_A24;
+ m_A25 += m_A5 * f2_10;
+ m_A26 += m_A6 * f2_10;
+ RHS10 += f2_10 * RHS2;
+ const double f2_11 = -f2 * m_A28;
+ m_A29 += m_A5 * f2_11;
+ m_A30 += m_A6 * f2_11;
+ RHS11 += f2_11 * RHS2;
+ const double f3 = 1.0 / m_A7;
+ const double f3_14 = -f3 * m_A39;
+ m_A42 += m_A8 * f3_14;
+ RHS14 += f3_14 * RHS3;
+ const double f3_18 = -f3 * m_A59;
+ m_A63 += m_A8 * f3_18;
+ RHS18 += f3_18 * RHS3;
+ const double f4 = 1.0 / m_A9;
+ const double f4_16 = -f4 * m_A47;
+ m_A52 += m_A10 * f4_16;
+ RHS16 += f4_16 * RHS4;
+ const double f4_19 = -f4 * m_A66;
+ m_A69 += m_A10 * f4_19;
+ RHS19 += f4_19 * RHS4;
+ const double f5 = 1.0 / m_A11;
+ const double f5_13 = -f5 * m_A36;
+ m_A38 += m_A12 * f5_13;
+ RHS13 += f5_13 * RHS5;
+ const double f5_18 = -f5 * m_A60;
+ m_A65 += m_A12 * f5_18;
+ RHS18 += f5_18 * RHS5;
+ const double f6 = 1.0 / m_A13;
+ const double f6_12 = -f6 * m_A33;
+ m_A34 += m_A14 * f6_12;
+ RHS12 += f6_12 * RHS6;
+ const double f7 = 1.0 / m_A16;
+ const double f7_16 = -f7 * m_A48;
+ m_A50 += m_A17 * f7_16;
+ m_A52 += m_A18 * f7_16;
+ m_A53 += m_A19 * f7_16;
+ RHS16 += f7_16 * RHS7;
+ const double f7_18 = -f7 * m_A61;
+ m_A62 += m_A17 * f7_18;
+ m_A64 += m_A18 * f7_18;
+ m_A65 += m_A19 * f7_18;
+ RHS18 += f7_18 * RHS7;
+ const double f8 = 1.0 / m_A20;
+ const double f8_15 = -f8 * m_A44;
+ m_A46 += m_A21 * f8_15;
+ RHS15 += f8_15 * RHS8;
+ const double f8_19 = -f8 * m_A67;
+ m_A72 += m_A21 * f8_19;
+ RHS19 += f8_19 * RHS8;
+ const double f9 = 1.0 / m_A22;
+ const double f9_19 = -f9 * m_A68;
+ m_A72 += m_A23 * f9_19;
+ RHS19 += f9_19 * RHS9;
+ const double f10 = 1.0 / m_A25;
+ const double f10_11 = -f10 * m_A29;
+ m_A30 += m_A26 * f10_11;
+ m_A31 += m_A27 * f10_11;
+ RHS11 += f10_11 * RHS10;
+ const double f10_14 = -f10 * m_A40;
+ m_A41 += m_A26 * f10_14;
+ m_A42 += m_A27 * f10_14;
+ RHS14 += f10_14 * RHS10;
+ const double f11 = 1.0 / m_A30;
+ const double f11_14 = -f11 * m_A41;
+ m_A42 += m_A31 * f11_14;
+ m_A43 += m_A32 * f11_14;
+ RHS14 += f11_14 * RHS11;
+ const double f11_16 = -f11 * m_A49;
+ m_A51 += m_A31 * f11_16;
+ m_A52 += m_A32 * f11_16;
+ RHS16 += f11_16 * RHS11;
+ const double f12 = 1.0 / m_A34;
+ const double f12_17 = -f12 * m_A55;
+ m_A57 += m_A35 * f12_17;
+ RHS17 += f12_17 * RHS12;
+ const double f13 = 1.0 / m_A37;
+ const double f13_16 = -f13 * m_A50;
+ m_A53 += m_A38 * f13_16;
+ RHS16 += f13_16 * RHS13;
+ const double f13_18 = -f13 * m_A62;
+ m_A65 += m_A38 * f13_18;
+ RHS18 += f13_18 * RHS13;
+ const double f14 = 1.0 / m_A42;
+ const double f14_16 = -f14 * m_A51;
+ m_A52 += m_A43 * f14_16;
+ RHS16 += f14_16 * RHS14;
+ const double f14_18 = -f14 * m_A63;
+ m_A64 += m_A43 * f14_18;
+ RHS18 += f14_18 * RHS14;
+ const double f15 = 1.0 / m_A45;
+ const double f15_17 = -f15 * m_A56;
+ m_A58 += m_A46 * f15_17;
+ RHS17 += f15_17 * RHS15;
+ const double f16 = 1.0 / m_A52;
+ const double f16_18 = -f16 * m_A64;
+ m_A65 += m_A53 * f16_18;
+ RHS18 += f16_18 * RHS16;
+ const double f16_19 = -f16 * m_A69;
+ m_A71 += m_A53 * f16_19;
+ RHS19 += f16_19 * RHS16;
+ const double f17 = 1.0 / m_A57;
+ const double f17_19 = -f17 * m_A70;
+ m_A72 += m_A58 * f17_19;
+ RHS19 += f17_19 * RHS17;
+ const double f18 = 1.0 / m_A65;
+ const double f18_19 = -f18 * m_A71;
+ RHS19 += f18_19 * RHS18;
+ V[19] = RHS19 / m_A72;
+ double tmp18 = 0.0;
+ V[18] = (RHS18 - tmp18) / m_A65;
+ double tmp17 = 0.0;
+ tmp17 += m_A58 * V[19];
+ V[17] = (RHS17 - tmp17) / m_A57;
+ double tmp16 = 0.0;
+ tmp16 += m_A53 * V[18];
+ V[16] = (RHS16 - tmp16) / m_A52;
+ double tmp15 = 0.0;
+ tmp15 += m_A46 * V[19];
+ V[15] = (RHS15 - tmp15) / m_A45;
+ double tmp14 = 0.0;
+ tmp14 += m_A43 * V[16];
+ V[14] = (RHS14 - tmp14) / m_A42;
+ double tmp13 = 0.0;
+ tmp13 += m_A38 * V[18];
+ V[13] = (RHS13 - tmp13) / m_A37;
+ double tmp12 = 0.0;
+ tmp12 += m_A35 * V[17];
+ V[12] = (RHS12 - tmp12) / m_A34;
+ double tmp11 = 0.0;
+ tmp11 += m_A31 * V[14];
+ tmp11 += m_A32 * V[16];
+ V[11] = (RHS11 - tmp11) / m_A30;
+ double tmp10 = 0.0;
+ tmp10 += m_A26 * V[11];
+ tmp10 += m_A27 * V[14];
+ V[10] = (RHS10 - tmp10) / m_A25;
+ double tmp9 = 0.0;
+ tmp9 += m_A23 * V[19];
+ V[9] = (RHS9 - tmp9) / m_A22;
+ double tmp8 = 0.0;
+ tmp8 += m_A21 * V[19];
+ V[8] = (RHS8 - tmp8) / m_A20;
+ double tmp7 = 0.0;
+ tmp7 += m_A17 * V[13];
+ tmp7 += m_A18 * V[16];
+ tmp7 += m_A19 * V[18];
+ V[7] = (RHS7 - tmp7) / m_A16;
+ double tmp6 = 0.0;
+ tmp6 += m_A14 * V[12];
+ V[6] = (RHS6 - tmp6) / m_A13;
+ double tmp5 = 0.0;
+ tmp5 += m_A12 * V[18];
+ V[5] = (RHS5 - tmp5) / m_A11;
+ double tmp4 = 0.0;
+ tmp4 += m_A10 * V[16];
+ V[4] = (RHS4 - tmp4) / m_A9;
+ double tmp3 = 0.0;
+ tmp3 += m_A8 * V[14];
+ V[3] = (RHS3 - tmp3) / m_A7;
+ double tmp2 = 0.0;
+ tmp2 += m_A5 * V[10];
+ tmp2 += m_A6 * V[11];
+ V[2] = (RHS2 - tmp2) / m_A4;
+ double tmp1 = 0.0;
+ tmp1 += m_A3 * V[13];
+ V[1] = (RHS1 - tmp1) / m_A2;
+ double tmp0 = 0.0;
+ tmp0 += m_A1 * V[15];
+ V[0] = (RHS0 - tmp0) / m_A0;
+}
+
+// starfire
+static void nl_gcr_649ebca7fa6793ed_27_double_double(double * __restrict V, const double * __restrict go, const double * __restrict gt, const double * __restrict Idr, const double * const * __restrict cnV)
+
+{
+
+ plib::unused_var(cnV);
+ double m_A0(0.0);
+ double m_A1(0.0);
+ double m_A2(0.0);
+ double m_A3(0.0);
+ double m_A4(0.0);
+ double m_A5(0.0);
+ double m_A6(0.0);
+ double m_A7(0.0);
+ double m_A8(0.0);
+ double m_A9(0.0);
+ double m_A10(0.0);
+ double m_A11(0.0);
+ double m_A12(0.0);
+ double m_A13(0.0);
+ double m_A14(0.0);
+ double m_A15(0.0);
+ double m_A16(0.0);
+ double m_A17(0.0);
+ double m_A18(0.0);
+ double m_A19(0.0);
+ double m_A20(0.0);
+ double m_A21(0.0);
+ double m_A22(0.0);
+ double m_A23(0.0);
+ double m_A24(0.0);
+ double m_A25(0.0);
+ double m_A26(0.0);
+ m_A0 += gt[0];
+ m_A0 += gt[1];
+ m_A0 += gt[2];
+ m_A0 += gt[3];
+ m_A0 += gt[4];
+ m_A0 += gt[5];
+ m_A1 += go[0];
+ m_A1 += go[1];
+ m_A2 += go[2];
+ m_A2 += go[3];
+ double RHS0 = Idr[0];
+ RHS0 += Idr[1];
+ RHS0 += Idr[2];
+ RHS0 += Idr[3];
+ RHS0 += Idr[4];
+ RHS0 += Idr[5];
+ RHS0 -= go[4] * *cnV[4];
+ RHS0 -= go[5] * *cnV[5];
+ m_A3 += gt[6];
+ m_A3 += gt[7];
+ m_A3 += gt[8];
+ m_A3 += gt[9];
+ m_A3 += gt[10];
+ m_A3 += gt[11];
+ m_A3 += gt[12];
+ m_A4 += go[6];
+ m_A5 += go[7];
+ double RHS1 = Idr[6];
+ RHS1 += Idr[7];
+ RHS1 += Idr[8];
+ RHS1 += Idr[9];
+ RHS1 += Idr[10];
+ RHS1 += Idr[11];
+ RHS1 += Idr[12];
+ RHS1 -= go[8] * *cnV[8];
+ RHS1 -= go[9] * *cnV[9];
+ RHS1 -= go[10] * *cnV[10];
+ RHS1 -= go[11] * *cnV[11];
+ RHS1 -= go[12] * *cnV[12];
+ m_A6 += gt[13];
+ m_A6 += gt[14];
+ m_A6 += gt[15];
+ m_A6 += gt[16];
+ m_A7 += go[13];
+ m_A8 += go[14];
+ double RHS2 = Idr[13];
+ RHS2 += Idr[14];
+ RHS2 += Idr[15];
+ RHS2 += Idr[16];
+ RHS2 -= go[15] * *cnV[15];
+ RHS2 -= go[16] * *cnV[16];
+ m_A9 += gt[17];
+ m_A9 += gt[18];
+ m_A10 += go[17];
+ double RHS3 = Idr[17];
+ RHS3 += Idr[18];
+ RHS3 -= go[18] * *cnV[18];
+ m_A11 += gt[19];
+ m_A11 += gt[20];
+ m_A12 += go[19];
+ double RHS4 = Idr[19];
+ RHS4 += Idr[20];
+ RHS4 -= go[20] * *cnV[20];
+ m_A17 += gt[21];
+ m_A17 += gt[22];
+ m_A17 += gt[23];
+ m_A17 += gt[24];
+ m_A17 += gt[25];
+ m_A17 += gt[26];
+ m_A17 += gt[27];
+ m_A13 += go[21];
+ m_A16 += go[22];
+ m_A15 += go[23];
+ m_A14 += go[24];
+ double RHS5 = Idr[21];
+ RHS5 += Idr[22];
+ RHS5 += Idr[23];
+ RHS5 += Idr[24];
+ RHS5 += Idr[25];
+ RHS5 += Idr[26];
+ RHS5 += Idr[27];
+ RHS5 -= go[25] * *cnV[25];
+ RHS5 -= go[26] * *cnV[26];
+ RHS5 -= go[27] * *cnV[27];
+ m_A20 += gt[28];
+ m_A20 += gt[29];
+ m_A20 += gt[30];
+ m_A20 += gt[31];
+ m_A19 += go[28];
+ m_A19 += go[29];
+ m_A21 += go[30];
+ double RHS6 = Idr[28];
+ RHS6 += Idr[29];
+ RHS6 += Idr[30];
+ RHS6 += Idr[31];
+ RHS6 -= go[31] * *cnV[31];
+ m_A26 += gt[32];
+ m_A26 += gt[33];
+ m_A26 += gt[34];
+ m_A26 += gt[35];
+ m_A26 += gt[36];
+ m_A26 += gt[37];
+ m_A23 += go[32];
+ m_A25 += go[33];
+ m_A22 += go[34];
+ m_A22 += go[35];
+ double RHS7 = Idr[32];
+ RHS7 += Idr[33];
+ RHS7 += Idr[34];
+ RHS7 += Idr[35];
+ RHS7 += Idr[36];
+ RHS7 += Idr[37];
+ RHS7 -= go[36] * *cnV[36];
+ RHS7 -= go[37] * *cnV[37];
+ const double f0 = 1.0 / m_A0;
+ const double f0_6 = -f0 * m_A19;
+ m_A20 += m_A1 * f0_6;
+ m_A21 += m_A2 * f0_6;
+ RHS6 += f0_6 * RHS0;
+ const double f0_7 = -f0 * m_A22;
+ m_A25 += m_A1 * f0_7;
+ m_A26 += m_A2 * f0_7;
+ RHS7 += f0_7 * RHS0;
+ const double f1 = 1.0 / m_A3;
+ const double f1_5 = -f1 * m_A13;
+ m_A14 += m_A4 * f1_5;
+ m_A18 += m_A5 * f1_5;
+ RHS5 += f1_5 * RHS1;
+ const double f2 = 1.0 / m_A6;
+ const double f2_5 = -f2 * m_A14;
+ m_A17 += m_A7 * f2_5;
+ m_A18 += m_A8 * f2_5;
+ RHS5 += f2_5 * RHS2;
+ const double f2_7 = -f2 * m_A23;
+ m_A24 += m_A7 * f2_7;
+ m_A26 += m_A8 * f2_7;
+ RHS7 += f2_7 * RHS2;
+ const double f3 = 1.0 / m_A9;
+ const double f3_5 = -f3 * m_A15;
+ m_A17 += m_A10 * f3_5;
+ RHS5 += f3_5 * RHS3;
+ const double f4 = 1.0 / m_A11;
+ const double f4_5 = -f4 * m_A16;
+ m_A17 += m_A12 * f4_5;
+ RHS5 += f4_5 * RHS4;
+ const double f5 = 1.0 / m_A17;
+ const double f5_7 = -f5 * m_A24;
+ m_A26 += m_A18 * f5_7;
+ RHS7 += f5_7 * RHS5;
+ const double f6 = 1.0 / m_A20;
+ const double f6_7 = -f6 * m_A25;
+ m_A26 += m_A21 * f6_7;
+ RHS7 += f6_7 * RHS6;
+ V[7] = RHS7 / m_A26;
+ double tmp6 = 0.0;
+ tmp6 += m_A21 * V[7];
+ V[6] = (RHS6 - tmp6) / m_A20;
+ double tmp5 = 0.0;
+ tmp5 += m_A18 * V[7];
+ V[5] = (RHS5 - tmp5) / m_A17;
+ double tmp4 = 0.0;
+ tmp4 += m_A12 * V[5];
+ V[4] = (RHS4 - tmp4) / m_A11;
+ double tmp3 = 0.0;
+ tmp3 += m_A10 * V[5];
+ V[3] = (RHS3 - tmp3) / m_A9;
+ double tmp2 = 0.0;
+ tmp2 += m_A7 * V[5];
+ tmp2 += m_A8 * V[7];
+ V[2] = (RHS2 - tmp2) / m_A6;
+ double tmp1 = 0.0;
+ tmp1 += m_A4 * V[2];
+ tmp1 += m_A5 * V[7];
+ V[1] = (RHS1 - tmp1) / m_A3;
+ double tmp0 = 0.0;
+ tmp0 += m_A1 * V[6];
+ tmp0 += m_A2 * V[7];
+ V[0] = (RHS0 - tmp0) / m_A0;
+}
+
// armora
static void nl_gcr_64e460d8f716cd89_58_double_double(double * __restrict V, const double * __restrict go, const double * __restrict gt, const double * __restrict Idr, const double * const * __restrict cnV)
@@ -17625,7 +18640,825 @@ static void nl_gcr_7a42b97d838ca073_7_double_double(double * __restrict V, const
V[0] = (RHS0 - tmp0) / m_A0;
}
-// cheekyms
+// fireone
+static void nl_gcr_7aee4423e3fdbfda_128_double_double(double * __restrict V, const double * __restrict go, const double * __restrict gt, const double * __restrict Idr, const double * const * __restrict cnV)
+
+{
+
+ plib::unused_var(cnV);
+ double m_A0(0.0);
+ double m_A1(0.0);
+ double m_A2(0.0);
+ double m_A3(0.0);
+ double m_A4(0.0);
+ double m_A5(0.0);
+ double m_A6(0.0);
+ double m_A7(0.0);
+ double m_A8(0.0);
+ double m_A9(0.0);
+ double m_A10(0.0);
+ double m_A11(0.0);
+ double m_A12(0.0);
+ double m_A13(0.0);
+ double m_A14(0.0);
+ double m_A15(0.0);
+ double m_A16(0.0);
+ double m_A17(0.0);
+ double m_A18(0.0);
+ double m_A19(0.0);
+ double m_A20(0.0);
+ double m_A21(0.0);
+ double m_A22(0.0);
+ double m_A23(0.0);
+ double m_A24(0.0);
+ double m_A25(0.0);
+ double m_A26(0.0);
+ double m_A27(0.0);
+ double m_A28(0.0);
+ double m_A29(0.0);
+ double m_A30(0.0);
+ double m_A31(0.0);
+ double m_A32(0.0);
+ double m_A33(0.0);
+ double m_A34(0.0);
+ double m_A35(0.0);
+ double m_A36(0.0);
+ double m_A37(0.0);
+ double m_A38(0.0);
+ double m_A39(0.0);
+ double m_A40(0.0);
+ double m_A41(0.0);
+ double m_A42(0.0);
+ double m_A43(0.0);
+ double m_A44(0.0);
+ double m_A45(0.0);
+ double m_A46(0.0);
+ double m_A47(0.0);
+ double m_A48(0.0);
+ double m_A49(0.0);
+ double m_A50(0.0);
+ double m_A51(0.0);
+ double m_A52(0.0);
+ double m_A53(0.0);
+ double m_A54(0.0);
+ double m_A55(0.0);
+ double m_A56(0.0);
+ double m_A57(0.0);
+ double m_A58(0.0);
+ double m_A59(0.0);
+ double m_A60(0.0);
+ double m_A61(0.0);
+ double m_A62(0.0);
+ double m_A63(0.0);
+ double m_A64(0.0);
+ double m_A65(0.0);
+ double m_A66(0.0);
+ double m_A67(0.0);
+ double m_A68(0.0);
+ double m_A69(0.0);
+ double m_A70(0.0);
+ double m_A71(0.0);
+ double m_A72(0.0);
+ double m_A73(0.0);
+ double m_A74(0.0);
+ double m_A75(0.0);
+ double m_A76(0.0);
+ double m_A77(0.0);
+ double m_A78(0.0);
+ double m_A79(0.0);
+ double m_A80(0.0);
+ double m_A81(0.0);
+ double m_A82(0.0);
+ double m_A83(0.0);
+ double m_A84(0.0);
+ double m_A85(0.0);
+ double m_A86(0.0);
+ double m_A87(0.0);
+ double m_A88(0.0);
+ double m_A89(0.0);
+ double m_A90(0.0);
+ double m_A91(0.0);
+ double m_A92(0.0);
+ double m_A93(0.0);
+ double m_A94(0.0);
+ double m_A95(0.0);
+ double m_A96(0.0);
+ double m_A97(0.0);
+ double m_A98(0.0);
+ double m_A99(0.0);
+ double m_A100(0.0);
+ double m_A101(0.0);
+ double m_A102(0.0);
+ double m_A103(0.0);
+ double m_A104(0.0);
+ double m_A105(0.0);
+ double m_A106(0.0);
+ double m_A107(0.0);
+ double m_A108(0.0);
+ double m_A109(0.0);
+ double m_A110(0.0);
+ double m_A111(0.0);
+ double m_A112(0.0);
+ double m_A113(0.0);
+ double m_A114(0.0);
+ double m_A115(0.0);
+ double m_A116(0.0);
+ double m_A117(0.0);
+ double m_A118(0.0);
+ double m_A119(0.0);
+ double m_A120(0.0);
+ double m_A121(0.0);
+ double m_A122(0.0);
+ double m_A123(0.0);
+ double m_A124(0.0);
+ double m_A125(0.0);
+ double m_A126(0.0);
+ double m_A127(0.0);
+ m_A0 += gt[0];
+ m_A0 += gt[1];
+ m_A1 += go[0];
+ double RHS0 = Idr[0];
+ RHS0 += Idr[1];
+ RHS0 -= go[1] * *cnV[1];
+ m_A2 += gt[2];
+ m_A2 += gt[3];
+ m_A3 += go[2];
+ double RHS1 = Idr[2];
+ RHS1 += Idr[3];
+ RHS1 -= go[3] * *cnV[3];
+ m_A4 += gt[4];
+ m_A4 += gt[5];
+ m_A4 += gt[6];
+ m_A4 += gt[7];
+ m_A7 += go[4];
+ m_A6 += go[5];
+ m_A5 += go[6];
+ double RHS2 = Idr[4];
+ RHS2 += Idr[5];
+ RHS2 += Idr[6];
+ RHS2 += Idr[7];
+ RHS2 -= go[7] * *cnV[7];
+ m_A8 += gt[8];
+ m_A8 += gt[9];
+ m_A8 += gt[10];
+ m_A9 += go[8];
+ m_A10 += go[9];
+ double RHS3 = Idr[8];
+ RHS3 += Idr[9];
+ RHS3 += Idr[10];
+ RHS3 -= go[10] * *cnV[10];
+ m_A11 += gt[11];
+ m_A11 += gt[12];
+ m_A12 += go[11];
+ double RHS4 = Idr[11];
+ RHS4 += Idr[12];
+ RHS4 -= go[12] * *cnV[12];
+ m_A13 += gt[13];
+ m_A13 += gt[14];
+ m_A13 += gt[15];
+ m_A13 += gt[16];
+ m_A13 += gt[17];
+ m_A13 += gt[18];
+ m_A13 += gt[19];
+ m_A16 += go[13];
+ m_A17 += go[14];
+ m_A15 += go[15];
+ m_A14 += go[16];
+ double RHS5 = Idr[13];
+ RHS5 += Idr[14];
+ RHS5 += Idr[15];
+ RHS5 += Idr[16];
+ RHS5 += Idr[17];
+ RHS5 += Idr[18];
+ RHS5 += Idr[19];
+ RHS5 -= go[17] * *cnV[17];
+ RHS5 -= go[18] * *cnV[18];
+ RHS5 -= go[19] * *cnV[19];
+ m_A18 += gt[20];
+ m_A18 += gt[21];
+ m_A18 += gt[22];
+ m_A18 += gt[23];
+ m_A18 += gt[24];
+ m_A18 += gt[25];
+ m_A18 += gt[26];
+ m_A21 += go[20];
+ m_A22 += go[21];
+ m_A19 += go[22];
+ m_A20 += go[23];
+ double RHS6 = Idr[20];
+ RHS6 += Idr[21];
+ RHS6 += Idr[22];
+ RHS6 += Idr[23];
+ RHS6 += Idr[24];
+ RHS6 += Idr[25];
+ RHS6 += Idr[26];
+ RHS6 -= go[24] * *cnV[24];
+ RHS6 -= go[25] * *cnV[25];
+ RHS6 -= go[26] * *cnV[26];
+ m_A23 += gt[27];
+ m_A23 += gt[28];
+ m_A23 += gt[29];
+ m_A24 += go[27];
+ m_A25 += go[28];
+ double RHS7 = Idr[27];
+ RHS7 += Idr[28];
+ RHS7 += Idr[29];
+ RHS7 -= go[29] * *cnV[29];
+ m_A26 += gt[30];
+ m_A26 += gt[31];
+ m_A27 += go[30];
+ double RHS8 = Idr[30];
+ RHS8 += Idr[31];
+ RHS8 -= go[31] * *cnV[31];
+ m_A28 += gt[32];
+ m_A28 += gt[33];
+ m_A28 += gt[34];
+ m_A29 += go[32];
+ m_A30 += go[33];
+ double RHS9 = Idr[32];
+ RHS9 += Idr[33];
+ RHS9 += Idr[34];
+ RHS9 -= go[34] * *cnV[34];
+ m_A31 += gt[35];
+ m_A31 += gt[36];
+ m_A31 += gt[37];
+ m_A32 += go[35];
+ double RHS10 = Idr[35];
+ RHS10 += Idr[36];
+ RHS10 += Idr[37];
+ RHS10 -= go[36] * *cnV[36];
+ RHS10 -= go[37] * *cnV[37];
+ m_A33 += gt[38];
+ m_A33 += gt[39];
+ m_A33 += gt[40];
+ m_A35 += go[38];
+ m_A34 += go[39];
+ double RHS11 = Idr[38];
+ RHS11 += Idr[39];
+ RHS11 += Idr[40];
+ RHS11 -= go[40] * *cnV[40];
+ m_A38 += gt[41];
+ m_A38 += gt[42];
+ m_A38 += gt[43];
+ m_A38 += gt[44];
+ m_A37 += go[41];
+ m_A36 += go[42];
+ double RHS12 = Idr[41];
+ RHS12 += Idr[42];
+ RHS12 += Idr[43];
+ RHS12 += Idr[44];
+ RHS12 -= go[43] * *cnV[43];
+ RHS12 -= go[44] * *cnV[44];
+ m_A44 += gt[45];
+ m_A44 += gt[46];
+ m_A44 += gt[47];
+ m_A44 += gt[48];
+ m_A42 += go[45];
+ m_A41 += go[46];
+ double RHS13 = Idr[45];
+ RHS13 += Idr[46];
+ RHS13 += Idr[47];
+ RHS13 += Idr[48];
+ RHS13 -= go[47] * *cnV[47];
+ RHS13 -= go[48] * *cnV[48];
+ m_A50 += gt[49];
+ m_A50 += gt[50];
+ m_A50 += gt[51];
+ m_A49 += go[49];
+ m_A51 += go[50];
+ double RHS14 = Idr[49];
+ RHS14 += Idr[50];
+ RHS14 += Idr[51];
+ RHS14 -= go[51] * *cnV[51];
+ m_A53 += gt[52];
+ m_A53 += gt[53];
+ m_A53 += gt[54];
+ m_A53 += gt[55];
+ m_A52 += go[52];
+ m_A54 += go[53];
+ double RHS15 = Idr[52];
+ RHS15 += Idr[53];
+ RHS15 += Idr[54];
+ RHS15 += Idr[55];
+ RHS15 -= go[54] * *cnV[54];
+ RHS15 -= go[55] * *cnV[55];
+ m_A59 += gt[56];
+ m_A59 += gt[57];
+ m_A59 += gt[58];
+ m_A59 += gt[59];
+ m_A59 += gt[60];
+ m_A59 += gt[61];
+ m_A62 += go[56];
+ m_A57 += go[57];
+ m_A56 += go[58];
+ m_A55 += go[59];
+ m_A61 += go[60];
+ double RHS16 = Idr[56];
+ RHS16 += Idr[57];
+ RHS16 += Idr[58];
+ RHS16 += Idr[59];
+ RHS16 += Idr[60];
+ RHS16 += Idr[61];
+ RHS16 -= go[61] * *cnV[61];
+ m_A66 += gt[62];
+ m_A66 += gt[63];
+ m_A66 += gt[64];
+ m_A66 += gt[65];
+ m_A65 += go[62];
+ m_A64 += go[63];
+ m_A67 += go[64];
+ double RHS17 = Idr[62];
+ RHS17 += Idr[63];
+ RHS17 += Idr[64];
+ RHS17 += Idr[65];
+ RHS17 -= go[65] * *cnV[65];
+ m_A73 += gt[66];
+ m_A73 += gt[67];
+ m_A73 += gt[68];
+ m_A73 += gt[69];
+ m_A76 += go[66];
+ m_A69 += go[67];
+ m_A68 += go[68];
+ double RHS18 = Idr[66];
+ RHS18 += Idr[67];
+ RHS18 += Idr[68];
+ RHS18 += Idr[69];
+ RHS18 -= go[69] * *cnV[69];
+ m_A79 += gt[70];
+ m_A79 += gt[71];
+ m_A78 += go[70];
+ double RHS19 = Idr[70];
+ RHS19 += Idr[71];
+ RHS19 -= go[71] * *cnV[71];
+ m_A83 += gt[72];
+ m_A83 += gt[73];
+ m_A83 += gt[74];
+ m_A82 += go[72];
+ m_A81 += go[73];
+ double RHS20 = Idr[72];
+ RHS20 += Idr[73];
+ RHS20 += Idr[74];
+ RHS20 -= go[74] * *cnV[74];
+ m_A87 += gt[75];
+ m_A87 += gt[76];
+ m_A87 += gt[77];
+ m_A87 += gt[78];
+ m_A87 += gt[79];
+ m_A87 += gt[80];
+ m_A87 += gt[81];
+ m_A88 += go[75];
+ m_A85 += go[76];
+ double RHS21 = Idr[75];
+ RHS21 += Idr[76];
+ RHS21 += Idr[77];
+ RHS21 += Idr[78];
+ RHS21 += Idr[79];
+ RHS21 += Idr[80];
+ RHS21 += Idr[81];
+ RHS21 -= go[77] * *cnV[77];
+ RHS21 -= go[78] * *cnV[78];
+ RHS21 -= go[79] * *cnV[79];
+ RHS21 -= go[80] * *cnV[80];
+ RHS21 -= go[81] * *cnV[81];
+ m_A95 += gt[82];
+ m_A95 += gt[83];
+ m_A95 += gt[84];
+ m_A95 += gt[85];
+ m_A90 += go[82];
+ m_A89 += go[83];
+ m_A92 += go[84];
+ m_A91 += go[85];
+ double RHS22 = Idr[82];
+ RHS22 += Idr[83];
+ RHS22 += Idr[84];
+ RHS22 += Idr[85];
+ m_A106 += gt[86];
+ m_A106 += gt[87];
+ m_A106 += gt[88];
+ m_A106 += gt[89];
+ m_A106 += gt[90];
+ m_A106 += gt[91];
+ m_A106 += gt[92];
+ m_A106 += gt[93];
+ m_A102 += go[86];
+ m_A100 += go[87];
+ m_A108 += go[88];
+ m_A99 += go[89];
+ m_A103 += go[90];
+ double RHS23 = Idr[86];
+ RHS23 += Idr[87];
+ RHS23 += Idr[88];
+ RHS23 += Idr[89];
+ RHS23 += Idr[90];
+ RHS23 += Idr[91];
+ RHS23 += Idr[92];
+ RHS23 += Idr[93];
+ RHS23 -= go[91] * *cnV[91];
+ RHS23 -= go[92] * *cnV[92];
+ RHS23 -= go[93] * *cnV[93];
+ m_A115 += gt[94];
+ m_A115 += gt[95];
+ m_A115 += gt[96];
+ m_A115 += gt[97];
+ m_A115 += gt[98];
+ m_A112 += go[94];
+ m_A109 += go[95];
+ m_A110 += go[96];
+ double RHS24 = Idr[94];
+ RHS24 += Idr[95];
+ RHS24 += Idr[96];
+ RHS24 += Idr[97];
+ RHS24 += Idr[98];
+ RHS24 -= go[97] * *cnV[97];
+ RHS24 -= go[98] * *cnV[98];
+ m_A127 += gt[99];
+ m_A127 += gt[100];
+ m_A127 += gt[101];
+ m_A127 += gt[102];
+ m_A127 += gt[103];
+ m_A127 += gt[104];
+ m_A122 += go[99];
+ m_A125 += go[100];
+ m_A118 += go[101];
+ m_A119 += go[102];
+ m_A117 += go[103];
+ double RHS25 = Idr[99];
+ RHS25 += Idr[100];
+ RHS25 += Idr[101];
+ RHS25 += Idr[102];
+ RHS25 += Idr[103];
+ RHS25 += Idr[104];
+ RHS25 -= go[104] * *cnV[104];
+ const double f0 = 1.0 / m_A0;
+ const double f0_12 = -f0 * m_A36;
+ m_A38 += m_A1 * f0_12;
+ RHS12 += f0_12 * RHS0;
+ const double f1 = 1.0 / m_A2;
+ const double f1_14 = -f1 * m_A49;
+ m_A50 += m_A3 * f1_14;
+ RHS14 += f1_14 * RHS1;
+ const double f2 = 1.0 / m_A4;
+ const double f2_12 = -f2 * m_A37;
+ m_A38 += m_A5 * f2_12;
+ m_A39 += m_A6 * f2_12;
+ m_A40 += m_A7 * f2_12;
+ RHS12 += f2_12 * RHS2;
+ const double f2_13 = -f2 * m_A41;
+ m_A43 += m_A5 * f2_13;
+ m_A44 += m_A6 * f2_13;
+ m_A46 += m_A7 * f2_13;
+ RHS13 += f2_13 * RHS2;
+ const double f2_18 = -f2 * m_A68;
+ m_A70 += m_A5 * f2_18;
+ m_A71 += m_A6 * f2_18;
+ m_A73 += m_A7 * f2_18;
+ RHS18 += f2_18 * RHS2;
+ const double f3 = 1.0 / m_A8;
+ const double f3_16 = -f3 * m_A55;
+ m_A59 += m_A9 * f3_16;
+ m_A61 += m_A10 * f3_16;
+ RHS16 += f3_16 * RHS3;
+ const double f3_22 = -f3 * m_A89;
+ m_A92 += m_A9 * f3_22;
+ m_A95 += m_A10 * f3_22;
+ RHS22 += f3_22 * RHS3;
+ const double f4 = 1.0 / m_A11;
+ const double f4_15 = -f4 * m_A52;
+ m_A53 += m_A12 * f4_15;
+ RHS15 += f4_15 * RHS4;
+ const double f5 = 1.0 / m_A13;
+ const double f5_13 = -f5 * m_A42;
+ m_A44 += m_A14 * f5_13;
+ m_A45 += m_A15 * f5_13;
+ m_A47 += m_A16 * f5_13;
+ m_A48 += m_A17 * f5_13;
+ RHS13 += f5_13 * RHS5;
+ const double f5_16 = -f5 * m_A56;
+ m_A58 += m_A14 * f5_16;
+ m_A59 += m_A15 * f5_16;
+ m_A62 += m_A16 * f5_16;
+ m_A63 += m_A17 * f5_16;
+ RHS16 += f5_16 * RHS5;
+ const double f5_23 = -f5 * m_A99;
+ m_A101 += m_A14 * f5_23;
+ m_A103 += m_A15 * f5_23;
+ m_A106 += m_A16 * f5_23;
+ m_A108 += m_A17 * f5_23;
+ RHS23 += f5_23 * RHS5;
+ const double f5_25 = -f5 * m_A117;
+ m_A120 += m_A14 * f5_25;
+ m_A121 += m_A15 * f5_25;
+ m_A125 += m_A16 * f5_25;
+ m_A127 += m_A17 * f5_25;
+ RHS25 += f5_25 * RHS5;
+ const double f6 = 1.0 / m_A18;
+ const double f6_16 = -f6 * m_A57;
+ m_A59 += m_A19 * f6_16;
+ m_A60 += m_A20 * f6_16;
+ m_A62 += m_A21 * f6_16;
+ m_A63 += m_A22 * f6_16;
+ RHS16 += f6_16 * RHS6;
+ const double f6_18 = -f6 * m_A69;
+ m_A72 += m_A19 * f6_18;
+ m_A73 += m_A20 * f6_18;
+ m_A75 += m_A21 * f6_18;
+ m_A77 += m_A22 * f6_18;
+ RHS18 += f6_18 * RHS6;
+ const double f6_23 = -f6 * m_A100;
+ m_A103 += m_A19 * f6_23;
+ m_A104 += m_A20 * f6_23;
+ m_A106 += m_A21 * f6_23;
+ m_A108 += m_A22 * f6_23;
+ RHS23 += f6_23 * RHS6;
+ const double f6_25 = -f6 * m_A118;
+ m_A121 += m_A19 * f6_25;
+ m_A123 += m_A20 * f6_25;
+ m_A125 += m_A21 * f6_25;
+ m_A127 += m_A22 * f6_25;
+ RHS25 += f6_25 * RHS6;
+ const double f7 = 1.0 / m_A23;
+ const double f7_17 = -f7 * m_A64;
+ m_A66 += m_A24 * f7_17;
+ m_A67 += m_A25 * f7_17;
+ RHS17 += f7_17 * RHS7;
+ const double f7_25 = -f7 * m_A119;
+ m_A122 += m_A24 * f7_25;
+ m_A127 += m_A25 * f7_25;
+ RHS25 += f7_25 * RHS7;
+ const double f8 = 1.0 / m_A26;
+ const double f8_17 = -f8 * m_A65;
+ m_A66 += m_A27 * f8_17;
+ RHS17 += f8_17 * RHS8;
+ const double f9 = 1.0 / m_A28;
+ const double f9_19 = -f9 * m_A78;
+ m_A79 += m_A29 * f9_19;
+ m_A80 += m_A30 * f9_19;
+ RHS19 += f9_19 * RHS9;
+ const double f9_22 = -f9 * m_A90;
+ m_A94 += m_A29 * f9_22;
+ m_A95 += m_A30 * f9_22;
+ RHS22 += f9_22 * RHS9;
+ const double f10 = 1.0 / m_A31;
+ const double f10_20 = -f10 * m_A81;
+ m_A83 += m_A32 * f10_20;
+ RHS20 += f10_20 * RHS10;
+ const double f11 = 1.0 / m_A33;
+ const double f11_20 = -f11 * m_A82;
+ m_A83 += m_A34 * f11_20;
+ m_A84 += m_A35 * f11_20;
+ RHS20 += f11_20 * RHS11;
+ const double f11_21 = -f11 * m_A85;
+ m_A86 += m_A34 * f11_21;
+ m_A88 += m_A35 * f11_21;
+ RHS21 += f11_21 * RHS11;
+ const double f11_24 = -f11 * m_A109;
+ m_A111 += m_A34 * f11_24;
+ m_A115 += m_A35 * f11_24;
+ RHS24 += f11_24 * RHS11;
+ const double f12 = 1.0 / m_A38;
+ const double f12_13 = -f12 * m_A43;
+ m_A44 += m_A39 * f12_13;
+ m_A46 += m_A40 * f12_13;
+ RHS13 += f12_13 * RHS12;
+ const double f12_18 = -f12 * m_A70;
+ m_A71 += m_A39 * f12_18;
+ m_A73 += m_A40 * f12_18;
+ RHS18 += f12_18 * RHS12;
+ const double f13 = 1.0 / m_A44;
+ const double f13_16 = -f13 * m_A58;
+ m_A59 += m_A45 * f13_16;
+ m_A60 += m_A46 * f13_16;
+ m_A62 += m_A47 * f13_16;
+ m_A63 += m_A48 * f13_16;
+ RHS16 += f13_16 * RHS13;
+ const double f13_18 = -f13 * m_A71;
+ m_A72 += m_A45 * f13_18;
+ m_A73 += m_A46 * f13_18;
+ m_A75 += m_A47 * f13_18;
+ m_A77 += m_A48 * f13_18;
+ RHS18 += f13_18 * RHS13;
+ const double f13_23 = -f13 * m_A101;
+ m_A103 += m_A45 * f13_23;
+ m_A104 += m_A46 * f13_23;
+ m_A106 += m_A47 * f13_23;
+ m_A108 += m_A48 * f13_23;
+ RHS23 += f13_23 * RHS13;
+ const double f13_25 = -f13 * m_A120;
+ m_A121 += m_A45 * f13_25;
+ m_A123 += m_A46 * f13_25;
+ m_A125 += m_A47 * f13_25;
+ m_A127 += m_A48 * f13_25;
+ RHS25 += f13_25 * RHS13;
+ const double f14 = 1.0 / m_A50;
+ const double f14_22 = -f14 * m_A91;
+ m_A95 += m_A51 * f14_22;
+ RHS22 += f14_22 * RHS14;
+ const double f15 = 1.0 / m_A53;
+ const double f15_23 = -f15 * m_A102;
+ m_A106 += m_A54 * f15_23;
+ RHS23 += f15_23 * RHS15;
+ const double f16 = 1.0 / m_A59;
+ const double f16_18 = -f16 * m_A72;
+ m_A73 += m_A60 * f16_18;
+ m_A74 += m_A61 * f16_18;
+ m_A75 += m_A62 * f16_18;
+ m_A77 += m_A63 * f16_18;
+ RHS18 += f16_18 * RHS16;
+ const double f16_22 = -f16 * m_A92;
+ m_A93 += m_A60 * f16_22;
+ m_A95 += m_A61 * f16_22;
+ m_A96 += m_A62 * f16_22;
+ m_A98 += m_A63 * f16_22;
+ RHS22 += f16_22 * RHS16;
+ const double f16_23 = -f16 * m_A103;
+ m_A104 += m_A60 * f16_23;
+ m_A105 += m_A61 * f16_23;
+ m_A106 += m_A62 * f16_23;
+ m_A108 += m_A63 * f16_23;
+ RHS23 += f16_23 * RHS16;
+ const double f16_25 = -f16 * m_A121;
+ m_A123 += m_A60 * f16_25;
+ m_A124 += m_A61 * f16_25;
+ m_A125 += m_A62 * f16_25;
+ m_A127 += m_A63 * f16_25;
+ RHS25 += f16_25 * RHS16;
+ const double f17 = 1.0 / m_A66;
+ const double f17_25 = -f17 * m_A122;
+ m_A127 += m_A67 * f17_25;
+ RHS25 += f17_25 * RHS17;
+ const double f18 = 1.0 / m_A73;
+ const double f18_22 = -f18 * m_A93;
+ m_A95 += m_A74 * f18_22;
+ m_A96 += m_A75 * f18_22;
+ m_A97 += m_A76 * f18_22;
+ m_A98 += m_A77 * f18_22;
+ RHS22 += f18_22 * RHS18;
+ const double f18_23 = -f18 * m_A104;
+ m_A105 += m_A74 * f18_23;
+ m_A106 += m_A75 * f18_23;
+ m_A107 += m_A76 * f18_23;
+ m_A108 += m_A77 * f18_23;
+ RHS23 += f18_23 * RHS18;
+ const double f18_24 = -f18 * m_A110;
+ m_A113 += m_A74 * f18_24;
+ m_A114 += m_A75 * f18_24;
+ m_A115 += m_A76 * f18_24;
+ m_A116 += m_A77 * f18_24;
+ RHS24 += f18_24 * RHS18;
+ const double f18_25 = -f18 * m_A123;
+ m_A124 += m_A74 * f18_25;
+ m_A125 += m_A75 * f18_25;
+ m_A126 += m_A76 * f18_25;
+ m_A127 += m_A77 * f18_25;
+ RHS25 += f18_25 * RHS18;
+ const double f19 = 1.0 / m_A79;
+ const double f19_22 = -f19 * m_A94;
+ m_A95 += m_A80 * f19_22;
+ RHS22 += f19_22 * RHS19;
+ const double f20 = 1.0 / m_A83;
+ const double f20_21 = -f20 * m_A86;
+ m_A88 += m_A84 * f20_21;
+ RHS21 += f20_21 * RHS20;
+ const double f20_24 = -f20 * m_A111;
+ m_A115 += m_A84 * f20_24;
+ RHS24 += f20_24 * RHS20;
+ const double f21 = 1.0 / m_A87;
+ const double f21_24 = -f21 * m_A112;
+ m_A115 += m_A88 * f21_24;
+ RHS24 += f21_24 * RHS21;
+ const double f22 = 1.0 / m_A95;
+ const double f22_23 = -f22 * m_A105;
+ m_A106 += m_A96 * f22_23;
+ m_A107 += m_A97 * f22_23;
+ m_A108 += m_A98 * f22_23;
+ RHS23 += f22_23 * RHS22;
+ const double f22_24 = -f22 * m_A113;
+ m_A114 += m_A96 * f22_24;
+ m_A115 += m_A97 * f22_24;
+ m_A116 += m_A98 * f22_24;
+ RHS24 += f22_24 * RHS22;
+ const double f22_25 = -f22 * m_A124;
+ m_A125 += m_A96 * f22_25;
+ m_A126 += m_A97 * f22_25;
+ m_A127 += m_A98 * f22_25;
+ RHS25 += f22_25 * RHS22;
+ const double f23 = 1.0 / m_A106;
+ const double f23_24 = -f23 * m_A114;
+ m_A115 += m_A107 * f23_24;
+ m_A116 += m_A108 * f23_24;
+ RHS24 += f23_24 * RHS23;
+ const double f23_25 = -f23 * m_A125;
+ m_A126 += m_A107 * f23_25;
+ m_A127 += m_A108 * f23_25;
+ RHS25 += f23_25 * RHS23;
+ const double f24 = 1.0 / m_A115;
+ const double f24_25 = -f24 * m_A126;
+ m_A127 += m_A116 * f24_25;
+ RHS25 += f24_25 * RHS24;
+ V[25] = RHS25 / m_A127;
+ double tmp24 = 0.0;
+ tmp24 += m_A116 * V[25];
+ V[24] = (RHS24 - tmp24) / m_A115;
+ double tmp23 = 0.0;
+ tmp23 += m_A107 * V[24];
+ tmp23 += m_A108 * V[25];
+ V[23] = (RHS23 - tmp23) / m_A106;
+ double tmp22 = 0.0;
+ tmp22 += m_A96 * V[23];
+ tmp22 += m_A97 * V[24];
+ tmp22 += m_A98 * V[25];
+ V[22] = (RHS22 - tmp22) / m_A95;
+ double tmp21 = 0.0;
+ tmp21 += m_A88 * V[24];
+ V[21] = (RHS21 - tmp21) / m_A87;
+ double tmp20 = 0.0;
+ tmp20 += m_A84 * V[24];
+ V[20] = (RHS20 - tmp20) / m_A83;
+ double tmp19 = 0.0;
+ tmp19 += m_A80 * V[22];
+ V[19] = (RHS19 - tmp19) / m_A79;
+ double tmp18 = 0.0;
+ tmp18 += m_A74 * V[22];
+ tmp18 += m_A75 * V[23];
+ tmp18 += m_A76 * V[24];
+ tmp18 += m_A77 * V[25];
+ V[18] = (RHS18 - tmp18) / m_A73;
+ double tmp17 = 0.0;
+ tmp17 += m_A67 * V[25];
+ V[17] = (RHS17 - tmp17) / m_A66;
+ double tmp16 = 0.0;
+ tmp16 += m_A60 * V[18];
+ tmp16 += m_A61 * V[22];
+ tmp16 += m_A62 * V[23];
+ tmp16 += m_A63 * V[25];
+ V[16] = (RHS16 - tmp16) / m_A59;
+ double tmp15 = 0.0;
+ tmp15 += m_A54 * V[23];
+ V[15] = (RHS15 - tmp15) / m_A53;
+ double tmp14 = 0.0;
+ tmp14 += m_A51 * V[22];
+ V[14] = (RHS14 - tmp14) / m_A50;
+ double tmp13 = 0.0;
+ tmp13 += m_A45 * V[16];
+ tmp13 += m_A46 * V[18];
+ tmp13 += m_A47 * V[23];
+ tmp13 += m_A48 * V[25];
+ V[13] = (RHS13 - tmp13) / m_A44;
+ double tmp12 = 0.0;
+ tmp12 += m_A39 * V[13];
+ tmp12 += m_A40 * V[18];
+ V[12] = (RHS12 - tmp12) / m_A38;
+ double tmp11 = 0.0;
+ tmp11 += m_A34 * V[20];
+ tmp11 += m_A35 * V[24];
+ V[11] = (RHS11 - tmp11) / m_A33;
+ double tmp10 = 0.0;
+ tmp10 += m_A32 * V[20];
+ V[10] = (RHS10 - tmp10) / m_A31;
+ double tmp9 = 0.0;
+ tmp9 += m_A29 * V[19];
+ tmp9 += m_A30 * V[22];
+ V[9] = (RHS9 - tmp9) / m_A28;
+ double tmp8 = 0.0;
+ tmp8 += m_A27 * V[17];
+ V[8] = (RHS8 - tmp8) / m_A26;
+ double tmp7 = 0.0;
+ tmp7 += m_A24 * V[17];
+ tmp7 += m_A25 * V[25];
+ V[7] = (RHS7 - tmp7) / m_A23;
+ double tmp6 = 0.0;
+ tmp6 += m_A19 * V[16];
+ tmp6 += m_A20 * V[18];
+ tmp6 += m_A21 * V[23];
+ tmp6 += m_A22 * V[25];
+ V[6] = (RHS6 - tmp6) / m_A18;
+ double tmp5 = 0.0;
+ tmp5 += m_A14 * V[13];
+ tmp5 += m_A15 * V[16];
+ tmp5 += m_A16 * V[23];
+ tmp5 += m_A17 * V[25];
+ V[5] = (RHS5 - tmp5) / m_A13;
+ double tmp4 = 0.0;
+ tmp4 += m_A12 * V[15];
+ V[4] = (RHS4 - tmp4) / m_A11;
+ double tmp3 = 0.0;
+ tmp3 += m_A9 * V[16];
+ tmp3 += m_A10 * V[22];
+ V[3] = (RHS3 - tmp3) / m_A8;
+ double tmp2 = 0.0;
+ tmp2 += m_A5 * V[12];
+ tmp2 += m_A6 * V[13];
+ tmp2 += m_A7 * V[18];
+ V[2] = (RHS2 - tmp2) / m_A4;
+ double tmp1 = 0.0;
+ tmp1 += m_A3 * V[14];
+ V[1] = (RHS1 - tmp1) / m_A2;
+ double tmp0 = 0.0;
+ tmp0 += m_A1 * V[12];
+ V[0] = (RHS0 - tmp0) / m_A0;
+}
+
+// rebound
static void nl_gcr_7c86a9bc1c6aef4c_7_double_double(double * __restrict V, const double * __restrict go, const double * __restrict gt, const double * __restrict Idr, const double * const * __restrict cnV)
{
@@ -20604,6 +22437,264 @@ static void nl_gcr_8c0f7f2284333de5_16_double_double(double * __restrict V, cons
V[0] = (RHS0 - tmp0) / m_A0;
}
+// fireone
+static void nl_gcr_8c512fd6a6dabc50_35_double_double(double * __restrict V, const double * __restrict go, const double * __restrict gt, const double * __restrict Idr, const double * const * __restrict cnV)
+
+{
+
+ plib::unused_var(cnV);
+ double m_A0(0.0);
+ double m_A1(0.0);
+ double m_A2(0.0);
+ double m_A3(0.0);
+ double m_A4(0.0);
+ double m_A5(0.0);
+ double m_A6(0.0);
+ double m_A7(0.0);
+ double m_A8(0.0);
+ double m_A9(0.0);
+ double m_A10(0.0);
+ double m_A11(0.0);
+ double m_A12(0.0);
+ double m_A13(0.0);
+ double m_A14(0.0);
+ double m_A15(0.0);
+ double m_A16(0.0);
+ double m_A17(0.0);
+ double m_A18(0.0);
+ double m_A19(0.0);
+ double m_A20(0.0);
+ double m_A21(0.0);
+ double m_A22(0.0);
+ double m_A23(0.0);
+ double m_A24(0.0);
+ double m_A25(0.0);
+ double m_A26(0.0);
+ double m_A27(0.0);
+ double m_A28(0.0);
+ double m_A29(0.0);
+ double m_A30(0.0);
+ double m_A31(0.0);
+ double m_A32(0.0);
+ double m_A33(0.0);
+ double m_A34(0.0);
+ m_A0 += gt[0];
+ m_A0 += gt[1];
+ m_A1 += go[0];
+ double RHS0 = Idr[0];
+ RHS0 += Idr[1];
+ RHS0 -= go[1] * *cnV[1];
+ m_A2 += gt[2];
+ m_A2 += gt[3];
+ m_A3 += go[2];
+ double RHS1 = Idr[2];
+ RHS1 += Idr[3];
+ RHS1 -= go[3] * *cnV[3];
+ m_A4 += gt[4];
+ m_A4 += gt[5];
+ m_A4 += gt[6];
+ m_A5 += go[4];
+ double RHS2 = Idr[4];
+ RHS2 += Idr[5];
+ RHS2 += Idr[6];
+ RHS2 -= go[5] * *cnV[5];
+ RHS2 -= go[6] * *cnV[6];
+ m_A6 += gt[7];
+ m_A6 += gt[8];
+ m_A6 += gt[9];
+ m_A7 += go[7];
+ double RHS3 = Idr[7];
+ RHS3 += Idr[8];
+ RHS3 += Idr[9];
+ RHS3 -= go[8] * *cnV[8];
+ RHS3 -= go[9] * *cnV[9];
+ m_A8 += gt[10];
+ m_A8 += gt[11];
+ m_A8 += gt[12];
+ m_A8 += gt[13];
+ m_A9 += go[10];
+ double RHS4 = Idr[10];
+ RHS4 += Idr[11];
+ RHS4 += Idr[12];
+ RHS4 += Idr[13];
+ RHS4 -= go[11] * *cnV[11];
+ RHS4 -= go[12] * *cnV[12];
+ RHS4 -= go[13] * *cnV[13];
+ m_A10 += gt[14];
+ m_A10 += gt[15];
+ m_A10 += gt[16];
+ m_A10 += gt[17];
+ m_A10 += gt[18];
+ m_A10 += gt[19];
+ m_A12 += go[14];
+ m_A12 += go[15];
+ m_A11 += go[16];
+ m_A11 += go[17];
+ double RHS5 = Idr[14];
+ RHS5 += Idr[15];
+ RHS5 += Idr[16];
+ RHS5 += Idr[17];
+ RHS5 += Idr[18];
+ RHS5 += Idr[19];
+ RHS5 -= go[18] * *cnV[18];
+ RHS5 -= go[19] * *cnV[19];
+ m_A14 += gt[20];
+ m_A14 += gt[21];
+ m_A14 += gt[22];
+ m_A14 += gt[23];
+ m_A14 += gt[24];
+ m_A14 += gt[25];
+ m_A13 += go[20];
+ m_A16 += go[21];
+ m_A15 += go[22];
+ double RHS6 = Idr[20];
+ RHS6 += Idr[21];
+ RHS6 += Idr[22];
+ RHS6 += Idr[23];
+ RHS6 += Idr[24];
+ RHS6 += Idr[25];
+ RHS6 -= go[23] * *cnV[23];
+ RHS6 -= go[24] * *cnV[24];
+ RHS6 -= go[25] * *cnV[25];
+ m_A19 += gt[26];
+ m_A19 += gt[27];
+ m_A19 += gt[28];
+ m_A19 += gt[29];
+ m_A19 += gt[30];
+ m_A18 += go[26];
+ m_A17 += go[27];
+ m_A20 += go[28];
+ double RHS7 = Idr[26];
+ RHS7 += Idr[27];
+ RHS7 += Idr[28];
+ RHS7 += Idr[29];
+ RHS7 += Idr[30];
+ RHS7 -= go[29] * *cnV[29];
+ RHS7 -= go[30] * *cnV[30];
+ m_A23 += gt[31];
+ m_A23 += gt[32];
+ m_A23 += gt[33];
+ m_A23 += gt[34];
+ m_A23 += gt[35];
+ m_A23 += gt[36];
+ m_A24 += go[31];
+ m_A22 += go[32];
+ m_A22 += go[33];
+ m_A21 += go[34];
+ double RHS8 = Idr[31];
+ RHS8 += Idr[32];
+ RHS8 += Idr[33];
+ RHS8 += Idr[34];
+ RHS8 += Idr[35];
+ RHS8 += Idr[36];
+ RHS8 -= go[35] * *cnV[35];
+ RHS8 -= go[36] * *cnV[36];
+ m_A30 += gt[37];
+ m_A30 += gt[38];
+ m_A30 += gt[39];
+ m_A30 += gt[40];
+ m_A25 += go[37];
+ m_A26 += go[38];
+ m_A27 += go[39];
+ m_A28 += go[40];
+ double RHS9 = Idr[37];
+ RHS9 += Idr[38];
+ RHS9 += Idr[39];
+ RHS9 += Idr[40];
+ m_A34 += gt[41];
+ m_A34 += gt[42];
+ m_A34 += gt[43];
+ m_A34 += gt[44];
+ m_A32 += go[41];
+ m_A32 += go[42];
+ m_A33 += go[43];
+ double RHS10 = Idr[41];
+ RHS10 += Idr[42];
+ RHS10 += Idr[43];
+ RHS10 += Idr[44];
+ RHS10 -= go[44] * *cnV[44];
+ const double f0 = 1.0 / m_A0;
+ const double f0_6 = -f0 * m_A13;
+ m_A15 += m_A1 * f0_6;
+ RHS6 += f0_6 * RHS0;
+ const double f0_7 = -f0 * m_A17;
+ m_A19 += m_A1 * f0_7;
+ RHS7 += f0_7 * RHS0;
+ const double f1 = 1.0 / m_A2;
+ const double f1_7 = -f1 * m_A18;
+ m_A19 += m_A3 * f1_7;
+ RHS7 += f1_7 * RHS1;
+ const double f1_9 = -f1 * m_A25;
+ m_A28 += m_A3 * f1_9;
+ RHS9 += f1_9 * RHS1;
+ const double f3 = 1.0 / m_A6;
+ const double f3_9 = -f3 * m_A26;
+ m_A30 += m_A7 * f3_9;
+ RHS9 += f3_9 * RHS3;
+ const double f4 = 1.0 / m_A8;
+ const double f4_8 = -f4 * m_A21;
+ m_A23 += m_A9 * f4_8;
+ RHS8 += f4_8 * RHS4;
+ const double f5 = 1.0 / m_A10;
+ const double f5_8 = -f5 * m_A22;
+ m_A23 += m_A11 * f5_8;
+ m_A24 += m_A12 * f5_8;
+ RHS8 += f5_8 * RHS5;
+ const double f5_10 = -f5 * m_A32;
+ m_A33 += m_A11 * f5_10;
+ m_A34 += m_A12 * f5_10;
+ RHS10 += f5_10 * RHS5;
+ const double f6 = 1.0 / m_A14;
+ const double f6_9 = -f6 * m_A27;
+ m_A28 += m_A15 * f6_9;
+ m_A30 += m_A16 * f6_9;
+ RHS9 += f6_9 * RHS6;
+ const double f7 = 1.0 / m_A19;
+ const double f7_9 = -f7 * m_A28;
+ m_A29 += m_A20 * f7_9;
+ RHS9 += f7_9 * RHS7;
+ const double f8 = 1.0 / m_A23;
+ const double f8_9 = -f8 * m_A29;
+ m_A31 += m_A24 * f8_9;
+ RHS9 += f8_9 * RHS8;
+ const double f8_10 = -f8 * m_A33;
+ m_A34 += m_A24 * f8_10;
+ RHS10 += f8_10 * RHS8;
+ V[10] = RHS10 / m_A34;
+ double tmp9 = 0.0;
+ tmp9 += m_A31 * V[10];
+ V[9] = (RHS9 - tmp9) / m_A30;
+ double tmp8 = 0.0;
+ tmp8 += m_A24 * V[10];
+ V[8] = (RHS8 - tmp8) / m_A23;
+ double tmp7 = 0.0;
+ tmp7 += m_A20 * V[8];
+ V[7] = (RHS7 - tmp7) / m_A19;
+ double tmp6 = 0.0;
+ tmp6 += m_A15 * V[7];
+ tmp6 += m_A16 * V[9];
+ V[6] = (RHS6 - tmp6) / m_A14;
+ double tmp5 = 0.0;
+ tmp5 += m_A11 * V[8];
+ tmp5 += m_A12 * V[10];
+ V[5] = (RHS5 - tmp5) / m_A10;
+ double tmp4 = 0.0;
+ tmp4 += m_A9 * V[8];
+ V[4] = (RHS4 - tmp4) / m_A8;
+ double tmp3 = 0.0;
+ tmp3 += m_A7 * V[9];
+ V[3] = (RHS3 - tmp3) / m_A6;
+ double tmp2 = 0.0;
+ tmp2 += m_A5 * V[6];
+ V[2] = (RHS2 - tmp2) / m_A4;
+ double tmp1 = 0.0;
+ tmp1 += m_A3 * V[7];
+ V[1] = (RHS1 - tmp1) / m_A2;
+ double tmp0 = 0.0;
+ tmp0 += m_A1 * V[7];
+ V[0] = (RHS0 - tmp0) / m_A0;
+}
+
// starcrus
static void nl_gcr_8d7bddf33d942482_129_double_double(double * __restrict V, const double * __restrict go, const double * __restrict gt, const double * __restrict Idr, const double * const * __restrict cnV)
@@ -21803,6 +23894,502 @@ static void nl_gcr_9a5874c8e2da79d2_37_double_double(double * __restrict V, cons
V[0] = (RHS0 - tmp0) / m_A0;
}
+// fireone
+static void nl_gcr_9aa159329f86ca8b_70_double_double(double * __restrict V, const double * __restrict go, const double * __restrict gt, const double * __restrict Idr, const double * const * __restrict cnV)
+
+{
+
+ plib::unused_var(cnV);
+ double m_A0(0.0);
+ double m_A1(0.0);
+ double m_A2(0.0);
+ double m_A3(0.0);
+ double m_A4(0.0);
+ double m_A5(0.0);
+ double m_A6(0.0);
+ double m_A7(0.0);
+ double m_A8(0.0);
+ double m_A9(0.0);
+ double m_A10(0.0);
+ double m_A11(0.0);
+ double m_A12(0.0);
+ double m_A13(0.0);
+ double m_A14(0.0);
+ double m_A15(0.0);
+ double m_A16(0.0);
+ double m_A17(0.0);
+ double m_A18(0.0);
+ double m_A19(0.0);
+ double m_A20(0.0);
+ double m_A21(0.0);
+ double m_A22(0.0);
+ double m_A23(0.0);
+ double m_A24(0.0);
+ double m_A25(0.0);
+ double m_A26(0.0);
+ double m_A27(0.0);
+ double m_A28(0.0);
+ double m_A29(0.0);
+ double m_A30(0.0);
+ double m_A31(0.0);
+ double m_A32(0.0);
+ double m_A33(0.0);
+ double m_A34(0.0);
+ double m_A35(0.0);
+ double m_A36(0.0);
+ double m_A37(0.0);
+ double m_A38(0.0);
+ double m_A39(0.0);
+ double m_A40(0.0);
+ double m_A41(0.0);
+ double m_A42(0.0);
+ double m_A43(0.0);
+ double m_A44(0.0);
+ double m_A45(0.0);
+ double m_A46(0.0);
+ double m_A47(0.0);
+ double m_A48(0.0);
+ double m_A49(0.0);
+ double m_A50(0.0);
+ double m_A51(0.0);
+ double m_A52(0.0);
+ double m_A53(0.0);
+ double m_A54(0.0);
+ double m_A55(0.0);
+ double m_A56(0.0);
+ double m_A57(0.0);
+ double m_A58(0.0);
+ double m_A59(0.0);
+ double m_A60(0.0);
+ double m_A61(0.0);
+ double m_A62(0.0);
+ double m_A63(0.0);
+ double m_A64(0.0);
+ double m_A65(0.0);
+ double m_A66(0.0);
+ double m_A67(0.0);
+ double m_A68(0.0);
+ double m_A69(0.0);
+ m_A0 += gt[0];
+ m_A0 += gt[1];
+ m_A1 += go[0];
+ double RHS0 = Idr[0];
+ RHS0 += Idr[1];
+ RHS0 -= go[1] * *cnV[1];
+ m_A2 += gt[2];
+ m_A2 += gt[3];
+ m_A3 += go[2];
+ double RHS1 = Idr[2];
+ RHS1 += Idr[3];
+ RHS1 -= go[3] * *cnV[3];
+ m_A4 += gt[4];
+ m_A4 += gt[5];
+ m_A4 += gt[6];
+ m_A5 += go[4];
+ double RHS2 = Idr[4];
+ RHS2 += Idr[5];
+ RHS2 += Idr[6];
+ RHS2 -= go[5] * *cnV[5];
+ RHS2 -= go[6] * *cnV[6];
+ m_A6 += gt[7];
+ m_A6 += gt[8];
+ m_A6 += gt[9];
+ m_A7 += go[7];
+ double RHS3 = Idr[7];
+ RHS3 += Idr[8];
+ RHS3 += Idr[9];
+ RHS3 -= go[8] * *cnV[8];
+ RHS3 -= go[9] * *cnV[9];
+ m_A8 += gt[10];
+ m_A8 += gt[11];
+ m_A8 += gt[12];
+ m_A8 += gt[13];
+ m_A8 += gt[14];
+ m_A8 += gt[15];
+ m_A8 += gt[16];
+ m_A9 += go[10];
+ double RHS4 = Idr[10];
+ RHS4 += Idr[11];
+ RHS4 += Idr[12];
+ RHS4 += Idr[13];
+ RHS4 += Idr[14];
+ RHS4 += Idr[15];
+ RHS4 += Idr[16];
+ RHS4 -= go[11] * *cnV[11];
+ RHS4 -= go[12] * *cnV[12];
+ RHS4 -= go[13] * *cnV[13];
+ RHS4 -= go[14] * *cnV[14];
+ RHS4 -= go[15] * *cnV[15];
+ RHS4 -= go[16] * *cnV[16];
+ m_A10 += gt[17];
+ m_A10 += gt[18];
+ m_A10 += gt[19];
+ m_A11 += go[17];
+ double RHS5 = Idr[17];
+ RHS5 += Idr[18];
+ RHS5 += Idr[19];
+ RHS5 -= go[18] * *cnV[18];
+ RHS5 -= go[19] * *cnV[19];
+ m_A12 += gt[20];
+ m_A12 += gt[21];
+ m_A12 += gt[22];
+ m_A13 += go[20];
+ double RHS6 = Idr[20];
+ RHS6 += Idr[21];
+ RHS6 += Idr[22];
+ RHS6 -= go[21] * *cnV[21];
+ RHS6 -= go[22] * *cnV[22];
+ m_A14 += gt[23];
+ m_A14 += gt[24];
+ m_A14 += gt[25];
+ m_A15 += go[23];
+ double RHS7 = Idr[23];
+ RHS7 += Idr[24];
+ RHS7 += Idr[25];
+ RHS7 -= go[24] * *cnV[24];
+ RHS7 -= go[25] * *cnV[25];
+ m_A16 += gt[26];
+ m_A16 += gt[27];
+ m_A17 += go[26];
+ double RHS8 = Idr[26];
+ RHS8 += Idr[27];
+ RHS8 -= go[27] * *cnV[27];
+ m_A18 += gt[28];
+ m_A18 += gt[29];
+ m_A18 += gt[30];
+ m_A18 += gt[31];
+ m_A18 += gt[32];
+ m_A18 += gt[33];
+ m_A18 += gt[34];
+ m_A20 += go[28];
+ m_A19 += go[29];
+ double RHS9 = Idr[28];
+ RHS9 += Idr[29];
+ RHS9 += Idr[30];
+ RHS9 += Idr[31];
+ RHS9 += Idr[32];
+ RHS9 += Idr[33];
+ RHS9 += Idr[34];
+ RHS9 -= go[30] * *cnV[30];
+ RHS9 -= go[31] * *cnV[31];
+ RHS9 -= go[32] * *cnV[32];
+ RHS9 -= go[33] * *cnV[33];
+ RHS9 -= go[34] * *cnV[34];
+ m_A21 += gt[35];
+ m_A21 += gt[36];
+ m_A21 += gt[37];
+ m_A21 += gt[38];
+ m_A21 += gt[39];
+ m_A21 += gt[40];
+ m_A23 += go[35];
+ m_A22 += go[36];
+ m_A22 += go[37];
+ double RHS10 = Idr[35];
+ RHS10 += Idr[36];
+ RHS10 += Idr[37];
+ RHS10 += Idr[38];
+ RHS10 += Idr[39];
+ RHS10 += Idr[40];
+ RHS10 -= go[38] * *cnV[38];
+ RHS10 -= go[39] * *cnV[39];
+ RHS10 -= go[40] * *cnV[40];
+ m_A25 += gt[41];
+ m_A25 += gt[42];
+ m_A25 += gt[43];
+ m_A24 += go[41];
+ m_A26 += go[42];
+ double RHS11 = Idr[41];
+ RHS11 += Idr[42];
+ RHS11 += Idr[43];
+ RHS11 -= go[43] * *cnV[43];
+ m_A34 += gt[44];
+ m_A34 += gt[45];
+ m_A34 += gt[46];
+ m_A34 += gt[47];
+ m_A34 += gt[48];
+ m_A34 += gt[49];
+ m_A34 += gt[50];
+ m_A34 += gt[51];
+ m_A34 += gt[52];
+ m_A34 += gt[53];
+ m_A33 += go[44];
+ m_A33 += go[45];
+ m_A36 += go[46];
+ m_A32 += go[47];
+ m_A31 += go[48];
+ m_A30 += go[49];
+ m_A29 += go[50];
+ m_A28 += go[51];
+ m_A27 += go[52];
+ double RHS12 = Idr[44];
+ RHS12 += Idr[45];
+ RHS12 += Idr[46];
+ RHS12 += Idr[47];
+ RHS12 += Idr[48];
+ RHS12 += Idr[49];
+ RHS12 += Idr[50];
+ RHS12 += Idr[51];
+ RHS12 += Idr[52];
+ RHS12 += Idr[53];
+ RHS12 -= go[53] * *cnV[53];
+ m_A37 += gt[54];
+ m_A37 += gt[55];
+ m_A37 += gt[56];
+ m_A39 += go[54];
+ m_A38 += go[55];
+ double RHS13 = Idr[54];
+ RHS13 += Idr[55];
+ RHS13 += Idr[56];
+ RHS13 -= go[56] * *cnV[56];
+ m_A40 += gt[57];
+ m_A40 += gt[58];
+ m_A40 += gt[59];
+ m_A40 += gt[60];
+ m_A41 += go[57];
+ m_A42 += go[58];
+ double RHS14 = Idr[57];
+ RHS14 += Idr[58];
+ RHS14 += Idr[59];
+ RHS14 += Idr[60];
+ RHS14 -= go[59] * *cnV[59];
+ RHS14 -= go[60] * *cnV[60];
+ m_A47 += gt[61];
+ m_A47 += gt[62];
+ m_A47 += gt[63];
+ m_A47 += gt[64];
+ m_A47 += gt[65];
+ m_A43 += go[61];
+ m_A44 += go[62];
+ m_A48 += go[63];
+ double RHS15 = Idr[61];
+ RHS15 += Idr[62];
+ RHS15 += Idr[63];
+ RHS15 += Idr[64];
+ RHS15 += Idr[65];
+ RHS15 -= go[64] * *cnV[64];
+ RHS15 -= go[65] * *cnV[65];
+ m_A54 += gt[66];
+ m_A54 += gt[67];
+ m_A54 += gt[68];
+ m_A53 += go[66];
+ m_A51 += go[67];
+ m_A52 += go[68];
+ double RHS16 = Idr[66];
+ RHS16 += Idr[67];
+ RHS16 += Idr[68];
+ m_A62 += gt[69];
+ m_A62 += gt[70];
+ m_A62 += gt[71];
+ m_A62 += gt[72];
+ m_A62 += gt[73];
+ m_A63 += go[69];
+ m_A59 += go[70];
+ m_A57 += go[71];
+ m_A58 += go[72];
+ double RHS17 = Idr[69];
+ RHS17 += Idr[70];
+ RHS17 += Idr[71];
+ RHS17 += Idr[72];
+ RHS17 += Idr[73];
+ RHS17 -= go[73] * *cnV[73];
+ m_A69 += gt[74];
+ m_A69 += gt[75];
+ m_A69 += gt[76];
+ m_A69 += gt[77];
+ m_A69 += gt[78];
+ m_A69 += gt[79];
+ m_A69 += gt[80];
+ m_A69 += gt[81];
+ m_A64 += go[74];
+ m_A66 += go[75];
+ m_A65 += go[76];
+ m_A68 += go[77];
+ double RHS18 = Idr[74];
+ RHS18 += Idr[75];
+ RHS18 += Idr[76];
+ RHS18 += Idr[77];
+ RHS18 += Idr[78];
+ RHS18 += Idr[79];
+ RHS18 += Idr[80];
+ RHS18 += Idr[81];
+ RHS18 -= go[78] * *cnV[78];
+ RHS18 -= go[79] * *cnV[79];
+ RHS18 -= go[80] * *cnV[80];
+ RHS18 -= go[81] * *cnV[81];
+ const double f0 = 1.0 / m_A0;
+ const double f0_12 = -f0 * m_A27;
+ m_A34 += m_A1 * f0_12;
+ RHS12 += f0_12 * RHS0;
+ const double f1 = 1.0 / m_A2;
+ const double f1_11 = -f1 * m_A24;
+ m_A25 += m_A3 * f1_11;
+ RHS11 += f1_11 * RHS1;
+ const double f2 = 1.0 / m_A4;
+ const double f2_12 = -f2 * m_A28;
+ m_A34 += m_A5 * f2_12;
+ RHS12 += f2_12 * RHS2;
+ const double f3 = 1.0 / m_A6;
+ const double f3_12 = -f3 * m_A29;
+ m_A34 += m_A7 * f3_12;
+ RHS12 += f3_12 * RHS3;
+ const double f4 = 1.0 / m_A8;
+ const double f4_18 = -f4 * m_A64;
+ m_A65 += m_A9 * f4_18;
+ RHS18 += f4_18 * RHS4;
+ const double f5 = 1.0 / m_A10;
+ const double f5_12 = -f5 * m_A30;
+ m_A34 += m_A11 * f5_12;
+ RHS12 += f5_12 * RHS5;
+ const double f6 = 1.0 / m_A12;
+ const double f6_12 = -f6 * m_A31;
+ m_A34 += m_A13 * f6_12;
+ RHS12 += f6_12 * RHS6;
+ const double f7 = 1.0 / m_A14;
+ const double f7_12 = -f7 * m_A32;
+ m_A34 += m_A15 * f7_12;
+ RHS12 += f7_12 * RHS7;
+ const double f8 = 1.0 / m_A16;
+ const double f8_16 = -f8 * m_A51;
+ m_A54 += m_A17 * f8_16;
+ RHS16 += f8_16 * RHS8;
+ const double f9 = 1.0 / m_A18;
+ const double f9_15 = -f9 * m_A43;
+ m_A46 += m_A19 * f9_15;
+ m_A48 += m_A20 * f9_15;
+ RHS15 += f9_15 * RHS9;
+ const double f10 = 1.0 / m_A21;
+ const double f10_12 = -f10 * m_A33;
+ m_A34 += m_A22 * f10_12;
+ m_A35 += m_A23 * f10_12;
+ RHS12 += f10_12 * RHS10;
+ const double f10_15 = -f10 * m_A44;
+ m_A45 += m_A22 * f10_15;
+ m_A47 += m_A23 * f10_15;
+ RHS15 += f10_15 * RHS10;
+ const double f11 = 1.0 / m_A25;
+ const double f11_17 = -f11 * m_A57;
+ m_A62 += m_A26 * f11_17;
+ RHS17 += f11_17 * RHS11;
+ const double f12 = 1.0 / m_A34;
+ const double f12_15 = -f12 * m_A45;
+ m_A47 += m_A35 * f12_15;
+ m_A49 += m_A36 * f12_15;
+ RHS15 += f12_15 * RHS12;
+ const double f12_17 = -f12 * m_A58;
+ m_A60 += m_A35 * f12_17;
+ m_A62 += m_A36 * f12_17;
+ RHS17 += f12_17 * RHS12;
+ const double f13 = 1.0 / m_A37;
+ const double f13_17 = -f13 * m_A59;
+ m_A62 += m_A38 * f13_17;
+ m_A63 += m_A39 * f13_17;
+ RHS17 += f13_17 * RHS13;
+ const double f13_18 = -f13 * m_A65;
+ m_A68 += m_A38 * f13_18;
+ m_A69 += m_A39 * f13_18;
+ RHS18 += f13_18 * RHS13;
+ const double f14 = 1.0 / m_A40;
+ const double f14_15 = -f14 * m_A46;
+ m_A48 += m_A41 * f14_15;
+ m_A50 += m_A42 * f14_15;
+ RHS15 += f14_15 * RHS14;
+ const double f14_16 = -f14 * m_A52;
+ m_A54 += m_A41 * f14_16;
+ m_A56 += m_A42 * f14_16;
+ RHS16 += f14_16 * RHS14;
+ const double f14_18 = -f14 * m_A66;
+ m_A67 += m_A41 * f14_18;
+ m_A69 += m_A42 * f14_18;
+ RHS18 += f14_18 * RHS14;
+ const double f15 = 1.0 / m_A47;
+ const double f15_16 = -f15 * m_A53;
+ m_A54 += m_A48 * f15_16;
+ m_A55 += m_A49 * f15_16;
+ m_A56 += m_A50 * f15_16;
+ RHS16 += f15_16 * RHS15;
+ const double f15_17 = -f15 * m_A60;
+ m_A61 += m_A48 * f15_17;
+ m_A62 += m_A49 * f15_17;
+ m_A63 += m_A50 * f15_17;
+ RHS17 += f15_17 * RHS15;
+ const double f16 = 1.0 / m_A54;
+ const double f16_17 = -f16 * m_A61;
+ m_A62 += m_A55 * f16_17;
+ m_A63 += m_A56 * f16_17;
+ RHS17 += f16_17 * RHS16;
+ const double f16_18 = -f16 * m_A67;
+ m_A68 += m_A55 * f16_18;
+ m_A69 += m_A56 * f16_18;
+ RHS18 += f16_18 * RHS16;
+ const double f17 = 1.0 / m_A62;
+ const double f17_18 = -f17 * m_A68;
+ m_A69 += m_A63 * f17_18;
+ RHS18 += f17_18 * RHS17;
+ V[18] = RHS18 / m_A69;
+ double tmp17 = 0.0;
+ tmp17 += m_A63 * V[18];
+ V[17] = (RHS17 - tmp17) / m_A62;
+ double tmp16 = 0.0;
+ tmp16 += m_A55 * V[17];
+ tmp16 += m_A56 * V[18];
+ V[16] = (RHS16 - tmp16) / m_A54;
+ double tmp15 = 0.0;
+ tmp15 += m_A48 * V[16];
+ tmp15 += m_A49 * V[17];
+ tmp15 += m_A50 * V[18];
+ V[15] = (RHS15 - tmp15) / m_A47;
+ double tmp14 = 0.0;
+ tmp14 += m_A41 * V[16];
+ tmp14 += m_A42 * V[18];
+ V[14] = (RHS14 - tmp14) / m_A40;
+ double tmp13 = 0.0;
+ tmp13 += m_A38 * V[17];
+ tmp13 += m_A39 * V[18];
+ V[13] = (RHS13 - tmp13) / m_A37;
+ double tmp12 = 0.0;
+ tmp12 += m_A35 * V[15];
+ tmp12 += m_A36 * V[17];
+ V[12] = (RHS12 - tmp12) / m_A34;
+ double tmp11 = 0.0;
+ tmp11 += m_A26 * V[17];
+ V[11] = (RHS11 - tmp11) / m_A25;
+ double tmp10 = 0.0;
+ tmp10 += m_A22 * V[12];
+ tmp10 += m_A23 * V[15];
+ V[10] = (RHS10 - tmp10) / m_A21;
+ double tmp9 = 0.0;
+ tmp9 += m_A19 * V[14];
+ tmp9 += m_A20 * V[16];
+ V[9] = (RHS9 - tmp9) / m_A18;
+ double tmp8 = 0.0;
+ tmp8 += m_A17 * V[16];
+ V[8] = (RHS8 - tmp8) / m_A16;
+ double tmp7 = 0.0;
+ tmp7 += m_A15 * V[12];
+ V[7] = (RHS7 - tmp7) / m_A14;
+ double tmp6 = 0.0;
+ tmp6 += m_A13 * V[12];
+ V[6] = (RHS6 - tmp6) / m_A12;
+ double tmp5 = 0.0;
+ tmp5 += m_A11 * V[12];
+ V[5] = (RHS5 - tmp5) / m_A10;
+ double tmp4 = 0.0;
+ tmp4 += m_A9 * V[13];
+ V[4] = (RHS4 - tmp4) / m_A8;
+ double tmp3 = 0.0;
+ tmp3 += m_A7 * V[12];
+ V[3] = (RHS3 - tmp3) / m_A6;
+ double tmp2 = 0.0;
+ tmp2 += m_A5 * V[12];
+ V[2] = (RHS2 - tmp2) / m_A4;
+ double tmp1 = 0.0;
+ tmp1 += m_A3 * V[11];
+ V[1] = (RHS1 - tmp1) / m_A2;
+ double tmp0 = 0.0;
+ tmp0 += m_A1 * V[12];
+ V[0] = (RHS0 - tmp0) / m_A0;
+}
+
// warrior
static void nl_gcr_9c975530a1a529d6_7_double_double(double * __restrict V, const double * __restrict go, const double * __restrict gt, const double * __restrict Idr, const double * const * __restrict cnV)
@@ -25761,6 +28348,244 @@ static void nl_gcr_a6f74be7f61e6db2_29_double_double(double * __restrict V, cons
V[0] = (RHS0 - tmp0) / m_A0;
}
+// carpolo
+static void nl_gcr_a8f1d076330f06b7_34_double_double(double * __restrict V, const double * __restrict go, const double * __restrict gt, const double * __restrict Idr, const double * const * __restrict cnV)
+
+{
+
+ plib::unused_var(cnV);
+ double m_A0(0.0);
+ double m_A1(0.0);
+ double m_A2(0.0);
+ double m_A3(0.0);
+ double m_A4(0.0);
+ double m_A5(0.0);
+ double m_A6(0.0);
+ double m_A7(0.0);
+ double m_A8(0.0);
+ double m_A9(0.0);
+ double m_A10(0.0);
+ double m_A11(0.0);
+ double m_A12(0.0);
+ double m_A13(0.0);
+ double m_A14(0.0);
+ double m_A15(0.0);
+ double m_A16(0.0);
+ double m_A17(0.0);
+ double m_A18(0.0);
+ double m_A19(0.0);
+ double m_A20(0.0);
+ double m_A21(0.0);
+ double m_A22(0.0);
+ double m_A23(0.0);
+ double m_A24(0.0);
+ double m_A25(0.0);
+ double m_A26(0.0);
+ double m_A27(0.0);
+ double m_A28(0.0);
+ double m_A29(0.0);
+ double m_A30(0.0);
+ double m_A31(0.0);
+ double m_A32(0.0);
+ double m_A33(0.0);
+ m_A0 += gt[0];
+ m_A0 += gt[1];
+ m_A0 += gt[2];
+ m_A0 += gt[3];
+ m_A1 += go[0];
+ double RHS0 = Idr[0];
+ RHS0 += Idr[1];
+ RHS0 += Idr[2];
+ RHS0 += Idr[3];
+ RHS0 -= go[1] * *cnV[1];
+ RHS0 -= go[2] * *cnV[2];
+ RHS0 -= go[3] * *cnV[3];
+ m_A2 += gt[4];
+ m_A2 += gt[5];
+ m_A3 += go[4];
+ double RHS1 = Idr[4];
+ RHS1 += Idr[5];
+ RHS1 -= go[5] * *cnV[5];
+ m_A4 += gt[6];
+ m_A4 += gt[7];
+ m_A5 += go[6];
+ m_A6 += go[7];
+ double RHS2 = Idr[6];
+ RHS2 += Idr[7];
+ m_A7 += gt[8];
+ m_A7 += gt[9];
+ m_A7 += gt[10];
+ m_A9 += go[8];
+ m_A8 += go[9];
+ double RHS3 = Idr[8];
+ RHS3 += Idr[9];
+ RHS3 += Idr[10];
+ RHS3 -= go[10] * *cnV[10];
+ m_A10 += gt[11];
+ m_A10 += gt[12];
+ m_A10 += gt[13];
+ m_A11 += go[11];
+ double RHS4 = Idr[11];
+ RHS4 += Idr[12];
+ RHS4 += Idr[13];
+ RHS4 -= go[12] * *cnV[12];
+ RHS4 -= go[13] * *cnV[13];
+ m_A12 += gt[14];
+ m_A12 += gt[15];
+ m_A12 += gt[16];
+ m_A13 += go[14];
+ double RHS5 = Idr[14];
+ RHS5 += Idr[15];
+ RHS5 += Idr[16];
+ RHS5 -= go[15] * *cnV[15];
+ RHS5 -= go[16] * *cnV[16];
+ m_A15 += gt[17];
+ m_A15 += gt[18];
+ m_A15 += gt[19];
+ m_A15 += gt[20];
+ m_A16 += go[17];
+ m_A14 += go[18];
+ double RHS6 = Idr[17];
+ RHS6 += Idr[18];
+ RHS6 += Idr[19];
+ RHS6 += Idr[20];
+ RHS6 -= go[19] * *cnV[19];
+ RHS6 -= go[20] * *cnV[20];
+ m_A19 += gt[21];
+ m_A19 += gt[22];
+ m_A19 += gt[23];
+ m_A19 += gt[24];
+ m_A19 += gt[25];
+ m_A19 += gt[26];
+ m_A19 += gt[27];
+ m_A21 += go[21];
+ m_A21 += go[22];
+ m_A18 += go[23];
+ m_A17 += go[24];
+ m_A20 += go[25];
+ double RHS7 = Idr[21];
+ RHS7 += Idr[22];
+ RHS7 += Idr[23];
+ RHS7 += Idr[24];
+ RHS7 += Idr[25];
+ RHS7 += Idr[26];
+ RHS7 += Idr[27];
+ RHS7 -= go[26] * *cnV[26];
+ RHS7 -= go[27] * *cnV[27];
+ m_A26 += gt[28];
+ m_A26 += gt[29];
+ m_A26 += gt[30];
+ m_A26 += gt[31];
+ m_A22 += go[28];
+ m_A25 += go[29];
+ m_A23 += go[30];
+ m_A24 += go[31];
+ double RHS8 = Idr[28];
+ RHS8 += Idr[29];
+ RHS8 += Idr[30];
+ RHS8 += Idr[31];
+ m_A33 += gt[32];
+ m_A33 += gt[33];
+ m_A33 += gt[34];
+ m_A33 += gt[35];
+ m_A33 += gt[36];
+ m_A33 += gt[37];
+ m_A30 += go[32];
+ m_A29 += go[33];
+ m_A28 += go[34];
+ m_A31 += go[35];
+ m_A31 += go[36];
+ double RHS9 = Idr[32];
+ RHS9 += Idr[33];
+ RHS9 += Idr[34];
+ RHS9 += Idr[35];
+ RHS9 += Idr[36];
+ RHS9 += Idr[37];
+ RHS9 -= go[37] * *cnV[37];
+ const double f0 = 1.0 / m_A0;
+ const double f0_6 = -f0 * m_A14;
+ m_A15 += m_A1 * f0_6;
+ RHS6 += f0_6 * RHS0;
+ const double f1 = 1.0 / m_A2;
+ const double f1_8 = -f1 * m_A22;
+ m_A26 += m_A3 * f1_8;
+ RHS8 += f1_8 * RHS1;
+ const double f2 = 1.0 / m_A4;
+ const double f2_7 = -f2 * m_A17;
+ m_A19 += m_A5 * f2_7;
+ m_A20 += m_A6 * f2_7;
+ RHS7 += f2_7 * RHS2;
+ const double f2_8 = -f2 * m_A23;
+ m_A25 += m_A5 * f2_8;
+ m_A26 += m_A6 * f2_8;
+ RHS8 += f2_8 * RHS2;
+ const double f3 = 1.0 / m_A7;
+ const double f3_7 = -f3 * m_A18;
+ m_A19 += m_A8 * f3_7;
+ m_A21 += m_A9 * f3_7;
+ RHS7 += f3_7 * RHS3;
+ const double f3_9 = -f3 * m_A28;
+ m_A31 += m_A8 * f3_9;
+ m_A33 += m_A9 * f3_9;
+ RHS9 += f3_9 * RHS3;
+ const double f4 = 1.0 / m_A10;
+ const double f4_9 = -f4 * m_A29;
+ m_A33 += m_A11 * f4_9;
+ RHS9 += f4_9 * RHS4;
+ const double f5 = 1.0 / m_A12;
+ const double f5_9 = -f5 * m_A30;
+ m_A33 += m_A13 * f5_9;
+ RHS9 += f5_9 * RHS5;
+ const double f6 = 1.0 / m_A15;
+ const double f6_8 = -f6 * m_A24;
+ m_A26 += m_A16 * f6_8;
+ RHS8 += f6_8 * RHS6;
+ const double f7 = 1.0 / m_A19;
+ const double f7_8 = -f7 * m_A25;
+ m_A26 += m_A20 * f7_8;
+ m_A27 += m_A21 * f7_8;
+ RHS8 += f7_8 * RHS7;
+ const double f7_9 = -f7 * m_A31;
+ m_A32 += m_A20 * f7_9;
+ m_A33 += m_A21 * f7_9;
+ RHS9 += f7_9 * RHS7;
+ const double f8 = 1.0 / m_A26;
+ const double f8_9 = -f8 * m_A32;
+ m_A33 += m_A27 * f8_9;
+ RHS9 += f8_9 * RHS8;
+ V[9] = RHS9 / m_A33;
+ double tmp8 = 0.0;
+ tmp8 += m_A27 * V[9];
+ V[8] = (RHS8 - tmp8) / m_A26;
+ double tmp7 = 0.0;
+ tmp7 += m_A20 * V[8];
+ tmp7 += m_A21 * V[9];
+ V[7] = (RHS7 - tmp7) / m_A19;
+ double tmp6 = 0.0;
+ tmp6 += m_A16 * V[8];
+ V[6] = (RHS6 - tmp6) / m_A15;
+ double tmp5 = 0.0;
+ tmp5 += m_A13 * V[9];
+ V[5] = (RHS5 - tmp5) / m_A12;
+ double tmp4 = 0.0;
+ tmp4 += m_A11 * V[9];
+ V[4] = (RHS4 - tmp4) / m_A10;
+ double tmp3 = 0.0;
+ tmp3 += m_A8 * V[7];
+ tmp3 += m_A9 * V[9];
+ V[3] = (RHS3 - tmp3) / m_A7;
+ double tmp2 = 0.0;
+ tmp2 += m_A5 * V[7];
+ tmp2 += m_A6 * V[8];
+ V[2] = (RHS2 - tmp2) / m_A4;
+ double tmp1 = 0.0;
+ tmp1 += m_A3 * V[8];
+ V[1] = (RHS1 - tmp1) / m_A2;
+ double tmp0 = 0.0;
+ tmp0 += m_A1 * V[6];
+ V[0] = (RHS0 - tmp0) / m_A0;
+}
+
// breakout
static void nl_gcr_a971eeb2ef76f75f_13_double_double(double * __restrict V, const double * __restrict go, const double * __restrict gt, const double * __restrict Idr, const double * const * __restrict cnV)
@@ -25951,6 +28776,90 @@ static void nl_gcr_aa07266ef5d420d1_11_double_double(double * __restrict V, cons
V[0] = (RHS0 - tmp0) / m_A0;
}
+// starfire
+static void nl_gcr_aceb6035dfb557c9_12_double_double(double * __restrict V, const double * __restrict go, const double * __restrict gt, const double * __restrict Idr, const double * const * __restrict cnV)
+
+{
+
+ plib::unused_var(cnV);
+ double m_A0(0.0);
+ double m_A1(0.0);
+ double m_A2(0.0);
+ double m_A3(0.0);
+ double m_A4(0.0);
+ double m_A5(0.0);
+ double m_A6(0.0);
+ double m_A7(0.0);
+ double m_A8(0.0);
+ double m_A9(0.0);
+ double m_A10(0.0);
+ double m_A11(0.0);
+ m_A0 += gt[0];
+ m_A0 += gt[1];
+ m_A1 += go[0];
+ double RHS0 = Idr[0];
+ RHS0 += Idr[1];
+ RHS0 -= go[1] * *cnV[1];
+ m_A2 += gt[2];
+ m_A2 += gt[3];
+ m_A2 += gt[4];
+ m_A4 += go[2];
+ m_A3 += go[3];
+ double RHS1 = Idr[2];
+ RHS1 += Idr[3];
+ RHS1 += Idr[4];
+ RHS1 -= go[4] * *cnV[4];
+ m_A7 += gt[5];
+ m_A7 += gt[6];
+ m_A7 += gt[7];
+ m_A7 += gt[8];
+ m_A7 += gt[9];
+ m_A6 += go[5];
+ m_A5 += go[6];
+ double RHS2 = Idr[5];
+ RHS2 += Idr[6];
+ RHS2 += Idr[7];
+ RHS2 += Idr[8];
+ RHS2 += Idr[9];
+ RHS2 -= go[7] * *cnV[7];
+ RHS2 -= go[8] * *cnV[8];
+ RHS2 -= go[9] * *cnV[9];
+ m_A11 += gt[10];
+ m_A11 += gt[11];
+ m_A9 += go[10];
+ double RHS3 = Idr[10];
+ RHS3 += Idr[11];
+ RHS3 -= go[11] * *cnV[11];
+ const double f0 = 1.0 / m_A0;
+ const double f0_2 = -f0 * m_A5;
+ m_A7 += m_A1 * f0_2;
+ RHS2 += f0_2 * RHS0;
+ const double f1 = 1.0 / m_A2;
+ const double f1_2 = -f1 * m_A6;
+ m_A7 += m_A3 * f1_2;
+ m_A8 += m_A4 * f1_2;
+ RHS2 += f1_2 * RHS1;
+ const double f1_3 = -f1 * m_A9;
+ m_A10 += m_A3 * f1_3;
+ m_A11 += m_A4 * f1_3;
+ RHS3 += f1_3 * RHS1;
+ const double f2 = 1.0 / m_A7;
+ const double f2_3 = -f2 * m_A10;
+ m_A11 += m_A8 * f2_3;
+ RHS3 += f2_3 * RHS2;
+ V[3] = RHS3 / m_A11;
+ double tmp2 = 0.0;
+ tmp2 += m_A8 * V[3];
+ V[2] = (RHS2 - tmp2) / m_A7;
+ double tmp1 = 0.0;
+ tmp1 += m_A3 * V[2];
+ tmp1 += m_A4 * V[3];
+ V[1] = (RHS1 - tmp1) / m_A2;
+ double tmp0 = 0.0;
+ tmp0 += m_A1 * V[2];
+ V[0] = (RHS0 - tmp0) / m_A0;
+}
+
// sundance
static void nl_gcr_ad6dba01ff2425c3_12_double_double(double * __restrict V, const double * __restrict go, const double * __restrict gt, const double * __restrict Idr, const double * const * __restrict cnV)
@@ -27610,6 +30519,190 @@ static void nl_gcr_b7344e05aac90017_65_double_double(double * __restrict V, cons
V[0] = (RHS0 - tmp0) / m_A0;
}
+// starfire
+static void nl_gcr_b75e0baeb501e907_23_double_double(double * __restrict V, const double * __restrict go, const double * __restrict gt, const double * __restrict Idr, const double * const * __restrict cnV)
+
+{
+
+ plib::unused_var(cnV);
+ double m_A0(0.0);
+ double m_A1(0.0);
+ double m_A2(0.0);
+ double m_A3(0.0);
+ double m_A4(0.0);
+ double m_A5(0.0);
+ double m_A6(0.0);
+ double m_A7(0.0);
+ double m_A8(0.0);
+ double m_A9(0.0);
+ double m_A10(0.0);
+ double m_A11(0.0);
+ double m_A12(0.0);
+ double m_A13(0.0);
+ double m_A14(0.0);
+ double m_A15(0.0);
+ double m_A16(0.0);
+ double m_A17(0.0);
+ double m_A18(0.0);
+ double m_A19(0.0);
+ double m_A20(0.0);
+ double m_A21(0.0);
+ double m_A22(0.0);
+ m_A0 += gt[0];
+ m_A0 += gt[1];
+ m_A0 += gt[2];
+ m_A1 += go[0];
+ double RHS0 = Idr[0];
+ RHS0 += Idr[1];
+ RHS0 += Idr[2];
+ RHS0 -= go[1] * *cnV[1];
+ RHS0 -= go[2] * *cnV[2];
+ m_A3 += gt[3];
+ m_A3 += gt[4];
+ m_A3 += gt[5];
+ m_A3 += gt[6];
+ m_A3 += gt[7];
+ m_A3 += gt[8];
+ m_A3 += gt[9];
+ m_A2 += go[3];
+ m_A4 += go[4];
+ double RHS1 = Idr[3];
+ RHS1 += Idr[4];
+ RHS1 += Idr[5];
+ RHS1 += Idr[6];
+ RHS1 += Idr[7];
+ RHS1 += Idr[8];
+ RHS1 += Idr[9];
+ RHS1 -= go[5] * *cnV[5];
+ RHS1 -= go[6] * *cnV[6];
+ RHS1 -= go[7] * *cnV[7];
+ RHS1 -= go[8] * *cnV[8];
+ RHS1 -= go[9] * *cnV[9];
+ m_A5 += gt[10];
+ m_A5 += gt[11];
+ m_A5 += gt[12];
+ m_A5 += gt[13];
+ m_A6 += go[10];
+ double RHS2 = Idr[10];
+ RHS2 += Idr[11];
+ RHS2 += Idr[12];
+ RHS2 += Idr[13];
+ RHS2 -= go[11] * *cnV[11];
+ RHS2 -= go[12] * *cnV[12];
+ RHS2 -= go[13] * *cnV[13];
+ m_A8 += gt[14];
+ m_A8 += gt[15];
+ m_A8 += gt[16];
+ m_A7 += go[14];
+ double RHS3 = Idr[14];
+ RHS3 += Idr[15];
+ RHS3 += Idr[16];
+ RHS3 -= go[15] * *cnV[15];
+ RHS3 -= go[16] * *cnV[16];
+ m_A10 += gt[17];
+ m_A10 += gt[18];
+ m_A10 += gt[19];
+ m_A10 += gt[20];
+ m_A10 += gt[21];
+ m_A10 += gt[22];
+ m_A10 += gt[23];
+ m_A12 += go[17];
+ m_A11 += go[18];
+ double RHS4 = Idr[17];
+ RHS4 += Idr[18];
+ RHS4 += Idr[19];
+ RHS4 += Idr[20];
+ RHS4 += Idr[21];
+ RHS4 += Idr[22];
+ RHS4 += Idr[23];
+ RHS4 -= go[19] * *cnV[19];
+ RHS4 -= go[20] * *cnV[20];
+ RHS4 -= go[21] * *cnV[21];
+ RHS4 -= go[22] * *cnV[22];
+ RHS4 -= go[23] * *cnV[23];
+ m_A14 += gt[24];
+ m_A14 += gt[25];
+ m_A14 += gt[26];
+ m_A13 += go[24];
+ double RHS5 = Idr[24];
+ RHS5 += Idr[25];
+ RHS5 += Idr[26];
+ RHS5 -= go[25] * *cnV[25];
+ RHS5 -= go[26] * *cnV[26];
+ m_A18 += gt[27];
+ m_A18 += gt[28];
+ m_A18 += gt[29];
+ m_A18 += gt[30];
+ m_A17 += go[27];
+ m_A19 += go[28];
+ double RHS6 = Idr[27];
+ RHS6 += Idr[28];
+ RHS6 += Idr[29];
+ RHS6 += Idr[30];
+ RHS6 -= go[29] * *cnV[29];
+ RHS6 -= go[30] * *cnV[30];
+ m_A22 += gt[31];
+ m_A22 += gt[32];
+ m_A22 += gt[33];
+ m_A22 += gt[34];
+ m_A20 += go[31];
+ m_A21 += go[32];
+ double RHS7 = Idr[31];
+ RHS7 += Idr[32];
+ RHS7 += Idr[33];
+ RHS7 += Idr[34];
+ RHS7 -= go[33] * *cnV[33];
+ RHS7 -= go[34] * *cnV[34];
+ const double f0 = 1.0 / m_A0;
+ const double f0_1 = -f0 * m_A2;
+ m_A4 += m_A1 * f0_1;
+ RHS1 += f0_1 * RHS0;
+ const double f0_6 = -f0 * m_A17;
+ m_A18 += m_A1 * f0_6;
+ RHS6 += f0_6 * RHS0;
+ const double f1 = 1.0 / m_A3;
+ const double f1_3 = -f1 * m_A7;
+ m_A9 += m_A4 * f1_3;
+ RHS3 += f1_3 * RHS1;
+ const double f2 = 1.0 / m_A5;
+ const double f2_7 = -f2 * m_A20;
+ m_A22 += m_A6 * f2_7;
+ RHS7 += f2_7 * RHS2;
+ const double f4 = 1.0 / m_A10;
+ const double f4_5 = -f4 * m_A13;
+ m_A15 += m_A11 * f4_5;
+ m_A16 += m_A12 * f4_5;
+ RHS5 += f4_5 * RHS4;
+ const double f6 = 1.0 / m_A18;
+ const double f6_7 = -f6 * m_A21;
+ m_A22 += m_A19 * f6_7;
+ RHS7 += f6_7 * RHS6;
+ V[7] = RHS7 / m_A22;
+ double tmp6 = 0.0;
+ tmp6 += m_A19 * V[7];
+ V[6] = (RHS6 - tmp6) / m_A18;
+ double tmp5 = 0.0;
+ tmp5 += m_A15 * V[6];
+ tmp5 += m_A16 * V[7];
+ V[5] = (RHS5 - tmp5) / m_A14;
+ double tmp4 = 0.0;
+ tmp4 += m_A11 * V[6];
+ tmp4 += m_A12 * V[7];
+ V[4] = (RHS4 - tmp4) / m_A10;
+ double tmp3 = 0.0;
+ tmp3 += m_A9 * V[6];
+ V[3] = (RHS3 - tmp3) / m_A8;
+ double tmp2 = 0.0;
+ tmp2 += m_A6 * V[7];
+ V[2] = (RHS2 - tmp2) / m_A5;
+ double tmp1 = 0.0;
+ tmp1 += m_A4 * V[6];
+ V[1] = (RHS1 - tmp1) / m_A3;
+ double tmp0 = 0.0;
+ tmp0 += m_A1 * V[6];
+ V[0] = (RHS0 - tmp0) / m_A0;
+}
+
// boxingb
static void nl_gcr_b8d6d148a50bdb8f_55_double_double(double * __restrict V, const double * __restrict go, const double * __restrict gt, const double * __restrict Idr, const double * const * __restrict cnV)
@@ -28397,6 +31490,88 @@ static void nl_gcr_bb501e6a23177009_57_double_double(double * __restrict V, cons
V[0] = (RHS0 - tmp0) / m_A0;
}
+// starfire
+static void nl_gcr_bd1514d7defd4062_9_double_double(double * __restrict V, const double * __restrict go, const double * __restrict gt, const double * __restrict Idr, const double * const * __restrict cnV)
+
+{
+
+ plib::unused_var(cnV);
+ double m_A0(0.0);
+ double m_A1(0.0);
+ double m_A2(0.0);
+ double m_A3(0.0);
+ double m_A4(0.0);
+ double m_A5(0.0);
+ double m_A6(0.0);
+ double m_A7(0.0);
+ double m_A8(0.0);
+ m_A0 += gt[0];
+ m_A0 += gt[1];
+ m_A1 += go[0];
+ double RHS0 = Idr[0];
+ RHS0 += Idr[1];
+ RHS0 -= go[1] * *cnV[1];
+ m_A2 += gt[2];
+ m_A2 += gt[3];
+ m_A2 += gt[4];
+ m_A2 += gt[5];
+ m_A2 += gt[6];
+ m_A2 += gt[7];
+ m_A2 += gt[8];
+ m_A3 += go[2];
+ double RHS1 = Idr[2];
+ RHS1 += Idr[3];
+ RHS1 += Idr[4];
+ RHS1 += Idr[5];
+ RHS1 += Idr[6];
+ RHS1 += Idr[7];
+ RHS1 += Idr[8];
+ RHS1 -= go[3] * *cnV[3];
+ RHS1 -= go[4] * *cnV[4];
+ RHS1 -= go[5] * *cnV[5];
+ RHS1 -= go[6] * *cnV[6];
+ RHS1 -= go[7] * *cnV[7];
+ RHS1 -= go[8] * *cnV[8];
+ m_A5 += gt[9];
+ m_A5 += gt[10];
+ m_A5 += gt[11];
+ m_A4 += go[9];
+ double RHS2 = Idr[9];
+ RHS2 += Idr[10];
+ RHS2 += Idr[11];
+ RHS2 -= go[10] * *cnV[10];
+ RHS2 -= go[11] * *cnV[11];
+ m_A8 += gt[12];
+ m_A8 += gt[13];
+ m_A8 += gt[14];
+ m_A6 += go[12];
+ double RHS3 = Idr[12];
+ RHS3 += Idr[13];
+ RHS3 += Idr[14];
+ RHS3 -= go[13] * *cnV[13];
+ RHS3 -= go[14] * *cnV[14];
+ const double f0 = 1.0 / m_A0;
+ const double f0_2 = -f0 * m_A4;
+ m_A5 += m_A1 * f0_2;
+ RHS2 += f0_2 * RHS0;
+ const double f1 = 1.0 / m_A2;
+ const double f1_3 = -f1 * m_A6;
+ m_A7 += m_A3 * f1_3;
+ RHS3 += f1_3 * RHS1;
+ const double f2 = 1.0 / m_A5;
+ const double f2_3 = -f2 * m_A7;
+ RHS3 += f2_3 * RHS2;
+ V[3] = RHS3 / m_A8;
+ double tmp2 = 0.0;
+ V[2] = (RHS2 - tmp2) / m_A5;
+ double tmp1 = 0.0;
+ tmp1 += m_A3 * V[2];
+ V[1] = (RHS1 - tmp1) / m_A2;
+ double tmp0 = 0.0;
+ tmp0 += m_A1 * V[2];
+ V[0] = (RHS0 - tmp0) / m_A0;
+}
+
// ripoff
static void nl_gcr_be7c805100c522fd_59_double_double(double * __restrict V, const double * __restrict go, const double * __restrict gt, const double * __restrict Idr, const double * const * __restrict cnV)
@@ -29322,6 +32497,525 @@ static void nl_gcr_bff07f8d339f7cc4_89_double_double(double * __restrict V, cons
V[0] = (RHS0 - tmp0) / m_A0;
}
+// fireone
+static void nl_gcr_c1d22fe6e895255d_79_double_double(double * __restrict V, const double * __restrict go, const double * __restrict gt, const double * __restrict Idr, const double * const * __restrict cnV)
+
+{
+
+ plib::unused_var(cnV);
+ double m_A0(0.0);
+ double m_A1(0.0);
+ double m_A2(0.0);
+ double m_A3(0.0);
+ double m_A4(0.0);
+ double m_A5(0.0);
+ double m_A6(0.0);
+ double m_A7(0.0);
+ double m_A8(0.0);
+ double m_A9(0.0);
+ double m_A10(0.0);
+ double m_A11(0.0);
+ double m_A12(0.0);
+ double m_A13(0.0);
+ double m_A14(0.0);
+ double m_A15(0.0);
+ double m_A16(0.0);
+ double m_A17(0.0);
+ double m_A18(0.0);
+ double m_A19(0.0);
+ double m_A20(0.0);
+ double m_A21(0.0);
+ double m_A22(0.0);
+ double m_A23(0.0);
+ double m_A24(0.0);
+ double m_A25(0.0);
+ double m_A26(0.0);
+ double m_A27(0.0);
+ double m_A28(0.0);
+ double m_A29(0.0);
+ double m_A30(0.0);
+ double m_A31(0.0);
+ double m_A32(0.0);
+ double m_A33(0.0);
+ double m_A34(0.0);
+ double m_A35(0.0);
+ double m_A36(0.0);
+ double m_A37(0.0);
+ double m_A38(0.0);
+ double m_A39(0.0);
+ double m_A40(0.0);
+ double m_A41(0.0);
+ double m_A42(0.0);
+ double m_A43(0.0);
+ double m_A44(0.0);
+ double m_A45(0.0);
+ double m_A46(0.0);
+ double m_A47(0.0);
+ double m_A48(0.0);
+ double m_A49(0.0);
+ double m_A50(0.0);
+ double m_A51(0.0);
+ double m_A52(0.0);
+ double m_A53(0.0);
+ double m_A54(0.0);
+ double m_A55(0.0);
+ double m_A56(0.0);
+ double m_A57(0.0);
+ double m_A58(0.0);
+ double m_A59(0.0);
+ double m_A60(0.0);
+ double m_A61(0.0);
+ double m_A62(0.0);
+ double m_A63(0.0);
+ double m_A64(0.0);
+ double m_A65(0.0);
+ double m_A66(0.0);
+ double m_A67(0.0);
+ double m_A68(0.0);
+ double m_A69(0.0);
+ double m_A70(0.0);
+ double m_A71(0.0);
+ double m_A72(0.0);
+ double m_A73(0.0);
+ double m_A74(0.0);
+ double m_A75(0.0);
+ double m_A76(0.0);
+ double m_A77(0.0);
+ double m_A78(0.0);
+ m_A0 += gt[0];
+ m_A0 += gt[1];
+ m_A0 += gt[2];
+ m_A0 += gt[3];
+ m_A0 += gt[4];
+ m_A0 += gt[5];
+ m_A0 += gt[6];
+ m_A1 += go[0];
+ double RHS0 = Idr[0];
+ RHS0 += Idr[1];
+ RHS0 += Idr[2];
+ RHS0 += Idr[3];
+ RHS0 += Idr[4];
+ RHS0 += Idr[5];
+ RHS0 += Idr[6];
+ RHS0 -= go[1] * *cnV[1];
+ RHS0 -= go[2] * *cnV[2];
+ RHS0 -= go[3] * *cnV[3];
+ RHS0 -= go[4] * *cnV[4];
+ RHS0 -= go[5] * *cnV[5];
+ RHS0 -= go[6] * *cnV[6];
+ m_A2 += gt[7];
+ m_A2 += gt[8];
+ m_A2 += gt[9];
+ m_A2 += gt[10];
+ m_A2 += gt[11];
+ m_A2 += gt[12];
+ m_A2 += gt[13];
+ m_A3 += go[7];
+ double RHS1 = Idr[7];
+ RHS1 += Idr[8];
+ RHS1 += Idr[9];
+ RHS1 += Idr[10];
+ RHS1 += Idr[11];
+ RHS1 += Idr[12];
+ RHS1 += Idr[13];
+ RHS1 -= go[8] * *cnV[8];
+ RHS1 -= go[9] * *cnV[9];
+ RHS1 -= go[10] * *cnV[10];
+ RHS1 -= go[11] * *cnV[11];
+ RHS1 -= go[12] * *cnV[12];
+ RHS1 -= go[13] * *cnV[13];
+ m_A4 += gt[14];
+ m_A4 += gt[15];
+ m_A4 += gt[16];
+ m_A4 += gt[17];
+ m_A4 += gt[18];
+ m_A5 += go[14];
+ m_A6 += go[15];
+ double RHS2 = Idr[14];
+ RHS2 += Idr[15];
+ RHS2 += Idr[16];
+ RHS2 += Idr[17];
+ RHS2 += Idr[18];
+ RHS2 -= go[16] * *cnV[16];
+ RHS2 -= go[17] * *cnV[17];
+ RHS2 -= go[18] * *cnV[18];
+ m_A7 += gt[19];
+ m_A7 += gt[20];
+ m_A8 += go[19];
+ double RHS3 = Idr[19];
+ RHS3 += Idr[20];
+ RHS3 -= go[20] * *cnV[20];
+ m_A9 += gt[21];
+ m_A9 += gt[22];
+ m_A10 += go[21];
+ double RHS4 = Idr[21];
+ RHS4 += Idr[22];
+ RHS4 -= go[22] * *cnV[22];
+ m_A11 += gt[23];
+ m_A11 += gt[24];
+ m_A11 += gt[25];
+ m_A12 += go[23];
+ double RHS5 = Idr[23];
+ RHS5 += Idr[24];
+ RHS5 += Idr[25];
+ RHS5 -= go[24] * *cnV[24];
+ RHS5 -= go[25] * *cnV[25];
+ m_A14 += gt[26];
+ m_A14 += gt[27];
+ m_A14 += gt[28];
+ m_A14 += gt[29];
+ m_A14 += gt[30];
+ m_A14 += gt[31];
+ m_A13 += go[26];
+ m_A16 += go[27];
+ m_A15 += go[28];
+ m_A15 += go[29];
+ double RHS6 = Idr[26];
+ RHS6 += Idr[27];
+ RHS6 += Idr[28];
+ RHS6 += Idr[29];
+ RHS6 += Idr[30];
+ RHS6 += Idr[31];
+ RHS6 -= go[30] * *cnV[30];
+ RHS6 -= go[31] * *cnV[31];
+ m_A18 += gt[32];
+ m_A18 += gt[33];
+ m_A18 += gt[34];
+ m_A19 += go[32];
+ double RHS7 = Idr[32];
+ RHS7 += Idr[33];
+ RHS7 += Idr[34];
+ RHS7 -= go[33] * *cnV[33];
+ RHS7 -= go[34] * *cnV[34];
+ m_A20 += gt[35];
+ m_A20 += gt[36];
+ m_A20 += gt[37];
+ m_A21 += go[35];
+ double RHS8 = Idr[35];
+ RHS8 += Idr[36];
+ RHS8 += Idr[37];
+ RHS8 -= go[36] * *cnV[36];
+ RHS8 -= go[37] * *cnV[37];
+ m_A22 += gt[38];
+ m_A22 += gt[39];
+ m_A23 += go[38];
+ double RHS9 = Idr[38];
+ RHS9 += Idr[39];
+ RHS9 -= go[39] * *cnV[39];
+ m_A25 += gt[40];
+ m_A25 += gt[41];
+ m_A25 += gt[42];
+ m_A27 += go[40];
+ m_A24 += go[41];
+ double RHS10 = Idr[40];
+ RHS10 += Idr[41];
+ RHS10 += Idr[42];
+ RHS10 -= go[42] * *cnV[42];
+ m_A30 += gt[43];
+ m_A30 += gt[44];
+ m_A30 += gt[45];
+ m_A32 += go[43];
+ m_A28 += go[44];
+ double RHS11 = Idr[43];
+ RHS11 += Idr[44];
+ RHS11 += Idr[45];
+ RHS11 -= go[45] * *cnV[45];
+ m_A36 += gt[46];
+ m_A36 += gt[47];
+ m_A36 += gt[48];
+ m_A36 += gt[49];
+ m_A36 += gt[50];
+ m_A36 += gt[51];
+ m_A35 += go[46];
+ m_A35 += go[47];
+ m_A37 += go[48];
+ m_A34 += go[49];
+ m_A33 += go[50];
+ double RHS12 = Idr[46];
+ RHS12 += Idr[47];
+ RHS12 += Idr[48];
+ RHS12 += Idr[49];
+ RHS12 += Idr[50];
+ RHS12 += Idr[51];
+ RHS12 -= go[51] * *cnV[51];
+ m_A41 += gt[52];
+ m_A41 += gt[53];
+ m_A41 += gt[54];
+ m_A41 += gt[55];
+ m_A41 += gt[56];
+ m_A40 += go[52];
+ m_A43 += go[53];
+ m_A44 += go[54];
+ double RHS13 = Idr[52];
+ RHS13 += Idr[53];
+ RHS13 += Idr[54];
+ RHS13 += Idr[55];
+ RHS13 += Idr[56];
+ RHS13 -= go[55] * *cnV[55];
+ RHS13 -= go[56] * *cnV[56];
+ m_A48 += gt[57];
+ m_A48 += gt[58];
+ m_A46 += go[57];
+ m_A45 += go[58];
+ double RHS14 = Idr[57];
+ RHS14 += Idr[58];
+ m_A51 += gt[59];
+ m_A51 += gt[60];
+ m_A51 += gt[61];
+ m_A51 += gt[62];
+ m_A52 += go[59];
+ m_A50 += go[60];
+ double RHS15 = Idr[59];
+ RHS15 += Idr[60];
+ RHS15 += Idr[61];
+ RHS15 += Idr[62];
+ RHS15 -= go[61] * *cnV[61];
+ RHS15 -= go[62] * *cnV[62];
+ m_A58 += gt[63];
+ m_A58 += gt[64];
+ m_A58 += gt[65];
+ m_A54 += go[63];
+ m_A55 += go[64];
+ m_A53 += go[65];
+ double RHS16 = Idr[63];
+ RHS16 += Idr[64];
+ RHS16 += Idr[65];
+ m_A64 += gt[66];
+ m_A64 += gt[67];
+ m_A64 += gt[68];
+ m_A64 += gt[69];
+ m_A61 += go[66];
+ m_A60 += go[67];
+ double RHS17 = Idr[66];
+ RHS17 += Idr[67];
+ RHS17 += Idr[68];
+ RHS17 += Idr[69];
+ RHS17 -= go[68] * *cnV[68];
+ RHS17 -= go[69] * *cnV[69];
+ m_A68 += gt[70];
+ m_A68 += gt[71];
+ m_A68 += gt[72];
+ m_A65 += go[70];
+ m_A66 += go[71];
+ double RHS18 = Idr[70];
+ RHS18 += Idr[71];
+ RHS18 += Idr[72];
+ RHS18 -= go[72] * *cnV[72];
+ m_A78 += gt[73];
+ m_A78 += gt[74];
+ m_A78 += gt[75];
+ m_A78 += gt[76];
+ m_A78 += gt[77];
+ m_A72 += go[73];
+ m_A73 += go[74];
+ m_A75 += go[75];
+ m_A71 += go[76];
+ m_A70 += go[77];
+ double RHS19 = Idr[73];
+ RHS19 += Idr[74];
+ RHS19 += Idr[75];
+ RHS19 += Idr[76];
+ RHS19 += Idr[77];
+ const double f0 = 1.0 / m_A0;
+ const double f0_6 = -f0 * m_A13;
+ m_A17 += m_A1 * f0_6;
+ RHS6 += f0_6 * RHS0;
+ const double f1 = 1.0 / m_A2;
+ const double f1_13 = -f1 * m_A40;
+ m_A42 += m_A3 * f1_13;
+ RHS13 += f1_13 * RHS1;
+ const double f2 = 1.0 / m_A4;
+ const double f2_10 = -f2 * m_A24;
+ m_A25 += m_A5 * f2_10;
+ m_A26 += m_A6 * f2_10;
+ RHS10 += f2_10 * RHS2;
+ const double f2_11 = -f2 * m_A28;
+ m_A29 += m_A5 * f2_11;
+ m_A30 += m_A6 * f2_11;
+ RHS11 += f2_11 * RHS2;
+ const double f3 = 1.0 / m_A7;
+ const double f3_12 = -f3 * m_A33;
+ m_A37 += m_A8 * f3_12;
+ RHS12 += f3_12 * RHS3;
+ const double f3_14 = -f3 * m_A45;
+ m_A48 += m_A8 * f3_14;
+ RHS14 += f3_14 * RHS3;
+ const double f4 = 1.0 / m_A9;
+ const double f4_16 = -f4 * m_A53;
+ m_A58 += m_A10 * f4_16;
+ RHS16 += f4_16 * RHS4;
+ const double f4_19 = -f4 * m_A70;
+ m_A75 += m_A10 * f4_19;
+ RHS19 += f4_19 * RHS4;
+ const double f5 = 1.0 / m_A11;
+ const double f5_12 = -f5 * m_A34;
+ m_A36 += m_A12 * f5_12;
+ RHS12 += f5_12 * RHS5;
+ const double f5_17 = -f5 * m_A60;
+ m_A61 += m_A12 * f5_17;
+ RHS17 += f5_17 * RHS5;
+ const double f6 = 1.0 / m_A14;
+ const double f6_12 = -f6 * m_A35;
+ m_A36 += m_A15 * f6_12;
+ m_A38 += m_A16 * f6_12;
+ m_A39 += m_A17 * f6_12;
+ RHS12 += f6_12 * RHS6;
+ const double f6_16 = -f6 * m_A54;
+ m_A56 += m_A15 * f6_16;
+ m_A58 += m_A16 * f6_16;
+ m_A59 += m_A17 * f6_16;
+ RHS16 += f6_16 * RHS6;
+ const double f7 = 1.0 / m_A18;
+ const double f7_18 = -f7 * m_A65;
+ m_A68 += m_A19 * f7_18;
+ RHS18 += f7_18 * RHS7;
+ const double f8 = 1.0 / m_A20;
+ const double f8_15 = -f8 * m_A50;
+ m_A52 += m_A21 * f8_15;
+ RHS15 += f8_15 * RHS8;
+ const double f8_19 = -f8 * m_A71;
+ m_A78 += m_A21 * f8_19;
+ RHS19 += f8_19 * RHS8;
+ const double f9 = 1.0 / m_A22;
+ const double f9_19 = -f9 * m_A72;
+ m_A78 += m_A23 * f9_19;
+ RHS19 += f9_19 * RHS9;
+ const double f10 = 1.0 / m_A25;
+ const double f10_11 = -f10 * m_A29;
+ m_A30 += m_A26 * f10_11;
+ m_A31 += m_A27 * f10_11;
+ RHS11 += f10_11 * RHS10;
+ const double f10_14 = -f10 * m_A46;
+ m_A47 += m_A26 * f10_14;
+ m_A48 += m_A27 * f10_14;
+ RHS14 += f10_14 * RHS10;
+ const double f11 = 1.0 / m_A30;
+ const double f11_14 = -f11 * m_A47;
+ m_A48 += m_A31 * f11_14;
+ m_A49 += m_A32 * f11_14;
+ RHS14 += f11_14 * RHS11;
+ const double f11_16 = -f11 * m_A55;
+ m_A57 += m_A31 * f11_16;
+ m_A58 += m_A32 * f11_16;
+ RHS16 += f11_16 * RHS11;
+ const double f12 = 1.0 / m_A36;
+ const double f12_16 = -f12 * m_A56;
+ m_A57 += m_A37 * f12_16;
+ m_A58 += m_A38 * f12_16;
+ m_A59 += m_A39 * f12_16;
+ RHS16 += f12_16 * RHS12;
+ const double f12_17 = -f12 * m_A61;
+ m_A62 += m_A37 * f12_17;
+ m_A63 += m_A38 * f12_17;
+ m_A64 += m_A39 * f12_17;
+ RHS17 += f12_17 * RHS12;
+ const double f13 = 1.0 / m_A41;
+ const double f13_18 = -f13 * m_A66;
+ m_A67 += m_A42 * f13_18;
+ m_A68 += m_A43 * f13_18;
+ m_A69 += m_A44 * f13_18;
+ RHS18 += f13_18 * RHS13;
+ const double f13_19 = -f13 * m_A73;
+ m_A74 += m_A42 * f13_19;
+ m_A77 += m_A43 * f13_19;
+ m_A78 += m_A44 * f13_19;
+ RHS19 += f13_19 * RHS13;
+ const double f14 = 1.0 / m_A48;
+ const double f14_16 = -f14 * m_A57;
+ m_A58 += m_A49 * f14_16;
+ RHS16 += f14_16 * RHS14;
+ const double f14_17 = -f14 * m_A62;
+ m_A63 += m_A49 * f14_17;
+ RHS17 += f14_17 * RHS14;
+ const double f15 = 1.0 / m_A51;
+ const double f15_18 = -f15 * m_A67;
+ m_A69 += m_A52 * f15_18;
+ RHS18 += f15_18 * RHS15;
+ const double f15_19 = -f15 * m_A74;
+ m_A78 += m_A52 * f15_19;
+ RHS19 += f15_19 * RHS15;
+ const double f16 = 1.0 / m_A58;
+ const double f16_17 = -f16 * m_A63;
+ m_A64 += m_A59 * f16_17;
+ RHS17 += f16_17 * RHS16;
+ const double f16_19 = -f16 * m_A75;
+ m_A76 += m_A59 * f16_19;
+ RHS19 += f16_19 * RHS16;
+ const double f17 = 1.0 / m_A64;
+ const double f17_19 = -f17 * m_A76;
+ RHS19 += f17_19 * RHS17;
+ const double f18 = 1.0 / m_A68;
+ const double f18_19 = -f18 * m_A77;
+ m_A78 += m_A69 * f18_19;
+ RHS19 += f18_19 * RHS18;
+ V[19] = RHS19 / m_A78;
+ double tmp18 = 0.0;
+ tmp18 += m_A69 * V[19];
+ V[18] = (RHS18 - tmp18) / m_A68;
+ double tmp17 = 0.0;
+ V[17] = (RHS17 - tmp17) / m_A64;
+ double tmp16 = 0.0;
+ tmp16 += m_A59 * V[17];
+ V[16] = (RHS16 - tmp16) / m_A58;
+ double tmp15 = 0.0;
+ tmp15 += m_A52 * V[19];
+ V[15] = (RHS15 - tmp15) / m_A51;
+ double tmp14 = 0.0;
+ tmp14 += m_A49 * V[16];
+ V[14] = (RHS14 - tmp14) / m_A48;
+ double tmp13 = 0.0;
+ tmp13 += m_A42 * V[15];
+ tmp13 += m_A43 * V[18];
+ tmp13 += m_A44 * V[19];
+ V[13] = (RHS13 - tmp13) / m_A41;
+ double tmp12 = 0.0;
+ tmp12 += m_A37 * V[14];
+ tmp12 += m_A38 * V[16];
+ tmp12 += m_A39 * V[17];
+ V[12] = (RHS12 - tmp12) / m_A36;
+ double tmp11 = 0.0;
+ tmp11 += m_A31 * V[14];
+ tmp11 += m_A32 * V[16];
+ V[11] = (RHS11 - tmp11) / m_A30;
+ double tmp10 = 0.0;
+ tmp10 += m_A26 * V[11];
+ tmp10 += m_A27 * V[14];
+ V[10] = (RHS10 - tmp10) / m_A25;
+ double tmp9 = 0.0;
+ tmp9 += m_A23 * V[19];
+ V[9] = (RHS9 - tmp9) / m_A22;
+ double tmp8 = 0.0;
+ tmp8 += m_A21 * V[19];
+ V[8] = (RHS8 - tmp8) / m_A20;
+ double tmp7 = 0.0;
+ tmp7 += m_A19 * V[18];
+ V[7] = (RHS7 - tmp7) / m_A18;
+ double tmp6 = 0.0;
+ tmp6 += m_A15 * V[12];
+ tmp6 += m_A16 * V[16];
+ tmp6 += m_A17 * V[17];
+ V[6] = (RHS6 - tmp6) / m_A14;
+ double tmp5 = 0.0;
+ tmp5 += m_A12 * V[12];
+ V[5] = (RHS5 - tmp5) / m_A11;
+ double tmp4 = 0.0;
+ tmp4 += m_A10 * V[16];
+ V[4] = (RHS4 - tmp4) / m_A9;
+ double tmp3 = 0.0;
+ tmp3 += m_A8 * V[14];
+ V[3] = (RHS3 - tmp3) / m_A7;
+ double tmp2 = 0.0;
+ tmp2 += m_A5 * V[10];
+ tmp2 += m_A6 * V[11];
+ V[2] = (RHS2 - tmp2) / m_A4;
+ double tmp1 = 0.0;
+ tmp1 += m_A3 * V[15];
+ V[1] = (RHS1 - tmp1) / m_A2;
+ double tmp0 = 0.0;
+ tmp0 += m_A1 * V[17];
+ V[0] = (RHS0 - tmp0) / m_A0;
+}
+
// starcrus
static void nl_gcr_c2e616f3de30f15b_31_double_double(double * __restrict V, const double * __restrict go, const double * __restrict gt, const double * __restrict Idr, const double * const * __restrict cnV)
@@ -30567,6 +34261,1019 @@ static void nl_gcr_cc913f9c3f9293e7_19_double_double(double * __restrict V, cons
V[0] = (RHS0 - tmp0) / m_A0;
}
+// fireone
+static void nl_gcr_cca3d1a4219e2ec0_153_double_double(double * __restrict V, const double * __restrict go, const double * __restrict gt, const double * __restrict Idr, const double * const * __restrict cnV)
+
+{
+
+ plib::unused_var(cnV);
+ double m_A0(0.0);
+ double m_A1(0.0);
+ double m_A2(0.0);
+ double m_A3(0.0);
+ double m_A4(0.0);
+ double m_A5(0.0);
+ double m_A6(0.0);
+ double m_A7(0.0);
+ double m_A8(0.0);
+ double m_A9(0.0);
+ double m_A10(0.0);
+ double m_A11(0.0);
+ double m_A12(0.0);
+ double m_A13(0.0);
+ double m_A14(0.0);
+ double m_A15(0.0);
+ double m_A16(0.0);
+ double m_A17(0.0);
+ double m_A18(0.0);
+ double m_A19(0.0);
+ double m_A20(0.0);
+ double m_A21(0.0);
+ double m_A22(0.0);
+ double m_A23(0.0);
+ double m_A24(0.0);
+ double m_A25(0.0);
+ double m_A26(0.0);
+ double m_A27(0.0);
+ double m_A28(0.0);
+ double m_A29(0.0);
+ double m_A30(0.0);
+ double m_A31(0.0);
+ double m_A32(0.0);
+ double m_A33(0.0);
+ double m_A34(0.0);
+ double m_A35(0.0);
+ double m_A36(0.0);
+ double m_A37(0.0);
+ double m_A38(0.0);
+ double m_A39(0.0);
+ double m_A40(0.0);
+ double m_A41(0.0);
+ double m_A42(0.0);
+ double m_A43(0.0);
+ double m_A44(0.0);
+ double m_A45(0.0);
+ double m_A46(0.0);
+ double m_A47(0.0);
+ double m_A48(0.0);
+ double m_A49(0.0);
+ double m_A50(0.0);
+ double m_A51(0.0);
+ double m_A52(0.0);
+ double m_A53(0.0);
+ double m_A54(0.0);
+ double m_A55(0.0);
+ double m_A56(0.0);
+ double m_A57(0.0);
+ double m_A58(0.0);
+ double m_A59(0.0);
+ double m_A60(0.0);
+ double m_A61(0.0);
+ double m_A62(0.0);
+ double m_A63(0.0);
+ double m_A64(0.0);
+ double m_A65(0.0);
+ double m_A66(0.0);
+ double m_A67(0.0);
+ double m_A68(0.0);
+ double m_A69(0.0);
+ double m_A70(0.0);
+ double m_A71(0.0);
+ double m_A72(0.0);
+ double m_A73(0.0);
+ double m_A74(0.0);
+ double m_A75(0.0);
+ double m_A76(0.0);
+ double m_A77(0.0);
+ double m_A78(0.0);
+ double m_A79(0.0);
+ double m_A80(0.0);
+ double m_A81(0.0);
+ double m_A82(0.0);
+ double m_A83(0.0);
+ double m_A84(0.0);
+ double m_A85(0.0);
+ double m_A86(0.0);
+ double m_A87(0.0);
+ double m_A88(0.0);
+ double m_A89(0.0);
+ double m_A90(0.0);
+ double m_A91(0.0);
+ double m_A92(0.0);
+ double m_A93(0.0);
+ double m_A94(0.0);
+ double m_A95(0.0);
+ double m_A96(0.0);
+ double m_A97(0.0);
+ double m_A98(0.0);
+ double m_A99(0.0);
+ double m_A100(0.0);
+ double m_A101(0.0);
+ double m_A102(0.0);
+ double m_A103(0.0);
+ double m_A104(0.0);
+ double m_A105(0.0);
+ double m_A106(0.0);
+ double m_A107(0.0);
+ double m_A108(0.0);
+ double m_A109(0.0);
+ double m_A110(0.0);
+ double m_A111(0.0);
+ double m_A112(0.0);
+ double m_A113(0.0);
+ double m_A114(0.0);
+ double m_A115(0.0);
+ double m_A116(0.0);
+ double m_A117(0.0);
+ double m_A118(0.0);
+ double m_A119(0.0);
+ double m_A120(0.0);
+ double m_A121(0.0);
+ double m_A122(0.0);
+ double m_A123(0.0);
+ double m_A124(0.0);
+ double m_A125(0.0);
+ double m_A126(0.0);
+ double m_A127(0.0);
+ double m_A128(0.0);
+ double m_A129(0.0);
+ double m_A130(0.0);
+ double m_A131(0.0);
+ double m_A132(0.0);
+ double m_A133(0.0);
+ double m_A134(0.0);
+ double m_A135(0.0);
+ double m_A136(0.0);
+ double m_A137(0.0);
+ double m_A138(0.0);
+ double m_A139(0.0);
+ double m_A140(0.0);
+ double m_A141(0.0);
+ double m_A142(0.0);
+ double m_A143(0.0);
+ double m_A144(0.0);
+ double m_A145(0.0);
+ double m_A146(0.0);
+ double m_A147(0.0);
+ double m_A148(0.0);
+ double m_A149(0.0);
+ double m_A150(0.0);
+ double m_A151(0.0);
+ double m_A152(0.0);
+ m_A0 += gt[0];
+ m_A0 += gt[1];
+ m_A0 += gt[2];
+ m_A0 += gt[3];
+ m_A0 += gt[4];
+ m_A0 += gt[5];
+ m_A0 += gt[6];
+ m_A1 += go[0];
+ double RHS0 = Idr[0];
+ RHS0 += Idr[1];
+ RHS0 += Idr[2];
+ RHS0 += Idr[3];
+ RHS0 += Idr[4];
+ RHS0 += Idr[5];
+ RHS0 += Idr[6];
+ RHS0 -= go[1] * *cnV[1];
+ RHS0 -= go[2] * *cnV[2];
+ RHS0 -= go[3] * *cnV[3];
+ RHS0 -= go[4] * *cnV[4];
+ RHS0 -= go[5] * *cnV[5];
+ RHS0 -= go[6] * *cnV[6];
+ m_A2 += gt[7];
+ m_A2 += gt[8];
+ m_A2 += gt[9];
+ m_A2 += gt[10];
+ m_A2 += gt[11];
+ m_A2 += gt[12];
+ m_A2 += gt[13];
+ m_A3 += go[7];
+ double RHS1 = Idr[7];
+ RHS1 += Idr[8];
+ RHS1 += Idr[9];
+ RHS1 += Idr[10];
+ RHS1 += Idr[11];
+ RHS1 += Idr[12];
+ RHS1 += Idr[13];
+ RHS1 -= go[8] * *cnV[8];
+ RHS1 -= go[9] * *cnV[9];
+ RHS1 -= go[10] * *cnV[10];
+ RHS1 -= go[11] * *cnV[11];
+ RHS1 -= go[12] * *cnV[12];
+ RHS1 -= go[13] * *cnV[13];
+ m_A4 += gt[14];
+ m_A4 += gt[15];
+ m_A4 += gt[16];
+ m_A5 += go[14];
+ double RHS2 = Idr[14];
+ RHS2 += Idr[15];
+ RHS2 += Idr[16];
+ RHS2 -= go[15] * *cnV[15];
+ RHS2 -= go[16] * *cnV[16];
+ m_A6 += gt[17];
+ m_A6 += gt[18];
+ m_A7 += go[17];
+ double RHS3 = Idr[17];
+ RHS3 += Idr[18];
+ RHS3 -= go[18] * *cnV[18];
+ m_A8 += gt[19];
+ m_A8 += gt[20];
+ m_A9 += go[19];
+ double RHS4 = Idr[19];
+ RHS4 += Idr[20];
+ RHS4 -= go[20] * *cnV[20];
+ m_A10 += gt[21];
+ m_A10 += gt[22];
+ m_A11 += go[21];
+ double RHS5 = Idr[21];
+ RHS5 += Idr[22];
+ RHS5 -= go[22] * *cnV[22];
+ m_A12 += gt[23];
+ m_A12 += gt[24];
+ m_A13 += go[23];
+ double RHS6 = Idr[23];
+ RHS6 += Idr[24];
+ RHS6 -= go[24] * *cnV[24];
+ m_A14 += gt[25];
+ m_A14 += gt[26];
+ m_A15 += go[25];
+ double RHS7 = Idr[25];
+ RHS7 += Idr[26];
+ RHS7 -= go[26] * *cnV[26];
+ m_A16 += gt[27];
+ m_A16 += gt[28];
+ m_A17 += go[27];
+ double RHS8 = Idr[27];
+ RHS8 += Idr[28];
+ RHS8 -= go[28] * *cnV[28];
+ m_A18 += gt[29];
+ m_A18 += gt[30];
+ m_A19 += go[29];
+ double RHS9 = Idr[29];
+ RHS9 += Idr[30];
+ RHS9 -= go[30] * *cnV[30];
+ m_A20 += gt[31];
+ m_A20 += gt[32];
+ m_A20 += gt[33];
+ m_A20 += gt[34];
+ m_A21 += go[31];
+ m_A22 += go[32];
+ double RHS10 = Idr[31];
+ RHS10 += Idr[32];
+ RHS10 += Idr[33];
+ RHS10 += Idr[34];
+ RHS10 -= go[33] * *cnV[33];
+ RHS10 -= go[34] * *cnV[34];
+ m_A23 += gt[35];
+ m_A23 += gt[36];
+ m_A23 += gt[37];
+ m_A23 += gt[38];
+ m_A24 += go[35];
+ m_A25 += go[36];
+ double RHS11 = Idr[35];
+ RHS11 += Idr[36];
+ RHS11 += Idr[37];
+ RHS11 += Idr[38];
+ RHS11 -= go[37] * *cnV[37];
+ RHS11 -= go[38] * *cnV[38];
+ m_A26 += gt[39];
+ m_A26 += gt[40];
+ m_A26 += gt[41];
+ m_A26 += gt[42];
+ m_A27 += go[39];
+ m_A28 += go[40];
+ double RHS12 = Idr[39];
+ RHS12 += Idr[40];
+ RHS12 += Idr[41];
+ RHS12 += Idr[42];
+ RHS12 -= go[41] * *cnV[41];
+ RHS12 -= go[42] * *cnV[42];
+ m_A29 += gt[43];
+ m_A29 += gt[44];
+ m_A30 += go[43];
+ double RHS13 = Idr[43];
+ RHS13 += Idr[44];
+ RHS13 -= go[44] * *cnV[44];
+ m_A31 += gt[45];
+ m_A31 += gt[46];
+ m_A32 += go[45];
+ double RHS14 = Idr[45];
+ RHS14 += Idr[46];
+ RHS14 -= go[46] * *cnV[46];
+ m_A33 += gt[47];
+ m_A33 += gt[48];
+ m_A34 += go[47];
+ double RHS15 = Idr[47];
+ RHS15 += Idr[48];
+ RHS15 -= go[48] * *cnV[48];
+ m_A35 += gt[49];
+ m_A35 += gt[50];
+ m_A35 += gt[51];
+ m_A36 += go[49];
+ double RHS16 = Idr[49];
+ RHS16 += Idr[50];
+ RHS16 += Idr[51];
+ RHS16 -= go[50] * *cnV[50];
+ RHS16 -= go[51] * *cnV[51];
+ m_A37 += gt[52];
+ m_A37 += gt[53];
+ m_A37 += gt[54];
+ m_A37 += gt[55];
+ m_A38 += go[52];
+ double RHS17 = Idr[52];
+ RHS17 += Idr[53];
+ RHS17 += Idr[54];
+ RHS17 += Idr[55];
+ RHS17 -= go[53] * *cnV[53];
+ RHS17 -= go[54] * *cnV[54];
+ RHS17 -= go[55] * *cnV[55];
+ m_A39 += gt[56];
+ m_A39 += gt[57];
+ m_A40 += go[56];
+ double RHS18 = Idr[56];
+ RHS18 += Idr[57];
+ RHS18 -= go[57] * *cnV[57];
+ m_A41 += gt[58];
+ m_A41 += gt[59];
+ m_A42 += go[58];
+ double RHS19 = Idr[58];
+ RHS19 += Idr[59];
+ RHS19 -= go[59] * *cnV[59];
+ m_A43 += gt[60];
+ m_A43 += gt[61];
+ m_A44 += go[60];
+ double RHS20 = Idr[60];
+ RHS20 += Idr[61];
+ RHS20 -= go[61] * *cnV[61];
+ m_A45 += gt[62];
+ m_A45 += gt[63];
+ m_A45 += gt[64];
+ m_A45 += gt[65];
+ m_A46 += go[62];
+ double RHS21 = Idr[62];
+ RHS21 += Idr[63];
+ RHS21 += Idr[64];
+ RHS21 += Idr[65];
+ RHS21 -= go[63] * *cnV[63];
+ RHS21 -= go[64] * *cnV[64];
+ RHS21 -= go[65] * *cnV[65];
+ m_A47 += gt[66];
+ m_A47 += gt[67];
+ m_A48 += go[66];
+ double RHS22 = Idr[66];
+ RHS22 += Idr[67];
+ RHS22 -= go[67] * *cnV[67];
+ m_A49 += gt[68];
+ m_A49 += gt[69];
+ m_A50 += go[68];
+ double RHS23 = Idr[68];
+ RHS23 += Idr[69];
+ RHS23 -= go[69] * *cnV[69];
+ m_A51 += gt[70];
+ m_A51 += gt[71];
+ m_A52 += go[70];
+ double RHS24 = Idr[70];
+ RHS24 += Idr[71];
+ RHS24 -= go[71] * *cnV[71];
+ m_A53 += gt[72];
+ m_A53 += gt[73];
+ m_A53 += gt[74];
+ m_A54 += go[72];
+ double RHS25 = Idr[72];
+ RHS25 += Idr[73];
+ RHS25 += Idr[74];
+ RHS25 -= go[73] * *cnV[73];
+ RHS25 -= go[74] * *cnV[74];
+ m_A55 += gt[75];
+ m_A55 += gt[76];
+ m_A56 += go[75];
+ m_A57 += go[76];
+ double RHS26 = Idr[75];
+ RHS26 += Idr[76];
+ m_A58 += gt[77];
+ m_A58 += gt[78];
+ m_A58 += gt[79];
+ m_A59 += go[77];
+ double RHS27 = Idr[77];
+ RHS27 += Idr[78];
+ RHS27 += Idr[79];
+ RHS27 -= go[78] * *cnV[78];
+ RHS27 -= go[79] * *cnV[79];
+ m_A60 += gt[80];
+ m_A60 += gt[81];
+ m_A61 += go[80];
+ m_A62 += go[81];
+ double RHS28 = Idr[80];
+ RHS28 += Idr[81];
+ m_A65 += gt[82];
+ m_A65 += gt[83];
+ m_A64 += go[82];
+ m_A63 += go[83];
+ double RHS29 = Idr[82];
+ RHS29 += Idr[83];
+ m_A66 += gt[84];
+ m_A66 += gt[85];
+ m_A66 += gt[86];
+ m_A67 += go[84];
+ double RHS30 = Idr[84];
+ RHS30 += Idr[85];
+ RHS30 += Idr[86];
+ RHS30 -= go[85] * *cnV[85];
+ RHS30 -= go[86] * *cnV[86];
+ m_A70 += gt[87];
+ m_A70 += gt[88];
+ m_A69 += go[87];
+ m_A68 += go[88];
+ double RHS31 = Idr[87];
+ RHS31 += Idr[88];
+ m_A72 += gt[89];
+ m_A72 += gt[90];
+ m_A72 += gt[91];
+ m_A72 += gt[92];
+ m_A73 += go[89];
+ m_A74 += go[90];
+ m_A71 += go[91];
+ double RHS32 = Idr[89];
+ RHS32 += Idr[90];
+ RHS32 += Idr[91];
+ RHS32 += Idr[92];
+ RHS32 -= go[92] * *cnV[92];
+ m_A77 += gt[93];
+ m_A77 += gt[94];
+ m_A77 += gt[95];
+ m_A75 += go[93];
+ m_A76 += go[94];
+ double RHS33 = Idr[93];
+ RHS33 += Idr[94];
+ RHS33 += Idr[95];
+ RHS33 -= go[95] * *cnV[95];
+ m_A81 += gt[96];
+ m_A81 += gt[97];
+ m_A81 += gt[98];
+ m_A79 += go[96];
+ m_A80 += go[97];
+ double RHS34 = Idr[96];
+ RHS34 += Idr[97];
+ RHS34 += Idr[98];
+ RHS34 -= go[98] * *cnV[98];
+ m_A84 += gt[99];
+ m_A84 += gt[100];
+ m_A84 += gt[101];
+ m_A85 += go[99];
+ m_A83 += go[100];
+ double RHS35 = Idr[99];
+ RHS35 += Idr[100];
+ RHS35 += Idr[101];
+ RHS35 -= go[101] * *cnV[101];
+ m_A87 += gt[102];
+ m_A87 += gt[103];
+ m_A87 += gt[104];
+ m_A88 += go[102];
+ m_A86 += go[103];
+ double RHS36 = Idr[102];
+ RHS36 += Idr[103];
+ RHS36 += Idr[104];
+ RHS36 -= go[104] * *cnV[104];
+ m_A92 += gt[105];
+ m_A92 += gt[106];
+ m_A92 += gt[107];
+ m_A92 += gt[108];
+ m_A92 += gt[109];
+ m_A92 += gt[110];
+ m_A89 += go[105];
+ m_A90 += go[106];
+ m_A94 += go[107];
+ m_A94 += go[108];
+ double RHS37 = Idr[105];
+ RHS37 += Idr[106];
+ RHS37 += Idr[107];
+ RHS37 += Idr[108];
+ RHS37 += Idr[109];
+ RHS37 += Idr[110];
+ RHS37 -= go[109] * *cnV[109];
+ RHS37 -= go[110] * *cnV[110];
+ m_A98 += gt[111];
+ m_A98 += gt[112];
+ m_A98 += gt[113];
+ m_A98 += gt[114];
+ m_A98 += gt[115];
+ m_A98 += gt[116];
+ m_A95 += go[111];
+ m_A96 += go[112];
+ m_A100 += go[113];
+ m_A100 += go[114];
+ double RHS38 = Idr[111];
+ RHS38 += Idr[112];
+ RHS38 += Idr[113];
+ RHS38 += Idr[114];
+ RHS38 += Idr[115];
+ RHS38 += Idr[116];
+ RHS38 -= go[115] * *cnV[115];
+ RHS38 -= go[116] * *cnV[116];
+ m_A102 += gt[117];
+ m_A102 += gt[118];
+ m_A102 += gt[119];
+ m_A102 += gt[120];
+ m_A103 += go[117];
+ m_A101 += go[118];
+ double RHS39 = Idr[117];
+ RHS39 += Idr[118];
+ RHS39 += Idr[119];
+ RHS39 += Idr[120];
+ RHS39 -= go[119] * *cnV[119];
+ RHS39 -= go[120] * *cnV[120];
+ m_A105 += gt[121];
+ m_A105 += gt[122];
+ m_A105 += gt[123];
+ m_A105 += gt[124];
+ m_A106 += go[121];
+ m_A104 += go[122];
+ double RHS40 = Idr[121];
+ RHS40 += Idr[122];
+ RHS40 += Idr[123];
+ RHS40 += Idr[124];
+ RHS40 -= go[123] * *cnV[123];
+ RHS40 -= go[124] * *cnV[124];
+ m_A116 += gt[125];
+ m_A116 += gt[126];
+ m_A116 += gt[127];
+ m_A116 += gt[128];
+ m_A116 += gt[129];
+ m_A116 += gt[130];
+ m_A116 += gt[131];
+ m_A116 += gt[132];
+ m_A116 += gt[133];
+ m_A116 += gt[134];
+ m_A114 += go[125];
+ m_A113 += go[126];
+ m_A112 += go[127];
+ m_A111 += go[128];
+ m_A110 += go[129];
+ m_A118 += go[130];
+ m_A109 += go[131];
+ m_A108 += go[132];
+ m_A107 += go[133];
+ m_A115 += go[134];
+ double RHS41 = Idr[125];
+ RHS41 += Idr[126];
+ RHS41 += Idr[127];
+ RHS41 += Idr[128];
+ RHS41 += Idr[129];
+ RHS41 += Idr[130];
+ RHS41 += Idr[131];
+ RHS41 += Idr[132];
+ RHS41 += Idr[133];
+ RHS41 += Idr[134];
+ m_A131 += gt[135];
+ m_A131 += gt[136];
+ m_A131 += gt[137];
+ m_A131 += gt[138];
+ m_A131 += gt[139];
+ m_A131 += gt[140];
+ m_A131 += gt[141];
+ m_A131 += gt[142];
+ m_A131 += gt[143];
+ m_A131 += gt[144];
+ m_A131 += gt[145];
+ m_A131 += gt[146];
+ m_A125 += go[135];
+ m_A124 += go[136];
+ m_A123 += go[137];
+ m_A122 += go[138];
+ m_A121 += go[139];
+ m_A120 += go[140];
+ m_A119 += go[141];
+ m_A133 += go[142];
+ m_A128 += go[143];
+ m_A127 += go[144];
+ m_A126 += go[145];
+ m_A129 += go[146];
+ double RHS42 = Idr[135];
+ RHS42 += Idr[136];
+ RHS42 += Idr[137];
+ RHS42 += Idr[138];
+ RHS42 += Idr[139];
+ RHS42 += Idr[140];
+ RHS42 += Idr[141];
+ RHS42 += Idr[142];
+ RHS42 += Idr[143];
+ RHS42 += Idr[144];
+ RHS42 += Idr[145];
+ RHS42 += Idr[146];
+ m_A142 += gt[147];
+ m_A142 += gt[148];
+ m_A142 += gt[149];
+ m_A142 += gt[150];
+ m_A142 += gt[151];
+ m_A142 += gt[152];
+ m_A142 += gt[153];
+ m_A138 += go[147];
+ m_A138 += go[148];
+ m_A137 += go[149];
+ m_A136 += go[150];
+ m_A140 += go[151];
+ m_A135 += go[152];
+ m_A134 += go[153];
+ double RHS43 = Idr[147];
+ RHS43 += Idr[148];
+ RHS43 += Idr[149];
+ RHS43 += Idr[150];
+ RHS43 += Idr[151];
+ RHS43 += Idr[152];
+ RHS43 += Idr[153];
+ m_A152 += gt[154];
+ m_A152 += gt[155];
+ m_A152 += gt[156];
+ m_A152 += gt[157];
+ m_A152 += gt[158];
+ m_A152 += gt[159];
+ m_A152 += gt[160];
+ m_A148 += go[154];
+ m_A148 += go[155];
+ m_A147 += go[156];
+ m_A146 += go[157];
+ m_A150 += go[158];
+ m_A145 += go[159];
+ m_A144 += go[160];
+ double RHS44 = Idr[154];
+ RHS44 += Idr[155];
+ RHS44 += Idr[156];
+ RHS44 += Idr[157];
+ RHS44 += Idr[158];
+ RHS44 += Idr[159];
+ RHS44 += Idr[160];
+ const double f0 = 1.0 / m_A0;
+ const double f0_38 = -f0 * m_A95;
+ m_A99 += m_A1 * f0_38;
+ RHS38 += f0_38 * RHS0;
+ const double f1 = 1.0 / m_A2;
+ const double f1_37 = -f1 * m_A89;
+ m_A93 += m_A3 * f1_37;
+ RHS37 += f1_37 * RHS1;
+ const double f2 = 1.0 / m_A4;
+ const double f2_32 = -f2 * m_A71;
+ m_A72 += m_A5 * f2_32;
+ RHS32 += f2_32 * RHS2;
+ const double f3 = 1.0 / m_A6;
+ const double f3_42 = -f3 * m_A119;
+ m_A131 += m_A7 * f3_42;
+ RHS42 += f3_42 * RHS3;
+ const double f4 = 1.0 / m_A8;
+ const double f4_42 = -f4 * m_A120;
+ m_A131 += m_A9 * f4_42;
+ RHS42 += f4_42 * RHS4;
+ const double f5 = 1.0 / m_A10;
+ const double f5_42 = -f5 * m_A121;
+ m_A131 += m_A11 * f5_42;
+ RHS42 += f5_42 * RHS5;
+ const double f6 = 1.0 / m_A12;
+ const double f6_42 = -f6 * m_A122;
+ m_A131 += m_A13 * f6_42;
+ RHS42 += f6_42 * RHS6;
+ const double f7 = 1.0 / m_A14;
+ const double f7_42 = -f7 * m_A123;
+ m_A131 += m_A15 * f7_42;
+ RHS42 += f7_42 * RHS7;
+ const double f8 = 1.0 / m_A16;
+ const double f8_42 = -f8 * m_A124;
+ m_A131 += m_A17 * f8_42;
+ RHS42 += f8_42 * RHS8;
+ const double f9 = 1.0 / m_A18;
+ const double f9_42 = -f9 * m_A125;
+ m_A131 += m_A19 * f9_42;
+ RHS42 += f9_42 * RHS9;
+ const double f10 = 1.0 / m_A20;
+ const double f10_41 = -f10 * m_A107;
+ m_A116 += m_A21 * f10_41;
+ m_A117 += m_A22 * f10_41;
+ RHS41 += f10_41 * RHS10;
+ const double f10_42 = -f10 * m_A126;
+ m_A130 += m_A21 * f10_42;
+ m_A131 += m_A22 * f10_42;
+ RHS42 += f10_42 * RHS10;
+ const double f11 = 1.0 / m_A23;
+ const double f11_41 = -f11 * m_A108;
+ m_A116 += m_A24 * f11_41;
+ m_A117 += m_A25 * f11_41;
+ RHS41 += f11_41 * RHS11;
+ const double f11_42 = -f11 * m_A127;
+ m_A130 += m_A24 * f11_42;
+ m_A131 += m_A25 * f11_42;
+ RHS42 += f11_42 * RHS11;
+ const double f12 = 1.0 / m_A26;
+ const double f12_41 = -f12 * m_A109;
+ m_A116 += m_A27 * f12_41;
+ m_A117 += m_A28 * f12_41;
+ RHS41 += f12_41 * RHS12;
+ const double f12_42 = -f12 * m_A128;
+ m_A130 += m_A27 * f12_42;
+ m_A131 += m_A28 * f12_42;
+ RHS42 += f12_42 * RHS12;
+ const double f13 = 1.0 / m_A29;
+ const double f13_41 = -f13 * m_A110;
+ m_A116 += m_A30 * f13_41;
+ RHS41 += f13_41 * RHS13;
+ const double f14 = 1.0 / m_A31;
+ const double f14_41 = -f14 * m_A111;
+ m_A116 += m_A32 * f14_41;
+ RHS41 += f14_41 * RHS14;
+ const double f15 = 1.0 / m_A33;
+ const double f15_29 = -f15 * m_A63;
+ m_A65 += m_A34 * f15_29;
+ RHS29 += f15_29 * RHS15;
+ const double f15_44 = -f15 * m_A144;
+ m_A146 += m_A34 * f15_44;
+ RHS44 += f15_44 * RHS15;
+ const double f16 = 1.0 / m_A35;
+ const double f16_35 = -f16 * m_A83;
+ m_A84 += m_A36 * f16_35;
+ RHS35 += f16_35 * RHS16;
+ const double f17 = 1.0 / m_A37;
+ const double f17_29 = -f17 * m_A64;
+ m_A65 += m_A38 * f17_29;
+ RHS29 += f17_29 * RHS17;
+ const double f18 = 1.0 / m_A39;
+ const double f18_33 = -f18 * m_A75;
+ m_A77 += m_A40 * f18_33;
+ RHS33 += f18_33 * RHS18;
+ const double f19 = 1.0 / m_A41;
+ const double f19_41 = -f19 * m_A112;
+ m_A116 += m_A42 * f19_41;
+ RHS41 += f19_41 * RHS19;
+ const double f20 = 1.0 / m_A43;
+ const double f20_31 = -f20 * m_A68;
+ m_A70 += m_A44 * f20_31;
+ RHS31 += f20_31 * RHS20;
+ const double f20_43 = -f20 * m_A134;
+ m_A136 += m_A44 * f20_43;
+ RHS43 += f20_43 * RHS20;
+ const double f21 = 1.0 / m_A45;
+ const double f21_31 = -f21 * m_A69;
+ m_A70 += m_A46 * f21_31;
+ RHS31 += f21_31 * RHS21;
+ const double f22 = 1.0 / m_A47;
+ const double f22_34 = -f22 * m_A79;
+ m_A81 += m_A48 * f22_34;
+ RHS34 += f22_34 * RHS22;
+ const double f23 = 1.0 / m_A49;
+ const double f23_41 = -f23 * m_A113;
+ m_A116 += m_A50 * f23_41;
+ RHS41 += f23_41 * RHS23;
+ const double f24 = 1.0 / m_A51;
+ const double f24_41 = -f24 * m_A114;
+ m_A116 += m_A52 * f24_41;
+ RHS41 += f24_41 * RHS24;
+ const double f25 = 1.0 / m_A53;
+ const double f25_36 = -f25 * m_A86;
+ m_A87 += m_A54 * f25_36;
+ RHS36 += f25_36 * RHS25;
+ const double f26 = 1.0 / m_A55;
+ const double f26_33 = -f26 * m_A76;
+ m_A77 += m_A56 * f26_33;
+ m_A78 += m_A57 * f26_33;
+ RHS33 += f26_33 * RHS26;
+ const double f26_38 = -f26 * m_A96;
+ m_A97 += m_A56 * f26_38;
+ m_A98 += m_A57 * f26_38;
+ RHS38 += f26_38 * RHS26;
+ const double f27 = 1.0 / m_A58;
+ const double f27_39 = -f27 * m_A101;
+ m_A103 += m_A59 * f27_39;
+ RHS39 += f27_39 * RHS27;
+ const double f27_44 = -f27 * m_A145;
+ m_A152 += m_A59 * f27_44;
+ RHS44 += f27_44 * RHS27;
+ const double f28 = 1.0 / m_A60;
+ const double f28_34 = -f28 * m_A80;
+ m_A81 += m_A61 * f28_34;
+ m_A82 += m_A62 * f28_34;
+ RHS34 += f28_34 * RHS28;
+ const double f28_37 = -f28 * m_A90;
+ m_A91 += m_A61 * f28_37;
+ m_A92 += m_A62 * f28_37;
+ RHS37 += f28_37 * RHS28;
+ const double f29 = 1.0 / m_A65;
+ const double f29_44 = -f29 * m_A146;
+ RHS44 += f29_44 * RHS29;
+ const double f30 = 1.0 / m_A66;
+ const double f30_40 = -f30 * m_A104;
+ m_A106 += m_A67 * f30_40;
+ RHS40 += f30_40 * RHS30;
+ const double f30_43 = -f30 * m_A135;
+ m_A142 += m_A67 * f30_43;
+ RHS43 += f30_43 * RHS30;
+ const double f31 = 1.0 / m_A70;
+ const double f31_43 = -f31 * m_A136;
+ RHS43 += f31_43 * RHS31;
+ const double f32 = 1.0 / m_A72;
+ const double f32_41 = -f32 * m_A115;
+ m_A116 += m_A73 * f32_41;
+ m_A117 += m_A74 * f32_41;
+ RHS41 += f32_41 * RHS32;
+ const double f32_42 = -f32 * m_A129;
+ m_A130 += m_A73 * f32_42;
+ m_A131 += m_A74 * f32_42;
+ RHS42 += f32_42 * RHS32;
+ const double f33 = 1.0 / m_A77;
+ const double f33_38 = -f33 * m_A97;
+ m_A98 += m_A78 * f33_38;
+ RHS38 += f33_38 * RHS33;
+ const double f34 = 1.0 / m_A81;
+ const double f34_37 = -f34 * m_A91;
+ m_A92 += m_A82 * f34_37;
+ RHS37 += f34_37 * RHS34;
+ const double f35 = 1.0 / m_A84;
+ const double f35_44 = -f35 * m_A147;
+ m_A152 += m_A85 * f35_44;
+ RHS44 += f35_44 * RHS35;
+ const double f36 = 1.0 / m_A87;
+ const double f36_43 = -f36 * m_A137;
+ m_A142 += m_A88 * f36_43;
+ RHS43 += f36_43 * RHS36;
+ const double f37 = 1.0 / m_A92;
+ const double f37_43 = -f37 * m_A138;
+ m_A139 += m_A93 * f37_43;
+ m_A142 += m_A94 * f37_43;
+ RHS43 += f37_43 * RHS37;
+ const double f38 = 1.0 / m_A98;
+ const double f38_44 = -f38 * m_A148;
+ m_A149 += m_A99 * f38_44;
+ m_A152 += m_A100 * f38_44;
+ RHS44 += f38_44 * RHS38;
+ const double f39 = 1.0 / m_A102;
+ const double f39_44 = -f39 * m_A149;
+ m_A152 += m_A103 * f39_44;
+ RHS44 += f39_44 * RHS39;
+ const double f40 = 1.0 / m_A105;
+ const double f40_43 = -f40 * m_A139;
+ m_A142 += m_A106 * f40_43;
+ RHS43 += f40_43 * RHS40;
+ const double f41 = 1.0 / m_A116;
+ const double f41_42 = -f41 * m_A130;
+ m_A131 += m_A117 * f41_42;
+ m_A132 += m_A118 * f41_42;
+ RHS42 += f41_42 * RHS41;
+ const double f41_43 = -f41 * m_A140;
+ m_A141 += m_A117 * f41_43;
+ m_A142 += m_A118 * f41_43;
+ RHS43 += f41_43 * RHS41;
+ const double f42 = 1.0 / m_A131;
+ const double f42_43 = -f42 * m_A141;
+ m_A142 += m_A132 * f42_43;
+ m_A143 += m_A133 * f42_43;
+ RHS43 += f42_43 * RHS42;
+ const double f42_44 = -f42 * m_A150;
+ m_A151 += m_A132 * f42_44;
+ m_A152 += m_A133 * f42_44;
+ RHS44 += f42_44 * RHS42;
+ const double f43 = 1.0 / m_A142;
+ const double f43_44 = -f43 * m_A151;
+ m_A152 += m_A143 * f43_44;
+ RHS44 += f43_44 * RHS43;
+ V[44] = RHS44 / m_A152;
+ double tmp43 = 0.0;
+ tmp43 += m_A143 * V[44];
+ V[43] = (RHS43 - tmp43) / m_A142;
+ double tmp42 = 0.0;
+ tmp42 += m_A132 * V[43];
+ tmp42 += m_A133 * V[44];
+ V[42] = (RHS42 - tmp42) / m_A131;
+ double tmp41 = 0.0;
+ tmp41 += m_A117 * V[42];
+ tmp41 += m_A118 * V[43];
+ V[41] = (RHS41 - tmp41) / m_A116;
+ double tmp40 = 0.0;
+ tmp40 += m_A106 * V[43];
+ V[40] = (RHS40 - tmp40) / m_A105;
+ double tmp39 = 0.0;
+ tmp39 += m_A103 * V[44];
+ V[39] = (RHS39 - tmp39) / m_A102;
+ double tmp38 = 0.0;
+ tmp38 += m_A99 * V[39];
+ tmp38 += m_A100 * V[44];
+ V[38] = (RHS38 - tmp38) / m_A98;
+ double tmp37 = 0.0;
+ tmp37 += m_A93 * V[40];
+ tmp37 += m_A94 * V[43];
+ V[37] = (RHS37 - tmp37) / m_A92;
+ double tmp36 = 0.0;
+ tmp36 += m_A88 * V[43];
+ V[36] = (RHS36 - tmp36) / m_A87;
+ double tmp35 = 0.0;
+ tmp35 += m_A85 * V[44];
+ V[35] = (RHS35 - tmp35) / m_A84;
+ double tmp34 = 0.0;
+ tmp34 += m_A82 * V[37];
+ V[34] = (RHS34 - tmp34) / m_A81;
+ double tmp33 = 0.0;
+ tmp33 += m_A78 * V[38];
+ V[33] = (RHS33 - tmp33) / m_A77;
+ double tmp32 = 0.0;
+ tmp32 += m_A73 * V[41];
+ tmp32 += m_A74 * V[42];
+ V[32] = (RHS32 - tmp32) / m_A72;
+ double tmp31 = 0.0;
+ V[31] = (RHS31 - tmp31) / m_A70;
+ double tmp30 = 0.0;
+ tmp30 += m_A67 * V[43];
+ V[30] = (RHS30 - tmp30) / m_A66;
+ double tmp29 = 0.0;
+ V[29] = (RHS29 - tmp29) / m_A65;
+ double tmp28 = 0.0;
+ tmp28 += m_A61 * V[34];
+ tmp28 += m_A62 * V[37];
+ V[28] = (RHS28 - tmp28) / m_A60;
+ double tmp27 = 0.0;
+ tmp27 += m_A59 * V[44];
+ V[27] = (RHS27 - tmp27) / m_A58;
+ double tmp26 = 0.0;
+ tmp26 += m_A56 * V[33];
+ tmp26 += m_A57 * V[38];
+ V[26] = (RHS26 - tmp26) / m_A55;
+ double tmp25 = 0.0;
+ tmp25 += m_A54 * V[36];
+ V[25] = (RHS25 - tmp25) / m_A53;
+ double tmp24 = 0.0;
+ tmp24 += m_A52 * V[41];
+ V[24] = (RHS24 - tmp24) / m_A51;
+ double tmp23 = 0.0;
+ tmp23 += m_A50 * V[41];
+ V[23] = (RHS23 - tmp23) / m_A49;
+ double tmp22 = 0.0;
+ tmp22 += m_A48 * V[34];
+ V[22] = (RHS22 - tmp22) / m_A47;
+ double tmp21 = 0.0;
+ tmp21 += m_A46 * V[31];
+ V[21] = (RHS21 - tmp21) / m_A45;
+ double tmp20 = 0.0;
+ tmp20 += m_A44 * V[31];
+ V[20] = (RHS20 - tmp20) / m_A43;
+ double tmp19 = 0.0;
+ tmp19 += m_A42 * V[41];
+ V[19] = (RHS19 - tmp19) / m_A41;
+ double tmp18 = 0.0;
+ tmp18 += m_A40 * V[33];
+ V[18] = (RHS18 - tmp18) / m_A39;
+ double tmp17 = 0.0;
+ tmp17 += m_A38 * V[29];
+ V[17] = (RHS17 - tmp17) / m_A37;
+ double tmp16 = 0.0;
+ tmp16 += m_A36 * V[35];
+ V[16] = (RHS16 - tmp16) / m_A35;
+ double tmp15 = 0.0;
+ tmp15 += m_A34 * V[29];
+ V[15] = (RHS15 - tmp15) / m_A33;
+ double tmp14 = 0.0;
+ tmp14 += m_A32 * V[41];
+ V[14] = (RHS14 - tmp14) / m_A31;
+ double tmp13 = 0.0;
+ tmp13 += m_A30 * V[41];
+ V[13] = (RHS13 - tmp13) / m_A29;
+ double tmp12 = 0.0;
+ tmp12 += m_A27 * V[41];
+ tmp12 += m_A28 * V[42];
+ V[12] = (RHS12 - tmp12) / m_A26;
+ double tmp11 = 0.0;
+ tmp11 += m_A24 * V[41];
+ tmp11 += m_A25 * V[42];
+ V[11] = (RHS11 - tmp11) / m_A23;
+ double tmp10 = 0.0;
+ tmp10 += m_A21 * V[41];
+ tmp10 += m_A22 * V[42];
+ V[10] = (RHS10 - tmp10) / m_A20;
+ double tmp9 = 0.0;
+ tmp9 += m_A19 * V[42];
+ V[9] = (RHS9 - tmp9) / m_A18;
+ double tmp8 = 0.0;
+ tmp8 += m_A17 * V[42];
+ V[8] = (RHS8 - tmp8) / m_A16;
+ double tmp7 = 0.0;
+ tmp7 += m_A15 * V[42];
+ V[7] = (RHS7 - tmp7) / m_A14;
+ double tmp6 = 0.0;
+ tmp6 += m_A13 * V[42];
+ V[6] = (RHS6 - tmp6) / m_A12;
+ double tmp5 = 0.0;
+ tmp5 += m_A11 * V[42];
+ V[5] = (RHS5 - tmp5) / m_A10;
+ double tmp4 = 0.0;
+ tmp4 += m_A9 * V[42];
+ V[4] = (RHS4 - tmp4) / m_A8;
+ double tmp3 = 0.0;
+ tmp3 += m_A7 * V[42];
+ V[3] = (RHS3 - tmp3) / m_A6;
+ double tmp2 = 0.0;
+ tmp2 += m_A5 * V[32];
+ V[2] = (RHS2 - tmp2) / m_A4;
+ double tmp1 = 0.0;
+ tmp1 += m_A3 * V[40];
+ V[1] = (RHS1 - tmp1) / m_A2;
+ double tmp0 = 0.0;
+ tmp0 += m_A1 * V[39];
+ V[0] = (RHS0 - tmp0) / m_A0;
+}
+
// 1942
static void nl_gcr_ce766957cb26ff3e_90_double_double(double * __restrict V, const double * __restrict go, const double * __restrict gt, const double * __restrict Idr, const double * const * __restrict cnV)
@@ -32137,6 +36844,2827 @@ static void nl_gcr_d27a39bc93616187_45_double_double(double * __restrict V, cons
V[0] = (RHS0 - tmp0) / m_A0;
}
+// starfire
+static void nl_gcr_d32effa2b0ea54a1_438_double_double(double * __restrict V, const double * __restrict go, const double * __restrict gt, const double * __restrict Idr, const double * const * __restrict cnV)
+
+{
+
+ plib::unused_var(cnV);
+ double m_A0(0.0);
+ double m_A1(0.0);
+ double m_A2(0.0);
+ double m_A3(0.0);
+ double m_A4(0.0);
+ double m_A5(0.0);
+ double m_A6(0.0);
+ double m_A7(0.0);
+ double m_A8(0.0);
+ double m_A9(0.0);
+ double m_A10(0.0);
+ double m_A11(0.0);
+ double m_A12(0.0);
+ double m_A13(0.0);
+ double m_A14(0.0);
+ double m_A15(0.0);
+ double m_A16(0.0);
+ double m_A17(0.0);
+ double m_A18(0.0);
+ double m_A19(0.0);
+ double m_A20(0.0);
+ double m_A21(0.0);
+ double m_A22(0.0);
+ double m_A23(0.0);
+ double m_A24(0.0);
+ double m_A25(0.0);
+ double m_A26(0.0);
+ double m_A27(0.0);
+ double m_A28(0.0);
+ double m_A29(0.0);
+ double m_A30(0.0);
+ double m_A31(0.0);
+ double m_A32(0.0);
+ double m_A33(0.0);
+ double m_A34(0.0);
+ double m_A35(0.0);
+ double m_A36(0.0);
+ double m_A37(0.0);
+ double m_A38(0.0);
+ double m_A39(0.0);
+ double m_A40(0.0);
+ double m_A41(0.0);
+ double m_A42(0.0);
+ double m_A43(0.0);
+ double m_A44(0.0);
+ double m_A45(0.0);
+ double m_A46(0.0);
+ double m_A47(0.0);
+ double m_A48(0.0);
+ double m_A49(0.0);
+ double m_A50(0.0);
+ double m_A51(0.0);
+ double m_A52(0.0);
+ double m_A53(0.0);
+ double m_A54(0.0);
+ double m_A55(0.0);
+ double m_A56(0.0);
+ double m_A57(0.0);
+ double m_A58(0.0);
+ double m_A59(0.0);
+ double m_A60(0.0);
+ double m_A61(0.0);
+ double m_A62(0.0);
+ double m_A63(0.0);
+ double m_A64(0.0);
+ double m_A65(0.0);
+ double m_A66(0.0);
+ double m_A67(0.0);
+ double m_A68(0.0);
+ double m_A69(0.0);
+ double m_A70(0.0);
+ double m_A71(0.0);
+ double m_A72(0.0);
+ double m_A73(0.0);
+ double m_A74(0.0);
+ double m_A75(0.0);
+ double m_A76(0.0);
+ double m_A77(0.0);
+ double m_A78(0.0);
+ double m_A79(0.0);
+ double m_A80(0.0);
+ double m_A81(0.0);
+ double m_A82(0.0);
+ double m_A83(0.0);
+ double m_A84(0.0);
+ double m_A85(0.0);
+ double m_A86(0.0);
+ double m_A87(0.0);
+ double m_A88(0.0);
+ double m_A89(0.0);
+ double m_A90(0.0);
+ double m_A91(0.0);
+ double m_A92(0.0);
+ double m_A93(0.0);
+ double m_A94(0.0);
+ double m_A95(0.0);
+ double m_A96(0.0);
+ double m_A97(0.0);
+ double m_A98(0.0);
+ double m_A99(0.0);
+ double m_A100(0.0);
+ double m_A101(0.0);
+ double m_A102(0.0);
+ double m_A103(0.0);
+ double m_A104(0.0);
+ double m_A105(0.0);
+ double m_A106(0.0);
+ double m_A107(0.0);
+ double m_A108(0.0);
+ double m_A109(0.0);
+ double m_A110(0.0);
+ double m_A111(0.0);
+ double m_A112(0.0);
+ double m_A113(0.0);
+ double m_A114(0.0);
+ double m_A115(0.0);
+ double m_A116(0.0);
+ double m_A117(0.0);
+ double m_A118(0.0);
+ double m_A119(0.0);
+ double m_A120(0.0);
+ double m_A121(0.0);
+ double m_A122(0.0);
+ double m_A123(0.0);
+ double m_A124(0.0);
+ double m_A125(0.0);
+ double m_A126(0.0);
+ double m_A127(0.0);
+ double m_A128(0.0);
+ double m_A129(0.0);
+ double m_A130(0.0);
+ double m_A131(0.0);
+ double m_A132(0.0);
+ double m_A133(0.0);
+ double m_A134(0.0);
+ double m_A135(0.0);
+ double m_A136(0.0);
+ double m_A137(0.0);
+ double m_A138(0.0);
+ double m_A139(0.0);
+ double m_A140(0.0);
+ double m_A141(0.0);
+ double m_A142(0.0);
+ double m_A143(0.0);
+ double m_A144(0.0);
+ double m_A145(0.0);
+ double m_A146(0.0);
+ double m_A147(0.0);
+ double m_A148(0.0);
+ double m_A149(0.0);
+ double m_A150(0.0);
+ double m_A151(0.0);
+ double m_A152(0.0);
+ double m_A153(0.0);
+ double m_A154(0.0);
+ double m_A155(0.0);
+ double m_A156(0.0);
+ double m_A157(0.0);
+ double m_A158(0.0);
+ double m_A159(0.0);
+ double m_A160(0.0);
+ double m_A161(0.0);
+ double m_A162(0.0);
+ double m_A163(0.0);
+ double m_A164(0.0);
+ double m_A165(0.0);
+ double m_A166(0.0);
+ double m_A167(0.0);
+ double m_A168(0.0);
+ double m_A169(0.0);
+ double m_A170(0.0);
+ double m_A171(0.0);
+ double m_A172(0.0);
+ double m_A173(0.0);
+ double m_A174(0.0);
+ double m_A175(0.0);
+ double m_A176(0.0);
+ double m_A177(0.0);
+ double m_A178(0.0);
+ double m_A179(0.0);
+ double m_A180(0.0);
+ double m_A181(0.0);
+ double m_A182(0.0);
+ double m_A183(0.0);
+ double m_A184(0.0);
+ double m_A185(0.0);
+ double m_A186(0.0);
+ double m_A187(0.0);
+ double m_A188(0.0);
+ double m_A189(0.0);
+ double m_A190(0.0);
+ double m_A191(0.0);
+ double m_A192(0.0);
+ double m_A193(0.0);
+ double m_A194(0.0);
+ double m_A195(0.0);
+ double m_A196(0.0);
+ double m_A197(0.0);
+ double m_A198(0.0);
+ double m_A199(0.0);
+ double m_A200(0.0);
+ double m_A201(0.0);
+ double m_A202(0.0);
+ double m_A203(0.0);
+ double m_A204(0.0);
+ double m_A205(0.0);
+ double m_A206(0.0);
+ double m_A207(0.0);
+ double m_A208(0.0);
+ double m_A209(0.0);
+ double m_A210(0.0);
+ double m_A211(0.0);
+ double m_A212(0.0);
+ double m_A213(0.0);
+ double m_A214(0.0);
+ double m_A215(0.0);
+ double m_A216(0.0);
+ double m_A217(0.0);
+ double m_A218(0.0);
+ double m_A219(0.0);
+ double m_A220(0.0);
+ double m_A221(0.0);
+ double m_A222(0.0);
+ double m_A223(0.0);
+ double m_A224(0.0);
+ double m_A225(0.0);
+ double m_A226(0.0);
+ double m_A227(0.0);
+ double m_A228(0.0);
+ double m_A229(0.0);
+ double m_A230(0.0);
+ double m_A231(0.0);
+ double m_A232(0.0);
+ double m_A233(0.0);
+ double m_A234(0.0);
+ double m_A235(0.0);
+ double m_A236(0.0);
+ double m_A237(0.0);
+ double m_A238(0.0);
+ double m_A239(0.0);
+ double m_A240(0.0);
+ double m_A241(0.0);
+ double m_A242(0.0);
+ double m_A243(0.0);
+ double m_A244(0.0);
+ double m_A245(0.0);
+ double m_A246(0.0);
+ double m_A247(0.0);
+ double m_A248(0.0);
+ double m_A249(0.0);
+ double m_A250(0.0);
+ double m_A251(0.0);
+ double m_A252(0.0);
+ double m_A253(0.0);
+ double m_A254(0.0);
+ double m_A255(0.0);
+ double m_A256(0.0);
+ double m_A257(0.0);
+ double m_A258(0.0);
+ double m_A259(0.0);
+ double m_A260(0.0);
+ double m_A261(0.0);
+ double m_A262(0.0);
+ double m_A263(0.0);
+ double m_A264(0.0);
+ double m_A265(0.0);
+ double m_A266(0.0);
+ double m_A267(0.0);
+ double m_A268(0.0);
+ double m_A269(0.0);
+ double m_A270(0.0);
+ double m_A271(0.0);
+ double m_A272(0.0);
+ double m_A273(0.0);
+ double m_A274(0.0);
+ double m_A275(0.0);
+ double m_A276(0.0);
+ double m_A277(0.0);
+ double m_A278(0.0);
+ double m_A279(0.0);
+ double m_A280(0.0);
+ double m_A281(0.0);
+ double m_A282(0.0);
+ double m_A283(0.0);
+ double m_A284(0.0);
+ double m_A285(0.0);
+ double m_A286(0.0);
+ double m_A287(0.0);
+ double m_A288(0.0);
+ double m_A289(0.0);
+ double m_A290(0.0);
+ double m_A291(0.0);
+ double m_A292(0.0);
+ double m_A293(0.0);
+ double m_A294(0.0);
+ double m_A295(0.0);
+ double m_A296(0.0);
+ double m_A297(0.0);
+ double m_A298(0.0);
+ double m_A299(0.0);
+ double m_A300(0.0);
+ double m_A301(0.0);
+ double m_A302(0.0);
+ double m_A303(0.0);
+ double m_A304(0.0);
+ double m_A305(0.0);
+ double m_A306(0.0);
+ double m_A307(0.0);
+ double m_A308(0.0);
+ double m_A309(0.0);
+ double m_A310(0.0);
+ double m_A311(0.0);
+ double m_A312(0.0);
+ double m_A313(0.0);
+ double m_A314(0.0);
+ double m_A315(0.0);
+ double m_A316(0.0);
+ double m_A317(0.0);
+ double m_A318(0.0);
+ double m_A319(0.0);
+ double m_A320(0.0);
+ double m_A321(0.0);
+ double m_A322(0.0);
+ double m_A323(0.0);
+ double m_A324(0.0);
+ double m_A325(0.0);
+ double m_A326(0.0);
+ double m_A327(0.0);
+ double m_A328(0.0);
+ double m_A329(0.0);
+ double m_A330(0.0);
+ double m_A331(0.0);
+ double m_A332(0.0);
+ double m_A333(0.0);
+ double m_A334(0.0);
+ double m_A335(0.0);
+ double m_A336(0.0);
+ double m_A337(0.0);
+ double m_A338(0.0);
+ double m_A339(0.0);
+ double m_A340(0.0);
+ double m_A341(0.0);
+ double m_A342(0.0);
+ double m_A343(0.0);
+ double m_A344(0.0);
+ double m_A345(0.0);
+ double m_A346(0.0);
+ double m_A347(0.0);
+ double m_A348(0.0);
+ double m_A349(0.0);
+ double m_A350(0.0);
+ double m_A351(0.0);
+ double m_A352(0.0);
+ double m_A353(0.0);
+ double m_A354(0.0);
+ double m_A355(0.0);
+ double m_A356(0.0);
+ double m_A357(0.0);
+ double m_A358(0.0);
+ double m_A359(0.0);
+ double m_A360(0.0);
+ double m_A361(0.0);
+ double m_A362(0.0);
+ double m_A363(0.0);
+ double m_A364(0.0);
+ double m_A365(0.0);
+ double m_A366(0.0);
+ double m_A367(0.0);
+ double m_A368(0.0);
+ double m_A369(0.0);
+ double m_A370(0.0);
+ double m_A371(0.0);
+ double m_A372(0.0);
+ double m_A373(0.0);
+ double m_A374(0.0);
+ double m_A375(0.0);
+ double m_A376(0.0);
+ double m_A377(0.0);
+ double m_A378(0.0);
+ double m_A379(0.0);
+ double m_A380(0.0);
+ double m_A381(0.0);
+ double m_A382(0.0);
+ double m_A383(0.0);
+ double m_A384(0.0);
+ double m_A385(0.0);
+ double m_A386(0.0);
+ double m_A387(0.0);
+ double m_A388(0.0);
+ double m_A389(0.0);
+ double m_A390(0.0);
+ double m_A391(0.0);
+ double m_A392(0.0);
+ double m_A393(0.0);
+ double m_A394(0.0);
+ double m_A395(0.0);
+ double m_A396(0.0);
+ double m_A397(0.0);
+ double m_A398(0.0);
+ double m_A399(0.0);
+ double m_A400(0.0);
+ double m_A401(0.0);
+ double m_A402(0.0);
+ double m_A403(0.0);
+ double m_A404(0.0);
+ double m_A405(0.0);
+ double m_A406(0.0);
+ double m_A407(0.0);
+ double m_A408(0.0);
+ double m_A409(0.0);
+ double m_A410(0.0);
+ double m_A411(0.0);
+ double m_A412(0.0);
+ double m_A413(0.0);
+ double m_A414(0.0);
+ double m_A415(0.0);
+ double m_A416(0.0);
+ double m_A417(0.0);
+ double m_A418(0.0);
+ double m_A419(0.0);
+ double m_A420(0.0);
+ double m_A421(0.0);
+ double m_A422(0.0);
+ double m_A423(0.0);
+ double m_A424(0.0);
+ double m_A425(0.0);
+ double m_A426(0.0);
+ double m_A427(0.0);
+ double m_A428(0.0);
+ double m_A429(0.0);
+ double m_A430(0.0);
+ double m_A431(0.0);
+ double m_A432(0.0);
+ double m_A433(0.0);
+ double m_A434(0.0);
+ double m_A435(0.0);
+ double m_A436(0.0);
+ double m_A437(0.0);
+ m_A0 += gt[0];
+ m_A0 += gt[1];
+ m_A1 += go[0];
+ double RHS0 = Idr[0];
+ RHS0 += Idr[1];
+ RHS0 -= go[1] * *cnV[1];
+ m_A2 += gt[2];
+ m_A2 += gt[3];
+ m_A3 += go[2];
+ double RHS1 = Idr[2];
+ RHS1 += Idr[3];
+ RHS1 -= go[3] * *cnV[3];
+ m_A4 += gt[4];
+ m_A4 += gt[5];
+ m_A4 += gt[6];
+ m_A4 += gt[7];
+ m_A7 += go[4];
+ m_A6 += go[5];
+ m_A5 += go[6];
+ double RHS2 = Idr[4];
+ RHS2 += Idr[5];
+ RHS2 += Idr[6];
+ RHS2 += Idr[7];
+ RHS2 -= go[7] * *cnV[7];
+ m_A8 += gt[8];
+ m_A8 += gt[9];
+ m_A9 += go[8];
+ double RHS3 = Idr[8];
+ RHS3 += Idr[9];
+ RHS3 -= go[9] * *cnV[9];
+ m_A10 += gt[10];
+ m_A10 += gt[11];
+ m_A10 += gt[12];
+ m_A11 += go[10];
+ m_A12 += go[11];
+ double RHS4 = Idr[10];
+ RHS4 += Idr[11];
+ RHS4 += Idr[12];
+ RHS4 -= go[12] * *cnV[12];
+ m_A13 += gt[13];
+ m_A13 += gt[14];
+ m_A13 += gt[15];
+ m_A14 += go[13];
+ m_A15 += go[14];
+ double RHS5 = Idr[13];
+ RHS5 += Idr[14];
+ RHS5 += Idr[15];
+ RHS5 -= go[15] * *cnV[15];
+ m_A16 += gt[16];
+ m_A16 += gt[17];
+ m_A17 += go[16];
+ double RHS6 = Idr[16];
+ RHS6 += Idr[17];
+ RHS6 -= go[17] * *cnV[17];
+ m_A18 += gt[18];
+ m_A18 += gt[19];
+ m_A18 += gt[20];
+ m_A18 += gt[21];
+ m_A18 += gt[22];
+ m_A18 += gt[23];
+ m_A18 += gt[24];
+ m_A22 += go[18];
+ m_A21 += go[19];
+ m_A20 += go[20];
+ m_A19 += go[21];
+ double RHS7 = Idr[18];
+ RHS7 += Idr[19];
+ RHS7 += Idr[20];
+ RHS7 += Idr[21];
+ RHS7 += Idr[22];
+ RHS7 += Idr[23];
+ RHS7 += Idr[24];
+ RHS7 -= go[22] * *cnV[22];
+ RHS7 -= go[23] * *cnV[23];
+ RHS7 -= go[24] * *cnV[24];
+ m_A23 += gt[25];
+ m_A23 += gt[26];
+ m_A23 += gt[27];
+ m_A23 += gt[28];
+ m_A23 += gt[29];
+ m_A23 += gt[30];
+ m_A23 += gt[31];
+ m_A27 += go[25];
+ m_A26 += go[26];
+ m_A25 += go[27];
+ m_A24 += go[28];
+ double RHS8 = Idr[25];
+ RHS8 += Idr[26];
+ RHS8 += Idr[27];
+ RHS8 += Idr[28];
+ RHS8 += Idr[29];
+ RHS8 += Idr[30];
+ RHS8 += Idr[31];
+ RHS8 -= go[29] * *cnV[29];
+ RHS8 -= go[30] * *cnV[30];
+ RHS8 -= go[31] * *cnV[31];
+ m_A28 += gt[32];
+ m_A28 += gt[33];
+ m_A29 += go[32];
+ double RHS9 = Idr[32];
+ RHS9 += Idr[33];
+ RHS9 -= go[33] * *cnV[33];
+ m_A30 += gt[34];
+ m_A30 += gt[35];
+ m_A31 += go[34];
+ double RHS10 = Idr[34];
+ RHS10 += Idr[35];
+ RHS10 -= go[35] * *cnV[35];
+ m_A32 += gt[36];
+ m_A32 += gt[37];
+ m_A32 += gt[38];
+ m_A32 += gt[39];
+ m_A33 += go[36];
+ m_A34 += go[37];
+ double RHS11 = Idr[36];
+ RHS11 += Idr[37];
+ RHS11 += Idr[38];
+ RHS11 += Idr[39];
+ RHS11 -= go[38] * *cnV[38];
+ RHS11 -= go[39] * *cnV[39];
+ m_A35 += gt[40];
+ m_A35 += gt[41];
+ m_A35 += gt[42];
+ m_A36 += go[40];
+ m_A37 += go[41];
+ double RHS12 = Idr[40];
+ RHS12 += Idr[41];
+ RHS12 += Idr[42];
+ RHS12 -= go[42] * *cnV[42];
+ m_A38 += gt[43];
+ m_A38 += gt[44];
+ m_A38 += gt[45];
+ m_A39 += go[43];
+ double RHS13 = Idr[43];
+ RHS13 += Idr[44];
+ RHS13 += Idr[45];
+ RHS13 -= go[44] * *cnV[44];
+ RHS13 -= go[45] * *cnV[45];
+ m_A40 += gt[46];
+ m_A40 += gt[47];
+ m_A40 += gt[48];
+ m_A42 += go[46];
+ m_A41 += go[47];
+ double RHS14 = Idr[46];
+ RHS14 += Idr[47];
+ RHS14 += Idr[48];
+ RHS14 -= go[48] * *cnV[48];
+ m_A43 += gt[49];
+ m_A43 += gt[50];
+ m_A43 += gt[51];
+ m_A44 += go[49];
+ m_A45 += go[50];
+ double RHS15 = Idr[49];
+ RHS15 += Idr[50];
+ RHS15 += Idr[51];
+ RHS15 -= go[51] * *cnV[51];
+ m_A46 += gt[52];
+ m_A46 += gt[53];
+ m_A46 += gt[54];
+ m_A46 += gt[55];
+ m_A46 += gt[56];
+ m_A46 += gt[57];
+ m_A46 += gt[58];
+ m_A50 += go[52];
+ m_A49 += go[53];
+ m_A47 += go[54];
+ m_A48 += go[55];
+ double RHS16 = Idr[52];
+ RHS16 += Idr[53];
+ RHS16 += Idr[54];
+ RHS16 += Idr[55];
+ RHS16 += Idr[56];
+ RHS16 += Idr[57];
+ RHS16 += Idr[58];
+ RHS16 -= go[56] * *cnV[56];
+ RHS16 -= go[57] * *cnV[57];
+ RHS16 -= go[58] * *cnV[58];
+ m_A51 += gt[59];
+ m_A51 += gt[60];
+ m_A51 += gt[61];
+ m_A52 += go[59];
+ double RHS17 = Idr[59];
+ RHS17 += Idr[60];
+ RHS17 += Idr[61];
+ RHS17 -= go[60] * *cnV[60];
+ RHS17 -= go[61] * *cnV[61];
+ m_A53 += gt[62];
+ m_A53 += gt[63];
+ m_A53 += gt[64];
+ m_A55 += go[62];
+ m_A54 += go[63];
+ double RHS18 = Idr[62];
+ RHS18 += Idr[63];
+ RHS18 += Idr[64];
+ RHS18 -= go[64] * *cnV[64];
+ m_A56 += gt[65];
+ m_A56 += gt[66];
+ m_A56 += gt[67];
+ m_A57 += go[65];
+ double RHS19 = Idr[65];
+ RHS19 += Idr[66];
+ RHS19 += Idr[67];
+ RHS19 -= go[66] * *cnV[66];
+ RHS19 -= go[67] * *cnV[67];
+ m_A58 += gt[68];
+ m_A58 += gt[69];
+ m_A58 += gt[70];
+ m_A59 += go[68];
+ double RHS20 = Idr[68];
+ RHS20 += Idr[69];
+ RHS20 += Idr[70];
+ RHS20 -= go[69] * *cnV[69];
+ RHS20 -= go[70] * *cnV[70];
+ m_A60 += gt[71];
+ m_A60 += gt[72];
+ m_A61 += go[71];
+ double RHS21 = Idr[71];
+ RHS21 += Idr[72];
+ RHS21 -= go[72] * *cnV[72];
+ m_A62 += gt[73];
+ m_A62 += gt[74];
+ m_A62 += gt[75];
+ m_A63 += go[73];
+ double RHS22 = Idr[73];
+ RHS22 += Idr[74];
+ RHS22 += Idr[75];
+ RHS22 -= go[74] * *cnV[74];
+ RHS22 -= go[75] * *cnV[75];
+ m_A64 += gt[76];
+ m_A64 += gt[77];
+ m_A65 += go[76];
+ double RHS23 = Idr[76];
+ RHS23 += Idr[77];
+ RHS23 -= go[77] * *cnV[77];
+ m_A66 += gt[78];
+ m_A66 += gt[79];
+ m_A66 += gt[80];
+ m_A67 += go[78];
+ double RHS24 = Idr[78];
+ RHS24 += Idr[79];
+ RHS24 += Idr[80];
+ RHS24 -= go[79] * *cnV[79];
+ RHS24 -= go[80] * *cnV[80];
+ m_A68 += gt[81];
+ m_A68 += gt[82];
+ m_A69 += go[81];
+ double RHS25 = Idr[81];
+ RHS25 += Idr[82];
+ RHS25 -= go[82] * *cnV[82];
+ m_A70 += gt[83];
+ m_A70 += gt[84];
+ m_A70 += gt[85];
+ m_A70 += gt[86];
+ m_A72 += go[83];
+ m_A71 += go[84];
+ m_A71 += go[85];
+ double RHS26 = Idr[83];
+ RHS26 += Idr[84];
+ RHS26 += Idr[85];
+ RHS26 += Idr[86];
+ RHS26 -= go[86] * *cnV[86];
+ m_A73 += gt[87];
+ m_A73 += gt[88];
+ m_A73 += gt[89];
+ m_A73 += gt[90];
+ m_A73 += gt[91];
+ m_A73 += gt[92];
+ m_A73 += gt[93];
+ m_A74 += go[87];
+ m_A75 += go[88];
+ double RHS27 = Idr[87];
+ RHS27 += Idr[88];
+ RHS27 += Idr[89];
+ RHS27 += Idr[90];
+ RHS27 += Idr[91];
+ RHS27 += Idr[92];
+ RHS27 += Idr[93];
+ RHS27 -= go[89] * *cnV[89];
+ RHS27 -= go[90] * *cnV[90];
+ RHS27 -= go[91] * *cnV[91];
+ RHS27 -= go[92] * *cnV[92];
+ RHS27 -= go[93] * *cnV[93];
+ m_A76 += gt[94];
+ m_A76 += gt[95];
+ m_A78 += go[94];
+ m_A77 += go[95];
+ double RHS28 = Idr[94];
+ RHS28 += Idr[95];
+ m_A79 += gt[96];
+ m_A79 += gt[97];
+ m_A79 += gt[98];
+ m_A79 += gt[99];
+ m_A79 += gt[100];
+ m_A79 += gt[101];
+ m_A79 += gt[102];
+ m_A80 += go[96];
+ double RHS29 = Idr[96];
+ RHS29 += Idr[97];
+ RHS29 += Idr[98];
+ RHS29 += Idr[99];
+ RHS29 += Idr[100];
+ RHS29 += Idr[101];
+ RHS29 += Idr[102];
+ RHS29 -= go[97] * *cnV[97];
+ RHS29 -= go[98] * *cnV[98];
+ RHS29 -= go[99] * *cnV[99];
+ RHS29 -= go[100] * *cnV[100];
+ RHS29 -= go[101] * *cnV[101];
+ RHS29 -= go[102] * *cnV[102];
+ m_A81 += gt[103];
+ m_A81 += gt[104];
+ m_A81 += gt[105];
+ m_A81 += gt[106];
+ m_A82 += go[103];
+ m_A83 += go[104];
+ double RHS30 = Idr[103];
+ RHS30 += Idr[104];
+ RHS30 += Idr[105];
+ RHS30 += Idr[106];
+ RHS30 -= go[105] * *cnV[105];
+ RHS30 -= go[106] * *cnV[106];
+ m_A84 += gt[107];
+ m_A84 += gt[108];
+ m_A85 += go[107];
+ double RHS31 = Idr[107];
+ RHS31 += Idr[108];
+ RHS31 -= go[108] * *cnV[108];
+ m_A86 += gt[109];
+ m_A86 += gt[110];
+ m_A86 += gt[111];
+ m_A86 += gt[112];
+ m_A86 += gt[113];
+ m_A86 += gt[114];
+ m_A86 += gt[115];
+ m_A88 += go[109];
+ m_A87 += go[110];
+ double RHS32 = Idr[109];
+ RHS32 += Idr[110];
+ RHS32 += Idr[111];
+ RHS32 += Idr[112];
+ RHS32 += Idr[113];
+ RHS32 += Idr[114];
+ RHS32 += Idr[115];
+ RHS32 -= go[111] * *cnV[111];
+ RHS32 -= go[112] * *cnV[112];
+ RHS32 -= go[113] * *cnV[113];
+ RHS32 -= go[114] * *cnV[114];
+ RHS32 -= go[115] * *cnV[115];
+ m_A89 += gt[116];
+ m_A89 += gt[117];
+ m_A90 += go[116];
+ double RHS33 = Idr[116];
+ RHS33 += Idr[117];
+ RHS33 -= go[117] * *cnV[117];
+ m_A91 += gt[118];
+ m_A91 += gt[119];
+ m_A91 += gt[120];
+ m_A91 += gt[121];
+ m_A93 += go[118];
+ m_A92 += go[119];
+ double RHS34 = Idr[118];
+ RHS34 += Idr[119];
+ RHS34 += Idr[120];
+ RHS34 += Idr[121];
+ RHS34 -= go[120] * *cnV[120];
+ RHS34 -= go[121] * *cnV[121];
+ m_A94 += gt[122];
+ m_A94 += gt[123];
+ m_A94 += gt[124];
+ m_A94 += gt[125];
+ m_A94 += gt[126];
+ m_A94 += gt[127];
+ m_A94 += gt[128];
+ m_A95 += go[122];
+ double RHS35 = Idr[122];
+ RHS35 += Idr[123];
+ RHS35 += Idr[124];
+ RHS35 += Idr[125];
+ RHS35 += Idr[126];
+ RHS35 += Idr[127];
+ RHS35 += Idr[128];
+ RHS35 -= go[123] * *cnV[123];
+ RHS35 -= go[124] * *cnV[124];
+ RHS35 -= go[125] * *cnV[125];
+ RHS35 -= go[126] * *cnV[126];
+ RHS35 -= go[127] * *cnV[127];
+ RHS35 -= go[128] * *cnV[128];
+ m_A96 += gt[129];
+ m_A96 += gt[130];
+ m_A96 += gt[131];
+ m_A97 += go[129];
+ m_A98 += go[130];
+ double RHS36 = Idr[129];
+ RHS36 += Idr[130];
+ RHS36 += Idr[131];
+ RHS36 -= go[131] * *cnV[131];
+ m_A99 += gt[132];
+ m_A99 += gt[133];
+ m_A99 += gt[134];
+ m_A99 += gt[135];
+ m_A100 += go[132];
+ m_A101 += go[133];
+ double RHS37 = Idr[132];
+ RHS37 += Idr[133];
+ RHS37 += Idr[134];
+ RHS37 += Idr[135];
+ RHS37 -= go[134] * *cnV[134];
+ RHS37 -= go[135] * *cnV[135];
+ m_A102 += gt[136];
+ m_A102 += gt[137];
+ m_A102 += gt[138];
+ m_A102 += gt[139];
+ m_A103 += go[136];
+ m_A104 += go[137];
+ double RHS38 = Idr[136];
+ RHS38 += Idr[137];
+ RHS38 += Idr[138];
+ RHS38 += Idr[139];
+ RHS38 -= go[138] * *cnV[138];
+ RHS38 -= go[139] * *cnV[139];
+ m_A105 += gt[140];
+ m_A105 += gt[141];
+ m_A105 += gt[142];
+ m_A107 += go[140];
+ m_A106 += go[141];
+ double RHS39 = Idr[140];
+ RHS39 += Idr[141];
+ RHS39 += Idr[142];
+ RHS39 -= go[142] * *cnV[142];
+ m_A108 += gt[143];
+ m_A108 += gt[144];
+ m_A108 += gt[145];
+ m_A110 += go[143];
+ m_A109 += go[144];
+ double RHS40 = Idr[143];
+ RHS40 += Idr[144];
+ RHS40 += Idr[145];
+ RHS40 -= go[145] * *cnV[145];
+ m_A111 += gt[146];
+ m_A111 += gt[147];
+ m_A111 += gt[148];
+ m_A112 += go[146];
+ m_A113 += go[147];
+ double RHS41 = Idr[146];
+ RHS41 += Idr[147];
+ RHS41 += Idr[148];
+ RHS41 -= go[148] * *cnV[148];
+ m_A114 += gt[149];
+ m_A114 += gt[150];
+ m_A114 += gt[151];
+ m_A114 += gt[152];
+ m_A116 += go[149];
+ m_A114 += go[150];
+ m_A114 += go[151];
+ m_A115 += go[152];
+ double RHS42 = Idr[149];
+ RHS42 += Idr[150];
+ RHS42 += Idr[151];
+ RHS42 += Idr[152];
+ m_A117 += gt[153];
+ m_A117 += gt[154];
+ m_A117 += gt[155];
+ m_A117 += gt[156];
+ m_A119 += go[153];
+ m_A117 += go[154];
+ m_A117 += go[155];
+ m_A118 += go[156];
+ double RHS43 = Idr[153];
+ RHS43 += Idr[154];
+ RHS43 += Idr[155];
+ RHS43 += Idr[156];
+ m_A120 += gt[157];
+ m_A120 += gt[158];
+ m_A120 += gt[159];
+ m_A120 += gt[160];
+ m_A122 += go[157];
+ m_A120 += go[158];
+ m_A120 += go[159];
+ m_A121 += go[160];
+ double RHS44 = Idr[157];
+ RHS44 += Idr[158];
+ RHS44 += Idr[159];
+ RHS44 += Idr[160];
+ m_A123 += gt[161];
+ m_A123 += gt[162];
+ m_A123 += gt[163];
+ m_A124 += go[161];
+ m_A125 += go[162];
+ double RHS45 = Idr[161];
+ RHS45 += Idr[162];
+ RHS45 += Idr[163];
+ RHS45 -= go[163] * *cnV[163];
+ m_A128 += gt[164];
+ m_A128 += gt[165];
+ m_A128 += gt[166];
+ m_A128 += gt[167];
+ m_A127 += go[164];
+ m_A126 += go[165];
+ double RHS46 = Idr[164];
+ RHS46 += Idr[165];
+ RHS46 += Idr[166];
+ RHS46 += Idr[167];
+ RHS46 -= go[166] * *cnV[166];
+ RHS46 -= go[167] * *cnV[167];
+ m_A134 += gt[168];
+ m_A134 += gt[169];
+ m_A134 += gt[170];
+ m_A134 += gt[171];
+ m_A132 += go[168];
+ m_A131 += go[169];
+ double RHS47 = Idr[168];
+ RHS47 += Idr[169];
+ RHS47 += Idr[170];
+ RHS47 += Idr[171];
+ RHS47 -= go[170] * *cnV[170];
+ RHS47 -= go[171] * *cnV[171];
+ m_A141 += gt[172];
+ m_A141 += gt[173];
+ m_A141 += gt[174];
+ m_A140 += go[172];
+ m_A139 += go[173];
+ double RHS48 = Idr[172];
+ RHS48 += Idr[173];
+ RHS48 += Idr[174];
+ RHS48 -= go[174] * *cnV[174];
+ m_A145 += gt[175];
+ m_A145 += gt[176];
+ m_A145 += gt[177];
+ m_A144 += go[175];
+ m_A143 += go[176];
+ double RHS49 = Idr[175];
+ RHS49 += Idr[176];
+ RHS49 += Idr[177];
+ RHS49 -= go[177] * *cnV[177];
+ m_A148 += gt[178];
+ m_A148 += gt[179];
+ m_A148 += gt[180];
+ m_A147 += go[178];
+ m_A149 += go[179];
+ double RHS50 = Idr[178];
+ RHS50 += Idr[179];
+ RHS50 += Idr[180];
+ RHS50 -= go[180] * *cnV[180];
+ m_A152 += gt[181];
+ m_A152 += gt[182];
+ m_A152 += gt[183];
+ m_A152 += gt[184];
+ m_A150 += go[181];
+ m_A151 += go[182];
+ m_A153 += go[183];
+ double RHS51 = Idr[181];
+ RHS51 += Idr[182];
+ RHS51 += Idr[183];
+ RHS51 += Idr[184];
+ RHS51 -= go[184] * *cnV[184];
+ m_A157 += gt[185];
+ m_A157 += gt[186];
+ m_A157 += gt[187];
+ m_A156 += go[185];
+ m_A155 += go[186];
+ m_A154 += go[187];
+ double RHS52 = Idr[185];
+ RHS52 += Idr[186];
+ RHS52 += Idr[187];
+ m_A160 += gt[188];
+ m_A160 += gt[189];
+ m_A160 += gt[190];
+ m_A160 += gt[191];
+ m_A161 += go[188];
+ m_A159 += go[189];
+ double RHS53 = Idr[188];
+ RHS53 += Idr[189];
+ RHS53 += Idr[190];
+ RHS53 += Idr[191];
+ RHS53 -= go[190] * *cnV[190];
+ RHS53 -= go[191] * *cnV[191];
+ m_A166 += gt[192];
+ m_A166 += gt[193];
+ m_A166 += gt[194];
+ m_A166 += gt[195];
+ m_A168 += go[192];
+ m_A163 += go[193];
+ m_A162 += go[194];
+ double RHS54 = Idr[192];
+ RHS54 += Idr[193];
+ RHS54 += Idr[194];
+ RHS54 += Idr[195];
+ RHS54 -= go[195] * *cnV[195];
+ m_A173 += gt[196];
+ m_A173 += gt[197];
+ m_A173 += gt[198];
+ m_A173 += gt[199];
+ m_A173 += gt[200];
+ m_A173 += gt[201];
+ m_A173 += gt[202];
+ m_A174 += go[196];
+ m_A171 += go[197];
+ double RHS55 = Idr[196];
+ RHS55 += Idr[197];
+ RHS55 += Idr[198];
+ RHS55 += Idr[199];
+ RHS55 += Idr[200];
+ RHS55 += Idr[201];
+ RHS55 += Idr[202];
+ RHS55 -= go[198] * *cnV[198];
+ RHS55 -= go[199] * *cnV[199];
+ RHS55 -= go[200] * *cnV[200];
+ RHS55 -= go[201] * *cnV[201];
+ RHS55 -= go[202] * *cnV[202];
+ m_A180 += gt[203];
+ m_A180 += gt[204];
+ m_A180 += gt[205];
+ m_A180 += gt[206];
+ m_A180 += gt[207];
+ m_A180 += gt[208];
+ m_A184 += go[203];
+ m_A177 += go[204];
+ m_A176 += go[205];
+ m_A175 += go[206];
+ m_A182 += go[207];
+ double RHS56 = Idr[203];
+ RHS56 += Idr[204];
+ RHS56 += Idr[205];
+ RHS56 += Idr[206];
+ RHS56 += Idr[207];
+ RHS56 += Idr[208];
+ RHS56 -= go[208] * *cnV[208];
+ m_A188 += gt[209];
+ m_A188 += gt[210];
+ m_A188 += gt[211];
+ m_A188 += gt[212];
+ m_A188 += gt[213];
+ m_A188 += gt[214];
+ m_A185 += go[209];
+ m_A187 += go[210];
+ m_A186 += go[211];
+ double RHS57 = Idr[209];
+ RHS57 += Idr[210];
+ RHS57 += Idr[211];
+ RHS57 += Idr[212];
+ RHS57 += Idr[213];
+ RHS57 += Idr[214];
+ RHS57 -= go[212] * *cnV[212];
+ RHS57 -= go[213] * *cnV[213];
+ RHS57 -= go[214] * *cnV[214];
+ m_A191 += gt[215];
+ m_A191 += gt[216];
+ m_A191 += gt[217];
+ m_A190 += go[215];
+ m_A192 += go[216];
+ double RHS58 = Idr[215];
+ RHS58 += Idr[216];
+ RHS58 += Idr[217];
+ RHS58 -= go[217] * *cnV[217];
+ m_A193 += gt[218];
+ m_A193 += gt[219];
+ m_A193 += gt[220];
+ m_A193 += gt[221];
+ m_A195 += go[218];
+ m_A193 += go[219];
+ m_A193 += go[220];
+ m_A194 += go[221];
+ double RHS59 = Idr[218];
+ RHS59 += Idr[219];
+ RHS59 += Idr[220];
+ RHS59 += Idr[221];
+ m_A197 += gt[222];
+ m_A197 += gt[223];
+ m_A197 += gt[224];
+ m_A197 += gt[225];
+ m_A197 += gt[226];
+ m_A197 += gt[227];
+ m_A197 += gt[228];
+ m_A201 += go[222];
+ m_A200 += go[223];
+ m_A199 += go[224];
+ m_A196 += go[225];
+ double RHS60 = Idr[222];
+ RHS60 += Idr[223];
+ RHS60 += Idr[224];
+ RHS60 += Idr[225];
+ RHS60 += Idr[226];
+ RHS60 += Idr[227];
+ RHS60 += Idr[228];
+ RHS60 -= go[226] * *cnV[226];
+ RHS60 -= go[227] * *cnV[227];
+ RHS60 -= go[228] * *cnV[228];
+ m_A203 += gt[229];
+ m_A203 += gt[230];
+ m_A203 += gt[231];
+ m_A202 += go[229];
+ m_A204 += go[230];
+ double RHS61 = Idr[229];
+ RHS61 += Idr[230];
+ RHS61 += Idr[231];
+ RHS61 -= go[231] * *cnV[231];
+ m_A207 += gt[232];
+ m_A207 += gt[233];
+ m_A207 += gt[234];
+ m_A207 += gt[235];
+ m_A207 += gt[236];
+ m_A208 += go[232];
+ m_A205 += go[233];
+ m_A209 += go[234];
+ double RHS62 = Idr[232];
+ RHS62 += Idr[233];
+ RHS62 += Idr[234];
+ RHS62 += Idr[235];
+ RHS62 += Idr[236];
+ RHS62 -= go[235] * *cnV[235];
+ RHS62 -= go[236] * *cnV[236];
+ m_A211 += gt[237];
+ m_A211 += gt[238];
+ m_A211 += gt[239];
+ m_A211 += gt[240];
+ m_A211 += gt[241];
+ m_A211 += gt[242];
+ m_A210 += go[237];
+ m_A213 += go[238];
+ m_A212 += go[239];
+ double RHS63 = Idr[237];
+ RHS63 += Idr[238];
+ RHS63 += Idr[239];
+ RHS63 += Idr[240];
+ RHS63 += Idr[241];
+ RHS63 += Idr[242];
+ RHS63 -= go[240] * *cnV[240];
+ RHS63 -= go[241] * *cnV[241];
+ RHS63 -= go[242] * *cnV[242];
+ m_A216 += gt[243];
+ m_A216 += gt[244];
+ m_A216 += gt[245];
+ m_A216 += gt[246];
+ m_A216 += gt[247];
+ m_A216 += gt[248];
+ m_A216 += gt[249];
+ m_A217 += go[243];
+ m_A217 += go[244];
+ m_A215 += go[245];
+ m_A215 += go[246];
+ m_A214 += go[247];
+ double RHS64 = Idr[243];
+ RHS64 += Idr[244];
+ RHS64 += Idr[245];
+ RHS64 += Idr[246];
+ RHS64 += Idr[247];
+ RHS64 += Idr[248];
+ RHS64 += Idr[249];
+ RHS64 -= go[248] * *cnV[248];
+ RHS64 -= go[249] * *cnV[249];
+ m_A220 += gt[250];
+ m_A220 += gt[251];
+ m_A220 += gt[252];
+ m_A220 += gt[253];
+ m_A218 += go[250];
+ m_A219 += go[251];
+ m_A221 += go[252];
+ double RHS65 = Idr[250];
+ RHS65 += Idr[251];
+ RHS65 += Idr[252];
+ RHS65 += Idr[253];
+ RHS65 -= go[253] * *cnV[253];
+ m_A223 += gt[254];
+ m_A223 += gt[255];
+ m_A223 += gt[256];
+ m_A225 += go[254];
+ m_A222 += go[255];
+ double RHS66 = Idr[254];
+ RHS66 += Idr[255];
+ RHS66 += Idr[256];
+ RHS66 -= go[256] * *cnV[256];
+ m_A228 += gt[257];
+ m_A228 += gt[258];
+ m_A228 += gt[259];
+ m_A229 += go[257];
+ m_A226 += go[258];
+ double RHS67 = Idr[257];
+ RHS67 += Idr[258];
+ RHS67 += Idr[259];
+ RHS67 -= go[259] * *cnV[259];
+ m_A232 += gt[260];
+ m_A232 += gt[261];
+ m_A231 += go[260];
+ m_A230 += go[261];
+ double RHS68 = Idr[260];
+ RHS68 += Idr[261];
+ m_A234 += gt[262];
+ m_A234 += gt[263];
+ m_A234 += gt[264];
+ m_A234 += gt[265];
+ m_A234 += gt[266];
+ m_A234 += gt[267];
+ m_A234 += gt[268];
+ m_A235 += go[262];
+ double RHS69 = Idr[262];
+ RHS69 += Idr[263];
+ RHS69 += Idr[264];
+ RHS69 += Idr[265];
+ RHS69 += Idr[266];
+ RHS69 += Idr[267];
+ RHS69 += Idr[268];
+ RHS69 -= go[263] * *cnV[263];
+ RHS69 -= go[264] * *cnV[264];
+ RHS69 -= go[265] * *cnV[265];
+ RHS69 -= go[266] * *cnV[266];
+ RHS69 -= go[267] * *cnV[267];
+ RHS69 -= go[268] * *cnV[268];
+ m_A238 += gt[269];
+ m_A238 += gt[270];
+ m_A238 += gt[271];
+ m_A240 += go[269];
+ m_A236 += go[270];
+ double RHS70 = Idr[269];
+ RHS70 += Idr[270];
+ RHS70 += Idr[271];
+ RHS70 -= go[271] * *cnV[271];
+ m_A244 += gt[272];
+ m_A244 += gt[273];
+ m_A244 += gt[274];
+ m_A245 += go[272];
+ m_A242 += go[273];
+ m_A246 += go[274];
+ double RHS71 = Idr[272];
+ RHS71 += Idr[273];
+ RHS71 += Idr[274];
+ m_A249 += gt[275];
+ m_A249 += gt[276];
+ m_A248 += go[275];
+ m_A247 += go[276];
+ double RHS72 = Idr[275];
+ RHS72 += Idr[276];
+ m_A254 += gt[277];
+ m_A254 += gt[278];
+ m_A254 += gt[279];
+ m_A254 += gt[280];
+ m_A255 += go[277];
+ m_A254 += go[278];
+ m_A254 += go[279];
+ m_A252 += go[280];
+ double RHS73 = Idr[277];
+ RHS73 += Idr[278];
+ RHS73 += Idr[279];
+ RHS73 += Idr[280];
+ m_A257 += gt[281];
+ m_A257 += gt[282];
+ m_A256 += go[281];
+ double RHS74 = Idr[281];
+ RHS74 += Idr[282];
+ RHS74 -= go[282] * *cnV[282];
+ m_A264 += gt[283];
+ m_A264 += gt[284];
+ m_A264 += gt[285];
+ m_A264 += gt[286];
+ m_A264 += gt[287];
+ m_A262 += go[283];
+ m_A259 += go[284];
+ m_A261 += go[285];
+ double RHS75 = Idr[283];
+ RHS75 += Idr[284];
+ RHS75 += Idr[285];
+ RHS75 += Idr[286];
+ RHS75 += Idr[287];
+ RHS75 -= go[286] * *cnV[286];
+ RHS75 -= go[287] * *cnV[287];
+ m_A271 += gt[288];
+ m_A271 += gt[289];
+ m_A271 += gt[290];
+ m_A271 += gt[291];
+ m_A273 += go[288];
+ m_A268 += go[289];
+ m_A269 += go[290];
+ double RHS76 = Idr[288];
+ RHS76 += Idr[289];
+ RHS76 += Idr[290];
+ RHS76 += Idr[291];
+ RHS76 -= go[291] * *cnV[291];
+ m_A281 += gt[292];
+ m_A281 += gt[293];
+ m_A281 += gt[294];
+ m_A281 += gt[295];
+ m_A277 += go[292];
+ m_A276 += go[293];
+ m_A279 += go[294];
+ m_A278 += go[295];
+ double RHS77 = Idr[292];
+ RHS77 += Idr[293];
+ RHS77 += Idr[294];
+ RHS77 += Idr[295];
+ m_A294 += gt[296];
+ m_A294 += gt[297];
+ m_A294 += gt[298];
+ m_A294 += gt[299];
+ m_A294 += gt[300];
+ m_A294 += gt[301];
+ m_A289 += go[296];
+ m_A296 += go[297];
+ m_A287 += go[298];
+ m_A285 += go[299];
+ m_A286 += go[300];
+ double RHS78 = Idr[296];
+ RHS78 += Idr[297];
+ RHS78 += Idr[298];
+ RHS78 += Idr[299];
+ RHS78 += Idr[300];
+ RHS78 += Idr[301];
+ RHS78 -= go[301] * *cnV[301];
+ m_A300 += gt[302];
+ m_A300 += gt[303];
+ m_A300 += gt[304];
+ m_A300 += gt[305];
+ m_A300 += gt[306];
+ m_A298 += go[302];
+ m_A297 += go[303];
+ m_A299 += go[304];
+ double RHS79 = Idr[302];
+ RHS79 += Idr[303];
+ RHS79 += Idr[304];
+ RHS79 += Idr[305];
+ RHS79 += Idr[306];
+ RHS79 -= go[305] * *cnV[305];
+ RHS79 -= go[306] * *cnV[306];
+ m_A304 += gt[307];
+ m_A304 += gt[308];
+ m_A303 += go[307];
+ m_A302 += go[308];
+ double RHS80 = Idr[307];
+ RHS80 += Idr[308];
+ m_A311 += gt[309];
+ m_A311 += gt[310];
+ m_A311 += gt[311];
+ m_A311 += gt[312];
+ m_A311 += gt[313];
+ m_A311 += gt[314];
+ m_A315 += go[309];
+ m_A308 += go[310];
+ m_A309 += go[311];
+ m_A307 += go[312];
+ m_A313 += go[313];
+ double RHS81 = Idr[309];
+ RHS81 += Idr[310];
+ RHS81 += Idr[311];
+ RHS81 += Idr[312];
+ RHS81 += Idr[313];
+ RHS81 += Idr[314];
+ RHS81 -= go[314] * *cnV[314];
+ m_A319 += gt[315];
+ m_A319 += gt[316];
+ m_A319 += gt[317];
+ m_A319 += gt[318];
+ m_A319 += gt[319];
+ m_A319 += gt[320];
+ m_A319 += gt[321];
+ m_A318 += go[315];
+ m_A316 += go[316];
+ double RHS82 = Idr[315];
+ RHS82 += Idr[316];
+ RHS82 += Idr[317];
+ RHS82 += Idr[318];
+ RHS82 += Idr[319];
+ RHS82 += Idr[320];
+ RHS82 += Idr[321];
+ RHS82 -= go[317] * *cnV[317];
+ RHS82 -= go[318] * *cnV[318];
+ RHS82 -= go[319] * *cnV[319];
+ RHS82 -= go[320] * *cnV[320];
+ RHS82 -= go[321] * *cnV[321];
+ m_A322 += gt[322];
+ m_A322 += gt[323];
+ m_A322 += gt[324];
+ m_A322 += gt[325];
+ m_A324 += go[322];
+ m_A322 += go[323];
+ m_A322 += go[324];
+ m_A321 += go[325];
+ double RHS83 = Idr[322];
+ RHS83 += Idr[323];
+ RHS83 += Idr[324];
+ RHS83 += Idr[325];
+ m_A329 += gt[326];
+ m_A329 += gt[327];
+ m_A329 += gt[328];
+ m_A329 += gt[329];
+ m_A329 += gt[330];
+ m_A329 += gt[331];
+ m_A326 += go[326];
+ m_A325 += go[327];
+ m_A328 += go[328];
+ m_A328 += go[329];
+ double RHS84 = Idr[326];
+ RHS84 += Idr[327];
+ RHS84 += Idr[328];
+ RHS84 += Idr[329];
+ RHS84 += Idr[330];
+ RHS84 += Idr[331];
+ RHS84 -= go[330] * *cnV[330];
+ RHS84 -= go[331] * *cnV[331];
+ m_A335 += gt[332];
+ m_A335 += gt[333];
+ m_A335 += gt[334];
+ m_A335 += gt[335];
+ m_A335 += gt[336];
+ m_A330 += go[332];
+ m_A331 += go[333];
+ m_A332 += go[334];
+ double RHS85 = Idr[332];
+ RHS85 += Idr[333];
+ RHS85 += Idr[334];
+ RHS85 += Idr[335];
+ RHS85 += Idr[336];
+ RHS85 -= go[335] * *cnV[335];
+ RHS85 -= go[336] * *cnV[336];
+ m_A347 += gt[337];
+ m_A347 += gt[338];
+ m_A347 += gt[339];
+ m_A347 += gt[340];
+ m_A347 += gt[341];
+ m_A347 += gt[342];
+ m_A347 += gt[343];
+ m_A338 += go[337];
+ m_A340 += go[338];
+ m_A341 += go[339];
+ m_A342 += go[340];
+ m_A343 += go[341];
+ double RHS86 = Idr[337];
+ RHS86 += Idr[338];
+ RHS86 += Idr[339];
+ RHS86 += Idr[340];
+ RHS86 += Idr[341];
+ RHS86 += Idr[342];
+ RHS86 += Idr[343];
+ RHS86 -= go[342] * *cnV[342];
+ RHS86 -= go[343] * *cnV[343];
+ m_A356 += gt[344];
+ m_A356 += gt[345];
+ m_A356 += gt[346];
+ m_A356 += gt[347];
+ m_A356 += gt[348];
+ m_A356 += gt[349];
+ m_A351 += go[344];
+ m_A352 += go[345];
+ m_A354 += go[346];
+ m_A353 += go[347];
+ double RHS87 = Idr[344];
+ RHS87 += Idr[345];
+ RHS87 += Idr[346];
+ RHS87 += Idr[347];
+ RHS87 += Idr[348];
+ RHS87 += Idr[349];
+ RHS87 -= go[348] * *cnV[348];
+ RHS87 -= go[349] * *cnV[349];
+ m_A364 += gt[350];
+ m_A364 += gt[351];
+ m_A364 += gt[352];
+ m_A364 += gt[353];
+ m_A360 += go[350];
+ m_A359 += go[351];
+ m_A361 += go[352];
+ double RHS88 = Idr[350];
+ RHS88 += Idr[351];
+ RHS88 += Idr[352];
+ RHS88 += Idr[353];
+ RHS88 -= go[353] * *cnV[353];
+ m_A380 += gt[354];
+ m_A380 += gt[355];
+ m_A380 += gt[356];
+ m_A380 += gt[357];
+ m_A380 += gt[358];
+ m_A380 += gt[359];
+ m_A380 += gt[360];
+ m_A380 += gt[361];
+ m_A370 += go[354];
+ m_A369 += go[355];
+ m_A377 += go[356];
+ m_A368 += go[357];
+ m_A373 += go[358];
+ double RHS89 = Idr[354];
+ RHS89 += Idr[355];
+ RHS89 += Idr[356];
+ RHS89 += Idr[357];
+ RHS89 += Idr[358];
+ RHS89 += Idr[359];
+ RHS89 += Idr[360];
+ RHS89 += Idr[361];
+ RHS89 -= go[359] * *cnV[359];
+ RHS89 -= go[360] * *cnV[360];
+ RHS89 -= go[361] * *cnV[361];
+ m_A387 += gt[362];
+ m_A387 += gt[363];
+ m_A387 += gt[364];
+ m_A387 += gt[365];
+ m_A383 += go[362];
+ m_A382 += go[363];
+ m_A384 += go[364];
+ m_A385 += go[365];
+ double RHS90 = Idr[362];
+ RHS90 += Idr[363];
+ RHS90 += Idr[364];
+ RHS90 += Idr[365];
+ m_A393 += gt[366];
+ m_A393 += gt[367];
+ m_A393 += gt[368];
+ m_A393 += gt[369];
+ m_A390 += go[366];
+ m_A388 += go[367];
+ m_A391 += go[368];
+ m_A389 += go[369];
+ double RHS91 = Idr[366];
+ RHS91 += Idr[367];
+ RHS91 += Idr[368];
+ RHS91 += Idr[369];
+ m_A404 += gt[370];
+ m_A404 += gt[371];
+ m_A404 += gt[372];
+ m_A404 += gt[373];
+ m_A404 += gt[374];
+ m_A404 += gt[375];
+ m_A399 += go[370];
+ m_A405 += go[371];
+ m_A397 += go[372];
+ m_A396 += go[373];
+ m_A398 += go[374];
+ double RHS92 = Idr[370];
+ RHS92 += Idr[371];
+ RHS92 += Idr[372];
+ RHS92 += Idr[373];
+ RHS92 += Idr[374];
+ RHS92 += Idr[375];
+ RHS92 -= go[375] * *cnV[375];
+ m_A409 += gt[376];
+ m_A409 += gt[377];
+ m_A409 += gt[378];
+ m_A409 += gt[379];
+ m_A409 += gt[380];
+ m_A407 += go[376];
+ m_A406 += go[377];
+ m_A410 += go[378];
+ double RHS93 = Idr[376];
+ RHS93 += Idr[377];
+ RHS93 += Idr[378];
+ RHS93 += Idr[379];
+ RHS93 += Idr[380];
+ RHS93 -= go[379] * *cnV[379];
+ RHS93 -= go[380] * *cnV[380];
+ m_A420 += gt[381];
+ m_A420 += gt[382];
+ m_A420 += gt[383];
+ m_A420 += gt[384];
+ m_A420 += gt[385];
+ m_A420 += gt[386];
+ m_A420 += gt[387];
+ m_A420 += gt[388];
+ m_A412 += go[381];
+ m_A411 += go[382];
+ m_A419 += go[383];
+ m_A413 += go[384];
+ m_A416 += go[385];
+ double RHS94 = Idr[381];
+ RHS94 += Idr[382];
+ RHS94 += Idr[383];
+ RHS94 += Idr[384];
+ RHS94 += Idr[385];
+ RHS94 += Idr[386];
+ RHS94 += Idr[387];
+ RHS94 += Idr[388];
+ RHS94 -= go[386] * *cnV[386];
+ RHS94 -= go[387] * *cnV[387];
+ RHS94 -= go[388] * *cnV[388];
+ m_A437 += gt[389];
+ m_A437 += gt[390];
+ m_A437 += gt[391];
+ m_A437 += gt[392];
+ m_A437 += gt[393];
+ m_A437 += gt[394];
+ m_A437 += gt[395];
+ m_A437 += gt[396];
+ m_A435 += go[389];
+ m_A425 += go[390];
+ m_A424 += go[391];
+ m_A429 += go[392];
+ m_A423 += go[393];
+ m_A422 += go[394];
+ m_A427 += go[395];
+ double RHS95 = Idr[389];
+ RHS95 += Idr[390];
+ RHS95 += Idr[391];
+ RHS95 += Idr[392];
+ RHS95 += Idr[393];
+ RHS95 += Idr[394];
+ RHS95 += Idr[395];
+ RHS95 += Idr[396];
+ RHS95 -= go[396] * *cnV[396];
+ const double f0 = 1.0 / m_A0;
+ const double f0_46 = -f0 * m_A126;
+ m_A128 += m_A1 * f0_46;
+ RHS46 += f0_46 * RHS0;
+ const double f1 = 1.0 / m_A2;
+ const double f1_50 = -f1 * m_A147;
+ m_A148 += m_A3 * f1_50;
+ RHS50 += f1_50 * RHS1;
+ const double f2 = 1.0 / m_A4;
+ const double f2_46 = -f2 * m_A127;
+ m_A128 += m_A5 * f2_46;
+ m_A129 += m_A6 * f2_46;
+ m_A130 += m_A7 * f2_46;
+ RHS46 += f2_46 * RHS2;
+ const double f2_47 = -f2 * m_A131;
+ m_A133 += m_A5 * f2_47;
+ m_A134 += m_A6 * f2_47;
+ m_A135 += m_A7 * f2_47;
+ RHS47 += f2_47 * RHS2;
+ const double f2_54 = -f2 * m_A162;
+ m_A164 += m_A5 * f2_54;
+ m_A165 += m_A6 * f2_54;
+ m_A166 += m_A7 * f2_54;
+ RHS54 += f2_54 * RHS2;
+ const double f3 = 1.0 / m_A8;
+ const double f3_51 = -f3 * m_A150;
+ m_A152 += m_A9 * f3_51;
+ RHS51 += f3_51 * RHS3;
+ const double f4 = 1.0 / m_A10;
+ const double f4_56 = -f4 * m_A175;
+ m_A180 += m_A11 * f4_56;
+ m_A182 += m_A12 * f4_56;
+ RHS56 += f4_56 * RHS4;
+ const double f4_77 = -f4 * m_A276;
+ m_A279 += m_A11 * f4_77;
+ m_A281 += m_A12 * f4_77;
+ RHS77 += f4_77 * RHS4;
+ const double f5 = 1.0 / m_A13;
+ const double f5_51 = -f5 * m_A151;
+ m_A152 += m_A14 * f5_51;
+ m_A153 += m_A15 * f5_51;
+ RHS51 += f5_51 * RHS5;
+ const double f5_78 = -f5 * m_A285;
+ m_A289 += m_A14 * f5_78;
+ m_A294 += m_A15 * f5_78;
+ RHS78 += f5_78 * RHS5;
+ const double f6 = 1.0 / m_A16;
+ const double f6_53 = -f6 * m_A159;
+ m_A160 += m_A17 * f6_53;
+ RHS53 += f6_53 * RHS6;
+ const double f7 = 1.0 / m_A18;
+ const double f7_47 = -f7 * m_A132;
+ m_A134 += m_A19 * f7_47;
+ m_A136 += m_A20 * f7_47;
+ m_A137 += m_A21 * f7_47;
+ m_A138 += m_A22 * f7_47;
+ RHS47 += f7_47 * RHS7;
+ const double f7_56 = -f7 * m_A176;
+ m_A178 += m_A19 * f7_56;
+ m_A180 += m_A20 * f7_56;
+ m_A183 += m_A21 * f7_56;
+ m_A184 += m_A22 * f7_56;
+ RHS56 += f7_56 * RHS7;
+ const double f7_78 = -f7 * m_A286;
+ m_A288 += m_A19 * f7_78;
+ m_A291 += m_A20 * f7_78;
+ m_A294 += m_A21 * f7_78;
+ m_A296 += m_A22 * f7_78;
+ RHS78 += f7_78 * RHS7;
+ const double f7_89 = -f7 * m_A368;
+ m_A371 += m_A19 * f7_89;
+ m_A373 += m_A20 * f7_89;
+ m_A377 += m_A21 * f7_89;
+ m_A380 += m_A22 * f7_89;
+ RHS89 += f7_89 * RHS7;
+ const double f8 = 1.0 / m_A23;
+ const double f8_54 = -f8 * m_A163;
+ m_A166 += m_A24 * f8_54;
+ m_A167 += m_A25 * f8_54;
+ m_A169 += m_A26 * f8_54;
+ m_A170 += m_A27 * f8_54;
+ RHS54 += f8_54 * RHS8;
+ const double f8_56 = -f8 * m_A177;
+ m_A179 += m_A24 * f8_56;
+ m_A180 += m_A25 * f8_56;
+ m_A183 += m_A26 * f8_56;
+ m_A184 += m_A27 * f8_56;
+ RHS56 += f8_56 * RHS8;
+ const double f8_78 = -f8 * m_A287;
+ m_A290 += m_A24 * f8_78;
+ m_A291 += m_A25 * f8_78;
+ m_A294 += m_A26 * f8_78;
+ m_A296 += m_A27 * f8_78;
+ RHS78 += f8_78 * RHS8;
+ const double f8_89 = -f8 * m_A369;
+ m_A372 += m_A24 * f8_89;
+ m_A373 += m_A25 * f8_89;
+ m_A377 += m_A26 * f8_89;
+ m_A380 += m_A27 * f8_89;
+ RHS89 += f8_89 * RHS8;
+ const double f9 = 1.0 / m_A28;
+ const double f9_58 = -f9 * m_A190;
+ m_A191 += m_A29 * f9_58;
+ RHS58 += f9_58 * RHS9;
+ const double f10 = 1.0 / m_A30;
+ const double f10_65 = -f10 * m_A218;
+ m_A220 += m_A31 * f10_65;
+ RHS65 += f10_65 * RHS10;
+ const double f11 = 1.0 / m_A32;
+ const double f11_60 = -f11 * m_A196;
+ m_A197 += m_A33 * f11_60;
+ m_A198 += m_A34 * f11_60;
+ RHS60 += f11_60 * RHS11;
+ const double f11_76 = -f11 * m_A268;
+ m_A270 += m_A33 * f11_76;
+ m_A271 += m_A34 * f11_76;
+ RHS76 += f11_76 * RHS11;
+ const double f12 = 1.0 / m_A35;
+ const double f12_65 = -f12 * m_A219;
+ m_A220 += m_A36 * f12_65;
+ m_A221 += m_A37 * f12_65;
+ RHS65 += f12_65 * RHS12;
+ const double f12_92 = -f12 * m_A396;
+ m_A399 += m_A36 * f12_92;
+ m_A404 += m_A37 * f12_92;
+ RHS92 += f12_92 * RHS12;
+ const double f13 = 1.0 / m_A38;
+ const double f13_48 = -f13 * m_A139;
+ m_A141 += m_A39 * f13_48;
+ RHS48 += f13_48 * RHS13;
+ const double f14 = 1.0 / m_A40;
+ const double f14_48 = -f14 * m_A140;
+ m_A141 += m_A41 * f14_48;
+ m_A142 += m_A42 * f14_48;
+ RHS48 += f14_48 * RHS14;
+ const double f14_55 = -f14 * m_A171;
+ m_A172 += m_A41 * f14_55;
+ m_A174 += m_A42 * f14_55;
+ RHS55 += f14_55 * RHS14;
+ const double f14_75 = -f14 * m_A259;
+ m_A260 += m_A41 * f14_75;
+ m_A264 += m_A42 * f14_75;
+ RHS75 += f14_75 * RHS14;
+ const double f15 = 1.0 / m_A43;
+ const double f15_81 = -f15 * m_A307;
+ m_A311 += m_A44 * f15_81;
+ m_A313 += m_A45 * f15_81;
+ RHS81 += f15_81 * RHS15;
+ const double f15_91 = -f15 * m_A388;
+ m_A391 += m_A44 * f15_91;
+ m_A393 += m_A45 * f15_91;
+ RHS91 += f15_91 * RHS15;
+ const double f16 = 1.0 / m_A46;
+ const double f16_81 = -f16 * m_A308;
+ m_A311 += m_A47 * f16_81;
+ m_A312 += m_A48 * f16_81;
+ m_A314 += m_A49 * f16_81;
+ m_A315 += m_A50 * f16_81;
+ RHS81 += f16_81 * RHS16;
+ const double f16_88 = -f16 * m_A359;
+ m_A362 += m_A47 * f16_88;
+ m_A364 += m_A48 * f16_88;
+ m_A366 += m_A49 * f16_88;
+ m_A367 += m_A50 * f16_88;
+ RHS88 += f16_88 * RHS16;
+ const double f16_92 = -f16 * m_A397;
+ m_A401 += m_A47 * f16_92;
+ m_A402 += m_A48 * f16_92;
+ m_A404 += m_A49 * f16_92;
+ m_A405 += m_A50 * f16_92;
+ RHS92 += f16_92 * RHS16;
+ const double f16_94 = -f16 * m_A411;
+ m_A416 += m_A47 * f16_94;
+ m_A417 += m_A48 * f16_94;
+ m_A419 += m_A49 * f16_94;
+ m_A420 += m_A50 * f16_94;
+ RHS94 += f16_94 * RHS16;
+ const double f17 = 1.0 / m_A51;
+ const double f17_49 = -f17 * m_A143;
+ m_A145 += m_A52 * f17_49;
+ RHS49 += f17_49 * RHS17;
+ const double f18 = 1.0 / m_A53;
+ const double f18_49 = -f18 * m_A144;
+ m_A145 += m_A54 * f18_49;
+ m_A146 += m_A55 * f18_49;
+ RHS49 += f18_49 * RHS18;
+ const double f18_62 = -f18 * m_A205;
+ m_A206 += m_A54 * f18_62;
+ m_A207 += m_A55 * f18_62;
+ RHS62 += f18_62 * RHS18;
+ const double f18_82 = -f18 * m_A316;
+ m_A317 += m_A54 * f18_82;
+ m_A318 += m_A55 * f18_82;
+ RHS82 += f18_82 * RHS18;
+ const double f19 = 1.0 / m_A56;
+ const double f19_52 = -f19 * m_A154;
+ m_A157 += m_A57 * f19_52;
+ RHS52 += f19_52 * RHS19;
+ const double f20 = 1.0 / m_A58;
+ const double f20_52 = -f20 * m_A155;
+ m_A157 += m_A59 * f20_52;
+ RHS52 += f20_52 * RHS20;
+ const double f21 = 1.0 / m_A60;
+ const double f21_61 = -f21 * m_A202;
+ m_A203 += m_A61 * f21_61;
+ RHS61 += f21_61 * RHS21;
+ const double f22 = 1.0 / m_A62;
+ const double f22_90 = -f22 * m_A382;
+ m_A387 += m_A63 * f22_90;
+ RHS90 += f22_90 * RHS22;
+ const double f23 = 1.0 / m_A64;
+ const double f23_63 = -f23 * m_A210;
+ m_A212 += m_A65 * f23_63;
+ RHS63 += f23_63 * RHS23;
+ const double f23_79 = -f23 * m_A297;
+ m_A300 += m_A65 * f23_79;
+ RHS79 += f23_79 * RHS23;
+ const double f24 = 1.0 / m_A66;
+ const double f24_64 = -f24 * m_A214;
+ m_A216 += m_A67 * f24_64;
+ RHS64 += f24_64 * RHS24;
+ const double f25 = 1.0 / m_A68;
+ const double f25_79 = -f25 * m_A298;
+ m_A300 += m_A69 * f25_79;
+ RHS79 += f25_79 * RHS25;
+ const double f25_90 = -f25 * m_A383;
+ m_A385 += m_A69 * f25_90;
+ RHS90 += f25_90 * RHS25;
+ const double f26 = 1.0 / m_A70;
+ const double f26_64 = -f26 * m_A215;
+ m_A216 += m_A71 * f26_64;
+ m_A217 += m_A72 * f26_64;
+ RHS64 += f26_64 * RHS26;
+ const double f26_84 = -f26 * m_A325;
+ m_A328 += m_A71 * f26_84;
+ m_A329 += m_A72 * f26_84;
+ RHS84 += f26_84 * RHS26;
+ const double f27 = 1.0 / m_A73;
+ const double f27_57 = -f27 * m_A185;
+ m_A186 += m_A74 * f27_57;
+ m_A189 += m_A75 * f27_57;
+ RHS57 += f27_57 * RHS27;
+ const double f28 = 1.0 / m_A76;
+ const double f28_52 = -f28 * m_A156;
+ m_A157 += m_A77 * f28_52;
+ m_A158 += m_A78 * f28_52;
+ RHS52 += f28_52 * RHS28;
+ const double f28_67 = -f28 * m_A226;
+ m_A227 += m_A77 * f28_67;
+ m_A228 += m_A78 * f28_67;
+ RHS67 += f28_67 * RHS28;
+ const double f29 = 1.0 / m_A79;
+ const double f29_87 = -f29 * m_A351;
+ m_A353 += m_A80 * f29_87;
+ RHS87 += f29_87 * RHS29;
+ const double f30 = 1.0 / m_A81;
+ const double f30_57 = -f30 * m_A186;
+ m_A188 += m_A82 * f30_57;
+ m_A189 += m_A83 * f30_57;
+ RHS57 += f30_57 * RHS30;
+ const double f30_84 = -f30 * m_A326;
+ m_A327 += m_A82 * f30_84;
+ m_A329 += m_A83 * f30_84;
+ RHS84 += f30_84 * RHS30;
+ const double f31 = 1.0 / m_A84;
+ const double f31_57 = -f31 * m_A187;
+ m_A188 += m_A85 * f31_57;
+ RHS57 += f31_57 * RHS31;
+ const double f32 = 1.0 / m_A86;
+ const double f32_86 = -f32 * m_A338;
+ m_A339 += m_A87 * f32_86;
+ m_A342 += m_A88 * f32_86;
+ RHS86 += f32_86 * RHS32;
+ const double f33 = 1.0 / m_A89;
+ const double f33_68 = -f33 * m_A230;
+ m_A232 += m_A90 * f33_68;
+ RHS68 += f33_68 * RHS33;
+ const double f34 = 1.0 / m_A91;
+ const double f34_70 = -f34 * m_A236;
+ m_A237 += m_A92 * f34_70;
+ m_A238 += m_A93 * f34_70;
+ RHS70 += f34_70 * RHS34;
+ const double f35 = 1.0 / m_A94;
+ const double f35_85 = -f35 * m_A330;
+ m_A332 += m_A95 * f35_85;
+ RHS85 += f35_85 * RHS35;
+ const double f36 = 1.0 / m_A96;
+ const double f36_66 = -f36 * m_A222;
+ m_A223 += m_A97 * f36_66;
+ m_A224 += m_A98 * f36_66;
+ RHS66 += f36_66 * RHS36;
+ const double f36_71 = -f36 * m_A242;
+ m_A243 += m_A97 * f36_71;
+ m_A244 += m_A98 * f36_71;
+ RHS71 += f36_71 * RHS36;
+ const double f36_86 = -f36 * m_A339;
+ m_A342 += m_A97 * f36_86;
+ m_A343 += m_A98 * f36_86;
+ RHS86 += f36_86 * RHS36;
+ const double f37 = 1.0 / m_A99;
+ const double f37_72 = -f37 * m_A247;
+ m_A249 += m_A100 * f37_72;
+ m_A250 += m_A101 * f37_72;
+ RHS72 += f37_72 * RHS37;
+ const double f37_89 = -f37 * m_A370;
+ m_A374 += m_A100 * f37_89;
+ m_A380 += m_A101 * f37_89;
+ RHS89 += f37_89 * RHS37;
+ const double f38 = 1.0 / m_A102;
+ const double f38_80 = -f38 * m_A302;
+ m_A304 += m_A103 * f38_80;
+ m_A305 += m_A104 * f38_80;
+ RHS80 += f38_80 * RHS38;
+ const double f38_94 = -f38 * m_A412;
+ m_A415 += m_A103 * f38_94;
+ m_A420 += m_A104 * f38_94;
+ RHS94 += f38_94 * RHS38;
+ const double f39 = 1.0 / m_A105;
+ const double f39_68 = -f39 * m_A231;
+ m_A232 += m_A106 * f39_68;
+ m_A233 += m_A107 * f39_68;
+ RHS68 += f39_68 * RHS39;
+ const double f39_73 = -f39 * m_A252;
+ m_A253 += m_A106 * f39_73;
+ m_A254 += m_A107 * f39_73;
+ RHS73 += f39_73 * RHS39;
+ const double f40 = 1.0 / m_A108;
+ const double f40_77 = -f40 * m_A277;
+ m_A281 += m_A109 * f40_77;
+ m_A283 += m_A110 * f40_77;
+ RHS77 += f40_77 * RHS40;
+ const double f40_86 = -f40 * m_A340;
+ m_A344 += m_A109 * f40_86;
+ m_A347 += m_A110 * f40_86;
+ RHS86 += f40_86 * RHS40;
+ const double f41 = 1.0 / m_A111;
+ const double f41_83 = -f41 * m_A321;
+ m_A322 += m_A112 * f41_83;
+ m_A323 += m_A113 * f41_83;
+ RHS83 += f41_83 * RHS41;
+ const double f41_86 = -f41 * m_A341;
+ m_A346 += m_A112 * f41_86;
+ m_A347 += m_A113 * f41_86;
+ RHS86 += f41_86 * RHS41;
+ const double f42 = 1.0 / m_A114;
+ const double f42_85 = -f42 * m_A331;
+ m_A335 += m_A115 * f42_85;
+ m_A337 += m_A116 * f42_85;
+ RHS85 += f42_85 * RHS42;
+ const double f42_95 = -f42 * m_A422;
+ m_A430 += m_A115 * f42_95;
+ m_A437 += m_A116 * f42_95;
+ RHS95 += f42_95 * RHS42;
+ const double f43 = 1.0 / m_A117;
+ const double f43_87 = -f43 * m_A352;
+ m_A356 += m_A118 * f43_87;
+ m_A358 += m_A119 * f43_87;
+ RHS87 += f43_87 * RHS43;
+ const double f43_95 = -f43 * m_A423;
+ m_A432 += m_A118 * f43_95;
+ m_A437 += m_A119 * f43_95;
+ RHS95 += f43_95 * RHS43;
+ const double f44 = 1.0 / m_A120;
+ const double f44_72 = -f44 * m_A248;
+ m_A249 += m_A121 * f44_72;
+ m_A251 += m_A122 * f44_72;
+ RHS72 += f44_72 * RHS44;
+ const double f44_95 = -f44 * m_A424;
+ m_A426 += m_A121 * f44_95;
+ m_A437 += m_A122 * f44_95;
+ RHS95 += f44_95 * RHS44;
+ const double f45 = 1.0 / m_A123;
+ const double f45_74 = -f45 * m_A256;
+ m_A257 += m_A124 * f45_74;
+ m_A258 += m_A125 * f45_74;
+ RHS74 += f45_74 * RHS45;
+ const double f45_93 = -f45 * m_A406;
+ m_A408 += m_A124 * f45_93;
+ m_A409 += m_A125 * f45_93;
+ RHS93 += f45_93 * RHS45;
+ const double f46 = 1.0 / m_A128;
+ const double f46_47 = -f46 * m_A133;
+ m_A134 += m_A129 * f46_47;
+ m_A135 += m_A130 * f46_47;
+ RHS47 += f46_47 * RHS46;
+ const double f46_54 = -f46 * m_A164;
+ m_A165 += m_A129 * f46_54;
+ m_A166 += m_A130 * f46_54;
+ RHS54 += f46_54 * RHS46;
+ const double f47 = 1.0 / m_A134;
+ const double f47_54 = -f47 * m_A165;
+ m_A166 += m_A135 * f47_54;
+ m_A167 += m_A136 * f47_54;
+ m_A169 += m_A137 * f47_54;
+ m_A170 += m_A138 * f47_54;
+ RHS54 += f47_54 * RHS47;
+ const double f47_56 = -f47 * m_A178;
+ m_A179 += m_A135 * f47_56;
+ m_A180 += m_A136 * f47_56;
+ m_A183 += m_A137 * f47_56;
+ m_A184 += m_A138 * f47_56;
+ RHS56 += f47_56 * RHS47;
+ const double f47_78 = -f47 * m_A288;
+ m_A290 += m_A135 * f47_78;
+ m_A291 += m_A136 * f47_78;
+ m_A294 += m_A137 * f47_78;
+ m_A296 += m_A138 * f47_78;
+ RHS78 += f47_78 * RHS47;
+ const double f47_89 = -f47 * m_A371;
+ m_A372 += m_A135 * f47_89;
+ m_A373 += m_A136 * f47_89;
+ m_A377 += m_A137 * f47_89;
+ m_A380 += m_A138 * f47_89;
+ RHS89 += f47_89 * RHS47;
+ const double f48 = 1.0 / m_A141;
+ const double f48_55 = -f48 * m_A172;
+ m_A174 += m_A142 * f48_55;
+ RHS55 += f48_55 * RHS48;
+ const double f48_75 = -f48 * m_A260;
+ m_A264 += m_A142 * f48_75;
+ RHS75 += f48_75 * RHS48;
+ const double f49 = 1.0 / m_A145;
+ const double f49_62 = -f49 * m_A206;
+ m_A207 += m_A146 * f49_62;
+ RHS62 += f49_62 * RHS49;
+ const double f49_82 = -f49 * m_A317;
+ m_A318 += m_A146 * f49_82;
+ RHS82 += f49_82 * RHS49;
+ const double f50 = 1.0 / m_A148;
+ const double f50_77 = -f50 * m_A278;
+ m_A281 += m_A149 * f50_77;
+ RHS77 += f50_77 * RHS50;
+ const double f51 = 1.0 / m_A152;
+ const double f51_78 = -f51 * m_A289;
+ m_A294 += m_A153 * f51_78;
+ RHS78 += f51_78 * RHS51;
+ const double f52 = 1.0 / m_A157;
+ const double f52_67 = -f52 * m_A227;
+ m_A228 += m_A158 * f52_67;
+ RHS67 += f52_67 * RHS52;
+ const double f53 = 1.0 / m_A160;
+ const double f53_76 = -f53 * m_A269;
+ m_A271 += m_A161 * f53_76;
+ RHS76 += f53_76 * RHS53;
+ const double f54 = 1.0 / m_A166;
+ const double f54_56 = -f54 * m_A179;
+ m_A180 += m_A167 * f54_56;
+ m_A181 += m_A168 * f54_56;
+ m_A183 += m_A169 * f54_56;
+ m_A184 += m_A170 * f54_56;
+ RHS56 += f54_56 * RHS54;
+ const double f54_75 = -f54 * m_A261;
+ m_A263 += m_A167 * f54_75;
+ m_A264 += m_A168 * f54_75;
+ m_A266 += m_A169 * f54_75;
+ m_A267 += m_A170 * f54_75;
+ RHS75 += f54_75 * RHS54;
+ const double f54_78 = -f54 * m_A290;
+ m_A291 += m_A167 * f54_78;
+ m_A292 += m_A168 * f54_78;
+ m_A294 += m_A169 * f54_78;
+ m_A296 += m_A170 * f54_78;
+ RHS78 += f54_78 * RHS54;
+ const double f54_89 = -f54 * m_A372;
+ m_A373 += m_A167 * f54_89;
+ m_A375 += m_A168 * f54_89;
+ m_A377 += m_A169 * f54_89;
+ m_A380 += m_A170 * f54_89;
+ RHS89 += f54_89 * RHS54;
+ const double f55 = 1.0 / m_A173;
+ const double f55_75 = -f55 * m_A262;
+ m_A264 += m_A174 * f55_75;
+ RHS75 += f55_75 * RHS55;
+ const double f56 = 1.0 / m_A180;
+ const double f56_75 = -f56 * m_A263;
+ m_A264 += m_A181 * f56_75;
+ m_A265 += m_A182 * f56_75;
+ m_A266 += m_A183 * f56_75;
+ m_A267 += m_A184 * f56_75;
+ RHS75 += f56_75 * RHS56;
+ const double f56_77 = -f56 * m_A279;
+ m_A280 += m_A181 * f56_77;
+ m_A281 += m_A182 * f56_77;
+ m_A282 += m_A183 * f56_77;
+ m_A284 += m_A184 * f56_77;
+ RHS77 += f56_77 * RHS56;
+ const double f56_78 = -f56 * m_A291;
+ m_A292 += m_A181 * f56_78;
+ m_A293 += m_A182 * f56_78;
+ m_A294 += m_A183 * f56_78;
+ m_A296 += m_A184 * f56_78;
+ RHS78 += f56_78 * RHS56;
+ const double f56_89 = -f56 * m_A373;
+ m_A375 += m_A181 * f56_89;
+ m_A376 += m_A182 * f56_89;
+ m_A377 += m_A183 * f56_89;
+ m_A380 += m_A184 * f56_89;
+ RHS89 += f56_89 * RHS56;
+ const double f57 = 1.0 / m_A188;
+ const double f57_79 = -f57 * m_A299;
+ m_A301 += m_A189 * f57_79;
+ RHS79 += f57_79 * RHS57;
+ const double f57_84 = -f57 * m_A327;
+ m_A329 += m_A189 * f57_84;
+ RHS84 += f57_84 * RHS57;
+ const double f58 = 1.0 / m_A191;
+ const double f58_91 = -f58 * m_A389;
+ m_A393 += m_A192 * f58_91;
+ RHS91 += f58_91 * RHS58;
+ const double f59 = 1.0 / m_A193;
+ const double f59_80 = -f59 * m_A303;
+ m_A304 += m_A194 * f59_80;
+ m_A306 += m_A195 * f59_80;
+ RHS80 += f59_80 * RHS59;
+ const double f59_95 = -f59 * m_A425;
+ m_A428 += m_A194 * f59_95;
+ m_A437 += m_A195 * f59_95;
+ RHS95 += f59_95 * RHS59;
+ const double f60 = 1.0 / m_A197;
+ const double f60_76 = -f60 * m_A270;
+ m_A271 += m_A198 * f60_76;
+ m_A272 += m_A199 * f60_76;
+ m_A274 += m_A200 * f60_76;
+ m_A275 += m_A201 * f60_76;
+ RHS76 += f60_76 * RHS60;
+ const double f60_81 = -f60 * m_A309;
+ m_A310 += m_A198 * f60_81;
+ m_A311 += m_A199 * f60_81;
+ m_A314 += m_A200 * f60_81;
+ m_A315 += m_A201 * f60_81;
+ RHS81 += f60_81 * RHS60;
+ const double f60_92 = -f60 * m_A398;
+ m_A400 += m_A198 * f60_92;
+ m_A401 += m_A199 * f60_92;
+ m_A404 += m_A200 * f60_92;
+ m_A405 += m_A201 * f60_92;
+ RHS92 += f60_92 * RHS60;
+ const double f60_94 = -f60 * m_A413;
+ m_A414 += m_A198 * f60_94;
+ m_A416 += m_A199 * f60_94;
+ m_A419 += m_A200 * f60_94;
+ m_A420 += m_A201 * f60_94;
+ RHS94 += f60_94 * RHS60;
+ const double f61 = 1.0 / m_A203;
+ const double f61_91 = -f61 * m_A390;
+ m_A393 += m_A204 * f61_91;
+ RHS91 += f61_91 * RHS61;
+ const double f62 = 1.0 / m_A207;
+ const double f62_82 = -f62 * m_A318;
+ m_A319 += m_A208 * f62_82;
+ m_A320 += m_A209 * f62_82;
+ RHS82 += f62_82 * RHS62;
+ const double f62_88 = -f62 * m_A360;
+ m_A363 += m_A208 * f62_88;
+ m_A364 += m_A209 * f62_88;
+ RHS88 += f62_88 * RHS62;
+ const double f63 = 1.0 / m_A211;
+ const double f63_70 = -f63 * m_A237;
+ m_A239 += m_A212 * f63_70;
+ m_A241 += m_A213 * f63_70;
+ RHS70 += f63_70 * RHS63;
+ const double f63_90 = -f63 * m_A384;
+ m_A385 += m_A212 * f63_90;
+ m_A387 += m_A213 * f63_90;
+ RHS90 += f63_90 * RHS63;
+ const double f64 = 1.0 / m_A216;
+ const double f64_84 = -f64 * m_A328;
+ m_A329 += m_A217 * f64_84;
+ RHS84 += f64_84 * RHS64;
+ const double f65 = 1.0 / m_A220;
+ const double f65_92 = -f65 * m_A399;
+ m_A404 += m_A221 * f65_92;
+ RHS92 += f65_92 * RHS65;
+ const double f66 = 1.0 / m_A223;
+ const double f66_71 = -f66 * m_A243;
+ m_A244 += m_A224 * f66_71;
+ m_A245 += m_A225 * f66_71;
+ RHS71 += f66_71 * RHS66;
+ const double f66_86 = -f66 * m_A342;
+ m_A343 += m_A224 * f66_86;
+ m_A347 += m_A225 * f66_86;
+ RHS86 += f66_86 * RHS66;
+ const double f67 = 1.0 / m_A228;
+ const double f67_87 = -f67 * m_A353;
+ m_A356 += m_A229 * f67_87;
+ RHS87 += f67_87 * RHS67;
+ const double f68 = 1.0 / m_A232;
+ const double f68_73 = -f68 * m_A253;
+ m_A254 += m_A233 * f68_73;
+ RHS73 += f68_73 * RHS68;
+ const double f69 = 1.0 / m_A234;
+ const double f69_93 = -f69 * m_A407;
+ m_A410 += m_A235 * f69_93;
+ RHS93 += f69_93 * RHS69;
+ const double f70 = 1.0 / m_A238;
+ const double f70_85 = -f70 * m_A332;
+ m_A333 += m_A239 * f70_85;
+ m_A335 += m_A240 * f70_85;
+ m_A336 += m_A241 * f70_85;
+ RHS85 += f70_85 * RHS70;
+ const double f71 = 1.0 / m_A244;
+ const double f71_86 = -f71 * m_A343;
+ m_A347 += m_A245 * f71_86;
+ m_A348 += m_A246 * f71_86;
+ RHS86 += f71_86 * RHS71;
+ const double f71_87 = -f71 * m_A354;
+ m_A355 += m_A245 * f71_87;
+ m_A356 += m_A246 * f71_87;
+ RHS87 += f71_87 * RHS71;
+ const double f72 = 1.0 / m_A249;
+ const double f72_89 = -f72 * m_A374;
+ m_A380 += m_A250 * f72_89;
+ m_A381 += m_A251 * f72_89;
+ RHS89 += f72_89 * RHS72;
+ const double f72_95 = -f72 * m_A426;
+ m_A433 += m_A250 * f72_95;
+ m_A437 += m_A251 * f72_95;
+ RHS95 += f72_95 * RHS72;
+ const double f73 = 1.0 / m_A254;
+ const double f73_95 = -f73 * m_A427;
+ m_A437 += m_A255 * f73_95;
+ RHS95 += f73_95 * RHS73;
+ const double f74 = 1.0 / m_A257;
+ const double f74_93 = -f74 * m_A408;
+ m_A409 += m_A258 * f74_93;
+ RHS93 += f74_93 * RHS74;
+ const double f75 = 1.0 / m_A264;
+ const double f75_77 = -f75 * m_A280;
+ m_A281 += m_A265 * f75_77;
+ m_A282 += m_A266 * f75_77;
+ m_A284 += m_A267 * f75_77;
+ RHS77 += f75_77 * RHS75;
+ const double f75_78 = -f75 * m_A292;
+ m_A293 += m_A265 * f75_78;
+ m_A294 += m_A266 * f75_78;
+ m_A296 += m_A267 * f75_78;
+ RHS78 += f75_78 * RHS75;
+ const double f75_89 = -f75 * m_A375;
+ m_A376 += m_A265 * f75_89;
+ m_A377 += m_A266 * f75_89;
+ m_A380 += m_A267 * f75_89;
+ RHS89 += f75_89 * RHS75;
+ const double f76 = 1.0 / m_A271;
+ const double f76_81 = -f76 * m_A310;
+ m_A311 += m_A272 * f76_81;
+ m_A312 += m_A273 * f76_81;
+ m_A314 += m_A274 * f76_81;
+ m_A315 += m_A275 * f76_81;
+ RHS81 += f76_81 * RHS76;
+ const double f76_88 = -f76 * m_A361;
+ m_A362 += m_A272 * f76_88;
+ m_A364 += m_A273 * f76_88;
+ m_A366 += m_A274 * f76_88;
+ m_A367 += m_A275 * f76_88;
+ RHS88 += f76_88 * RHS76;
+ const double f76_92 = -f76 * m_A400;
+ m_A401 += m_A272 * f76_92;
+ m_A402 += m_A273 * f76_92;
+ m_A404 += m_A274 * f76_92;
+ m_A405 += m_A275 * f76_92;
+ RHS92 += f76_92 * RHS76;
+ const double f76_94 = -f76 * m_A414;
+ m_A416 += m_A272 * f76_94;
+ m_A417 += m_A273 * f76_94;
+ m_A419 += m_A274 * f76_94;
+ m_A420 += m_A275 * f76_94;
+ RHS94 += f76_94 * RHS76;
+ const double f77 = 1.0 / m_A281;
+ const double f77_78 = -f77 * m_A293;
+ m_A294 += m_A282 * f77_78;
+ m_A295 += m_A283 * f77_78;
+ m_A296 += m_A284 * f77_78;
+ RHS78 += f77_78 * RHS77;
+ const double f77_86 = -f77 * m_A344;
+ m_A345 += m_A282 * f77_86;
+ m_A347 += m_A283 * f77_86;
+ m_A349 += m_A284 * f77_86;
+ RHS86 += f77_86 * RHS77;
+ const double f77_89 = -f77 * m_A376;
+ m_A377 += m_A282 * f77_89;
+ m_A378 += m_A283 * f77_89;
+ m_A380 += m_A284 * f77_89;
+ RHS89 += f77_89 * RHS77;
+ const double f78 = 1.0 / m_A294;
+ const double f78_86 = -f78 * m_A345;
+ m_A347 += m_A295 * f78_86;
+ m_A349 += m_A296 * f78_86;
+ RHS86 += f78_86 * RHS78;
+ const double f78_89 = -f78 * m_A377;
+ m_A378 += m_A295 * f78_89;
+ m_A380 += m_A296 * f78_89;
+ RHS89 += f78_89 * RHS78;
+ const double f79 = 1.0 / m_A300;
+ const double f79_85 = -f79 * m_A333;
+ m_A334 += m_A301 * f79_85;
+ RHS85 += f79_85 * RHS79;
+ const double f79_90 = -f79 * m_A385;
+ m_A386 += m_A301 * f79_90;
+ RHS90 += f79_90 * RHS79;
+ const double f80 = 1.0 / m_A304;
+ const double f80_94 = -f80 * m_A415;
+ m_A420 += m_A305 * f80_94;
+ m_A421 += m_A306 * f80_94;
+ RHS94 += f80_94 * RHS80;
+ const double f80_95 = -f80 * m_A428;
+ m_A436 += m_A305 * f80_95;
+ m_A437 += m_A306 * f80_95;
+ RHS95 += f80_95 * RHS80;
+ const double f81 = 1.0 / m_A311;
+ const double f81_88 = -f81 * m_A362;
+ m_A364 += m_A312 * f81_88;
+ m_A365 += m_A313 * f81_88;
+ m_A366 += m_A314 * f81_88;
+ m_A367 += m_A315 * f81_88;
+ RHS88 += f81_88 * RHS81;
+ const double f81_91 = -f81 * m_A391;
+ m_A392 += m_A312 * f81_91;
+ m_A393 += m_A313 * f81_91;
+ m_A394 += m_A314 * f81_91;
+ m_A395 += m_A315 * f81_91;
+ RHS91 += f81_91 * RHS81;
+ const double f81_92 = -f81 * m_A401;
+ m_A402 += m_A312 * f81_92;
+ m_A403 += m_A313 * f81_92;
+ m_A404 += m_A314 * f81_92;
+ m_A405 += m_A315 * f81_92;
+ RHS92 += f81_92 * RHS81;
+ const double f81_94 = -f81 * m_A416;
+ m_A417 += m_A312 * f81_94;
+ m_A418 += m_A313 * f81_94;
+ m_A419 += m_A314 * f81_94;
+ m_A420 += m_A315 * f81_94;
+ RHS94 += f81_94 * RHS81;
+ const double f82 = 1.0 / m_A319;
+ const double f82_88 = -f82 * m_A363;
+ m_A364 += m_A320 * f82_88;
+ RHS88 += f82_88 * RHS82;
+ const double f83 = 1.0 / m_A322;
+ const double f83_86 = -f83 * m_A346;
+ m_A347 += m_A323 * f83_86;
+ m_A350 += m_A324 * f83_86;
+ RHS86 += f83_86 * RHS83;
+ const double f83_95 = -f83 * m_A429;
+ m_A431 += m_A323 * f83_95;
+ m_A437 += m_A324 * f83_95;
+ RHS95 += f83_95 * RHS83;
+ const double f84 = 1.0 / m_A329;
+ const double f84_85 = -f84 * m_A334;
+ RHS85 += f84_85 * RHS84;
+ const double f84_90 = -f84 * m_A386;
+ RHS90 += f84_90 * RHS84;
+ const double f85 = 1.0 / m_A335;
+ const double f85_95 = -f85 * m_A430;
+ m_A434 += m_A336 * f85_95;
+ m_A437 += m_A337 * f85_95;
+ RHS95 += f85_95 * RHS85;
+ const double f86 = 1.0 / m_A347;
+ const double f86_87 = -f86 * m_A355;
+ m_A356 += m_A348 * f86_87;
+ m_A357 += m_A349 * f86_87;
+ m_A358 += m_A350 * f86_87;
+ RHS87 += f86_87 * RHS86;
+ const double f86_89 = -f86 * m_A378;
+ m_A379 += m_A348 * f86_89;
+ m_A380 += m_A349 * f86_89;
+ m_A381 += m_A350 * f86_89;
+ RHS89 += f86_89 * RHS86;
+ const double f86_95 = -f86 * m_A431;
+ m_A432 += m_A348 * f86_95;
+ m_A433 += m_A349 * f86_95;
+ m_A437 += m_A350 * f86_95;
+ RHS95 += f86_95 * RHS86;
+ const double f87 = 1.0 / m_A356;
+ const double f87_89 = -f87 * m_A379;
+ m_A380 += m_A357 * f87_89;
+ m_A381 += m_A358 * f87_89;
+ RHS89 += f87_89 * RHS87;
+ const double f87_95 = -f87 * m_A432;
+ m_A433 += m_A357 * f87_95;
+ m_A437 += m_A358 * f87_95;
+ RHS95 += f87_95 * RHS87;
+ const double f88 = 1.0 / m_A364;
+ const double f88_91 = -f88 * m_A392;
+ m_A393 += m_A365 * f88_91;
+ m_A394 += m_A366 * f88_91;
+ m_A395 += m_A367 * f88_91;
+ RHS91 += f88_91 * RHS88;
+ const double f88_92 = -f88 * m_A402;
+ m_A403 += m_A365 * f88_92;
+ m_A404 += m_A366 * f88_92;
+ m_A405 += m_A367 * f88_92;
+ RHS92 += f88_92 * RHS88;
+ const double f88_94 = -f88 * m_A417;
+ m_A418 += m_A365 * f88_94;
+ m_A419 += m_A366 * f88_94;
+ m_A420 += m_A367 * f88_94;
+ RHS94 += f88_94 * RHS88;
+ const double f89 = 1.0 / m_A380;
+ const double f89_95 = -f89 * m_A433;
+ m_A437 += m_A381 * f89_95;
+ RHS95 += f89_95 * RHS89;
+ const double f90 = 1.0 / m_A387;
+ const double f90_95 = -f90 * m_A434;
+ RHS95 += f90_95 * RHS90;
+ const double f91 = 1.0 / m_A393;
+ const double f91_92 = -f91 * m_A403;
+ m_A404 += m_A394 * f91_92;
+ m_A405 += m_A395 * f91_92;
+ RHS92 += f91_92 * RHS91;
+ const double f91_94 = -f91 * m_A418;
+ m_A419 += m_A394 * f91_94;
+ m_A420 += m_A395 * f91_94;
+ RHS94 += f91_94 * RHS91;
+ const double f92 = 1.0 / m_A404;
+ const double f92_94 = -f92 * m_A419;
+ m_A420 += m_A405 * f92_94;
+ RHS94 += f92_94 * RHS92;
+ const double f93 = 1.0 / m_A409;
+ const double f93_95 = -f93 * m_A435;
+ m_A437 += m_A410 * f93_95;
+ RHS95 += f93_95 * RHS93;
+ const double f94 = 1.0 / m_A420;
+ const double f94_95 = -f94 * m_A436;
+ m_A437 += m_A421 * f94_95;
+ RHS95 += f94_95 * RHS94;
+ V[95] = RHS95 / m_A437;
+ double tmp94 = 0.0;
+ tmp94 += m_A421 * V[95];
+ V[94] = (RHS94 - tmp94) / m_A420;
+ double tmp93 = 0.0;
+ tmp93 += m_A410 * V[95];
+ V[93] = (RHS93 - tmp93) / m_A409;
+ double tmp92 = 0.0;
+ tmp92 += m_A405 * V[94];
+ V[92] = (RHS92 - tmp92) / m_A404;
+ double tmp91 = 0.0;
+ tmp91 += m_A394 * V[92];
+ tmp91 += m_A395 * V[94];
+ V[91] = (RHS91 - tmp91) / m_A393;
+ double tmp90 = 0.0;
+ V[90] = (RHS90 - tmp90) / m_A387;
+ double tmp89 = 0.0;
+ tmp89 += m_A381 * V[95];
+ V[89] = (RHS89 - tmp89) / m_A380;
+ double tmp88 = 0.0;
+ tmp88 += m_A365 * V[91];
+ tmp88 += m_A366 * V[92];
+ tmp88 += m_A367 * V[94];
+ V[88] = (RHS88 - tmp88) / m_A364;
+ double tmp87 = 0.0;
+ tmp87 += m_A357 * V[89];
+ tmp87 += m_A358 * V[95];
+ V[87] = (RHS87 - tmp87) / m_A356;
+ double tmp86 = 0.0;
+ tmp86 += m_A348 * V[87];
+ tmp86 += m_A349 * V[89];
+ tmp86 += m_A350 * V[95];
+ V[86] = (RHS86 - tmp86) / m_A347;
+ double tmp85 = 0.0;
+ tmp85 += m_A336 * V[90];
+ tmp85 += m_A337 * V[95];
+ V[85] = (RHS85 - tmp85) / m_A335;
+ double tmp84 = 0.0;
+ V[84] = (RHS84 - tmp84) / m_A329;
+ double tmp83 = 0.0;
+ tmp83 += m_A323 * V[86];
+ tmp83 += m_A324 * V[95];
+ V[83] = (RHS83 - tmp83) / m_A322;
+ double tmp82 = 0.0;
+ tmp82 += m_A320 * V[88];
+ V[82] = (RHS82 - tmp82) / m_A319;
+ double tmp81 = 0.0;
+ tmp81 += m_A312 * V[88];
+ tmp81 += m_A313 * V[91];
+ tmp81 += m_A314 * V[92];
+ tmp81 += m_A315 * V[94];
+ V[81] = (RHS81 - tmp81) / m_A311;
+ double tmp80 = 0.0;
+ tmp80 += m_A305 * V[94];
+ tmp80 += m_A306 * V[95];
+ V[80] = (RHS80 - tmp80) / m_A304;
+ double tmp79 = 0.0;
+ tmp79 += m_A301 * V[84];
+ V[79] = (RHS79 - tmp79) / m_A300;
+ double tmp78 = 0.0;
+ tmp78 += m_A295 * V[86];
+ tmp78 += m_A296 * V[89];
+ V[78] = (RHS78 - tmp78) / m_A294;
+ double tmp77 = 0.0;
+ tmp77 += m_A282 * V[78];
+ tmp77 += m_A283 * V[86];
+ tmp77 += m_A284 * V[89];
+ V[77] = (RHS77 - tmp77) / m_A281;
+ double tmp76 = 0.0;
+ tmp76 += m_A272 * V[81];
+ tmp76 += m_A273 * V[88];
+ tmp76 += m_A274 * V[92];
+ tmp76 += m_A275 * V[94];
+ V[76] = (RHS76 - tmp76) / m_A271;
+ double tmp75 = 0.0;
+ tmp75 += m_A265 * V[77];
+ tmp75 += m_A266 * V[78];
+ tmp75 += m_A267 * V[89];
+ V[75] = (RHS75 - tmp75) / m_A264;
+ double tmp74 = 0.0;
+ tmp74 += m_A258 * V[93];
+ V[74] = (RHS74 - tmp74) / m_A257;
+ double tmp73 = 0.0;
+ tmp73 += m_A255 * V[95];
+ V[73] = (RHS73 - tmp73) / m_A254;
+ double tmp72 = 0.0;
+ tmp72 += m_A250 * V[89];
+ tmp72 += m_A251 * V[95];
+ V[72] = (RHS72 - tmp72) / m_A249;
+ double tmp71 = 0.0;
+ tmp71 += m_A245 * V[86];
+ tmp71 += m_A246 * V[87];
+ V[71] = (RHS71 - tmp71) / m_A244;
+ double tmp70 = 0.0;
+ tmp70 += m_A239 * V[79];
+ tmp70 += m_A240 * V[85];
+ tmp70 += m_A241 * V[90];
+ V[70] = (RHS70 - tmp70) / m_A238;
+ double tmp69 = 0.0;
+ tmp69 += m_A235 * V[95];
+ V[69] = (RHS69 - tmp69) / m_A234;
+ double tmp68 = 0.0;
+ tmp68 += m_A233 * V[73];
+ V[68] = (RHS68 - tmp68) / m_A232;
+ double tmp67 = 0.0;
+ tmp67 += m_A229 * V[87];
+ V[67] = (RHS67 - tmp67) / m_A228;
+ double tmp66 = 0.0;
+ tmp66 += m_A224 * V[71];
+ tmp66 += m_A225 * V[86];
+ V[66] = (RHS66 - tmp66) / m_A223;
+ double tmp65 = 0.0;
+ tmp65 += m_A221 * V[92];
+ V[65] = (RHS65 - tmp65) / m_A220;
+ double tmp64 = 0.0;
+ tmp64 += m_A217 * V[84];
+ V[64] = (RHS64 - tmp64) / m_A216;
+ double tmp63 = 0.0;
+ tmp63 += m_A212 * V[79];
+ tmp63 += m_A213 * V[90];
+ V[63] = (RHS63 - tmp63) / m_A211;
+ double tmp62 = 0.0;
+ tmp62 += m_A208 * V[82];
+ tmp62 += m_A209 * V[88];
+ V[62] = (RHS62 - tmp62) / m_A207;
+ double tmp61 = 0.0;
+ tmp61 += m_A204 * V[91];
+ V[61] = (RHS61 - tmp61) / m_A203;
+ double tmp60 = 0.0;
+ tmp60 += m_A198 * V[76];
+ tmp60 += m_A199 * V[81];
+ tmp60 += m_A200 * V[92];
+ tmp60 += m_A201 * V[94];
+ V[60] = (RHS60 - tmp60) / m_A197;
+ double tmp59 = 0.0;
+ tmp59 += m_A194 * V[80];
+ tmp59 += m_A195 * V[95];
+ V[59] = (RHS59 - tmp59) / m_A193;
+ double tmp58 = 0.0;
+ tmp58 += m_A192 * V[91];
+ V[58] = (RHS58 - tmp58) / m_A191;
+ double tmp57 = 0.0;
+ tmp57 += m_A189 * V[84];
+ V[57] = (RHS57 - tmp57) / m_A188;
+ double tmp56 = 0.0;
+ tmp56 += m_A181 * V[75];
+ tmp56 += m_A182 * V[77];
+ tmp56 += m_A183 * V[78];
+ tmp56 += m_A184 * V[89];
+ V[56] = (RHS56 - tmp56) / m_A180;
+ double tmp55 = 0.0;
+ tmp55 += m_A174 * V[75];
+ V[55] = (RHS55 - tmp55) / m_A173;
+ double tmp54 = 0.0;
+ tmp54 += m_A167 * V[56];
+ tmp54 += m_A168 * V[75];
+ tmp54 += m_A169 * V[78];
+ tmp54 += m_A170 * V[89];
+ V[54] = (RHS54 - tmp54) / m_A166;
+ double tmp53 = 0.0;
+ tmp53 += m_A161 * V[76];
+ V[53] = (RHS53 - tmp53) / m_A160;
+ double tmp52 = 0.0;
+ tmp52 += m_A158 * V[67];
+ V[52] = (RHS52 - tmp52) / m_A157;
+ double tmp51 = 0.0;
+ tmp51 += m_A153 * V[78];
+ V[51] = (RHS51 - tmp51) / m_A152;
+ double tmp50 = 0.0;
+ tmp50 += m_A149 * V[77];
+ V[50] = (RHS50 - tmp50) / m_A148;
+ double tmp49 = 0.0;
+ tmp49 += m_A146 * V[62];
+ V[49] = (RHS49 - tmp49) / m_A145;
+ double tmp48 = 0.0;
+ tmp48 += m_A142 * V[75];
+ V[48] = (RHS48 - tmp48) / m_A141;
+ double tmp47 = 0.0;
+ tmp47 += m_A135 * V[54];
+ tmp47 += m_A136 * V[56];
+ tmp47 += m_A137 * V[78];
+ tmp47 += m_A138 * V[89];
+ V[47] = (RHS47 - tmp47) / m_A134;
+ double tmp46 = 0.0;
+ tmp46 += m_A129 * V[47];
+ tmp46 += m_A130 * V[54];
+ V[46] = (RHS46 - tmp46) / m_A128;
+ double tmp45 = 0.0;
+ tmp45 += m_A124 * V[74];
+ tmp45 += m_A125 * V[93];
+ V[45] = (RHS45 - tmp45) / m_A123;
+ double tmp44 = 0.0;
+ tmp44 += m_A121 * V[72];
+ tmp44 += m_A122 * V[95];
+ V[44] = (RHS44 - tmp44) / m_A120;
+ double tmp43 = 0.0;
+ tmp43 += m_A118 * V[87];
+ tmp43 += m_A119 * V[95];
+ V[43] = (RHS43 - tmp43) / m_A117;
+ double tmp42 = 0.0;
+ tmp42 += m_A115 * V[85];
+ tmp42 += m_A116 * V[95];
+ V[42] = (RHS42 - tmp42) / m_A114;
+ double tmp41 = 0.0;
+ tmp41 += m_A112 * V[83];
+ tmp41 += m_A113 * V[86];
+ V[41] = (RHS41 - tmp41) / m_A111;
+ double tmp40 = 0.0;
+ tmp40 += m_A109 * V[77];
+ tmp40 += m_A110 * V[86];
+ V[40] = (RHS40 - tmp40) / m_A108;
+ double tmp39 = 0.0;
+ tmp39 += m_A106 * V[68];
+ tmp39 += m_A107 * V[73];
+ V[39] = (RHS39 - tmp39) / m_A105;
+ double tmp38 = 0.0;
+ tmp38 += m_A103 * V[80];
+ tmp38 += m_A104 * V[94];
+ V[38] = (RHS38 - tmp38) / m_A102;
+ double tmp37 = 0.0;
+ tmp37 += m_A100 * V[72];
+ tmp37 += m_A101 * V[89];
+ V[37] = (RHS37 - tmp37) / m_A99;
+ double tmp36 = 0.0;
+ tmp36 += m_A97 * V[66];
+ tmp36 += m_A98 * V[71];
+ V[36] = (RHS36 - tmp36) / m_A96;
+ double tmp35 = 0.0;
+ tmp35 += m_A95 * V[70];
+ V[35] = (RHS35 - tmp35) / m_A94;
+ double tmp34 = 0.0;
+ tmp34 += m_A92 * V[63];
+ tmp34 += m_A93 * V[70];
+ V[34] = (RHS34 - tmp34) / m_A91;
+ double tmp33 = 0.0;
+ tmp33 += m_A90 * V[68];
+ V[33] = (RHS33 - tmp33) / m_A89;
+ double tmp32 = 0.0;
+ tmp32 += m_A87 * V[36];
+ tmp32 += m_A88 * V[66];
+ V[32] = (RHS32 - tmp32) / m_A86;
+ double tmp31 = 0.0;
+ tmp31 += m_A85 * V[57];
+ V[31] = (RHS31 - tmp31) / m_A84;
+ double tmp30 = 0.0;
+ tmp30 += m_A82 * V[57];
+ tmp30 += m_A83 * V[84];
+ V[30] = (RHS30 - tmp30) / m_A81;
+ double tmp29 = 0.0;
+ tmp29 += m_A80 * V[67];
+ V[29] = (RHS29 - tmp29) / m_A79;
+ double tmp28 = 0.0;
+ tmp28 += m_A77 * V[52];
+ tmp28 += m_A78 * V[67];
+ V[28] = (RHS28 - tmp28) / m_A76;
+ double tmp27 = 0.0;
+ tmp27 += m_A74 * V[30];
+ tmp27 += m_A75 * V[84];
+ V[27] = (RHS27 - tmp27) / m_A73;
+ double tmp26 = 0.0;
+ tmp26 += m_A71 * V[64];
+ tmp26 += m_A72 * V[84];
+ V[26] = (RHS26 - tmp26) / m_A70;
+ double tmp25 = 0.0;
+ tmp25 += m_A69 * V[79];
+ V[25] = (RHS25 - tmp25) / m_A68;
+ double tmp24 = 0.0;
+ tmp24 += m_A67 * V[64];
+ V[24] = (RHS24 - tmp24) / m_A66;
+ double tmp23 = 0.0;
+ tmp23 += m_A65 * V[79];
+ V[23] = (RHS23 - tmp23) / m_A64;
+ double tmp22 = 0.0;
+ tmp22 += m_A63 * V[90];
+ V[22] = (RHS22 - tmp22) / m_A62;
+ double tmp21 = 0.0;
+ tmp21 += m_A61 * V[61];
+ V[21] = (RHS21 - tmp21) / m_A60;
+ double tmp20 = 0.0;
+ tmp20 += m_A59 * V[52];
+ V[20] = (RHS20 - tmp20) / m_A58;
+ double tmp19 = 0.0;
+ tmp19 += m_A57 * V[52];
+ V[19] = (RHS19 - tmp19) / m_A56;
+ double tmp18 = 0.0;
+ tmp18 += m_A54 * V[49];
+ tmp18 += m_A55 * V[62];
+ V[18] = (RHS18 - tmp18) / m_A53;
+ double tmp17 = 0.0;
+ tmp17 += m_A52 * V[49];
+ V[17] = (RHS17 - tmp17) / m_A51;
+ double tmp16 = 0.0;
+ tmp16 += m_A47 * V[81];
+ tmp16 += m_A48 * V[88];
+ tmp16 += m_A49 * V[92];
+ tmp16 += m_A50 * V[94];
+ V[16] = (RHS16 - tmp16) / m_A46;
+ double tmp15 = 0.0;
+ tmp15 += m_A44 * V[81];
+ tmp15 += m_A45 * V[91];
+ V[15] = (RHS15 - tmp15) / m_A43;
+ double tmp14 = 0.0;
+ tmp14 += m_A41 * V[48];
+ tmp14 += m_A42 * V[75];
+ V[14] = (RHS14 - tmp14) / m_A40;
+ double tmp13 = 0.0;
+ tmp13 += m_A39 * V[48];
+ V[13] = (RHS13 - tmp13) / m_A38;
+ double tmp12 = 0.0;
+ tmp12 += m_A36 * V[65];
+ tmp12 += m_A37 * V[92];
+ V[12] = (RHS12 - tmp12) / m_A35;
+ double tmp11 = 0.0;
+ tmp11 += m_A33 * V[60];
+ tmp11 += m_A34 * V[76];
+ V[11] = (RHS11 - tmp11) / m_A32;
+ double tmp10 = 0.0;
+ tmp10 += m_A31 * V[65];
+ V[10] = (RHS10 - tmp10) / m_A30;
+ double tmp9 = 0.0;
+ tmp9 += m_A29 * V[58];
+ V[9] = (RHS9 - tmp9) / m_A28;
+ double tmp8 = 0.0;
+ tmp8 += m_A24 * V[54];
+ tmp8 += m_A25 * V[56];
+ tmp8 += m_A26 * V[78];
+ tmp8 += m_A27 * V[89];
+ V[8] = (RHS8 - tmp8) / m_A23;
+ double tmp7 = 0.0;
+ tmp7 += m_A19 * V[47];
+ tmp7 += m_A20 * V[56];
+ tmp7 += m_A21 * V[78];
+ tmp7 += m_A22 * V[89];
+ V[7] = (RHS7 - tmp7) / m_A18;
+ double tmp6 = 0.0;
+ tmp6 += m_A17 * V[53];
+ V[6] = (RHS6 - tmp6) / m_A16;
+ double tmp5 = 0.0;
+ tmp5 += m_A14 * V[51];
+ tmp5 += m_A15 * V[78];
+ V[5] = (RHS5 - tmp5) / m_A13;
+ double tmp4 = 0.0;
+ tmp4 += m_A11 * V[56];
+ tmp4 += m_A12 * V[77];
+ V[4] = (RHS4 - tmp4) / m_A10;
+ double tmp3 = 0.0;
+ tmp3 += m_A9 * V[51];
+ V[3] = (RHS3 - tmp3) / m_A8;
+ double tmp2 = 0.0;
+ tmp2 += m_A5 * V[46];
+ tmp2 += m_A6 * V[47];
+ tmp2 += m_A7 * V[54];
+ V[2] = (RHS2 - tmp2) / m_A4;
+ double tmp1 = 0.0;
+ tmp1 += m_A3 * V[50];
+ V[1] = (RHS1 - tmp1) / m_A2;
+ double tmp0 = 0.0;
+ tmp0 += m_A1 * V[46];
+ V[0] = (RHS0 - tmp0) / m_A0;
+}
+
// boxingb
static void nl_gcr_d7d45dc58b08cab9_10_double_double(double * __restrict V, const double * __restrict go, const double * __restrict gt, const double * __restrict Idr, const double * const * __restrict cnV)
@@ -32899,6 +40427,263 @@ static void nl_gcr_dbafc5ddaf7a08f8_35_double_double(double * __restrict V, cons
V[0] = (RHS0 - tmp0) / m_A0;
}
+// fireone
+static void nl_gcr_dcbecbc127c5868f_36_double_double(double * __restrict V, const double * __restrict go, const double * __restrict gt, const double * __restrict Idr, const double * const * __restrict cnV)
+
+{
+
+ plib::unused_var(cnV);
+ double m_A0(0.0);
+ double m_A1(0.0);
+ double m_A2(0.0);
+ double m_A3(0.0);
+ double m_A4(0.0);
+ double m_A5(0.0);
+ double m_A6(0.0);
+ double m_A7(0.0);
+ double m_A8(0.0);
+ double m_A9(0.0);
+ double m_A10(0.0);
+ double m_A11(0.0);
+ double m_A12(0.0);
+ double m_A13(0.0);
+ double m_A14(0.0);
+ double m_A15(0.0);
+ double m_A16(0.0);
+ double m_A17(0.0);
+ double m_A18(0.0);
+ double m_A19(0.0);
+ double m_A20(0.0);
+ double m_A21(0.0);
+ double m_A22(0.0);
+ double m_A23(0.0);
+ double m_A24(0.0);
+ double m_A25(0.0);
+ double m_A26(0.0);
+ double m_A27(0.0);
+ double m_A28(0.0);
+ double m_A29(0.0);
+ double m_A30(0.0);
+ double m_A31(0.0);
+ double m_A32(0.0);
+ double m_A33(0.0);
+ double m_A34(0.0);
+ double m_A35(0.0);
+ m_A0 += gt[0];
+ m_A0 += gt[1];
+ m_A0 += gt[2];
+ m_A0 += gt[3];
+ m_A0 += gt[4];
+ m_A0 += gt[5];
+ m_A0 += gt[6];
+ m_A1 += go[0];
+ double RHS0 = Idr[0];
+ RHS0 += Idr[1];
+ RHS0 += Idr[2];
+ RHS0 += Idr[3];
+ RHS0 += Idr[4];
+ RHS0 += Idr[5];
+ RHS0 += Idr[6];
+ RHS0 -= go[1] * *cnV[1];
+ RHS0 -= go[2] * *cnV[2];
+ RHS0 -= go[3] * *cnV[3];
+ RHS0 -= go[4] * *cnV[4];
+ RHS0 -= go[5] * *cnV[5];
+ RHS0 -= go[6] * *cnV[6];
+ m_A2 += gt[7];
+ m_A2 += gt[8];
+ m_A2 += gt[9];
+ m_A2 += gt[10];
+ m_A3 += go[7];
+ double RHS1 = Idr[7];
+ RHS1 += Idr[8];
+ RHS1 += Idr[9];
+ RHS1 += Idr[10];
+ RHS1 -= go[8] * *cnV[8];
+ RHS1 -= go[9] * *cnV[9];
+ RHS1 -= go[10] * *cnV[10];
+ m_A4 += gt[11];
+ m_A4 += gt[12];
+ m_A5 += go[11];
+ double RHS2 = Idr[11];
+ RHS2 += Idr[12];
+ RHS2 -= go[12] * *cnV[12];
+ m_A6 += gt[13];
+ m_A6 += gt[14];
+ m_A6 += gt[15];
+ m_A7 += go[13];
+ double RHS3 = Idr[13];
+ RHS3 += Idr[14];
+ RHS3 += Idr[15];
+ RHS3 -= go[14] * *cnV[14];
+ RHS3 -= go[15] * *cnV[15];
+ m_A8 += gt[16];
+ m_A8 += gt[17];
+ m_A8 += gt[18];
+ m_A9 += go[16];
+ double RHS4 = Idr[16];
+ RHS4 += Idr[17];
+ RHS4 += Idr[18];
+ RHS4 -= go[17] * *cnV[17];
+ RHS4 -= go[18] * *cnV[18];
+ m_A10 += gt[19];
+ m_A10 += gt[20];
+ m_A11 += go[19];
+ double RHS5 = Idr[19];
+ RHS5 += Idr[20];
+ RHS5 -= go[20] * *cnV[20];
+ m_A13 += gt[21];
+ m_A13 += gt[22];
+ m_A13 += gt[23];
+ m_A14 += go[21];
+ m_A12 += go[22];
+ double RHS6 = Idr[21];
+ RHS6 += Idr[22];
+ RHS6 += Idr[23];
+ RHS6 -= go[23] * *cnV[23];
+ m_A16 += gt[24];
+ m_A16 += gt[25];
+ m_A16 += gt[26];
+ m_A15 += go[24];
+ m_A17 += go[25];
+ double RHS7 = Idr[24];
+ RHS7 += Idr[25];
+ RHS7 += Idr[26];
+ RHS7 -= go[26] * *cnV[26];
+ m_A19 += gt[27];
+ m_A19 += gt[28];
+ m_A19 += gt[29];
+ m_A19 += gt[30];
+ m_A20 += go[27];
+ m_A18 += go[28];
+ double RHS8 = Idr[27];
+ RHS8 += Idr[28];
+ RHS8 += Idr[29];
+ RHS8 += Idr[30];
+ RHS8 -= go[29] * *cnV[29];
+ RHS8 -= go[30] * *cnV[30];
+ m_A24 += gt[31];
+ m_A24 += gt[32];
+ m_A24 += gt[33];
+ m_A24 += gt[34];
+ m_A24 += gt[35];
+ m_A23 += go[31];
+ m_A26 += go[32];
+ m_A25 += go[33];
+ m_A22 += go[34];
+ m_A21 += go[35];
+ double RHS9 = Idr[31];
+ RHS9 += Idr[32];
+ RHS9 += Idr[33];
+ RHS9 += Idr[34];
+ RHS9 += Idr[35];
+ m_A29 += gt[36];
+ m_A29 += gt[37];
+ m_A28 += go[36];
+ m_A27 += go[37];
+ double RHS10 = Idr[36];
+ RHS10 += Idr[37];
+ m_A35 += gt[38];
+ m_A35 += gt[39];
+ m_A35 += gt[40];
+ m_A35 += gt[41];
+ m_A35 += gt[42];
+ m_A30 += go[38];
+ m_A31 += go[39];
+ m_A33 += go[40];
+ double RHS11 = Idr[38];
+ RHS11 += Idr[39];
+ RHS11 += Idr[40];
+ RHS11 += Idr[41];
+ RHS11 += Idr[42];
+ RHS11 -= go[41] * *cnV[41];
+ RHS11 -= go[42] * *cnV[42];
+ const double f0 = 1.0 / m_A0;
+ const double f0_11 = -f0 * m_A30;
+ m_A32 += m_A1 * f0_11;
+ RHS11 += f0_11 * RHS0;
+ const double f1 = 1.0 / m_A2;
+ const double f1_6 = -f1 * m_A12;
+ m_A13 += m_A3 * f1_6;
+ RHS6 += f1_6 * RHS1;
+ const double f2 = 1.0 / m_A4;
+ const double f2_9 = -f2 * m_A21;
+ m_A25 += m_A5 * f2_9;
+ RHS9 += f2_9 * RHS2;
+ const double f2_10 = -f2 * m_A27;
+ m_A29 += m_A5 * f2_10;
+ RHS10 += f2_10 * RHS2;
+ const double f3 = 1.0 / m_A6;
+ const double f3_8 = -f3 * m_A18;
+ m_A20 += m_A7 * f3_8;
+ RHS8 += f3_8 * RHS3;
+ const double f3_9 = -f3 * m_A22;
+ m_A24 += m_A7 * f3_9;
+ RHS9 += f3_9 * RHS3;
+ const double f4 = 1.0 / m_A8;
+ const double f4_7 = -f4 * m_A15;
+ m_A16 += m_A9 * f4_7;
+ RHS7 += f4_7 * RHS4;
+ const double f5 = 1.0 / m_A10;
+ const double f5_9 = -f5 * m_A23;
+ m_A24 += m_A11 * f5_9;
+ RHS9 += f5_9 * RHS5;
+ const double f6 = 1.0 / m_A13;
+ const double f6_10 = -f6 * m_A28;
+ m_A29 += m_A14 * f6_10;
+ RHS10 += f6_10 * RHS6;
+ const double f7 = 1.0 / m_A16;
+ const double f7_11 = -f7 * m_A31;
+ m_A35 += m_A17 * f7_11;
+ RHS11 += f7_11 * RHS7;
+ const double f8 = 1.0 / m_A19;
+ const double f8_11 = -f8 * m_A32;
+ m_A33 += m_A20 * f8_11;
+ RHS11 += f8_11 * RHS8;
+ const double f9 = 1.0 / m_A24;
+ const double f9_11 = -f9 * m_A33;
+ m_A34 += m_A25 * f9_11;
+ m_A35 += m_A26 * f9_11;
+ RHS11 += f9_11 * RHS9;
+ const double f10 = 1.0 / m_A29;
+ const double f10_11 = -f10 * m_A34;
+ RHS11 += f10_11 * RHS10;
+ V[11] = RHS11 / m_A35;
+ double tmp10 = 0.0;
+ V[10] = (RHS10 - tmp10) / m_A29;
+ double tmp9 = 0.0;
+ tmp9 += m_A25 * V[10];
+ tmp9 += m_A26 * V[11];
+ V[9] = (RHS9 - tmp9) / m_A24;
+ double tmp8 = 0.0;
+ tmp8 += m_A20 * V[9];
+ V[8] = (RHS8 - tmp8) / m_A19;
+ double tmp7 = 0.0;
+ tmp7 += m_A17 * V[11];
+ V[7] = (RHS7 - tmp7) / m_A16;
+ double tmp6 = 0.0;
+ tmp6 += m_A14 * V[10];
+ V[6] = (RHS6 - tmp6) / m_A13;
+ double tmp5 = 0.0;
+ tmp5 += m_A11 * V[9];
+ V[5] = (RHS5 - tmp5) / m_A10;
+ double tmp4 = 0.0;
+ tmp4 += m_A9 * V[7];
+ V[4] = (RHS4 - tmp4) / m_A8;
+ double tmp3 = 0.0;
+ tmp3 += m_A7 * V[9];
+ V[3] = (RHS3 - tmp3) / m_A6;
+ double tmp2 = 0.0;
+ tmp2 += m_A5 * V[10];
+ V[2] = (RHS2 - tmp2) / m_A4;
+ double tmp1 = 0.0;
+ tmp1 += m_A3 * V[6];
+ V[1] = (RHS1 - tmp1) / m_A2;
+ double tmp0 = 0.0;
+ tmp0 += m_A1 * V[8];
+ V[0] = (RHS0 - tmp0) / m_A0;
+}
+
// sundance
static void nl_gcr_e02a162cb515a958_100_double_double(double * __restrict V, const double * __restrict go, const double * __restrict gt, const double * __restrict Idr, const double * const * __restrict cnV)
@@ -35674,6 +43459,70 @@ static void nl_gcr_e75302e17c866419_150_double_double(double * __restrict V, con
V[0] = (RHS0 - tmp0) / m_A0;
}
+// fireone
+static void nl_gcr_e7fb484f621b3ab9_7_double_double(double * __restrict V, const double * __restrict go, const double * __restrict gt, const double * __restrict Idr, const double * const * __restrict cnV)
+
+{
+
+ plib::unused_var(cnV);
+ double m_A0(0.0);
+ double m_A1(0.0);
+ double m_A2(0.0);
+ double m_A3(0.0);
+ double m_A4(0.0);
+ double m_A5(0.0);
+ double m_A6(0.0);
+ m_A0 += gt[0];
+ m_A0 += gt[1];
+ m_A0 += gt[2];
+ m_A0 += gt[3];
+ m_A1 += go[0];
+ double RHS0 = Idr[0];
+ RHS0 += Idr[1];
+ RHS0 += Idr[2];
+ RHS0 += Idr[3];
+ RHS0 -= go[1] * *cnV[1];
+ RHS0 -= go[2] * *cnV[2];
+ RHS0 -= go[3] * *cnV[3];
+ m_A3 += gt[4];
+ m_A3 += gt[5];
+ m_A3 += gt[6];
+ m_A2 += go[4];
+ double RHS1 = Idr[4];
+ RHS1 += Idr[5];
+ RHS1 += Idr[6];
+ RHS1 -= go[5] * *cnV[5];
+ RHS1 -= go[6] * *cnV[6];
+ m_A6 += gt[7];
+ m_A6 += gt[8];
+ m_A6 += gt[9];
+ m_A6 += gt[10];
+ m_A4 += go[7];
+ double RHS2 = Idr[7];
+ RHS2 += Idr[8];
+ RHS2 += Idr[9];
+ RHS2 += Idr[10];
+ RHS2 -= go[8] * *cnV[8];
+ RHS2 -= go[9] * *cnV[9];
+ RHS2 -= go[10] * *cnV[10];
+ const double f0 = 1.0 / m_A0;
+ const double f0_1 = -f0 * m_A2;
+ m_A3 += m_A1 * f0_1;
+ RHS1 += f0_1 * RHS0;
+ const double f0_2 = -f0 * m_A4;
+ m_A5 += m_A1 * f0_2;
+ RHS2 += f0_2 * RHS0;
+ const double f1 = 1.0 / m_A3;
+ const double f1_2 = -f1 * m_A5;
+ RHS2 += f1_2 * RHS1;
+ V[2] = RHS2 / m_A6;
+ double tmp1 = 0.0;
+ V[1] = (RHS1 - tmp1) / m_A3;
+ double tmp0 = 0.0;
+ tmp0 += m_A1 * V[1];
+ V[0] = (RHS0 - tmp0) / m_A0;
+}
+
// spacewar
static void nl_gcr_e9e8211f43d8f4b3_22_double_double(double * __restrict V, const double * __restrict go, const double * __restrict gt, const double * __restrict Idr, const double * const * __restrict cnV)
@@ -38474,6 +46323,63 @@ static void nl_gcr_f7dc4f87b5a8ba93_7_double_double(double * __restrict V, const
V[0] = (RHS0 - tmp0) / m_A0;
}
+// fireone
+static void nl_gcr_f8f6a951fd1af6bc_7_double_double(double * __restrict V, const double * __restrict go, const double * __restrict gt, const double * __restrict Idr, const double * const * __restrict cnV)
+
+{
+
+ plib::unused_var(cnV);
+ double m_A0(0.0);
+ double m_A1(0.0);
+ double m_A2(0.0);
+ double m_A3(0.0);
+ double m_A4(0.0);
+ double m_A5(0.0);
+ double m_A6(0.0);
+ m_A0 += gt[0];
+ m_A0 += gt[1];
+ m_A1 += go[0];
+ double RHS0 = Idr[0];
+ RHS0 += Idr[1];
+ RHS0 -= go[1] * *cnV[1];
+ m_A2 += gt[2];
+ m_A2 += gt[3];
+ m_A2 += gt[4];
+ m_A2 += gt[5];
+ m_A3 += go[2];
+ double RHS1 = Idr[2];
+ RHS1 += Idr[3];
+ RHS1 += Idr[4];
+ RHS1 += Idr[5];
+ RHS1 -= go[3] * *cnV[3];
+ RHS1 -= go[4] * *cnV[4];
+ RHS1 -= go[5] * *cnV[5];
+ m_A6 += gt[6];
+ m_A6 += gt[7];
+ m_A6 += gt[8];
+ m_A5 += go[6];
+ m_A4 += go[7];
+ double RHS2 = Idr[6];
+ RHS2 += Idr[7];
+ RHS2 += Idr[8];
+ RHS2 -= go[8] * *cnV[8];
+ const double f0 = 1.0 / m_A0;
+ const double f0_2 = -f0 * m_A4;
+ m_A6 += m_A1 * f0_2;
+ RHS2 += f0_2 * RHS0;
+ const double f1 = 1.0 / m_A2;
+ const double f1_2 = -f1 * m_A5;
+ m_A6 += m_A3 * f1_2;
+ RHS2 += f1_2 * RHS1;
+ V[2] = RHS2 / m_A6;
+ double tmp1 = 0.0;
+ tmp1 += m_A3 * V[2];
+ V[1] = (RHS1 - tmp1) / m_A2;
+ double tmp0 = 0.0;
+ tmp0 += m_A1 * V[2];
+ V[0] = (RHS0 - tmp0) / m_A0;
+}
+
// kidniki
static void nl_gcr_fc02559fdbfb0e10_67_double_double(double * __restrict V, const double * __restrict go, const double * __restrict gt, const double * __restrict Idr, const double * const * __restrict cnV)
@@ -39864,6 +47770,327 @@ static void nl_gcr_fc9971724787b82b_149_double_double(double * __restrict V, con
V[0] = (RHS0 - tmp0) / m_A0;
}
+// fireone
+static void nl_gcr_fd2796828f1ebd00_36_double_double(double * __restrict V, const double * __restrict go, const double * __restrict gt, const double * __restrict Idr, const double * const * __restrict cnV)
+
+{
+
+ plib::unused_var(cnV);
+ double m_A0(0.0);
+ double m_A1(0.0);
+ double m_A2(0.0);
+ double m_A3(0.0);
+ double m_A4(0.0);
+ double m_A5(0.0);
+ double m_A6(0.0);
+ double m_A7(0.0);
+ double m_A8(0.0);
+ double m_A9(0.0);
+ double m_A10(0.0);
+ double m_A11(0.0);
+ double m_A12(0.0);
+ double m_A13(0.0);
+ double m_A14(0.0);
+ double m_A15(0.0);
+ double m_A16(0.0);
+ double m_A17(0.0);
+ double m_A18(0.0);
+ double m_A19(0.0);
+ double m_A20(0.0);
+ double m_A21(0.0);
+ double m_A22(0.0);
+ double m_A23(0.0);
+ double m_A24(0.0);
+ double m_A25(0.0);
+ double m_A26(0.0);
+ double m_A27(0.0);
+ double m_A28(0.0);
+ double m_A29(0.0);
+ double m_A30(0.0);
+ double m_A31(0.0);
+ double m_A32(0.0);
+ double m_A33(0.0);
+ double m_A34(0.0);
+ double m_A35(0.0);
+ m_A0 += gt[0];
+ m_A0 += gt[1];
+ m_A0 += gt[2];
+ m_A0 += gt[3];
+ m_A0 += gt[4];
+ m_A0 += gt[5];
+ m_A0 += gt[6];
+ m_A1 += go[0];
+ double RHS0 = Idr[0];
+ RHS0 += Idr[1];
+ RHS0 += Idr[2];
+ RHS0 += Idr[3];
+ RHS0 += Idr[4];
+ RHS0 += Idr[5];
+ RHS0 += Idr[6];
+ RHS0 -= go[1] * *cnV[1];
+ RHS0 -= go[2] * *cnV[2];
+ RHS0 -= go[3] * *cnV[3];
+ RHS0 -= go[4] * *cnV[4];
+ RHS0 -= go[5] * *cnV[5];
+ RHS0 -= go[6] * *cnV[6];
+ m_A2 += gt[7];
+ m_A2 += gt[8];
+ m_A2 += gt[9];
+ m_A2 += gt[10];
+ m_A3 += go[7];
+ double RHS1 = Idr[7];
+ RHS1 += Idr[8];
+ RHS1 += Idr[9];
+ RHS1 += Idr[10];
+ RHS1 -= go[8] * *cnV[8];
+ RHS1 -= go[9] * *cnV[9];
+ RHS1 -= go[10] * *cnV[10];
+ m_A4 += gt[11];
+ m_A4 += gt[12];
+ m_A5 += go[11];
+ double RHS2 = Idr[11];
+ RHS2 += Idr[12];
+ RHS2 -= go[12] * *cnV[12];
+ m_A6 += gt[13];
+ m_A6 += gt[14];
+ m_A6 += gt[15];
+ m_A7 += go[13];
+ double RHS3 = Idr[13];
+ RHS3 += Idr[14];
+ RHS3 += Idr[15];
+ RHS3 -= go[14] * *cnV[14];
+ RHS3 -= go[15] * *cnV[15];
+ m_A8 += gt[16];
+ m_A8 += gt[17];
+ m_A8 += gt[18];
+ m_A8 += gt[19];
+ m_A9 += go[16];
+ double RHS4 = Idr[16];
+ RHS4 += Idr[17];
+ RHS4 += Idr[18];
+ RHS4 += Idr[19];
+ RHS4 -= go[17] * *cnV[17];
+ RHS4 -= go[18] * *cnV[18];
+ RHS4 -= go[19] * *cnV[19];
+ m_A10 += gt[20];
+ m_A10 += gt[21];
+ m_A11 += go[20];
+ double RHS5 = Idr[20];
+ RHS5 += Idr[21];
+ RHS5 -= go[21] * *cnV[21];
+ m_A13 += gt[22];
+ m_A13 += gt[23];
+ m_A13 += gt[24];
+ m_A14 += go[22];
+ m_A12 += go[23];
+ double RHS6 = Idr[22];
+ RHS6 += Idr[23];
+ RHS6 += Idr[24];
+ RHS6 -= go[24] * *cnV[24];
+ m_A16 += gt[25];
+ m_A16 += gt[26];
+ m_A16 += gt[27];
+ m_A15 += go[25];
+ m_A17 += go[26];
+ double RHS7 = Idr[25];
+ RHS7 += Idr[26];
+ RHS7 += Idr[27];
+ RHS7 -= go[27] * *cnV[27];
+ m_A19 += gt[28];
+ m_A19 += gt[29];
+ m_A19 += gt[30];
+ m_A19 += gt[31];
+ m_A20 += go[28];
+ m_A18 += go[29];
+ double RHS8 = Idr[28];
+ RHS8 += Idr[29];
+ RHS8 += Idr[30];
+ RHS8 += Idr[31];
+ RHS8 -= go[30] * *cnV[30];
+ RHS8 -= go[31] * *cnV[31];
+ m_A24 += gt[32];
+ m_A24 += gt[33];
+ m_A24 += gt[34];
+ m_A24 += gt[35];
+ m_A24 += gt[36];
+ m_A23 += go[32];
+ m_A26 += go[33];
+ m_A25 += go[34];
+ m_A22 += go[35];
+ m_A21 += go[36];
+ double RHS9 = Idr[32];
+ RHS9 += Idr[33];
+ RHS9 += Idr[34];
+ RHS9 += Idr[35];
+ RHS9 += Idr[36];
+ m_A29 += gt[37];
+ m_A29 += gt[38];
+ m_A28 += go[37];
+ m_A27 += go[38];
+ double RHS10 = Idr[37];
+ RHS10 += Idr[38];
+ m_A35 += gt[39];
+ m_A35 += gt[40];
+ m_A35 += gt[41];
+ m_A35 += gt[42];
+ m_A35 += gt[43];
+ m_A30 += go[39];
+ m_A31 += go[40];
+ m_A33 += go[41];
+ double RHS11 = Idr[39];
+ RHS11 += Idr[40];
+ RHS11 += Idr[41];
+ RHS11 += Idr[42];
+ RHS11 += Idr[43];
+ RHS11 -= go[42] * *cnV[42];
+ RHS11 -= go[43] * *cnV[43];
+ const double f0 = 1.0 / m_A0;
+ const double f0_11 = -f0 * m_A30;
+ m_A32 += m_A1 * f0_11;
+ RHS11 += f0_11 * RHS0;
+ const double f1 = 1.0 / m_A2;
+ const double f1_6 = -f1 * m_A12;
+ m_A13 += m_A3 * f1_6;
+ RHS6 += f1_6 * RHS1;
+ const double f2 = 1.0 / m_A4;
+ const double f2_9 = -f2 * m_A21;
+ m_A25 += m_A5 * f2_9;
+ RHS9 += f2_9 * RHS2;
+ const double f2_10 = -f2 * m_A27;
+ m_A29 += m_A5 * f2_10;
+ RHS10 += f2_10 * RHS2;
+ const double f3 = 1.0 / m_A6;
+ const double f3_8 = -f3 * m_A18;
+ m_A20 += m_A7 * f3_8;
+ RHS8 += f3_8 * RHS3;
+ const double f3_9 = -f3 * m_A22;
+ m_A24 += m_A7 * f3_9;
+ RHS9 += f3_9 * RHS3;
+ const double f4 = 1.0 / m_A8;
+ const double f4_7 = -f4 * m_A15;
+ m_A16 += m_A9 * f4_7;
+ RHS7 += f4_7 * RHS4;
+ const double f5 = 1.0 / m_A10;
+ const double f5_9 = -f5 * m_A23;
+ m_A24 += m_A11 * f5_9;
+ RHS9 += f5_9 * RHS5;
+ const double f6 = 1.0 / m_A13;
+ const double f6_10 = -f6 * m_A28;
+ m_A29 += m_A14 * f6_10;
+ RHS10 += f6_10 * RHS6;
+ const double f7 = 1.0 / m_A16;
+ const double f7_11 = -f7 * m_A31;
+ m_A35 += m_A17 * f7_11;
+ RHS11 += f7_11 * RHS7;
+ const double f8 = 1.0 / m_A19;
+ const double f8_11 = -f8 * m_A32;
+ m_A33 += m_A20 * f8_11;
+ RHS11 += f8_11 * RHS8;
+ const double f9 = 1.0 / m_A24;
+ const double f9_11 = -f9 * m_A33;
+ m_A34 += m_A25 * f9_11;
+ m_A35 += m_A26 * f9_11;
+ RHS11 += f9_11 * RHS9;
+ const double f10 = 1.0 / m_A29;
+ const double f10_11 = -f10 * m_A34;
+ RHS11 += f10_11 * RHS10;
+ V[11] = RHS11 / m_A35;
+ double tmp10 = 0.0;
+ V[10] = (RHS10 - tmp10) / m_A29;
+ double tmp9 = 0.0;
+ tmp9 += m_A25 * V[10];
+ tmp9 += m_A26 * V[11];
+ V[9] = (RHS9 - tmp9) / m_A24;
+ double tmp8 = 0.0;
+ tmp8 += m_A20 * V[9];
+ V[8] = (RHS8 - tmp8) / m_A19;
+ double tmp7 = 0.0;
+ tmp7 += m_A17 * V[11];
+ V[7] = (RHS7 - tmp7) / m_A16;
+ double tmp6 = 0.0;
+ tmp6 += m_A14 * V[10];
+ V[6] = (RHS6 - tmp6) / m_A13;
+ double tmp5 = 0.0;
+ tmp5 += m_A11 * V[9];
+ V[5] = (RHS5 - tmp5) / m_A10;
+ double tmp4 = 0.0;
+ tmp4 += m_A9 * V[7];
+ V[4] = (RHS4 - tmp4) / m_A8;
+ double tmp3 = 0.0;
+ tmp3 += m_A7 * V[9];
+ V[3] = (RHS3 - tmp3) / m_A6;
+ double tmp2 = 0.0;
+ tmp2 += m_A5 * V[10];
+ V[2] = (RHS2 - tmp2) / m_A4;
+ double tmp1 = 0.0;
+ tmp1 += m_A3 * V[6];
+ V[1] = (RHS1 - tmp1) / m_A2;
+ double tmp0 = 0.0;
+ tmp0 += m_A1 * V[8];
+ V[0] = (RHS0 - tmp0) / m_A0;
+}
+
+// starfire
+static void nl_gcr_feae15b80dd73620_7_double_double(double * __restrict V, const double * __restrict go, const double * __restrict gt, const double * __restrict Idr, const double * const * __restrict cnV)
+
+{
+
+ plib::unused_var(cnV);
+ double m_A0(0.0);
+ double m_A1(0.0);
+ double m_A2(0.0);
+ double m_A3(0.0);
+ double m_A4(0.0);
+ double m_A5(0.0);
+ double m_A6(0.0);
+ m_A0 += gt[0];
+ m_A0 += gt[1];
+ m_A0 += gt[2];
+ m_A0 += gt[3];
+ m_A1 += go[0];
+ double RHS0 = Idr[0];
+ RHS0 += Idr[1];
+ RHS0 += Idr[2];
+ RHS0 += Idr[3];
+ RHS0 -= go[1] * *cnV[1];
+ RHS0 -= go[2] * *cnV[2];
+ RHS0 -= go[3] * *cnV[3];
+ m_A3 += gt[4];
+ m_A3 += gt[5];
+ m_A3 += gt[6];
+ m_A2 += go[4];
+ double RHS1 = Idr[4];
+ RHS1 += Idr[5];
+ RHS1 += Idr[6];
+ RHS1 -= go[5] * *cnV[5];
+ RHS1 -= go[6] * *cnV[6];
+ m_A6 += gt[7];
+ m_A6 += gt[8];
+ m_A6 += gt[9];
+ m_A4 += go[7];
+ double RHS2 = Idr[7];
+ RHS2 += Idr[8];
+ RHS2 += Idr[9];
+ RHS2 -= go[8] * *cnV[8];
+ RHS2 -= go[9] * *cnV[9];
+ const double f0 = 1.0 / m_A0;
+ const double f0_1 = -f0 * m_A2;
+ m_A3 += m_A1 * f0_1;
+ RHS1 += f0_1 * RHS0;
+ const double f0_2 = -f0 * m_A4;
+ m_A5 += m_A1 * f0_2;
+ RHS2 += f0_2 * RHS0;
+ const double f1 = 1.0 / m_A3;
+ const double f1_2 = -f1 * m_A5;
+ RHS2 += f1_2 * RHS1;
+ V[2] = RHS2 / m_A6;
+ double tmp1 = 0.0;
+ V[1] = (RHS1 - tmp1) / m_A3;
+ double tmp0 = 0.0;
+ tmp0 += m_A1 * V[1];
+ V[0] = (RHS0 - tmp0) / m_A0;
+}
+
extern const plib::dynlib_static_sym nl_static_solver_syms[];
const plib::dynlib_static_sym nl_static_solver_syms[] = {
// tankbatt
@@ -39916,6 +48143,8 @@ const plib::dynlib_static_sym nl_static_solver_syms[] = {
{"nl_gcr_4cb524006206eb1a_25_double_double", reinterpret_cast<void *>(&nl_gcr_4cb524006206eb1a_25_double_double)},
// solarq
{"nl_gcr_4e4931ccbfb7a3c_70_double_double", reinterpret_cast<void *>(&nl_gcr_4e4931ccbfb7a3c_70_double_double)},
+// fireone
+ {"nl_gcr_4f2b2f3cdc384f75_41_double_double", reinterpret_cast<void *>(&nl_gcr_4f2b2f3cdc384f75_41_double_double)},
// boxingb
{"nl_gcr_50f5194a994d56ec_16_double_double", reinterpret_cast<void *>(&nl_gcr_50f5194a994d56ec_16_double_double)},
// starhawk
@@ -39938,6 +48167,10 @@ const plib::dynlib_static_sym nl_static_solver_syms[] = {
{"nl_gcr_62612f71055b8fd4_303_double_double", reinterpret_cast<void *>(&nl_gcr_62612f71055b8fd4_303_double_double)},
// konami1x
{"nl_gcr_62b99b9904a8c804_49_double_double", reinterpret_cast<void *>(&nl_gcr_62b99b9904a8c804_49_double_double)},
+// fireone
+ {"nl_gcr_643133e86b2b1628_73_double_double", reinterpret_cast<void *>(&nl_gcr_643133e86b2b1628_73_double_double)},
+// starfire
+ {"nl_gcr_649ebca7fa6793ed_27_double_double", reinterpret_cast<void *>(&nl_gcr_649ebca7fa6793ed_27_double_double)},
// armora
{"nl_gcr_64e460d8f716cd89_58_double_double", reinterpret_cast<void *>(&nl_gcr_64e460d8f716cd89_58_double_double)},
// solarq
@@ -39970,7 +48203,9 @@ const plib::dynlib_static_sym nl_static_solver_syms[] = {
{"nl_gcr_79e756c5892cf87d_31_double_double", reinterpret_cast<void *>(&nl_gcr_79e756c5892cf87d_31_double_double)},
// breakout
{"nl_gcr_7a42b97d838ca073_7_double_double", reinterpret_cast<void *>(&nl_gcr_7a42b97d838ca073_7_double_double)},
-// cheekyms
+// fireone
+ {"nl_gcr_7aee4423e3fdbfda_128_double_double", reinterpret_cast<void *>(&nl_gcr_7aee4423e3fdbfda_128_double_double)},
+// rebound
{"nl_gcr_7c86a9bc1c6aef4c_7_double_double", reinterpret_cast<void *>(&nl_gcr_7c86a9bc1c6aef4c_7_double_double)},
// solarq
{"nl_gcr_7caaa135bff3d9f3_15_double_double", reinterpret_cast<void *>(&nl_gcr_7caaa135bff3d9f3_15_double_double)},
@@ -40000,12 +48235,16 @@ const plib::dynlib_static_sym nl_static_solver_syms[] = {
{"nl_gcr_8bec817b324dcc3_28_double_double", reinterpret_cast<void *>(&nl_gcr_8bec817b324dcc3_28_double_double)},
// cocoloco
{"nl_gcr_8c0f7f2284333de5_16_double_double", reinterpret_cast<void *>(&nl_gcr_8c0f7f2284333de5_16_double_double)},
+// fireone
+ {"nl_gcr_8c512fd6a6dabc50_35_double_double", reinterpret_cast<void *>(&nl_gcr_8c512fd6a6dabc50_35_double_double)},
// starcrus
{"nl_gcr_8d7bddf33d942482_129_double_double", reinterpret_cast<void *>(&nl_gcr_8d7bddf33d942482_129_double_double)},
// gamemachine
{"nl_gcr_934712b55bb3b2b2_10_double_double", reinterpret_cast<void *>(&nl_gcr_934712b55bb3b2b2_10_double_double)},
// kidniki
{"nl_gcr_9a5874c8e2da79d2_37_double_double", reinterpret_cast<void *>(&nl_gcr_9a5874c8e2da79d2_37_double_double)},
+// fireone
+ {"nl_gcr_9aa159329f86ca8b_70_double_double", reinterpret_cast<void *>(&nl_gcr_9aa159329f86ca8b_70_double_double)},
// warrior
{"nl_gcr_9c975530a1a529d6_7_double_double", reinterpret_cast<void *>(&nl_gcr_9c975530a1a529d6_7_double_double)},
// kidniki
@@ -40034,10 +48273,14 @@ const plib::dynlib_static_sym nl_static_solver_syms[] = {
{"nl_gcr_a6cfda6668b153c2_22_double_double", reinterpret_cast<void *>(&nl_gcr_a6cfda6668b153c2_22_double_double)},
// boxingb
{"nl_gcr_a6f74be7f61e6db2_29_double_double", reinterpret_cast<void *>(&nl_gcr_a6f74be7f61e6db2_29_double_double)},
+// carpolo
+ {"nl_gcr_a8f1d076330f06b7_34_double_double", reinterpret_cast<void *>(&nl_gcr_a8f1d076330f06b7_34_double_double)},
// breakout
{"nl_gcr_a971eeb2ef76f75f_13_double_double", reinterpret_cast<void *>(&nl_gcr_a971eeb2ef76f75f_13_double_double)},
// ripoff
{"nl_gcr_aa07266ef5d420d1_11_double_double", reinterpret_cast<void *>(&nl_gcr_aa07266ef5d420d1_11_double_double)},
+// starfire
+ {"nl_gcr_aceb6035dfb557c9_12_double_double", reinterpret_cast<void *>(&nl_gcr_aceb6035dfb557c9_12_double_double)},
// sundance
{"nl_gcr_ad6dba01ff2425c3_12_double_double", reinterpret_cast<void *>(&nl_gcr_ad6dba01ff2425c3_12_double_double)},
// rebound
@@ -40052,14 +48295,20 @@ const plib::dynlib_static_sym nl_static_solver_syms[] = {
{"nl_gcr_b66ff415b228d5f8_10_double_double", reinterpret_cast<void *>(&nl_gcr_b66ff415b228d5f8_10_double_double)},
// starcas
{"nl_gcr_b7344e05aac90017_65_double_double", reinterpret_cast<void *>(&nl_gcr_b7344e05aac90017_65_double_double)},
+// starfire
+ {"nl_gcr_b75e0baeb501e907_23_double_double", reinterpret_cast<void *>(&nl_gcr_b75e0baeb501e907_23_double_double)},
// boxingb
{"nl_gcr_b8d6d148a50bdb8f_55_double_double", reinterpret_cast<void *>(&nl_gcr_b8d6d148a50bdb8f_55_double_double)},
// 280zzzap
{"nl_gcr_bb501e6a23177009_57_double_double", reinterpret_cast<void *>(&nl_gcr_bb501e6a23177009_57_double_double)},
+// starfire
+ {"nl_gcr_bd1514d7defd4062_9_double_double", reinterpret_cast<void *>(&nl_gcr_bd1514d7defd4062_9_double_double)},
// ripoff
{"nl_gcr_be7c805100c522fd_59_double_double", reinterpret_cast<void *>(&nl_gcr_be7c805100c522fd_59_double_double)},
// warrior
{"nl_gcr_bff07f8d339f7cc4_89_double_double", reinterpret_cast<void *>(&nl_gcr_bff07f8d339f7cc4_89_double_double)},
+// fireone
+ {"nl_gcr_c1d22fe6e895255d_79_double_double", reinterpret_cast<void *>(&nl_gcr_c1d22fe6e895255d_79_double_double)},
// starcrus
{"nl_gcr_c2e616f3de30f15b_31_double_double", reinterpret_cast<void *>(&nl_gcr_c2e616f3de30f15b_31_double_double)},
// tailg
@@ -40074,6 +48323,8 @@ const plib::dynlib_static_sym nl_static_solver_syms[] = {
{"nl_gcr_cb2aae3366e0ac1c_7_double_double", reinterpret_cast<void *>(&nl_gcr_cb2aae3366e0ac1c_7_double_double)},
// barrier
{"nl_gcr_cc913f9c3f9293e7_19_double_double", reinterpret_cast<void *>(&nl_gcr_cc913f9c3f9293e7_19_double_double)},
+// fireone
+ {"nl_gcr_cca3d1a4219e2ec0_153_double_double", reinterpret_cast<void *>(&nl_gcr_cca3d1a4219e2ec0_153_double_double)},
// 1942
{"nl_gcr_ce766957cb26ff3e_90_double_double", reinterpret_cast<void *>(&nl_gcr_ce766957cb26ff3e_90_double_double)},
// zac1b11142
@@ -40084,6 +48335,8 @@ const plib::dynlib_static_sym nl_static_solver_syms[] = {
{"nl_gcr_d06bd7ddbfd17b5e_15_double_double", reinterpret_cast<void *>(&nl_gcr_d06bd7ddbfd17b5e_15_double_double)},
// armora
{"nl_gcr_d27a39bc93616187_45_double_double", reinterpret_cast<void *>(&nl_gcr_d27a39bc93616187_45_double_double)},
+// starfire
+ {"nl_gcr_d32effa2b0ea54a1_438_double_double", reinterpret_cast<void *>(&nl_gcr_d32effa2b0ea54a1_438_double_double)},
// boxingb
{"nl_gcr_d7d45dc58b08cab9_10_double_double", reinterpret_cast<void *>(&nl_gcr_d7d45dc58b08cab9_10_double_double)},
// kidniki
@@ -40092,6 +48345,8 @@ const plib::dynlib_static_sym nl_static_solver_syms[] = {
{"nl_gcr_da598f43329e823_27_double_double", reinterpret_cast<void *>(&nl_gcr_da598f43329e823_27_double_double)},
// pongf
{"nl_gcr_dbafc5ddaf7a08f8_35_double_double", reinterpret_cast<void *>(&nl_gcr_dbafc5ddaf7a08f8_35_double_double)},
+// fireone
+ {"nl_gcr_dcbecbc127c5868f_36_double_double", reinterpret_cast<void *>(&nl_gcr_dcbecbc127c5868f_36_double_double)},
// sundance
{"nl_gcr_e02a162cb515a958_100_double_double", reinterpret_cast<void *>(&nl_gcr_e02a162cb515a958_100_double_double)},
// speedfrk
@@ -40110,6 +48365,8 @@ const plib::dynlib_static_sym nl_static_solver_syms[] = {
{"nl_gcr_e60314070a75e121_20_double_double", reinterpret_cast<void *>(&nl_gcr_e60314070a75e121_20_double_double)},
// cheekyms
{"nl_gcr_e75302e17c866419_150_double_double", reinterpret_cast<void *>(&nl_gcr_e75302e17c866419_150_double_double)},
+// fireone
+ {"nl_gcr_e7fb484f621b3ab9_7_double_double", reinterpret_cast<void *>(&nl_gcr_e7fb484f621b3ab9_7_double_double)},
// spacewar
{"nl_gcr_e9e8211f43d8f4b3_22_double_double", reinterpret_cast<void *>(&nl_gcr_e9e8211f43d8f4b3_22_double_double)},
// boxingb
@@ -40130,9 +48387,15 @@ const plib::dynlib_static_sym nl_static_solver_syms[] = {
{"nl_gcr_f6900d3f36a91049_85_double_double", reinterpret_cast<void *>(&nl_gcr_f6900d3f36a91049_85_double_double)},
// breakout
{"nl_gcr_f7dc4f87b5a8ba93_7_double_double", reinterpret_cast<void *>(&nl_gcr_f7dc4f87b5a8ba93_7_double_double)},
+// fireone
+ {"nl_gcr_f8f6a951fd1af6bc_7_double_double", reinterpret_cast<void *>(&nl_gcr_f8f6a951fd1af6bc_7_double_double)},
// kidniki
{"nl_gcr_fc02559fdbfb0e10_67_double_double", reinterpret_cast<void *>(&nl_gcr_fc02559fdbfb0e10_67_double_double)},
// 280zzzap
{"nl_gcr_fc9971724787b82b_149_double_double", reinterpret_cast<void *>(&nl_gcr_fc9971724787b82b_149_double_double)},
+// fireone
+ {"nl_gcr_fd2796828f1ebd00_36_double_double", reinterpret_cast<void *>(&nl_gcr_fd2796828f1ebd00_36_double_double)},
+// starfire
+ {"nl_gcr_feae15b80dd73620_7_double_double", reinterpret_cast<void *>(&nl_gcr_feae15b80dd73620_7_double_double)},
{"", nullptr}
};
diff --git a/src/lib/netlist/macro/nlm_base.cpp b/src/lib/netlist/macro/nlm_base_lib.cpp
index 920eb2a7f2d..04676fc5338 100644
--- a/src/lib/netlist/macro/nlm_base.cpp
+++ b/src/lib/netlist/macro/nlm_base_lib.cpp
@@ -98,7 +98,7 @@ NETLIST_END()
* Always included
* ---------------------------------------------------------------------------*/
-NETLIST_START(base)
+NETLIST_START(base_lib)
NET_REGISTER_DEV(GNDA, GND)
NET_REGISTER_DEV(PARAMETER, NETLIST)
@@ -107,21 +107,22 @@ NETLIST_START(base)
LOCAL_SOURCE(mosfet_models)
LOCAL_SOURCE(family_models)
- LOCAL_SOURCE(TTL74XX_lib)
- LOCAL_SOURCE(CD4XXX_lib)
- LOCAL_SOURCE(OPAMP_lib)
+ LOCAL_SOURCE(ttl74xx_lib)
+ LOCAL_SOURCE(cd4xxx_lib)
+ LOCAL_SOURCE(opamp_lib)
LOCAL_SOURCE(otheric_lib)
- LOCAL_SOURCE(ROMS_lib)
+ LOCAL_SOURCE(roms_lib)
INCLUDE(diode_models)
INCLUDE(bjt_models)
INCLUDE(mosfet_models)
INCLUDE(family_models)
- INCLUDE(TTL74XX_lib)
- INCLUDE(CD4XXX_lib)
- INCLUDE(OPAMP_lib)
+
+ INCLUDE(ttl74xx_lib)
+ INCLUDE(cd4xxx_lib)
+ INCLUDE(opamp_lib)
INCLUDE(otheric_lib)
- INCLUDE(ROMS_lib)
+ INCLUDE(roms_lib)
NETLIST_END()
diff --git a/src/lib/netlist/macro/nlm_base.h b/src/lib/netlist/macro/nlm_base_lib.h
index 2b5596b5410..1da4bb8d172 100644
--- a/src/lib/netlist/macro/nlm_base.h
+++ b/src/lib/netlist/macro/nlm_base_lib.h
@@ -27,7 +27,7 @@
* External declarations
* ---------------------------------------------------------------------------*/
-NETLIST_EXTERNAL(base)
+NETLIST_EXTERNAL(base_lib)
#endif
diff --git a/src/lib/netlist/macro/nlm_cd4xxx.cpp b/src/lib/netlist/macro/nlm_cd4xxx_lib.cpp
index 56150a2d31e..492736d75ca 100644
--- a/src/lib/netlist/macro/nlm_cd4xxx.cpp
+++ b/src/lib/netlist/macro/nlm_cd4xxx_lib.cpp
@@ -552,7 +552,7 @@ static NETLIST_START(CD4538_DIP)
NETLIST_END()
-NETLIST_START(CD4XXX_lib)
+NETLIST_START(cd4xxx_lib)
TRUTHTABLE_START(CD4001_GATE, 2, 1, "")
TT_HEAD("A , B | Q ")
diff --git a/src/lib/netlist/macro/nlm_cd4xxx.h b/src/lib/netlist/macro/nlm_cd4xxx_lib.h
index d6ecade6658..d6ecade6658 100644
--- a/src/lib/netlist/macro/nlm_cd4xxx.h
+++ b/src/lib/netlist/macro/nlm_cd4xxx_lib.h
diff --git a/src/lib/netlist/macro/nlm_mc3340.h b/src/lib/netlist/macro/nlm_mc3340.h
deleted file mode 100644
index ccd3047f4a5..00000000000
--- a/src/lib/netlist/macro/nlm_mc3340.h
+++ /dev/null
@@ -1,34 +0,0 @@
-// license:GPL-2.0+
-// copyright-holders:Ryan Holtz
-
-#ifndef NLM_MC3340_H_
-#define NLM_MC3340_H_
-
-///
-/// \file nlm_mc3340.h
-///
-
-#include "netlist/nl_setup.h"
-
-#ifndef __PLIB_PREPROCESSOR__
-
-/* ----------------------------------------------------------------------------
- * Netlist Macros
- * ---------------------------------------------------------------------------*/
-
-#if !NL_AUTO_DEVICES
-
-#define MC3340_DIP(name) \
- NET_REGISTER_DEV(MC3340_DIP, name)
-
-#endif // NL_AUTO_DEVICES
-
-/* ----------------------------------------------------------------------------
- * External declarations
- * ---------------------------------------------------------------------------*/
-
-// moved to net_lib.h
-
-#endif // __PLIB_PREPROCESSOR__
-
-#endif
diff --git a/src/lib/netlist/macro/nlm_opamp.cpp b/src/lib/netlist/macro/nlm_opamp_lib.cpp
index 73aed0fd52b..a8fae82e8c8 100644
--- a/src/lib/netlist/macro/nlm_opamp.cpp
+++ b/src/lib/netlist/macro/nlm_opamp_lib.cpp
@@ -297,7 +297,7 @@ static NETLIST_START(MC3340_DIP)
NET_C(R17_5K1.2, D3.A, Q8.B)
NET_C(D3.K, R18_510.1)
- ALIAS(GND, R18_510.2);
+ ALIAS(GND, R18_510.2)
ALIAS(1, INPUT)
ALIAS(2, CONTROL)
@@ -564,7 +564,7 @@ static NETLIST_START(LM3900)
NETLIST_END()
#endif
-NETLIST_START(OPAMP_lib)
+NETLIST_START(opamp_lib)
LOCAL_LIB_ENTRY(opamp_layout_4_4_11)
LOCAL_LIB_ENTRY(opamp_layout_2_8_4)
LOCAL_LIB_ENTRY(opamp_layout_2_13_9_4)
diff --git a/src/lib/netlist/macro/nlm_opamp.h b/src/lib/netlist/macro/nlm_opamp_lib.h
index 70beffd3885..7c9b31a29bd 100644
--- a/src/lib/netlist/macro/nlm_opamp.h
+++ b/src/lib/netlist/macro/nlm_opamp_lib.h
@@ -57,6 +57,9 @@
#define LM747A_DIP(name) \
NET_REGISTER_DEV(LM747A_DIP, name)
+#define MC3340_DIP(name) \
+ NET_REGISTER_DEV(MC3340_DIP, name)
+
#endif // NL_AUTO_DEVICES
/* ----------------------------------------------------------------------------
diff --git a/src/lib/netlist/macro/nlm_other.cpp b/src/lib/netlist/macro/nlm_otheric_lib.cpp
index 327b57faa62..327b57faa62 100644
--- a/src/lib/netlist/macro/nlm_other.cpp
+++ b/src/lib/netlist/macro/nlm_otheric_lib.cpp
diff --git a/src/lib/netlist/macro/nlm_other.h b/src/lib/netlist/macro/nlm_otheric_lib.h
index c69b4d61224..c69b4d61224 100644
--- a/src/lib/netlist/macro/nlm_other.h
+++ b/src/lib/netlist/macro/nlm_otheric_lib.h
diff --git a/src/lib/netlist/macro/nlm_roms.cpp b/src/lib/netlist/macro/nlm_roms_lib.cpp
index 30bd4b98e06..13edd472e93 100644
--- a/src/lib/netlist/macro/nlm_roms.cpp
+++ b/src/lib/netlist/macro/nlm_roms_lib.cpp
@@ -386,7 +386,7 @@ NETLIST_END()
NETLIST_END()
-NETLIST_START(ROMS_lib)
+NETLIST_START(roms_lib)
LOCAL_LIB_ENTRY(PROM_82S123_DIP)
LOCAL_LIB_ENTRY(PROM_82S126_DIP)
diff --git a/src/lib/netlist/macro/nlm_roms.h b/src/lib/netlist/macro/nlm_roms_lib.h
index ab754f34c86..ab754f34c86 100644
--- a/src/lib/netlist/macro/nlm_roms.h
+++ b/src/lib/netlist/macro/nlm_roms_lib.h
diff --git a/src/lib/netlist/macro/nlm_ttl74xx.cpp b/src/lib/netlist/macro/nlm_ttl74xx_lib.cpp
index 5c3529e22b5..dc1a65c29b5 100644
--- a/src/lib/netlist/macro/nlm_ttl74xx.cpp
+++ b/src/lib/netlist/macro/nlm_ttl74xx_lib.cpp
@@ -2896,7 +2896,7 @@ static NETLIST_START(TTL_9602_DIP)
NETLIST_END()
-NETLIST_START(TTL74XX_lib)
+NETLIST_START(ttl74xx_lib)
NET_MODEL("DM7414 SCHMITT_TRIGGER(VTP=1.7 VTM=0.9 VI=4.35 RI=6.15k VOH=3.5 ROH=120 VOL=0.1 ROL=37.5 TPLH=15 TPHL=15)")
NET_MODEL("TTL_7414_GATE SCHMITT_TRIGGER(VTP=1.7 VTM=0.9 VI=4.35 RI=6.15k VOH=3.5 ROH=120 VOL=0.1 ROL=37.5 TPLH=15 TPHL=15)")
NET_MODEL("DM74LS14 SCHMITT_TRIGGER(VTP=1.6 VTM=0.8 VI=4.4 RI=19.3k VOH=3.45 ROH=130 VOL=0.1 ROL=31.2 TPLH=15 TPHL=15)")
diff --git a/src/lib/netlist/macro/nlm_ttl74xx.h b/src/lib/netlist/macro/nlm_ttl74xx_lib.h
index b797bfd6cc9..b797bfd6cc9 100644
--- a/src/lib/netlist/macro/nlm_ttl74xx.h
+++ b/src/lib/netlist/macro/nlm_ttl74xx_lib.h
diff --git a/src/lib/netlist/nl_base.cpp b/src/lib/netlist/nl_base.cpp
index d53606e52b8..532a3f98f47 100644
--- a/src/lib/netlist/nl_base.cpp
+++ b/src/lib/netlist/nl_base.cpp
@@ -1,6 +1,7 @@
// license:GPL-2.0+
// copyright-holders:Couriersud
+#include "macro/nlm_base_lib.h"
#include "solver/nld_matrix_solver.h"
#include "solver/nld_solver.h"
@@ -13,7 +14,6 @@
#include "core/setup.h"
#include "devices/nlid_proxy.h"
#include "devices/nlid_system.h" // netlist_params
-#include "macro/nlm_base.h"
#include "nl_base.h"
#include "nl_errstr.h"
@@ -141,7 +141,7 @@ namespace netlist
"#define IND_P(ind) ((ind) * 1e-12) \n";
m_setup->parser().add_include<plib::psource_str_t>("netlist/devices/net_lib.h", content);
#if 1
- NETLIST_NAME(base)(m_setup->parser());
+ NETLIST_NAME(base_lib)(m_setup->parser());
#else
// FIXME: This is very slow - need optimized parsing scanning
#if 0
@@ -155,7 +155,7 @@ namespace netlist
m_setup->parser().register_source<source_file_t>(dir + "nlm_cd4xxx.cpp");
m_setup->parser().register_source<source_file_t>(dir + "nlm_other.cpp");
m_setup->parser().register_source<source_file_t>(dir + "nlm_ttl74xx.cpp");
- m_setup->parser().include("base");
+ m_setup->parser().include("base_lib");
#endif
#endif
}
@@ -975,6 +975,83 @@ namespace netlist
}
}
+ // ----------------------------------------------------------------------------------------
+ // netlist_t
+ //
+ // Hot section
+ //
+ // Any changes below will impact performance.
+ // -----------------------------------------------------------------------------
+
+ template <bool KEEP_STATS>
+ void netlist_t::process_queue_stats(const netlist_time_ext delta) noexcept
+ {
+ netlist_time_ext stop(m_time + delta);
+
+ qpush(stop, nullptr);
+
+ if (m_mainclock == nullptr)
+ {
+ m_time = m_queue.top().exec_time();
+ detail::net_t *obj(m_queue.top().object());
+ m_queue.pop();
+
+ while (obj != nullptr)
+ {
+ obj->template update_devs<KEEP_STATS>();
+ if (KEEP_STATS)
+ m_perf_out_processed.inc();
+ const detail::queue_t::entry_t *top = &m_queue.top();
+ m_time = top->exec_time();
+ obj = top->object();
+ m_queue.pop();
+ }
+ }
+ else
+ {
+ logic_net_t &mc_net(m_mainclock->m_Q.net());
+ const netlist_time inc(m_mainclock->m_inc);
+ netlist_time_ext mc_time(mc_net.next_scheduled_time());
+
+ do
+ {
+ const detail::queue_t::entry_t *top = &m_queue.top();
+ while (top->exec_time() > mc_time)
+ {
+ m_time = mc_time;
+ mc_net.toggle_new_Q();
+ mc_net.update_devs<KEEP_STATS>();
+ top = &m_queue.top();
+ mc_time += inc;
+ }
+
+ m_time = top->exec_time();
+ auto *const obj(top->object());
+ m_queue.pop();
+ if (obj != nullptr)
+ obj->template update_devs<KEEP_STATS>();
+ else
+ break;
+ if (KEEP_STATS)
+ m_perf_out_processed.inc();
+ } while (true);
+
+ mc_net.set_next_scheduled_time(mc_time);
+ }
+ }
+
+ void netlist_t::process_queue(netlist_time_ext delta) noexcept
+ {
+ if (!m_use_stats)
+ process_queue_stats<false>(delta);
+ else
+ {
+ auto sm_guard(m_stat_mainloop.guard());
+ process_queue_stats<true>(delta);
+ }
+ }
+
+
template struct state_var<std::uint8_t>;
template struct state_var<std::uint16_t>;
template struct state_var<std::uint32_t>;
diff --git a/src/lib/netlist/nl_base.h b/src/lib/netlist/nl_base.h
index b6f5da80461..32cc1f0eacc 100644
--- a/src/lib/netlist/nl_base.h
+++ b/src/lib/netlist/nl_base.h
@@ -22,24 +22,7 @@
#include "core/object_array.h"
#include "core/param.h"
#include "core/state_var.h"
-
-#include "plib/palloc.h" // owned_ptr
-#include "plib/pfunction.h"
-#include "plib/plists.h"
-#include "plib/pmempool.h"
-#include "plib/ppmf.h"
-#include "plib/pstate.h"
-#include "plib/pstream.h"
-#include "plib/ptimed_queue.h"
-#include "plib/ptypes.h"
-
-#include "nl_errstr.h"
-#include "nl_factory.h"
-#include "nltypes.h"
-
-#include <initializer_list>
-#include <unordered_map>
-#include <vector>
+#include "core/exec.h"
//============================================================
// MACROS / New Syntax
@@ -196,11 +179,6 @@ class NETLIB_NAME(name) : public delegator_t<base_device_t>
#define NETLIB_HANDLER(chip, name) void NETLIB_NAME(chip) :: name() noexcept
-#if 0
-#define NETLIB_UPDATEI() virtual void update() noexcept override
-#define NETLIB_UPDATE(chip) NETLIB_HANDLER(chip, update)
-#endif
-
#define NETLIB_RESET(chip) void NETLIB_NAME(chip) :: reset(void)
#define NETLIB_UPDATE_PARAM(chip) void NETLIB_NAME(chip) :: update_param() noexcept
@@ -214,9 +192,6 @@ class NETLIB_NAME(name) : public delegator_t<base_device_t>
namespace netlist
{
-
-
-
namespace devices
{
// -----------------------------------------------------------------------------
@@ -247,107 +222,6 @@ namespace netlist
};
} // namespace devices
- // -----------------------------------------------------------------------------
- // netlist_t
- // -----------------------------------------------------------------------------
-
- class netlist_t // NOLINT(clang-analyzer-optin.performance.Padding)
- {
- public:
-
- explicit netlist_t(netlist_state_t &state, const pstring &aname);
-
- PCOPYASSIGNMOVE(netlist_t, delete)
-
- virtual ~netlist_t() noexcept = default;
-
- // run functions
-
- netlist_time_ext time() const noexcept { return m_time; }
-
- void process_queue(netlist_time_ext delta) noexcept;
- void abort_current_queue_slice() noexcept
- {
- if (!NL_USE_QUEUE_STATS || !m_use_stats)
- m_queue.retime<false>(detail::queue_t::entry_t(m_time, nullptr));
- else
- m_queue.retime<true>(detail::queue_t::entry_t(m_time, nullptr));
- }
-
- const detail::queue_t &queue() const noexcept { return m_queue; }
-
- template<typename... Args>
- void qpush(Args&&...args) noexcept
- {
- if (!NL_USE_QUEUE_STATS || !m_use_stats)
- m_queue.emplace<false>(std::forward<Args>(args)...); // NOLINT(performance-move-const-arg)
- else
- m_queue.emplace<true>(std::forward<Args>(args)...); // NOLINT(performance-move-const-arg)
- }
-
- template <class R>
- void qremove(const R &elem) noexcept
- {
- if (!NL_USE_QUEUE_STATS || !m_use_stats)
- m_queue.remove<false>(elem);
- else
- m_queue.remove<true>(elem);
- }
-
- // Control functions
-
- void stop();
- void reset();
-
- // only used by nltool to create static c-code
- devices::NETLIB_NAME(solver) *solver() const noexcept { return m_solver; }
-
- // force late type resolution
- template <typename X = devices::NETLIB_NAME(solver)>
- nl_fptype gmin(X *solv = nullptr) const noexcept
- {
- plib::unused_var(solv);
- return static_cast<X *>(m_solver)->gmin();
- }
-
- netlist_state_t &nlstate() noexcept { return m_state; }
- const netlist_state_t &nlstate() const noexcept { return m_state; }
-
- log_type & log() noexcept { return m_state.log(); }
- const log_type &log() const noexcept { return m_state.log(); }
-
- void print_stats() const;
- bool use_stats() const { return m_use_stats; }
-
- bool stats_enabled() const noexcept { return m_use_stats; }
- void enable_stats(bool val) noexcept { m_use_stats = val; }
-
- private:
-
- template <bool KEEP_STATS>
- void process_queue_stats(netlist_time_ext delta) noexcept;
-
- netlist_state_t & m_state;
- devices::NETLIB_NAME(solver) * m_solver;
-
- // mostly rw
- //PALIGNAS(16)
- netlist_time_ext m_time;
- devices::NETLIB_NAME(mainclock) * m_mainclock;
-
- //PALIGNAS_CACHELINE()
- //PALIGNAS(16)
- detail::queue_t m_queue;
- bool m_use_stats;
- // performance
- plib::pperftime_t<true> m_stat_mainloop;
- plib::pperfcount_t<true> m_perf_out_processed;
- };
-
- // -----------------------------------------------------------------------------
- // Support classes for devices
- // -----------------------------------------------------------------------------
-
// -----------------------------------------------------------------------------
// power pins - not a device, but a helper
@@ -400,371 +274,6 @@ namespace netlist
}
} // namespace devices
- // -----------------------------------------------------------------------------
- // Hot section
- //
- // Any changes below will impact performance.
- // -----------------------------------------------------------------------------
-
- // -----------------------------------------------------------------------------
- // logic_input_t
- // -----------------------------------------------------------------------------
-#if 0
- inline void logic_input_t::inactivate() noexcept
- {
- if (!is_state(STATE_INP_PASSIVE))
- {
- set_state(STATE_INP_PASSIVE);
- net().remove_from_active_list(*this);
- }
- }
-
- inline void logic_input_t::activate() noexcept
- {
- if (is_state(STATE_INP_PASSIVE))
- {
- net().add_to_active_list(*this);
- set_state(STATE_INP_ACTIVE);
- }
- }
-
- inline void logic_input_t::activate_hl() noexcept
- {
- if (is_state(STATE_INP_PASSIVE))
- {
- net().add_to_active_list(*this);
- set_state(STATE_INP_HL);
- }
- }
-
- inline void logic_input_t::activate_lh() noexcept
- {
- if (is_state(STATE_INP_PASSIVE))
- {
- net().add_to_active_list(*this);
- set_state(STATE_INP_LH);
- }
- }
-#endif
- inline void detail::net_t::push_to_queue(const netlist_time &delay) noexcept
- {
- if (has_connections())
- {
- if (!!is_queued())
- exec().qremove(this);
-
- const auto nst(exec().time() + delay);
- m_next_scheduled_time = nst;
-
- if (!m_list_active.empty())
- {
- m_in_queue = queue_status::QUEUED;
- exec().qpush(nst, this);
- }
- else
- {
- m_in_queue = queue_status::DELAYED_DUE_TO_INACTIVE;
- update_inputs();
- }
- }
- }
-
- inline void detail::net_t::add_to_active_list(core_terminal_t &term) noexcept
- {
- if (!m_list_active.empty())
- {
- term.set_copied_input(m_cur_Q);
- m_list_active.push_front(&term);
- }
- else
- {
- m_list_active.push_front(&term);
- railterminal().device().do_inc_active();
- if (m_in_queue == queue_status::DELAYED_DUE_TO_INACTIVE)
- {
- if (m_next_scheduled_time > exec().time())
- {
- m_in_queue = queue_status::QUEUED; // pending
- exec().qpush(m_next_scheduled_time, this);
- }
- else
- {
- m_in_queue = queue_status::DELIVERED;
- m_cur_Q = m_new_Q;
- }
- update_inputs();
- }
- else
- term.set_copied_input(m_cur_Q);
- }
- }
-
- inline void detail::net_t::remove_from_active_list(core_terminal_t &term) noexcept
- {
- gsl_Expects(!m_list_active.empty());
- m_list_active.remove(&term);
- if (m_list_active.empty())
- railterminal().device().do_dec_active();
- }
-
-#if 0
- inline nl_fptype terminal_t::operator ()() const noexcept
- {
- return net().Q_Analog();
- }
-
- inline const analog_net_t & analog_t::net() const noexcept
- {
- return plib::downcast<const analog_net_t &>(core_terminal_t::net());
- }
-
- inline analog_net_t & analog_t::net() noexcept
- {
- return plib::downcast<analog_net_t &>(core_terminal_t::net());
- }
-
-
- inline logic_net_t & logic_t::net() noexcept
- {
- return plib::downcast<logic_net_t &>(core_terminal_t::net());
- }
-
- inline const logic_net_t & logic_t::net() const noexcept
- {
- return plib::downcast<const logic_net_t &>(core_terminal_t::net());
- }
- inline netlist_sig_t logic_input_t::operator()() const noexcept
- {
- nl_assert(terminal_state() != STATE_INP_PASSIVE);
-#if NL_USE_COPY_INSTEAD_OF_REFERENCE
- return m_Q;
-#else
- return net().Q();
-#endif
- }
-
- inline nl_fptype analog_input_t::Q_Analog() const noexcept
- {
- return net().Q_Analog();
- }
-
- inline void analog_output_t::push(nl_fptype val) noexcept
- {
- if (val != m_my_net.Q_Analog())
- {
- m_my_net.set_Q_Analog(val);
- m_my_net.toggle_and_push_to_queue(netlist_time::quantum());
- }
- }
-#endif
-
- inline netlist_t &detail::device_object_t::exec() noexcept
- {
- return m_device->exec();
- }
-
- inline const netlist_t &detail::device_object_t::exec() const noexcept
- {
- return m_device->exec();
- }
-
- template <bool KEEP_STATS, typename T, typename S>
- inline void detail::net_t::process(T mask, const S &sig) noexcept
- {
- m_cur_Q = sig;
-
- if (KEEP_STATS)
- {
- for (auto & p : m_list_active)
- {
- p.set_copied_input(sig);
- auto *stats(p.device().stats());
- stats->m_stat_call_count.inc();
- if ((p.terminal_state() & mask))
- {
- auto g(stats->m_stat_total_time.guard());
- p.run_delegate();
- }
- }
- }
- else
- {
- for (auto &p : m_list_active)
- {
- p.set_copied_input(sig);
- if ((p.terminal_state() & mask) != 0)
- p.run_delegate();
- }
- }
- }
-
- template <bool KEEP_STATS>
- inline void detail::net_t::update_devs() noexcept
- {
- nl_assert(this->is_rail_net());
-
- m_in_queue = queue_status::DELIVERED; // mark as taken ...
- if (m_new_Q ^ m_cur_Q)
- {
- process<KEEP_STATS>((m_new_Q << core_terminal_t::INP_LH_SHIFT)
- | (m_cur_Q << core_terminal_t::INP_HL_SHIFT), m_new_Q);
- }
- }
-
- template <bool KEEP_STATS>
- inline void netlist_t::process_queue_stats(const netlist_time_ext delta) noexcept
- {
- netlist_time_ext stop(m_time + delta);
-
- qpush(stop, nullptr);
-
- if (m_mainclock == nullptr)
- {
- m_time = m_queue.top().exec_time();
- detail::net_t *obj(m_queue.top().object());
- m_queue.pop();
-
- while (obj != nullptr)
- {
- obj->template update_devs<KEEP_STATS>();
- if (KEEP_STATS)
- m_perf_out_processed.inc();
- const detail::queue_t::entry_t *top = &m_queue.top();
- m_time = top->exec_time();
- obj = top->object();
- m_queue.pop();
- }
- }
- else
- {
- logic_net_t &mc_net(m_mainclock->m_Q.net());
- const netlist_time inc(m_mainclock->m_inc);
- netlist_time_ext mc_time(mc_net.next_scheduled_time());
-
- do
- {
- const detail::queue_t::entry_t *top = &m_queue.top();
- while (top->exec_time() > mc_time)
- {
- m_time = mc_time;
- mc_net.toggle_new_Q();
- mc_net.update_devs<KEEP_STATS>();
- top = &m_queue.top();
- mc_time += inc;
- }
-
- m_time = top->exec_time();
- auto *const obj(top->object());
- m_queue.pop();
- if (obj != nullptr)
- obj->template update_devs<KEEP_STATS>();
- else
- break;
- if (KEEP_STATS)
- m_perf_out_processed.inc();
- } while (true);
-
- mc_net.set_next_scheduled_time(mc_time);
- }
- }
-
- inline void netlist_t::process_queue(netlist_time_ext delta) noexcept
- {
- if (!m_use_stats)
- process_queue_stats<false>(delta);
- else
- {
- auto sm_guard(m_stat_mainloop.guard());
- process_queue_stats<true>(delta);
- }
- }
-
-
-
- // -----------------------------------------------------------------------------
- // inline implementations - cold
- // -----------------------------------------------------------------------------
-#if 0
- template<typename T, typename... Args>
- inline device_arena::unique_ptr<T> detail::netlist_object_t::make_pool_object(Args&&... args)
- {
- return state().make_pool_object<T>(std::forward<Args>(args)...);
- }
-#endif
- inline void param_t::update_param() noexcept
- {
- device().update_param();
- }
-
- template <typename T>
- param_num_t<T>::param_num_t(core_device_t &device, const pstring &name, const T val)
- : param_t(device, name)
- , m_param(val)
- {
- bool found = false;
- pstring p = this->get_initial(&device, &found);
- if (found)
- {
- plib::pfunction<nl_fptype> func;
- func.compile_infix(p, {});
- auto valx = func.evaluate();
- if (plib::is_integral<T>::value)
- if (plib::abs(valx - plib::trunc(valx)) > nlconst::magic(1e-6))
- throw nl_exception(MF_INVALID_NUMBER_CONVERSION_1_2(device.name() + "." + name, p));
- m_param = plib::narrow_cast<T>(valx);
- }
-
- device.state().save(*this, m_param, this->name(), "m_param");
- }
-
- template <typename T>
- param_enum_t<T>::param_enum_t(core_device_t &device, const pstring &name, const T val)
- : param_t(device, name)
- , m_param(val)
- {
- bool found = false;
- pstring p = this->get_initial(&device, &found);
- if (found)
- {
- T temp(val);
- bool ok = temp.set_from_string(p);
- if (!ok)
- {
- device.state().log().fatal(MF_INVALID_ENUM_CONVERSION_1_2(name, p));
- throw nl_exception(MF_INVALID_ENUM_CONVERSION_1_2(name, p));
- }
- m_param = temp;
- }
-
- device.state().save(*this, m_param, this->name(), "m_param");
- }
-
- template <typename ST, std::size_t AW, std::size_t DW>
- param_rom_t<ST, AW, DW>::param_rom_t(core_device_t &device, const pstring &name)
- : param_data_t(device, name)
- {
- auto f = this->stream();
- if (!f.empty())
- {
- plib::istream_read(f.stream(), m_data.data(), 1<<AW);
- // FIXME: check for failbit if not in validation.
- }
- else
- device.state().log().warning(MW_ROM_NOT_FOUND(str()));
- }
-
-#if 0
- template<class O, class C, typename... Args>
- void base_device_t::create_and_register_subdevice(O &owner, const pstring &name, device_arena::unique_ptr<C> &dev, Args&&... args)
- {
- dev = state().make_pool_object<C>(owner, name, std::forward<Args>(args)...);
- }
-#endif
- inline solver::matrix_solver_t *analog_t::solver() const noexcept
- {
- return (this->has_net() ? net().solver() : nullptr);
- }
-
extern template struct state_var<std::uint8_t>;
extern template struct state_var<std::uint16_t>;
diff --git a/src/lib/netlist/nl_parser.cpp b/src/lib/netlist/nl_parser.cpp
index 791ac073dd1..8edecb84a3a 100644
--- a/src/lib/netlist/nl_parser.cpp
+++ b/src/lib/netlist/nl_parser.cpp
@@ -21,6 +21,7 @@ void parser_t::verror(const pstring &msg)
parser_t::parser_t(nlparse_t &setup)
: m_setup(setup)
+ , m_cur_local(nullptr)
{
m_tokenizer.identifier_chars("abcdefghijklmnopqrstuvwvxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890_.-$@")
.number_chars(".0123456789", "0123456789eE-.") //FIXME: processing of numbers
@@ -82,6 +83,8 @@ bool parser_t::parse(token_store &tokstor, const pstring &nlname)
while (true)
{
+ // FIXME: line numbers in cached local netlists are wrong
+ // need to process raw tokens here.
token_t token = get_token();
if (token.is_type(token_type::ENDOFFILE))
{
@@ -98,6 +101,11 @@ bool parser_t::parse(token_store &tokstor, const pstring &nlname)
in_nl = false;
}
require_token(m_tok_paren_right);
+
+ m_cur_local->push_back(token);
+ m_cur_local->push_back(token_t(m_tok_paren_left));
+ m_cur_local->push_back(token_t(m_tok_paren_right));
+
}
else if (token.is(m_tok_NETLIST_START))
{
@@ -112,6 +120,18 @@ bool parser_t::parse(token_store &tokstor, const pstring &nlname)
return true;
}
+ // create a new cached local store
+ m_local.emplace(name.str(), token_store());
+ m_cur_local = &m_local[name.str()];
+ m_cur_local->push_back(token_t(token_type::LINEMARKER));
+ auto sl = sourceloc();
+ auto num = plib::pfmt("{1}")(sl.line());
+ m_cur_local->push_back(token_t(token_type::NUMBER, num));
+ m_cur_local->push_back(token_t(token_type::STRING, sl.file_name()));
+ m_cur_local->push_back(token_t(m_tok_NETLIST_START));
+ m_cur_local->push_back(token_t(m_tok_paren_left));
+ m_cur_local->push_back(name);
+ m_cur_local->push_back(token_t(m_tok_paren_right));
in_nl = true;
}
else if (!in_nl)
@@ -119,6 +139,10 @@ bool parser_t::parse(token_store &tokstor, const pstring &nlname)
if (!token.is(m_tok_static))
error(MF_EXPECTED_NETLIST_START_1(token.str()));
}
+ else
+ {
+ m_cur_local->push_back(token);
+ }
}
}
diff --git a/src/lib/netlist/nl_parser.h b/src/lib/netlist/nl_parser.h
index e4308786e3a..c552663af6a 100644
--- a/src/lib/netlist/nl_parser.h
+++ b/src/lib/netlist/nl_parser.h
@@ -11,6 +11,8 @@
#include "nltypes.h" // for setup_t
#include "plib/ptokenizer.h"
+#include <unordered_map>
+
namespace netlist
{
class parser_t : public plib::ptoken_reader
@@ -75,6 +77,9 @@ namespace netlist
plib::ptokenizer m_tokenizer;
nlparse_t &m_setup;
+
+ std::unordered_map<pstring, token_store> m_local;
+ token_store *m_cur_local;
};
} // namespace netlist
diff --git a/src/lib/netlist/plib/pstream.h b/src/lib/netlist/plib/pstream.h
index 97a4a0eea5f..ebaacfcfb73 100644
--- a/src/lib/netlist/plib/pstream.h
+++ b/src/lib/netlist/plib/pstream.h
@@ -74,6 +74,13 @@ public:
bool eof() const { return m_strm->eof(); }
+ /// \brief Read a line of UTF8 characters from the stream.
+ ///
+ /// The line will not contain a trailing linefeed
+ ///
+ /// \param line pstring reference to the result
+ /// \returns Returns false if at end of file
+ ///
bool readline(pstring &line)
{
putf8string::code_t c = 0;
@@ -96,6 +103,35 @@ public:
return true;
}
+ /// \brief Read a line of UTF8 characters from the stream including trailing linefeed.
+ ///
+ /// The line will contain the trailing linefeed
+ ///
+ /// \param line pstring reference to the result
+ /// \returns Returns false if at end of file
+ ///
+ bool readline_lf(pstring &line)
+ {
+ putf8string::code_t c = 0;
+ m_linebuf = putf8string("");
+ if (!this->readcode(c))
+ {
+ line = "";
+ return false;
+ }
+ while (true)
+ {
+ if (c != 13) // ignore CR
+ m_linebuf += putf8string(1, c);
+ if (c == 10)
+ break;
+ if (!this->readcode(c))
+ break;
+ }
+ line = m_linebuf;
+ return true;
+ }
+
bool readbyte(std::istream::char_type &b)
{
if (m_strm->eof())
diff --git a/src/lib/netlist/plib/ptokenizer.cpp b/src/lib/netlist/plib/ptokenizer.cpp
index cc3d6538f8d..ab4b0444e42 100644
--- a/src/lib/netlist/plib/ptokenizer.cpp
+++ b/src/lib/netlist/plib/ptokenizer.cpp
@@ -48,7 +48,7 @@ namespace plib {
if (m_px == m_cur_line.end())
{
//++m_source_location.back();
- if (m_strm->readline(m_cur_line))
+ if (m_strm->readline_lf(m_cur_line))
{
m_px = m_cur_line.begin();
if (*m_px != '#')
@@ -56,7 +56,6 @@ namespace plib {
}
else
return 0;
- return '\n';
}
pstring::value_type c = *(m_px++);
return c;
@@ -169,7 +168,7 @@ namespace plib {
if (ret.str() == "1")
benter = true;
if (ret.str() == "2")
- bexit = false;
+ bexit = true;
// FIXME: process flags; actually only 1 (file enter) and 2 (after file exit)
ret = get_token_queue();
}
@@ -177,7 +176,7 @@ namespace plib {
m_source_location.pop_back();
if (!benter) // new location!
m_source_location.pop_back();
- m_source_location.emplace_back(plib::source_location(file, lineno));
+ m_source_location.emplace_back(plib::source_location(file, lineno - 1));
}
else if (ret.is_type(token_type::SOURCELINE))
{
diff --git a/src/lib/netlist/plib/ptokenizer.h b/src/lib/netlist/plib/ptokenizer.h
index 23dcd2da923..9d67c297296 100644
--- a/src/lib/netlist/plib/ptokenizer.h
+++ b/src/lib/netlist/plib/ptokenizer.h
@@ -75,6 +75,10 @@ namespace plib {
: m_type(type), m_id(token_id_t::npos), m_token(str)
{
}
+ token_t(const token_id_t &id)
+ : m_type(token_type::TOKEN), m_id(id.id()), m_token(id.name())
+ {
+ }
token_t(const token_id_t &id, const pstring &str)
: m_type(token_type::TOKEN), m_id(id.id()), m_token(str)
{
@@ -220,6 +224,7 @@ namespace plib {
void error(const perrmsg &errs);
+ plib::source_location sourceloc() { return m_source_location.back(); }
protected:
virtual void verror(const pstring &msg) = 0;
diff --git a/src/mame/audio/nl_armora.cpp b/src/mame/audio/nl_armora.cpp
index 5be8807fbd1..05c92e8a258 100644
--- a/src/mame/audio/nl_armora.cpp
+++ b/src/mame/audio/nl_armora.cpp
@@ -18,7 +18,6 @@
#include "netlist/devices/net_lib.h"
#include "nl_cinemat_common.h"
-#include "nl_armora.h"
//
diff --git a/src/mame/audio/nl_barrier.cpp b/src/mame/audio/nl_barrier.cpp
index 5f03d49b536..ba3ec462be9 100644
--- a/src/mame/audio/nl_barrier.cpp
+++ b/src/mame/audio/nl_barrier.cpp
@@ -21,7 +21,6 @@
#include "netlist/devices/net_lib.h"
#include "nl_cinemat_common.h"
-#include "nl_barrier.h"
//
diff --git a/src/mame/audio/nl_boxingb.cpp b/src/mame/audio/nl_boxingb.cpp
index 8f937134769..b60fcca2a83 100644
--- a/src/mame/audio/nl_boxingb.cpp
+++ b/src/mame/audio/nl_boxingb.cpp
@@ -13,8 +13,6 @@
#include "netlist/devices/net_lib.h"
#include "nl_cinemat_common.h"
-#include "nl_boxingb.h"
-
//
// Hacks/workarounds
diff --git a/src/mame/audio/nl_carpolo.cpp b/src/mame/audio/nl_carpolo.cpp
index 9fe88bc4357..e135227c69b 100644
--- a/src/mame/audio/nl_carpolo.cpp
+++ b/src/mame/audio/nl_carpolo.cpp
@@ -12,7 +12,6 @@
//
#include "netlist/devices/net_lib.h"
-#include "nl_carpolo.h"
#define HLE_NOISE (1)
diff --git a/src/mame/audio/nl_fireone.cpp b/src/mame/audio/nl_fireone.cpp
index 09ec213b7da..3c0523cb36c 100644
--- a/src/mame/audio/nl_fireone.cpp
+++ b/src/mame/audio/nl_fireone.cpp
@@ -7,20 +7,16 @@
//
// Known problems/issues:
//
-// * None.
+// * Slow!
//
#include "netlist/devices/net_lib.h"
-#include "nl_fireone.h"
//
// 556 is just two 555s in one package
//
-#define NE556_DIP(name) SUBMODEL(_NE556_DIP, name)
-#define LM556_DIP NE556_DIP
-
-static NETLIST_START(_NE556_DIP)
+static NETLIST_START(NE556_DIP)
NE555(A)
NE555(B)
@@ -39,6 +35,64 @@ static NETLIST_START(_NE556_DIP)
)
NETLIST_END()
+
+//
+// ICL8038 is broadly similar to a 566 VCO, and can be simulated partially as such.
+//
+
+static NETLIST_START(ICL8038_DIP)
+ VCVS(VI, 1)
+ CCCS(CI1, -1)
+ CCCS(CI2, 2)
+ SYS_COMPD(COMP)
+ SYS_DSW2(SW)
+ VCVS(VO, 1)
+ RES(R_SHUNT, RES_R(50))
+
+ PARAM(VO.RO, 50)
+ PARAM(COMP.MODEL, "FAMILY(TYPE=CUSTOM IVL=0.16 IVH=0.4 OVL=0.01 OVH=0.01 ORL=50 ORH=50)")
+ PARAM(SW.GOFF, 0) // This has to be zero to block current sources
+
+ NET_C(VI.OP, CI1.IN, CI2.IN)
+ NET_C(CI1.OP, VO.IP)
+ NET_C(COMP.Q, SW.I)
+ NET_C(CI2.OP, SW.2)
+ NET_C(COMP.VCC, R_SHUNT.1)
+ NET_C(SW.1, R_SHUNT.2)
+ NET_C(SW.3, VO.IP)
+ NET_C(VO.OP, COMP.IN)
+
+ // Avoid singular Matrix due to G=0 switch
+ RES(RX1, 1e10)
+ RES(RX2, 1e10)
+ NET_C(RX1.1, SW.1)
+ NET_C(RX2.1, SW.3)
+
+ NET_C(COMP.GND, RX1.2, RX2.2)
+
+ RES(R1, 5000)
+ RES(R2, 5000)
+ RES(R3, 5000)
+
+ // Square output wave
+ VCVS(V_SQR, 1)
+ NET_C(COMP.Q, V_SQR.IP)
+
+ NET_C(COMP.GND, SW.GND, VI.ON, VI.IN, CI1.ON, CI2.ON, VO.IN, VO.ON, R2.2, V_SQR.IN, V_SQR.ON)
+ NET_C(COMP.VCC, SW.VCC, R1.2)
+ NET_C(COMP.IP, R1.1, R2.1, R3.1)
+ NET_C(COMP.Q, R3.2)
+
+ ALIAS(11, VI.ON) // GND
+ ALIAS(9, V_SQR.OP) // Square out
+ ALIAS(3, VO.OP) // Triag out
+ ALIAS(8, VI.IP) // VC
+ ALIAS(4, CI1.IP) // R1
+ ALIAS(5, CI2.IP) // R2
+ ALIAS(10, VO.IP) // C1
+ ALIAS(6, COMP.VCC) // V+
+NETLIST_END()
+
//
// Main netlist
//
@@ -47,15 +101,19 @@ NETLIST_START(fireone)
NET_MODEL("2N3704 NPN(IS=26.03f VAF=90.7 Bf=736.1K IKF=.1983 XTB=1.5 BR=1.024 CJC=11.01p CJE=24.07p RB=10 RC=.5 RE=.5 TR=233.8n TF=1.03n ITF=0 VTF=0 XTF=0 mfg=Motorola)")
SOLVER(Solver, 48000)
+
ANALOG_INPUT(V12, 12)
ANALOG_INPUT(VM12, -12)
ANALOG_INPUT(V5, 5)
ALIAS(VCC, V5)
+ NET_MODEL("PIT8253PORT FAMILY(TYPE=NMOS OVL=0.05 OVH=0.05 ORL=100.0 ORH=0.5k)")
+
TTL_INPUT(LTORP, 0) // active high
TTL_INPUT(LSHPHT, 0) // active high
TTL_INPUT(LBOOM, 0) // active high
- TTL_INPUT(SOUND_OFF, 0) // active high
+ TTL_INPUT(SOUND_OFF_L, 0) // active high
+ TTL_INPUT(SOUND_OFF_R, 0) // active high
TTL_INPUT(RTORP, 0) // active high
TTL_INPUT(RSHPHT, 0) // active high
TTL_INPUT(RBOOM, 0) // active high
@@ -65,17 +123,24 @@ NETLIST_START(fireone)
//TTL_INPUT(SONAR_ENABLE, 0) // active high
TTL_INPUT(SONAR_SYNC, 0) // active low
- NET_C(VCC, LTORP.VCC, LSHPHT.VCC, LBOOM.VCC, SOUND_OFF.VCC, RTORP.VCC, RSHPHT.VCC, RBOOM.VCC, TORPCOLL.VCC, SUBENG.VCC, ALERT.VCC, SONAR_SYNC.VCC)
- NET_C(GND, LTORP.GND, LSHPHT.GND, LBOOM.GND, SOUND_OFF.GND, RTORP.GND, RSHPHT.GND, RBOOM.GND, TORPCOLL.GND, SUBENG.GND, ALERT.GND, SONAR_SYNC.GND)
+ LOGIC_INPUT(MUSIC_A, 0, "PIT8253PORT")
+ LOGIC_INPUT(MUSIC_B, 0, "PIT8253PORT")
+ LOGIC_INPUT(MUSIC_C, 0, "PIT8253PORT")
+
+ NET_C(VCC, LTORP.VCC, LSHPHT.VCC, LBOOM.VCC, SOUND_OFF_L.VCC, SOUND_OFF_R.VCC, RTORP.VCC, RSHPHT.VCC, RBOOM.VCC, TORPCOLL.VCC, SUBENG.VCC, ALERT.VCC, SONAR_SYNC.VCC)
+ NET_C(GND, LTORP.GND, LSHPHT.GND, LBOOM.GND, SOUND_OFF_L.GND, SOUND_OFF_R.GND, RTORP.GND, RSHPHT.GND, RBOOM.GND, TORPCOLL.GND, SUBENG.GND, ALERT.GND, SONAR_SYNC.GND)
+ NET_C(VCC, MUSIC_A.VCC, MUSIC_B.VCC, MUSIC_C.VCC)
+ NET_C(GND, MUSIC_A.GND, MUSIC_B.GND, MUSIC_C.GND)
- LOCAL_SOURCE(_NE556_DIP)
+ LOCAL_SOURCE(NE556_DIP)
+ LOCAL_SOURCE(ICL8038_DIP)
TTL_7406_GATE(IC27_A)
+ TTL_7406_GATE(IC27_B)
TTL_7406_GATE(IC27_C)
TTL_7406_GATE(IC27_D)
- NET_C(VCC, IC27_A.VCC, IC27_C.VCC, IC27_D.VCC)
- NET_C(GND, IC27_A.GND, IC27_C.GND, IC27_D.GND)
- //TTL_7406_GATE(IC27_E)
+ NET_C(VCC, IC27_A.VCC, IC27_B.VCC, IC27_C.VCC, IC27_D.VCC)
+ NET_C(GND, IC27_A.GND, IC27_B.GND, IC27_C.GND, IC27_D.GND)
//CD4070_GATE(IC41_A)
//CD4070_GATE(IC41_B)
@@ -92,9 +157,10 @@ NETLIST_START(fireone)
NET_C(V12, IC25.16)
NET_C(GND, IC25.8)
- CD4013(IC3)
- NET_C(V12, IC3.VDD)
- NET_C(GND, IC3.VSS)
+ CD4013(IC3_A)
+ CD4013(IC3_B)
+ NET_C(V12, IC3_A.VDD, IC3_B.VDD)
+ NET_C(GND, IC3_A.VSS, IC3_A.SET, IC3_A.RESET, IC3_B.VSS, IC3_B.SET)
MC1558_DIP(IC6)
NET_C(IC6.8, V12)
@@ -110,7 +176,7 @@ NETLIST_START(fireone)
NE555(IC29)
- NE556_DIP(IC31)
+ SUBMODEL(NE556_DIP, IC31)
NET_C(IC31.14, V5)
NET_C(IC31.7, GND)
@@ -122,6 +188,10 @@ NETLIST_START(fireone)
NET_C(IC30.8, V12)
NET_C(IC30.3, GND)
+ SUBMODEL(ICL8038_DIP, IC15)
+ NET_C(V12, IC15.6)
+ NET_C(GND, IC15.11)
+
LM3900(IC2_A)
LM3900(IC2_D)
LM3900(IC4_A)
@@ -134,14 +204,23 @@ NETLIST_START(fireone)
NET_C(V12, IC2_A.VCC, IC2_D.VCC, IC4_A.VCC, IC4_B.VCC, IC4_D.VCC, IC14_A.VCC, IC14_B.VCC, IC14_C.VCC, IC14_D.VCC)
NET_C(GND, IC2_A.GND, IC2_D.GND, IC4_A.GND, IC4_B.GND, IC4_D.GND, IC14_A.GND, IC14_B.GND, IC14_C.GND, IC14_D.GND)
+ RES(R1, RES_K(560))
+ RES(R2, RES_K(560))
+ RES(R3, RES_K(560))
+ RES(R4, RES_K(560))
+ RES(R5, RES_K(560))
+ RES(R6, RES_K(560))
RES(R8, RES_M(2))
RES(R9, RES_K(820))
RES(R10, RES_K(220))
RES(R11, RES_K(620))
RES(R12, RES_K(3.9))
RES(R13, RES_K(3.9))
+ RES(R14, RES_K(3.9))
RES(R15, RES_M(5.6))
RES(R16, RES_K(680))
+ RES(R17, RES_K(10))
+ RES(R18, RES_K(1))
RES(R19, RES_K(150))
RES(R20, RES_K(2))
RES(R21, RES_K(180))
@@ -180,8 +259,12 @@ NETLIST_START(fireone)
RES(R55, RES_K(1))
RES(R56, RES_K(10))
RES(R57, RES_K(680))
+ RES(R58, RES_M(1))
+ RES(R59, RES_K(43))
+ RES(R60, RES_K(43))
RES(R61, RES_K(150))
RES(R62, RES_M(1))
+ //RES(R63, RES_K(82))
POT(R64, RES_K(10))
POT(R65, RES_K(10))
RES(R66, RES_K(27))
@@ -199,6 +282,7 @@ NETLIST_START(fireone)
RES(R78, RES_K(150))
RES(R79, RES_K(130))
RES(R80, RES_K(130))
+ RES(R81, RES_K(560))
RES(R82, RES_K(160))
RES(R83, RES_M(1))
RES(R84, RES_K(100))
@@ -207,6 +291,7 @@ NETLIST_START(fireone)
RES(R87, RES_K(100))
RES(R94, RES_K(1))
RES(R95, RES_K(1))
+ RES(R96, RES_K(1))
RES(R99, RES_K(1))
RES(R100, RES_K(1))
//RES(R101, RES_K(10))
@@ -219,8 +304,10 @@ NETLIST_START(fireone)
RES(R108, RES_K(20))
RES(R109, RES_K(560))
RES(R110, RES_K(1))
+ RES(R116, RES_K(4.7))
RES(R117, RES_K(20))
RES(R118, RES_K(560))
+ RES(R119, RES_K(560))
RES(R120, RES_K(5.6))
RES(R122, RES_K(2.7))
RES(R123, RES_K(100))
@@ -235,19 +322,19 @@ NETLIST_START(fireone)
RES(R137, RES_K(5.6))
RES(R138, RES_K(47))
RES(R139, 100)
+ RES(R140, RES_K(10))
RES(R141, RES_K(3))
//RES(R142, RES_K(56))
//RES(R143, RES_K(56))
- RES(R140, RES_K(10))
RES(R144, RES_K(100))
RES(R150, RES_K(100))
- //RES(R, RES_K())
CAP(C3, CAP_U(1.0))
CAP(C4, CAP_U(0.1))
CAP(C6, CAP_U(4.7))
CAP(C7, CAP_U(0.33))
CAP(C8, CAP_U(0.33))
+ CAP(C10, CAP_U(0.1))
CAP(C11, CAP_U(2.2))
CAP(C12, CAP_U(2.2))
CAP(C13, CAP_U(4.7))
@@ -266,7 +353,9 @@ NETLIST_START(fireone)
CAP(C38, CAP_U(0.1))
CAP(C39, CAP_U(0.0022))
CAP(C40, CAP_U(0.033))
+ CAP(C41, CAP_U(1.0))
CAP(C42, CAP_U(1.0))
+ CAP(C44, CAP_U(0.0047))
CAP(C45, CAP_U(0.1))
CAP(C48, CAP_U(0.1))
CAP(C49, CAP_U(0.0022))
@@ -293,7 +382,6 @@ NETLIST_START(fireone)
CAP(C114, CAP_U(0.1))
CAP(C121, CAP_U(0.001))
CAP(C122, CAP_U(0.001))
- //CAP(C, CAP_U())
DIODE(D1, "1N914")
DIODE(D2, "1N914")
@@ -309,11 +397,13 @@ NETLIST_START(fireone)
DIODE(D12, "1N914")
DIODE(D13, "1N914")
DIODE(D14, "1N914")
+ DIODE(D15, "1N914")
+ QBJT_EB(Q1, "2N3704")
QBJT_EB(Q2, "2N3704")
// Noise Generator
- CLOCK(HLE_SONAR_CLOCK, 998)
+ CLOCK(HLE_SONAR_CLOCK, 1000)
NET_C(HLE_SONAR_CLOCK.GND, GND)
NET_C(HLE_SONAR_CLOCK.VCC, V12)
@@ -343,10 +433,9 @@ NETLIST_START(fireone)
NET_C(R110.2, V12)
NET_C(IC29.THRESH, IC29.TRIG, R107.2, C72.1)
NET_C(C72.2, GND)
- NET_C(IC29.OUT, D3.K, IC3.CLOCK)
- NET_C(IC3.QQ, IC3.DATA)
- NET_C(IC3.SET, IC3.RESET, GND)
- NET_C(IC3.Q, D2.K, IC25.14)
+ NET_C(IC29.OUT, D3.K, IC3_A.CLOCK)
+ NET_C(IC3_A.QQ, IC3_A.DATA)
+ NET_C(IC3_A.Q, D2.K, IC25.14)
NET_C(IC25.13, GND)
NET_C(IC25.2, R36.1)
NET_C(IC25.4, R72.1)
@@ -518,8 +607,34 @@ NETLIST_START(fireone)
NET_C(R77.2, MIX_L)
NET_C(R76.2, MIX_R)
+ // Alert
+ NET_C(ALERT.Q, IC27_B.A)
+ NET_C(IC27_B.Y, R96.2, D15.A, IC3_B.RESET)
+ NET_C(D15.K, C41.2, Q1.C, IC15.8)
+ NET_C(R14.2, R17.1, Q1.B)
+ NET_C(Q1.E, R58.1)
+ NET_C(IC15.10, C44.1)
+ NET_C(IC15.4, R59.2)
+ NET_C(IC15.5, R60.2)
+ NET_C(IC15.9, R116.2, IC3_B.CLOCK)
+ NET_C(IC3_B.QQ, IC3_B.DATA)
+ NET_C(IC3_B.Q, R18.1)
+ NET_C(R18.2, C10.1, R119.1, R81.1)
+ NET_C(V12, R96.1, C41.1, R14.1, R116.1, R59.1, R60.1)
+ NET_C(GND, R17.2, R58.2, C44.2, C10.2)
+ NET_C(R119.2, MIX_L)
+ NET_C(R81.2, MIX_R)
+
// Mixers (shared)
- NET_C(SOUND_OFF.Q, D4.A, D5.A)
+ NET_C(SOUND_OFF_L.Q, D4.A)
+ NET_C(SOUND_OFF_R.Q, D5.A)
+
+ // Music
+ NET_C(MUSIC_A.Q, R1.1, R4.1)
+ NET_C(MUSIC_B.Q, R5.1, R6.1)
+ NET_C(MUSIC_C.Q, R3.1, R2.1)
+ NET_C(R1.2, R3.2, R5.2, MIX_L)
+ NET_C(R2.2, R4.2, R6.2, MIX_R)
// Mixer (L)
NET_C(MIX_L, C15.1)
@@ -548,4 +663,28 @@ NETLIST_START(fireone)
NET_C(R65.2, C109.1)
NET_C(C109.2, R150.1)
ALIAS(OUT_R, C109.2)
+
+ // Separate each input into the summing network
+ OPTIMIZE_FRONTIER(R27.1, RES_K(270), 50) // SONAR (L)
+ OPTIMIZE_FRONTIER(R77.1, RES_K(33), 50) // TORPCOLL (L)
+ OPTIMIZE_FRONTIER(R78.1, RES_K(150), 50) // L SHPHT
+ OPTIMIZE_FRONTIER(R79.1, RES_K(130), 50) // SUBENG (L)
+ OPTIMIZE_FRONTIER(R117.1, RES_K(20), 50) // L BOOM
+ OPTIMIZE_FRONTIER(R118.1, RES_K(560), 50) // L TORP
+
+ OPTIMIZE_FRONTIER(R85.1, RES_K(270), 50) // SONAR (R)
+ OPTIMIZE_FRONTIER(R76.1, RES_K(33), 50) // TORPCOLL (R)
+ OPTIMIZE_FRONTIER(R61.1, RES_K(150), 50) // R SHPHT
+ OPTIMIZE_FRONTIER(R80.1, RES_K(130), 50) // SUBENG (R)
+ OPTIMIZE_FRONTIER(R108.1, RES_K(20), 50) // R BOOM
+ OPTIMIZE_FRONTIER(R109.1, RES_K(560), 50) // R TORP
+
+ OPTIMIZE_FRONTIER(R138.1, RES_K(47), 50) // Isolation for NOISE_A going into SONAR section
+ OPTIMIZE_FRONTIER(R42.1, RES_K(820), 50) // Isolation for NOISE going into L TORP section
+ OPTIMIZE_FRONTIER(R50.1, RES_K(820), 50) // Isolation for NOISE going into R TORP section
+ OPTIMIZE_FRONTIER(R31.1, RES_K(560), 50) // Isolation for NOISE going into L SHPHT section
+ OPTIMIZE_FRONTIER(R44.1, RES_K(560), 50) // Isolation for NOISE going into R SHPHT section
+ OPTIMIZE_FRONTIER(R11.1, RES_K(620), 50) // Isolation for NOISE going into TORPCOLL section
+ OPTIMIZE_FRONTIER(R87.1, RES_K(100), 50) // Isolation for RUMBLE going into L BOOM section
+ OPTIMIZE_FRONTIER(R105.1, RES_K(100), 50) // Isolation for RUMBLE going into R BOOM section
NETLIST_END()
diff --git a/src/mame/audio/nl_ripoff.cpp b/src/mame/audio/nl_ripoff.cpp
index 73c0b0740d4..aa9925183f5 100644
--- a/src/mame/audio/nl_ripoff.cpp
+++ b/src/mame/audio/nl_ripoff.cpp
@@ -22,8 +22,6 @@
#include "netlist/devices/net_lib.h"
#include "nl_cinemat_common.h"
-#include "nl_ripoff.h"
-
//
// Optimizations
diff --git a/src/mame/audio/nl_solarq.cpp b/src/mame/audio/nl_solarq.cpp
index 57452afabfe..0fb791db9a1 100644
--- a/src/mame/audio/nl_solarq.cpp
+++ b/src/mame/audio/nl_solarq.cpp
@@ -26,7 +26,6 @@
#include "netlist/devices/net_lib.h"
#include "nl_cinemat_common.h"
-#include "nl_solarq.h"
//
diff --git a/src/mame/audio/nl_spacewar.cpp b/src/mame/audio/nl_spacewar.cpp
index 0e308b48a06..6676cd2863d 100644
--- a/src/mame/audio/nl_spacewar.cpp
+++ b/src/mame/audio/nl_spacewar.cpp
@@ -16,7 +16,6 @@
#include "netlist/devices/net_lib.h"
#include "nl_cinemat_common.h"
-#include "nl_spacewar.h"
//
diff --git a/src/mame/audio/nl_starcas.cpp b/src/mame/audio/nl_starcas.cpp
index 13a19649801..cf0b11bf6c0 100644
--- a/src/mame/audio/nl_starcas.cpp
+++ b/src/mame/audio/nl_starcas.cpp
@@ -25,7 +25,6 @@
#include "netlist/devices/net_lib.h"
#include "nl_cinemat_common.h"
-#include "nl_starcas.h"
//
diff --git a/src/mame/audio/nl_starcrus.cpp b/src/mame/audio/nl_starcrus.cpp
index 27624caf999..974e772ce98 100644
--- a/src/mame/audio/nl_starcrus.cpp
+++ b/src/mame/audio/nl_starcrus.cpp
@@ -12,7 +12,6 @@
//
#include "netlist/devices/net_lib.h"
-#include "nl_starcrus.h"
//
// Main netlist
diff --git a/src/mame/audio/nl_starfire.cpp b/src/mame/audio/nl_starfire.cpp
new file mode 100644
index 00000000000..f2ed1546161
--- /dev/null
+++ b/src/mame/audio/nl_starfire.cpp
@@ -0,0 +1,437 @@
+// license:BSD-3-Clause
+// copyright-holders:Ryan Holtz
+//
+// Netlist for Star Fire
+//
+// Derived from the schematics in the manual.
+//
+// Known problems/issues:
+//
+// * Tracking computer might not be 100% right, compared to recordings.
+// * Slow.
+//
+
+#include "netlist/devices/net_lib.h"
+
+//
+// 556 is just two 555s in one package
+//
+
+static NETLIST_START(NE556_DIP)
+ NE555(A)
+ NE555(B)
+
+ NET_C(A.GND, B.GND)
+ NET_C(A.VCC, B.VCC)
+
+ DIPPINS( /* +--------------+ */
+ A.DISCH, /* 1DISCH |1 ++ 14| VCC */ A.VCC,
+ A.THRESH, /* 1THRES |2 13| 2DISCH */ B.DISCH,
+ A.CONT, /* 1CONT |3 12| 2THRES */ B.THRESH,
+ A.RESET, /* 1RESET |4 NE556 11| 2CONT */ B.CONT,
+ A.OUT, /* 1OUT |5 10| 2RESET */ B.RESET,
+ A.TRIG, /* 1TRIG |6 9| 2OUT */ B.OUT,
+ A.GND, /* GND |7 8| 2TRIG */ B.TRIG
+ /* +--------------+ */
+ )
+NETLIST_END()
+
+static NETLIST_START(ICL8038_DIP)
+ VCVS(VI, 1)
+ CCCS(CI1, -1)
+ CCCS(CI2, 2)
+ SYS_COMPD(COMP)
+ SYS_DSW2(SW)
+ VCVS(VO, 1)
+ RES(R_SHUNT, RES_R(50))
+
+ PARAM(VO.RO, 50)
+ PARAM(COMP.MODEL, "FAMILY(TYPE=CUSTOM IVL=0.16 IVH=0.4 OVL=0.01 OVH=0.01 ORL=50 ORH=50)")
+ PARAM(SW.GOFF, 0) // This has to be zero to block current sources
+
+ NET_C(VI.OP, CI1.IN, CI2.IN)
+ NET_C(CI1.OP, VO.IP)
+ NET_C(COMP.Q, SW.I)
+ NET_C(CI2.OP, SW.2)
+ NET_C(COMP.VCC, R_SHUNT.1)
+ NET_C(SW.1, R_SHUNT.2)
+ NET_C(SW.3, VO.IP)
+ NET_C(VO.OP, COMP.IN)
+
+ // Avoid singular Matrix due to G=0 switch
+ RES(RX1, 1e10)
+ RES(RX2, 1e10)
+ NET_C(RX1.1, SW.1)
+ NET_C(RX2.1, SW.3)
+
+ NET_C(COMP.GND, RX1.2, RX2.2)
+
+ RES(R1, 5000)
+ RES(R2, 5000)
+ RES(R3, 5000)
+
+ // Square output wave
+ VCVS(V_SQR, 1)
+ NET_C(COMP.Q, V_SQR.IP)
+
+ NET_C(COMP.GND, SW.GND, VI.ON, VI.IN, CI1.ON, CI2.ON, VO.IN, VO.ON, R2.2, V_SQR.IN, V_SQR.ON)
+ NET_C(COMP.VCC, SW.VCC, R1.2)
+ NET_C(COMP.IP, R1.1, R2.1, R3.1)
+ NET_C(COMP.Q, R3.2)
+
+ ALIAS(11, VI.ON) // GND
+ ALIAS(9, V_SQR.OP) // Square out
+ ALIAS(3, VO.OP) // Triag out
+ ALIAS(8, VI.IP) // VC
+ ALIAS(4, CI1.IP) // R1
+ ALIAS(5, CI2.IP) // R2
+ ALIAS(10, VO.IP) // C1
+ ALIAS(6, COMP.VCC) // V+
+NETLIST_END()
+
+//
+// Main netlist
+//
+
+NETLIST_START(starfire)
+ NET_MODEL("2N3702 PNP(Is=650.6E-18 Xti=3 Eg=1.11 Vaf=115.7 Bf=133.8 Ne=1.832 Ise=97.16f Ikf=1.081 Xtb=1.5 Br=3.73 Nc=2 Isc=0 Ikr=0 Rc=.715 Cjc=14.76p Mjc=.5383 Vjc=.75 Fc=.5 Cje=19.82p Mje=.3357 Vje=.75 Tr=114.1n Tf=761.3p Itf=.65 Vtf=5 Xtf=1.7 Rb=10 mfg=National)")
+ NET_MODEL("LM324_12V OPAMP(TYPE=3 VLH=1.6 VLL=0.16 FPF=5 UGF=500k SLEW=0.3M RI=1000k RO=50 DAB=0.00075)")
+ NET_MODEL("LM324_5V OPAMP(TYPE=3 VLH=0.667 VLL=0.0667 FPF=5 UGF=500k SLEW=0.3M RI=1000k RO=50 DAB=0.00075)")
+
+ SOLVER(Solver, 48000)
+ ANALOG_INPUT(V1_2, 1.2)
+ ANALOG_INPUT(V12, 12)
+ ANALOG_INPUT(VM12, -12)
+ ANALOG_INPUT(V5, 5)
+ ANALOG_INPUT(VM5, -5)
+ ALIAS(VCC, V5)
+
+ TTL_INPUT(SIZE, 0) // active high
+ TTL_INPUT(SEXPLO, 0) // active high
+ TTL_INPUT(STIE, 0) // active high
+ TTL_INPUT(SLASER, 0) // active high
+ TTL_INPUT(TRACK, 0) // active high
+ TTL_INPUT(LOCK, 0) // active high
+ TTL_INPUT(SCANNER, 0) // active high
+ TTL_INPUT(OHEAT, 0) // active high
+
+ NET_C(VCC, SIZE.VCC, SEXPLO.VCC, STIE.VCC, SLASER.VCC, TRACK.VCC, LOCK.VCC, SCANNER.VCC, OHEAT.VCC)
+ NET_C(GND, SIZE.GND, SEXPLO.GND, STIE.GND, SLASER.GND, TRACK.GND, LOCK.GND, SCANNER.GND, OHEAT.GND)
+
+ LOCAL_SOURCE(NE556_DIP)
+ LOCAL_SOURCE(ICL8038_DIP)
+
+ RES(R12, RES_K(10))
+ RES(R13, RES_K(470))
+ RES(R14, RES_K(470))
+ POT(R15, RES_K(100))
+ POT(R16, RES_K(100))
+ POT(R17, RES_K(100))
+ POT(R18, RES_K(100))
+ POT(R19, RES_K(33))
+ POT(R20, RES_K(10))
+ POT(R21, RES_K(10))
+ RES(R23, RES_K(47))
+ RES(R24, 470)
+ RES(R25, RES_K(10))
+ RES(R26, RES_K(1))
+ RES(R27, RES_K(30))
+ RES(R28, RES_K(30))
+ RES(R29, RES_K(1))
+ RES(R30, RES_K(4.7))
+ RES(R31, RES_M(1))
+ RES(R37, RES_K(10))
+ RES(R38, RES_K(2.7))
+ RES(R39, RES_K(10))
+ RES(R40, RES_K(2.7))
+ RES(R41, RES_K(3))
+ RES(R42, RES_K(1))
+ RES(R43, RES_M(1))
+ RES(R44, RES_K(2.2))
+ RES(R45, RES_K(3.3))
+ RES(R46, RES_K(27))
+ RES(R47, RES_K(82))
+ RES(R48, RES_K(10))
+ RES(R49, RES_K(100))
+ RES(R50, RES_K(160))
+ RES(R51, RES_K(16))
+ RES(R52, RES_K(16))
+ RES(R53, RES_K(16))
+ RES(R54, RES_K(100))
+ RES(R55, RES_K(100))
+ RES(R56, RES_K(4.7))
+ RES(R57, RES_K(10))
+ RES(R58, RES_K(82))
+ RES(R59, RES_K(27))
+ RES(R60, RES_K(2.7))
+ RES(R61, RES_K(10))
+ RES(R62, RES_M(1))
+ RES(R63, RES_M(1))
+ RES(R64, RES_K(4.7))
+ RES(R67, RES_K(10))
+ RES(R68, RES_K(2.7))
+ RES(R69, RES_K(470))
+ RES(R70, RES_K(470))
+ RES(R71, RES_K(100))
+ RES(R72, RES_K(330))
+ RES(R73, RES_K(4.7))
+ RES(R74, RES_K(100))
+ RES(R75, RES_K(27))
+ RES(R77, RES_K(470))
+ RES(R78, RES_K(4.7))
+ RES(R79, RES_K(10))
+ RES(R80, RES_K(3))
+ RES(R81, RES_K(1))
+ RES(R82, RES_K(10))
+ RES(R83, RES_K(4.7))
+ RES(R84, RES_K(1))
+ RES(R85, RES_K(3))
+ RES(R86, RES_K(1))
+ RES(R87, RES_K(2))
+ //RES(R88, RES_K(82))
+ RES(R89, RES_K(22))
+ RES(R90, RES_K(22))
+ RES(R91, RES_M(1))
+ //RES(R, RES_K())
+
+ CAP(C7, CAP_U(0.1))
+ CAP(C9, CAP_U(0.1))
+ CAP(C10, CAP_U(0.1))
+ CAP(C11, CAP_U(0.1))
+ CAP(C12, CAP_U(0.01))
+ CAP(C13, CAP_U(1.0))
+ CAP(C14, CAP_U(0.1))
+ CAP(C15, CAP_U(0.01))
+ CAP(C18, CAP_U(1.0))
+ CAP(C20, CAP_U(1.0))
+ CAP(C21, CAP_U(0.1))
+ CAP(C22, CAP_U(0.1))
+ CAP(C23, CAP_U(0.1))
+ CAP(C25, CAP_U(1.0))
+ CAP(C26, CAP_U(0.1))
+ CAP(C27, CAP_U(1.0))
+ CAP(C29, CAP_U(0.1))
+ CAP(C32, CAP_U(1.0))
+ CAP(C34, CAP_U(1.0))
+ CAP(C38, CAP_U(0.1))
+ CAP(C39, CAP_U(0.01))
+ CAP(C45, CAP_U(4.7))
+ //CAP(C, CAP_U())
+
+ DIODE(D3, "1N914")
+
+ TTL_7406_GATE(IC_6C_A)
+ TTL_7406_GATE(IC_6C_B)
+ TTL_7406_GATE(IC_6C_C)
+ TTL_7406_GATE(IC_6C_D)
+ TTL_7406_GATE(IC_6C_E)
+ TTL_7406_GATE(IC_6C_F)
+ NET_C(VCC, IC_6C_A.VCC, IC_6C_B.VCC, IC_6C_C.VCC, IC_6C_D.VCC, IC_6C_E.VCC, IC_6C_F.VCC)
+ NET_C(GND, IC_6C_A.GND, IC_6C_B.GND, IC_6C_C.GND, IC_6C_D.GND, IC_6C_E.GND, IC_6C_F.GND)
+
+ CD4070_GATE(IC_7E_A)
+ CD4070_GATE(IC_7E_B)
+ CD4070_GATE(IC_7E_C)
+ CD4070_GATE(IC_7E_D)
+ NET_C(V12, IC_7E_A.VDD, IC_7E_B.VDD, IC_7E_C.VDD, IC_7E_D.VDD)
+ NET_C(GND, IC_7E_A.VSS, IC_7E_B.VSS, IC_7E_C.VSS, IC_7E_D.VSS)
+
+ NE555(IC_5B_A)
+ NE555(IC_6E_A)
+ NET_C(V5, IC_5B_A.VCC)
+ NET_C(V12, IC_6E_A.VCC)
+ NET_C(GND, IC_5B_A.GND, IC_6E_A.GND)
+
+ SUBMODEL(NE556_DIP, IC_6A)
+ SUBMODEL(NE556_DIP, IC_8F)
+ NET_C(V5, IC_6A.14)
+ NET_C(V12, IC_8F.14)
+ NET_C(GND, IC_6A.7, IC_8F.7)
+
+ CD4006_DIP(IC_8E)
+ NET_C(V12, IC_8E.14)
+ NET_C(GND, IC_8E.7)
+
+ OPAMP(IC_6D_A, "LM324_12V")
+ OPAMP(IC_6D_B, "LM324_12V")
+ OPAMP(IC_6D_C, "LM324_12V")
+ OPAMP(IC_6D_D, "LM324_12V")
+ OPAMP(IC_8D_A, "LM324_12V")
+ OPAMP(IC_8D_B, "LM324_12V")
+ OPAMP(IC_8D_C, "LM324_12V")
+ OPAMP(IC_8D_D, "LM324_12V")
+ NET_C(V12, IC_6D_A.VCC, IC_6D_B.VCC, IC_6D_C.VCC, IC_6D_D.VCC, IC_8D_A.VCC, IC_8D_B.VCC, IC_8D_C.VCC, IC_8D_D.VCC)
+ NET_C(VM12, IC_6D_A.GND, IC_6D_B.GND, IC_6D_C.GND, IC_6D_D.GND, IC_8D_A.GND, IC_8D_B.GND, IC_8D_C.GND, IC_8D_D.GND)
+
+ OPAMP(IC_7C_A, "LM324_5V")
+ OPAMP(IC_7C_B, "LM324_5V")
+ OPAMP(IC_7C_C, "LM324_5V")
+ OPAMP(IC_7C_D, "LM324_5V")
+ NET_C(V5, IC_7C_A.VCC, IC_7C_B.VCC, IC_7C_C.VCC, IC_7C_D.VCC)
+ NET_C(VM5, IC_7C_A.GND, IC_7C_B.GND, IC_7C_C.GND, IC_7C_D.GND)
+
+ MC3340_DIP(IC_7D)
+ MC3340_DIP(IC_6B)
+ NET_C(V12, IC_6B.8, IC_7D.8)
+ NET_C(GND, IC_6B.3, IC_7D.3)
+
+ SUBMODEL(ICL8038_DIP, IC_6F)
+ NET_C(V12, IC_6F.6)
+ NET_C(VM12, IC_6F.11)
+
+ CD4016_DIP(IC_7B)
+ NET_C(V5, IC_7B.14)
+ NET_C(VM5, IC_7B.7)
+
+ QBJT_EB(Q1, "2N3702")
+ QBJT_EB(Q2, "2N3702")
+
+ // Tie Weapon
+ NET_C(STIE.Q, IC_6C_E.A)
+ NET_C(IC_6C_E.Y, R39.1, IC_7E_C.A)
+ NET_C(V1_2, IC_7C_C.MINUS) // HACK: +12V is actually fed into this pin per the schematic, but it relies on LM324 abuse.
+ NET_C(V12, R39.2, IC_7E_C.B, R83.1, R91.1, R86.1, IC_7E_A.A, IC_8F.10)
+ NET_C(IC_7E_C.Q, IC_8F.4, IC_8F.6)
+ NET_C(IC_8F.1, C45.1, Q2.C, IC_8D_D.PLUS)
+ NET_C(GND, C38.2, C45.2, R82.2, R57.1, R61.2, R84.2, IC_8D_A.PLUS)
+ NET_C(R83.2, R82.1, Q2.B)
+ NET_C(R91.2, Q2.E)
+ NET_C(IC_8F.5, R85.1)
+ NET_C(R85.2, R84.1, IC_7C_C.PLUS)
+ ALIAS(TIE_ON, IC_7C_C.OUT)
+ ALIAS(TIEON1, R84.1)
+ NET_C(R58.2, VM12)
+ NET_C(R58.1, R57.2, R59.1, IC_8D_D.MINUS)
+ NET_C(R59.2, IC_8D_D.OUT, R60.1, IC_8F.11)
+ NET_C(R60.2, R61.1, IC_8F.2)
+ NET_C(R86.2, R87.1, IC_8F.13)
+ NET_C(R87.2, IC_8F.8, IC_8F.12, C38.1)
+ NET_C(IC_8F.9, IC_8E.3)
+ NET_C(IC_8E.13, IC_7E_A.B)
+ NET_C(IC_7E_A.Q, IC_8E.5)
+ NET_C(IC_8E.1, IC_8E.12, IC_7E_B.B)
+ NET_C(IC_8E.8, IC_7E_B.A)
+ NET_C(IC_7E_B.Q, IC_8E.4)
+ NET_C(IC_8E.10, IC_8E.6, R73.1)
+ NET_C(SIZE.Q, IC_6C_F.A)
+ NET_C(IC_6C_F.Y, R56.1)
+ NET_C(R56.2, R73.2, C29.1)
+ NET_C(C29.2, R74.1)
+ NET_C(R74.2, R75.1, IC_8D_A.MINUS)
+ NET_C(R75.2, IC_8D_A.OUT)
+ ALIAS(NOISE, IC_8D_A.OUT)
+
+ // Explosion
+ NET_C(NOISE, R53.1)
+ NET_C(R53.2, C23.1, R52.1)
+ NET_C(R52.2, C22.1, IC_6D_C.PLUS)
+ NET_C(R50.2, R49.1, IC_6D_C.MINUS)
+ NET_C(C23.2, R50.1, R51.1, R54.1, IC_6D_C.OUT)
+ NET_C(R51.2, C21.1)
+ ALIAS(RUMBLE_2, C21.1)
+ NET_C(C21.2, C22.2, R49.2, C27.2, R55.2, C26.2, GND)
+ NET_C(R54.2, R55.1, C34.1)
+ NET_C(C34.2, IC_7D.1)
+ NET_C(SEXPLO.Q, IC_6C_C.A)
+ NET_C(IC_6C_C.Y, R40.1)
+ NET_C(R40.2, C27.1, R63.1)
+ NET_C(R63.2, R62.2, IC_8D_C.PLUS)
+ NET_C(R62.1, V5)
+ NET_C(IC_8D_C.MINUS, IC_8D_C.OUT, IC_7D.2)
+ NET_C(IC_7D.6, C26.1)
+ NET_C(IC_7D.7, C25.1)
+ ALIAS(EXPLO, C25.2)
+
+ // Tracking Computer
+ NET_C(SCANNER.Q, IC_5B_A.RESET)
+ NET_C(V5, R24.1, R70.1, R13.1, R27.1)
+ NET_C(GND, C15.2, R26.2, C20.2, C11.2, C7.2, C12.2, R29.2)
+ NET_C(R24.2, R23.1, R12.1, IC_6A.5, IC_5B_A.DISCH)
+ NET_C(R23.2, C15.1, IC_5B_A.THRESH, IC_5B_A.TRIG)
+ NET_C(OHEAT.Q, IC_6C_B.A)
+ NET_C(IC_6C_B.Y, R38.1)
+ NET_C(R38.2, C20.1, R69.1)
+ NET_C(R69.2, R70.2, IC_6D_A.PLUS)
+ NET_C(IC_6D_A.MINUS, IC_6D_A.OUT, IC_6B.2)
+ NET_C(IC_5B_A.OUT, R25.1)
+ NET_C(R25.2, C9.1, R26.1)
+ NET_C(C9.2, IC_6B.1)
+ NET_C(IC_6B.6, C11.1)
+ NET_C(IC_6B.7, C10.1)
+ ALIAS(LOH, C10.2)
+ NET_C(R13.2, R14.1, IC_6A.1)
+ NET_C(R14.2, C7.1, IC_6A.2, IC_6A.6)
+ NET_C(LOCK.Q, IC_6A.4)
+ NET_C(R12.2, IC_6A.11)
+ NET_C(R27.2, R28.1, IC_6A.13)
+ NET_C(R28.2, C12.1, IC_6A.12, IC_6A.8)
+ NET_C(TRACK.Q, IC_6A.10)
+ NET_C(IC_6A.9, C13.1)
+ NET_C(C13.2, R30.1)
+ NET_C(R30.2, R29.1)
+ ALIAS(COMPUTER, R30.2)
+
+ // Laser
+ NET_C(SIZE.Q, IC_6C_D.A)
+ NET_C(IC_6C_D.Y, R41.1)
+ NET_C(R41.2, R78.2, R79.1, Q1.B)
+ NET_C(V1_2, IC_7C_B.MINUS) // HACK: +12V is actually fed into this pin per the schematic, but it relies on LM324 abuse.
+ NET_C(V12, R78.1, R77.1, R37.1, IC_7E_D.B, R89.1, R90.1)
+ NET_C(GND, R79.2, C32.2, R48.2, R81.2, R67.2, IC_6D_B.PLUS)
+ NET_C(R77.2, Q1.E)
+ NET_C(Q1.C, C32.1, IC_6E_A.DISCH, IC_6D_D.PLUS)
+ NET_C(SLASER.Q, IC_6C_A.A)
+ NET_C(IC_6C_A.Y, R37.2, IC_7E_D.A)
+ NET_C(IC_7E_D.Q, IC_6E_A.TRIG, IC_6E_A.RESET)
+ NET_C(IC_6E_A.OUT, R80.1)
+ NET_C(R80.2, R81.1, IC_7C_B.PLUS)
+ ALIAS(LASERON1, R80.2)
+ ALIAS(LASER_ON, IC_7C_B.OUT)
+ NET_C(R48.1, R47.1, R46.1, IC_6D_D.MINUS)
+ NET_C(VM12, R47.2, C39.2)
+ NET_C(R46.2, IC_6D_D.OUT, R68.1, IC_6F.8)
+ NET_C(R68.2, R67.1, IC_6E_A.THRESH)
+ NET_C(C39.1, IC_6F.10)
+ NET_C(R89.2, IC_6F.4)
+ NET_C(R90.2, IC_6F.5)
+ NET_C(IC_6F.3, R72.1)
+ NET_C(R72.2, R71.1, IC_6D_B.MINUS)
+ NET_C(R71.2, IC_6D_B.OUT)
+ ALIAS(LASER, R71.2)
+
+ // Mixer
+ NET_C(V5, R45.1, R42.2)
+ NET_C(R45.2, R44.1, IC_7C_A.MINUS, IC_7C_D.MINUS)
+ NET_C(GND, R44.2, C18.2, R43.2)
+ NET_C(SIZE.Q, R42.1, D3.A)
+ NET_C(D3.K, C18.1, R43.1, IC_7C_D.PLUS)
+
+ NET_C(TRACK.Q, IC_7C_A.PLUS)
+ NET_C(IC_7C_A.OUT, IC_7B.13)
+ NET_C(COMPUTER, IC_7B.1)
+ NET_C(IC_7B.2, R16.1, R16.2)
+
+ NET_C(LASER, IC_7B.11)
+ NET_C(LASER_ON, IC_7B.12)
+ NET_C(IC_7B.10, R18.1, R18.2)
+
+ NET_C(NOISE, IC_7B.4)
+ NET_C(TIE_ON, IC_7B.5)
+ NET_C(IC_7B.3, R17.1, R17.2)
+
+ NET_C(RUMBLE_2, IC_7B.8)
+ NET_C(IC_7C_D.OUT, IC_7B.6)
+ NET_C(IC_7B.9, R19.1, R19.2)
+
+ NET_C(EXPLO, R20.1, R20.2)
+
+ NET_C(LOH, R15.1, R15.2)
+
+ NET_C(R16.3, R18.3, R17.3, R19.3, R20.3, R15.3, R64.1, IC_8D_B.MINUS)
+ NET_C(GND, IC_8D_B.PLUS)
+ NET_C(R64.2, R21.3, IC_8D_B.OUT)
+ NET_C(R21.1, R31.2, GND)
+ NET_C(R21.2, C14.1)
+ NET_C(C14.2, R31.1)
+ ALIAS(OUTPUT, R31.1)
+NETLIST_END()
diff --git a/src/mame/audio/nl_starfire.h b/src/mame/audio/nl_starfire.h
new file mode 100644
index 00000000000..19835d3b974
--- /dev/null
+++ b/src/mame/audio/nl_starfire.h
@@ -0,0 +1,10 @@
+// license:BSD-3-Clause
+// copyright-holders:Ryan Holtz
+#ifndef MAME_AUDIO_NL_STARFIRE_H
+#define MAME_AUDIO_NL_STARFIRE_H
+
+#pragma once
+
+NETLIST_EXTERNAL(starfire)
+
+#endif // MAME_AUDIO_NL_STARFIRE_H
diff --git a/src/mame/audio/nl_sundance.cpp b/src/mame/audio/nl_sundance.cpp
index b229ceb2b6d..6860fed38ff 100644
--- a/src/mame/audio/nl_sundance.cpp
+++ b/src/mame/audio/nl_sundance.cpp
@@ -23,7 +23,6 @@
#include "netlist/devices/net_lib.h"
#include "nl_cinemat_common.h"
-#include "nl_sundance.h"
//
diff --git a/src/mame/audio/nl_tailg.cpp b/src/mame/audio/nl_tailg.cpp
index f0684aeeab5..bec696e1348 100644
--- a/src/mame/audio/nl_tailg.cpp
+++ b/src/mame/audio/nl_tailg.cpp
@@ -21,7 +21,6 @@
#include "netlist/devices/net_lib.h"
#include "nl_cinemat_common.h"
-#include "nl_tailg.h"
//
diff --git a/src/mame/audio/nl_tankbatt.cpp b/src/mame/audio/nl_tankbatt.cpp
index f318daf1cd1..0e2345e6db9 100644
--- a/src/mame/audio/nl_tankbatt.cpp
+++ b/src/mame/audio/nl_tankbatt.cpp
@@ -12,7 +12,6 @@
//
#include "netlist/devices/net_lib.h"
-#include "nl_tankbatt.h"
//
// Main netlist
diff --git a/src/mame/audio/nl_warrior.cpp b/src/mame/audio/nl_warrior.cpp
index a32d4df289b..f64e330ad2e 100644
--- a/src/mame/audio/nl_warrior.cpp
+++ b/src/mame/audio/nl_warrior.cpp
@@ -13,7 +13,6 @@
#include "netlist/devices/net_lib.h"
#include "nl_cinemat_common.h"
-#include "nl_warrior.h"
//
diff --git a/src/mame/audio/pinsnd88.cpp b/src/mame/audio/pinsnd88.cpp
new file mode 100644
index 00000000000..63b3fcd3f85
--- /dev/null
+++ b/src/mame/audio/pinsnd88.cpp
@@ -0,0 +1,274 @@
+// license:BSD-3-Clause
+// copyright-holders: Jonathan Gevaryahu
+/*
+ * pinsnd88.h - D-12338-567 Williams Pin Sound '88 board (M68B09E + YM2151 + DAC, two channels)
+ * PCB solder side trace P/N: 5766-12342-00 REV -
+ *
+ * Used only by the Williams System 11B pinball game "Jokerz!"
+ *
+ * The interface connector for this board is a 20 pin header J1 with the following pinout:
+ *
+ * +--------+
+ * GND | 1 2 | NC
+ * PB0 | 3 4 | PB1
+ * PB2 | 5 6 | PB3
+ * PB4 | 7 8 | PB5
+ * PB6 | 9 10 | PB7
+ * NC | 11 12 | NC [/SYNC_PULSE] (normal system 11 bg sound board uses this pin)
+ * /STROBE | 13 14 | NC [/RESET_S11]
+ * NC | 15 16 | /SYNC_PULSE_ALT
+ * NC | 17 18 | /RESET
+ * NC | 19 20 | NC
+ * +--------+
+ *
+ * Technically:
+ * Pin 13 is 'strobe in' and is asserted low to write to the sound board
+ * Pin 12 is 'sync out' and is asserted low to indicate the sound board
+ * has done some action. Unlike the D-11581 sound board, this board cannot
+ * write response data back to the host device.
+ *
+ * The actual full pinout of the connector, from the System 11 end is:
+ * +--------+
+ * GND | 1 2 | BLANKING
+ * MD0 | 3 4 | MD1
+ * MD2 | 5 6 | MD3
+ * MD4 | 7 8 | MD5
+ * MD6 | 9 10 | MD7
+ * LCB1 | 11 12 | MCB1
+ * MCB2 | 13 14 | /RESET
+ * LCA1 | 15 16 | MCA1
+ * R/W | 17 18 | MCA2
+ * E | 19 20 | NC
+ * +--------+
+ *
+ *
+ * This PCB shows deisgn choices which place it between the design of the
+ * D-11581 Williams System 11 Background Sound board (s11c_bg.cpp) and
+ * the A-12738-500xx WPC Sound board (wpcsnd.cpp), notably that it does
+ * not use a 68B21 PIA, and it has a fixed ROM bank from 0xC000-0xFFFF
+ * with the vectors instead of requiring the 68B09E vectors to appear in
+ * every rom bank.
+ * It even has two unused I/O addresses for supporting a CVSD chip with latches
+ * though the pcb is not configured for this.
+ * The C-12350 NARC sound board's master CPU shares its memory map with this
+ * board, but the NARC board was seemingly, based on its part number, designed
+ * slightly later.
+ *
+ *
+ * D-12338 Jumpers:
+ * W1 : enables the 8MHz clock to the divider to the 68B09E. present.
+ * W2 : enables /SYNC PULSE on J1 P16. present, despite being missing on the schematics.
+ * W3 : enables /SYNC PULSE on J1 P12 (as the usual S11 BG sound board does). absent.
+ * W4 : enables /RESET from J1 P18 (under cpu control, as the usual S11 BG sound board does). present.
+ * W5 : enables /RESET from J1 P14 (this makes the board reset on S11 power up reset only). absent.
+ * W6 : enables the 3.579545MHz clock to the YM2151. present.
+ * W7 : ties J4 pin 1 and 2 to GND. absent, despite being present on the schematics.
+ * W8 : ties J4 pin 5-through-inductor and the final audio power amp + pins to +12v. absent, as power is presuambly delivered in through J4 pin 5 instead.
+
+ * see https://a.allegroimg.com/s1024/0c2cfa/0433164f4bfa94aa99cec60874f5 re: W2 being connected on the real board. (also see undumped REV1 rom)
+ * see https://a.allegroimg.com/s1024/0c3dce/74cdfa004e1dbac943986a94999b re: W8 being absent
+ * see https://a.allegroimg.com/s1024/0c2979/0ffe7737466bb0ee363d4e127e33 re: W8 being absent
+
+ * NOTE: The Jokerz! pinball cabinet is known to have some significant issues with hum in the audio,
+ * Williams released a service bulletin which involved modifying the power pins on the CVSD chip
+ * on the System 11B Mainboard, but even that didn't completely fix it. The exact cause of this
+ * issue is not entirely clear at this point.
+
+
+ * TODO: the 'reset twice on reset' thing seems necessary or else tempo is horrendously screwed up. why?
+ * TODO: the 'treat reading the analog control port as if it is connected to the input latch and clear the input semaphore' seems necessary for sound to work. why? It doesn't match the schematics...
+
+
+ * NOTE: The Pin Sound '88 board used by Jokerz! can handle up to two 27c010
+ * EPROMs, but it only ever shipped with a single 27512 EPROM.
+ * Because of the way that the 27512 sits in the lower 28 pins of the 32 pin socket,
+ * this makes the mapping a little odd.
+ * Bank # and area Banked space If 2x 27c010 If 1x 27512
+ * Bank 0 4000-7fff 00000-03fff U6 00000-03fff open bus
+ * Bank 0 8000-bfff 04000-07fff U6 04000-07fff open bus
+ * Bank 1 4000-7fff 08000-0bfff U6 08000-0bfff open bus
+ * Bank 1 8000-bfff 0c000-0ffff U6 0c000-0ffff open bus
+ * Bank 2 4000-7fff 10000-13fff U6 10000-13fff open bus
+ * Bank 2 8000-bfff 14000-17fff U6 14000-17fff open bus
+ * Bank 3 4000-7fff 18000-1bfff U6 18000-1bfff open bus
+ * Bank 3 8000-bfff 1c000-1ffff U6 1c000-1ffff open bus
+ * Bank 4 4000-7fff 20000-23fff U5 00000-03fff U5 00000-03fff
+ * Bank 4 8000-bfff 24000-27fff U5 04000-07fff U5 04000-07fff
+ * Bank 5 4000-7fff 28000-2bfff U5 08000-0bfff U5 08000-0bfff
+ * Bank 5 8000-bfff 2c000-2ffff U5 0c000-0ffff U5 0c000-0ffff
+ * Bank 6 4000-7fff 30000-33fff U5 10000-13fff U5 00000-03fff
+ * Bank 6 8000-bfff 34000-37fff U5 14000-17fff U5 04000-07fff
+ * Bank 7 4000-7fff 38000-3bfff U5 18000-1bfff U5 08000-0bfff
+ * Bank 7 8000-bfff +fixed 3c000-3ffff U5 1c000-1ffff U5 0c000-0ffff
+*/
+
+#include "emu.h"
+#include "pinsnd88.h"
+#include "sound/volt_reg.h"
+
+
+DEFINE_DEVICE_TYPE(PINSND88, pinsnd88_device, "pinsnd88", "Williams Pin Sound '88 Audio Board")
+
+pinsnd88_device::pinsnd88_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
+ : device_t(mconfig,PINSND88,tag,owner,clock)
+ , device_mixer_interface(mconfig, *this, 2) // 2 channels
+ , m_cpu(*this, "cpu")
+ , m_dac(*this, "dac")
+ , m_ym2151(*this, "ym2151")
+ , m_cpubank(*this, "bank")
+ , m_syncq_cb(*this)
+ , m_old_resetq_state(ASSERT_LINE)
+ , m_data_in(0xff)
+ , m_inputlatch(*this, "inputlatch")
+{
+}
+
+/*
+15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00 RW
+0 0 0 * * * * * * * * * * * * * RW - 0x0000 - SRAM @U7
+0 0 1 0 0 0 x x x x x x x x x * RW - 0x2000 - YM2151 @U16
+0 0 1 0 0 1 x x x x x x x x x x x - 0x2400 - open bus (hypothesis: leftover from cvsd_clock_set_w circuit)
+0 0 1 0 1 0 x x x x x x x x x x W[1]- 0x2800 - ANALOG SWITCH, input sound and output stereo control; on NARC, latch to respond to main pcb
+0 0 1 0 1 1 x x x x x x x x x x x - 0x2C00 - open bus (hypothesis: leftover from cvsd_digit_clock_clear_w circuit; on NARC, secondary command_w)
+0 0 1 1 0 0 x x x x x x x x x x W - 0x3000 - 7224 DAC write
+0 0 1 1 0 1 x x x x x x x x x x R[2]- 0x3400 - Latch Read and de-assert MC68B09E /IRQ
+0 0 1 1 1 0 x x x x x x x x x x W[1]- 0x3800 - write ROM bank
+0 0 1 1 1 1 x x x x x x x x x x * - 0x3C00 - pulse the /SYNC_PULSE line low using a 74LS123 retriggerable monostable multivibrator[3]
+0 1 * * * * * * * * * * * * * * R - banked rom area (A14 low)
+1 0 * * * * * * * * * * * * * * R - banked rom area (A14 high)
+1 1 * * * * * * * * * * * * * * R - fixed rom area (permanently on the last bank, A14 high)
+[1] reading this address writes open bus garbage to it
+[2] writing this address clears the /IRQ state but doesn't read the latch/bus conflict
+[3] R=4.7k and C=.001uf, which pulses the /sync_pulse pin output from the sound board
+ low according to the datasheet formula:
+ TS = KRC, where K is the constant ~0.37, R is 4700),
+ and C is 0.000000001, for a result of 1.739us
+*/
+void pinsnd88_device::pinsnd88_map(address_map &map)
+{
+ map(0x0000, 0x1fff).ram();
+ map(0x2000, 0x2001).mirror(0x03fe).rw(m_ym2151, FUNC(ym2151_device::read), FUNC(ym2151_device::write));
+ // 2400 open bus
+ // TODO: map(0x2800, 0x2800).mirror(0x03ff).w(FUNC(pinsnd88_device::analog_w));
+ map(0x2800, 0x2800).mirror(0x03ff).r(m_inputlatch, FUNC(generic_latch_8_device::read)); // TODO: For some inexplicable reason, this has to be mapped here or you get no sound. The schematic shows this mapped at 0x3400, not 0x2800?
+ // 2c00 open bus
+ map(0x3000, 0x3000).mirror(0x03ff).w(m_dac, FUNC(dac_byte_interface::data_w));
+ map(0x3400, 0x3400).mirror(0x03ff).r(m_inputlatch, FUNC(generic_latch_8_device::read));
+ map(0x3800, 0x3800).mirror(0x03ff).w(FUNC(pinsnd88_device::bgbank_w));
+ map(0x3c00, 0x3c00).mirror(0x03ff).w(FUNC(pinsnd88_device::sync_w));
+ map(0x4000, 0xbfff).bankr("bank").region("cpu", 0); // banked rom
+ map(0xc000, 0xffff).rom().region("cpu",0x3c000); // fixed bank
+}
+
+void pinsnd88_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
+{
+ switch(id)
+ {
+ case TIMER_SYNC:
+ if (!m_syncq_cb.isnull())
+ {
+ logerror("pinsnd88 sync cleared!\n");
+ m_syncq_cb(ASSERT_LINE);
+ m_sync_timer->adjust(attotime::never);
+ }
+ break;
+ }
+}
+
+TIMER_CALLBACK_MEMBER(pinsnd88_device::deferred_sync_w)
+{
+ if (!m_syncq_cb.isnull())
+ {
+ logerror("pinsnd88 sync asserted!\n");
+ m_syncq_cb(CLEAR_LINE);
+ m_sync_timer->adjust(attotime::from_usec(2));
+ }
+ else
+ logerror("pinsnd88 sync writeback called, but callback is not registered!\n");
+}
+
+void pinsnd88_device::sync_w(uint8_t data)
+{
+ machine().scheduler().synchronize(timer_expired_delegate(FUNC(pinsnd88_device::deferred_sync_w),this), 0);
+}
+
+WRITE_LINE_MEMBER(pinsnd88_device::strobe_w)
+{
+ m_inputlatch->write(m_data_in);
+}
+
+void pinsnd88_device::data_w(uint8_t data)
+{
+ m_data_in = data;
+}
+
+WRITE_LINE_MEMBER(pinsnd88_device::resetq_w)
+{
+ if ((m_old_resetq_state != CLEAR_LINE) && (state == CLEAR_LINE))
+ {
+ logerror("PINSND88 device received reset request\n");
+ common_reset();
+ }
+ m_old_resetq_state = state;
+}
+
+
+void pinsnd88_device::device_add_mconfig(machine_config &config)
+{
+ MC6809E(config, m_cpu, XTAL(8'000'000) / 4); // MC68B09E
+ m_cpu->set_addrmap(AS_PROGRAM, &pinsnd88_device::pinsnd88_map);
+ config.set_maximum_quantum(attotime::from_hz(50));
+
+ // TODO: analog filters and "volume" controls for the two channels
+ AD7224(config, m_dac, 0);
+ voltage_regulator_device &vref(VOLTAGE_REGULATOR(config, "vref"));
+ vref.add_route(0, "dac", 1.0, DAC_VREF_POS_INPUT);
+ vref.add_route(0, "dac", -1.0, DAC_VREF_NEG_INPUT);
+ m_dac->add_route(ALL_OUTPUTS, *this, 0.41/2.0, AUTO_ALLOC_INPUT, 0); // 470K
+ m_dac->add_route(ALL_OUTPUTS, *this, 0.5/2.0, AUTO_ALLOC_INPUT, 1); // 330K
+
+ GENERIC_LATCH_8(config, m_inputlatch);
+ m_inputlatch->data_pending_callback().set_inputline(m_cpu, M6809_IRQ_LINE);
+
+ YM2151(config, m_ym2151, XTAL(3'579'545)); // "3.58 MHz" on schematics and parts list
+ m_ym2151->irq_handler().set_inputline(m_cpu, M6809_FIRQ_LINE); // IRQ is not true state, but neither is the M6809_FIRQ_LINE so we're fine.
+ m_ym2151->add_route(ALL_OUTPUTS, *this, 0.59/2.0, AUTO_ALLOC_INPUT, 0); // 330K
+ m_ym2151->add_route(ALL_OUTPUTS, *this, 0.5/2.0, AUTO_ALLOC_INPUT, 1); // 330K
+}
+
+void pinsnd88_device::device_start()
+{
+ u8 *rom = memregion("cpu")->base();
+ m_cpubank->configure_entries(0, 8, &rom[0x0], 0x8000);
+ m_cpubank->set_entry(0);
+ /* resolve lines */
+ m_syncq_cb.resolve();
+ /* timer */
+ m_sync_timer = timer_alloc(TIMER_SYNC);
+ m_sync_timer->adjust(attotime::never);
+ save_item(NAME(m_old_resetq_state));
+ save_item(NAME(m_data_in));
+}
+
+void pinsnd88_device::common_reset()
+{
+ // reset the CPU again, so that the CPU are starting with the right vectors (otherwise sound may die on reset)
+ m_cpu->pulse_input_line(INPUT_LINE_RESET, attotime::zero); // TODO: WHY is this needed? this board uses a fixed set of vectors at a fixed rom bank! but it still doesn't work properly without this.
+ m_ym2151->reset();
+}
+
+void pinsnd88_device::device_reset()
+{
+ common_reset();
+}
+
+/*
+ Rom mapping for the 3 banking bits:
+ 2 1 0
+ 0 r q - U6, A15 q, A16 r
+ 1 r q - U5, A15 q, A16 r
+*/
+void pinsnd88_device::bgbank_w(uint8_t data)
+{
+ m_cpubank->set_entry(data&0x7);
+}
diff --git a/src/mame/audio/pinsnd88.h b/src/mame/audio/pinsnd88.h
new file mode 100644
index 00000000000..7bbffd08516
--- /dev/null
+++ b/src/mame/audio/pinsnd88.h
@@ -0,0 +1,74 @@
+// license:BSD-3-Clause
+// copyright-holders: Jonathan Gevaryahu
+/*
+ * pinsnd88.h - D-12338-567 Williams Pin Sound '88 board (M68B09E + YM2151 + DAC, two channels)
+ *
+ */
+
+#ifndef MAME_AUDIO_PINSND88_H
+#define MAME_AUDIO_PINSND88_H
+
+#pragma once
+
+#include "cpu/m6809/m6809.h"
+#include "machine/gen_latch.h"
+#include "sound/ym2151.h"
+#include "sound/dac.h"
+
+
+class pinsnd88_device : public device_t, public device_mixer_interface
+{
+public:
+ // construction/destruction
+ pinsnd88_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);
+
+ // overrides
+ virtual void device_reset() override; // power up reset
+
+ // note to keep synchronization working, the host machine should have synchronization timer expired delegates
+ // if possible, before writing to the following things:
+ DECLARE_WRITE_LINE_MEMBER(strobe_w); // external write to board (J1 pin 13)
+ void data_w(uint8_t data); // external write to board data bus (J1 pins 3 thru 10 for D0-D7)
+ DECLARE_WRITE_LINE_MEMBER(resetq_w); // external write to board /RESET (J1 pin 18)
+
+ // callbacks
+ auto syncq_cb() { return m_syncq_cb.bind(); }
+
+ void pinsnd88_map(address_map &map);
+
+protected:
+ // constructor with overridable type for subclass, in case we want to put NARC's sound board in here eventually
+ //pinsnd88_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock = 0);
+
+ // overrides
+ virtual void device_start() override;
+ virtual void device_add_mconfig(machine_config &config) override;
+
+ TIMER_CALLBACK_MEMBER(deferred_sync_w);
+
+ // members
+ required_device<mc6809e_device> m_cpu;
+ required_device<ad7224_device> m_dac;
+ required_device<ym2151_device> m_ym2151;
+ required_memory_bank m_cpubank;
+
+ static const device_timer_id TIMER_SYNC = 0;
+private:
+ // overrides
+ virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
+
+ // members
+ devcb_write_line m_syncq_cb;
+ uint8_t m_old_resetq_state;
+ uint8_t m_data_in;
+ required_device<generic_latch_8_device> m_inputlatch;
+ emu_timer* m_sync_timer;
+
+ void common_reset(); // common reset function used by both internal and external reset
+ void sync_w(uint8_t data); // internal helper for deferred sync writeback
+ void bgbank_w(uint8_t data);
+};
+
+DECLARE_DEVICE_TYPE(PINSND88, pinsnd88_device)
+
+#endif // MAME_AUDIO_PINSND88_H
diff --git a/src/mame/drivers/apple2e.cpp b/src/mame/drivers/apple2e.cpp
index 3366c68a326..a2a27d206be 100644
--- a/src/mame/drivers/apple2e.cpp
+++ b/src/mame/drivers/apple2e.cpp
@@ -138,6 +138,7 @@ MIG RAM page 2 $CE02 is the speaker/slot bitfield and $CE03 is the paddle/accele
#include "bus/a2bus/a2cffa.h"
#include "bus/a2bus/a2memexp.h"
#include "bus/a2bus/a2scsi.h"
+#include "bus/a2bus/cmsscsi.h"
#include "bus/a2bus/a2hsscsi.h"
#include "bus/a2bus/a2thunderclock.h"
#include "bus/a2bus/a2softcard.h"
@@ -4498,6 +4499,7 @@ static void apple2_cards(device_slot_interface &device)
device.option_add("ceyes2", A2BUS_COMPUTEREYES2); /* ComputerEyes/2 Video Digitizer */
device.option_add("applesurance", A2BUS_APPLESURANCE); /* Applesurance Diagnostic Controller */
device.option_add("byte8251", A2BUS_BYTE8251); /* BYTE Magazine 8251 serial card */
+ device.option_add("cmsscsi", A2BUS_CMSSCSI); /* CMS Apple II SCSI Card */
}
static void apple2eaux_cards(device_slot_interface &device)
diff --git a/src/mame/drivers/apple2gs.cpp b/src/mame/drivers/apple2gs.cpp
index 48170672863..f68c9534966 100644
--- a/src/mame/drivers/apple2gs.cpp
+++ b/src/mame/drivers/apple2gs.cpp
@@ -79,6 +79,7 @@
#include "bus/a2bus/a2memexp.h"
#include "bus/a2bus/a2scsi.h"
#include "bus/a2bus/a2hsscsi.h"
+#include "bus/a2bus/cmsscsi.h"
#include "bus/a2bus/a2thunderclock.h"
#include "bus/a2bus/a2softcard.h"
#include "bus/a2bus/a2videoterm.h"
@@ -106,6 +107,7 @@
//#include "bus/a2bus/pc_xporter.h"
#include "bus/a2bus/byte8251.h"
//#include "bus/a2bus/hostram.h"
+//#include "bus/a2bus/ramfast.h"
#include "bus/a2gameio/gameio.h"
@@ -4566,6 +4568,8 @@ static void apple2_cards(device_slot_interface &device)
// device.option_add("pcxport", A2BUS_PCXPORTER); /* Applied Engineering PC Transporter */
device.option_add("byte8251", A2BUS_BYTE8251); /* BYTE Magazine 8251 serial card */
// device.option_add("hostram", A2BUS_HOSTRAM); /* Slot 7 RAM for GS Plus host protocol */
+// device.option_add("ramfast", A2BUS_RAMFAST); /* C.V. Technologies RAMFast SCSI card */
+ device.option_add("cmsscsi", A2BUS_CMSSCSI); /* CMS Apple II SCSI Card */
}
void apple2gs_state::apple2gs(machine_config &config)
@@ -4615,8 +4619,7 @@ void apple2gs_state::apple2gs(machine_config &config)
APPLE2_VIDEO(config, m_video, A2GS_14M).set_screen(m_screen);
- APPLE2_COMMON(config, m_a2common, A2GS_14M);
- m_a2common->set_GS_cputag(m_maincpu);
+ APPLE2_COMMON(config, m_a2common, A2GS_14M).set_GS_cputag(m_maincpu);
// APPLE2_HOST(config, m_a2host, A2GS_14M);
// m_a2host->set_cputag(m_maincpu);
diff --git a/src/mame/drivers/champbas.cpp b/src/mame/drivers/champbas.cpp
index c1733cf3f96..472b2a4fc7f 100644
--- a/src/mame/drivers/champbas.cpp
+++ b/src/mame/drivers/champbas.cpp
@@ -1182,37 +1182,37 @@ ROM_START( exctsccrb )
ROM_LOAD( "prom2.8r", 0x0120, 0x0100, CRC(8a9c0edf) SHA1(8aad387e9409cff0eeb42eeb57e9ea88770a8c9a) ) /* lookup table */
ROM_END
-ROM_START( exctscc2 )
- ROM_REGION( 0x10000, "maincpu", 0 )
- ROM_LOAD( "vr.3j", 0x0000, 0x2000, CRC(c6115362) SHA1(6a258631abd72ef6b8d7968bb4b2bc88e89e597d) )
- ROM_LOAD( "vr.3k", 0x2000, 0x2000, CRC(de36ba00) SHA1(0a0d92e710b8c749f145571bc8a204609456d19d) )
- ROM_LOAD( "vr.3l", 0x4000, 0x2000, CRC(1ddfdf65) SHA1(313d0a7f13fc2de15aa32492c38a59fbafad9f01) )
-
- ROM_REGION( 0x10000, "audiocpu", 0 )
- ROM_LOAD( "vr.7d", 0x0000, 0x2000, CRC(2c675a43) SHA1(aa0a8dbcae955e3da92c435202f2a1ed238c377e) )
- ROM_LOAD( "vr.7e", 0x2000, 0x2000, CRC(e571873d) SHA1(2dfff24f5dac86e92612f40cf3642005c7f36ad3) )
- ROM_LOAD( "8_d6.bin", 0x4000, 0x2000, CRC(88651ee1) SHA1(2052e1b3f9784439369f464e31f4a2b0d1bb0565) ) /* vr.7f */
- ROM_LOAD( "7_c6.bin", 0x6000, 0x2000, CRC(6d51521e) SHA1(2809bd2e61f40dcd31d43c62520982bdcfb0a865) ) /* vr.7h */
- ROM_LOAD( "1_a6.bin", 0x8000, 0x1000, CRC(20f2207e) SHA1(b1ed2237d0bd50ddbe593fd2fbff9f1d67c1eb11) ) /* vr.7k */
-
- ROM_REGION( 0x2000, "alpha_8201:mcu", 0 )
- ROM_LOAD( "alpha-8303_44801b42.bin", 0x0000, 0x2000, CRC(66adcb37) SHA1(e1c72ecb161129dcbddc0b16dd90e716d0c79311) )
-
- ROM_REGION( 0x04000, "gfx1", 0 ) // 3bpp chars + sprites: rearranged by DRIVER_INIT to leave only chars
- ROM_LOAD( "vr.5a", 0x0000, 0x2000, CRC(4ff1783d) SHA1(c45074864c3a4bcbf3a87d164027ae16dca53d9c) ) /* planes 0,1 */
- ROM_LOAD( "vr.5c", 0x2000, 0x2000, CRC(1fb84ee6) SHA1(56ceb86c509be783f806403ac21e7c9684760d5f) ) /* plane 3 */
-
- ROM_REGION( 0x04000, "gfx2", 0 ) // 3bpp chars + sprites: rearranged by DRIVER_INIT to leave only sprites
- ROM_LOAD( "vr.5b", 0x0000, 0x2000, CRC(5605b60b) SHA1(19d5909896ae4a3d7552225c369d30475c56793b) ) /* planes 0,1 */
-
- ROM_REGION( 0x02000, "gfx3", 0 ) // 4bpp sprites
- ROM_LOAD( "vr.5k", 0x0000, 0x1000, CRC(1d37edfa) SHA1(184fa6dd7b1b3fff4c5fc19b42301ccb7979ac84) )
- ROM_LOAD( "vr.5l", 0x1000, 0x1000, CRC(b97f396c) SHA1(4ffe512acf047230bd593911a615fc0ef66b481d) )
-
- ROM_REGION( 0x0220, "proms", 0 )
- ROM_LOAD( "prom1.e1", 0x0000, 0x0020, CRC(d9b10bf0) SHA1(bc1263331968f4bf37eb70ec4f56a8cb763c29d2) ) /* palette */
- ROM_LOAD( "prom3.k5", 0x0020, 0x0100, CRC(b5db1c2c) SHA1(900aaaac6b674a9c5c7b7804a4b0c3d5cce761aa) ) /* lookup table */
- ROM_LOAD( "prom2.8r", 0x0120, 0x0100, CRC(8a9c0edf) SHA1(8aad387e9409cff0eeb42eeb57e9ea88770a8c9a) ) /* lookup table */
+ROM_START( exctscc2 ) // 2-PCB stack: CPU & SOUND BOARD + DISPLAY BOARD N. 58AS51-1
+ ROM_REGION( 0x10000, "maincpu", 0 ) // on CPU & sound board
+ ROM_LOAD( "eprom_1_vr_alpha_denshi.3j", 0x0000, 0x2000, CRC(c6115362) SHA1(6a258631abd72ef6b8d7968bb4b2bc88e89e597d) )
+ ROM_LOAD( "eprom_2_vr_alpha_denshi.3k", 0x2000, 0x2000, CRC(de36ba00) SHA1(0a0d92e710b8c749f145571bc8a204609456d19d) )
+ ROM_LOAD( "eprom_3_vr_alpha_denshi.3l", 0x4000, 0x2000, CRC(1ddfdf65) SHA1(313d0a7f13fc2de15aa32492c38a59fbafad9f01) )
+
+ ROM_REGION( 0x10000, "audiocpu", 0 ) // on CPU & sound board
+ ROM_LOAD( "eprom_0_vr_alpha_denshi.7d", 0x0000, 0x2000, CRC(2c675a43) SHA1(aa0a8dbcae955e3da92c435202f2a1ed238c377e) ) // yes 0, not 10
+ ROM_LOAD( "eprom_9_vr_alpha_denshi.7e", 0x2000, 0x2000, CRC(e571873d) SHA1(2dfff24f5dac86e92612f40cf3642005c7f36ad3) )
+ ROM_LOAD( "eprom_8_vr_alpha_denshi.7f", 0x4000, 0x2000, CRC(88651ee1) SHA1(2052e1b3f9784439369f464e31f4a2b0d1bb0565) )
+ ROM_LOAD( "eprom_7_vr_alpha_denshi.7h", 0x6000, 0x2000, CRC(6d51521e) SHA1(2809bd2e61f40dcd31d43c62520982bdcfb0a865) )
+ ROM_LOAD( "eprom_1_vr_alpha_denshi.7k", 0x8000, 0x1000, CRC(20f2207e) SHA1(b1ed2237d0bd50ddbe593fd2fbff9f1d67c1eb11) ) // marked for a 2764 but populated with a 2732
+
+ ROM_REGION( 0x2000, "alpha_8201:mcu", 0 ) // on CPU & sound board
+ ROM_LOAD( "alpha-8303_44801b42.1d", 0x0000, 0x2000, CRC(66adcb37) SHA1(e1c72ecb161129dcbddc0b16dd90e716d0c79311) )
+
+ ROM_REGION( 0x04000, "gfx1", 0 ) // 3bpp chars + sprites: rearranged by DRIVER_INIT to leave only chars, on display board
+ ROM_LOAD( "eprom_4_vr_alpha_denshi.5a", 0x0000, 0x2000, CRC(4ff1783d) SHA1(c45074864c3a4bcbf3a87d164027ae16dca53d9c) ) // planes 0,1
+ ROM_LOAD( "eprom_6_vr_alpha_denshi.5c", 0x2000, 0x2000, CRC(1fb84ee6) SHA1(56ceb86c509be783f806403ac21e7c9684760d5f) ) // plane 3
+
+ ROM_REGION( 0x04000, "gfx2", 0 ) // 3bpp chars + sprites: rearranged by DRIVER_INIT to leave only sprites, on display board
+ ROM_LOAD( "eprom_5_vr_alpha_denshi.5b", 0x0000, 0x2000, CRC(5605b60b) SHA1(19d5909896ae4a3d7552225c369d30475c56793b) ) // planes 0,1
+
+ ROM_REGION( 0x02000, "gfx3", 0 ) // 4bpp sprites, on display board
+ ROM_LOAD( "eprom_7_vr_alpha_denshi.5k", 0x0000, 0x1000, CRC(1d37edfa) SHA1(184fa6dd7b1b3fff4c5fc19b42301ccb7979ac84) )
+ ROM_LOAD( "eprom_8_vr_alpha_denshi.5l", 0x1000, 0x1000, CRC(b97f396c) SHA1(4ffe512acf047230bd593911a615fc0ef66b481d) )
+
+ ROM_REGION( 0x0220, "proms", 0 ) // it's suspected these weren't dumped for this set, but taken from an Exciting Soccer (see MT5026)
+ ROM_LOAD( "prom1.5j", 0x0000, 0x0020, BAD_DUMP CRC(d9b10bf0) SHA1(bc1263331968f4bf37eb70ec4f56a8cb763c29d2) ) // palette, marked as 7051 on CPU & sound board
+ ROM_LOAD( "prom3.60h", 0x0020, 0x0100, BAD_DUMP CRC(b5db1c2c) SHA1(900aaaac6b674a9c5c7b7804a4b0c3d5cce761aa) ) // lookup table, marked as 7052 on display board
+ ROM_LOAD( "prom2.61d", 0x0120, 0x0100, BAD_DUMP CRC(8a9c0edf) SHA1(8aad387e9409cff0eeb42eeb57e9ea88770a8c9a) ) // lookup table, marked as 7052 on display board
ROM_END
diff --git a/src/mame/drivers/generalplus_gpl16250_nand.cpp b/src/mame/drivers/generalplus_gpl16250_nand.cpp
index 11f3458faa4..d0dafa01d39 100644
--- a/src/mame/drivers/generalplus_gpl16250_nand.cpp
+++ b/src/mame/drivers/generalplus_gpl16250_nand.cpp
@@ -748,19 +748,72 @@ void generalplus_gpac800_game_state::machine_reset()
mem.write_word(dest + i, word);
}
- // these vectors must either directly point to RAM, or at least redirect there after some code
+ /* these vectors must either directly point to RAM, or at least redirect there after some code
+
+ kiugames has the startup code copied to 20xxx which is outside the scope of a 16-bit vector
+ so these must trampoline (although 20xxx currently isn't handled as RAM, so that needs more
+ thought anyway
+ */
uint16_t* internal = (uint16_t*)memregion("maincpu:internal")->base();
- internal[0x7ff5] = m_vectorbase + 0x0a;
- internal[0x7ff6] = m_vectorbase + 0x0c;
- internal[0x7ff7] = dest + 0x20; // point boot vector at code in RAM (probably in reality points to internal code that copies the first block)
- internal[0x7ff8] = m_vectorbase + 0x10;
- internal[0x7ff9] = m_vectorbase + 0x12;
- internal[0x7ffa] = m_vectorbase + 0x14;
- internal[0x7ffb] = m_vectorbase + 0x16;
- internal[0x7ffc] = m_vectorbase + 0x18;
- internal[0x7ffd] = m_vectorbase + 0x1a;
- internal[0x7ffe] = m_vectorbase + 0x1c;
- internal[0x7fff] = m_vectorbase + 0x1e;
+
+ int addr;
+ addr = (m_vectorbase + 0x0a) & 0x000fffff;
+ internal[0x7f00] = 0xfe80 | (addr >> 16);
+ internal[0x7f01] = (addr & 0xffff);
+
+ addr = (m_vectorbase + 0x0c) & 0x000fffff;
+ internal[0x7f02] = 0xfe80 | (addr >> 16);
+ internal[0x7f03] = (addr & 0xffff);
+
+ addr = (dest + 0x20) & 0x000fffff; // point boot vector at code in RAM (probably in reality points to internal code that copies the first block)
+ internal[0x7f04] = 0xfe80 | (addr >> 16);
+ internal[0x7f05] = (addr & 0xffff);
+
+ addr = (m_vectorbase + 0x10) & 0x000fffff;
+ internal[0x7f06] = 0xfe80 | (addr >> 16);
+ internal[0x7f07] = (addr & 0xffff);
+
+ addr = (m_vectorbase + 0x12) & 0x000fffff;
+ internal[0x7f08] = 0xfe80 | (addr >> 16);
+ internal[0x7f09] = (addr & 0xffff);
+
+ addr = (m_vectorbase + 0x14) & 0x000fffff;
+ internal[0x7f0a] = 0xfe80 | (addr >> 16);
+ internal[0x7f0b] = (addr & 0xffff);
+
+ addr = (m_vectorbase + 0x16) & 0x000fffff;
+ internal[0x7f0c] = 0xfe80 | (addr >> 16);
+ internal[0x7f0d] = (addr & 0xffff);
+
+ addr = (m_vectorbase + 0x18) & 0x000fffff;
+ internal[0x7f0e] = 0xfe80 | (addr >> 16);
+ internal[0x7f0f] = (addr & 0xffff);
+
+ addr = (m_vectorbase + 0x1a) & 0x000fffff;
+ internal[0x7f10] = 0xfe80 | (addr >> 16);
+ internal[0x7f11] = (addr & 0xffff);
+
+ addr = (m_vectorbase + 0x1c) & 0x000fffff;
+ internal[0x7f12] = 0xfe80 | (addr >> 16);
+ internal[0x7f13] = (addr & 0xffff);
+
+ addr = (m_vectorbase + 0x1e) & 0x000fffff;
+ internal[0x7f14] = 0xfe80 | (addr >> 16);
+ internal[0x7f15] = (addr & 0xffff);
+
+
+ internal[0x7ff5] = 0xff00;
+
+ internal[0x7ff6] = 0xff02;
+ internal[0x7ff7] = 0xff04;
+ internal[0x7ff8] = 0xff06;
+ internal[0x7ff9] = 0xff08;
+ internal[0x7ffa] = 0xff0a;
+ internal[0x7ffb] = 0xff0c;
+ internal[0x7ffc] = 0xff0e;
+ internal[0x7ffd] = 0xff10;
+ internal[0x7ffe] = 0xff12;
+ internal[0x7fff] = 0xff14;
}
m_maincpu->reset(); // reset CPU so vector gets read etc.
diff --git a/src/mame/drivers/midwunit.cpp b/src/mame/drivers/midwunit.cpp
index 1f7cbed2a9b..ff7cabab5b8 100644
--- a/src/mame/drivers/midwunit.cpp
+++ b/src/mame/drivers/midwunit.cpp
@@ -656,18 +656,13 @@ void midwunit_state::wunit_picsim(machine_config &config)
{
wunit(config);
MIDWAY_SERIAL_PIC(config, m_midway_serial_pic, 0);
- m_midway_serial_pic->set_upper(528); // this is actually a generic code all games check for in addition to their own game specific code!
+ m_midway_serial_pic->set_upper(528); // this is actually development PIC code, all games check for in addition to their own game specific code!
}
void midwunit_state::wunit_picemu(machine_config &config)
{
wunit(config);
MIDWAY_SERIAL_PIC_EMU(config, m_midway_serial_pic_emu, 0);
-
- // todo, REMOVE once the emulated PIC above works!
- // this just allows it to fall through to the simulation for now
- MIDWAY_SERIAL_PIC(config, m_midway_serial_pic, 0);
- m_midway_serial_pic->set_upper(528);
}
diff --git a/src/mame/drivers/mikro80.cpp b/src/mame/drivers/mikro80.cpp
index d9952df0e55..5501b6d0536 100644
--- a/src/mame/drivers/mikro80.cpp
+++ b/src/mame/drivers/mikro80.cpp
@@ -1,17 +1,22 @@
// license:BSD-3-Clause
// copyright-holders:Miodrag Milanovic
-/***************************************************************************
+/*****************************************************************************************
MIKRO80 driver by Miodrag Milanovic
2008-03-10 Preliminary driver.
+Cassette:
+* Mikro80: loads software items, but not its own saves
+* Radio99: can load its own saves; can load radio86 tapes, can load ut88 tapes.
+* Kristall2: can load its own saves; can load radio86 tapes; can load radio99 tapes.
+
+
ToDo:
-- Cassette save produces incorrect signal - need schematic of CMT.
-- Kristall doesn't seem to have any tape load/save facility?
+- Cassette - need schematic of CMT.
-****************************************************************************/
+*****************************************************************************************/
#include "emu.h"
@@ -21,7 +26,6 @@ ToDo:
#include "sound/volt_reg.h"
#include "emupal.h"
#include "screen.h"
-#include "softlist.h"
#include "speaker.h"
/* Address maps */
@@ -45,6 +49,7 @@ void mikro80_state::kristall_io(address_map &map)
{
map.unmap_value_high();
map(0x00, 0x03).rw(m_ppi, FUNC(i8255_device::read), FUNC(i8255_device::write));
+ map(0x02, 0x02).w(FUNC(mikro80_state::portc_w));
// map(0x20, 0x23). init byte 8B, so possibly another ppi with reversed offset like mikro80
}
@@ -54,7 +59,8 @@ void mikro80_state::radio99_io(address_map &map)
map(0x01, 0x01).rw(FUNC(mikro80_state::tape_r), FUNC(mikro80_state::tape_w));
// no init byte, so ppi has been replaced by ordinary latches
map(0x04, 0x04).w(FUNC(mikro80_state::sound_w));
- map(0x05, 0x05).rw(FUNC(mikro80_state::portc_r), FUNC(mikro80_state::portc_w));
+ //map(0x05, 0x05).rw(FUNC(mikro80_state::portc_r), FUNC(mikro80_state::portc_w));
+ map(0x05, 0x05).r(FUNC(mikro80_state::portc_r)).nopw();
map(0x06, 0x06).r(FUNC(mikro80_state::portb_r));
map(0x07, 0x07).w(FUNC(mikro80_state::porta_w));
}
@@ -254,6 +260,7 @@ void mikro80_state::kristall(machine_config &config)
{
mikro80(config);
m_maincpu->set_addrmap(AS_IO, &mikro80_state::kristall_io);
+ m_ppi->in_pc_callback().set(FUNC(mikro80_state::kristall2_portc_r));
}
diff --git a/src/mame/drivers/mpu4vid.cpp b/src/mame/drivers/mpu4vid.cpp
index 532238795de..3bcc992e528 100644
--- a/src/mame/drivers/mpu4vid.cpp
+++ b/src/mame/drivers/mpu4vid.cpp
@@ -1175,6 +1175,35 @@ static INPUT_PORTS_START( v4vgpok )
INPUT_PORTS_END
+static INPUT_PORTS_START( v4big40 )
+ PORT_INCLUDE( bwbvid )
+
+ PORT_MODIFY("BLACK1")
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_BUTTON9) PORT_NAME("Swop")
+ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_START1) PORT_NAME("Start / Deal / Draw")
+ PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_UNUSED)
+ PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_UNUSED)
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_CUSTOM) // Prize Shelf Opto
+ PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_SERVICE) PORT_NAME("Test Button") PORT_CODE(KEYCODE_W)
+ PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_SERVICE) PORT_NAME("Refill Key") PORT_CODE(KEYCODE_R) PORT_TOGGLE
+ PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_INTERLOCK) PORT_NAME("Cashbox (Back) Door") PORT_CODE(KEYCODE_Q) PORT_TOGGLE
+
+ PORT_MODIFY("BLACK2")
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_BUTTON1) PORT_NAME("Cancel/Collect")
+ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_POKER_HOLD1 )
+ PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_POKER_HOLD2 )
+ PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_POKER_HOLD3 )
+ PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_POKER_HOLD4 )
+ PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_POKER_HOLD5 )
+ PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_BUTTON7) PORT_NAME("Hi/Twist")
+ PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_BUTTON8) PORT_NAME("Lo/Stick")
+
+ PORT_MODIFY("DIL2")
+ PORT_DIPNAME( 0x80, 0x00, "Clear MPU Memory" ) PORT_DIPLOCATION("DIL2:08")
+ PORT_DIPSETTING( 0x00, DEF_STR( No ) )
+ PORT_DIPSETTING( 0x80, DEF_STR( Yes ) )
+
+INPUT_PORTS_END
static INPUT_PORTS_START( v4mdice )
PORT_INCLUDE( bwbvid )
@@ -1796,6 +1825,26 @@ static INPUT_PORTS_START( v4timebn )
PORT_DIPSETTING( 0x80, DEF_STR( On ) )
INPUT_PORTS_END
+static INPUT_PORTS_START( v4cybcas )
+ PORT_INCLUDE( bwbvid )
+
+ PORT_MODIFY("BLACK1")
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_UNUSED)
+ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_UNUSED)
+ PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_UNUSED)
+ PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_UNUSED)
+
+ PORT_MODIFY("BLACK2")
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_NAME("Nehmen")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_NAME("Halten A")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_NAME("Halten B")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_NAME("Halten C")
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON4 ) PORT_NAME("Ensatz")
+ PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_BUTTON5 ) PORT_NAME("Exchange")
+ PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_START2 ) PORT_NAME("Start Super")
+ PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_START1 ) PORT_NAME("Start/Risiko")
+INPUT_PORTS_END
+
WRITE_LINE_MEMBER(mpu4vid_state::mpu_video_reset)
{
@@ -2125,8 +2174,7 @@ void mpu4vid_state::vid_oki(machine_config &config)
m_ptm_ic3ss->set_external_clocks(0, 0, 0);
m_ptm_ic3ss->o1_callback().set("ptm_ic3ss", FUNC(ptm6840_device::set_c2));
m_ptm_ic3ss->o2_callback().set("ptm_ic3ss", FUNC(ptm6840_device::set_c1));
- //m_ptm_ic3ss->o3_callback().set("ptm_ic3ss", FUNC(ptm6840_device::set_g1));
- //m_ptm_ic3ss->irq_callback().set(FUNC(mpu4_state::cpu1_ptm_irq));
+ m_ptm_ic3ss->o3_callback().set("ptm_ic3ss", FUNC(ptm6840_device::set_g1));
PIA6821(config, m_pia_ic4ss, 0);
m_pia_ic4ss->readpb_handler().set(FUNC(mpu4vid_state::pia_gb_portb_r));
@@ -5433,6 +5481,21 @@ ROM_END
ROM_START( v4picdil )
ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD( "pcdsf___.a_0", 0x0000, 0x010000, CRC(45a15082) SHA1(d7655722c7ad9f3b1b2663d85287ae185917d677) )
+
+ ROM_REGION( 0x800000, "video", 0 )
+ ROM_LOAD16_BYTE( "pcd_____.a_1", 0x000001, 0x080000, CRC(0ed561d4) SHA1(899c76d2a2352988a01bece2a229deb934a00892) )
+ ROM_LOAD16_BYTE( "pcd_____.a_2", 0x000000, 0x080000, CRC(bffe3863) SHA1(ea6fdcce470e8a50c35f43fd86e39524be2db3a3) )
+ ROM_LOAD16_BYTE( "pcd_____.a_3", 0x100001, 0x080000, CRC(3b64a328) SHA1(a9fa9dc30b352388906e6021bc0d1ad7c3a28746) )
+ ROM_LOAD16_BYTE( "pcd_____.a_4", 0x100000, 0x080000, CRC(25faba03) SHA1(572aaee3af3b915294ba057b7ceb653dd135098b) )
+ ROM_LOAD16_BYTE( "pcd_____.a_5", 0x200001, 0x080000, CRC(275f3c1c) SHA1(1d0f8f7d0388d5072ae404f10b2481153979a217) )
+ ROM_LOAD16_BYTE( "pcd_____.a_6", 0x200000, 0x080000, CRC(148ecba0) SHA1(2ae0f5529fa3951025539fe19f4e8fdf10f13374) )
+
+ ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 )
+ /* none present */
+ROM_END
+
+ROM_START( v4picdila )
+ ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD( "pcdsf__e.a_0", 0x0000, 0x010000, CRC(0ed1c7af) SHA1(c19ff141fba7fd1f2cf0b152e3c6df61c6b27b46) )
ROM_REGION( 0x800000, "video", 0 )
@@ -5448,6 +5511,25 @@ ROM_START( v4picdil )
ROM_END
+ROM_START( v4picdilz )
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "pcdsf2_interface_a0.bin", 0x0000, 0x010000, CRC(5e007ac4) SHA1(82fd17da416c29b2e4b75f24bc8d415e57c0e94b))
+
+ ROM_REGION( 0x800000, "video", 0 )
+ ROM_LOAD16_BYTE( "piccadilly_vid_a1_ic15.bin", 0x000000, 0x080000, CRC(22f9ad51) SHA1(f63923e346519833f71a1644d4e504d2f93a173f) )
+ ROM_LOAD16_BYTE( "piccadilly_vid_a2_ic7.bin", 0x000001, 0x080000, CRC(6de3bae1) SHA1(c9fae9bb694341b1cca05ae143beb04989326897) )
+ ROM_LOAD16_BYTE( "pcd_____.a_3", 0x100001, 0x080000, CRC(3b64a328) SHA1(a9fa9dc30b352388906e6021bc0d1ad7c3a28746) )
+ ROM_LOAD16_BYTE( "pcd_____.a_4", 0x100000, 0x080000, CRC(25faba03) SHA1(572aaee3af3b915294ba057b7ceb653dd135098b) )
+ ROM_LOAD16_BYTE( "pcd_____.a_5", 0x200001, 0x080000, CRC(275f3c1c) SHA1(1d0f8f7d0388d5072ae404f10b2481153979a217) )
+ ROM_LOAD16_BYTE( "pcd_____.a_6", 0x200000, 0x080000, CRC(148ecba0) SHA1(2ae0f5529fa3951025539fe19f4e8fdf10f13374) )
+
+ ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 )
+ ROM_LOAD( "pcdsnd_v1_p1.bin", 0x000000, 0x080000, CRC(01c0bec3) SHA1(a755f939d02500f0a03e399bbf7f842173bf5a71) )
+ ROM_LOAD( "pcdsnd_v1_p2.bin", 0x080000, 0x080000, CRC(a9f66e67) SHA1(eba1ff2023356face1d9a6be93417b54a132fe6f) )
+ ROM_LOAD( "pcdsnd_v1_p3.bin", 0x100000, 0x080000, BAD_DUMP CRC(d15ea1bd) SHA1(f47e4d901a89ccf83784e582414f3dce08fc4e18) ) // mostly empty, corrupt?
+ ROM_LOAD( "pcdsnd_v1_p4.bin", 0x180000, 0x080000, CRC(275cdbe0) SHA1(7239d48c4755072a32c237079e623baa95a32593) )
+ROM_END
+
ROM_START( v4big40 )
ROM_REGION( 0x10000, "maincpu", 0 )
@@ -6415,6 +6497,18 @@ ROM_START( v4gldrshu )
/* none present */
ROM_END
+ROM_START( v4gldrsh3 )
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "goldrush.bin", 0x0000, 0x010000, CRC(459834db) SHA1(dac9945553567c6bbc4e8ca9054a0b5448bc19aa) )
+
+ ROM_REGION( 0x800000, "video", 0 )
+ ROM_LOAD16_BYTE( "go_3.1.bin", 0x000000, 0x080000, CRC(5edc8226) SHA1(c231978be89db23c1b1d38307510ef7e2a278492) )
+ ROM_LOAD16_BYTE( "go_3.2.bin", 0x000001, 0x080000, CRC(95c10e74) SHA1(73b230e2281d4e2a564f070c752479af2af32757) )
+
+ ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 )
+ /* none present */
+ROM_END
+
ROM_START( v4mdicee )
ROM_REGION( 0x10000, "maincpu", 0 )
@@ -6789,6 +6883,7 @@ ROM_END
ROM_START( v4mdice5 )
ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD( "release5_mpu4.rom", 0x0000, 0x010000, NO_DUMP )
+ ROM_LOAD( "mdmpu4.bin", 0x0000, 0x010000, CRC(8e712a33) SHA1(e821167c825b151bcde5eb9c63e7d2da04e1166a) )
ROM_REGION( 0x800000, "video", 0 ) // release 5 of Miami Dice based on internal strings
ROM_LOAD16_BYTE( "mdv58p1", 0x000001, 0x080000, CRC(3f3fa0d2) SHA1(bb52111bcea5cd404d1e7adf0f3ebca596a251ac) )
@@ -6801,6 +6896,21 @@ ROM_START( v4mdice5 )
ROM_LOAD( "mdsndb", 0x080000, 0x080000, CRC(2233d677) SHA1(a787dc0bafa310df9467e4b8166274288fe94b4c) )
ROM_END
+ROM_START( v4mdice6 )
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "md_26a__.6_0", 0x0000, 0x010000, CRC(1902067a) SHA1(ca46375ad859758bd3182653f2614cea47e46e50) )
+
+ ROM_REGION( 0x800000, "video", 0 )
+ ROM_LOAD16_BYTE( "md______.8_1", 0x000001, 0x080000, CRC(3f3fa0d2) SHA1(bb52111bcea5cd404d1e7adf0f3ebca596a251ac) )
+ ROM_LOAD16_BYTE( "md______.8_2", 0x000000, 0x080000, CRC(14bb6b48) SHA1(97025f0899c325d28ac75c54e81fd425b5002064) )
+ ROM_LOAD16_BYTE( "md_6_30", 0x100001, 0x080000, CRC(c1526309) SHA1(c6961813310a3873540c9174db3c7ce2347620d5) )
+ ROM_LOAD16_BYTE( "md_6_34", 0x100000, 0x080000, CRC(f6b8cc2f) SHA1(d1022b4a8ab3266dab5401127610c864e6e40a7f) )
+
+ ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 )
+ ROM_LOAD( "mdsnda", 0x000000, 0x080000, CRC(18651603) SHA1(c6f7557a82cb49f3f001b43250129d10f4f6ab5a) )
+ ROM_LOAD( "mdsndb", 0x080000, 0x080000, CRC(2233d677) SHA1(a787dc0bafa310df9467e4b8166274288fe94b4c) )
+ROM_END
+
/* Some roms were simply in a set marked as Monte Carlo, but the 2 letter code mn) is the same */
/* The roms were a mixture of
@@ -7630,6 +7740,21 @@ ROM_START( v4montezz )
ROM_LOAD( "mcosndb.bin", 0x080000, 0x080000, CRC(fcbad433) SHA1(a8cd32ca5a17e3c35701a7eac3e9ef741aa04105) )
ROM_END
+ROM_START( v4monteger )
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "mnd-a0_interface.bin", 0x0000, 0x010000, CRC(157e7ee4) SHA1(7a2d2caefd6ff609b8059d0ed0fd7ef94d8d36bc) )
+
+ ROM_REGION( 0x800000, "video", 0 )
+ ROM_LOAD16_BYTE( "mnd-a2_vid.bin", 0x000000, 0x080000, CRC(220f3a14) SHA1(fdfdc41c62330d77735d1840a4a7d429b3257d07) )
+ ROM_LOAD16_BYTE( "mnd-a1_vid.bin", 0x000001, 0x080000, CRC(b7b28d00) SHA1(0ae4bc759472f58cb738d7e7c8713a54f4e13686) )
+ ROM_LOAD16_BYTE( "mnd-a4_vid.bin", 0x100000, 0x080000, CRC(5fa9d451) SHA1(539438d237b869e97176d031f0014f3e33374eed) )
+ ROM_LOAD16_BYTE( "mnd-a3_vid.bin", 0x100001, 0x080000, CRC(5e3a95a4) SHA1(305a7f8b1c5072d86d6f381501886587a2e186ea) )
+
+ ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 )
+ ROM_LOAD( "mnd-1a-snd.bin", 0x000000, 0x080000, CRC(98bcf6fb) SHA1(b2c0d305f64be10f5ff40518ebb1b66c44559578) )
+ ROM_LOAD( "mnd-1b-snd.bin", 0x080000, 0x080000, CRC(df2118b4) SHA1(6126baff9dfef7c573e3f77847ea58bdc242fdc2) )
+ROM_END
+
ROM_START( v4ovrmn3 )
ROM_REGION( 0x10000, "maincpu", 0 )
@@ -8956,7 +9081,7 @@ GAME( 1989, v4tetrs1, v4tetrs, bwbvid, v4tetris, mpu4vid_state, init_b
// Blox is an later version of Payout Tetris, without Tetris license? (SJM = Stuart McArthur?)
GAME( 1990, v4blox, 0, bwbvid, v4tetris, mpu4vid_state, init_bwbhack, ROT0, "BWB / Barcrest","Blox (SJM BLOX, 50p/20p Play, Version 2.0) (MPU4 Video)",GAME_FLAGS_OK )
GAME( 1990, v4bloxd, v4blox, bwbvid, v4tetris, mpu4vid_state, init_bwbhack, ROT0, "BWB / Barcrest","Blox (SJM BLOX, 50p/20p Play, Version 2.0) (Datapak) (MPU4 Video)",GAME_FLAGS )
-// Prize Tetris / Bullion Blox have quite different attract presentaiton to the above
+// Prize Tetris / Bullion Blox have quite different attract presentation to the above
GAME( 1994, v4pztet, 0, bwbvid, v4pztet, mpu4vid_state, init_bwbhack, ROT0, "BWB", "Prize Tetris (BWB) (MPU4 Video)",GAME_FLAGS_OK )
GAME( 1994, v4pzteta, v4pztet, bwbvid, v4pztet, mpu4vid_state, init_bwbhack, ROT0, "BWB", "Prize Tetris (BWB) (Datapak) (MPU4 Video)",GAME_FLAGS )
GAME( 1994, v4pztetb, v4pztet, bwbvid, v4pztet, mpu4vid_state, init_bwbhack, ROT0, "BWB", "Prize Tetris (BWB) (Showcase) (MPU4 Video)",GAME_FLAGS_OK ) // screen telling you to exchange tickets for prizes in the 'showcase' during attract
@@ -9174,18 +9299,18 @@ GAME( 1996, v4reno7, v4reno, bwbvid_oki, v4reno, mpu4vid_state, init_
GAME( 1996, v4reno5, v4reno, bwbvid_oki, v4reno, mpu4vid_state, init_prizeinv, ROT0, "BWB","Reno Reels (Release 5) (MPU4 Video)",GAME_FLAGS ) // no base ROM
-GAME( 1996, v4big40, 0, bwbvid_oki_bt471, bwbvid, mpu4vid_state, init_bwbhack, ROT0, "BWB","Big 40 Poker (BWB) (Arcade Standard) (set 1) (MPU4 Video)",GAME_FLAGS )
-GAME( 1996, v4big40a, v4big40, bwbvid_oki_bt471, bwbvid, mpu4vid_state, init_bwbhack, ROT0, "BWB","Big 40 Poker (BWB) (Arcade Standard) (set 2) (MPU4 Video)",GAME_FLAGS )
-GAME( 1996, v4big40b, v4big40, bwbvid_oki_bt471, bwbvid, mpu4vid_state, init_bwbhack, ROT0, "BWB","Big 40 Poker (BWB) (Arcade Standard) (set 3) (MPU4 Video)",GAME_FLAGS )
-GAME( 1996, v4big40c, v4big40, bwbvid_oki_bt471, bwbvid, mpu4vid_state, init_bwbhack, ROT0, "BWB","Big 40 Poker (BWB) (Arcade Standard) (set 4) (MPU4 Video)",GAME_FLAGS )
-GAME( 1996, v4big40d, v4big40, bwbvid_oki_bt471, bwbvid, mpu4vid_state, init_bwbhack, ROT0, "BWB","Big 40 Poker (BWB) (Arcade Data) (set 1) (MPU4 Video)",GAME_FLAGS )
-GAME( 1996, v4big40e, v4big40, bwbvid_oki_bt471, bwbvid, mpu4vid_state, init_bwbhack, ROT0, "BWB","Big 40 Poker (BWB) (Arcade Data) (set 2) (MPU4 Video)",GAME_FLAGS )
-GAME( 1996, v4big40g, v4big40, bwbvid_oki_bt471, bwbvid, mpu4vid_state, init_bwbhack, ROT0, "BWB","Big 40 Poker (BWB) (S_Site Standard) (set 1) (MPU4 Video)",GAME_FLAGS )
-GAME( 1996, v4big40h, v4big40, bwbvid_oki_bt471, bwbvid, mpu4vid_state, init_bwbhack, ROT0, "BWB","Big 40 Poker (BWB) (S_Site Standard) (set 2) (MPU4 Video)",GAME_FLAGS )
-GAME( 1996, v4big40k, v4big40, bwbvid_oki_bt471, bwbvid, mpu4vid_state, init_bwbhack, ROT0, "BWB","Big 40 Poker (BWB) (S_Site Data) (MPU4 Video)",GAME_FLAGS )
-GAME( 1996, v4big40i, v4big40, bwbvid_oki_bt471, bwbvid, mpu4vid_state, init_bwbhack, ROT0, "BWB","Big 40 Poker (BWB) (S_Site Data + %-Key) (set 1) (MPU4 Video)",GAME_FLAGS )
-GAME( 1996, v4big40j, v4big40, bwbvid_oki_bt471, bwbvid, mpu4vid_state, init_bwbhack, ROT0, "BWB","Big 40 Poker (BWB) (S_Site Data + %-Key) (set 2) (MPU4 Video)",GAME_FLAGS )
-GAME( 1996, v4big40f, v4big40, bwbvid_oki_bt471, bwbvid, mpu4vid_state, init_bwbhack, ROT0, "BWB","Big 40 Poker (BWB) (S_Site Data + %-Key + OCDM) (MPU4 Video)",GAME_FLAGS )
+GAME( 1996, v4big40, 0, bwbvid_oki_bt471, v4big40, mpu4vid_state, init_bwbhack, ROT0, "BWB","Big 40 Poker (BWB) (Arcade Standard) (set 1) (MPU4 Video)",GAME_FLAGS )
+GAME( 1996, v4big40a, v4big40, bwbvid_oki_bt471, v4big40, mpu4vid_state, init_bwbhack, ROT0, "BWB","Big 40 Poker (BWB) (Arcade Standard) (set 2) (MPU4 Video)",GAME_FLAGS )
+GAME( 1996, v4big40b, v4big40, bwbvid_oki_bt471, v4big40, mpu4vid_state, init_bwbhack, ROT0, "BWB","Big 40 Poker (BWB) (Arcade Standard) (set 3) (MPU4 Video)",GAME_FLAGS )
+GAME( 1996, v4big40c, v4big40, bwbvid_oki_bt471, v4big40, mpu4vid_state, init_bwbhack, ROT0, "BWB","Big 40 Poker (BWB) (Arcade Standard) (set 4) (MPU4 Video)",GAME_FLAGS )
+GAME( 1996, v4big40d, v4big40, bwbvid_oki_bt471, v4big40, mpu4vid_state, init_bwbhack, ROT0, "BWB","Big 40 Poker (BWB) (Arcade Data) (set 1) (MPU4 Video)",GAME_FLAGS )
+GAME( 1996, v4big40e, v4big40, bwbvid_oki_bt471, v4big40, mpu4vid_state, init_bwbhack, ROT0, "BWB","Big 40 Poker (BWB) (Arcade Data) (set 2) (MPU4 Video)",GAME_FLAGS )
+GAME( 1996, v4big40g, v4big40, bwbvid_oki_bt471, v4big40, mpu4vid_state, init_bwbhack, ROT0, "BWB","Big 40 Poker (BWB) (S_Site Standard) (set 1) (MPU4 Video)",GAME_FLAGS )
+GAME( 1996, v4big40h, v4big40, bwbvid_oki_bt471, v4big40, mpu4vid_state, init_bwbhack, ROT0, "BWB","Big 40 Poker (BWB) (S_Site Standard) (set 2) (MPU4 Video)",GAME_FLAGS )
+GAME( 1996, v4big40k, v4big40, bwbvid_oki_bt471, v4big40, mpu4vid_state, init_bwbhack, ROT0, "BWB","Big 40 Poker (BWB) (S_Site Data) (MPU4 Video)",GAME_FLAGS )
+GAME( 1996, v4big40i, v4big40, bwbvid_oki_bt471, v4big40, mpu4vid_state, init_bwbhack, ROT0, "BWB","Big 40 Poker (BWB) (S_Site Data + %-Key) (set 1) (MPU4 Video)",GAME_FLAGS )
+GAME( 1996, v4big40j, v4big40, bwbvid_oki_bt471, v4big40, mpu4vid_state, init_bwbhack, ROT0, "BWB","Big 40 Poker (BWB) (S_Site Data + %-Key) (set 2) (MPU4 Video)",GAME_FLAGS )
+GAME( 1996, v4big40f, v4big40, bwbvid_oki_bt471, v4big40, mpu4vid_state, init_bwbhack, ROT0, "BWB","Big 40 Poker (BWB) (S_Site Data + %-Key + OCDM) (MPU4 Video)",GAME_FLAGS )
GAME( 1997, v4dbltak, 0, bwbvid_oki_bt471, v4dbltak, mpu4vid_state, init_bwbhack, ROT0, u8"BWB","Double Take (BWB) (Release 4, Arcade Standard, 20p/25p Stake Key, £5/£10/£15 Prize Key) (MPU4 Video)",GAME_FLAGS )
@@ -9216,6 +9341,8 @@ GAME( 199?, v4gldrshq, v4gldrsh, bwbvid, v4reno, mpu4vid_state, init_bwbh
GAME( 199?, v4gldrshr, v4gldrsh, bwbvid, v4reno, mpu4vid_state, init_bwbhack, ROT0, "BWB","Gold Rush (BWB) (Release 8, Switchable 20p/10p/5p, Cash+Token) (Datapak) (MPU4 Video)",GAME_FLAGS )
GAME( 199?, v4gldrshs, v4gldrsh, bwbvid, v4reno, mpu4vid_state, init_bwbhack, ROT0, "BWB","Gold Rush (BWB) (Release 8, Switchable 20p/10p/5p, Cash+Token) (Showcase) (Datapak) (MPU4 Video)",GAME_FLAGS )
+GAME( 1994, v4gldrsh3, v4gldrsh, bwbvid, v4reno, mpu4vid_state, init_bwbhack, ROT0, "BWB","Gold Rush (BWB) (Release 3, 20p Fixed, Cash+Token) (MPU4 Video)",GAME_FLAGS )
+
GAME( 199?, v4timebn, 0, bwbvid_oki, v4timebn, mpu4vid_state, init_bwbhack, ROT0, "BWB","Time Bandit (BWB) (Release 1, 20p Fixed, Cash + Tokens) (set 1) (MPU4 Video)",GAME_FLAGS )
GAME( 199?, v4timebna, v4timebn, bwbvid_oki, v4timebn, mpu4vid_state, init_bwbhack, ROT0, "BWB","Time Bandit (BWB) (Release 1, 20p Fixed, Cash + Tokens) (set 2) (MPU4 Video)",GAME_FLAGS )
@@ -9291,6 +9418,8 @@ GAME( 199?, v4montean, v4monte, bwbvid_oki, v4mdice, mpu4vid_state, init
GAME( 199?, v4monteao, v4monte, bwbvid_oki, v4mdice, mpu4vid_state, init_bwbhack, ROT0, "BWB","Monte Carlo Or Bust (BWB) (Release ?, set 31) (MPU4 Video)",GAME_FLAGS )
// only have a single loose 68k ROM from this which doesn't match any other set
GAME( 199?, v4montezz, v4monte, bwbvid_oki, v4mdice, mpu4vid_state, init_bwbhack, ROT0, "BWB","Monte Carlo Or Bust (BWB) (Release ?, set 32) (MPU4 Video)",GAME_FLAGS )
+// German Release
+GAME( 199?, v4monteger, v4monte, bwbvid_oki, v4mdice, mpu4vid_state, init_bwbhack, ROT0, "BWB","Monte Carlo Or Bust (BWB) (German) (MPU4 Video)",GAME_FLAGS )
GAME( 1995, v4mdice, 0, bwbvid_oki, v4mdice, mpu4vid_state, init_bwbhack, ROT0, "BWB", u8"Miami Dice (BWB) (Release 8, S/Site Standard, 25p-Ā£10 Cash - Fixed) (set 1) (MPU4 Video)",GAME_FLAGS )
@@ -9317,10 +9446,12 @@ GAME( 1995, v4mdicec, v4mdice, bwbvid_oki, v4mdice, mpu4vid_state, init_
GAME( 1995, v4mdicef, v4mdice, bwbvid_oki, v4mdice, mpu4vid_state, init_bwbhack, ROT0, "BWB", u8"Miami Dice (BWB) (Release 8, Arcade Standard, 20p-Ā£8 Token - Fixed) (set 1) (MPU4 Video)",GAME_FLAGS )
GAME( 1995, v4mdiceh, v4mdice, bwbvid_oki, v4mdice, mpu4vid_state, init_bwbhack, ROT0, "BWB", u8"Miami Dice (BWB) (Release 8, Arcade Standard, 20p-Ā£8 Token - Fixed) (set 2) (MPU4 Video)",GAME_FLAGS )
GAME( 1995, v4mdiceg, v4mdice, bwbvid_oki, v4mdice, mpu4vid_state, init_bwbhack, ROT0, "BWB", u8"Miami Dice (BWB) (Release 8, Arcade Showcase, 20p-Ā£8 Token - Fixed) (set 3) (MPU4 Video)",GAME_FLAGS )
-// no base ROMs, only 68k ROMs dumped for Release 5
-GAME( 1995, v4mdice5, v4mdice, bwbvid_oki, v4mdice, mpu4vid_state, init_bwbhack, ROT0, "BWB","Miami Dice (BWB) (Release 5) (MPU4 Video)",GAME_FLAGS ) // no base ROM
+// 'Release 6'
+GAME( 1995, v4mdice6, v4mdice, bwbvid_oki, v4mdice, mpu4vid_state, init_bwbhack, ROT0, "BWB",u8"Miami Dice (BWB) (Release 6, Arcade Standard, 20p-Ā£8 Token - Fixed) (MPU4 Video)", GAME_FLAGS )
+// 'Release 5'
+GAME( 1995, v4mdice5, v4mdice, bwbvid_oki, v4mdice, mpu4vid_state, init_bwbhack, ROT0, "BWB",u8"Miami Dice (BWB) (Release 5, Arcade Showcase, 20p-Ā£8 Token - Fixed) (MPU4 Video)",GAME_FLAGS )
// this is a German version of v4mdice, produced by Nova
-GAME( 199?, v4mdiceger, v4mdice, bwbvid_oki, mpu4, mpu4vid_state, init_bwbhack, ROT0, "Nova","Miami Dice (Nova, German) (MPU4 Video)",GAME_FLAGS )
+GAME( 199?, v4mdiceger, v4mdice, bwbvid_oki, mpu4, mpu4vid_state, init_bwbhack, ROT0, "BWB (Nova license)","Miami Dice (Nova, German) (MPU4 Video)",GAME_FLAGS )
// other issues
@@ -9347,21 +9478,23 @@ GAME( 199?, v4rencasi, v4rencas, bwbvid, mpu4, mpu4vid_state, init_bwb
/* Uncertain BIOS */
// has a Barcrest style Characteriser check, not a BWB one?
-GAME( 199?, v4frfact, v4bios, crmaze, crmaze, mpu4vid_state, init_v4frfact, ROT0, "BWB","Fruit Factory (BWB) (set 1) (MPU4 Video)", GAME_FLAGS )
-GAME( 199?, v4frfacta, v4frfact, crmaze, crmaze, mpu4vid_state, init_v4frfact, ROT0, "BWB","Fruit Factory (BWB) (set 2) (MPU4 Video)", GAME_FLAGS )
-GAME( 199?, v4frfactb, v4frfact, crmaze, crmaze, mpu4vid_state, init_v4frfact, ROT0, "BWB","Fruit Factory (BWB) (set 3) (MPU4 Video)", GAME_FLAGS )
-GAME( 199?, v4frfactc, v4frfact, crmaze, crmaze, mpu4vid_state, init_v4frfact, ROT0, "BWB","Fruit Factory (BWB) (set 4) (MPU4 Video)", GAME_FLAGS )
-GAME( 199?, v4frfactd, v4frfact, crmaze, crmaze, mpu4vid_state, init_v4frfact, ROT0, "BWB","Fruit Factory (BWB) (set 5) (MPU4 Video)", GAME_FLAGS )
-GAME( 199?, v4frfacte, v4frfact, crmaze, crmaze, mpu4vid_state, init_v4frfact, ROT0, "BWB","Fruit Factory (BWB) (set 6) (MPU4 Video)", GAME_FLAGS )
-GAME( 199?, v4frfactf, v4frfact, crmaze, crmaze, mpu4vid_state, init_v4frfact, ROT0, "BWB","Fruit Factory (BWB) (set 7) (MPU4 Video)", GAME_FLAGS )
+GAME( 199?, v4frfact, v4bios, crmaze, bwbvid, mpu4vid_state, init_v4frfact, ROT0, "BWB","Fruit Factory (BWB) (set 1) (MPU4 Video)", GAME_FLAGS )
+GAME( 199?, v4frfacta, v4frfact, crmaze, bwbvid, mpu4vid_state, init_v4frfact, ROT0, "BWB","Fruit Factory (BWB) (set 2) (MPU4 Video)", GAME_FLAGS )
+GAME( 199?, v4frfactb, v4frfact, crmaze, bwbvid, mpu4vid_state, init_v4frfact, ROT0, "BWB","Fruit Factory (BWB) (set 3) (MPU4 Video)", GAME_FLAGS )
+GAME( 199?, v4frfactc, v4frfact, crmaze, bwbvid, mpu4vid_state, init_v4frfact, ROT0, "BWB","Fruit Factory (BWB) (set 4) (MPU4 Video)", GAME_FLAGS )
+GAME( 199?, v4frfactd, v4frfact, crmaze, bwbvid, mpu4vid_state, init_v4frfact, ROT0, "BWB","Fruit Factory (BWB) (set 5) (MPU4 Video)", GAME_FLAGS )
+GAME( 199?, v4frfacte, v4frfact, crmaze, bwbvid, mpu4vid_state, init_v4frfact, ROT0, "BWB","Fruit Factory (BWB) (set 6) (MPU4 Video)", GAME_FLAGS )
+GAME( 199?, v4frfactf, v4frfact, crmaze, bwbvid, mpu4vid_state, init_v4frfact, ROT0, "BWB","Fruit Factory (BWB) (set 7) (MPU4 Video)", GAME_FLAGS )
/* Nova - is this the same video board? One of the games displays 'Resetting' but the others do nothing interesting and access strange addresses */
-/* All contain BWB video in the BIOS rom tho */
+/* All contain BWB video in the BIOS rom tho, Cyber Casino also needs a Jackpot link? */
/* These seem to use the other palette chip (BT471). and use the German BWB bank setup, so may need more work */
-GAME( 199?, v4cybcas, 0, bwbvid_oki_bt471_german, bwbvid, mpu4vid_state, init_cybcas, ROT0, "Nova","Cyber Casino (Nova, German) (MPU4 Video)",GAME_FLAGS )
+GAME( 199?, v4cybcas, 0, bwbvid_oki_bt471_german, v4cybcas, mpu4vid_state, init_cybcas, ROT0, "BWB (Nova license)","Cyber Casino (Nova, German) (MPU4 Video)",GAME_FLAGS )
-GAME( 199?, v4missis, 0, bwbvid_oki_bt471_german, bwbvid, mpu4vid_state, init_bwbhack, ROT0, "Nova","Mississippi Lady (Nova, German) (MPU4 Video)",GAME_FLAGS ) // different hardware type? extra ram on mpu4 side?
+GAME( 199?, v4missis, 0, bwbvid_oki_bt471_german, v4cybcas, mpu4vid_state, init_bwbhack, ROT0, "BWB (Nova license)","Mississippi Lady (Nova, German) (MPU4 Video)",GAME_FLAGS ) // different hardware type? extra ram on mpu4 side?
-GAME( 199?, v4picdil, 0, bwbvid_oki_bt471_german, bwbvid, mpu4vid_state, init_bwbhack, ROT0, "Nova","Piccadilly Nights (Nova, German) (MPU4 Video)",GAME_FLAGS ) // different hardware type? extra ram on mpu4 side?
+GAME( 199?, v4picdil, 0, bwbvid_oki_bt471_german, v4cybcas, mpu4vid_state, init_bwbhack, ROT0, "BWB (Nova license)","Piccadilly Night (Nova, German) (set 1) (MPU4 Video)",GAME_FLAGS )
+GAME( 199?, v4picdila, v4picdil, bwbvid_oki_bt471_german, v4cybcas, mpu4vid_state, init_bwbhack, ROT0, "BWB (Nova license)","Piccadilly Night (Nova, German) (set 2) (MPU4 Video)",GAME_FLAGS )
+GAME( 199?, v4picdilz, v4picdil, bwbvid_oki_bt471_german, v4cybcas, mpu4vid_state, init_bwbhack, ROT0, "BWB (Nova license)","Piccadilly Night (Nova, German) (set 3) (MPU4 Video)",GAME_FLAGS )
diff --git a/src/mame/drivers/peoplepc.cpp b/src/mame/drivers/peoplepc.cpp
index 816db916fb3..5b205a8b3a7 100644
--- a/src/mame/drivers/peoplepc.cpp
+++ b/src/mame/drivers/peoplepc.cpp
@@ -25,6 +25,7 @@ The keyboard has a sticker that proclaims it was made by Fujitsu Limited.
#include "emu.h"
#include "cpu/i86/i86.h"
+#include "cpu/mcs48/mcs48.h"
#include "imagedev/floppy.h"
#include "machine/pic8259.h"
#include "machine/pit8253.h"
@@ -80,8 +81,6 @@ private:
MC6845_UPDATE_ROW(update_row);
uint8_t get_slave_ack(offs_t offset);
void charram_w(offs_t offset, uint16_t data);
- DECLARE_WRITE_LINE_MEMBER(tty_clock_tick_w);
- DECLARE_WRITE_LINE_MEMBER(kbd_clock_tick_w);
void dmapg_w(uint8_t data);
void p7c_w(uint8_t data);
DECLARE_WRITE_LINE_MEMBER(tc_w);
@@ -155,18 +154,6 @@ void peoplepc_state::charram_w(offs_t offset, uint16_t data)
m_gfxdecode->gfx(0)->mark_dirty(offset/16);
}
-WRITE_LINE_MEMBER(peoplepc_state::tty_clock_tick_w)
-{
- m_8251ser->write_txc(state);
- m_8251ser->write_rxc(state);
-}
-
-WRITE_LINE_MEMBER(peoplepc_state::kbd_clock_tick_w)
-{
- m_8251key->write_txc(state);
- m_8251key->write_rxc(state);
-}
-
void peoplepc_state::dmapg_w(uint8_t data)
{
m_dma0pg = data;
@@ -287,20 +274,22 @@ void peoplepc_state::olypeopl(machine_config &config)
m_maincpu->set_addrmap(AS_IO, &peoplepc_state::peoplepc_io);
m_maincpu->set_irq_acknowledge_callback("pic8259_0", FUNC(pic8259_device::inta_cb));
- pit8253_device &pit8253(PIT8253(config, "pit8253", 0));
+ pit8253_device &pit8253(PIT8253(config, "pit8253"));
pit8253.set_clk<0>(XTAL(14'745'600)/6);
- pit8253.out_handler<0>().set(FUNC(peoplepc_state::kbd_clock_tick_w));
+ pit8253.out_handler<0>().set(m_8251key, FUNC(i8251_device::write_txc));
+ pit8253.out_handler<0>().append(m_8251key, FUNC(i8251_device::write_rxc));
+ pit8253.out_handler<0>().append("pit8253", FUNC(pit8253_device::write_clk2));
pit8253.set_clk<1>(XTAL(14'745'600)/6);
- pit8253.out_handler<1>().set(FUNC(peoplepc_state::tty_clock_tick_w));
- pit8253.set_clk<2>(XTAL(14'745'600)/6);
+ pit8253.out_handler<1>().set(m_8251ser, FUNC(i8251_device::write_txc));
+ pit8253.out_handler<1>().append(m_8251ser, FUNC(i8251_device::write_rxc));
pit8253.out_handler<2>().set("pic8259_0", FUNC(pic8259_device::ir0_w));
- pic8259_device &pic8259_0(PIC8259(config, "pic8259_0", 0));
+ pic8259_device &pic8259_0(PIC8259(config, "pic8259_0"));
pic8259_0.out_int_callback().set_inputline(m_maincpu, 0);
pic8259_0.in_sp_callback().set_constant(1);
pic8259_0.read_slave_ack_callback().set(FUNC(peoplepc_state::get_slave_ack));
- PIC8259(config, m_pic_1, 0);
+ PIC8259(config, m_pic_1);
m_pic_1->out_int_callback().set("pic8259_0", FUNC(pic8259_device::ir7_w));
m_pic_1->in_sp_callback().set_constant(0);
@@ -327,13 +316,13 @@ void peoplepc_state::olypeopl(machine_config &config)
m_dmac->in_ior_cb<0>().set("upd765", FUNC(upd765a_device::dma_r));
m_dmac->out_iow_cb<0>().set("upd765", FUNC(upd765a_device::dma_w));
- UPD765A(config, m_fdc, 8'000'000, true, true);
+ UPD765A(config, m_fdc, XTAL(8'000'000)/2, true, true);
m_fdc->intrq_wr_callback().set("pic8259_0", FUNC(pic8259_device::ir2_w));
m_fdc->drq_wr_callback().set(m_dmac, FUNC(i8257_device::dreq0_w));
FLOPPY_CONNECTOR(config, "upd765:0", peoplepc_floppies, "525qd", peoplepc_state::floppy_formats);
FLOPPY_CONNECTOR(config, "upd765:1", peoplepc_floppies, "525qd", peoplepc_state::floppy_formats);
- I8251(config, m_8251key, 0);
+ I8251(config, m_8251key, XTAL(14'745'600)/6);
m_8251key->rxrdy_handler().set("pic8259_1", FUNC(pic8259_device::ir1_w));
m_8251key->txd_handler().set("kbd", FUNC(rs232_port_device::write_txd));
@@ -341,17 +330,32 @@ void peoplepc_state::olypeopl(machine_config &config)
kbd.rxd_handler().set(m_8251key, FUNC(i8251_device::write_rxd));
kbd.set_option_device_input_defaults("keyboard", DEVICE_INPUT_DEFAULTS_NAME(keyboard));
- I8251(config, m_8251ser, 0);
+ I8048(config, "kbdmcu", 4'608'000).set_disable(); // XTAL unknown
+
+ I8251(config, m_8251ser, XTAL(14'745'600)/6);
+ m_8251ser->rxrdy_handler().set("pic8259_0", FUNC(pic8259_device::ir5_w));
+ m_8251ser->txrdy_handler().set("pic8259_0", FUNC(pic8259_device::ir6_w));
+ m_8251ser->txd_handler().set("rs232c", FUNC(rs232_port_device::write_txd));
+ m_8251ser->rts_handler().set("rs232c", FUNC(rs232_port_device::write_rts));
+ m_8251ser->dtr_handler().set("rs232c", FUNC(rs232_port_device::write_dtr));
+
+ rs232_port_device &rs232c(RS232_PORT(config, "rs232c", default_rs232_devices, nullptr));
+ rs232c.rxd_handler().set(m_8251ser, FUNC(i8251_device::write_rxd));
+ rs232c.dsr_handler().set(m_8251ser, FUNC(i8251_device::write_dsr));
+ rs232c.cts_handler().set(m_8251ser, FUNC(i8251_device::write_cts));
}
ROM_START( olypeopl )
- ROM_REGION(0x2000,"maincpu", 0)
+ ROM_REGION(0x2000, "maincpu", 0)
ROM_SYSTEM_BIOS(0, "hd", "HD ROM")
ROMX_LOAD( "u01271c0.bin", 0x00000, 0x1000, CRC(8e0ef114) SHA1(774bab0a3e29853e9f6b951cf73082063ea61e6d), ROM_SKIP(1) | ROM_BIOS(0))
ROMX_LOAD( "u01271d0.bin", 0x00001, 0x1000, CRC(e2419bf9) SHA1(d88381f8709c91e2adba08f378e29bd0d19ee5ae), ROM_SKIP(1) | ROM_BIOS(0))
ROM_SYSTEM_BIOS(1, "2fd", "2 FD ROM")
ROMX_LOAD( "u01277f3.bin", 0x00000, 0x1000, CRC(428ff135) SHA1(ec11f0e43455570c40f5dc4b84f8420da5939368), ROM_SKIP(1) | ROM_BIOS(1))
ROMX_LOAD( "u01277g3.bin", 0x00001, 0x1000, CRC(3295691c) SHA1(7d7ade62117d11656b8dd86cf0703127616d55bc), ROM_SKIP(1) | ROM_BIOS(1))
+
+ ROM_REGION(0x400, "kbdmcu", 0)
+ ROM_LOAD( "m1.bin", 0x000, 0x400, NO_DUMP )
ROM_END
COMP( 198?, olypeopl, 0, 0, olypeopl, 0, peoplepc_state, empty_init, "Olympia", "People PC", MACHINE_NOT_WORKING|MACHINE_NO_SOUND)
diff --git a/src/mame/drivers/qvt70.cpp b/src/mame/drivers/qvt70.cpp
index 7b18d774e6a..44a1e0bb9e9 100644
--- a/src/mame/drivers/qvt70.cpp
+++ b/src/mame/drivers/qvt70.cpp
@@ -2,9 +2,9 @@
// copyright-holders: Dirk Best
/****************************************************************************
- Qume QVT-70 terminal
+ Qume QVT-70/QVT-82 terminal
- Hardware:
+ QVT-70:
- Z80 (Z8040008VSC)
- Z80 DART (Z0847006PSC)
- QUME 303489-01 QFP144
@@ -22,6 +22,16 @@
- 64 background/foreground colors
- 80/132 columns
+ QVT-82:
+ - Z80 (Z0840008PSC)
+ - Z80 DART (Z0847006PSC)
+ - QUME 303489-01 QFP144
+ - ROM 64k * 2
+ - RAM 8k UM6264AK-10L (above Z80) + 8k UM6264K-70L * 3 (below Z80)
+ - DS1231
+ - 54.2857MHz XTAL
+ - Battery
+
****************************************************************************/
#include "emu.h"
@@ -331,12 +341,13 @@ void qvt70_state::unk_60_w(uint8_t data)
void qvt70_state::rombank_w(uint8_t data)
{
-// logerror("rombank_w: %02x\n", data);
+ if (data & ~0x19)
+ logerror("rombank_w: %02x\n", data);
- // 765----- unknown
- // ---43--- bankswitching
- // -----21- unknown
- // -------0 bankswitching
+ // 765----- unknown
+ // ---43--- bankswitching
+ // -----21- unknown
+ // -------0 bankswitching
switch (data & 0x19)
{
@@ -407,4 +418,11 @@ ROM_START( qvt70 )
ROM_LOAD( "251513-04_revj.u12", 0x20000, 0x10000, CRC(3960bbd5) SHA1(9db306cef09be21ff43c081ebe11e9b46f617861) ) // 251513-04 C/S:18D0 95' REV.J (checksum matches)
ROM_END
+ROM_START( qvt82 )
+ ROM_REGION(0x30000, "maincpu", 0)
+ ROM_LOAD( "304229-02d_revd.u6", 0x00000, 0x10000, CRC(597431df) SHA1(10c4669b759dd7cfd6746e54dc12807197cf841a) ) // 304229-02D QVT-82 REV. D U6 (BF7F) (checksum matches)
+ ROM_LOAD( "304229-01d_revd.u5", 0x20000, 0x10000, CRC(9ebd09b6) SHA1(ef9f002016d05b770e7b66d15f05fc286bd022d9) ) // 304229-01D QVT-82 REV. D U5 (462B) (checksum matches)
+ROM_END
+
COMP( 1992, qvt70, 0, 0, qvt70, qvt70, qvt70_state, empty_init, "Qume", "QVT-70", MACHINE_NOT_WORKING | MACHINE_NO_SOUND )
+COMP( 1993, qvt82, 0, 0, qvt70, qvt70, qvt70_state, empty_init, "Qume", "QVT-82", MACHINE_NOT_WORKING | MACHINE_NO_SOUND )
diff --git a/src/mame/drivers/raiden_ms.cpp b/src/mame/drivers/raiden_ms.cpp
index a5a6f892384..fb22e1baac8 100644
--- a/src/mame/drivers/raiden_ms.cpp
+++ b/src/mame/drivers/raiden_ms.cpp
@@ -9,18 +9,193 @@
For this game the Modular System cage contains 8 main boards and 1 sub board.
- Unmarked red board - 2 V30s, unpopulated M68000 socket + 6 ROMs + RAMs.
- MOD-6/1 - RAMs, 20 MHz XTAL and unpopulated M68000 socket.
+ 8086/1 red board - 2 V30s, M68000 socket for connecting to board 6/1 + 6 ROMs + RAMs.
+ MOD-6/1 - RAMs, 20 MHz XTAL and M68000 socket used for connecting to board 8086/1.
MOD 21/1 - 24 MHz XTAL.
MOD 1/5 - Sound board (Z80, 2xYM2203C). 2 8-dips banks + small sub board with OKI M5205.
MOD 51/3 - Sprite board, has logic + 4 sprite ROMs.
- MOD 4/3 - Tilemap board, has logic + 4 tilemap ROMs, long thin sub-board (CAR-0484/1 SOLD) with no chips, just routing along one edge.
- MOD 4/3 - Tilemap board, has logic + 4 tilemap ROMs, long thin sub-board (CAR-0484/1 SOLD) with no chips, just routing along one edge.
- MOD 4/3 - Tilemap board, has logic + 4 tilemap ROMs, long thin sub-board (CAR-0484/1 SOLD) with no chips, just routing along one edge.
+ MOD 4/3 - Tilemap board, has logic + 4 tilemap ROMs, long thin sub-board (CAR-0484/1) for terminating the connector (it's not used).
+ MOD 4/3 - Tilemap board, has logic + 4 tilemap ROMs, long thin sub-board (CAR-0484/1) for terminating the connector (it's not used).
+ MOD 4/3 - Tilemap board, has logic + 4 tilemap ROMs, long thin sub-board (CAR-0484/1) for terminating the connector (it's not used).
PCBs pictures and dip listing are available at: http://www.recreativas.org/modular-system-raiden-4315-gaelco-sa
-*/
+Board 6/1 Board 21/1
+ _____________________________________________ ______________________________________________
+ | _______________ __|_ | |
+ | | | | | | |
+ | | HM62256LP-12 | | | | ________ _______ ________ |
+ | |______________| | | | |_EMPTY_| |_EMPTY_| |_EMPTY_| |
+ | _______ ________________ ________ | | | |
+ | 74LS367AN | | T74LS138B1 | | | |
+ | | EMPTY | | | | |
+ | |_______________| | | | ________ _______ ________ |
+ | _______ ________________ _______ | | | |74F74N_| 74LS393PC 74LS393PC |
+ | 74LS367AN | | 74LS245N | | | |
+ | | EMPTY | | | | |
+ | |_______________| | | | |
+ | ________________ | | | ________ ________ ________ |
+ | _______ | | _______ | | | 74LS7273N |82S129_| |82S129_| |
+ | 74LS138N | EMPTY | 74LS374N | | | P0202 211 |
+ | |_______________| | | | |
+ | _______________ | | | |
+ | _______ | | _______ |___| | ________ _______ ________ |
+ | GAL16V8 | HM62256LP-12 | 74LS245N | | 74LS74AN XTAL SN74LS367AN |
+ | 686 |______________| | | 24.000 MHz |
+ | ________________ | | |
+ | _______ | | _______ | | ________ _______ ________ |
+ | 74LS174N | EMPTY | 74LS374N | __ |_ 74LS32PC 74LS368AB UM2148-1 |
+ | |_______________| | | | |
+ | ________________ | | | |
+ | | | | | | ________ _______ ________ |
+ | _______ | EMPTY | _______ | | | 74LS157N 74F112PC UM2148-1 |
+ | GAL16V8 |_______________| T74LS138B1 | | | |
+ | 645B* ________________ | | | |
+ | | | | | | ________ _______ ________ |
+ | | EMPTY | | | | 74LS148N 74LS368AB UM2148-1 |
+ | |_______________| _______ | | | |
+ | __________________________ 74LS32B1 | | | |
+ | | 68000 SOCKET BUT | | | | ________ _______ ________ ________ |
+ | | CONNECTED TO CPU PCB | _______ | | | 74LS298N 74LS298N 74LS298N 74LS174PC |
+ | |_________________________| 74LS20N | | | |
+ | | | | |
+ | _______ ______ _______ _______ | | | ________ _______ ________ ________ |
+ | |74S74N XTAL 74LS368AB1 74LS132N | | | 74LS245N 74LS245N |74LS08B 74LS174PC |
+ | 20.000MHz | |___| |
+ |____________________________________________| |_____________________________________________|
+
+ Sound Board (1/5)
+ ______________________________________________
+ | |
+ | ________ ________ ________ |
+ | 74LS107N |74LS32N| |_EMPTY_| |
+ | |
+ | ________ __________________ |
+ | 74LS368AB1 | | |
+ | | EMPTY | |
+ | ________ |_________________| |
+ | 74LS74AN __________________ |
+ | | Z8400BB1 | |
+ | ________ | Z80 B CPU | ________ |
+ | 74HCT157E |_________________| |LM324AN| |
+ | ________________ |
+ | ________ | | __ |
+ 110->N82S123N | RD 01 | |D||
+ | ________ |_______________| |I||
+ | 74HCT157E ________________ |P|| SOUND SUB
+ | __________ | | _____ _____ |S|| __________________
+ | | || LH5164D-10L |Y3014B Y3014B|-|| | ______ |
+ | | SOUND ||_______________| |D|| | LM358N ___ |
+ | | SUB | |I|| | .......... | | |
+ | | | |P|| | |OKI |
+ __|_|_________|__________________ |S|| | .......... |M5205
+ | | | YAMAHA | |_|| | ________ |__| |
+ | | | YM2203C | | | 74LS377P |
+ | | |_________________| | |_________________|
+ | | |
+ | | _______ ________ |
+ | | |EMPTY_| 74LS74AN |
+ | | |
+ | | |
+ | | __________________ _____ |
+ | | _______ | YAMAHA | TDA2003 |
+ | | |EMPTY| | YM2203C | |
+ | | |_________________| |
+ | | |
+ | | _________ _________ |
+ | | 74LS244B1 74LS244B1 |
+ | | |
+ |___| __________________________ |
+ |__________| |_|_|_|_|_|_|_|_|_|_|_| |________|
+ PRE-JAMMA
+
+ CPU PCB (8086/1) Board 51/3
+ ______________________________________________ _____________________________________________
+ | ____________ ____________ | | |
+ ||RD601B | ________ |NEC D70116C-10 | __________ ________ ________ ________ |
+ ||____________|SN74LS373N |_V30________|| | |RD504 | 74LS299N 74LS169BN CY7C149| |
+ | ____________ ____________ | | |_________| ________ ________ ________ |
+ ||RD601B | ________ |NEC D70116C-10 | 74LS169BN 74LS169BN CY7C149| |
+ ||____________|SN74LS373N |_V30________|| | |
+ | ___________ ___________ | | __________ ________ ________ ________ |
+ | |RD603 | ________ |RD605B || | |RD503 | 74LS158A 74LS169BN 82S129N <- 502
+ | |___________|SN74LS373N |___________|| | |_________| ________ ________ ________ |
+ | ___________ ________ ___________ | | 74LS299N 74LS169BN 74LS244N |
+ | |RD604 |SN74LS373N |RD606B || | |
+ | |___________| |___________|| | __________ ________ ________ ________ |
+ | ___________ ________ ________ __________ | | |RD502 | 74LS299N 74LS169BN 74LS244N |
+ | |SRM20256LC |SN74LS373N 74LS00N |D4464-15L || | |_________| ________ ________ ________ |
+ | |___________| ________ ________ |__________|| | 74LS20B1 |CY7C149 74LS298B1 |
+ | ___________ SN74LS373N 74LS368AN __________ | | |
+ | |SRM20256LC | ________ ________ |D4464-15L || | __________ ________ ________ ________ |
+ | |___________| |74LS32N 74LS139N |__________|| | |RD501 | 74LS299N |CY7C149 74LS298B1 |
+ | | | |_________| |
+ | ________ ________ ________ ________ | | ________ ________ ________ ________ __ |
+ | 74LS245N 74LS157N 74LS157N 74LS245N | | 74LS273B1 |74LS00N 74LS86B1 74LS244N | ||
+ | ________ ________ ________ ________ | | | ||
+ | 74LS245N 74LS157N 74LS157N 74LS245N | _|_ ________ ________ ________ ________ |V||
+ | ______________________ ________ | | | |74LS08N 74F158APC 74LS74B1 74LS20B1 |O||
+ | | 68000 SOCKET BUT | GAL16V8 <- 645C | | |I||
+ | | CONNECTED TO PCB 6/1 | ________ | | | ________ ________ ________ ________ |D||
+ | |______________________| PALCE16V8 <- 645D 503-> GAL16V8 74LS393B1 74LS368AB1 74LS377N|E||
+ |______________________________________________| | | |D||
+ | | ________ ________ ________ ________ | ||
+ | | 74LS138N 74LS283N UM2148-2 |_EMPTY_| | ||
+ | | | ||
+ | | ________ ________ ________ ________ | ||
+ | | 74LS175B1 74LS283N UM2148-2 74LS273B1 | ||
+ | | | ||
+ | | ________ ________ ________ ________ |_||
+ | | 74LS298B1 74LS157N 74LS157N 74LS273B1 |
+ | | |
+ | | ________ ________ ________ ________ |
+ | | 74LS158P 74LS169BN 74LS169BN 74LS245B1 |
+ |__| |
+ |____________________________________________|
+
+ Board 4/3 (B) Board 4/3 (A) Board 4/3
+ _____________________________________________ _____________________________________________ _____________________________________________
+ | | | | | |
+ | ________ ________ ________ ________ | | ________ ________ ________ ________ | | ________ ________ ________ ________ |
+ | 74LS00PC |74S20N| 74LS244N 74LS163A __ | | 74LS00PC |74S20N| 74LS244N 74LS163A __ | | 74LS00PC |74S20N| 74LS244N 74LS163A __ |
+ | | || | | || | | ||
+ | | || | | || | | ||
+ | ________ ________ ________ ________ | || | ________ ________ ________ ________ | || | ________ ________ ________ ________ | ||
+ | PAL16R8A 74LS163A 74LS373PC 74LS163A | || | PAL16R8A 74LS163A 74LS373PC 74LS163A | || | PAL16R8A 74LS163A 74LS373PC 74LS163A | ||
+ | PC403 | || | 403 | || | P0403 | ||
+ | | || | | || | | ||
+ | ________ ________ ________ ________ | || | ________ ________ ________ ________ | || | ________ ________ ________ ________ | ||
+ | 74LS138PC 74LS283N 74LS273PC 74LS163A | || | 74LS138PC 74LS283N 74LS273PC 74LS163A | || | 74LS138B1 74LS283N 74LS273PC 74LS163A | ||
+ | | || | | || | | ||
+ | | || | | || | | ||
+ | ________ ________ ________ ________ | || | ________ ________ ________ ________ | || | ________ ________ ________ ________ | ||
+ | 74LS393N 74LS283N 74LS273N 74LS153PC | || | 74LS393N 74LS283N 74LS273N 74LS153 | || | 74LS393N 74LS283N 74LS273N 74LS153PC | ||
+ | | || | | || | | ||
+ | | || | | || | | ||
+ | ________ ________ ________ ________ | || | ________ ________ ________ ________ | || | ________ ________ ________ ________ | ||
+ | 74LS86PC 74LS299N |RD4B4 | 74LS153PC| || | 74LS86PC 74LS299N |RD4A4 | 74LS153 | || | 74LS86PC 74LS299 |RD401 | 74LS153N | ||
+ | |_______| | || | |_______| | || | |_______| | ||
+ | | || | | || | | ||
+ | ________ ________ ________ ________ | || | ________ ________ ________ ________ | || | ________ ________ ________ ________ | ||
+_|_ 74LS86PC 74LS299N |RD4B3 | 74LS153PC|V|| _|_ 74LS86PC 74LS299N |RD4A3 | 74LS153 |V|| _|_ 74LS86PC 74LS299 |RD402 | 74LS153N |V||
+| | |_______| |O|| | | |_______| |O|| | | |_______| |O||
+| | |I|| | | |I|| | | |I||
+| | ________ ________ ________ ________ |D|| | | ________ ________ ________ ________ |D|| | | ________ ________ ________ ________ |D||
+| | 74LS04 74LS299N |RD4B2 | 74LS153PC|E|| | | 74LS04 74LS299N |RD4A2 | 74LS153 |E|| | | 74LS04 74LS299 |RD403 | 74LS153N |E||
+| | |_______| |D|| | | |_______| |D|| | | |_______| |D||
+| | | || | | | || | | | ||
+| | ________ ________ ________ ________ | || | | ________ ________ ________ ________ | || | | ________ ________ ________ ________ | ||
+| | 74LS245P 74LS299N |RD4B1 | 74LS153PC| || | | 74LS245P 74LS299N |RD4A1 | 74LS153 | || | | 74LS245P 74LS299 |RD4A4 | 74LS153N | ||
+| | |_______| | || | | |_______| | || | | |_______| | ||
+| | | || | | | || | | | ||
+| | ________ ________ ________ ________ | || | | ________ ________ ________ ________ | || | | ________ ________ ________ ________ | ||
+| | 74LS32PC 74LS158P |D4364C | 74LS153PC| || | | 74LS32PC 74LS158P |HM32064| 74LS153 | || | | 74LS32B1 74LS158N |SRM2064| 74LS153N | ||
+| | |15L____| | || | | |5______| | || | | |C15____| | ||
+| | |_|| | | |_|| | | |_||
+|__| | |__| | |__| |
+ |____________________________________________| |____________________________________________| |____________________________________________|
+
+*/
#include "emu.h"
#include "cpu/nec/nec.h"
@@ -588,4 +763,4 @@ ROM_START( raidenm )
ROM_LOAD( "msraid_6-1-8086-1_645d_gal16v8.u27", 0x000, 0x117, NO_DUMP )
ROM_END
-GAME( 199?, raidenm, raiden, raidenm, raidenm, raiden_ms_state, init_raidenm, ROT270, "bootleg (Gaelco / Ervisa)", "Raiden (Modular System)", MACHINE_IS_SKELETON )
+GAME( 1990, raidenm, raiden, raidenm, raidenm, raiden_ms_state, init_raidenm, ROT270, "bootleg (Gaelco / Ervisa)", "Raiden (Modular System)", MACHINE_NOT_WORKING )
diff --git a/src/mame/drivers/s11.cpp b/src/mame/drivers/s11.cpp
index 1fc0cbd36cf..f32f37bc111 100644
--- a/src/mame/drivers/s11.cpp
+++ b/src/mame/drivers/s11.cpp
@@ -344,12 +344,16 @@ void s11_state::pia34_pb_w(uint8_t data)
{
if(m_bg)
m_bg->data_w(data);
+ else if (m_ps88)
+ m_ps88->data_w(data);
}
WRITE_LINE_MEMBER( s11_state::pia34_cb2_w )
{
if(m_bg)
m_bg->ctrl_w(state); // MCB2 through CPU interface
+ else if (m_ps88)
+ m_ps88->strobe_w(state);
}
void s11_state::bank_w(uint8_t data)
diff --git a/src/mame/drivers/s11b.cpp b/src/mame/drivers/s11b.cpp
index 77c51b0dfc1..975f982f8ec 100644
--- a/src/mame/drivers/s11b.cpp
+++ b/src/mame/drivers/s11b.cpp
@@ -19,7 +19,6 @@
the ram at 0x780-0x7ff, so it is possible that the protection being
active prevents the real machine from crashing)
- Black Knight 2000 LG-1 set reports U26 ROM FAILURE. Bad/hacked dump or original bug?
- - Jokerz has an entirely different "Pin Sound '88" stereo audio board (D-12338-567) which has to be emulated
- Taxi and Police Force both have issues with the display showing garbage overlaid by the alphanumerics.
Known keys necessary to get games to start (so the proper number of balls are detected):
@@ -32,12 +31,13 @@
- Cyclone: Nothing, game does not have switches to check for balls in the trough.
- Earthshaker: "D" "F" "W"
- Elvira and the Party Monsters: "D" "F" "U"
+ - Jokerz!: "D" "F" "H"
- Mousin' Around: "D" "F" "H"
- Police Force: "D" "F"
- Space Station: "D" "F" "End"
- Swords of Fury: "D" "F" "H"
- Taxi: "D" "F"
- - Transporter the Rescue: "D" "F" "H"
+ - Transporter: the Rescue: "D" "F" "H"
- Whirlwind: "D" "F" "H"
*/
@@ -250,7 +250,7 @@ void s11b_state::init_s11b_invert()
m_invert = true;
}
-void s11b_state::s11b(machine_config &config)
+void s11b_state::s11b_base(machine_config &config)
{
/* basic machine hardware */
M6808(config, m_maincpu, XTAL(4'000'000));
@@ -310,7 +310,7 @@ void s11b_state::s11b(machine_config &config)
PIA6821(config, m_pia34, 0);
m_pia34->writepa_handler().set(FUNC(s11b_state::pia34_pa_w));
m_pia34->writepb_handler().set(FUNC(s11_state::pia34_pb_w));
- m_pia34->ca2_handler().set(m_bg, FUNC(s11c_bg_device::resetq_w));
+
m_pia34->cb2_handler().set(FUNC(s11_state::pia34_cb2_w));
m_pia34->irqa_handler().set(m_piairq, FUNC(input_merger_device::in_w<11>));
m_pia34->irqb_handler().set(m_piairq, FUNC(input_merger_device::in_w<12>));
@@ -340,7 +340,12 @@ void s11b_state::s11b(machine_config &config)
m_pias->cb2_handler().set(m_hc55516, FUNC(hc55516_device::digit_w));
m_pias->irqa_handler().set(m_audioirq, FUNC(input_merger_device::in_w<0>));
m_pias->irqb_handler().set(m_audioirq, FUNC(input_merger_device::in_w<1>));
+}
+void s11b_state::s11b(machine_config &config)
+{
+ s11b_base(config);
+ m_pia34->ca2_handler().set(m_bg, FUNC(s11c_bg_device::resetq_w));
/* Add the background music card */
SPEAKER(config, "bgspk").front_center();
S11_BG(config, m_bg);
@@ -349,6 +354,19 @@ void s11b_state::s11b(machine_config &config)
m_bg->add_route(ALL_OUTPUTS, "bgspk", 1.0);
}
+void s11b_state::s11b_jokerz(machine_config &config)
+{
+ s11b_base(config);
+ m_pia34->ca2_handler().set(m_ps88, FUNC(pinsnd88_device::resetq_w));
+ /* Add the pin sound 88 music card */
+ SPEAKER(config, "cabinet").front_floor(); // the cabinet speaker is aimed down underneath the pinball table itself
+ SPEAKER(config, "backbox").front_center(); // the backbox speakers are roughly level with the user, but farther in front of them than the cabinet
+ PINSND88(config, m_ps88);
+ m_ps88->syncq_cb().set(m_pia34, FUNC(pia6821_device::ca1_w)); // the sync connection comes from sound connector pin 16 to MCA1, not the usual pin 12 to MCB1
+ m_ps88->add_route(0, "cabinet", 1.0);
+ m_ps88->add_route(1, "backbox", 1.0);
+}
+
/*-----------------------
/ Bad Cats 12/89
/-----------------------*/
@@ -1081,8 +1099,8 @@ ROM_START(jokrz_l6)
ROM_REGION(0x20000, "audiocpu", ROMREGION_ERASEFF)
ROM_LOAD("jokeru21.l1", 0x18000, 0x8000, CRC(9e2be4f6) SHA1(6e26b55935d0c8138176b54a11c1a9ab58366628))
ROM_LOAD("jokeru22.l1", 0x10000, 0x8000, CRC(2f67160c) SHA1(f1e179fde41f9bf8226069c24b0bd5152a13e518))
- ROM_REGION(0x80000, "bg:cpu", ROMREGION_ERASEFF)
- ROM_LOAD("jokeru5.l2", 0x00000, 0x10000, CRC(e9dc0095) SHA1(23a99555e50461ccc8e67de01796642c080294c2))
+ ROM_REGION(0x40000, "ps88:cpu", ROMREGION_ERASEFF)
+ ROM_LOAD("jokeru5.l2", 0x30000, 0x10000, CRC(e9dc0095) SHA1(23a99555e50461ccc8e67de01796642c080294c2))
ROM_RELOAD(0x20000,0x10000)
ROM_END
@@ -1093,9 +1111,9 @@ ROM_START(jokrz_l3)
ROM_REGION(0x20000, "audiocpu", ROMREGION_ERASEFF)
ROM_LOAD("jokeru21.l1", 0x18000, 0x8000, CRC(9e2be4f6) SHA1(6e26b55935d0c8138176b54a11c1a9ab58366628))
ROM_LOAD("jokeru22.l1", 0x10000, 0x8000, CRC(2f67160c) SHA1(f1e179fde41f9bf8226069c24b0bd5152a13e518))
- ROM_REGION(0x80000, "bg:cpu", ROMREGION_ERASEFF)
- ROM_LOAD("jokeru5.l2", 0x00000, 0x10000, CRC(e9dc0095) SHA1(23a99555e50461ccc8e67de01796642c080294c2))
- ROM_RELOAD(0x20000, 0x10000)
+ ROM_REGION(0x40000, "ps88:cpu", ROMREGION_ERASEFF)
+ ROM_LOAD("jokeru5.l2", 0x30000, 0x10000, CRC(e9dc0095) SHA1(23a99555e50461ccc8e67de01796642c080294c2))
+ ROM_RELOAD(0x20000,0x10000)
ROM_END
ROM_START(jokrz_g4)
@@ -1105,9 +1123,9 @@ ROM_START(jokrz_g4)
ROM_REGION(0x20000, "audiocpu", ROMREGION_ERASEFF)
ROM_LOAD("jokeru21.l1", 0x18000, 0x8000, CRC(9e2be4f6) SHA1(6e26b55935d0c8138176b54a11c1a9ab58366628))
ROM_LOAD("jokeru22.l1", 0x10000, 0x8000, CRC(2f67160c) SHA1(f1e179fde41f9bf8226069c24b0bd5152a13e518))
- ROM_REGION(0x80000, "bg:cpu", ROMREGION_ERASEFF)
- ROM_LOAD("jokeru5.l2", 0x00000, 0x10000, CRC(e9dc0095) SHA1(23a99555e50461ccc8e67de01796642c080294c2))
- ROM_RELOAD(0x20000, 0x10000)
+ ROM_REGION(0x40000, "ps88:cpu", ROMREGION_ERASEFF)
+ ROM_LOAD("jokeru5.l2", 0x30000, 0x10000, CRC(e9dc0095) SHA1(23a99555e50461ccc8e67de01796642c080294c2))
+ ROM_RELOAD(0x20000,0x10000)
ROM_END
/*-----------------------
@@ -1555,9 +1573,9 @@ GAME(1989, eatpm_4g, eatpm_l4, s11b, s11b, s11b_state, init_s11b_inve
GAME(1989, eatpm_4u, eatpm_l4, s11b, s11b, s11b_state, init_s11b_invert, ROT0, "Bally", "Elvira and the Party Monsters (LU-4)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1989, eatpm_f1, eatpm_l4, s11b, s11b, s11b_state, init_s11b_invert, ROT0, "Bally", "Elvira and the Party Monsters (LF-1) French", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1989, eatpm_p7, eatpm_l4, s11b, s11b, s11b_state, init_s11b_invert, ROT0, "Bally", "Elvira and the Party Monsters (PA-7)", MACHINE_IS_SKELETON_MECHANICAL)
-GAME(1989, jokrz_l6, 0, s11b, s11b, s11b_state, init_s11b_invert, ROT0, "Williams", "Jokerz! (L-6)", MACHINE_IS_SKELETON_MECHANICAL)
-GAME(1989, jokrz_l3, jokrz_l6, s11b, s11b, s11b_state, init_s11b_invert, ROT0, "Williams", "Jokerz! (L-3)", MACHINE_IS_SKELETON_MECHANICAL)
-GAME(1989, jokrz_g4, jokrz_l6, s11b, s11b, s11b_state, init_s11b_invert, ROT0, "Williams", "Jokerz! (G-4)", MACHINE_IS_SKELETON_MECHANICAL)
+GAME(1989, jokrz_l6, 0, s11b_jokerz, s11b, s11b_state, init_s11b_invert, ROT0, "Williams", "Jokerz! (L-6)", MACHINE_IS_SKELETON_MECHANICAL)
+GAME(1989, jokrz_l3, jokrz_l6, s11b_jokerz, s11b, s11b_state, init_s11b_invert, ROT0, "Williams", "Jokerz! (L-3)", MACHINE_IS_SKELETON_MECHANICAL)
+GAME(1989, jokrz_g4, jokrz_l6, s11b_jokerz, s11b, s11b_state, init_s11b_invert, ROT0, "Williams", "Jokerz! (G-4)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1989, mousn_l4, 0, s11b, s11b, s11b_state, init_s11b_invert, ROT0, "Bally", "Mousin' Around! (LA-4)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1989, mousn_l1, mousn_l4, s11b, s11b, s11b_state, init_s11b_invert, ROT0, "Bally", "Mousin' Around! (LA-1)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1989, mousn_lu, mousn_l4, s11b, s11b, s11b_state, init_s11b_invert, ROT0, "Bally", "Mousin' Around! (LU-1)", MACHINE_IS_SKELETON_MECHANICAL)
diff --git a/src/mame/drivers/segattl.cpp b/src/mame/drivers/segattl.cpp
index 9c90a8b8bbf..cce1b2f8fd6 100644
--- a/src/mame/drivers/segattl.cpp
+++ b/src/mame/drivers/segattl.cpp
@@ -19,7 +19,7 @@
Double Block
Duck Shoot
Erase
- Fonz 94789-P IC86.86 IC87.87 PR-09.49 PR-08.50
+ Fonz 94789-P IC86.86 IC87.87 PR-09.49 PR-08.50
Galaxy War
Goal Kick
Heavyweight Champ
@@ -33,7 +33,7 @@
Pong-Tron II
Pro Monaco GP
Pro Racer
- Road Race
+ Road Race 94540Y-P
Rock'n Bark
Secret Base
Secret War
diff --git a/src/mame/drivers/starfire.cpp b/src/mame/drivers/starfire.cpp
index 84ddd895144..54b2b7c3453 100644
--- a/src/mame/drivers/starfire.cpp
+++ b/src/mame/drivers/starfire.cpp
@@ -43,11 +43,8 @@
Notes:
-starfira has one less rom in total than starfire but everything passes as
- ok in the rom test so its probably just an earlier revision or something
-
-fireone currently lacks the "alert" sound effect due to missing netlist
-support for the 8038 function generator IC.
+starfira has one less ROM in total than starfire, but everything passes as
+ OK in the ROM test, so it's probably just an earlier revision.
***************************************************************************/
@@ -55,10 +52,8 @@ support for the 8038 function generator IC.
#include "includes/starfire.h"
#include "cpu/z80/z80.h"
-#include "sound/samples.h"
#include "speaker.h"
-
/*************************************
*
* Scratch RAM, mapped into video RAM
@@ -74,8 +69,9 @@ void starfire_base_state::scratch_w(offs_t offset, uint8_t data)
{
case 0: m_vidctrl = data; break;
case 1: m_vidctrl1 = data; break;
- case 2: sound_w(0, data); break;
- case 3: sound_w(1, data); break;
+ case 2:
+ case 3: sound_w(offset & 1, data); break;
+ case 7: music_w((offset >> 10) & 3, data); break;
default: break;
}
}
@@ -107,30 +103,15 @@ uint8_t starfire_base_state::scratch_r(offs_t offset)
void starfire_state::sound_w(offs_t offset, uint8_t data)
{
- // starfire sound samples (preliminary)
- uint8_t rise = data & ~m_prev_sound;
- m_prev_sound = data;
-
- // d0: rumble
- if (BIT(rise, 0)) m_samples->start(0, 0, true);
- if (BIT(~data, 0)) m_samples->stop(0);
-
- // d1: explosion
- // d2: tie weapon
- // d3: laser
- if (BIT(rise, 1)) m_samples->start(1, 1);
- if (BIT(rise, 2)) m_samples->start(2, 2);
- if (BIT(rise, 3)) m_samples->start(3, 3);
-
- // these are from the same generator (called "computer" in schematics)
- // d4: track
- // d5: lock
- // d6: scanner
- // d7: overheat
- if (BIT(rise, 7)) m_samples->start(4, 7);
- else if (BIT(rise, 6)) m_samples->start(4, 6);
- else if (BIT(rise, 5)) m_samples->start(4, 5);
- else if (BIT(rise, 4)) m_samples->start(4, 4);
+ m_sound_size->write(BIT(data, 0));
+ m_sound_explosion->write(BIT(data, 1));
+ m_sound_tie->write(BIT(data, 2));
+ m_sound_laser->write(BIT(data, 3));
+ m_sound_track->write(BIT(data, 4));
+ m_sound_lock->write(BIT(data, 5));
+ m_sound_scanner->write(BIT(data, 6));
+ m_sound_overheat->write(BIT(data, 7));
+ synchronize();
}
void fireone_state::sound_w(offs_t offset, uint8_t data)
@@ -141,6 +122,11 @@ void fireone_state::sound_w(offs_t offset, uint8_t data)
m_sound_left_partial_hit->write(BIT(data, 1));
m_sound_left_boom->write(BIT(data, 2));
m_player_select = BIT(~data, 3);
+ m_pit->write_gate0(BIT(data, 4));
+ m_pit->write_gate1(BIT(data, 5));
+ m_pit->write_gate2(BIT(data, 6));
+ m_sound_off_left->write(BIT(data, 7)); // HACK: There's only one SOUND_OFF signal, but it splits into the left and right mixer stages.
+ m_sound_off_right->write(BIT(data, 7)); // Having the left and right halves split provides a better opportunity for frontier isolation.
}
else
{
@@ -149,33 +135,60 @@ void fireone_state::sound_w(offs_t offset, uint8_t data)
m_sound_right_boom->write(BIT(data, 2));
m_sound_torpedo_collision->write(BIT(data, 3));
m_sound_submarine_engine->write(BIT(data, 4));
+ m_sound_alert->write(BIT(data, 5));
m_sound_sonar_sync->write(BIT(data, 6));
m_sound_sonar_enable->write(BIT(~data, 7));
}
}
+void fireone_state::music_w(offs_t offset, uint8_t data)
+{
+ m_pit->write(offset, data);
+}
+
+WRITE_LINE_MEMBER(fireone_state::music_a_out_cb)
+{
+ m_music_a->write(state);
+}
+
+WRITE_LINE_MEMBER(fireone_state::music_b_out_cb)
+{
+ m_music_b->write(state);
+}
+
+WRITE_LINE_MEMBER(fireone_state::music_c_out_cb)
+{
+ m_music_c->write(state);
+}
uint8_t starfire_state::input_r(offs_t offset)
{
switch (offset & 15)
{
case 0: return m_dsw->read();
- case 1:
- {
- // d3 and d4 come from the audio circuit, how does it work exactly?
- // tie_on sounds ok, but laser_on sounds buggy
- const uint8_t tie_on = m_samples->playing(2) ? 0x00 : 0x08;
- const uint8_t laser_on = m_samples->playing(3) ? 0x00 : 0x10;
- const uint8_t input = m_system->read() & 0xe7;
- return input | tie_on | laser_on | 0x10; // disable laser_on for now
- }
- case 5: return m_stick2->read();
+ case 1: return (m_system->read() & 0xe7) | m_sound_tie_on | m_sound_laser_on;
+ case 5: return m_stickz->read();
case 6: return m_stickx->read();
case 7: return m_sticky->read();
default: return 0xff;
}
}
+NETDEV_ANALOG_CALLBACK_MEMBER(starfire_state::tieon1_cb)
+{
+ m_sound_tie_on = (data > 2.5) ? 0x00 : 0x08;
+}
+
+NETDEV_ANALOG_CALLBACK_MEMBER(starfire_state::laseron1_cb)
+{
+ m_sound_laser_on = (data > 2.5) ? 0x00 : 0x10;
+}
+
+NETDEV_ANALOG_CALLBACK_MEMBER(starfire_state::sound_out_cb)
+{
+ m_dac->write(std::round(8192.0 * data));
+}
+
uint8_t fireone_state::input_r(offs_t offset)
{
static const uint8_t s_paddle_map[64] =
@@ -275,6 +288,27 @@ static INPUT_PORTS_START( starfire )
PORT_CONFNAME( 0x01, 0x01, "Jumper J6/4G: Enable NMI" )
PORT_CONFSETTING( 0x00, DEF_STR( No ) )
PORT_CONFSETTING( 0x01, DEF_STR( Yes ) )
+
+ PORT_START("POT_TRACK")
+ PORT_ADJUSTER( 50, "Tracking Volume" ) NETLIST_ANALOG_PORT_CHANGED("sound_nl", "trackvol")
+
+ PORT_START("POT_LASER")
+ PORT_ADJUSTER( 50, "Laser Volume" ) NETLIST_ANALOG_PORT_CHANGED("sound_nl", "laservol")
+
+ PORT_START("POT_TIE")
+ PORT_ADJUSTER( 50, "Enemy Shot Volume" ) NETLIST_ANALOG_PORT_CHANGED("sound_nl", "enemyvol")
+
+ PORT_START("POT_SIZE")
+ PORT_ADJUSTER( 50, "'Size' Volume" ) NETLIST_ANALOG_PORT_CHANGED("sound_nl", "sizevol")
+
+ PORT_START("POT_EXPLO")
+ PORT_ADJUSTER( 50, "Explosion Volume" ) NETLIST_ANALOG_PORT_CHANGED("sound_nl", "explovol")
+
+ PORT_START("POT_LOH")
+ PORT_ADJUSTER( 50, "Lock/Scan/Overheat Volume" ) NETLIST_ANALOG_PORT_CHANGED("sound_nl", "lohvol")
+
+ PORT_START("POT_MAIN")
+ PORT_ADJUSTER( 50, "Main Volume" ) NETLIST_ANALOG_PORT_CHANGED("sound_nl", "mainvol")
INPUT_PORTS_END
@@ -337,19 +371,23 @@ INPUT_PORTS_END
void starfire_state::machine_start()
{
- /* register for state saving */
- save_item(NAME(m_prev_sound));
+ save_item(NAME(m_sound_tie_on));
+ save_item(NAME(m_sound_laser_on));
}
void starfire_state::machine_reset()
{
- m_prev_sound = 0;
+ m_sound_tie_on = 0x08;
+ m_sound_laser_on = 0x10;
}
void fireone_state::machine_start()
{
- /* register for state saving */
save_item(NAME(m_player_select));
+
+ m_pit->set_clockin(0, STARFIRE_CPU_CLOCK.dvalue());
+ m_pit->set_clockin(1, STARFIRE_CPU_CLOCK.dvalue());
+ m_pit->set_clockin(2, STARFIRE_CPU_CLOCK.dvalue());
}
void fireone_state::machine_reset()
@@ -357,20 +395,6 @@ void fireone_state::machine_reset()
m_player_select = 0;
}
-static const char *const starfire_sample_names[] =
-{
- "*starfire",
- "size",
- "explosion",
- "tie",
- "laser",
- "track",
- "lock",
- "scanner",
- "overheat",
- nullptr
-};
-
INTERRUPT_GEN_MEMBER(starfire_state::vblank_int)
{
// starfire has a jumper for disabling NMI, used to do a complete RAM test
@@ -400,6 +424,11 @@ void fireone_state::fireone(machine_config &config)
base_config(config);
m_maincpu->set_vblank_int("screen", FUNC(fireone_state::vblank_int));
+ PIT8253(config, m_pit);
+ m_pit->out_handler<0>().set(FUNC(fireone_state::music_a_out_cb));
+ m_pit->out_handler<1>().set(FUNC(fireone_state::music_b_out_cb));
+ m_pit->out_handler<2>().set(FUNC(fireone_state::music_c_out_cb));
+
/* sound hardware */
SPEAKER(config, "lspeaker").front_left();
SPEAKER(config, "rspeaker").front_right();
@@ -412,7 +441,8 @@ void fireone_state::fireone(machine_config &config)
NETLIST_LOGIC_INPUT(config, "sound_nl:ltorp", "LTORP.IN", 0);
NETLIST_LOGIC_INPUT(config, "sound_nl:lshpht", "LSHPHT.IN", 0);
NETLIST_LOGIC_INPUT(config, "sound_nl:lboom", "LBOOM.IN", 0);
- NETLIST_LOGIC_INPUT(config, "sound_nl:sound_off", "SOUND_OFF.IN", 0);
+ NETLIST_LOGIC_INPUT(config, "sound_nl:lsound_off", "SOUND_OFF_L.IN", 0); // HACK: Split the SOUND OFF into left/right halves for better netlist isolation.
+ NETLIST_LOGIC_INPUT(config, "sound_nl:rsound_off", "SOUND_OFF_R.IN", 0);
NETLIST_LOGIC_INPUT(config, "sound_nl:rtorp", "RTORP.IN", 0);
NETLIST_LOGIC_INPUT(config, "sound_nl:rshpht", "RSHPHT.IN", 0);
NETLIST_LOGIC_INPUT(config, "sound_nl:rboom", "RBOOM.IN", 0);
@@ -421,6 +451,9 @@ void fireone_state::fireone(machine_config &config)
NETLIST_LOGIC_INPUT(config, "sound_nl:alert", "ALERT.IN", 0);
NETLIST_LOGIC_INPUT(config, "sound_nl:sonar_enable", "SONAR_ENABLE.POS", 0);
NETLIST_LOGIC_INPUT(config, "sound_nl:sonar_sync", "SONAR_SYNC.IN", 0);
+ NETLIST_LOGIC_INPUT(config, "sound_nl:music_a", "MUSIC_A.IN", 0);
+ NETLIST_LOGIC_INPUT(config, "sound_nl:music_b", "MUSIC_B.IN", 0);
+ NETLIST_LOGIC_INPUT(config, "sound_nl:music_c", "MUSIC_C.IN", 0);
NETLIST_ANALOG_INPUT(config, "sound_nl:volume_l", "R64.DIAL");
NETLIST_ANALOG_INPUT(config, "sound_nl:volume_r", "R65.DIAL");
@@ -436,10 +469,33 @@ void starfire_state::starfire(machine_config &config)
/* sound hardware */
SPEAKER(config, "mono").front_center();
- SAMPLES(config, m_samples);
- m_samples->set_channels(5);
- m_samples->set_samples_names(starfire_sample_names);
- m_samples->add_route(ALL_OUTPUTS, "mono", 1.0);
+ NETLIST_CPU(config, "sound_nl", netlist::config::DEFAULT_CLOCK()).set_source(NETLIST_NAME(starfire));
+
+ NETLIST_LOGIC_INPUT(config, "sound_nl:size", "SIZE.IN", 0);
+ NETLIST_LOGIC_INPUT(config, "sound_nl:sexplo", "SEXPLO.IN", 0);
+ NETLIST_LOGIC_INPUT(config, "sound_nl:stie", "STIE.IN", 0);
+ NETLIST_LOGIC_INPUT(config, "sound_nl:slaser", "SLASER.IN", 0);
+ NETLIST_LOGIC_INPUT(config, "sound_nl:track", "TRACK.IN", 0);
+ NETLIST_LOGIC_INPUT(config, "sound_nl:lock", "LOCK.IN", 0);
+ NETLIST_LOGIC_INPUT(config, "sound_nl:scanner", "SCANNER.IN", 0);
+ NETLIST_LOGIC_INPUT(config, "sound_nl:oheat", "OHEAT.IN", 0);
+
+ NETLIST_ANALOG_INPUT(config, "sound_nl:trackvol", "R16.DIAL");
+ NETLIST_ANALOG_INPUT(config, "sound_nl:laservol", "R18.DIAL");
+ NETLIST_ANALOG_INPUT(config, "sound_nl:enemyvol", "R17.DIAL");
+ NETLIST_ANALOG_INPUT(config, "sound_nl:sizevol", "R19.DIAL");
+ NETLIST_ANALOG_INPUT(config, "sound_nl:explovol", "R20.DIAL");
+ NETLIST_ANALOG_INPUT(config, "sound_nl:lohvol", "R15.DIAL");
+ NETLIST_ANALOG_INPUT(config, "sound_nl:mainvol", "R21.DIAL");
+
+ NETLIST_ANALOG_OUTPUT(config, "sound_nl:tieon1", 0).set_params("TIEON1", FUNC(starfire_state::tieon1_cb));
+ NETLIST_ANALOG_OUTPUT(config, "sound_nl:laseron1", 0).set_params("LASERON1", FUNC(starfire_state::laseron1_cb));
+ NETLIST_ANALOG_OUTPUT(config, "sound_nl:output", 0).set_params("OUTPUT", FUNC(starfire_state::sound_out_cb));
+
+ DAC_16BIT_R2R_TWOS_COMPLEMENT(config, m_dac, 0).add_route(ALL_OUTPUTS, "mono", 0.5); // Not actually a DAC, just here to receive output.
+ voltage_regulator_device &vref(VOLTAGE_REGULATOR(config, "vref"));
+ vref.add_route(0, "dac", 1.0, DAC_VREF_POS_INPUT);
+ vref.add_route(0, "dac", -1.0, DAC_VREF_NEG_INPUT);
}
@@ -535,7 +591,7 @@ ROM_END
*
*************************************/
-GAME( 1979, starfire, 0, starfire, starfire, starfire_state, empty_init, ROT0, "Exidy", "Star Fire (set 1)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
-GAME( 1979, starfirea,starfire, starfire, starfire, starfire_state, empty_init, ROT0, "Exidy", "Star Fire (set 2)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
-GAME( 1979, fireone, 0, fireone, fireone, fireone_state, empty_init, ROT0, "Exidy", "Fire One", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
-GAME( 1979, starfir2, 0, starfire, starfire, starfire_state, empty_init, ROT0, "Exidy", "Star Fire 2", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
+GAME( 1979, starfire, 0, starfire, starfire, starfire_state, empty_init, ROT0, "Exidy", "Star Fire (set 1)", MACHINE_SUPPORTS_SAVE )
+GAME( 1979, starfirea,starfire, starfire, starfire, starfire_state, empty_init, ROT0, "Exidy", "Star Fire (set 2)", MACHINE_SUPPORTS_SAVE )
+GAME( 1979, fireone, 0, fireone, fireone, fireone_state, empty_init, ROT0, "Exidy", "Fire One", MACHINE_SUPPORTS_SAVE )
+GAME( 1979, starfir2, 0, starfire, starfire, starfire_state, empty_init, ROT0, "Exidy", "Star Fire 2", MACHINE_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/vtech1.cpp b/src/mame/drivers/vtech1.cpp
index d9e1f6226b1..bb69f550b54 100644
--- a/src/mame/drivers/vtech1.cpp
+++ b/src/mame/drivers/vtech1.cpp
@@ -40,7 +40,6 @@ Todo:
#include "sound/spkrdev.h"
#include "video/mc6847.h"
-#include "softlist.h"
#include "speaker.h"
#include "formats/imageutl.h"
@@ -64,15 +63,16 @@ Todo:
class vtech1_state : public driver_device
{
public:
- vtech1_state(const machine_config &mconfig, device_type type, const char *tag) :
- driver_device(mconfig, type, tag),
- m_videoram(*this, "videoram"),
- m_maincpu(*this, "maincpu"),
- m_mc6847(*this, "mc6847"),
- m_speaker(*this, "speaker"),
- m_cassette(*this, "cassette"),
- m_ioexp(*this, "io"),
- m_memexp(*this, "mem")
+ vtech1_state(const machine_config &mconfig, device_type type, const char *tag)
+ : driver_device(mconfig, type, tag)
+ , m_vram(*this, "videoram")
+ , m_maincpu(*this, "maincpu")
+ , m_crtc(*this, "crtc")
+ , m_speaker(*this, "speaker")
+ , m_cassette(*this, "cassette")
+ , m_io_keyboard(*this, "X%u", 0U)
+ , m_ioexp(*this, "io")
+ , m_memexp(*this, "mem")
{
}
@@ -85,11 +85,10 @@ public:
void init_vtech1h();
private:
- uint8_t vtech1_lightpen_r(offs_t offset);
- uint8_t vtech1_keyboard_r(offs_t offset);
- void vtech1_latch_w(uint8_t data);
-
- void vtech1_video_bank_w(uint8_t data);
+ uint8_t lightpen_r(offs_t offset);
+ uint8_t keyboard_r(offs_t offset);
+ void latch_w(uint8_t data);
+ void video_bank_w(uint8_t data);
uint8_t mc6847_videoram_r(offs_t offset);
DECLARE_SNAPSHOT_LOAD_MEMBER(snapshot_cb);
@@ -103,12 +102,12 @@ private:
static const uint8_t VZ_BASIC = 0xf0;
static const uint8_t VZ_MCODE = 0xf1;
- required_shared_ptr<uint8_t> m_videoram;
-
+ required_shared_ptr<uint8_t> m_vram;
required_device<cpu_device> m_maincpu;
- required_device<mc6847_base_device> m_mc6847;
+ required_device<mc6847_base_device> m_crtc;
required_device<speaker_sound_device> m_speaker;
required_device<cassette_image_device> m_cassette;
+ required_ioport_array<8> m_io_keyboard;
required_device<vtech_ioexp_slot_device> m_ioexp;
required_device<vtech_memexp_slot_device> m_memexp;
};
@@ -191,31 +190,25 @@ SNAPSHOT_LOAD_MEMBER(vtech1_state::snapshot_cb)
INPUTS
***************************************************************************/
-uint8_t vtech1_state::vtech1_lightpen_r(offs_t offset)
+uint8_t vtech1_state::lightpen_r(offs_t offset)
{
logerror("vtech1_lightpen_r(%d)\n", offset);
return 0xff;
}
-uint8_t vtech1_state::vtech1_keyboard_r(offs_t offset)
+uint8_t vtech1_state::keyboard_r(offs_t offset)
{
uint8_t result = 0x3f;
// bit 0 to 5, keyboard input
- if (!BIT(offset, 0)) result &= ioport("keyboard_0")->read();
- if (!BIT(offset, 1)) result &= ioport("keyboard_1")->read();
- if (!BIT(offset, 2)) result &= ioport("keyboard_2")->read();
- if (!BIT(offset, 3)) result &= ioport("keyboard_3")->read();
- if (!BIT(offset, 4)) result &= ioport("keyboard_4")->read();
- if (!BIT(offset, 5)) result &= ioport("keyboard_5")->read();
- if (!BIT(offset, 6)) result &= ioport("keyboard_6")->read();
- if (!BIT(offset, 7)) result &= ioport("keyboard_7")->read();
+ for (u8 i = 0; i < 8; i++)
+ if (!BIT(offset, i)) result &= m_io_keyboard[i]->read();
// bit 6, cassette input
result |= (m_cassette->input() > 0.04) ? 0 : 0x40;
// bit 7, field sync
- result |= m_mc6847->fs_r() << 7;
+ result |= m_crtc->fs_r() << 7;
return result;
}
@@ -225,24 +218,24 @@ uint8_t vtech1_state::vtech1_keyboard_r(offs_t offset)
I/O LATCH
***************************************************************************/
-void vtech1_state::vtech1_latch_w(uint8_t data)
+void vtech1_state::latch_w(uint8_t data)
{
if (LOG_VTECH1_LATCH)
logerror("vtech1_latch_w $%02X\n", data);
// bit 1, SHRG mod (if installed)
- if (m_videoram.bytes() == 0x2000)
+ if (m_vram.bytes() == 0x2000)
{
- m_mc6847->gm0_w(BIT(data, 1));
- m_mc6847->gm2_w(BIT(data, 1));
+ m_crtc->gm0_w(BIT(data, 1));
+ m_crtc->gm2_w(BIT(data, 1));
}
// bit 2, cassette out (actually bits 1 and 2 perform this function, so either can be used)
m_cassette->output( BIT(data, 2) ? 1.0 : -1.0);
// bit 3 and 4, vdc mode control lines
- m_mc6847->ag_w(BIT(data, 3));
- m_mc6847->css_w(BIT(data, 4));
+ m_crtc->ag_w(BIT(data, 3));
+ m_crtc->css_w(BIT(data, 4));
// bit 0 and 5, speaker
m_speaker->level_w((BIT(data, 5) << 1) | BIT(data, 0));
@@ -253,7 +246,7 @@ void vtech1_state::vtech1_latch_w(uint8_t data)
MEMORY BANKING
***************************************************************************/
-void vtech1_state::vtech1_video_bank_w(uint8_t data)
+void vtech1_state::video_bank_w(uint8_t data)
{
membank("bank4")->set_entry(data & 0x03);
}
@@ -267,10 +260,10 @@ uint8_t vtech1_state::mc6847_videoram_r(offs_t offset)
{
if (offset == ~0) return 0xff;
- m_mc6847->inv_w(BIT(m_videoram[offset], 6));
- m_mc6847->as_w(BIT(m_videoram[offset], 7));
+ m_crtc->inv_w(BIT(m_vram[offset], 6));
+ m_crtc->as_w(BIT(m_vram[offset], 7));
- return m_videoram[offset];
+ return m_vram[offset];
}
@@ -281,10 +274,10 @@ uint8_t vtech1_state::mc6847_videoram_r(offs_t offset)
void vtech1_state::init_vtech1h()
{
// the SHRG mod replaces the standard videoram chip with an 8k chip
- m_videoram.allocate(0x2000);
+ m_vram.allocate(0x2000);
m_maincpu->space(AS_PROGRAM).install_readwrite_bank(0x7000, 0x77ff, "bank4");
- membank("bank4")->configure_entries(0, 4, m_videoram, 0x800);
+ membank("bank4")->configure_entries(0, 4, m_vram, 0x800);
membank("bank4")->set_entry(0);
}
@@ -296,37 +289,34 @@ void vtech1_state::init_vtech1h()
void vtech1_state::laser110_mem(address_map &map)
{
map(0x0000, 0x3fff).rom(); // basic rom
- map(0x6800, 0x6fff).rw(FUNC(vtech1_state::vtech1_keyboard_r), FUNC(vtech1_state::vtech1_latch_w));
+ map(0x6800, 0x6fff).rw(FUNC(vtech1_state::keyboard_r), FUNC(vtech1_state::latch_w));
map(0x7000, 0x77ff).ram().share("videoram"); // 6847
map(0x7800, 0x7fff).ram(); // 2k user ram
}
void vtech1_state::laser210_mem(address_map &map)
{
- map(0x0000, 0x3fff).rom(); // basic rom
- map(0x6800, 0x6fff).rw(FUNC(vtech1_state::vtech1_keyboard_r), FUNC(vtech1_state::vtech1_latch_w));
- map(0x7000, 0x77ff).ram().share("videoram"); // 6847
+ laser110_mem(map);
map(0x7800, 0x8fff).ram(); // 6k user ram
}
void vtech1_state::laser310_mem(address_map &map)
{
- map(0x0000, 0x3fff).rom(); // basic rom
- map(0x6800, 0x6fff).rw(FUNC(vtech1_state::vtech1_keyboard_r), FUNC(vtech1_state::vtech1_latch_w));
- map(0x7000, 0x77ff).ram().share("videoram"); // 6847
+ laser110_mem(map);
map(0x7800, 0xb7ff).ram(); // 16k user ram
}
void vtech1_state::vtech1_io(address_map &map)
{
map.global_mask(0xff);
- map(0x40, 0x4f).r(FUNC(vtech1_state::vtech1_lightpen_r));
+ map(0x40, 0x4f).r(FUNC(vtech1_state::lightpen_r));
}
void vtech1_state::vtech1_shrg_io(address_map &map)
{
+ map.global_mask(0xff);
vtech1_io(map);
- map(0xd0, 0xdf).w(FUNC(vtech1_state::vtech1_video_bank_w));
+ map(0xd0, 0xdf).w(FUNC(vtech1_state::video_bank_w));
}
@@ -335,8 +325,7 @@ void vtech1_state::vtech1_shrg_io(address_map &map)
***************************************************************************/
static INPUT_PORTS_START(vtech1)
- PORT_START("keyboard_0")
- PORT_BIT(0xc0, IP_ACTIVE_LOW, IPT_UNUSED)
+ PORT_START("X0")
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("R RETURN LEFT$") PORT_CODE(KEYCODE_R) PORT_CHAR('R')
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Q FOR CHR$") PORT_CODE(KEYCODE_Q) PORT_CHAR('Q')
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("E NEXT LEN(") PORT_CODE(KEYCODE_E) PORT_CHAR('E')
@@ -344,8 +333,7 @@ static INPUT_PORTS_START(vtech1)
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("W TO VAL(") PORT_CODE(KEYCODE_W) PORT_CHAR('W')
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("T THEN MID$") PORT_CODE(KEYCODE_T) PORT_CHAR('T')
- PORT_START("keyboard_1")
- PORT_BIT(0xc0, IP_ACTIVE_LOW, IPT_UNUSED)
+ PORT_START("X1")
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("F GOSUB RND(") PORT_CODE(KEYCODE_F) PORT_CHAR('F')
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("A MODE( ASC(") PORT_CODE(KEYCODE_A) PORT_CHAR('A')
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("D DIM RESTORE") PORT_CODE(KEYCODE_D) PORT_CHAR('D')
@@ -353,8 +341,7 @@ static INPUT_PORTS_START(vtech1)
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("S STEP STR$(") PORT_CODE(KEYCODE_S) PORT_CHAR('S')
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("G GOTO STOP") PORT_CODE(KEYCODE_G) PORT_CHAR('G')
- PORT_START("keyboard_2")
- PORT_BIT(0xc0, IP_ACTIVE_LOW, IPT_UNUSED)
+ PORT_START("X2")
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("V LPRINT USR") PORT_CODE(KEYCODE_V) PORT_CHAR('V')
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Z PEEK( INP") PORT_CODE(KEYCODE_Z) PORT_CHAR('Z')
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("C CONT COPY") PORT_CODE(KEYCODE_C) PORT_CHAR('C')
@@ -362,8 +349,7 @@ static INPUT_PORTS_START(vtech1)
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("X POKE OUT") PORT_CODE(KEYCODE_X) PORT_CHAR('X')
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("B LLIST SOUND") PORT_CODE(KEYCODE_B) PORT_CHAR('B')
- PORT_START("keyboard_3")
- PORT_BIT(0xc0, IP_ACTIVE_LOW, IPT_UNUSED)
+ PORT_START("X3")
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("4 $ VERIFY ATN(") PORT_CODE(KEYCODE_4) PORT_CHAR('4') PORT_CHAR('$')
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("1 ! CSAVE SIN(") PORT_CODE(KEYCODE_1) PORT_CHAR('1') PORT_CHAR('!')
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("3 # CRUN TAN(") PORT_CODE(KEYCODE_3) PORT_CHAR('3') PORT_CHAR('#')
@@ -371,8 +357,7 @@ static INPUT_PORTS_START(vtech1)
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("2 \" CLOAD COS(") PORT_CODE(KEYCODE_2) PORT_CHAR('2') PORT_CHAR('\"')
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("5 % LIST LOG(") PORT_CODE(KEYCODE_5) PORT_CHAR('5') PORT_CHAR('%')
- PORT_START("keyboard_4")
- PORT_BIT(0xc0, IP_ACTIVE_LOW, IPT_UNUSED)
+ PORT_START("X4")
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("M \\ \xE2\x86\x90") PORT_CODE(KEYCODE_M) PORT_CHAR('M') PORT_CHAR('\\') PORT_CHAR(UCHAR_MAMEKEY(LEFT))
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("SPACE \xE2\x86\x93") PORT_CODE(KEYCODE_SPACE) PORT_CHAR(' ') PORT_CHAR('~') PORT_CHAR(UCHAR_MAMEKEY(DOWN))
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME(", < \xE2\x86\x92") PORT_CODE(KEYCODE_COMMA) PORT_CHAR(',') PORT_CHAR('<') PORT_CHAR(UCHAR_MAMEKEY(RIGHT))
@@ -380,8 +365,7 @@ static INPUT_PORTS_START(vtech1)
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME(". > \xE2\x86\x91") PORT_CODE(KEYCODE_STOP) PORT_CHAR('.') PORT_CHAR('>') PORT_CHAR(UCHAR_MAMEKEY(UP))
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("N ^ COLOR USING") PORT_CODE(KEYCODE_N) PORT_CHAR('N') PORT_CHAR('^')
- PORT_START("keyboard_5")
- PORT_BIT(0xc0, IP_ACTIVE_LOW, IPT_UNUSED)
+ PORT_START("X5")
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("7 ' END SGN(") PORT_CODE(KEYCODE_7) PORT_CHAR('7') PORT_CHAR('\'')
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("0 @ DATA INT(") PORT_CODE(KEYCODE_0) PORT_CHAR('0') PORT_CHAR('@')
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("8 ( NEW SQR(") PORT_CODE(KEYCODE_8) PORT_CHAR('8') PORT_CHAR('(')
@@ -389,8 +373,7 @@ static INPUT_PORTS_START(vtech1)
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("9 ) READ ABS(") PORT_CODE(KEYCODE_9) PORT_CHAR('9') PORT_CHAR(')')
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("6 & RUN EXP(") PORT_CODE(KEYCODE_6) PORT_CHAR('6') PORT_CHAR('&')
- PORT_START("keyboard_6")
- PORT_BIT(0xc0, IP_ACTIVE_LOW, IPT_UNUSED)
+ PORT_START("X6")
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("U IF INKEY$") PORT_CODE(KEYCODE_U) PORT_CHAR('U')
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("P ] PRINT NOT") PORT_CODE(KEYCODE_P) PORT_CHAR('P') PORT_CHAR(']')
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("I INPUT AND") PORT_CODE(KEYCODE_I) PORT_CHAR('I')
@@ -398,23 +381,13 @@ static INPUT_PORTS_START(vtech1)
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("O [ LET OR") PORT_CODE(KEYCODE_O) PORT_CHAR('O') PORT_CHAR('[')
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Y ELSE RIGHT$(") PORT_CODE(KEYCODE_Y) PORT_CHAR('Y')
- PORT_START("keyboard_7")
- PORT_BIT(0xc0, IP_ACTIVE_LOW, IPT_UNUSED)
+ PORT_START("X7")
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("J REM RESET") PORT_CODE(KEYCODE_J) PORT_CHAR('J')
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("; + [Rubout]") PORT_CODE(KEYCODE_COLON) PORT_CHAR(';') PORT_CHAR('+') PORT_CHAR(UCHAR_MAMEKEY(DEL))
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("K / TAB( POINT") PORT_CODE(KEYCODE_K) PORT_CHAR('K') PORT_CHAR('/')
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME(": * [Inverse]") PORT_CODE(KEYCODE_QUOTE) PORT_CHAR(':') PORT_CHAR('*') PORT_CHAR(UCHAR_MAMEKEY(HOME))
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("L ? [Insert]") PORT_CODE(KEYCODE_L) PORT_CHAR('L') PORT_CHAR('?') PORT_CHAR(UCHAR_MAMEKEY(INSERT))
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("H CLS SET") PORT_CODE(KEYCODE_H) PORT_CHAR('H')
-
- /* Enhanced options not available on real hardware */
- PORT_START("CONFIG")
- PORT_CONFNAME( 0x01, 0x01, "Autorun on Quickload")
- PORT_CONFSETTING( 0x00, DEF_STR(No))
- PORT_CONFSETTING( 0x01, DEF_STR(Yes))
-// PORT_CONFNAME( 0x08, 0x08, "Cassette Speaker")
-// PORT_CONFSETTING( 0x08, DEF_STR(On))
-// PORT_CONFSETTING( 0x00, DEF_STR(Off))
INPUT_PORTS_END
@@ -432,12 +405,12 @@ void vtech1_state::laser110(machine_config &config)
m_maincpu->set_addrmap(AS_IO, &vtech1_state::vtech1_io);
// video hardware
- MC6847_PAL(config, m_mc6847, XTAL(4'433'619));
- m_mc6847->set_screen("screen");
- m_mc6847->fsync_wr_callback().set_inputline(m_maincpu, 0).invert();
- m_mc6847->input_callback().set(FUNC(vtech1_state::mc6847_videoram_r));
- m_mc6847->set_black_and_white(true);
- m_mc6847->set_get_fixed_mode(mc6847_pal_device::MODE_GM1);
+ MC6847_PAL(config, m_crtc, XTAL(4'433'619));
+ m_crtc->set_screen("screen");
+ m_crtc->fsync_wr_callback().set_inputline(m_maincpu, 0).invert();
+ m_crtc->input_callback().set(FUNC(vtech1_state::mc6847_videoram_r));
+ m_crtc->set_black_and_white(true);
+ m_crtc->set_get_fixed_mode(mc6847_pal_device::MODE_GM1);
// GM2 = GND, GM0 = GND, INTEXT = GND
// other lines not connected
@@ -475,11 +448,11 @@ void vtech1_state::laser110(machine_config &config)
void vtech1_state::laser200(machine_config &config)
{
laser110(config);
- MC6847_PAL(config.replace(), m_mc6847, XTAL(4'433'619));
- m_mc6847->set_screen("screen");
- m_mc6847->fsync_wr_callback().set_inputline(m_maincpu, 0).invert();
- m_mc6847->input_callback().set(FUNC(vtech1_state::mc6847_videoram_r));
- m_mc6847->set_get_fixed_mode(mc6847_pal_device::MODE_GM1);
+ MC6847_PAL(config.replace(), m_crtc, XTAL(4'433'619));
+ m_crtc->set_screen("screen");
+ m_crtc->fsync_wr_callback().set_inputline(m_maincpu, 0).invert();
+ m_crtc->input_callback().set(FUNC(vtech1_state::mc6847_videoram_r));
+ m_crtc->set_get_fixed_mode(mc6847_pal_device::MODE_GM1);
// GM2 = GND, GM0 = GND, INTEXT = GND
// other lines not connected
}
@@ -503,11 +476,11 @@ void vtech1_state::laser310h(machine_config &config)
laser310(config);
m_maincpu->set_addrmap(AS_IO, &vtech1_state::vtech1_shrg_io);
- MC6847_PAL(config.replace(), m_mc6847, XTAL(4'433'619));
- m_mc6847->set_screen("screen");
- m_mc6847->fsync_wr_callback().set_inputline(m_maincpu, 0).invert();
- m_mc6847->input_callback().set(FUNC(vtech1_state::mc6847_videoram_r));
- m_mc6847->set_get_fixed_mode(mc6847_pal_device::MODE_GM1);
+ MC6847_PAL(config.replace(), m_crtc, XTAL(4'433'619));
+ m_crtc->set_screen("screen");
+ m_crtc->fsync_wr_callback().set_inputline(m_maincpu, 0).invert();
+ m_crtc->input_callback().set(FUNC(vtech1_state::mc6847_videoram_r));
+ m_crtc->set_get_fixed_mode(mc6847_pal_device::MODE_GM1);
// INTEXT = GND
// other lines not connected
}
@@ -569,13 +542,13 @@ ROM_END
***************************************************************************/
// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS
-COMP( 1983, laser110, 0, 0, laser110, vtech1, vtech1_state, empty_init, "Video Technology", "Laser 110", 0 )
-COMP( 1983, laser200, 0, 0, laser200, vtech1, vtech1_state, empty_init, "Video Technology", "Laser 200", 0 )
-COMP( 1983, vz200de, laser200, 0, laser200, vtech1, vtech1_state, empty_init, "Video Technology", "VZ-200 (Germany & Netherlands)", MACHINE_NOT_WORKING )
-COMP( 1983, fellow, laser200, 0, laser200, vtech1, vtech1_state, empty_init, "Salora", "Fellow (Finland)", 0 )
-COMP( 1983, tx8000, laser200, 0, laser200, vtech1, vtech1_state, empty_init, "Texet", "TX-8000 (UK)", 0 )
-COMP( 1984, laser210, 0, 0, laser210, vtech1, vtech1_state, empty_init, "Video Technology", "Laser 210", 0 )
-COMP( 1984, vz200, laser210, 0, laser210, vtech1, vtech1_state, empty_init, "Dick Smith Electronics", "VZ-200 (Oceania)", 0 )
-COMP( 1984, laser310, 0, 0, laser310, vtech1, vtech1_state, empty_init, "Video Technology", "Laser 310", 0 )
-COMP( 1984, vz300, laser310, 0, laser310, vtech1, vtech1_state, empty_init, "Dick Smith Electronics", "VZ-300 (Oceania)", 0 )
-COMP( 1984, laser310h, laser310, 0, laser310h, vtech1, vtech1_state, init_vtech1h, "Video Technology", "Laser 310 (SHRG)", MACHINE_UNOFFICIAL )
+COMP( 1983, laser110, 0, 0, laser110, vtech1, vtech1_state, empty_init, "Video Technology", "Laser 110", MACHINE_SUPPORTS_SAVE )
+COMP( 1983, laser200, 0, 0, laser200, vtech1, vtech1_state, empty_init, "Video Technology", "Laser 200", MACHINE_SUPPORTS_SAVE )
+COMP( 1983, vz200de, laser200, 0, laser200, vtech1, vtech1_state, empty_init, "Video Technology", "VZ-200 (Germany & Netherlands)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE )
+COMP( 1983, fellow, laser200, 0, laser200, vtech1, vtech1_state, empty_init, "Salora", "Fellow (Finland)", MACHINE_SUPPORTS_SAVE )
+COMP( 1983, tx8000, laser200, 0, laser200, vtech1, vtech1_state, empty_init, "Texet", "TX-8000 (UK)", MACHINE_SUPPORTS_SAVE )
+COMP( 1984, laser210, 0, 0, laser210, vtech1, vtech1_state, empty_init, "Video Technology", "Laser 210", MACHINE_SUPPORTS_SAVE )
+COMP( 1984, vz200, laser210, 0, laser210, vtech1, vtech1_state, empty_init, "Dick Smith Electronics", "VZ-200 (Oceania)", MACHINE_SUPPORTS_SAVE )
+COMP( 1984, laser310, 0, 0, laser310, vtech1, vtech1_state, empty_init, "Video Technology", "Laser 310", MACHINE_SUPPORTS_SAVE )
+COMP( 1984, vz300, laser310, 0, laser310, vtech1, vtech1_state, empty_init, "Dick Smith Electronics", "VZ-300 (Oceania)", MACHINE_SUPPORTS_SAVE )
+COMP( 1984, laser310h, laser310, 0, laser310h, vtech1, vtech1_state, init_vtech1h, "Video Technology", "Laser 310 (SHRG)", MACHINE_UNOFFICIAL | MACHINE_SUPPORTS_SAVE )
diff --git a/src/mame/includes/mikro80.h b/src/mame/includes/mikro80.h
index bb1dbd15e8e..9c425ac96ee 100644
--- a/src/mame/includes/mikro80.h
+++ b/src/mame/includes/mikro80.h
@@ -18,11 +18,6 @@
class mikro80_state : public driver_device
{
public:
- enum
- {
- TIMER_RESET
- };
-
mikro80_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag)
, m_aram(*this, "attrram")
@@ -50,6 +45,7 @@ private:
void sound_w(u8 data);
u8 portb_r();
u8 portc_r();
+ u8 kristall2_portc_r();
void porta_w(u8 data);
void portc_w(u8 data);
void tape_w(u8 data);
diff --git a/src/mame/includes/s11.h b/src/mame/includes/s11.h
index e3cb15118ca..1bf690c6636 100644
--- a/src/mame/includes/s11.h
+++ b/src/mame/includes/s11.h
@@ -11,6 +11,7 @@
#include "cpu/m6800/m6800.h"
#include "audio/s11c_bg.h"
+#include "audio/pinsnd88.h"
#include "machine/6821pia.h"
#include "machine/genpin.h"
#include "machine/input_merger.h"
@@ -52,6 +53,7 @@ public:
, m_pia30(*this, "pia30")
, m_pia34(*this, "pia34")
, m_bg(*this, "bg")
+ , m_ps88(*this, "ps88")
, m_digits(*this, "digit%u", 0U)
, m_swarray(*this, "SW.%u", 0U)
{ }
@@ -116,6 +118,7 @@ protected:
required_device<pia6821_device> m_pia30;
required_device<pia6821_device> m_pia34;
optional_device<s11c_bg_device> m_bg;
+ optional_device<pinsnd88_device> m_ps88;
output_finder<63> m_digits;
required_ioport_array<8> m_swarray;
diff --git a/src/mame/includes/s11b.h b/src/mame/includes/s11b.h
index 9d41388521d..efa59f7c93c 100644
--- a/src/mame/includes/s11b.h
+++ b/src/mame/includes/s11b.h
@@ -18,7 +18,9 @@ public:
: s11a_state(mconfig, type, tag)
{ }
+ void s11b_base(machine_config &config);
void s11b(machine_config &config);
+ void s11b_jokerz(machine_config &config);
void init_s11b();
void init_s11b_invert();
diff --git a/src/mame/includes/starfire.h b/src/mame/includes/starfire.h
index 6c410d00571..a0e9e5df161 100644
--- a/src/mame/includes/starfire.h
+++ b/src/mame/includes/starfire.h
@@ -11,9 +11,12 @@
#pragma once
#include "machine/netlist.h"
+#include "machine/pit8253.h"
#include "netlist/nl_setup.h"
#include "audio/nl_fireone.h"
-#include "sound/samples.h"
+#include "audio/nl_starfire.h"
+#include "sound/dac.h"
+#include "sound/volt_reg.h"
#include "screen.h"
@@ -65,6 +68,7 @@ protected:
virtual uint8_t input_r(offs_t offset) = 0;
virtual void sound_w(offs_t offset, uint8_t data) = 0;
+ virtual void music_w(offs_t offset, uint8_t data) { };
void scratch_w(offs_t offset, uint8_t data);
uint8_t scratch_r(offs_t offset);
@@ -83,11 +87,19 @@ class starfire_state : public starfire_base_state
public:
starfire_state(const machine_config &mconfig, device_type type, const char *tag)
: starfire_base_state(mconfig, type, tag)
- , m_samples(*this, "samples")
+ , m_dac(*this, "dac") // just to have a sound device
, m_nmi(*this, "NMI")
- , m_stick2(*this, "STICK2")
+ , m_stickz(*this, "STICKZ")
, m_stickx(*this, "STICKX")
, m_sticky(*this, "STICKY")
+ , m_sound_size(*this, "sound_nl:size")
+ , m_sound_explosion(*this, "sound_nl:sexplo")
+ , m_sound_tie(*this, "sound_nl:stie")
+ , m_sound_laser(*this, "sound_nl:slaser")
+ , m_sound_track(*this, "sound_nl:track")
+ , m_sound_lock(*this, "sound_nl:lock")
+ , m_sound_scanner(*this, "sound_nl:scanner")
+ , m_sound_overheat(*this, "sound_nl:oheat")
{ }
void starfire(machine_config &config);
@@ -96,9 +108,10 @@ private:
virtual void machine_start() override;
virtual void machine_reset() override;
- required_device<samples_device> m_samples;
+ required_device<dac_word_interface> m_dac;
+
required_ioport m_nmi;
- required_ioport m_stick2;
+ required_ioport m_stickz;
required_ioport m_stickx;
required_ioport m_sticky;
@@ -107,7 +120,21 @@ private:
INTERRUPT_GEN_MEMBER(vblank_int);
- uint8_t m_prev_sound;
+ NETDEV_ANALOG_CALLBACK_MEMBER(tieon1_cb);
+ NETDEV_ANALOG_CALLBACK_MEMBER(laseron1_cb);
+ NETDEV_ANALOG_CALLBACK_MEMBER(sound_out_cb);
+
+ uint8_t m_sound_tie_on;
+ uint8_t m_sound_laser_on;
+
+ required_device<netlist_mame_logic_input_device> m_sound_size;
+ required_device<netlist_mame_logic_input_device> m_sound_explosion;
+ required_device<netlist_mame_logic_input_device> m_sound_tie;
+ required_device<netlist_mame_logic_input_device> m_sound_laser;
+ required_device<netlist_mame_logic_input_device> m_sound_track;
+ required_device<netlist_mame_logic_input_device> m_sound_lock;
+ required_device<netlist_mame_logic_input_device> m_sound_scanner;
+ required_device<netlist_mame_logic_input_device> m_sound_overheat;
};
class fireone_state : public starfire_base_state
@@ -115,6 +142,7 @@ class fireone_state : public starfire_base_state
public:
fireone_state(const machine_config &mconfig, device_type type, const char *tag)
: starfire_base_state(mconfig, type, tag)
+ , m_pit(*this, "pit")
, m_controls(*this, "P%u", 1U)
, m_sound_left_partial_hit(*this, "sound_nl:lshpht")
, m_sound_right_partial_hit(*this, "sound_nl:rshpht")
@@ -124,8 +152,14 @@ public:
, m_sound_right_boom(*this, "sound_nl:rboom")
, m_sound_torpedo_collision(*this, "sound_nl:torpcoll")
, m_sound_submarine_engine(*this, "sound_nl:subeng")
+ , m_sound_alert(*this, "sound_nl:alert")
, m_sound_sonar_enable(*this, "sound_nl:sonar_enable")
, m_sound_sonar_sync(*this, "sound_nl:sonar_sync")
+ , m_sound_off_left(*this, "sound_nl:lsound_off")
+ , m_sound_off_right(*this, "sound_nl:rsound_off")
+ , m_music_a(*this, "sound_nl:music_a")
+ , m_music_b(*this, "sound_nl:music_b")
+ , m_music_c(*this, "sound_nl:music_c")
{ }
void fireone(machine_config &config);
@@ -134,10 +168,16 @@ private:
virtual void machine_start() override;
virtual void machine_reset() override;
+ required_device<pit8253_device> m_pit;
required_ioport_array<2> m_controls;
+ DECLARE_WRITE_LINE_MEMBER(music_a_out_cb);
+ DECLARE_WRITE_LINE_MEMBER(music_b_out_cb);
+ DECLARE_WRITE_LINE_MEMBER(music_c_out_cb);
+
virtual uint8_t input_r(offs_t offset) override;
virtual void sound_w(offs_t offset, uint8_t data) override;
+ virtual void music_w(offs_t offset, uint8_t data) override;
uint8_t m_player_select;
@@ -151,8 +191,14 @@ private:
required_device<netlist_mame_logic_input_device> m_sound_right_boom;
required_device<netlist_mame_logic_input_device> m_sound_torpedo_collision;
required_device<netlist_mame_logic_input_device> m_sound_submarine_engine;
+ required_device<netlist_mame_logic_input_device> m_sound_alert;
required_device<netlist_mame_logic_input_device> m_sound_sonar_enable;
required_device<netlist_mame_logic_input_device> m_sound_sonar_sync;
+ required_device<netlist_mame_logic_input_device> m_sound_off_left;
+ required_device<netlist_mame_logic_input_device> m_sound_off_right;
+ required_device<netlist_mame_logic_input_device> m_music_a;
+ required_device<netlist_mame_logic_input_device> m_music_b;
+ required_device<netlist_mame_logic_input_device> m_music_c;
};
#endif // MAME_INCLUDES_STARFIRE_H
diff --git a/src/mame/machine/midwayic.cpp b/src/mame/machine/midwayic.cpp
index 44d252131c0..fbc3383a01e 100644
--- a/src/mame/machine/midwayic.cpp
+++ b/src/mame/machine/midwayic.cpp
@@ -222,6 +222,14 @@ void midway_serial_pic_device::write(u8 data)
* Original serial number PIC
* interface - emulation
*
+ * PIC16C57 wiring notes:
+ * PORTA - 4bit command in (usually 0 = read SN#)
+ * PORTB - 8bit data out
+ * PORTC bit 7 - access clock in
+ * PORTC bit 6 - status out
+ * PORTC bit 2 - in/out (optional) MK41T56N RTC/NVRAM Data
+ * PORTC bit 1 - out (optional) MK41T56N RTC/NVRAM Clock
+ *
*************************************/
@@ -234,6 +242,7 @@ DEFINE_DEVICE_TYPE(MIDWAY_SERIAL_PIC_EMU, midway_serial_pic_emu_device, "midway_
midway_serial_pic_emu_device::midway_serial_pic_emu_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
device_t(mconfig, MIDWAY_SERIAL_PIC_EMU, tag, owner, clock)
+ , m_pic(*this, "pic")
{
}
@@ -243,52 +252,62 @@ midway_serial_pic_emu_device::midway_serial_pic_emu_device(const machine_config
void midway_serial_pic_emu_device::device_start()
{
-}
+ save_item(NAME(m_command));
+ save_item(NAME(m_data_out));
+ save_item(NAME(m_clk));
+ save_item(NAME(m_status));
+ m_command = 0;
+ m_data_out = 0;
+ m_clk = 0;
+ m_status = 0;
+}
-uint8_t midway_serial_pic_emu_device::read_a()
+WRITE_LINE_MEMBER(midway_serial_pic_emu_device::reset_w)
{
-// printf("%s: read_a\n", machine().describe_context().c_str());
- return 0x00;
+ if (!state) // fixme, PIC should be stopped while 0 and start running at 0->1 transition
+ m_pic->reset();
}
-uint8_t midway_serial_pic_emu_device::read_b()
+u8 midway_serial_pic_emu_device::status_r()
{
-// printf("%s: read_b\n", machine().describe_context().c_str());
- return 0x00;
+ return m_status;
}
-uint8_t midway_serial_pic_emu_device::read_c()
+u8 midway_serial_pic_emu_device::read()
{
-// used
-// printf("%s: read_c\n", machine().describe_context().c_str());
- return 0x00;
+ return m_data_out;
}
-void midway_serial_pic_emu_device::write_a(uint8_t data)
+void midway_serial_pic_emu_device::write(u8 data)
{
-// printf("%s: write_a %02x\n", machine().describe_context().c_str(), data);
+ // perhaps this should be split in 2 handlers ?
+ m_command = data & 0x0f;
+ m_clk = BIT(data, 4);
}
-void midway_serial_pic_emu_device::write_b(uint8_t data)
+u8 midway_serial_pic_emu_device::read_c()
{
-// printf("%s: write_b %02x\n", machine().describe_context().c_str(), data);
+ u8 data = 0;
+ data |= m_clk << 7;
+ // bit 2 RTC Data
+ return data;
}
-void midway_serial_pic_emu_device::write_c(uint8_t data)
+void midway_serial_pic_emu_device::write_c(u8 data)
{
-// used
+ m_status = BIT(data, 6);
+ // bits 1 and 2 is RTC Clock and Data
// printf("%s: write_c %02x\n", machine().describe_context().c_str(), data);
}
void midway_serial_pic_emu_device::device_add_mconfig(machine_config &config)
{
- pic16c57_device &pic(PIC16C57(config, "pic", 12000000)); /* ? Mhz */
- pic.write_a().set(FUNC(midway_serial_pic_emu_device::write_a));
- pic.read_b().set(FUNC(midway_serial_pic_emu_device::read_b));
- pic.write_b().set(FUNC(midway_serial_pic_emu_device::write_b));
- pic.read_c().set(FUNC(midway_serial_pic_emu_device::read_c));
- pic.write_c().set(FUNC(midway_serial_pic_emu_device::write_c));
+ PIC16C57(config, m_pic, 4000000); /* ? Mhz */
+ m_pic->read_a().set([this]() { return m_command; });
+ m_pic->write_b().set([this](u8 data) { m_data_out = data; });
+ m_pic->read_c().set(FUNC(midway_serial_pic_emu_device::read_c));
+ m_pic->write_c().set(FUNC(midway_serial_pic_emu_device::write_c));
}
diff --git a/src/mame/machine/midwayic.h b/src/mame/machine/midwayic.h
index 98148a85cd4..e231bdd5674 100644
--- a/src/mame/machine/midwayic.h
+++ b/src/mame/machine/midwayic.h
@@ -66,6 +66,11 @@ public:
// construction/destruction
midway_serial_pic_emu_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+ u8 read();
+ void write(u8 data);
+ u8 status_r();
+ DECLARE_WRITE_LINE_MEMBER(reset_w);
+
protected:
midway_serial_pic_emu_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
@@ -74,12 +79,15 @@ protected:
virtual void device_start() override;
private:
- uint8_t read_a();
- uint8_t read_b();
- uint8_t read_c();
- void write_a(uint8_t data);
- void write_b(uint8_t data);
- void write_c(uint8_t data);
+ required_device<pic16c57_device> m_pic;
+
+ u8 read_c();
+ void write_c(u8 data);
+
+ u8 m_command;
+ u8 m_data_out;
+ u8 m_clk;
+ u8 m_status;
};
diff --git a/src/mame/machine/midwunit.cpp b/src/mame/machine/midwunit.cpp
index 261bf1956d1..7cdbc9adda1 100644
--- a/src/mame/machine/midwunit.cpp
+++ b/src/mame/machine/midwunit.cpp
@@ -82,6 +82,7 @@ void midwunit_state::midwunit_io_w(offs_t offset, uint16_t data, uint16_t mem_ma
/* bit 5 (active low) reset security chip */
if (m_midway_serial_pic) m_midway_serial_pic->reset_w(newword & 0x20);
+ if (m_midway_serial_pic_emu) m_midway_serial_pic_emu->reset_w(newword & 0x20);
break;
case 3:
@@ -122,6 +123,7 @@ uint16_t midwunit_state::midwunit_io_r(offs_t offset)
{
int picret = 0;
if (m_midway_serial_pic) picret = m_midway_serial_pic->status_r();
+ if (m_midway_serial_pic_emu) picret = m_midway_serial_pic_emu->status_r();
return (picret << 12) | midwunit_sound_state_r();
}
@@ -340,6 +342,7 @@ uint16_t midwunit_state::midwunit_security_r()
{
uint16_t picret = 0;
if (m_midway_serial_pic) picret = m_midway_serial_pic->read();
+ if (m_midway_serial_pic_emu) picret = m_midway_serial_pic_emu->read();
return picret;
}
@@ -349,6 +352,7 @@ void midwunit_state::midwunit_security_w(offs_t offset, uint16_t data, uint16_t
if (offset == 0 && ACCESSING_BITS_0_7)
{
if (m_midway_serial_pic) m_midway_serial_pic->write(data);
+ if (m_midway_serial_pic_emu) m_midway_serial_pic_emu->write(data);
}
}
diff --git a/src/mame/machine/mikro80.cpp b/src/mame/machine/mikro80.cpp
index 7252ea5096d..747f6be9aaf 100644
--- a/src/mame/machine/mikro80.cpp
+++ b/src/mame/machine/mikro80.cpp
@@ -10,7 +10,6 @@
#include "emu.h"
-#include "cpu/i8085/i8085.h"
#include "includes/mikro80.h"
/* Driver initialization */
@@ -39,6 +38,11 @@ u8 mikro80_state::portc_r()
return m_io_keyboard[8]->read();
}
+u8 mikro80_state::kristall2_portc_r()
+{
+ return (m_io_keyboard[8]->read() & 0xfe) | ((m_cassette->input() < 0.04) ? 1 : 0);
+}
+
void mikro80_state::porta_w(u8 data)
{
m_keyboard_mask = data ^ 0xff;
@@ -46,6 +50,7 @@ void mikro80_state::porta_w(u8 data)
void mikro80_state::portc_w(u8 data)
{
+ m_cassette->output(BIT(data, 7) ? 1.0 : -1.0); // for Kristall2 only
}
void mikro80_state::machine_start()
@@ -85,7 +90,7 @@ void mikro80_state::tape_w(u8 data)
u8 mikro80_state::tape_r()
{
- return m_cassette->input() ? 0xff : 0;
+ return (m_cassette->input() < 0.04) ? 0xff : 0;
}
void mikro80_state::sound_w(u8 data)
diff --git a/src/mame/machine/mpu4.cpp b/src/mame/machine/mpu4.cpp
index 7a763d0d0dd..4dccb4606b2 100644
--- a/src/mame/machine/mpu4.cpp
+++ b/src/mame/machine/mpu4.cpp
@@ -3073,8 +3073,7 @@ void mpu4_state::mpu4_common2(machine_config &config)
m_ptm_ic3ss->set_external_clocks(0, 0, 0);
m_ptm_ic3ss->o1_callback().set("ptm_ic3ss", FUNC(ptm6840_device::set_c2));
m_ptm_ic3ss->o2_callback().set("ptm_ic3ss", FUNC(ptm6840_device::set_c1));
- //m_ptm_ic3ss->o3_callback().set("ptm_ic3ss", FUNC(ptm6840_device::set_g1));
- //m_ptm_ic3ss->irq_callback().set(FUNC(mpu4_state::cpu1_ptm_irq));
+ m_ptm_ic3ss->o3_callback().set("ptm_ic3ss", FUNC(ptm6840_device::set_g1));
PIA6821(config, m_pia_ic4ss, 0);
m_pia_ic4ss->readpb_handler().set(FUNC(mpu4_state::pia_gb_portb_r));
diff --git a/src/mame/mame.lst b/src/mame/mame.lst
index 5d5f1dc6b4c..39948623536 100644
--- a/src/mame/mame.lst
+++ b/src/mame/mame.lst
@@ -29106,6 +29106,7 @@ v4gldrshr
v4gldrshs
v4gldrsht
v4gldrshu
+v4gldrsh3
v4mate // The Mating Game
v4mated //
v4mazbel // Mazooma Belle
@@ -29136,11 +29137,12 @@ v4mdiceu
v4mdicev
v4mdicew
v4mdice5
+v4mdiceger // Miami Dice
+v4mdice6
v4megbuk // Megabucks Poker
v4megbuka
v4megbukb
v4megbukc
-v4mdiceger // Miami Dice
v4missis // Mississippi Lady
v4monte // Monte Carlo Or Bust
v4montea
@@ -29202,6 +29204,7 @@ v4monte9m
v4monte9n
v4monte9o
v4montezz
+v4monteger
v4opt3 // Option 3
v4opt3d //
v4ovrmn3 // Over Moon Pt3
@@ -29209,7 +29212,9 @@ v4ovrmn3a
v4ovrmn3b
v4ovrmn3c
v4ovrmn3d
-v4picdil // Piccadilly Nights
+v4picdil // Piccadilly Night
+v4picdila
+v4picdilz
v4psi // Prize Space Invaders
v4psibc //
v4psi14 //
@@ -34985,7 +34990,8 @@ quizpun2 // (c) 1989 Space Computer System of Korea
quizshow // 005464 1976/04 [2650]
@source:qvt70.cpp
-qvt70 //
+qvt70 // (c) 1992 Qume Corp.
+qvt82 // (c) 1993 Qume Corp.
@source:qvt102.cpp
qvt102 // (c) 1983 Qume Corp.
diff --git a/src/mame/nl.lst b/src/mame/nl.lst
index 32935745015..cda1adb440d 100644
--- a/src/mame/nl.lst
+++ b/src/mame/nl.lst
@@ -49,6 +49,15 @@ warrior // (c) 1979 Vectorbeam
wotw // (c) 1981
wotwc // (c) 1981
+@source:carpolo.cpp
+carpolo // (c) 1977
+
+@source:starfire.cpp
+fireone // (c) 1979 Exidy
+starfir2 // (c) 1979 Exidy
+starfire // Exidy [1979?]
+starfirea // Exidy [1979?]
+
@source:galaxian.cpp
600 // GX353 (c) 1981 Konami
amidar // GX337 (c) 1982 Konami
@@ -465,6 +474,8 @@ wrestwar1d //
wrestwar2 // (c) 1989 (FD1094)
wrestwar2d //
+@source:starcrus.cpp
+starcrus
@source:testpat.cpp
tp1983