v50 Steam/Premium information for editors
  • v50 information can now be added to pages in the main namespace. v0.47 information can still be found in the DF2014 namespace. See here for more details on the new versioning policy.
  • Use this page to report any issues related to the migration.
This notice may be cached—the current version can be found here.

Difference between revisions of "v0.34:Minecart logic"

From Dwarf Fortress Wiki
Jump to navigation Jump to search
m (→‎Resetting bridge-derailment AND: clean up, typos fixed: the exact same → exactly the same, ie, → i.e.,)
 
(28 intermediate revisions by 8 users not shown)
Line 1: Line 1:
The addition of minecarts to Dwarf Fortress has opened up new and exciting logic and computing options for the ambitious fortress manager. Minecart-based logic gates and memory cells are easy to build (arguably easier than [[fluid logic]] systems, they are easy to reconfigure, and react quickly.
+
{{Quality|Superior|20:51, 30 April 2013 (UTC)}}
 +
{{Computing}}
 +
{{av}}
  
== Binary Memory Cells ==
+
The addition of [[minecart]]s to Dwarf Fortress has opened up new and exciting logic and computing options for the ambitious fortress manager. Minecart-based logic gates and memory cells are easy to build, quick to react, and can even be built without power, water, or creatures. The training your [[doctor]]s will receive is just one of many reasons to compute with minecarts!
Binary Memory Cells store binary data as a 1 or 0 (on or off). For minecarts this means a minecart occupies a pressure plate to create a 1 and by some means removed to make a 0.
 
  
 +
==Techniques and Circuits==
  
=== Three-tracked double-carted binary memory cell ===
+
There exist a great number of different techniques by which a minecart can receive input, compute, and deliver output.  This article does not aim for a comprehensive list of techniques and circuits; the interested reader is encouraged to investigate further.  The following examples were chosen to demonstrate both a variety of techniques and a few commonly used gates.
  
[[File:3tdcbm.png]]
+
====Key====
 +
Adequately diagramming minecart logic devices can be difficult; each tile on each z-level might need to display up to four slices (track, [[ramp]], [[furniture]], minecart) that can lay on top of each other.  Ramps are displayed on the furniture layer for the sake of simplicity, and some slices may be omitted when unnecessary.  Components of each lower slice are displayed on the higher slice when unchanged by new components to give the reader a sense of position.  Wall {{Raw Tile|O|#FFF|#000}} is typically displayed only where it is essential to the operation of the circuit, and drawn only as sequences of pillars to avoid confusion with track.  Unengraved floor {{Raw Tile|,|#FFF|#000}} is sometimes needed for other components, but of course can be smoothed as desired.  Track direction is laid out with {{Raw Tile|║|#FFF|#000}}{{Raw Tile|═|#FFF|#000}}{{Raw Tile|╗|#FFF|#000}}{{Raw Tile|╝|#FFF|#000}}{{Raw Tile|╚|#FFF|#000}}{{Raw Tile|╔|#FFF|#000}}{{Raw Tile|╩|#FFF|#000}} and ends in a tile with {{Raw Tile|╨|#FFF|#000}}{{Raw Tile|╥|#FFF|#000}}{{Raw Tile|╡|#FFF|#000}}{{Raw Tile|╞|#FFF|#000}}.  Minecarts {{Raw Tile|■|#FFF|#000}} are accelerated by rollers to the east {{Raw Tile|╟|#FFF|#000}} west {{Raw Tile|╢|#FFF|#000}} north {{Raw Tile|╧|#FFF|#000}} or south {{Raw Tile|╤|#FFF|#000}} and decelerated by track stops {{Raw Tile|≡|#FFF|#000}}.  Rollers are controlled via [[Gear_assembly|gear assemblies]], either engaged {{Raw Tile|☼|#FFF|#000}} or disengaged {{Raw Tile|☼|#777|#000}}, typically connected to sufficient [[power]] {{Raw Tile|P|#0F0|#000}}.  [[Pressure plate]]s {{Raw Tile|^|#FFF|#000}} provide output and, in some cases, modulate the circuit itself.  Up {{Raw Tile|▲|#FFF|#000}} and down {{Raw Tile|▼|#FFF|#000}} ramps may be necessary to travel z-levels or alter minecart velocity; they may be roofed or covered with empty space {{Raw Tile|.|#0FF|#000}} in some views. [[Hatch]]es {{Raw Tile|¢|#FFF|#000}} and retractable [[bridge]]s {{Raw Tile|╬|#000|#CCC}} are commonly used to control the path of minecarts.  Where necessary, clarification can be found in the descriptions of each circuit.
  
The image is split into three versions to show where the minecarts go, what's beneath the minecarts and what's beneath the rollers and pressure plates.
+
===Power to signal===
 +
{{diagram|spaces=yes|\
 +
  O      O
 +
  ╥,     ╤☼
 +
  ║      [#F0F]^[#0F0]P
 +
  ╨,      ╧☼
 +
  O      O
 +
track furniture}}
  
How this works: There are 2 carts, a copper one at the top and an iron one in the center. A copper cart weighs 357 Urists and an iron cart 314 Urists. The pressure plate in the center is set to activate at 350 Urists, so the iron cart doesn't trigger it. Activating the gear/roller (the light green one), making the copper cart push the iron cart to the other end before rolling onto the pressure plate will trigger it and send an on signal. Vice versa (the iron cart will push the copper cart just fine even though it's a little bit lighter) to send an off signal. This design is the most space-efficient of the memory cells but lacks the activation speed of the next design due to the first cart having to push the second cart before being moved onto the pressure plate itself.
 
  
A modular example of this design:
+
In this, the simplest of all designs, the output plate sends an '''on''' signal when the gear assemblies {{Raw Tile|☼|#FFF|#000}} are powered {{Raw Tile|P|#0F0|#000}}.  When power is lost, the minecart settles onto either the northern or southern roller spaces, and the output plate sends an '''off''' signal.
 +
 +
This device is very general purpose.  Left as an exercise for the reader, alternate construction can result in edge detection or in a [[repeater]] design.
  
[[File:Modular3tdcbm.png]]
+
===Newton's Cradle Memory===
 +
{{diagram|spaces=yes|\
 +
  O      O        O
 +
  ╥,      ╤[#0C0]☼[#0F0]P      [#000][#0f0]■[#0C0]☼[#0F0]P
 +
  ║      ║        ║
 +
  ║      [#F0F]^        [#000][#ff0]
 +
  ╨,      ╧[#CC0]☼[#0F0]P      ╧[#CC0]☼[#0F0]P
 +
  O      O        O
 +
track furniture minecart}}
  
It's a bit bulky looking but compared to the water based cell which needs 5 z-levels minimum to be of any worth, it's nearly 3x smaller and functions just the same.
 
  
=== Newton's Cradle Binary Memory Cell ===
+
[[User:TinyPirate|TinyPirate]]'s Newton's Cradle [[Memory_(computing)|memory]] cell is notable both for its small footprint and for demonstrating an important principle of minecarts.  When the northern gear assembly {{Raw Tile|☼|#0C0|#000}} is briefly engaged, the northern roller {{Raw Tile|╤|#FFF|#000}} becomes powered, launching the northern minecart {{Raw Tile|■|#000|#0F0}} into the southern minecart {{Raw Tile|■|#000|#FF0}}. The southern minecart then leaves the output plate {{Raw Tile|^|#F0F|#000}} and settles on the southern (unpowered) roller.  When the southern gear assembly is briefly engaged, the situation reverses: the southern minecart settles on the output plate, knocking the northern minecart onto the northern (unpowered) roller-- as in its original state.
  
[[File:Tpmch.png]]
+
===Continuous roller OR===
 +
{{diagram|spaces=yes|\
 +
╔═╗═╗  ╔═╗═╗
 +
║ ║O║  ║ [#F0F]^O║
 +
║ ║O║  ╤[#0F0]☼╧O║
 +
║ ║O║  [#0F0]P╤[#FF0]☼╧O║
 +
╚═╩═╝  ╚═╧═╝
 +
track  furniture}}
 +
[http://www.bay12forums.com/smf/index.php?topic=114923.msg3891809#msg3891809 Veylon's] roller OR continuously evaluates two operands via a minecart traveling counter-clockwise using principles of power transmission through single tile rollers.  Should either input {{Raw Tile|☼|#0F0|#000}} or {{Raw Tile|☼|#FF0|#000}} be engaged, power {{Raw Tile|P|#0F0|#000}} is transmitted to the southernmost, S->N roller {{Raw Tile|╧|#FFF|#000}}.  Although the minecart is left with diagonal velocity, walls prevent derailment.  When neither input is engaged, the minecart continues over the T-junction to the east, missing the output plate {{Raw Tile|^|#F0F|#000}}.
  
This design is slightly larger, having four tracks instead of three, but has the advantage of activating the pressure plate almost immediately upon power being sent. To activate, power is sent to the light green gear, pushing the top cart into the second cart. Like a Newton Cradle, the first cart transfers its momentum to the second cart, knocking it to the other end while the first cart rests on the pressure plate to send an on signal. The gear is then turned off. To turn it off power is sent to the dark green and the reverse happens. The modular design of the first memory cell can be applied to this as well, and you can actually fit in more gears for a more complex logic gate because of the increased length.  
+
===Roller switched AND===
 +
{{diagram|spaces=yes|\
 +
  ║      ║
 +
  ╔╗    [#0F0]P[#0F0]╧╗
 +
  ║║      ║║
 +
  ╔╗    [#0F0]P[#FF0]╧╗
 +
  ║║      [#F0F]^║
 +
  ╚╗      ╚╗
 +
track  furniture}}
 +
[[User:Larix|Larix]]'s roller-switched AND takes advantage of the behavior of rollers to avoid troublesome diagonal velocity. It is potentially confusing both for the counter-intuitive direction of its rollers as well as the way that rollers respond to signals.  When the minecart encounters either activated (that is, the last signal received was an '''off''') S->N roller {{Raw Tile|╧|#FF0|#000}} or {{Raw Tile|╧|#0F0|#000}}, its velocity is completely rewritten and reversed, sending it onto the alternate (clockwise) path.  Should neither roller be activated (that is, the last signal received by both was an '''on'''), the track bends will be ignored and the minecart will travel directly south, over the output plate {{Raw Tile|^|#F0F|#000}}.
  
== Power to Signal Converters ==
+
===Resetting bridge-derailment AND===
 +
{{diagram|spaces=yes|\
 +
O[#0FF].═[#0FF]. O▼═▼  O[#FF0]¢═▼
 +
     
 +
     
 +
     
 +
track ramp furniture
 +
z+1
 +
O╔O╗ O▲O▲  O▲O▲
 +
  ╚═╚  ╚═▲    [#000][#0f0]╬[#F0F]^▲
 +
  ╚═╝  ╚═╝    ╚═╝
 +
track ramp furniture
 +
z+0}}
  
A power to signal converter sends an on signal when power is applied and an off signal when power is cut.
+
When both the yellow hatch {{Raw Tile|¢|#FF0|#000}} and the green retractable bridge {{Raw Tile|╬|#000|#0F0}} are open, minecarts on this circuit make a continuous loop, triggering the output plate {{Raw Tile|^|#F0F|#000}}.  If either is closed, the plate is never activated.  If the bridge is closed, the minecart derails to the southern path, avoiding the plate.  If the hatch is closed, the minecart is unable to drop into the northwest ramp, and so sits on the upper, northwestern tile until the hatch opens.
  
=== 2x2 power-to-signal converter ===
+
There are many concerns when using a gate like this.  Minecarts can be flung when a bridge changes state underneath them, and unfortunately, hatch covers cannot provide the same derailment effect on flat track.  Additionally, because your minecart never evaluates both operands at exactly the same moment, it's possible for this gate to output when neither operand is actually true (i.e., last received an '''on''' signal) at the same moment.
  
[[File:2x2pts.png]]
+
It's not always a problem, but this behavior is common to AND gates.  Paradoxically, one solution is to moderate your inputs via an extra AND gate; this design shows how that can be done.  When a large number of circuits such as that shown are created and the hatches of all of them are linked to a single lever, a quick flick (on and off) of that lever can guarantee that all of your circuits fire at the same time-- that is, that all of your inputs for the next computation change state simultaneously.  The minecarts then return to their position atop the hatches, ready for another flick of your clock lever.
  
When power is sent to the gear, the roller sends the cart around in a loop, passing over the pressure plate repeatedly to maintain on on signal. When power is cut the cart returns to the starting position and disengages the pressure plate. The roller in this example pushes the cart from E->W. Pay close attention to the track layout to make sure it works properly. The 2 walls at the top are all that's needed to keep it from derailing.
+
Worth noting, as well, is the central eastern impulse ramp that allows the minecart to maintain enough velocity to complete this circuit.  Impulse ramps like this can be used to make unpowered gates. However, their behavior is unintuitive, and they should only be used with extreme caution. For example, in the diagram above, such a device used for continuous AND evaluation (rather than the resetting AND suggested in the text) is likely to accelerate the minecart on each pass, such that the minecart will stop moving after some number of circuits.
  
A modular design.
+
===MPL NOT===
 +
{{diagram|spaces=yes|\
 +
 +
O,      O,
 +
track    ramp
 +
z+2
 +
  ╔═╗      ╔═╗      ╔═╗
 +
O══[#0FF].[#0FF].╝  O▲═▼▼╝  O▲[#F0F]^▼[#0F0]¢╝
 +
track    ramp  furniture
 +
z+1
 +
 +
OOO══O  OOO▲▲O
 +
track    ramp
 +
z+0
 +
}}
  
[[File:Modular2x2pts.png]]
+
Larix's [[User:Larix/MPL/2|powerless logic gates]] avoid the reliability and latency issues that plague many minecart designs through the use of paired impulse ramps and hatches that control not just path, but direction of movement.  A minecart traveling the pictured circuit while the input hatch {{Raw Tile|¢|#0F0|#000}} is open will settle into a counter-clockwise path, regardless of the direction of its initial velocity.  Yet when the hatch becomes closed, the minecart cannot travel counter-clockwise, but instead is accelerated in the clockwise direction, onto the output plate {{Raw Tile|^|#F0F|#000}}.  It will then oscillate between the far east and far west ramps until the hatch is opened, at which point it will resume counter-clockwise motion.
  
=== Single-carted power-to-signal converter ===
+
Use of ramps with high-velocity minecarts may necessitate ceilings as demonstrated on z+2.  The exact nature of the ceiling (floor, wall) is unimportant.  Some diagrammed walls are unnecessary for the design and are drawn to help the reader in orientation.
  
[[File:Scpts.png]]
+
===Other techniques and gates===
 +
Any logic gate can be made with a combination of those shown.  NAND, for instance, is NOT AND; XOR is OR AND (NOT AND).  Clocks and edge detection are suggested and proven designs exist, if not on this page.  But the examples above were chosen for the disparate techniques they demonstrate.  The interested reader is encouraged to further research, or the design of his or her own gates.
  
The rollers are directed at the center like always, so when power is applied to any of the gears the minecart continuously passes over the pressure plate to maintain an on signal, reverting to an off signal when the power is cut.
+
Doors can be used to block the travel of a minecart through a circuit, or to prevent derailment, although for reliability's sake, care needs to be taken that the door cannot change state while the minecart is in motion, or it may jam on top of the minecart.  [[Floodgate]]s won't jam in this fashion, although they do introduce some latency.  Minecarts of multiple weights, with pressure plates that trigger only on the weight of one, may be used in certain designs; Bloodbeard's fantastically tiny [http://www.bay12forums.com/smf/index.php?topic=114923.msg3532411#msg3532411 load-adjusted memory cell] is a good example.  Rollers can be used perpendicularly to a track to derail a cart and impart diagonal velocity.  Switchable track stops can prevent or permit derailment.  The possibilities are far from exhausted-- and that's assuming one is only interested in ''practical'' techniques.
  
A modular design.
+
==Integration with other disciplines==
 +
There's no reason minecart logic needs to be used in isolation.  Combining it with other logical disciplines allows one to use each where it is strong, and avoid each where it is weak.
  
[[File:Modularscpts.png]]
+
===[[Mechanical logic]]===
 +
This is the most obvious choice.  Mechanical logic offers the potential for incredible speed, yet requires a medium to generate useful signals or to create delay (hence, to create repeaters), and it's hard to use gear assemblies as memory cells.  Minecart logic excels at precisely these tasks.  Minecart-based power-to-signal and memory are tiny and fast.  Minecart-based delay is precisely tunable.  The superiority of minecart logic has made water obsolete for these purposes.
  
It's possible to butt each main component closer to each other and put the extra gears on other z-levels but they're so small it's impossible to join the gears together in a more efficient design. It might look like there are too many unneeded gears but if you're going to be making something that needs this much stuff you'll need 2 or 3 extra gears to form logic gates.
+
===[[Creature logic]]===
 +
Minecart logic, particularly Larix's powerless MPL logic, has replaced creature logic as the logic-of-last-resort (for when power and fluid are unavailable) or first-resort (for when computation is desired before power can be set up or fluid accessed).  However, for the borg logic hobbyist, integration with minecarts suggests interesting possibilities. It is difficult to imagine a simpler clock than a minecart with a "push always after x days" condition, and guided minecarts offer unprecedented control over the path of [[dwarf|dwarves]].
  
=== Double-carted power-to-signal converter ===
+
===[[Fluid logic]]===
 
+
Minecart logic outperforms fluid logic sufficiently to have mostly replaced it. However, the problem of automated fluid delivery may be best solved through some fluid logic techniques, and may suggest some [[stupid dwarf trick]]s for those that want to use the fluid capacity of minecarts to compute.
[[File:Dcpts.png]]
 
 
 
BloodBeard, who invented this compact design, has this to say about it: "I was able to take the load adjusting pressure plate concept of my memory cell and put it into a power-to-signal converter. It functions much like the memory cell, but with different linkages (and an axle). Now I'm not so sure if this can be called a power-to-signal converter since you don't simply send power to a gear and the thing maintains an 'on' signal, but it's really all about how you use it.
 
 
 
Both gears are off by default and the power is connected to the dark green gear. Be it by lever or pressure plate, both gears are switched on, sending power to both rollers (directed to the center). The copper cart pushes the iron one to the other side, but before the southern roller has time to push it back north the copper cart is rolled onto the pressure plate which turns off the dark green gear (and the southern roller). The light green gear is still engaged but no power is being sent to it because the dark green is off. This was the sort of "eureka!" moment when I saw that rollers immediately stop when power is cut (unlike screwpumps) to allow this. (sorry if this is common knowledge, I'm a bit late to the game in getting into the 2012 versions)
 
 
 
Both gears are switched again when you want to turn it off, activating the dark green gear and disengaging the light green, sending both carts back to their starting points, deactivating the pressure plate which turns the dark green off again (but keeps the roller on long enough to push the iron cart thanks to the pressure plates 'off' delay). Everything is back to how it was at the start.
 
 
 
With the other examples, only 1 gear is needed to be switched to turn them on and off. If you treat both of these gears as you would a single gear then I guess you could also call it a power-to-signal converter, and is the only one that has no moving water or minecarts when it's in the on position. Useful if you have a whole bunch of them and want to minimize lag.
 
 
 
Now i'm not sure, but the implications of that last component might be huge for dwarfputing. That with a single lever or single pressure plate you can trigger an on and off signal on another component without any continuous moving parts wasn't possible with the mechanical-fluid logic examples I listed at the top of this post. It might be possible to use it as a binary memory cell as well, except I don't think there would be a 'standard' design and the gearing/linkages would need to be customized to the task it performs. I might have to make something, or at least plan it to see."
 
  
 
== See Also ==
 
== See Also ==
* BloodBeard's [[http://www.bay12forums.com/smf/index.php?topic=114923.0 Minecart Dwarfputing Ideas] thread.
+
* BloodBeard's [http://www.bay12forums.com/smf/index.php?topic=114923.0 Minecart Dwarfputing Ideas] thread.
 +
* TinyPirate's [http://www.youtube.com/watch?v=jrt9qRTWFmY Minecart Logic 101] instructional video.
 +
* [[User:Larix/MPL|Powerless logic]] based on hatch-switched minecarts. [[User:Larix/MPL/2|Logic gates]] built under this design doctrine.
  
 
{{Category|Fortress mode}}
 
{{Category|Fortress mode}}
 +
{{Category|Computing}}
 +
{{Category|Logic}}

Latest revision as of 22:55, 8 April 2014

This article is about an older version of DF.

The addition of minecarts to Dwarf Fortress has opened up new and exciting logic and computing options for the ambitious fortress manager. Minecart-based logic gates and memory cells are easy to build, quick to react, and can even be built without power, water, or creatures. The training your doctors will receive is just one of many reasons to compute with minecarts!

Techniques and Circuits[edit]

There exist a great number of different techniques by which a minecart can receive input, compute, and deliver output. This article does not aim for a comprehensive list of techniques and circuits; the interested reader is encouraged to investigate further. The following examples were chosen to demonstrate both a variety of techniques and a few commonly used gates.

Key[edit]

Adequately diagramming minecart logic devices can be difficult; each tile on each z-level might need to display up to four slices (track, ramp, furniture, minecart) that can lay on top of each other. Ramps are displayed on the furniture layer for the sake of simplicity, and some slices may be omitted when unnecessary. Components of each lower slice are displayed on the higher slice when unchanged by new components to give the reader a sense of position. Wall O is typically displayed only where it is essential to the operation of the circuit, and drawn only as sequences of pillars to avoid confusion with track. Unengraved floor , is sometimes needed for other components, but of course can be smoothed as desired. Track direction is laid out with and ends in a tile with . Minecarts are accelerated by rollers to the east west north or south and decelerated by track stops . Rollers are controlled via gear assemblies, either engaged or disengaged , typically connected to sufficient power P. Pressure plates ^ provide output and, in some cases, modulate the circuit itself. Up and down ramps may be necessary to travel z-levels or alter minecart velocity; they may be roofed or covered with empty space . in some views. Hatches ¢ and retractable bridges are commonly used to control the path of minecarts. Where necessary, clarification can be found in the descriptions of each circuit.

Power to signal[edit]

O O
,
^ P
,
O O
t r a c k f u r n i t u r e


In this, the simplest of all designs, the output plate sends an on signal when the gear assemblies are powered P. When power is lost, the minecart settles onto either the northern or southern roller spaces, and the output plate sends an off signal.

This device is very general purpose. Left as an exercise for the reader, alternate construction can result in edge detection or in a repeater design.

Newton's Cradle Memory[edit]

O O O
, P P
^
, P P
O O O
t r a c k f u r n i t u r e m i n e c a r t


TinyPirate's Newton's Cradle memory cell is notable both for its small footprint and for demonstrating an important principle of minecarts. When the northern gear assembly is briefly engaged, the northern roller becomes powered, launching the northern minecart into the southern minecart . The southern minecart then leaves the output plate ^ and settles on the southern (unpowered) roller. When the southern gear assembly is briefly engaged, the situation reverses: the southern minecart settles on the output plate, knocking the northern minecart onto the northern (unpowered) roller-- as in its original state.

Continuous roller OR[edit]

O ^ O
O O
O P O
t r a c k f u r n i t u r e

Veylon's roller OR continuously evaluates two operands via a minecart traveling counter-clockwise using principles of power transmission through single tile rollers. Should either input or be engaged, power P is transmitted to the southernmost, S->N roller . Although the minecart is left with diagonal velocity, walls prevent derailment. When neither input is engaged, the minecart continues over the T-junction to the east, missing the output plate ^.

Roller switched AND[edit]

P
P
^
t r a c k f u r n i t u r e

Larix's roller-switched AND takes advantage of the behavior of rollers to avoid troublesome diagonal velocity. It is potentially confusing both for the counter-intuitive direction of its rollers as well as the way that rollers respond to signals. When the minecart encounters either activated (that is, the last signal received was an off) S->N roller or , its velocity is completely rewritten and reversed, sending it onto the alternate (clockwise) path. Should neither roller be activated (that is, the last signal received by both was an on), the track bends will be ignored and the minecart will travel directly south, over the output plate ^.

Resetting bridge-derailment AND[edit]

O . . O O ¢
t r a c k r a m p f u r n i t u r e
z + 1
O O O O O O
^
t r a c k r a m p f u r n i t u r e
z + 0

When both the yellow hatch ¢ and the green retractable bridge are open, minecarts on this circuit make a continuous loop, triggering the output plate ^. If either is closed, the plate is never activated. If the bridge is closed, the minecart derails to the southern path, avoiding the plate. If the hatch is closed, the minecart is unable to drop into the northwest ramp, and so sits on the upper, northwestern tile until the hatch opens.

There are many concerns when using a gate like this. Minecarts can be flung when a bridge changes state underneath them, and unfortunately, hatch covers cannot provide the same derailment effect on flat track. Additionally, because your minecart never evaluates both operands at exactly the same moment, it's possible for this gate to output when neither operand is actually true (i.e., last received an on signal) at the same moment.

It's not always a problem, but this behavior is common to AND gates. Paradoxically, one solution is to moderate your inputs via an extra AND gate; this design shows how that can be done. When a large number of circuits such as that shown are created and the hatches of all of them are linked to a single lever, a quick flick (on and off) of that lever can guarantee that all of your circuits fire at the same time-- that is, that all of your inputs for the next computation change state simultaneously. The minecarts then return to their position atop the hatches, ready for another flick of your clock lever.

Worth noting, as well, is the central eastern impulse ramp that allows the minecart to maintain enough velocity to complete this circuit. Impulse ramps like this can be used to make unpowered gates. However, their behavior is unintuitive, and they should only be used with extreme caution. For example, in the diagram above, such a device used for continuous AND evaluation (rather than the resetting AND suggested in the text) is likely to accelerate the minecart on each pass, such that the minecart will stop moving after some number of circuits.

MPL NOT[edit]

O , O ,
t r a c k r a m p
z + 2
O . . O O ^ ¢
t r a c k r a m p f u r n i t u r e
z + 1
O O O O O O O O
t r a c k r a m p
z + 0

Larix's powerless logic gates avoid the reliability and latency issues that plague many minecart designs through the use of paired impulse ramps and hatches that control not just path, but direction of movement. A minecart traveling the pictured circuit while the input hatch ¢ is open will settle into a counter-clockwise path, regardless of the direction of its initial velocity. Yet when the hatch becomes closed, the minecart cannot travel counter-clockwise, but instead is accelerated in the clockwise direction, onto the output plate ^. It will then oscillate between the far east and far west ramps until the hatch is opened, at which point it will resume counter-clockwise motion.

Use of ramps with high-velocity minecarts may necessitate ceilings as demonstrated on z+2. The exact nature of the ceiling (floor, wall) is unimportant. Some diagrammed walls are unnecessary for the design and are drawn to help the reader in orientation.

Other techniques and gates[edit]

Any logic gate can be made with a combination of those shown. NAND, for instance, is NOT AND; XOR is OR AND (NOT AND). Clocks and edge detection are suggested and proven designs exist, if not on this page. But the examples above were chosen for the disparate techniques they demonstrate. The interested reader is encouraged to further research, or the design of his or her own gates.

Doors can be used to block the travel of a minecart through a circuit, or to prevent derailment, although for reliability's sake, care needs to be taken that the door cannot change state while the minecart is in motion, or it may jam on top of the minecart. Floodgates won't jam in this fashion, although they do introduce some latency. Minecarts of multiple weights, with pressure plates that trigger only on the weight of one, may be used in certain designs; Bloodbeard's fantastically tiny load-adjusted memory cell is a good example. Rollers can be used perpendicularly to a track to derail a cart and impart diagonal velocity. Switchable track stops can prevent or permit derailment. The possibilities are far from exhausted-- and that's assuming one is only interested in practical techniques.

Integration with other disciplines[edit]

There's no reason minecart logic needs to be used in isolation. Combining it with other logical disciplines allows one to use each where it is strong, and avoid each where it is weak.

Mechanical logic[edit]

This is the most obvious choice. Mechanical logic offers the potential for incredible speed, yet requires a medium to generate useful signals or to create delay (hence, to create repeaters), and it's hard to use gear assemblies as memory cells. Minecart logic excels at precisely these tasks. Minecart-based power-to-signal and memory are tiny and fast. Minecart-based delay is precisely tunable. The superiority of minecart logic has made water obsolete for these purposes.

Creature logic[edit]

Minecart logic, particularly Larix's powerless MPL logic, has replaced creature logic as the logic-of-last-resort (for when power and fluid are unavailable) or first-resort (for when computation is desired before power can be set up or fluid accessed). However, for the borg logic hobbyist, integration with minecarts suggests interesting possibilities. It is difficult to imagine a simpler clock than a minecart with a "push always after x days" condition, and guided minecarts offer unprecedented control over the path of dwarves.

Fluid logic[edit]

Minecart logic outperforms fluid logic sufficiently to have mostly replaced it. However, the problem of automated fluid delivery may be best solved through some fluid logic techniques, and may suggest some stupid dwarf tricks for those that want to use the fluid capacity of minecarts to compute.

See Also[edit]