├── .gitignore ├── Doxyfile ├── LICENSE ├── Makefile ├── README.md ├── config ├── Makecommon.mk ├── Makedebian.mk ├── Makedeps.mk ├── Makelib.mk ├── Makeplatform.mk ├── Makeprog.mk ├── Makeulamfile.mk ├── Makevars.mk └── Makeversion.mk ├── doc ├── VERSIONS.txt ├── dox │ ├── bibliography.dox │ ├── description.dox │ ├── developernotes.dox │ ├── license.dox │ └── mainpage.dox ├── gpl.txt └── lgpl.txt ├── res ├── elements │ └── README-elements.txt ├── fonts │ ├── Inconsolata.ttf │ ├── Mate-Regular.ttf │ ├── MateSC-Regular.ttf │ ├── OFL.txt │ ├── UbuntuMono-B.ttf │ ├── UbuntuMono-R.ttf │ └── tiny.ttf ├── images │ ├── mfms-icons-ZSHEET.png │ └── t2viz-icons-ZSHEET.png └── mfs │ ├── T2-12-13-start.mfs │ ├── dreg-480x320.mfs │ ├── start-3.0.1.mfs │ ├── start-3.0.2.mfs │ ├── start-3.0.3.mfs │ ├── start-3.0.4-1366x768.mfs │ ├── start-3.0.4.mfs │ ├── start-3.0.5.mfs │ ├── start-3.0.6-1366x768.mfs │ ├── start-3.0.6.mfs │ ├── start-3.1.0-1366x768.mfs │ ├── start-3.1.0.mfs │ ├── start-3.1.1-1366x768.mfs │ ├── start-3.1.1.mfs │ ├── start-3.1.2-1366x768.mfs │ ├── start-3.1.2.mfs │ ├── start-3.1.3-1366x768.mfs │ ├── start-3.1.3.mfs │ ├── start-3.2.0.mfs │ ├── start-3.2.1.mfs │ ├── start-3.2.2.mfs │ ├── start-3.3.0.mfs │ ├── start-4.0.0.mfs │ ├── start-5.0.0.mfs │ ├── start-5.0.5.mfs │ └── start-5.1.0.mfs ├── spikes ├── connection │ ├── Connection.h │ └── ConnectionTest.cpp ├── thdque │ ├── Makefile │ ├── itype.h │ ├── que.h │ ├── que.tcc │ ├── spiketests.h │ ├── thdque │ └── thdque.cpp └── video │ ├── Makefile │ ├── video │ └── video.c ├── src ├── Makefile ├── core │ ├── Makefile │ ├── include │ │ ├── AbstractChannel.h │ │ ├── Atom.h │ │ ├── AtomConfig.h │ │ ├── AtomSerializer.h │ │ ├── Base.h │ │ ├── BitField.h │ │ ├── BitStorage.h │ │ ├── BitStorage.tcc │ │ ├── BitVector.h │ │ ├── BitVector.tcc │ │ ├── ByteSerializable.h │ │ ├── ByteSink.h │ │ ├── ByteSink.tcc │ │ ├── ByteSource.h │ │ ├── CacheProcessor.h │ │ ├── CacheProcessor.tcc │ │ ├── CastOps.h │ │ ├── ChannelEnd.h │ │ ├── CharBufferByteSink.h │ │ ├── CharBufferByteSource.h │ │ ├── ColorMap.h │ │ ├── ColorMaps.h │ │ ├── Dirs.h │ │ ├── Drawable.h │ │ ├── Element.h │ │ ├── Element.tcc │ │ ├── ElementTable.h │ │ ├── ElementTable.tcc │ │ ├── ElementTypeNumberMap.h │ │ ├── ElementTypeNumberMap.tcc │ │ ├── ElementUtils.h │ │ ├── ElementUtils.tcc │ │ ├── Element_Empty.h │ │ ├── EventConfig.h │ │ ├── EventHistoryBuffer.h │ │ ├── EventHistoryBuffer.tcc │ │ ├── EventHistoryItem.h │ │ ├── EventHistoryItem.tcc │ │ ├── EventWindow.h │ │ ├── EventWindow.tcc │ │ ├── EventWindowRenderer.h │ │ ├── EventWindowRenderer.tcc │ │ ├── ExperimentValues.h │ │ ├── FXP.h │ │ ├── Fail.h │ │ ├── FailCodes.h │ │ ├── Format.h │ │ ├── GlobalHooks.h │ │ ├── IsLocal.h │ │ ├── LineCountingByteSource.h │ │ ├── LineTailByteSink.h │ │ ├── Logger.h │ │ ├── LonglivedLock.h │ │ ├── MDist.h │ │ ├── MDist.tcc │ │ ├── MFMSTile.h │ │ ├── MFMSTile.tcc │ │ ├── Mutex.h │ │ ├── OverflowableCharBufferByteSink.h │ │ ├── P3Atom.h │ │ ├── PSym.h │ │ ├── Packet.h │ │ ├── PacketIO.h │ │ ├── PacketIO.tcc │ │ ├── Parameter.h │ │ ├── Parameter.tcc │ │ ├── Parity2D_4x4.h │ │ ├── Point.h │ │ ├── Point.tcc │ │ ├── RandMT.h │ │ ├── Random.h │ │ ├── Rect.h │ │ ├── Sense.h │ │ ├── Site.h │ │ ├── SizedTile.h │ │ ├── StdEventConfig.h │ │ ├── TeeByteSink.h │ │ ├── Tile.h │ │ ├── Tile.tcc │ │ ├── UUID.h │ │ ├── UlamByteWrappers.h │ │ ├── UlamClass.h │ │ ├── UlamClass.tcc │ │ ├── UlamClassRegistry.h │ │ ├── UlamClassRegistry.tcc │ │ ├── UlamContext.h │ │ ├── UlamContext.tcc │ │ ├── UlamContextEvent.h │ │ ├── UlamContextEvent.tcc │ │ ├── UlamContextRestricted.h │ │ ├── UlamContextRestricted.tcc │ │ ├── UlamDefs.h │ │ ├── UlamElement.h │ │ ├── UlamElement.tcc │ │ ├── UlamQuark.h │ │ ├── UlamQuark.tcc │ │ ├── UlamRef.h │ │ ├── UlamRef.tcc │ │ ├── UlamRefMutable.h │ │ ├── UlamRefMutable.tcc │ │ ├── UlamTransient.h │ │ ├── UlamTransient.tcc │ │ ├── UlamTypeInfo.h │ │ ├── UlamTypeInfo.tcc │ │ ├── UlamVTableEntry.h │ │ ├── Util.h │ │ ├── VD.h │ │ ├── VD.tcc │ │ ├── Version.h │ │ ├── WindowScanner.h │ │ ├── WindowScanner.tcc │ │ ├── ZStringByteSource.h │ │ └── itype.h │ └── src │ │ ├── AbstractChannel.cpp │ │ ├── Atom.cpp │ │ ├── AtomConfig.cpp │ │ ├── AtomSerializer.cpp │ │ ├── Base.cpp │ │ ├── BitField.cpp │ │ ├── BitStorage.cpp │ │ ├── BitVector.cpp │ │ ├── ByteSerializable.cpp │ │ ├── ByteSink.cpp │ │ ├── ByteSource.cpp │ │ ├── CacheProcessor.cpp │ │ ├── CastOps.cpp │ │ ├── ChannelEnd.cpp │ │ ├── CharBufferByteSink.cpp │ │ ├── CharBufferByteSource.cpp │ │ ├── ColorMap.cpp │ │ ├── Dirs.cpp │ │ ├── Drawable.cpp │ │ ├── Element.cpp │ │ ├── ElementTable.cpp │ │ ├── ElementTypeNumberMap.cpp │ │ ├── ElementUtils.cpp │ │ ├── Element_Empty.cpp │ │ ├── EventConfig.cpp │ │ ├── EventHistoryBuffer.cpp │ │ ├── EventHistoryItem.cpp │ │ ├── EventWindow.cpp │ │ ├── EventWindowRenderer.cpp │ │ ├── FXP.cpp │ │ ├── Fail.cpp │ │ ├── FailCodes.cpp │ │ ├── Format.cpp │ │ ├── GlobalHooks.cpp │ │ ├── LineCountingByteSource.cpp │ │ ├── LineTailByteSink.cpp │ │ ├── Logger.cpp │ │ ├── LonglivedLock.cpp │ │ ├── MDist.cpp │ │ ├── MFMSTile.cpp │ │ ├── Mutex.cpp │ │ ├── OverflowableCharBufferByteSink.cpp │ │ ├── P3Atom.cpp │ │ ├── PSym.cpp │ │ ├── Packet.cpp │ │ ├── PacketIO.cpp │ │ ├── Parameter.cpp │ │ ├── Parity2D_4x4.cpp │ │ ├── Parity2D_4x4_tables.src │ │ ├── Point.cpp │ │ ├── Random.cpp │ │ ├── Rect.cpp │ │ ├── Sense.cpp │ │ ├── Site.cpp │ │ ├── SizedTile.cpp │ │ ├── StdEventConfig.cpp │ │ ├── TeeByteSink.cpp │ │ ├── Tile.cpp │ │ ├── UUID.cpp │ │ ├── UlamClass.cpp │ │ ├── UlamClassRegistry.cpp │ │ ├── UlamContext.cpp │ │ ├── UlamContextEvent.cpp │ │ ├── UlamContextRestricted.cpp │ │ ├── UlamDefs.cpp │ │ ├── UlamElement.cpp │ │ ├── UlamQuark.cpp │ │ ├── UlamRef.cpp │ │ ├── UlamRefMutable.cpp │ │ ├── UlamTransient.cpp │ │ ├── UlamTypeInfo.cpp │ │ ├── UlamVTableEntry.cpp │ │ ├── Util.cpp │ │ ├── VD.cpp │ │ ├── Version.cpp │ │ ├── WindowScanner.cpp │ │ ├── ZStringByteSource.cpp │ │ ├── itype.cpp │ │ ├── randmt.cpp │ │ └── readme-mt.txt ├── drivers │ ├── Makefile │ ├── mfmbigtile │ │ ├── Makefile │ │ ├── include │ │ │ └── main.h │ │ └── src │ │ │ └── main.cpp │ ├── mfmc │ │ ├── Makefile │ │ ├── Makefile-CL.mk │ │ ├── Makefile-GUI.mk │ │ ├── include │ │ │ ├── TileSizes.inc │ │ │ └── main.h │ │ └── src │ │ │ └── main.cpp │ ├── mfmdha │ │ ├── Makefile │ │ ├── include │ │ │ ├── Element_Bar.h │ │ │ ├── Element_Boids.cpp │ │ │ ├── Element_Boids.h │ │ │ ├── Element_Boids1.cpp │ │ │ ├── Element_Boids1.h │ │ │ ├── Element_Boids2.cpp │ │ │ ├── Element_Boids2.h │ │ │ ├── Element_DBar.h │ │ │ ├── Element_MQBar.h │ │ │ ├── Element_Mover.h │ │ │ ├── Element_Pair.h │ │ │ ├── Element_QBar.h │ │ │ ├── Element_SBar.h │ │ │ ├── Vector.h │ │ │ └── main.h │ │ └── src │ │ │ ├── Element_Bar.cpp │ │ │ ├── Element_DBar.cpp │ │ │ ├── Element_MQBar.cpp │ │ │ ├── Element_QBar.cpp │ │ │ ├── Element_SBar.cpp │ │ │ ├── Vector.cpp │ │ │ └── main.cpp │ ├── mfmheadless │ │ ├── Makefile │ │ ├── include │ │ │ └── main.h │ │ └── src │ │ │ └── main.cpp │ ├── mfmsim │ │ ├── Makefile │ │ ├── include │ │ │ └── main.h │ │ └── src │ │ │ └── main.cpp │ ├── mfmt2-old │ │ ├── Makefile │ │ ├── Makefile-CL.mk │ │ ├── Makefile-GUI.mk │ │ ├── include │ │ │ ├── FlashTraffic.h │ │ │ ├── ITCLocks.h │ │ │ ├── MFMIO.h │ │ │ ├── MFMT2Constants.h │ │ │ ├── PacketFIFO.h │ │ │ ├── TileSizes.inc │ │ │ └── main.h │ │ ├── notes │ │ │ ├── 201906240220-hack-mouse-notes.txt │ │ │ ├── 201906240312-tslib-support-new-attempt.txt │ │ │ ├── 201907131241-status-display-notes.txt │ │ │ ├── 201907261108-real-lock-notes.txt │ │ │ ├── 201908121746-real-packet-notes.txt │ │ │ └── 201908241146-closed-cxns-notes.txt │ │ └── src │ │ │ ├── FlashTraffic.cpp │ │ │ ├── ITCLocks.cpp │ │ │ ├── MFMIO.cpp │ │ │ ├── MFMT2Constants.cpp │ │ │ ├── PacketFIFO.cpp │ │ │ └── main.cpp │ ├── mfmt2 │ │ ├── Makefile │ │ ├── include │ │ │ ├── ADCCtl.h │ │ │ ├── CPUFreq.h │ │ │ ├── ChooserPanel.h │ │ │ ├── Circuit.h │ │ │ ├── EWSet.h │ │ │ ├── Engine.h │ │ │ ├── FlashCommands.h │ │ │ ├── FlashTraffic.h │ │ │ ├── ITCIcons.h │ │ │ ├── ITCIterator.h │ │ │ ├── ITCStatus.h │ │ │ ├── ITCStatusPanel.h │ │ │ ├── IWeave.h │ │ │ ├── LogPanel.h │ │ │ ├── Menu.h │ │ │ ├── SDLI.h │ │ │ ├── SimLogPanel.h │ │ │ ├── Sites.h │ │ │ ├── T2CDMPanel.h │ │ │ ├── T2DrawConfigPanel.h │ │ │ ├── T2EventWindow.h │ │ │ ├── T2FlashTrafficManager.h │ │ │ ├── T2GridPanel.h │ │ │ ├── T2ITC.h │ │ │ ├── T2InfoPanel.h │ │ │ ├── T2RadioButton.h │ │ │ ├── T2RootPanel.h │ │ │ ├── T2Tile.h │ │ │ ├── T2TileStats.h │ │ │ ├── T2TimeQueuePanel.h │ │ │ ├── T2TitleCard.h │ │ │ ├── T2TracePanel.h │ │ │ ├── T2UIComponents.h │ │ │ ├── T2VizConstants.h │ │ │ ├── Trace.h │ │ │ ├── TraceLogInfo.h │ │ │ ├── TraceTypes.h │ │ │ ├── UlamEventSystem.h │ │ │ ├── Utils12.h │ │ │ ├── VizConfig.h │ │ │ ├── Weaver.h │ │ │ ├── WrappedText.h │ │ │ └── main.h │ │ ├── notes │ │ │ ├── 202006120116-notes.txt │ │ │ ├── 202009231447-flash-traffic-notes.txt │ │ │ ├── 202010261444-trace-to-mem-notes.txt │ │ │ ├── 202012120105-intertile-evts-debug-notes.txt │ │ │ ├── 202012290413-ulam-intertile-notes.txt │ │ │ ├── 202202171236-inject-flash-traffic-notes.txt │ │ │ └── 202302050932-mfzid-redux-notes.txt │ │ ├── src │ │ │ ├── ADCCtl.cpp │ │ │ ├── CPUFreq.cpp │ │ │ ├── ChooserPanel.cpp │ │ │ ├── Circuit.cpp │ │ │ ├── EWSet.cpp │ │ │ ├── Engine.cpp │ │ │ ├── FlashCommands.cpp │ │ │ ├── FlashTraffic.cpp │ │ │ ├── ITCIcons.cpp │ │ │ ├── ITCIterator.cpp │ │ │ ├── ITCStatus.cpp │ │ │ ├── ITCStatusPanel.cpp │ │ │ ├── IWeave.cpp │ │ │ ├── LogPanel.cpp │ │ │ ├── Menu.cpp │ │ │ ├── SDLI.cpp │ │ │ ├── SimLogPanel.cpp │ │ │ ├── Sites.cpp │ │ │ ├── T2CDMPanel.cpp │ │ │ ├── T2DrawConfigPanel.cpp │ │ │ ├── T2EventWindow.cpp │ │ │ ├── T2FlashTrafficManager.cpp │ │ │ ├── T2GridPanel.cpp │ │ │ ├── T2ITC.cpp │ │ │ ├── T2InfoPanel.cpp │ │ │ ├── T2RadioButton.cpp │ │ │ ├── T2RootPanel.cpp │ │ │ ├── T2Tile.cpp │ │ │ ├── T2TileStats.cpp │ │ │ ├── T2TimeQueuePanel.cpp │ │ │ ├── T2TitleCard.cpp │ │ │ ├── T2TracePanel.cpp │ │ │ ├── T2UIComponents.cpp │ │ │ ├── T2VizConstants.cpp │ │ │ ├── Trace.cpp │ │ │ ├── TraceLogInfo.cpp │ │ │ ├── TraceTypes.cpp │ │ │ ├── UlamEventSystem.cpp │ │ │ ├── VizConfig.cpp │ │ │ ├── Weaver.cpp │ │ │ ├── WrappedText.cpp │ │ │ └── main.cpp │ │ └── wconfig.pl │ ├── mfmtest │ │ ├── Makefile │ │ ├── include │ │ │ └── main.h │ │ └── src │ │ │ └── main.cpp │ ├── mfzrun │ │ ├── Makefile │ │ ├── common.pl.inc │ │ ├── mfm-config.tmpl │ │ ├── mfzmake.tmpl │ │ └── mfzrun.tmpl │ ├── stub │ │ ├── Makefile │ │ ├── include │ │ │ ├── Stub.h │ │ │ └── main.h │ │ └── src │ │ │ ├── Stub.cpp │ │ │ └── main.cpp │ └── ulamtest │ │ ├── Makefile │ │ ├── include │ │ └── main.h │ │ └── src │ │ └── main.cpp ├── elements │ ├── Makefile │ ├── include │ │ ├── AbstractElement_ForkBomb.h │ │ ├── AbstractElement_Reprovert.h │ │ ├── AbstractElement_WaPat.h │ │ ├── AbstractElement_Wanderer.h │ │ ├── AbstractElement_Xtal.h │ │ ├── CityConstants.h │ │ ├── Element_AntiForkBomb.h │ │ ├── Element_Block.h │ │ ├── Element_CheckerForkBlue.h │ │ ├── Element_CheckerForkBlue.tcc │ │ ├── Element_CheckerForkRed.h │ │ ├── Element_CheckerForkRed.tcc │ │ ├── Element_City_Building.h │ │ ├── Element_City_Building.tcc │ │ ├── Element_City_Car.h │ │ ├── Element_City_Car.tcc │ │ ├── Element_City_Intersection.h │ │ ├── Element_City_Intersection.tcc │ │ ├── Element_City_Park.h │ │ ├── Element_City_Sidewalk.h │ │ ├── Element_City_Sidewalk.tcc │ │ ├── Element_City_Street.h │ │ ├── Element_City_Street.tcc │ │ ├── Element_Collector.h │ │ ├── Element_Consumer.h │ │ ├── Element_Creg.h │ │ ├── Element_Data.h │ │ ├── Element_Dmover.h │ │ ├── Element_Dreg.h │ │ ├── Element_Emitter.h │ │ ├── Element_Fish.h │ │ ├── Element_ForkBomb1.h │ │ ├── Element_ForkBomb2.h │ │ ├── Element_ForkBomb3.h │ │ ├── Element_Indexed.h │ │ ├── Element_MQBar.h │ │ ├── Element_Mover.h │ │ ├── Element_Res.h │ │ ├── Element_Rocket.h │ │ ├── Element_Shark.h │ │ ├── Element_Sorter.h │ │ ├── Element_Template.h │ │ ├── Element_Wall.h │ │ ├── Element_Wanderer_Cyan.h │ │ ├── Element_Wanderer_Magenta.h │ │ ├── Element_Xtal_General.h │ │ ├── Element_Xtal_L12.h │ │ ├── Element_Xtal_R12.h │ │ ├── Element_Xtal_Sq1.h │ │ ├── StdElements.h │ │ └── StdElements.tcc │ └── src │ │ ├── AbstractElement_ForkBomb.cpp │ │ ├── AbstractElement_Reprovert.cpp │ │ ├── AbstractElement_WaPat.cpp │ │ ├── AbstractElement_Wanderer.cpp │ │ ├── AbstractElement_Xtal.cpp │ │ ├── Element_AntiForkBomb.cpp │ │ ├── Element_Block.cpp │ │ ├── Element_CheckerForkBlue.cpp │ │ ├── Element_CheckerForkRed.cpp │ │ ├── Element_Collector.cpp │ │ ├── Element_Consumer.cpp │ │ ├── Element_Data.cpp │ │ ├── Element_Dmover.cpp │ │ ├── Element_Dreg.cpp │ │ ├── Element_Emitter.cpp │ │ ├── Element_Fish.cpp │ │ ├── Element_ForkBomb1.cpp │ │ ├── Element_ForkBomb2.cpp │ │ ├── Element_ForkBomb3.cpp │ │ ├── Element_Indexed.cpp │ │ ├── Element_MQBar.cpp │ │ ├── Element_Mover.cpp │ │ ├── Element_Res.cpp │ │ ├── Element_Rocket.cpp │ │ ├── Element_Shark.cpp │ │ ├── Element_Sorter.cpp │ │ ├── Element_Wall.cpp │ │ ├── Element_Wanderer_Cyan.cpp │ │ ├── Element_Wanderer_Magenta.cpp │ │ ├── Element_Xtal_General.cpp │ │ ├── Element_Xtal_L12.cpp │ │ ├── Element_Xtal_R12.cpp │ │ ├── Element_Xtal_Sq1.cpp │ │ └── StdElements.cpp ├── gui │ ├── Makefile │ ├── include │ │ ├── AbstractButton.h │ │ ├── AbstractCheckbox.h │ │ ├── AbstractGUIDriver.h │ │ ├── AbstractGUIDriverButtons.h │ │ ├── AbstractGUIDriverTools.h │ │ ├── AbstractRadioButton.h │ │ ├── AssetManager.h │ │ ├── AtomViewPanel.h │ │ ├── AtomViewPanel.tcc │ │ ├── Camera.h │ │ ├── CloseWindowButton.h │ │ ├── DrawableSDL.h │ │ ├── Drawing.h │ │ ├── DriverButtonPanel.h │ │ ├── EditingTool.h │ │ ├── EventWindowRendererGUI.h │ │ ├── ExternalConfigSectionGUI.h │ │ ├── ExternalConfigSectionGUI.tcc │ │ ├── GUIConstants.h │ │ ├── GridPanel.h │ │ ├── GridPanel.tcc │ │ ├── GridTool.h │ │ ├── GridTool.tcc │ │ ├── HelpPanel.h │ │ ├── Keyboard.h │ │ ├── Label.h │ │ ├── Mouse.h │ │ ├── MovablePanel.h │ │ ├── NeighborSelectPanel.h │ │ ├── Panel.h │ │ ├── ParameterController.h │ │ ├── ParameterControllerBool.h │ │ ├── ReplayPanel.h │ │ ├── ReplayPanel.tcc │ │ ├── RootPanel.h │ │ ├── Slider.h │ │ ├── StatisticsPanel.h │ │ ├── StatisticsPanel.tcc │ │ ├── StdPanel.h │ │ ├── TextPanel.h │ │ ├── TileRenderer.h │ │ ├── TileRenderer.tcc │ │ ├── ToolboxPanel.h │ │ └── TreeViewPanel.h │ └── src │ │ ├── AbstractButton.cpp │ │ ├── AbstractCheckbox.cpp │ │ ├── AbstractGUIDriver.cpp │ │ ├── AbstractGUIDriverButtons.cpp │ │ ├── AbstractGUIDriverTools.cpp │ │ ├── AbstractRadioButton.cpp │ │ ├── AssetManager.cpp │ │ ├── AtomViewPanel.cpp │ │ ├── Camera.cpp │ │ ├── DrawableSDL.cpp │ │ ├── Drawing.cpp │ │ ├── DriverButtonPanel.cpp │ │ ├── EditingTool.cpp │ │ ├── ExternalConfigSectionGUI.cpp │ │ ├── GUIConstants.cpp │ │ ├── GridPanel.cpp │ │ ├── GridTool.cpp │ │ ├── HelpPanel.cpp │ │ ├── Keyboard.cpp │ │ ├── Label.cpp │ │ ├── Mouse.cpp │ │ ├── MovablePanel.cpp │ │ ├── NeighborSelectPanel.cpp │ │ ├── Panel.cpp │ │ ├── ParameterController.cpp │ │ ├── ParameterControllerBool.cpp │ │ ├── ReplayPanel.cpp │ │ ├── RootPanel.cpp │ │ ├── Slider.cpp │ │ ├── StatisticsPanel.cpp │ │ ├── StdPanel.cpp │ │ ├── TextPanel.cpp │ │ ├── TileRenderer.cpp │ │ ├── ToolboxPanel.cpp │ │ └── TreeViewPanel.cpp ├── images │ ├── Makefile │ └── icons │ │ ├── Makefile │ │ ├── generateT2VizZSheetFromMasterRowSVG.pl │ │ ├── generateZSheetFromMasterRowSVG.pl │ │ ├── mfms-icons.svg │ │ └── t2viz-icons.svg ├── platform-linux │ ├── MakePlatform.mk │ ├── Makefile │ ├── include │ │ ├── FailPlatformSpecific.h │ │ └── IsLocalPlatformSpecific.h │ └── src │ │ ├── FailPlatformSpecific.cpp │ │ └── IsLocalPlatformSpecific.cpp ├── platform-tile │ ├── MakePlatform.mk │ ├── Makefile │ ├── include │ │ ├── FailPlatformSpecific.h │ │ └── IsLocalPlatformSpecific.h │ └── src │ │ ├── FailPlatformSpecific.cpp │ │ └── IsLocalPlatformSpecific.cpp ├── sim │ ├── Makefile │ ├── include │ │ ├── AbstractDriver.h │ │ ├── AbstractDualDriver.h │ │ ├── AbstractHeadlessDriver.h │ │ ├── ConfigFunctionCall.h │ │ ├── ConfigFunctionCall.tcc │ │ ├── DateTimeStamp.h │ │ ├── DebugTools.h │ │ ├── DebugTools.tcc │ │ ├── ElementLibrary.h │ │ ├── ElementLibraryLoader.h │ │ ├── ElementRegistry.h │ │ ├── ElementRegistry.tcc │ │ ├── ExternalConfig.h │ │ ├── ExternalConfig.tcc │ │ ├── ExternalConfigSection.h │ │ ├── ExternalConfigSection.tcc │ │ ├── ExternalConfigSectionDriver.h │ │ ├── ExternalConfigSectionDriver.tcc │ │ ├── ExternalConfigSectionGrid.h │ │ ├── ExternalConfigSectionGrid.tcc │ │ ├── FileByteSink.h │ │ ├── FileByteSource.h │ │ ├── Grid.h │ │ ├── Grid.tcc │ │ ├── GridConfig.h │ │ ├── GridTransceiver.h │ │ ├── Utils.h │ │ └── VArguments.h │ └── src │ │ ├── AbstractDriver.cpp │ │ ├── AbstractDualDriver.cpp │ │ ├── ConfigFunctionCall.cpp │ │ ├── DateTimeStamp.cpp │ │ ├── DebugTools.cpp │ │ ├── ElementLibrary.cpp │ │ ├── ElementLibraryLoader.cpp │ │ ├── ElementRegistry.cpp │ │ ├── ExternalConfig.cpp │ │ ├── ExternalConfigSection.cpp │ │ ├── ExternalConfigSectionGrid.cpp │ │ ├── FileByteSink.cpp │ │ ├── FileByteSource.cpp │ │ ├── Grid.cpp │ │ ├── GridConfig.cpp │ │ ├── GridTransceiver.cpp │ │ ├── Utils.cpp │ │ └── VArguments.cpp ├── t2lib │ ├── Makefile │ ├── include │ │ ├── RectIterator.h │ │ ├── SHA256ish.h │ │ ├── T2Constants.h │ │ ├── T2Main.h │ │ ├── T2PacketBuffer.h │ │ ├── T2Types.h │ │ ├── T2Utils.h │ │ ├── TimeQueue.h │ │ ├── TimeoutAble.h │ │ └── UniqueTime.h │ └── src │ │ ├── RectIterator.cpp │ │ ├── SHA256ish.cpp │ │ ├── T2Constants.cpp │ │ ├── T2Main.cpp │ │ ├── T2PacketBuffer.cpp │ │ ├── T2Types.cpp │ │ ├── T2Utils.cpp │ │ ├── TimeQueue.cpp │ │ ├── TimeoutAble.cpp │ │ └── UniqueTime.cpp └── test │ ├── Makefile │ ├── include │ ├── BitRef_Test.h │ ├── BitVector_Test.h │ ├── ByteSink_Test.h │ ├── ByteSource_Test.h │ ├── ColorMap_Test.h │ ├── ElementRegistry_Test.h │ ├── EventWindow_Test.h │ ├── ExternalConfig_Test.h │ ├── FXP_Test.h │ ├── Fail_Test.h │ ├── GridTransceiver_Test.h │ ├── Grid_Test.h │ ├── LineTailByteSink_Test.h │ ├── Logger_Test.h │ ├── MDist_Test.h │ ├── OverflowableCharBufferByteSink_Test.h │ ├── PSym_Test.h │ ├── Parity2D_4x4_Test.h │ ├── Point_Test.h │ ├── Random_Test.h │ ├── Test_Common.h │ ├── Tests.h │ ├── Tile_Test.h │ ├── UUID_Test.h │ ├── UlamElement_Test.h │ ├── UlamRef_Test.h │ └── VArguments_Test.h │ └── src │ ├── BitRef_Test.cpp │ ├── BitVector_Test.cpp │ ├── ByteSink_Test.cpp │ ├── ByteSource_Test.cpp │ ├── ColorMap_Test.cpp │ ├── ElementRegistry_Test.cpp │ ├── EventWindow_Test.cpp │ ├── ExternalConfig_Test.cpp │ ├── FXP_Test.cpp │ ├── Fail_Test.cpp │ ├── GridTransceiver_Test.cpp │ ├── Grid_Test.cpp │ ├── LineTailByteSink_Test.cpp │ ├── Logger_Test.cpp │ ├── MDist_test.cpp │ ├── OverflowableCharBufferByteSink_Test.cpp │ ├── PSym_Test.cpp │ ├── Parity2D_4x4_Test.cpp │ ├── Point_Test.cpp │ ├── Random_Test.cpp │ ├── Test_Common.cpp │ ├── Tile_Test.cpp │ ├── UUID_Test.cpp │ ├── UlamElement_Test.cpp │ ├── UlamRef_Test.cpp │ └── VArguments_Test.cpp └── tools ├── README.txt ├── RenderPNGsCenteredToHD ├── img_converter.sh └── splotter ├── 2x1x40x10k-dreg ├── samplingbias2.pdf └── sfc.plot ├── 2x1x40x20k-dreg ├── Makefile ├── ppmToGnuPlot.pl ├── samplingbias-grid.plt └── samplingbias2.plt ├── 2x2x40x20k-dreg ├── Makefile ├── ppmToGnuPlot.pl ├── samplingbias-grid.plt └── samplingbias2.plt ├── 2x3x40x20k-dreg ├── Makefile ├── ppmToGnuPlot.pl ├── samplingbias-grid.plt └── samplingbias2.plt ├── 2x4x40x20k-dreg ├── Makefile ├── ppmToGnuPlot.pl ├── samplingbias-grid.plt └── samplingbias2.plt ├── 2x5x40x20k-dreg ├── Makefile ├── ppmToGnuPlot.pl ├── samplingbias-grid.plt └── samplingbias2.plt ├── 2x6x40x20k-dreg ├── Makefile ├── ppmToGnuPlot.pl ├── samplingbias-grid.plt └── samplingbias2.plt ├── 2x7x40x20k-dreg ├── Makefile ├── ppmToGnuPlot.pl ├── samplingbias-grid.plt └── samplingbias2.plt ├── 3x5x40x10k-dreg ├── samplingbias2.pdf └── sfc.plot ├── 3x5x40x20k-dreg ├── Makefile ├── average.pdf ├── grid.pdf ├── ppmToGnuPlot.pl ├── samplingbias-grid.plt ├── samplingbias2.plt ├── sfc-grid.plot └── sfc.plot ├── ppmToGnuPlot.pl ├── samplingbias-grid.plt └── samplingbias2.plt /.gitignore: -------------------------------------------------------------------------------- 1 | # Compiled Object files 2 | *.slo 3 | *.lo 4 | *.o 5 | 6 | # Compiled Dynamic libraries 7 | *.so 8 | *.dylib 9 | 10 | # Compiled Static libraries 11 | *.lai 12 | *.la 13 | *.a 14 | 15 | # Ignore emacs backup files 16 | *~ 17 | 18 | # Ignore executables 19 | bin/* 20 | 21 | # Ignore build and lib dirs 22 | build 23 | lib/* 24 | 25 | # Ignore doxygen-generated output 26 | doc/ref 27 | 28 | # Ignore the code log 29 | codelog.txt 30 | 31 | # We don't want ppms 32 | *.ppm 33 | 34 | # Don't track spikes for now 35 | spikes/ 36 | 37 | # Don't need the generated *.inc files 38 | src/elements/include/StdElements.inc 39 | src/elements/include/StdElementsHeaders.inc 40 | 41 | # Other generated files 42 | res/elements/demos.dat 43 | res/mfmt2/wconfig.txt 44 | 45 | # Using Google's lint but don't want to commit it. 46 | tools/cpplint.py 47 | 48 | # Leave out unofficially '-held' files 49 | *-hold 50 | 51 | # Ignore the version file made for non-git builds 52 | *TREEVERSION.mk 53 | 54 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | MFM codebase 2 | ============ 3 | 4 | C++ implementation of the Movable Feast Machine computer architecture 5 | 6 | This code library, and its associated programs, examples, and 7 | documentation---collectively described as the "MFM codebase"---is 8 | free software; you can redistribute it and/or modify it under the 9 | terms of the GNU Lesser General Public License as published by the 10 | Free Software Foundation; either version 3 of the License, or (at your 11 | option) any later version. 12 | -------------------------------------------------------------------------------- /config/Makedebian.mk: -------------------------------------------------------------------------------- 1 | # Extra stuff for debian, only on 'make install' 2 | #DEB_PROGRAMS_TO_INSTALL += mfmcl mfmcl_s mfmcl_m mfmcl_l 3 | #DEB_PROGRAMS_TO_INSTALL += mfms mfms_s mfms_m mfms_l 4 | ifeq ($(PLATFORM), linux) 5 | DEB_PROGRAMS_TO_INSTALL += mfms 6 | endif 7 | ifeq ($(PLATFORM), tile) 8 | DEB_PROGRAMS_TO_INSTALL += mfmt2 9 | endif 10 | #DEB_PROGRAMS_TO_INSTALL += mfmtest 11 | DEB_PROGRAMS_TO_INSTALL += mfzmake mfzrun 12 | DEB_PROGRAMS_TO_INSTALL += mfm-config 13 | DEB_PROGRAMS_PATHS_TO_INSTALL := $(DEB_PROGRAMS_TO_INSTALL:%=bin/%) 14 | DEB_MFM_BINDIR := $(DESTDIR)/usr/bin 15 | DEB_MFM_RESDIR := $(DESTDIR)/usr/share/mfm/res 16 | 17 | # For mfm-config 18 | export DEB_MFM_BINDIR 19 | export DEB_MFM_RESDIR 20 | 21 | # We're recursing rather than depending on 'all' so that the 22 | # $(PLATFORMS) mechanism doesn't need to know about install. 23 | install: FORCE 24 | @COMMANDS=1 make -k all 25 | @#COMMANDS=1 make -k -C src/drivers/mfzrun all 26 | mkdir -p $(DEB_MFM_BINDIR) 27 | cp -a $(DEB_PROGRAMS_PATHS_TO_INSTALL) $(DEB_MFM_BINDIR) 28 | mkdir -p $(DEB_MFM_RESDIR) 29 | cp -r res/* $(DEB_MFM_RESDIR) 30 | @# MAN AND DOC? 31 | 32 | version: FORCE 33 | @echo $(MFM_VERSION_NUMBER) 34 | -------------------------------------------------------------------------------- /config/Makedeps.mk: -------------------------------------------------------------------------------- 1 | # We need a kickstart rule to get .d files going, before their first 2 | # real compile-time generation. So make empty .d's, if they don't 3 | # already exist. 4 | $(BUILDDIR)/%.d: $(BUILDDIR) 5 | @[ -e $@ ] || >$@ 6 | 7 | $(BUILDDIR): 8 | @mkdir -p $@ 9 | 10 | # After we make .d's, let's keep them 11 | .PRECIOUS: $(BUILDDIR)/%.d 12 | 13 | # Suck in generated autodependencies 14 | AUTODEPS:=$(wildcard $(BUILDDIR)/*.d) 15 | -include $(AUTODEPS) 16 | -------------------------------------------------------------------------------- /config/Makelib.mk: -------------------------------------------------------------------------------- 1 | # This makefile to build an archive file from a single directory of source 2 | include $(BASEDIR)/config/Makecommon.mk 3 | 4 | CSOURCES := $(wildcard src/*.c) 5 | COBJECTS := $(patsubst src/%.c,$(BUILDDIR)/%.o,$(CSOURCES)) 6 | 7 | CPPSOURCES := $(wildcard src/*.cpp) 8 | CPPOBJECTS := $(patsubst src/%.cpp,$(BUILDDIR)/%.o,$(CPPSOURCES)) 9 | 10 | SSOURCES := $(wildcard src/*.S) 11 | SOBJECTS := $(patsubst src/%.S,$(BUILDDIR)/%.o,$(SSOURCES)) 12 | 13 | SOURCES := $(CSOURCES) $(CPPSOURCES) $(SSOURCES) 14 | OBJECTS := $(COBJECTS) $(CPPOBJECTS) $(SOBJECTS) 15 | 16 | HEADERS := $(wildcard include/*) 17 | 18 | ALLDEP += $(HEADERS) 19 | 20 | all: $(ARCHIVEPATH) commondeps 21 | 22 | 23 | commondeps: FORCE 24 | mkdir -p $(BASEDIR)/res/elements 25 | 26 | $(ARCHIVEPATH): $(BUILDDIR) $(OBJECTS) 27 | $(AR) ruc "$@" $(OBJECTS) 28 | 29 | clean: 30 | rm -f $(OBJECTS) 31 | 32 | include $(BASEDIR)/config/Makedeps.mk 33 | 34 | realclean: clean 35 | rm -f $(AUTODEPS) # AUTODEPS 36 | rm -f $(ARCHIVEPATH) 37 | rm -f src/*~ include/*~ *~ 38 | rm -f $(BUILDDIR)/* 39 | 40 | .PHONY: clean realclean FORCE 41 | 42 | -------------------------------------------------------------------------------- /config/Makeplatform.mk: -------------------------------------------------------------------------------- 1 | # This needs to be reworked, but for now (heh), we're saying that 2 | # the x86's are platform 'linux' and armv7l (+ nodename beaglebone) 3 | # is platform 'tile' (need nodename else generic armhf build fails 4 | # on launchpad) 5 | 6 | ifdef FORCE_MACHINE_TYPE 7 | MACHINE_TYPE:=$(FORCE_MACHINE_TYPE) 8 | else 9 | MACHINE_TYPE:=$(shell uname -m) 10 | endif 11 | 12 | PLATFORM:= 13 | ifeq ($(MACHINE_TYPE), x86_64) 14 | PLATFORM:=linux 15 | endif 16 | ifeq ($(MACHINE_TYPE), x86) 17 | PLATFORM:=linux 18 | endif 19 | ifeq ($(MACHINE_TYPE), i386) 20 | PLATFORM:=linux 21 | endif 22 | ifeq ($(MACHINE_TYPE), i586) 23 | PLATFORM:=linux 24 | endif 25 | ifeq ($(MACHINE_TYPE), i686) 26 | PLATFORM:=linux 27 | endif 28 | ifeq ($(MACHINE_TYPE), armv7l) 29 | NODE_NAME:=$(shell uname -n) 30 | ifeq ($(NODE_NAME), beaglebone) 31 | PLATFORM:=tile 32 | else 33 | PLATFORM:=linux 34 | endif 35 | endif 36 | 37 | $(info MACHINE TYPE: $(MACHINE_TYPE) / PLATFORM: $(PLATFORM)) 38 | 39 | ifeq ($(PLATFORM),) 40 | $(error unrecognized platform '$(MACHINE_TYPE)') 41 | endif 42 | -------------------------------------------------------------------------------- /config/Makeprog.mk: -------------------------------------------------------------------------------- 1 | # This makefile to build programs from a bunch of libraries 2 | 3 | BINDIR:=$(BASEDIR)/bin 4 | 5 | all: program 6 | 7 | # Our ultimate goal 8 | program: $(BINDIR)/$(COMPONENTNAME) 9 | @cd $(BINDIR); for i in $(COMPONENTALIASES); do ln -f -s $(COMPONENTNAME) $$i; done 10 | 11 | # Get rules to build our main.o 12 | include $(BASEDIR)/config/Makelib.mk 13 | 14 | # We don't have functioning interlibrary dependency tracking because 15 | # we're losers. For now say that if any .a files are touched, we need 16 | # to relink 17 | 18 | ARCHIVES := $(wildcard $(BASEDIR)/build/*/*.a) 19 | 20 | # Aaand don't forget to make our own archive before trying to build 21 | # our program. Given the above, after a 'realclean' $(ARCHIVES) is 22 | # empty. 23 | 24 | ARCHIVES += $(ARCHIVEPATH) 25 | 26 | $(BUILDDIR)/$(COMPONENTNAME).o: src/main.cpp $(ALLDEP) $(BUILDDIR)/%.d 27 | $(GPP) $(OPTS) $(DEBUGS) $(CPPFLAGS) $(DEFINES) -c -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@)" -MT"$(@:%.o=%.d)" -o"$@" "$<" 28 | 29 | $(BINDIR)/$(COMPONENTNAME): $(BUILDDIR)/$(COMPONENTNAME).o $(ALLDEP) $(ARCHIVES) 30 | mkdir -p $(BINDIR) 31 | $(GPP) $(LDFLAGS) $(BUILDDIR)/$(COMPONENTNAME).o $(LIBS) -o $@ 32 | -------------------------------------------------------------------------------- /config/Makeversion.mk: -------------------------------------------------------------------------------- 1 | #### 2 | # THE MFM SYSTEM VERSION IS DEFINED HERE 3 | # 4 | # Changes to this file should be committed alone and last, just prior 5 | # to release, and then HEAD should be tagged appropriately: 6 | # git tag -a -m "Tagging v3.0.5" v3.0.5 7 | # git push origin v3.0.5 8 | 9 | MFM_VERSION_MAJOR:=5 10 | MFM_VERSION_MINOR:=1 11 | MFM_VERSION_REV:=1 12 | 13 | ################## NOTHING BELOW HERE SHOULD NEED TO CHANGE ################## 14 | 15 | MFM_VERSION_NUMBER:=$(MFM_VERSION_MAJOR).$(MFM_VERSION_MINOR).$(MFM_VERSION_REV) 16 | 17 | # Suck in a git rep marker if it's been cached 18 | MFM_TREE_VERSION:=unknown-rev 19 | -include $(BASEDIR)/MFM_TREEVERSION.mk 20 | 21 | # If our dir is writable, and we have git, and there's a repo tag, 22 | # that means we are in the MFM_REPO_BUILD_TIME era, so we should cache 23 | # the tag for use in later eras. 24 | SHOULD_CACHE_REPO_TAG_MFM:=$(shell test -w $(BASEDIR) && which git >/dev/null && cd $(BASEDIR) && git describe >/dev/null 2>&1 && echo YES) 25 | #${info AT<<$(realpath $(BASEDIR))>>=($(SHOULD_CACHE_REPO_TAG_MFM))} 26 | ifeq ($(SHOULD_CACHE_REPO_TAG_MFM),YES) 27 | MFM_TREE_VERSION:=$(shell cd $(BASEDIR) && git describe) 28 | $(shell echo "MFM_TREE_VERSION:=$(MFM_TREE_VERSION)" > $(BASEDIR)/MFM_TREEVERSION.mk) 29 | else 30 | endif 31 | export MFM_TREE_VERSION 32 | -------------------------------------------------------------------------------- /doc/dox/bibliography.dox: -------------------------------------------------------------------------------- 1 | /** 2 | \page bibliography Bibliography 3 | 4 | Links to additional material. 5 | 6 | \section bibPapers Papers 7 | 8 | [Five-page intro from 2011](http://www.cs.unm.edu/~ackley/papers/hotos-11.pdf) 9 | 10 | [Longer 2013 paper](http://comjnl.oxfordjournals.org/content/56/12/1450.full.pdf+html) 11 | (winner of [2014 Wilkes Award](http://www.oxfordjournals.org/our_journals/computer_journal/previouswinners.html)) 12 | 13 | \section bibVideos Videos 14 | 15 | Demos built using (various versions of) the MFM simulator: 16 | 17 | [Distributed city generation](https://www.youtube.com/watch?v=XkSXERxucPc) 18 | 19 | [Abstract plant-herbivore coevolutionary model](https://www.youtube.com/watch?v=jQaXtbrVNaU) 20 | 21 | [Eight particles random walking](https://www.youtube.com/watch?v=mhNuB_U-VTs) 22 | 23 | \section bibTuts Tutorials 24 | 25 | [ULAM programming language tutorial](https://github.com/elenasa/ULAM/wiki/Ulam-Programming-Language) 26 | 27 | \cond 28 | \section bibMisc Miscellaneous 29 | 30 | misc1, misc2 31 | \endcond 32 | */ 33 | 34 | -------------------------------------------------------------------------------- /doc/dox/description.dox: -------------------------------------------------------------------------------- 1 | /** 2 | \page description Overview: Best-effort computing 3 | 4 | This codebase implements a simulator—and, hopefully one day 5 | soon, board support for actual hardware—for a computer 6 | architecture known as the "Movable Feast Machine" (MFM). The MFM 7 | is an indefinitely scalable computer architecture, meaning 8 | that the underlying hardware is organized as a tile that can 9 | be duplicated and plugged together to form an arbitrarily large 10 | machine, without ever running into any a priori design 11 | limit such as running out of addresses. 12 | 13 | Only a very brief overview is provided here; for more information, 14 | see the links in \ref bibliography. 15 | 16 | \section rant-intro Moving beyond traditional computer architecture 17 | 18 | Traditional computing is based on a particular division of labor, 19 | an implicit contract, between hardware and software: Hardware 20 | starts from unruly physical reality and produces automated logic; 21 | software starts from automated logic and produces behavior that is 22 | valuable to pay for the hardware and the software both. 23 | 24 | Traditional computing in a nutshell: Hardware provides \em 25 | reliability while software provides \em desirability. 26 | 27 | */ 28 | 29 | -------------------------------------------------------------------------------- /doc/dox/developernotes.dox: -------------------------------------------------------------------------------- 1 | /** 2 | \page developernotes Notes for developers 3 | 4 | So far, this page is a relatively unstructured list of notes, 5 | warnings, gotchas, etc, targetted for source code developers. 6 | 7 | \section naming Naming issues 8 | 9 | \li With very few exceptions, all names defined in this codebase are 10 | (and shall remain) C++ mangled and in the MFM namespace. 11 | 12 | \li \em All exceptions to the previous point --- any and all names 13 | introduced by this codebase that are not C++ mangled or are outside 14 | the MFM namespace --- begin and must begin with 'MFM'. 15 | 16 | \li Most of the known exceptions to date deal with the failure 17 | handling system, which uses C names for several internal entities, 18 | including: 19 | MFMErrorEnvironment, 20 | MFMFailCodeReason, 21 | MFMFailHere, 22 | MFMFailureCodes, 23 | MFMLongJmpHere, 24 | MFMPrintError, 25 | MFMPrintErrorEnvironment, 26 | MFMPtrToErrEnvStackPtr. 27 | 28 | \section debugging Debugging tips 29 | 30 | \li Put a breakpoint at MFMLongJmpHere to break on every FAIL call 31 | \e before the longjmp has occurred, so you can look around in the 32 | context of the failure with the stack intact. 33 | 34 | 35 | 36 | */ 37 | 38 | -------------------------------------------------------------------------------- /doc/dox/license.dox: -------------------------------------------------------------------------------- 1 | /** 2 | \page license License 3 | 4 | The MFMv2 codebase is 5 | \copyright © 2009--2014 The Regents of the University of New Mexico 6 | 7 | This code library, and its associated programs, examples, and 8 | documentation -- collectively described as the "MFMv2 codebase" -- 9 | is free software; you can redistribute it and/or modify it under the 10 | terms of the GNU Lesser General Public License as published by the 11 | Free Software Foundation; either version 3 of the License, or (at 12 | your option) any later version. 13 | 14 | This library is distributed in the hope that it will be useful, 15 | but WITHOUT ANY WARRANTY; without even the implied warranty of 16 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 17 | Lesser General Public License for more details. 18 | 19 | You should have received a copy of the GNU General Public License 20 | along with this library; if not, write to the Free Software 21 | Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 22 | USA 23 | 24 | */ 25 | 26 | -------------------------------------------------------------------------------- /doc/dox/mainpage.dox: -------------------------------------------------------------------------------- 1 | /** 2 | \mainpage Movable Feast Machine Version 2 Reference Manual 3 |