1. 19 Feb, 2020 2 commits
  2. 10 Feb, 2020 1 commit
  3. 09 Feb, 2020 2 commits
  4. 08 Feb, 2020 1 commit
    • Jean-Paul Chaput's avatar
      Updating socInstaller.py for docker cases. · 2f81f454
      Jean-Paul Chaput authored
      * New: In bootstrap/socInstaller.py, partial redesign of group of commands
          to better handles all the cases. Added support for docker context,
          and added Alliance compilation "alongside" Coriolis (merged install
          tree).
      * Change: In bootstrap/coriolisEnv.py, when run in a docker container we
          no longer can trust the kernel name to guess the OS, as the kernel is
          the one of the host and not the docker guest. This was causing problem
          for determining the Python site-package directory. Now just check all
          possible locations and stop at the first directory found.
      2f81f454
  5. 03 Feb, 2020 2 commits
  6. 23 Jan, 2020 2 commits
    • Jean-Paul Chaput's avatar
      Capacitor & resistor integration in the Slicing Tree. · 057501a8
      Jean-Paul Chaput authored
      * New: In Karakaze/Oceane.py, now also read capacitor & resistors parameters.
          In AnalogDesign.readParameters(), get the capacitor parameters from
          Oceane into the "device spec" (dspec). Translate form OSI unit to
          Coriolis units (F -> pF).
      * Bug: In Bora::NodeSets::create(), Capacitor matrix parameters where never
          read due to a misplaced curly brace (at the matrixRange dynamic_cast<>
          test).
      * Change: In Bora/PyDSlicingNode, now check that the parameter is either
          a StepParameterRange or a MatrixParameterRange.
            Also add a check that the Instance name exists...
      * Bug: In Bora::SlicingPlotWidget::updateSelectedPoint(), as we display
          only the transistor parameters in dynamic labels, do not forget to
          skip resistor and capacitor. Otherwise we end up in out of bound
          access in the vector of labels.
      057501a8
    • Jean-Paul Chaput's avatar
      Added static bloat profile in Katana. · eea67a91
      Jean-Paul Chaput authored
      * Change: In bootstrap/FindBoostrap.cmake, remove the -fsanitize=address
          as it requires the "san" librarie which may be difficult to install.
      * Change: In CRL/symbolic/cmos45/kite.py, decrease the METAL3 pitch from
          10l to 8l. This is for testing with 4 routing metal only technology
          like AMS c35b4 symbolic.
      * Change: In Katana/BloatProfile, add static bloat option, that is, only
          cell bloated in the first pass will be bloated again in subsequent
          ones.
            Add a "katana.bloatOverloadAdd" parameter to more easily control the
          amount added to the computed overload.
      * Change: In Oroshi, start integration of multi capacitors as generator.
          Translate generator parameter into CapacitorStack ones. Add code for
          routing unit capacitor.
      eea67a91
  7. 19 Dec, 2019 1 commit
    • Jean-Paul Chaput's avatar
      Fixe bad Python exception catch for C-launched scripts. · 26610ba8
      Jean-Paul Chaput authored
      * In Hurricane::Viewer::Script::runFunction() & callFunction(), when the
          script returns NULL, do not immediately return but first check if an
          exception has been set. If so, print it *then* clear it.
            Due to not clearing the exception we where seeing one later with
          no relation to the true problem.
      * In Oroshi/python/Rules.py, a bad test structure was discarting all the
          "no layer rule with physical length" in the loading process. It was
          blocked by the physical unit rule special cases.
      26610ba8
  8. 15 Dec, 2019 2 commits
    • Jean-Paul Chaput's avatar
    • Jean-Paul Chaput's avatar
      More configuration parameters for P&R Conductor, for experimenting. · e711ce8d
      Jean-Paul Chaput authored
      * Change: In Hurricane::Viewer::ExceptionWidget & CRL/python/helpers/io.py,
          downscale icons for non-HiDPI screen.
      * Change: In CRL/etc/common/display.py, change the display threshold of
          METAL1 layer so it do not appear at high scaling.
      * New: In Etesian, activate the "setFixedAbHeight()" feature and export it
          to Python. Allows to increase the space margin at constant height.
            To be used by the P&R conductor.
      * Change: In Unicorn/cgt.py, when running a script, insert the current
          working directory at head of the sys.path, not at the end. So installed
          modules do not shadow local one.
      * New: In Anabatic::Edge, new accessor "getRawcapacity()" to know the full
          capacity of the edge, that is, the real maximum number of tracks that
          can go through the associated side.
      * Change: In Katana/BloatProfile/Slice::tagsOverloaded(), bloating policy
          change, now bloat all the instances under the GCell, not only the first
          one.
      * Change: In KatanaEngine::runGlobalRouter(), restore the search halo growth
          policy to expanding of 3 GCells every 3 iterations.
            New metrics displayed, the edge wire length length overload.
      * Change: In cumulus/plugins/ConductorPlugin.py, now accepts the following
          configuration parameters:
            - "anabatic.globalIterationsEstimate", maximum number of global
              iterations during the bloating computation passes.
            - "conductor.useFixedAbHeight", tells wether the additionnal blank
              space must be added so the aspect ratio is kept or the height is
      	kept (and the block become wider).
          Disable the display of "rubber" to unclutter a little the view.
      e711ce8d
  9. 12 Dec, 2019 3 commits
  10. 11 Dec, 2019 2 commits
    • Jean-Paul Chaput's avatar
      Corrections to build under MacOS X. · 9812f2fc
      Jean-Paul Chaput authored
      9812f2fc
    • Jean-Paul Chaput's avatar
      Various fixes for Katana::BloatProfile. · 09eccacf
      Jean-Paul Chaput authored
      * Bug: In Katana::BloatProfile::FlatInstance for X & Y calculation of
          flattened instances reserse the order of transformation. We must apply
          the occurrence path transformation to the instance transformation,
          and not the other way around.
            Was causing the bug in SNX example.
      * Bug: In Katana::BloatProfile::Slice::tagOverloadeds(), the underlying
          Gcell was not kept in synch with the instance. This was causing a right
          shift of the bloated area.
      * New: In Katana::BloatProfile, add the selection of overloaded edges and
          failed nets.
            Add a flag to KatanaEngine::runGlobalrouter() to choose what failed/
          overloaded components to display (selectors).
      09eccacf
  11. 09 Dec, 2019 3 commits
    • Jean-Paul Chaput's avatar
      8cc2d9f0
    • Jean-Paul Chaput's avatar
    • Jean-Paul Chaput's avatar
      Groudwork for routing density driven placement. Compliance with clang 5.0.1. · 68e45bc5
      Jean-Paul Chaput authored
      This commit contains two set of features that should have been commited
      separately.
        1. Compliance with clang 5.0.1, tested with the RedHat collection
           llvm-toolset-7. This allow Coriolis to be compiled under Darwin (MacOS)
           with Xcode & macports. The bootstrap install system has been modificated
           accordingly.
        2. The basic support for routing density driven placement. Related
           features are:
           * Bloat property. Each Occurrence of an Instance can be individually
             bloated. This property not attached to any tool to allow the placer and
             router to share it as wanted. Nevertheless, it is defined in Etesian.
           * BloatProfile in Katana, add individual Bloat properties to Instances
             occurrences based on the East & North overflowed edges of each GCell.
           * Support in ToolEngine for a "pass number" of a tool. This pass number
             is mainly used to make "per pass" measurements. The MeasureSet system
             is improved accordingly to support multiple values of a same measure.
           * Embryo of "P&R Conductor" to perform the place & route loop until the
             design is successfully placed. May be the first brick of a Silicon
             Compiler.
      
      * Change: In boostrap/FindBoostrap.cmake, in setup_boost(), added tag to
          the python component for macport (ex: python27).
      * Change: In boostrap/build.conf, put etesian before anabatic for
          instance occurrence BloatProperty dependency.
            Added option support for the "llvm-toolset-7" collection to build
          against clang 5.0.1.
      * Bug: In Hurricane::getRecord( const pair<T,U>& ), the getSlot<> templates
          for first & second arguments must be called with <const T> and <const U>
          as the pair itself is const (and not simply <T> & <U>).
      * Change: In Hurricane::getSlot() temlate, only use "string" arguments and
          not const string&, simpler for template argument deduction.
      * Bug: In Hurricane::AnalogCellExtension, the StandardPrivateProperty<>
          template has a static member "_name". Clang did show that the template
          for this static number has to be put inside the namespace where the
          template *is defined* (i.e. Hurricane) instead of the namespace where
          it is instanciated (i.e. Analog).
      * Bug: In Isobar, Matrix_FromListOfList(), PyInt_AsPlacementStatus() must
          be put outside the C linkage back in the Isobar C++ namespace (clang).
      * Bug: In Hurricane::DBo::~DBo, and derived add a throw() specification
          (clang).
      * Bug: In Hurricane::RegularLayer::getEnclosure() & setEnclosure(), change
          signature so it matches the one of the base class (clang).
      * Bug: In Hurricane::CellPrinter, use double brackets for initializer list
          (clang).
      * Change: In Hurricane::Breakpoint, reverse the meaning of the error level.
          Only error level *lesser or equal* than the stop level will be enabled.
      * Bug: In CRL/python/helpers/__init__.loadUserSettings(), must put the
          current working directory in the sys.path as in certain configuration
          it may not be included.
      * Bug: In CRL::ApDriver, DumpSegments(), no longer generate segments when
          encountering a RoutingPad on a top-level Pin Occurrence. The segment
          was generated in the wrong direction, creating DRC violations on the
          "mips_core_flat" example.
      * Change: In CRL::Measures, partial re-design of the measurements management.
          Now, each kind of measure can accept multiple values put in a vector.
          The index is intented to match a tool run number.
      * Change: In CRL::Histogram, add support for multiple sets of datas,
          indexeds with tool run number.
      * Change: In CRL::ToolEngine, add support for multiple pass number, add
          addMeasure<> templates for the various data-types.
      * Change: In CRL::gdsDriver & CRL::gdsParser(), comment out unused GDS record
          name constants.
      * New: Etesian::BloatProperty, property to attach to Instance occurrences
          that contains the extra number of pitch to add to the cell width.
      * Bug: In AutoSegment::CompareByDepthLength, the segment length comparison
          was wrong, it was always returning true, which broke the "strick weak
          ordering" of the comparison.
            This was producing a core-dump in GCell::updateDensity() when sorting
          a vector<>. The end() iterator was being dereferenced, leading to the
          problem.
      * Bug: In Katana::DataSymmetric::checkPairing(), the test for segments
          whose axis is perpandicular to the symmetry axis was wrong
          ("!=" instead of "-").
      * New: In Katana/GlobalRoute, new ::selectSegments(), selectOverloadedgcells()
          and selectBloatedInstances() to automatically select segments from
          overloaded edges, overloaded GCells and bloated cells.
      * Change: In KatanaEngine, return a more detailed success state, distinguish
          between global and detailed.
            Add support for multiple routing iterations.
      * New: In cumulus/python/plugins/ConductorPlugin.py, embryo of routing
          driven placement.
      68e45bc5
  12. 01 Dec, 2019 1 commit
    • Jean-Paul Chaput's avatar
      Add templates for derived Key in DBo::CompareById::oprator() [gcc 8]. · a3b006a8
      Jean-Paul Chaput authored
      * Change: In Hurricane::DBo::CompareById, starting from gcc 8, the compare
          function is checked inside the STL map<>/set<> so the lhs & rhs arguments
          are of the exact type of the Key, even excluding a base class.
            So now, in complement of the normal function, we provide a templated
          comparison functor in CompareById.
      a3b006a8
  13. 22 Nov, 2019 2 commits
  14. 21 Nov, 2019 1 commit
    • Jean-Paul Chaput's avatar
      Various bug fixes (Selection, Measures/Histogram, helpers). · f38945d2
      Jean-Paul Chaput authored
      * Bug: In CRL/python/helpers/__init__.py, in textPythonTrace(), when an
          ErrorMessage was catched, the trace parameter was not correctly
          extracted leading to an "exception in exception".
      * New: In Isobar/PyCell, exported Cell::getNonLeafInstanceOccurrences()
          collection.
      * New: In Isobar/PyTransformation, type is now built so the tp_compare
          is linked to the C++ operator==().
      * Change: In Hurricane::SelectionModel, Hurricane::SelectionWidget and
          CellWidget, no longer use Occurrences but directly the Selector property.
            We also use the Selector to know if an Occurrence is selected by
          looking at that property on it's Quark. This avoid a very lengthy
          search in vector when there is many elements (say > 10000).
            NOTE: This is a bad implementation as there is a confusion between
          beeing selected (that is, having a Selector property attached to
          an Occurrence Quark) and being actually displayed as selected.
          This lead to awkward implatation of the various "toggle" methods.
          Have to rethink that more clearly later.
      * Bug: In CRL::Histogram, the non-inline template full specialisation
          of Measure<Histogram> must not be put in the header but in the module
          to avoid multiple definition and link failure. They are actually
          real, classic functions.
      f38945d2
  15. 15 Nov, 2019 2 commits
  16. 14 Nov, 2019 1 commit
    • Jean-Paul Chaput's avatar
      New implementation for the Python hash and compare methods. · 92edd9ba
      Jean-Paul Chaput authored
      * Change: In Hurricane::Isobar/PyHurricane.h, make the hash function use
          the DBo id whenever possible instead of the object pointer, fall back
          to it for standalone objects (Box like one). The DirectHashMethod()
          macro generate a C style function (linkage) which call a template
          function "getPyHash<>()" that uses a SFINAE mechanism to select
          the right variant.
            Create two comparison macros DirectCmpByPtrMethod() and
          DirectCmpByValueMethod() to customize the comparison for objects that
          have C++ operator==(). So now two boxes with the same contents will
          be seen equal by Python. For DBo objects we keep the previous
          comparison by C++ pointer.
      92edd9ba
  17. 13 Nov, 2019 3 commits
    • Jean-Paul Chaput's avatar
    • Jean-Paul Chaput's avatar
      Various bug fixes for Analog P&R. OK for GM/Chamla & OTA/Miller. · f1304172
      Jean-Paul Chaput authored
      * Change: In CRL::RoutingLayerGauge::getHorizontalGauge(), when selecting
          the default gauge, try, if possible to avoid the PinOnly one.
            Same goes for the vertical one.
      * Bug: In Katana::TrackCost CTOR, symmetric track axis position was wrong,
          was using the reference instead of the symmetric.
      * Bug: In BoraEngine::updatePlacement(), set up the Dijkstra search halo
          to one pitch so it can use immediately neighboring channels.
      * New: In BoraEngine, added python startup hook like in Katana. Mainly
          to setup debug nets.
      f1304172
    • Jean-Paul Chaput's avatar
      Added support for extra resistor rules in Hurricane::Technology. · 1e4b8b46
      Jean-Paul Chaput authored
      * New: In BasicLayer::Material, added "info" kind of material for layers
          that are only informationals (i.e. not real GDS one). Created to
          store geometric combination of layers, this is a temporary solution.
            Have to define a clearer semantic for that.
      * New: In CRL/helpers/AnalogTechno.py, new "Count" type for count numbers
          that must not go through DbU::Unit converter. They are plain integers,
          but stored in DbU::Unit (keeping track of that semantic is left to
          the user).
      1e4b8b46
  18. 12 Nov, 2019 1 commit
    • Jean-Paul Chaput's avatar
      Added Resistor support. Completed Capacitor & Resistor support in Bora. · 88235dc3
      Jean-Paul Chaput authored
      * New: In Analog, added Analog::ResitorFamily & Analog::Resistor classes.
      * New: In Analog, added inspector support for all Parameter classes.
      * New: In Analog, new FloatParameter class (for resistor value).
      * New: In CRL/etc/scn6m_deep_09/devices.py, added resistor device.
      * New: In Oroshi, support for Resistors, stub for ResistorSnake generator.
      * New: In Bora::DNodeSets, added support for Resistor devices.
      * Change: In Bora::DSlicingNode, rename setNFing()/getNFing() into
          setBoxSetIndex()/getBoxSetIndex() for semantic coherency.
      * New: In Karakaze/python/AnalogDesign.py, added support for Resistor.
          Change in addDevice(), the span which was only meaningful for
          transistor devices is replaced by a parameter argument.
            The parameter argument has to be consistent with the device type.
      88235dc3
  19. 10 Nov, 2019 1 commit
  20. 07 Nov, 2019 2 commits
    • Jean-Paul Chaput's avatar
    • Jean-Paul Chaput's avatar
      First stage in analog capacitor integration · 8035b31f
      Jean-Paul Chaput authored
      * Bug: In Technology::getPhysicalRule(), if the named layerdo not exists,
          throw an exception instead of silently putting a NULL pointer inside
          a rule.
      * New: In Hurricane/Analog, new parameters classes for capacitor devices:
          - Analog::Matrix, a matrix of null or positives integers to encode
            capacitor matrix matching.
          - Analog::Capacities, a list of float values for all component of a
            multi-capacitor.
      * New: In Hurricane::Script, add a "getFileName()" method to get the full
          path name of the Python module.
      * Change: In Analog::LayoutGenerator, completly remove the logger utility
          as it is no longer used. Simply print error messages instead.
      * Change: In Analog::MetaCapacitor, rename top & bottom plate 'T' & 'B'.
          Accessors renamed in "getTopPlate()" & "getBottomPlate()".
      * New: In Analog::MultiCapacitor, complete rewrite. Makes use of the
          new parameters "capacities" and "matrix". Dynamically generates it's
          terminals as we do not know beforehand how many capacitors could be
          put in it.
      * Bug: In isobar/PyHurricane.h, in Type object definition, do not prepend
          a "Py" to class name (so the keep the C++ name).
      * Change: In CRL/etc/scn6m_deep_09/devices.py, add entry for the new
          capacitor generator.
      * New: In oroshi/python/ParamsMatrix, add a "family" entry in the [0,0]
          element to distinguish between transistor, capacitor and resistor.
          (this is the matrix of values returned to the LayoutGenerator after
           device generation).
            Now have one "setGlobalParams()" function per family.
      * New: In oroshi/python/Rules.py, added DTR rules needed by capacitors.
          Catch exceptions if something wrong append when we extract the rules
          from the technology.
      * New: In Bora, the devices are no longer *only* transistors, so the
          possibles configurations are no longer defined only by a number of
          fingers. We must be able to support any kind of range of configuration.
            So the explicit range of number of fingers is replaced by a base
          class ParameterRange, and it's derived classes:
            - Bora::StepParameterRange, to encode the possible number of fingers
              of a transistor (the former only possibility).
            - Bora::MatrixParameterRange, to encode all the possible matching
              scheme for a capacitor. As there is no way to compress it, this
      	is a vector of Matrix (from Analog).
      * Change: In Bora::DSlicingNode::_place(), the ParameterRange has to be set
          on the right configuration (through the index) before being called.
            The generation parameters are taken from the active item in the
          ParameterRange.
      * Change: In Bora::NodeSets::create(), iterate over the ParameterRange
          to build all the configuration. Adjustement to the routing gauge
          pitchs are moved into the DBoxSet CTOR to save a lot of code.
            Semantic change: the index in the NodeSets is now the index in
          the associated ParameterRange and no longer the number of fingers
          of a transistor.
            Check that the ParameterRange dynamic class is consitent with the
          device family.
      * Change: In Bora::DBoxSet, same semantic change as for NodeSets, the
          number of finger become an index in ParameterRange.
            In DBoxSet::create(), now also perform the abutment box adjustement
          to the RoutingGauge, if possible.
      * New: In Karakaze/python/AnalogDesign.py, add support for Capacitor
          devices.
      8035b31f
  21. 30 Oct, 2019 1 commit
    • Jean-Paul Chaput's avatar
      In Python scripts, if PyQt 4 fails to load, try PyQt 5. · ef0f6f77
      Jean-Paul Chaput authored
      * In CRL::Cyclop/CMakeLists.txt, add *again* the MOC files to the list
          of .cpp . Don't know what is happening here with MOC under Qt 5.
      * In CRL/python/helpers.io, cleanly fails if neither PyQt 4 nor PyQt 5 is
          found. And tell it directly because this the module tasked to handle
          the exceptions/errors...
      * In Cumulus/plugins/AboutWindow.py, try PyQt 4 then PyQt 5.
      * In documentation/UsersGuide, now tells explicitely that Qt 4 must be
          used under RedHat 7 and Qt 5 under Debian.
      ef0f6f77
  22. 28 Oct, 2019 1 commit
    • Jean-Paul Chaput's avatar
      Migrating the initialisation system to be completely Python-like. · 2c73cfe7
      Jean-Paul Chaput authored
      * New: In bootstrap/coriolisEnv.py, add the "etc" directory to the
          PYTHONPATH as initialization are now Python modules.
      * New: In Hurricane/analogic, first groundwork for the integration of
          PIP/MIM/MOM multi-capacitors. Add C++ and Python interface for the
          allocation matrix and the list of capacities values.
      * Change: In Hurricane::RegularLayer, add a layer parameter to the
          constructor so the association between the RegularLayer and it's
          BasicLayer can readily be done.
      * Change: In Hurricane::Layer, add a new getCut() accessor to get the
          cut layer in ViaLayer.
      * Change: In Hurricane::DataBase::get(), the Python wrapper should no
          longer consider an error if the data-base has not been created yet.
          Just return None.
      * Bug: In Isobar::PyLayer::getEnclosure() wrapper, if the overall
          enclosure is requested, pass the right parameter to the C++ function.
      * Change: In AllianceFramework, make public _bindLibraries() and export
          it to the Python interface.
      * Change: In AllianceFramework::create(), do not longer call bindLibraries().
          This now must be done explicitely and afterwards.
      * Change: In AllianceFramework::createLibrary() and
          Environement::addSYSTEM_LIBRARY(), minor bug corrections that I don't
          recall.
      * Change: In SearchPath::prepend(), set the selected index to zero and
          return it.
      * Change: In CRL::System CTOR, add "etc" to the PYTHONPATH as the
          configuration files are now organized as Python modules.
      * New: In PyCRL, export the CRL::System singleton, it's creation is no
          longer triggered by the one of AllianceFramework.
      * New: In CRL/etc/, convert most of the configuration files into the
          Python module format. For now, keep the old ".conf", but that are no
          longer used.
            For the real technologies, we cannot keep the directory name as
          "180" or "45" as it not allowed by Python syntax, so we create "node180"
          or "node45" instead.
            Most of the helpers and coriolisInit.py are no longer used now.
          To be removed in future commits after being sure that everything
          works...
      * Bug: In AutoSegment::makeDogleg(AutoContact*), the layer of the contacts
          where badly computed when one end of the original segment was attached
          to a non-preferred direction segment (mostly on terminal contacts).
            Now use the new AutoContact::updateLayer() method.
      * Bug: In Dijkstra::load(), limit symetric search area only if the net
          is a symmetric one !
      * Change: In Katana/python/katanaInit.py, comply with the new initialisation
          scheme.
      * Change: In Unicorn/cgt.py, comply to the new inititalization scheme.
      * Change: In cumulus various Python scripts remove the call to
          helpers.staticInitialization() as they are not needed now (we run in
          only *one* interpreter, so we correctly share all init).
            In plugins/__init__.py, read the new NDA directory variable.
      * Bug: In cumulus/plugins/Chip.doCoronafloorplan(), self.railsNb was not
          correctly managed when there was no clock.
      * Change: In cumulus/plugins/Configuration.coronaContactArray(), compute
          the viaPitch from the technology instead of the hard-coded 4.0 lambdas.
            In Configuration.loadConfiguration(), read the "ioring.py" from
          the new user's settings module.
      * Bug: In stratus.dpgen_ADSB2F, gives coordinates translated into DbU to
          the XY functions.
            In st_model.Save(), use the VstUseConcat flag to get correct VST files.
            In st_net.hur_net(), when a net is POWER/GROUND or CLOCK also make it
          global.
      * Change: In Oroshi/python/WIP_Transistor.py, encapsulate the generator
          inside a try/except block to get prettier error (and stop at the first).
      2c73cfe7
  23. 25 Oct, 2019 1 commit
  24. 16 Oct, 2019 1 commit
    • Jean-Paul Chaput's avatar
      Bug when the METAL3 pitch is not multiple of METAL1. · 1da71ae7
      Jean-Paul Chaput authored
      * Bug: In Katana::SegmentFsm CTOR, when computing costs for METAL2 in
          non-preferred direction attached to METAL1 terminals, do not try to
          align on a METAL3 track, as there may be not. Especially when the
          METAL3 pitch is not multiple of the METAL1 one.
            Compute at least one cost (with the same axis as the vertical METAL1
          terminal).
      * Change: In Etesian::BloatCells, adjust the "90%" bloat profile for a
          METAL3 pitch of 8 lambdas (sligh decrease).
      * Bug: In cumulus/plugins/ChipPLace.py, import chip.Chip, not only chip.
      1da71ae7
  25. 13 Oct, 2019 1 commit
    • Jean-Paul Chaput's avatar
      New Etesian bloat profile "90%". · 43ea63d9
      Jean-Paul Chaput authored
      * New: In Etesian::BloatCells, new profile for hihgly saturated designs named
          "90%", as it add, on average, 90% of free space. This has been made for
          the "ao68000" of Staf Verhaegen and may needs some refinement as it is a
          bit brutal.
      43ea63d9