幸运飞艇超稳计划群

MacSpice > Release Notes (Carbon)

Release Notes (Obsolete Pre-Cocoa Versions)

Changes between v2.9 and v2.10

system requirements:

• Hardware: Intel or PPC. Software: OS X 10.4.11 or later.

Version 2.10.47

• Refinements to choice of linear grid tickmark positions by plot command.
• Handles invalid values of 'xdelta' and 'ydelta' argument for plot command.
• Add ':' to the list of characters that may appear in variable names so that expressions such as '$&v(vss:10:2)' work as expected. 幸运飞艇超稳计划群bugs fixed: • Re-enable 'nodesets' command. Version 2.10.46 enhancements: • The 'const' plot physical constants have been updated to their CODATA 2017 recommended values. [Build 297] 幸运飞艇超稳计划群bugs fixed: • Behaviour of 'continue N' from inside a repeat loop. • Lack of error message when assignments have no RHS, e.g. 'let x ='. Version 2.10.45 enhancements: • Modify 'scatter' and 'gather' so they add values to the result vector elements, insted of copying them. bugs fixed: • Generation of logarithmic sequences by 'compose' command. • Parsing of 'mean' and 'sd' parameters by 'compose' command. • Variables 'ipolydegree' and 'dpolydegree' can now be assigned the value '1'. Version 2.10.44 幸运飞艇超稳计划群enhancements: • Reduce likelihood of memory fragmentation. bugs fixed: • Correct sign of power dissipated by PNP transistors. • User-defined function definitions can sometimes be deleted inappropriately when a new function is defined. Version 2.10.43 幸运飞艇超稳计划群enhancements: • Improve error reporting for the 'alter' command. • Improve parsing of commands involving the comma operator, e.g. 'let z = 1,2'. 幸运飞艇超稳计划群bugs fixed: • Crash when 'alter' is invoked with complex arguments. • Crash when empty subcircuit definitions are invoked. Version 2.10.42 enhancements: • Improve the way interpolation handles NaN values. 幸运飞艇超稳计划群bugs fixed: • Behaviour of 'noprintscale' setting. Version 2.10.41 enhancements: • Warning when subcircuit has empty definition. bugs fixed: • Crash when subcircuit has empty definition. • Self-update mechanism secured against MITM vulnerability. Version 2.10.40 enhancements: • Minor tweaks to 'compose' command. bugs fixed: • Compatibility with Bug-reporter-v04. Version 2.10.39 enhancements: • N/A bugs fixed: • The 'xcompress' modifier for the 'plot' command now works correctly. • The 'gather' command copies all mapped values when the map is shorter than the src. Version 2.10.38 幸运飞艇超稳计划群enhancements: • Issue error message when '.ends' argument does not match open subcircuit definition. • File type and creator codes are set in more cases. • Add full MacRoman character encoding table to hardcopy postscript output. • Update const values to CODATA (2014) values. • Add m2wx85.cn to NSExceptionDomains to overide ATS defaults for OS X 10.11 幸运飞艇超稳计划群bugs fixed: • Minor issues with hardcopy postscript output, e.g. colour pointplots are now in colour. Version 2.10.37 enhancements: • Compatibility with MacSpice 3.1.X self-update systems. • Vector types behave more consistently and their units, if any, are now shown by the 'let' and 'display' commands. • Vectors with angular types remember whether their units are degrees or radians. • Evaluation of tanh() function derivative for small arguments in B-source device. • Improved warning/error messages issued when conditional statement arguments have invalid values. • Linewidths (but not dash-patterns) used on graphs can be specified by setting the linestyleN variables. bugs fixed: • The scale created by 'linearize' has valid dimensions. • Unsetting 'maxord' returns the default order to 2. • Treatment of length = 1 and single element vectors in expressions. (Build 281) • PZ vector analysis returns 1-element vectors instead of scalars. (Build 282) • An expression involving semicolons and multiple syntax errors no longer causes a crash. (Build 284) • Potential buffer over-run fixed. (Build 284) • Comparison for inequality with complex values is done correctly. (Build 285) Version 2.10.36 幸运飞艇超稳计划群enhancements: • New 'hybrid' vector type. Vectors of this type are created when operators are applied to pairs of vectors with incompatible units, e.g. the result of adding a voltage to a current. • New 'scatter' and 'gather' commands for vector-processing. • Binary operators have improved performance and handle 'array' operands consistently. • Improved 'sortorder()' performance. • Improvements to the 'compose' command. • New 'pzmaxfreq' variable can be set to limit the range of frequencies searched by pole-zero analysis. • The pz analysis now has an argument 'vector' that puts the poles and zeros found into vector lists, instead of giving each its own scalar value. • Generalise the variable evaluation syntax so that '$?&foo' can be used to test whether the vector foo is available.
• Minor improvement to appearance of 'print col' tables.
• The output of the 'set', 'define', 'display' and 'let' commands has improved layout and formatting.
• User-defined functions evaluate their arguments in a more efficient manner.
• Units are evaluated in more cases.
• Improved memory management.
• Some warning messages clarified.

bugs fixed:

• Correct selection of result type by semi-colon operator.
• Assigning into a subrange does not change the type of the owner-vector.
• The expression '3.14e-2p' should evaluate to 3.14e-2 not 3.14e-15.
• The 'Assignment doesn't reshape LHS ...' warning prints the dimensions instead of the length.
• Empty the hash-table for deleted symbols in a timely manner.
• Memory leak when history substitution fails with an error.
• Vectors created by analyses now have non-null dimensions.
• Issues with 'print all' and 'let ALL = ...' when there were zero or one vectors in the active plot.
• The integral() and deriv() functions return vectors with appropriate types.
• Crash when user-defined function evaluates complicated functions of vectors with scale-subrange modifiers.

enhancements:

• New frontend variable '$processor'. • Graph layout: • handling of cases when there are more than four labels in the legend; • improved formatting of units and labels for axes. • Better detection of syntax errors in variable expressions. 幸运飞艇超稳计划群bugs fixed: • Evaluation of variable expressions of the form${$foo}. • Mixed case vector names are not lower-cased for printing, etc. • Functions of vectors have a linear grid-type. • Stop Smith plots modifying the vectors being plotted. • Crash when '*' is the first character returned from a back-quote evaluation. • The 'deftype' command overwriting the default 'temperature' definition. Version 2.10.34 幸运飞艇超稳计划群enhancements: • The 'display' command now indicates temporary vectors awaiting garbage collection. • Performance/memory improvements for sortorder(). • Update-checking now identifies best available version compatible with OS X version. • Add new 'xor' (#) logical operator. bugs fixed: • Change test for violation of minbreak limit from '<=' to '<'. • Issue in noise analysis when linear steps used. • Small memory leak plot window is closed. Version 2.10.33 enhancements: • New 'assert condition' command to abort script execution unless the condition is true. • New qualifiers for 'end' statements have been implemented: 'end if', 'end while', etc.. These reduce the likelihood of programming errors by checking that blocks in scripts are well-formed. • Expression evaluation errors in scripts now include line location information. • The console window now moves behind all open graph windows when any one of these is selected. Graphs can now be reviewed and closed using command-W without needing mouse-clicks. • New variables 'consoleforeground' and 'consolebackground', which allow console font- and background-colours to be set. [Build 272] • New warnings/errors, including for: • attempts to transpose a scalar or one-dimensional vector; • 'let x = y' when the dimensions of x and y differ; • calling maximum(), minimum() or sortorder() with complex arguments. 幸运飞艇超稳计划群bugs fixed: • Scripts with redirected input/output can now be interrupted with command-. or ctl-C. • Functions maximum(), minimum() and sortorder() fixed to reject complex arguments. • Stride error fixed in hash() on PPC architectures. • Fixed hash() command for vectors on PPC processors. • Eliminated initial (pointless) evaluation of 'dowhile' condition. • The 'interpolate()' function now handles array arguments and creates vectors that don't trigger 'inconsistent dimensions' warnings. • Fix redirection so '> foo' does not redirect stderr to foo, but '>& foo' does. [Build 273] Version 2.10.32 enhancements: • Improve performance and consistency of 'and', 'or' and 'not' operators for expressions involving complex and/or NaN values. • New warnings for conditional statements (if/while/dowhile) with ambiguous values. • Modify relative precedence of the 'not' and ',' operators so that 'not 1 , not 2' is parsed as '(not 1),(not 2)' instead of 'not(1,not(2))'. bugs fixed: • Fixed crash affecting 2.10.31 when parsing certain types of invalid expressions. • Fixed incorrect evaluation of boolean expressions involving complex variables. • Complex values with both NaN and Inf parts are now interpreted as 'true' in logical expressions. [Build 264] Version 2.10.31 enhancements: • New wrap() function for phase to complement existing 'unwrap()' function. • New hash() function. • New transpose() function and improve performance of the existing 'transpose' command. • The parser is now better at deciding whether, for example, 'ne' is referring to the 'not equals' operator or a vector (unwisely) named 'ne'. • '.IC' and '.NODESET' statements inside subcircuit definitions are now expanded so they are interpreted as referring to the local nodes. • Enhance the maximum(), minimum(), mean() and sortorder() functions so they work correctly and consistently with array arguments. • The distinction between a scalar and a single-element vector is maintained in a more consistent fashion. e.g. 'vector(20)[12,12]' is a single element vector, whereas 'vector(20)[12]' is a scalar. (This makes some types of script simpler to write.) • The temporary memory required by the sortorder() function has been reduced. • Treat an attempt to 'unlet' a vector element as an error. [Build 260] 幸运飞艇超稳计划群bugs fixed: • Improved behaviour of '.IC' statements when 'uic' is not specified for the tran analysis. • Fixed crash triggered the second time an analysis is run when the netlist contains an '.IC' statement referring to a non-existent node. • Fixed the 'rusage' command for cases when memory usage exceeds ~2GB. • Fixed crash caused when invalid syntax is used to specify a user-defined function. • Improve behaviour when warnings are issued during expression evaluation. [Build 260] • Fix backwards-compatibility issue by reverting to 2.10.30 versions for max() and min() pre-defined functions. [Build 261] Version 2.10.30 enhancements: • URC model modified so that K = 1.0 is an acceptable value for the proportionality constant. • Functions vector(1) and unitvec(1) now return a 1-element vector, not a scalar. • Transition to building with Xcode 4.6. • The 'define' command now works in a more intuitive way and has additional error detection and messages. • Modify values in the const plot to match CODATA 2010 recommendations. bugs fixed: • Crash when 'load' is used to load an invalid rawfile. • Crash when 'disto' analysis has invalid parameters. • Crash when 'numdgt' is unset after being assigned an invalid (string) type. • Crash when scriptspath is invalid in spinit. • Missing end-line for optimiser warning message. • Overhaul alias evaluation in attempt to fix obscure crash. Version 2.10.29 enhancements: • Errors and warning messages generated by scripts now attempt to identify the location of the line that caused them. • Blocks with missing end statements now generate warning messages. • Vectors with one element are no longer automatically converted to scalars. • Command line interpreter now evaluates variables of the form${foo}
• Improve 'load' command so that invalid rawfiles are less likely to cause hangs/crashes.

bugs fixed:

• Fixed missing breakpoints for pulse sources. (Build 245)
• Modify behaviour of 'set' command so it creates a string variable in cases like 'set foo = "123 abc"'
• Evaluation of 'foreach foo "$&K"' now strips the '"' characters. • Comb-plots with points outside grid area now display correctly. • MESFET model no longer ignores 'off' flag. • Calculation of not(z) corrected for case when z is complex. • Fixed null-dereferences in coupled transmission line (CPL) model. • Cured crash when a single ';' is typed at command line. • Cured rare crash when user defined function is re/undefined. • Cured rare start-up crash on multiprocessor machines. Version 2.10.23 enhancements: • Upgrade BSIMSOI4 to versiom 4.3 (level=11). • Improved behaviour of 'compose' when start stop and step are specified (Build 206). 幸运飞艇超稳计划群bugs fixed: • Vectors created by interpolate() now have units set to match those of the argument. • Fixed special case when log-grid failed to draw. • Install . Version 2.10.22 enhancements: • HiSIM_HV model updated to version 1.2.0 (level=62). • Improved convergence for some types of 'B' source devices. • Improved tick label format for linear graph axes when 'xdelta' and/or 'ydelta' are specified. • Spice-2 'poly' sources accept node names containing symbols like '+' and '-'. • New warning for netlist lines that are ignored because they have leading whitespace. bugs fixed: • Explicit 'save all' is not deleted by subsequent 'save' statements. • Evaluating '@v1[coeffs]' no longer crashes if 'coeffs' is an empty list. • Typing a single '$' at the command line no longer causes a freeze.
• Fixed intermittent crash provoked by plotting with non-default value for 'polydegree'. (Build 202)
• Fixed memory management issues associated with complicated 'define' statements. (Build 203)

Version 2.10.21

• HiSIM_HV model version 1.1.1 added as level=62.
• BSIM4 model updated to version 4.6.5.
• BSIMSOI4 model updated to version 4.2.
• Improved layout of output from the 'print' command.
• Improved handling of negative-zeros in complex numbers.
• Device parameters that depend on stored charge can now be now calculated during DC sweep analyses by setting the 'dcdosmsig' flag.
• Warning when noise reference source does not have unit magnitude.
• Minor improvements to evaluation of diode model equations.
• Increased dynamic range for plot command log axes.
• Improved numerical accuracy of AC analysis when the frequency range spans many decades.

• Fixed error if a simulation parameter is (un)set when no circuit loaded.
• Fixed various issues with the URC transmission-line model.
• Various corrections to the ltra model LTE estimates and timestep control.
• Fixed crash in mutcheck() when all mutual inductors specified zero coupling.
• Fixed crash when parsing 'B' source expressions with invalid node names.
• Improved behaviour when used with secondary display.

Version 2.10.20

enhancements:

• Improvements to behaviour and layout of graphs with log axes.
• An 'unwrap()' function for phase vectors.
• Sophisticated consistency checks and warnings for groups of mutual inductors.
• The 'unlet' command now accepts the 'all' wildcard unless the current plot is the 'const' plot.

bugs fixed:

• The 'xlog' and 'ylog' arguments for the 'plot' command are no longer mutually exclusive.
• Syntax errors in '.noise' control lines no longer cause a crash.
• Functions such as length() no longer return a vector with invalid dimensions when given a multi-dimensional argument.
• The 'compose' command now generates a uniform distribution on [0,1) instead of [0,2).
• Cured crash when an RTF file with '.include' statements is accidentally used as source.
• Cured crash when complicated (nested) subcircuits are freed (build 193).
• Fixed behaviour of continue/break inside nested 'foreach' loops (build 195).

Version 2.10.19

enhancements:

• Installed model BSIMSOI version 4.1.
• Improved the behaviour of the plot command and its documentation.
• Improved the behaviour of command-line history stack (build 189).

• Using 'alter' to change the value of a vector parameter more than once no longer causes a crash.
• Corrected behaviour of polar plots.
• Fixed crash in 'spec' command when previous 'tran' analysis had failed (build 187).
• Value of $$is now the true PID (build 188) • Fixed grid redraw issue introduced with build 185 (build 188) • Fixed crash when a file was opened via the Finder and the command-line contained un-entered characters (build 189). Version 2.10.18 幸运飞艇超稳计划群enhancements: • The 'reshape' command now parses dimensions more flexibly. • Rationalised handling of expressions like 'v(1a)' by the command-line interpreter. • Improved method for identifying monospaced-fonts. 幸运飞艇超稳计划群bugs fixed: • Cured occasional deadlock in font system at launch. • Cured crash in TF analysis when circuit matrix is singular. Version 2.10.17 幸运飞艇超稳计划群enhancements: • BSIM4 version is now 4.6.3; • Improved error/warning reporting for bad subcircuit definitions. • Self-update system displays the build number if necessary. bugs fixed: • Crash after .include failed to expand tilde expressions. • Crash due to font management problems at launch. • Crash when plotting a complex vector with length shorter than other vectors being plotted. • Memory leak in subcircuit expansion code eliminated. Version 2.10.16 enhancements: • Improved detection of errors and warnings for: • duplicate subcircuit definitions; • subcircuit definitions with invalid (non-unique) external node names; • duplicate model definitions; • non-ascii characters in node, model and subcircuit names. • Cosmetic improvements to error message display and console paging mechanism. bugs fixed: • Model names can now include the characters '+' and '-'. • Unmatched brackets in netlists should no longer cause a crash. • Crash reporting mechanism modified to work with OS X 10.5. Version 2.10.15 幸运飞艇超稳计划群enhancements: • O(N2) algorithm used to set-up structures for saving analysis results replaced with O(N) method. • Pre-defined vectors in constant plot updated to CODATA (2006) recommended values. • Secure self-update mechanism by checking that the downloaded image has a valid DSA signature before proceeding with installation. • The way files are assigned creators and types has been improved. 幸运飞艇超稳计划群bugs fixed: • Cured leak when plot command prompts for missing arguments. • Cured crash when asciiplot is used to display a nearly constant value. • Corrected the value of the pre-defined value of 'e' in the constant plot. It is now correct to 16 significant figures, instead of 12. • Eliminated an undefined NSDocumentController/CFBundleTypeRole warning (OS X 10.5 only). Version 2.10.14 幸运飞艇超稳计划群enhancements: • Graph cursors behave better. • AC Sensitivity analysis now positions grid points accurately and can resume after interruption. • Improved pole/zero analysis - negligible complex components are rounded to zero. • Vectors use memory more efficiently. • Better frontend performance when large numbers of vectors are in existence. • The big_endian/little_endian flag is now implemented for rawfiles written in batch mode. • Case-insensitive string comparisons are performed faster. • A warning is now issued when breakpoints are being ignored, e.g. because pulse rise-times are shorter than the value of MINBREAK. • var_free() and ctl_free() procedures re-coded to avoid potential stack overflow in extreme cases. • Improved display of mutual inductance parameters by 'show'. • Improved numerical stability of interpolate() frontend function. • Improved 'rusage' statistics for interrupted transient simulations. • Improved default behaviour of 'xd' and 'alpha' parameters for MOS3 devices. 幸运飞艇超稳计划群bugs fixed: • 'shift' no longer causes a crash when it is given invalid arguments. • 'goto foo' when foo has no value no longer crashes. • Cured potential history list corruption when 'set history = 0' is used. • Cured some minor memory leaks occurring during: • conversion of circuit parameters to vectors; • destruction of parse nodes referring to user-defined functions; • tokenization of models with zero-length parameters. • AC sensitivity analysis now works with non-linear devices. • Correct evaluation of lists containing empty lists. • Variables 'numdgt' and 'rawprec' now unset at the first attempt. Version 2.10.13 bugs fixed: • Frontend 'hardcopy' command now generates working plot(5) code. • Various issues with the 'write' and 'load' commands. • Vector base-name extraction now works as originally intended. • Print commands of the form 'print v(tran2.x)' now work correctly. Version 2.10.12 幸运飞艇超稳计划群not released. Version 2.10.11 enhancements: • Control structures now glob expressions during evaluation. • AC analyses no longer create frequency scales comprising complex values. • Improved statistical properties of random number generators used by rnd() and 'compose'. 幸运飞艇超稳计划群bugs fixed: • Repairs to the interpolate() frontend function. • Reduce number of cases where 'Not enough space to perform Paste' errors may occur. • The distribution of numbers produced by rnd(n) is now uniform for values of n that are not powers of 2. Version 2.10.10 幸运飞艇超稳计划群bugs fixed: • Cured crash in frontend function interpolate() which occurred when the old and new scales were of differing lengths. • Cured intermittent crash due to memory error when an attempt was made to 'alter' a non-existent entity. Version 2.10.09 幸运飞艇超稳计划群bugs fixed: • Eliminated a potential cause of intermittent stalls and unexpected exits. • Removed buffer-overflow vulnerabilities in the console code. • No longer crashes when non-editable text is selected in console and certain non-ascii characters are typed. • Frontend function abs(-0) now returns 0 not -0. Version 2.10.08 enhancements: • Improved accuracy of noise analysis in extreme circumstances. • Diagnostic messages made more informative, e.g. for missing models. • Filenames specified for i/o redirection are now quote-stripped. • Handling of invalid source-files containing junk binary has been made more robust. • The plot keyword 'vs' inhibits flyback-line removal in graphs. • Minor improvements to implementation of TXL/CPL devices. 幸运飞艇超稳计划群bugs fixed: • Crash reporter dialogue now transmits data more reliably. • Number of repeat-loop iterations is now evaluated immediately before loop is run, not when the script is parsed. • Several potential crashes when large random binary files are used as source have been fixed. • HParamBlockRec structures used in __close() are now explicitly zeroed. • Nodesets used with a non-default filename now works as expected. • Potential crash when adding filename to new circuit structure fixed. • When frontend evaluates conditional statements it no longer causes intermittent memory corruption. • Command completion now works with plots produced by the 'spec' analysis. • Destroying plots but leaving graphs open no longer crashes. • The command 'compose x values (1,2) 3' no longer crashes. Version 2.10.07 enhancements: • Improved accuracy of parsing numerical values in netlists and expressions. • Arbitrary (current) sources now report value of i via 'show' command. • Frontend mean() function calculates with extended accuracy. bugs fixed: • Second-run start-up problems displaying and closing 'check on start-up' window. • Console display memory issue affecting performance and causing garbling. Version 2.10.06 enhancements: • CPL/TXL transmission line models with errors now behave better. • Improvements to self-update facility. • Improvements to crash reporting facility. • Minor improvements to website documentation. 幸运飞艇超稳计划群bugs fixed: • 'Altermod' no longer sometimes tries to change wrong parameter. • Change inconsistent usage of __file_handle to type 'short'. Version 2.10.05 幸运飞艇超稳计划群enhancements: • Improved scaling and behaviour of linear graph axes. • Matching of device names and model names is now insensitive to case. • Most devices now use the instance temperature when calculating noise. • Minor improvements to website documentation. bugs fixed: • Variable 'numdgt' can now be set on the .options line. • Behaviour of TNOM in mos6 devices is now correct. • Informative error messages are now given (instead of crashing) when mos3 read-only parameters are written. • Reading certain obscure mos1 parameter values before running an analysis no longer causes a crash. Version 2.10.04 幸运飞艇超稳计划群enhancements: • TXL lossy transmission line device (from KSpice). • Detection of, and one-click reporting for, recent crash logs. • Improved manner in which gmin is applied to mos{1,2,3,6} devices when Vbd = 0 and/or Vbs = 0. • Linear graphs behave better in extreme circumstances and/or when xdelta/ydelta are specified. • AC analyses now work with very narrow frequency ranges, and can be interrupted/resumed. bugs fixed: • No longer crashes when netlist line starts with letter 'p'. • Optimizer failure report now includes 'ifail' value. • Correct 'minimum system version' value in package plist. • Type of vectors suffixed with #i1 or #i2 is now 'current'. • Fixed problem using 'load' to create vectors introduced in version 2.10.01. • Graphs no longer need resizing before colours are correct. • Ticks on linear graphs created with xdelta/ydelta keywords are now labelled correctly. Version 2.10.03 Enhancements: • Align self-update system with Sparkle Trunk code. • 'Del' key now deletes forward from the insertion point, as opposed to the backspace key which deletes back from the insertion point. Bugs fixed: • Intermittent crash on MacIntel when applescript command has a syntax error. • Memory leak and hypothetical crash in auto-update code. • Crash if CpLines device has malformed definition. • Garbage (instead of a line number) in error report. Version 2.10.02 Enhancements: • A new auto-update system based on Sparkle. This can perform weekly and/or on-demand checks for for updates, display release notes, and download/install the new version. Bugs fixed: • behaviour of history modifier ':h' in case when there is no path. Other changes: • modification to version numbering scheme bringing it into line with Apple's recommendations. Version 2.10.01 New 'Optimize' command which implements the Nelder-Mead Simplex method as described in: • J. C. Lagarias, J. A. Reeds, M. H. Wright, and P. E. Wright Convergence Properties of the Nelder-Mead Simplex Method in Low Dimensions SIAM J. Optim. (1998) 9(1) 112-147. The following frontend vector functions, which are often useful in optimization problems, have been installed:  integral(): interpolates its argument onto the current scale and integrates the interpolating polynomial. The order is set by the variable 'ipolydegree'. Code is shared with deriv(), and both functions now require that their argument and its scale are real. maximum(): For a real argument, returns the maximum element in its argument. For a complex argument, returns the element with the greatest magnitude. minimum(): For a real argument, returns the minimum element in its argument. For a complex argument, returns the element with the smallest magnitude. sortorder(): Returns a vector whose elements are the positions of the elements in the argument after they have been sorted into increasing order using a stable method (mergesort). backquoted text is now passed to /bin/sh for evaluation. new 'applescript' command which compiles and executes applescripts. Improved handling of Apple Events, e.g. • AppleScript dictionary added to package. • New 'misc/dosc' event handler allows AppleScript to send commands to MacSpice e.g.  tell application "MacSpice" do script "let j = 0" do script { "repeat 10", "let j = j + 1", "end" } end tell In normal circumstances, events are acknowledged immediately, and are held in a queue until MacSpice is ready to process them. • Open lists of multiple documents in sequence. User interrupts (i.e. typing Command-'.') now set the variable 'interrupt'. This allows scripts that repeatedly execute analyses to behave politely. For example:  unset interrupt while 1 tran 1u 500u 0 4u if (?interrupt) goto escape endif end label escape ...  New special variables: • vectors returns a list of the vectors in the current plot (unless set otherwise by the user); • $$ returns the current process (pid) number;
• $pziter sets iteration limit for pole-zero analysis. Improved 'listing' command. This now displays text either as it will be interpreted (logical) or as it is in the file (physical/deck). Command line expression parser now indicates the position where syntax errors arise. Enhancements: • update BSIM4 model to version 4.6.1; • install test versions of cpl/txl models for transmission lines from KSpice; • start-up delay reduced by moving non-critical set-up code into a separate low-priority thread; • performance improvements to pole-zero analysis; • improved range and behaviour of 'history' commands; • quote/unquote grammar made more consistent; • improved cursor display in situations requiring many significant figures, or when zero should be displayed; • attempts to plot graphs with infinite ranges are now trapped with an error message; • 'Save As ...' enabled for console; • graph windows now save to a PICT file - use option modifier key to save in high-resolution format; • text arguments to 'plot' commands now have the quotes stripped improving the behaviour of commands like:  MacSpice 11 -> let foo = 1.23 MacSpice 12 -> plot y vs x title "foo =$&foo"

• frontend vector function 'deriv()' has been overhauled improving its accuracy and consistency;
• calculation of magnitudes of complex numbers now avoids unnecessary under/overflow;
• distinctions between a scalar and a single element vector are now made more consistently;
• power operator '^' now returns a vector with 'notype' units;
• range operator [[]] now returns a vector with no (i.e. the default) scale;
• setting 'nomoremode' within a script now takes effect immediately;
• 'load' now checks the imaginary parts of vectors in a 'complex' rawfile and, where these are zero, creates real vectors;
• bottle-neck in processing of long word-lists eliminated by replacing O(N2) algorithm with O(N) equivalent;
• evaluation of frontend variables has been improved, e.g. $foo[$bar-$baz] now works as expected and the setting of numdgt is no longer ignored. Fixed minor memory leaks associated with: • inconsistent use of memory by error messages; • the handling of command completion structures when a new plot is created by 'load'; • handling variables, including the 'set' and 'shift' commands; • handling continuation lines; • defining plot and vector types; • the range operator. Bugs fixed: • BSIM4 devices now report temperatures in °C, not kelvin; • non-working AC sensitivity analysis; • definitions of dashed lines for PostScript hardcopy corrected; • endian problem which prevented graphs from printing correctly on MacIntels; • plots created by analyses that are interrupted by errors are no longer left locked; • parsing expressions with syntax errors, such as 'let a = 1+2-' no longer signals internal errors; • parsing of complex vector constructors, such as 'let a = (1,2;3)'; • plot-type iterator from spanning all plot types; • rare intermittent crash when 'set' is used to list variables; • possible crash when certain types of '.save' statement are processed; • intermittent corruption of the names of vectors created by compose; • subcircuit expansions resulting in long lines fail (introduced in v2.9p33); • scope rules for models in complicated cases; • crash when evaluating user defined functions with complicated arguments; • graphs now handle nearly constant data without locking up. Other changes: • function name-space reorganized to eliminate linker warnings and to exploit system frameworks and shared libraries where possible. Changes between v2.8 and v2.9 v2.9 PATCH LEVEL 33 Fix bug that prevented 'set nomoremode' having the desired effect, i.e. disabling the console pager. Update BSIM4 model to version 4.6.0. Enhance commands and functions so they handle (IEEE754) values like 'inf' (infinity, e.g. 12/0.0) and 'nan' (not a number, e.g. 0.0/0.0) appropriately. Complex frontend interpreter functions have been overhauled in order to fix bugs, and improve accuracy and consistency:  sqrt(): change the principle branches; ln()/log(): ln/log(0) now returns -inf, not -38; ln()/log(): accuracy with complex arguments improved; tan(): repaired - it was giving wrong values for complex arguments; atan(): repaired - it now works for complex arguments; comma: repaired - (a,b) = a + j*b for complex arguments; multiplication: accuracy improved for complex arguments; division: accuracy improved for complex arguments; acos(): added the inverse cosine; asin(): added the inverse sine. Improve formatting and behaviour of error and warning messages. Messages now try to indicate where in the netlist files they occur. Changes to vectors that are owned by interrupted simulations are now prevented if the changes would cause a crash. The behaviour of plot prefix matching has been tweaked so that 'setplot' and 'let' behave more intuitively in unusual cases. Breakpoints created by 'iplots' with invalid arguments are now deleted. Improve algorithms used for subcircuit expansion. Prevent some types of syntax errors provoking attempts to over-free pnodes. Fix some minor memory leaks associated with extracting parameters from the 'plot' command. v2.9 PATCH LEVEL 32 Improve accuracy of graphs when non-default values of xdelta and ydelta are used. Correct handling of .include statements when ~: is used to refer to home directories with space characters in the path. Add helpful warning if unquoted spaces are found a .include statement's filename. v2.9 PATCH LEVEL 30/31 Messages now try to indicate where in the hierarchy of '.include' statements the line being referred to is located. Improve console performance when displaying long lines of text. Cure intermittent display of stale error/information messages. Remove 'continuation lines' size limit, and replace O(N2) algorithms for assembling continuation lines with O(N) versions. Enforce validity of time parameters for PWL sources at start of analysis. Improve performance of complicated PWL sources during tran analysis. v2.9 PATCH LEVEL 29 Files referred to in .include statements may now have spaces in their names protected by backslash quoting. For example,  .include foo bar .include argle\ bargle would include the files 'foo' and 'argle bargle', but not 'bar' or 'foo bar'. Font encoding has been added to the hardcopy PostScript driver. The only noticeable effect is that the degrees symbol is now displayed correctly. The way the console handles full-buffer conditions has been improved; this cures some rare console lock-up/crash modes. v2.9 PATCH LEVEL 28 Reword the warnings given when a source has no DC value specified to make their meaning clearer. Re-scale the hardcopy PostScript co-ordinates to cure quantisation problems. Correct bug in multi-variable dc sweeps introduced by the V2.9.23 code clean-up. Replace the letter "o" with proper a "°" (degrees) symbol in labels on polar plots. v2.9 PATCH LEVEL 24 - 27 Tackle endian problem that prevented 'edit' launching the helper application on MacIntel machines. Add some text error messages for common problems preventing applications from launching. With OS X 10.2 and later, 'edit' now only jerks forward the frontmost editor window. extra error checking in dc analysis to stop attempts to sweep resistors or (absolute) temperatures through zero. Command-. can now interrupt empty label/goto infinite loops. Minor tweaks to the PostScript driver. Fix a hypothetical problem in spGetElement(). Correct an obscure divide by zero error in the MOS2 and MOS3 devices. v2.9 PATCH LEVEL 23 / 22 幸运飞艇超稳计划群install checks for 'command-.' interrupts during gmin- and source-stepping. 幸运飞艇超稳计划群improved error reporting when a node or branch current has an invalid value such as 'inf' or 'nan'. these may signal a bug in the code for a particular model, but unrealistic models used in a non-convergent circuit are the usual cause. Vectors starting with '@' (e.g. @x1[gm]) now default to 'unknown' type instead of 'voltage'. Code clean-up for DC sweep analysis. bug fix for another problem introduced at patchlevel 17. this interfered with evaluation of expressions like '@c1[i]'. Bug fix for spice2 compatibility mode which cures a crash when printing .op analysis summaries for non-converged analysis. Bug fix in the MOS2 model curing negative gm values in the cut-off region. v2.9 PATCH LEVEL 21 Error messages generated by noise analysis are now more informative. bug fix for problem introduced at patchlevel 17. this prevented noise analyses finding source references. v2.9 PATCH LEVEL 20 The 'dump' command has been implemented. This prints a diagnostic list of node voltages, and flags any which have not converged. Improved Gmin- and source-stepping methods for better convergence performance in extreme cases. Improved performance of text plotting to fix an issue with 'plot pointplot ...' when there are a large number points. Behaviour of 'listing' command corrected so that 'listing deck expand' handles multi-line devices properly. Improved output pager behaviour. E.g., it no longer pauses after a 'q' (quit) character has been given. Overhauled 'show -v' command: memory leaks fixed and more informative messages. Memory leak in BSIM4.5 code repaired. Reorganised 'DEVask.c' files to improve resilience. v2.9 PATCH LEVEL 19 Improve the way the starting value for adaptive gmin-stepping is calculated. Convert release notes to html. Fix the 'help' command so that it uses case-insensitive searches for words. Commands like 'help echo' and 'help ac' now work as expected. Fix the 'help' command code to deal with endian issues. The .idx file is now always interpreted as having big-endian fields. v2.9 PATCH LEVEL 18 Fix build problem with p17. v2.9 PATCH LEVEL 17 Speed up the way 'source' builds large circuits. The Chip2 benchmark (ca 10,000 equations) now loads in 7s instead of 90s. Cure a minor leak in the subcircuit expansion code. Modify the way gmin is added to negative matrix diagonals. v2.9 PATCH LEVEL 16 If the variable 'pensize' is unset (or 0), the base pen-thickness used to draw is selected automatically and depends on the fontsize used for the graphs. 'set pensize = N' where 0<N≤10 is measured in points, overrides this behaviour. Redevelop the 'compose' code so its faster and more features work. Fix an intermittent fence post error. Improve the way the number of significant figures displayed by the mouse cursor is calculated when dragging very small distances. v2.9 PATCH LEVEL 15 MacSpice now adds a 'Default Folder' field to its preferences plist (CDHW.MacSpice.plist). Like the 'cd' command, it uses HFS names and expands an initial '~'. Cursor measurements. The values corresponding to the cursor position in a graph are now displayed in a cursor window. Dragging allows measurements of changes. Double-clicking transfers the displayed value to the console command. Implement a Font menu for graph windows, and modify various aspects of their behaviour to accommodate the range of font sizes. Make the position and font of the console window persist between runs. Minor adjustments to the layout of the 'key' which gets added to graphs. Correct treatment of collapsed (minimised) windows in the dock so that they are ignored properly. Repair the 16×16 pixel document icons. The Postscript driver now creates files with application type 'prvw' so they display in Preview when double-clicked. v2.9 PATCH LEVEL 14 Universal binary trial. Correct reporting of 'gatetype' by 'showmod' for mos2 model. Correct calculation of the diode model critical voltage when the area is not unity. Add to the 'mouse position' code so it returns values with text suffixes, i.e. '40n' and '23Meg' instead of '4.0e-8' and '2.3e6' respectively. Minor changes to headers and include files to fix problems building for i386. v2.9 PATCH LEVEL 13 Stop structures like empty repeat loops locking up the command line interface. Install experimental code to report positions of mouse clicks and drags in plot windows. Correct mathematical expressions used to produce Smith plots. Fix crash provoked by 'plot ((1,2);(3,4);(5;6))'. Prevent 'pointplot' from missing first point in a vector. Improve automatic calculation of limits for polar plots. Cure memory leaks associated with 'samep' mechanism. v2.9 PATCH LEVEL 12 Add support for scroll-wheel and smooth scrolling. I can't find a 'mighty mouse' to test the smooth-scrolling, so let me know if it doesn't work okay. v2.9 PATCH LEVEL 11 Interrogating device instance parameters before running an analysis now returns 'NaN' instead of crashing. Correct displayed values for mos1, mos2, mos3, mos6 device capacitances. v2.9 PATCH LEVEL 10 Fix crash caused by '.print dc I(V1) V(1, 0)' v2.9 PATCH LEVEL 9 Install BSIMSOI v4.0 as level 11. Fix problems, affecting repeated runs, caused by uninitialised variables and creation of internal nodes. Fix problems in BSIMSOI v3, affecting repeated runs, caused by uninitialised variables and creation of internal nodes. Cure buffer overflow which could occur if a multi-line statement had an error. Fix several devices so that they identify themselves when they cause non-convergence. Set 'possibly' uninitialised variables to zero passim. v2.9 PATCH LEVEL 8 Upgrade to BSIM3.3.0 and BSIM4.5.0 device models. User breaks are now handled during long dc sweeps. L-U decomposition time is now shown in rusage report. Restore compatibility with system 10.1 and 10.2. v2.9 PATCH LEVEL 7 Fix a strange problem affecting a repeat run of a netlist containing a .ic line. v2.9 PATCH LEVEL 6 Improve handling of filepaths and make it compatible with FileVault home directories. Improve filename completion code. New feature: Menu and preferences plist to handle font used by console window. Improve calculation of text size and initial window size. Fix memory leak in glob code. Repair broken Finder info for files in the examples folder. v2.9 PATCH LEVEL 4 Various enhancements to the console; it now has a proportional scroller and performs live scrolling and resizing. Improve console performance so that the test script  let j = 0 repeat 10000 let j = j + 1 echo "$&j"
end

runs roughly ten times as fast as previous patchlevels.

Various enhancements to the graphical windows. Plots now update live in response to resizing and update roughly four times as fast as in previous patchlevels.

Postscript driver now adds a y-axis title and produces small output files.

Change the output of 'rusage' to make it clear that it reports CPU times.

v2.9 PATCH LEVEL 3

The correct directory is now used, instead of its parent, when '#' is used to choose an output file.

Make sourcepath default entries use trailing colons consistently.

Improve the behaviour when ';' is used to combine commands that contain parentheses in strange combinations. Modify the self-precedence of ';' so expressions like '1;2;3;...;N' require 3 stack elements instead of 2N.

Generate warnings when 'foo = bar' defaults to 'let foo = bar' in the command interpreter. Defaulting to let is bad practice (it is very slow and relies on the non-existence of a file 'foo') but it is common in scripts so the warning is only displayed the 1st, 10th, 100th, etc. time the condition occurs.

Cure minor memory leak when parsing malformed lists of vectors.

v2.9 PATCH LEVEL 2

Fix a fence-post error in the quote-encoding code which caused problems decoding '\_'.

v2.9 PATCH LEVEL 1

Refactor code to use XCode development system. This means that MacOS versions prior to OS X are no longer supported, but MacSpice should be able to run natively on MacIntel machines.

Adopt OS X file system conventions, as follows:

the traditional 'lib', 'man', and 'examples' folders live in library/macspice/ macspice uses the carbon findfolder function to search for these in the following order at startup:

 1 User Domain ~:Library:MacSpice: 2 Local Domain Library:MacSpice: 3 Network Domain Network:Library:MacSpice:

and sets the appropriate nutmeg variables.

At startup, the current directory ':' is set to ~:Documents:MacSpice: which is created if it doesn't exist. If this can't be created, or used, for some reason ':' defaults to ~:Documents:

If folders/files aren't found they are created in the current user domain. Admin users may wish to move them to the Local or Network domain in order to define institutional defaults.

Make some subtle refinements to the MacSpice icon and design a new set of icons for documents. Rationalise mapping of file extensions to types.

Create a basic Applehelp book - content is simply links to the MacSpice website at the moment.

Add ',' to the 'bad character' list so that files with names like "1,2,3" can be opened by double-clicking.

Changes between v2.7 and v2.8

v2.8 PATCH LEVEL 17 - 19

Fix 'version' command so 'version -l' prints the current version and 'version verid' checks that verid matches the current version.

The scale vectors produced by dc sweeps are now all called 'sweep', but with appropriate types and units set. Previously they had names like 'i_sweep' which caused incompatibility with Spice 3 scripts.

Fix crash when attempting to plot/print expressions containing syntax errors.

v2.8 PATCH LEVEL 16

Miscellaneous minor code tweaks which yield a ca 10% speed up of long transient simulations.

Revisit the behaviour of 'let' (see v2.8p14) so that it is backwards-compatible with Spice3 in complicated cases and issues a warning for 'let foo.bar = ..' when 'foo' is not the current plot, or 'bar' is not already defined in plot 'foo'.

Reduce the overhead associated with globbing and brace-expansion.

v2.8 PATCH LEVEL 15

Fix error in translation of current-controlled POLY's introduced at PATHCLEVEL 14 by the single-character function fix.

v2.8 PATCH LEVEL 14

Update HiSim model by applying published patches

Prevent a single unmatched '{' generating duplicate error messages during globbing.

Overhaul the way the frontend expands lists {1,2,3}

Fix bug introduced at patchlevel 10 affecting the 'ylabel' parameter for 'plot'.

Fix behaviour when an attempt is made to evaluate a non-existent single character function.

Prevent 'deftype' leaking memory under error conditions.

Cure memory leak caused when parser bails out with a syntax error.

Change the details of the way plot numbers increment so that if a plot is deleted its name is not reused. This ensures that each analysis has a unique default plot name.

Improve the method 'let' uses to decide what the lhs of the '=' refers to.

v2.8 PATCH LEVEL 13 - 12

Fix potential buffer overflow in front end.

v2.8 PATCH LEVEL 11

Fix an obscure bug in subcircuit expansion code. This caused arbitrary sources in subcircuits expand incorrectly.

Fix pole-zero code in bjt device.

v2.8 PATCH LEVEL 10

Improve the handling of vector types. This only works properly for simple examples, not general SI units. However, useful common cases are recognised. For example v(5)*i(vsrc) is a vector of type 'power' and the dB() function acts appropriately so that dB(v(5)) + dB(i(vsrc)) == dB(v(5)*i(vsrc)).

Noise density plots now display units as 'X/Hz' where 'X' represents V^2 or A^2 as appropriate.

Improve method of guessing a default ylabel to use on graphs. Tweak the positioning of the xlabel on a graph.

The 'plot' command will now plot the results of pole-zero analysis on an argand diagram.

v2.8 PATCH LEVEL 9

Change the order of processing in inp_dodeck() to prevent orphan decks being created if the user interrupts deck, e.g. because there are too many errors being printed.

Fix an error in '.tf' analysis introduced by some overzealous memory conservation.

Improve numerical accuracy of the mod operator (%) and prevent 'print 0%5' generating an error message.

Improve subcircuit expansion to make scope rules for model definitions work in a way that is consistent with the userguide. Unfortunately the useguide description of scope is ambiguous so use 'listing p e' and 'show all' to check MacSpice is doing what you expect.

v2.8 PATCH LEVEL 8

Define new rawfile formats 'tabbed' and 'mac_tabbed'. To make 'write' to create files in a tab-separated column format with '\n' end of line characters. Use 'set filetype = tabbed'. The mac_tabbed variant has '\r' end of line characters. These formats are suitable for import into spreadsheet applications. The MacSpice 'load' command understands these formats too.

Make the 'copy' and 'close' menu items dynamic. Option-Copy puts a hi-res pict onto the clipboard, Option-Close closes all open graph windows.

Install check for a bad scale in deriv() and fix bug which could create vectors which had inconsistent real/complex flags and types.

MacSpice 3 -> set bar = $&@vin[coeffs][3]  now seem to work as one would expect. Clarify wording of error messages for cases when one tries to read input-only, or set output-only, variables. Try to prevent devices returning garbage for sensitivity values if 'show all : all' is used before performing a sensitivity analysis. Modify handling of AppleEvents so a file of unknown type is treated as a source file. This makes using Textedit as the helper for the 'edit' command a bit less painful under OS/X. I might restrict this behaviour to files with specific (e.g. '.cir') extensions in the future. v2.7 PATCH LEVEL 28 OS/X: The edit command will now launch the appropriate editor helper-application if it is not already running. Make some minor changes to the breakpoints code. This should reduce memory churning and turnover. v2.7 PATCH LEVEL 27 Improve evaluation of model equations in MOS1 and MOS2, MOS3, MOS6 devices. This should prevent lockup problems that arise due to underflow and result in improved accuracy. Add code to recognise when a node has a bad (i.e. fp-exception) value and treat it as non-converged. This should never happen, but when it does MacSpice now behaves better. Improve clarity of some error/warning messages. v2.7 PATCH LEVEL 25-26 Fix a problem with the console. It no longer breaks when it contains many short lines. Repair evaluation mechanism for frontend list variables so$plots[3] now works. Incidentally, expressions like


MacSpice 29 -> set bar = $&v(4)[500]  are evaluated by creating a list of all the elements of v(4) and then counting along to get the 500th.  MacSpice 30 -> let bar = v(4)[499] MacSpice 29 -> set foo =$&bar


is a much much faster way.

v2.7 PATCH LEVEL 24

Improve the label positions on Smith grids.

R6 PATCH LEVEL 9 (beta)

Tweak layout of graphs, and improve precision of drawings, give graph windows more informative titles. Hi-Res copy and printing issues addressed.

Make last point of NOISE analysis exactly equal to the specified upper frequency to avoid empty cycle on log graphs.

Add temperature and resistance to types of sweep available in DC analyses.

R6 PATCH LEVEL 8 (beta)

Fix problem with About Window caused by problems with string constants not being constant and CFSTR() getting muddled.

R6 PATCH LEVEL 7 (alpha)

Carbon version. Runs native on OS X.

Multiple resizable plot windows, at last!

Upgrade printing of graphs and console.

Fix leaks in subckt processing and distortion analysis.

Fix crash caused by malformed spice 2 poly statements.

Facility to export PICTs with nice 'grouped' arrangement.

Vectors with more than ca 10,000 points now plot correctly.

Improve calculation of 'rusage' memory values.

Multiple plot windows, behave in a mac-like manner.

Improve accuracy of line-numbers displayed by 'listing'.

Fix bug in handling of commands like 'foo ;; bar'

Make last point of AC analysis exactly equal to the specified upper frequency to avoid empty cycle on log graphs.

Circuits with transmission lines resume tran analyses correctly.

PTparse() et al tweaked to prevent crashes with random text source file.

Improve accuracy of line-numbers displayed by listing.

Changes between DR4 and DR5

DR5 PATCH LEVEL 29

Correct bug in resources.c affecting times returned by rusage.

DR5 PATCH LEVEL 28

Implement HiSim 1.2 model.

Update BSim4 to 4.3.0 and enhance the BSIM4.

Update BSimsoi3 to version 3.1.1

Inhibit irritating "Warning: Pd/s = 0 is less than W." messages from BSIM3 and BSIMSOI3 when Pd/s were not specified.

Make 'show all' display 'n/a' (instead of junk) for parameters that return errors.

Fix quote-encoding so "\ " works, e.g. for filenames.

Improve 'save alli' behaviour (again!).

MacSpice now tolerates files where the last line is terminated by EOF instead of \r or \n.

The routine that checks model parameters no skips the values of unrecognised parameters instead of reporting them as errors in their own right.

DR5 PATCH LEVEL 27

Fix way 'save all' decides whether to save a node or not.

DR5 PATCH LEVEL 26

Fix evaluation of variables surrounded by brackets, e.g. 'echo (\$foo)'.

Disable non-functional Edit/Undo item.

Eliminate 'miniedit' in favour of external editor as helper application. Setting the editor variable to the editor's 4-byte creator code specifies which one to use. The default is SimpleText ("ttxt"), but BBedit ("R*ch")is recommended because the features of the ODBeditor suite are available.

Make high-level events and menu items clear any text from the command line before inserting their own typing.

DR5 PATCH LEVEL 25

Upgrade semiconductor model from UFSOI-7.0 to UFSOI-7.5

Add dpi element to graph struct so that the choice of ticks on log axes is independent of device resolution. Inhibit '20' ticks per decade option for log-axes (it works, but it puzzles too many people).

Improve way 'save all' decides whether to save a node or not.

Correct problem in lexer() that prevented 'print @c2[p]' being tokenised correctly.

Fix bug in pole-zero calculation introduced by new sparse matrix code.

DR5 PATCH LEVEL 24

Insert code to prevent 'edit' opening a file larger than the 32KB TextEdit buffer. Add a File/Close menu item so one can exit 'edit' using Close instead of Quit.

Fix a problem with initialising the more/pager. This was evident when the output of 'show' was redirected to a file, e.g. 'show all > foo'.

DR5 PATCH LEVEL 23

Upgrade sparse matrix code, with subtle improvements in speed and accuracy.

Make 'echo -n' fflush().

Stomp another bug in deriv().

Make the interactive tf and sens commands case insensitive.

Improve the accuracy of the sub-divisions drawn on plots with log scales.

DR5 PATCH LEVEL 22

Improve the end-of-range behaviour of interpolate() and install a warning that is issued when it is used to extrapolate outside the old range.

Fix various bugs in deriv() that cause wrong answers and crashes.

Fix frontend command interpreter so it recognises that the brackets protect the semicolons in expressions like 'foo = ( 1 ; 2 ; 3 )'. Also correct the lexer() so that 'foo[bar]' works as well as 'foo[ bar ]' when referring to vector elements.

DR5 PATCH LEVEL 21

Enhance tokeniser, etc. to allow node names with 'funny' characters. e.g. '-5V' is now accepted as a valid nodename.

Reduce time wasted in poly() translation by skipping tokenisation of lines that can't possibly be poly's.

Cure parser leaks that occurred when B sources contained syntax errors.

Fix some memory leaks associated with subcircuit expansion. Repair subcircuit expansion so devices with variable numbers of nodes don't cause trouble.

More memory management improvements. Malloc(), etc., now releases fixed length pools and behaves in way that should result in less heap fragmentation. 'Rusage' no longer treats unallocated memory in pools as in use, because it is available to malloc(). The Rusage report includes application heap memory used by the console display.

Tidy up libraries to prevent spurious link-warnings.

DR5 PATCH LEVEL 20

Improve memory management in the front-end control structures.

Improve precision of memory usage statistics ('rusage', etc). The value of current dynamic memory usage now excludes memory that has been reserved by MacSpice but not yet allocated by malloc() et al..

Cure the memory leaks associated with graphical plots.

Fix parsing of commands like 'foo = foo + 1' where 'let' has been omitted.

DR5 PATCH LEVEL 19

Improve matrix re-ordering algorithm to speed up processing of large matrices.

The 'status' command now indicates if a condition is tied to a particular analysis.

Fix crash which occurred in unusual circumstances, due to plotEnd() not checking for a null pointer.

DR5 PATCH LEVEL 18

Interrupting a .tran simulation now prints useful info about current timepoint and timestep.

New 'nodesets' command to save the state of the current analysis as a file of nodeset commands suitable for inclusion in a netlist. The syntax is 'nodesets filename'.

Improve speed of loading phase of circuits with large numbers of nodeset/ic statements.

Make a few tweaks to the way the 'save' command behaves.

Make batch emulation mode create saves from the dotcards in the deck in a more authentic manner.

Install adaptive timers in the event-loop handling; no more long periods of locking up the Mac when processing large netlists.

Install additional memory management diagnostics and instrumentation.

Fix memory leak related to error messages.

DR5 PATCH LEVEL 17

Improve the consistency of the line numbers given by the 'listing' command.

Fix problem with sourcing a large circuit caused by an inefficient tree constructed by smartfree().

Add mac_ascii as a recognised value for the frontend variable 'filetype'. This will cause ascii files created by write to have mac style endline termination. Tweak the routine that reads in rawfiles so it can handle any of the three possible formats.

Source files can now be either mac or unix types.

Alter the behaviour of the save statement qualifiers. 'allv' is now the default and saves only external nodes. 'all' saves both internal and external nodes.

Improve the event-loop polling so that large circuits don't lock up the machine.

Make some modifications to the sparse matrix structures to lay the foundations for future improvements.

DR5 PATCH LEVEL 16

Modify the tokeniser to allow / * ^ in node names. This is needed for compatibility with ext2spice and some benchmark files, it doesn't make using these in nodenames a good idea.

Fix bug in .include code which ignored first line in some cases.

Fix problems with BSIM3 (caused by one of my experiments).

DR5 PATCH LEVEL 15

Fix the 'show' command so it works with devices in subcircuits in the way the manual says it should.

Improve the coding of the BJT model to eliminate various discontinuities that were preventing difficult benchmarks running.

Improve the coding of the D model to eliminate some discontinuities and calculate derivatives correctly. Also fix the behaviour of the IBV and BV parameters when the emission coefficient is not unity.

Improve the step limiting of pn-junctions

Add transient analysis check that the maxorder option is compatible with the integration method.

Fix various bugs in the MOS3 device.

Make the 'debug' variable behave in a more intuitive (i.e. less sticky) manner.

Improve recovery from interactive commands with missing terminating quote.

Fix various problems that arise with 'listing' when source files contain long lines. Also improve the handling of things when continuation cards create excessively long lines.

Fix bug associated with dragging a file onto the application.

DR5 PATCH LEVEL 14

Fix 'where' command so it now gives useful information.

Improve layout of messages generating when source/gmin stepping to make it a bit clearer what is going on. Add 'where' message in case of failure.

Implement a new multistep-multiorder algorithm. The Berkeley version never actually used any order higher above 2.

Correct the "Transient iters per point" message to say "... cur point"

Inhibit redundant recalculation of the integration coefficients during transient analysis.

Improvements to com_load so it handles ascii files properly. Limit the 'Bad rawfile' message to being issued once. A bad rawfile will cause memory leaks at the moment.

Further tweaks to the handling of ccom structures for plots.

Reorder the ccom structure so all (?) commands are registered.

Fix BSIM1 and BSIM2 so that vbs, vgs and vds parameters return actual values, not initial values.

Correct mishandling of internal nodes which resulted in internal nodes not being created in some instances. This seems to be a very common bug in many spice derivatives

Fix rare problem with node lookups by making hash() insensitive to case.

Fix log(0) problem in BJT noise analysis.

Fix crash caused by freeing the command line wordlist twice in some circumstances.

DR5 PATCH LEVEL 13

Fix the local truncation error code. Something was clearly not right with the Spice original so I reworked the math through from scratch. With hindsight, the original code contained two fundamental bugs, plus what seem to be a couple of empirical 'hacks' (e.g. TRTOL) that roughly compensate for them, in some cases.

Reduce event loop handling overhead. Compared with LEVEL 12, speeds up the Ring11 bench mark by a factor of about 1.5 and my frontend benchmark script by a factor of about 5.

Improve the way memory is managed when analysis vectors are saved. Speeds up analyses that create long vectors significantly. Ring11 now factor 2.0 faster than LEVEL 12 version.

Fix 'save all' so that it omits internal node voltages. Add new wildcards so 'save alli' saves the internal currents of devices and 'save allv' is a synonym for 'save all'

Fix more memory leaks mainly affecting subcircuit and model expansion.

DR5 PATCH LEVEL 12

Add timestep to the debug options. This should identify nodes and devices that responsible for cutting (i.e. reducing by a factor eight or more) the timestep.

Prevent the "Do you want to save?" dialogue from appearing at Quit time. It should still appear if you run out of memory to give you a chance to see what was going on at the time.

Fix problem with the BSIM3 MOSFET where if tnom was specified for a transistor model, it increased by 273.15 degrees each time a simulation was run.

Smooth out some discontinuities in the BJT model.

Fix a crash that occurred when creating large vectors using the (1;2;3;...) syntax.

DR5 PATCH LEVEL 11

Fix problems introduced into 'print' and 'write' commands by previous patch.

Fix intermittent crash that occurred in rare circumstances when destroying a plot.

DR5 PATCH LEVEL 10

Install and validate:

M - level 44:

More leaks fixed.

DR5 PATCH LEVEL 9

Change the '*' pseudo-filename to '#' to fix incompatibility with the glob code.

Define files of type 'BDAT' which are opened with 'load' when double-clicked. Files of type 'TEXT' are opened with 'source' when double-clicked). Modify icons appropriately, although you won't see this until you rebuild your desktop.

Make inpfindlnew() print errors to cp_err and handle 'missing level' error message correctly.

Fix various problems with 'write'. This now creates files of type 'BDAT' and uses unix-style line breaks ('\n'). This will enhance compatibility with Mark . Also, fix a mistake I made a couple of patches ago that broke the vector names in the rawfile output and deal with the memory leaks associated with 'write'.

Fix more bugs in 'alter' so that commands like


MacSpice 1 -> alter @vin[sin] = (0.123;45;6.78)


work appropriately.

Add check to PWL voltage/current sources that prints a warning if the list is not in increasing order of time.

More leaks fixed.

DR5 PATCH LEVEL 8

Install UFS01-7.0 model and correct a couple of minor bugs.

Add ^U (clear line) to the command line editing operations.

DR5 PATCH LEVEL 7

Fix bug that made AC analysis of lossless ltra transmission line give incorrect results.

Fix command line editor to display history entries containing quote protected characters

Fix b source parser bug that caused things like 'i=v(1,2)*v(3)' to leave the tokeniser in an active state.

Make the "foobar: No error" message more informative, it meant there was an error opening foobar.

Fix a couple of instances where string constants were freed. It wasn't doing harm, but lets face it, it's not a good thing to do.

DR5 PATCH LEVEL 6

Improve 'batch emulation' mode.

Minor tweaks to the way more-style paging works. It's still rather primitive.

Improve behaviour of 'show' command.

Get 'show -v' command working correctly.

Fix intermittent crash that occurred when 'destroy all' was used.

DR5 PATCH LEVEL 4

Install new, and update existing models. The current list is

A - level 3: STAG SOI v2.6 http://www.micro.ecs.soton.ac.uk/stag/

M - level 8: BSIM3v3.2.4 http://www-device.EECS.Berkeley.EDU/~bsim3/

M - level 9: BSIMSOIv3.0 http://www-device.eecs.berkeley.edu/~bsimsoi/

M - level 10: UFSOI-6.0 http://www.soi.tec.ufl.edu/

M - level 14: BSIMS4v4.2.1 http://www-device.eecs.berkeley.edu/~bsim3/bsim4.html

J - level 2: Parker-Skellern mesfet jfet model http://www.elec.mq.edu.au/cnerf/models/psmodel/

Z - level 5: HFET

Swap effect of up- and down-arrow keys so they work as advertised below.

Extend command/file completion so that it performs history replacement.

Install Anthony Parker's 'spec' command

DR5 PATCH LEVEL 3

Make '*' into a pseudo-filename signalling that the file is to be chosen using a dialogue box. There are some rough edges, e.g. if file foo.txt exists and you want to append some text to it:


echo "hello" >> *


requires you to type foo.txt into a dialogue box and then warns that foo.txt will be messed with, which you know already.

Implement 'cd' command which prints and selects the default directory.

implement command and file completion, and command-line editing keystrokes:

 CTL-A move cursor to start of line CTL-B or left-arrow move cursor back one char CTL-D delete forward from insertion point CTL-D at end of line prints a list of possible completions CTL-F or right-arrow move cursor forward one character CTL-H delete back from insertion point CTL-K delete from cursor to end of line CTL-N or down-arrow scroll down through history stack CTL-P or up-arrow scroll up through history stack ESC or TAB automatically types the completion as far as possible.

Text outside the editable region can be selected, but the cursor won't stay there. 'ignoreeof' is now set by default because it is rather too easy to type CTL-D at the command prompt and lose everything otherwise. To get a list of all commands type a space followed by CTL-D at the prompt.

Add feature that converts spice 2 'poly' sources to spice 3 'b' sources. This was not as easy to do as you probably imagine, so please check the results carefully.

Improve several commands' general awareness of the console size so that 'more', etc. work in a more elegant manner.

Add new 'delcirc' interactive command to delete circuits and free their memory. Its syntax is like that of setcirc.

Enhance the DC convergence performance by implementing adaptive step-size selection for source stepping. Adaptive gmin-step sizes can be invoked by setting the option 'gminstepsize = 1'

Improve the arbitrary source ('b' devices) code in various ways which roughly double their evaluation speed, halve their memory consumption, and fix problems with the x^y function and parser bugs that prevented it working with node names that start with a number (e.g. 23b). Deal with the bug that broke expressions containing no sources (e.g v=1.234 ).

Make the switch device work better by getting it to update the breakpoint table.

Alter the way source files with non-unixy names that are dragged onto the application are converted into 'source' statements. In really bad cases (non-ascii characters) they are turned into 'source *' so you get presented with a navigation dialogue and you can drag the thing into that. It is better to stick to ascii filenames really...

Overhaul frontend to eliminate unnecessary copying of wordlists which was wasting memory and slowing things down.

Fix more memory leaks.

DR5 PATCHLEVEL 2

Fix a nest of bugs that affect 'save' statements and debugging. Most noticeable will be the fact that duplicates of the same saved vector are now recognised.

The implementation of the various DOING_something flags never seems to have been completed in the 3f4 original source. A lot of things read these flags, but they were left unset most of the time when they were needed. A preliminary attempt to sort this out has cured several old problems (e.g. @c1[i]). Let's hope it doesn't cause new ones.

DR5 PATCHLEVEL 1

Fix bugs that resulted in miscalculation of truncation error for trapezoidal and Euler integration, and hence timestep. Reset default TRTOL which was a Berkeley hack to cure the symptoms from 7.0 to 1.0.

Fix bug that prevented interactive analyses from using any options other than the hardcoded application defaults. Interactive analyses are now given a copy of the options for the 'current circuit', which is what one would expect.

Changes between DR3 and DR4

DR4 PATCHLEVEL 8

Make the front end error message that appears if i(foo) can't be evaluated more informative.

Fix segmentation violation in sensitivity analysis

DR4 PATCHLEVEL 7

Cure 'alter' of its habit of misbehaving when given incorrect arguments.

Modify SIOUX so that the whole line is entered, even if the cursor is left in the middle of a command (after editing).

Add more character filtering mini-edit to try and prevent invisible junk characters being a problem. I feel to that mini-edit could be beneficially replaced by a scriptable editor, sometime...

DR4 PATCHLEVEL 6

Fix bug anti-leak measures introduced at PATCHLEVEL 4. The comma operator was unreliable, e.g. 'print v(1,2)' caused errors. This was because mkfunc() wasn't using ud_count to register the copies it was making of its argument.

DR4 PATCHLEVEL 5

Fix various bugs in 'let' which prevented expressions like 'let foo[2] = 99' working and incorporate index range checking.

Define a semicolon operator to facilitate construction of vectors and n-dimensional matrices. e.g. the commands


MacSpice 1 -> let foo = ((11;12);(21;22))
MacSpice 2 -> let bar = (foo;(31;32))
MacSpice 3 -> let baz = (1;(3,4);5)


create a 2×2 matrix 'foo', a 3×2 matrix 'bar', and a complex vector with 3 elements 'baz'. It is necessary to protect the ; with ()'s to prevent it being treated as a command separator.

Rewrite tmalloc() so it is based on calloc().

Fix bug in checking code that could cause rejection of a valid tran parameter.

More memory leaks fixed!

DR4 PATCHLEVEL 4

Fix more frontend leaks. Overhaul the commands related to define in order to fix more leaks. After some false starts, concluded that a reference counter field is needed in the pnode struct in order to indicate that its dvect has been added to a plot. free_node() can exploit this information when destroying parse trees. Educate prtree1() about when brackets are needed when pretty-printing user function definitions (okay, but they were starting to really irritated me!)

After a lot of careful leak fixing the command loop


repeat 10000
define f(a,b) 100*b+321*a
let k = f(j,j+4)
undefine f
end


seems to execute without leaks.

DR4 PATCHLEVEL 3

Many improvements and fixes to the command processor in front.c, it may even work well enough to be usable now!

Fix some memory leaks. Prior to fixing the loop


let j = 0
while j < 1000
let j = j +1
end


leaked 320 bytes per loop.

Fixing free_pnode to free the pn_name, saved ~70 bytes/loop.

Preventing cp_istrue() from creating a copy of the word list wl which is never used.

Com_let() needed a lot of patches which brought the leak rate down to 68 bytes per cycle.

Fixing mksnode() cured the rest.

DR4 PATCHLEVEL 2

Make setting the 'echo' variable do something useful. It now prints the parsed command and the fully expanded version.

Fix the bizarre buffer problems that used to occur after an interrupt (ctrl-c, etc) by replacing a call to getc().

Setting the cpdebug variable no longer complains pointlessly that its messages aren't available, because they are.

DR4 PATCHLEVEL 1

Add checks to the 'where' command to stop it causing crashes if it is invoked when there is no unconverged node to report.

Replace perror() calls following file-open activity with macro PERROR which replaces a confusing "No Error" message (because errno is not set in the Metroworks ANSI libraries) with "Error: Can't open file:"

DR3:

Fix crash when resume typed and no file loaded.

Various patches applied.