Turbo51 Changelog

What's new in Turbo51 0.1.3.17

Jun 26, 2013
  • Fixed bug: Wrong register optimization in some rare code patterns involving Rn
  • Fixed bug: Wrong comparison (= and ) for real values in some cases
  • Fixed bug: Compiler crashed in some cases when using function Abs with integer variables
  • Fixed bug: Temporary variables used by some procedures in the System unit were not saved during interrupts
  • Fixed bug: Error reported in assembler statements with relative jump and bit variable located in bit-addresable byte

New in Turbo51 0.1.3.16 (Oct 15, 2012)

  • Fixed bug: Wrong register optimization in some cases involving XDATA variables
  • Fixed bug: Wrong optimization in some cases involving multiplication of 16-bit data with 256
  • Fixed bug: Wrong variable type of typed constants in the CSV file

New in Turbo51 0.1.3.15 (Jul 16, 2012)

  • Fixed bug: Using the -O or -OX switch without the -G switch crashes the compiler

New in Turbo51 0.1.3.14 (Jul 11, 2012)

  • Fixed bug: System procedure Val reported error when converting numbers with two digit exponent
  • Fixed bug: System procedure Val didn't reported error when mantissa or exponet in real number was missing
  • Fixed bug: Wrong register optimization in some cases involving integer comparison
  • Fixed bug: Wrong order of optimized PUSH / POP instructions in some rare cases
  • Fixed bug: Wrong stack frame initialization in some cases
  • Fixed bug: Wrong conversion of character to string in some cases
  • Fixed bug: Few bugs in heap management
  • New feature: Variable types in map file
  • New feature: CSV symbol file (generated with map file)

New in Turbo51 0.1.3.13 (Jul 11, 2012)

  • Fixed bug: Wrong register optimization in system function Abs for integers
  • Fixed bug: Bug in calculation of unary minus for Real variables

New in Turbo51 0.1.3.12 (Jul 11, 2012)

  • Fixed bug: Typed constant pointer declaration in some cases generated Internal error
  • Fixed bug: Wrong optimization in some rare cases due to register not marked as live
  • Fixed bug: Missed CSE optimization opportunities in main program block
  • Fixed bug: Wrong optimization in some rare cases involving SWAP A instruction

New in Turbo51 0.1.3.11 (Jan 6, 2012)

  • Fixed bug: Overflow in arithmetic operation reported in some rare occasions
  • Fixed bug: Wrong address of indirectly addressed arrays was calculated in some cases
  • Change: Added separate report on time spent on compilation and optimization

New in Turbo51 0.1.3.10 (Jul 19, 2011)

  • Fixed bug: Internal error in some rare occasions
  • Fixed bug: Some peephole optimizations didn't mark newly created live registers
  • Change: Improved internal memory management to avoid "Out of memory" error when optimizing huge program blocks
  • Change: Extended Linear Address Record is no longer written to the HEX file as it causes problems with some loaders

New in Turbo51 0.1.3.9 (Jan 30, 2011)

  • Fixed bug: Wrong comparison of LongInt and Real variables with negative values
  • Fixed bug: Wrong result of system function Val for Real parameter
  • Fixed bug: Writeln and Readln without parameters ignored DefaultFile set to On
  • Fixed bug: Readln stopped reading on CR character
  • Fixed bug: BIN/HEX/U51/OMF output directory with spaces generated error
  • Fixed bug: Compiler crashes when assigning a value in register B to indirect address (e.g. result of mod operation to var parameter)
  • Fixed bug: nternal error when declaring absolute variable at var parameter
  • Change: Various improvements in optimization algorithms
  • New feature: Added support for interrupts at Interrupt address + CodeStart address

New in Turbo51 0.1.3.8 (Jan 30, 2011)

  • Fixed bug: Bug in system function Val

New in Turbo51 0.1.3.7 (Aug 22, 2010)

  • Fixed bug: Wrong instruction address generated in some cases when using Word or LongInt variables at absolute addresses

New in Turbo51 0.1.3.6 (Aug 11, 2010)

  • Fixed bug: Wrong instruction address generated in some cases when using variables at absolute addresses

New in Turbo51 0.1.3.5 (Dec 4, 2009)

  • Fixed bug: Calling virtual methods does not work (bug in system procedure sysCallVirtualMethod)
  • Fixed bug: AJMP/ACALL ConstantAddress reported error
  • Fixed bug: MOVC @A+PC reports error "Unknown Identifier 'PC'"
  • Fixed bug: Internal error on calling procedure at absolute address
  • Fixed bug: Internal error in some rare cases
  • New feature: Added directives $REGION and $ENDREGION to support collapsible regions in some editors
  • New feature: Added directive $MEMORY as longer version of the $M directive

New in Turbo51 0.1.3.4 (Aug 17, 2009)

  • Fixed bug: Wrong HEX file (at address $0002) in some rare cases

New in Turbo51 0.1.3.3 (Dec 28, 2008)

  • Fixed bug: Compiler crashes while trying to report "Procedure outside of CODE segment" error
  • Fixed bug: IDATA memory usage not reported if delcared in unit
  • Fixed bug: Wrong IDATA directive processing in some cases
  • Fixed bug: Wrong optimization of BitAddress1 := not BitAddress2 in some cases
  • Fixed bug: Wrong optimization of RRC A in some rare cases
  • Fixed bug: Wrong optimization of Case statement range lower limit comparison in some cases
  • Fixed bug: instructions with R4 and R5 before call to the sysLongIntToReal were removed in some cases
  • New feature: Improved code for Case statement range lower limit comparison
  • New feature: Support for any extension of unit source files

New in Turbo51 0.1.3.2 (Nov 20, 2008)

  • Fixed bug: Wrong stack size reported when IDATA memory is not present
  • New feature: Program code can start at any address
  • Change: Compiler directive $M has now syntax $M , , , ,

New in Turbo51 0.1.2.0 (Aug 17, 2008)

  • Fixed bug: Internal error when complementing bit absolute BitAddressableVar.Bit
  • Fixed bug: Internal error on record field of type Array of Boolean
  • Fixed bug: Asm statement: Internal error accessing BitAddressableVar.Bit
  • Fixed bug: Wrong sign extension in some cases
  • Fixed bug: Missed some optimization opportunities
  • Fixed bug: Internal error for operations on set with non-constant element in IDATA memory
  • Fixed bug: In some cases wrong address was generated for BitAddressable variables
  • Fixed bug: External variables with unique names were written in assembler file with wrong name
  • Fixed bug: Error on recompilation of unit which defined interrupt procedure
  • Fixed bug: Memory leak when error was reported
  • Fixed bug: Optimization of JNZ to DJNZ or CJNE when A was live
  • Fixed bug: Temporary variables placed at wrong address
  • Change: Major improvments in source files processing
  • Change: Improvments in source line marking relative to generated code
  • Change: Minor improvments in error reporting in some cases
  • Change: Minor improvments for operations on sets in XDATA memory with non-constant element
  • New feature: Removed limitations for include files (now they can be almost anywhere)
  • New feature: Support for inline procedures
  • New feature: Support for LongInt Case constants
  • New feature: System procedure Change (Set, Element)
  • New feature: Added command line option /C to report also error column