Pascal Compiler 8051

Download Turbo51 - Free Pascal compiler for 8051

Here you can download the latest version of Turbo51 - a free Pascal compiler for 8051. Installation is very simple: just unzip downloaded file with it's folder structure. It is a good idea to include path to Turbo51.exe in the system PATH variable. To write your code you can use any IDE or editor of your choice. You can find some proposals on the IDE page.

 

Before you download and install Turbo51 you should read and accept the License Agreement. Turbo51 is released as a freeware. Developing it takes up a considerable amount of my time. If you are using Turbo51 for commercial projects or just like Turbo51 and you would like to support further development, you can donate some small amount via PayPal. Donations are a great way to show your appreciation for my work. Besides being an incredible boost to my morale, they are also a great incentive to fix any bug you find in my software and to add new features.



0.1.3.5 (03.12.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

0.1.3.4 (17.05.2009)

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

0.1.3.3 (27.12.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

0.1.3.2 (04.11.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 [code start], [code size], [xdata start], [xdata size], [heap size]
Warning: The syntax of compiler directive $M has been changed. Make sure all references are updated with the new syntax.

0.1.3.1 (21.09.2008)

  • Fixed bug: Compiler crashes when generating OMF file without map file (command line option -O without -G)

0.1.3.0 (21.09.2008)

  • Fixed bug: Unreachable RET/RETI at the end of assembler procedure is not eliminated
  • Fixed bug:   Private methods crashed compiler
  • Fixed bug:   $M directive in unit not reported as error
  • Fixed bug:   Instructions to load ACC before JB  ACC.n, Label in inline procedure were removed in some cases
  • Fixed bug:   Initial high byte XSP calculation uses ADD instead of ADDC
  • Change:      Reported time is now only time during compilation and optimization (excluding time for writing files)
  • Change:      Interrupt assembler procedures do not automatically save registers and switch register bank
  • New feature: Added compiler directive InlineCode
  • New feature: Generation of detailed map file
  • New feature: Generation of absolute OMF-51 file including extended records for source-level debugging
  • New feature: Procedures can be placed at specified absolute address
  • Warning: Unit file format has changed. Delete all unit files (*.u51) compiled with old versions of Turbo51 or use command line option /B to rebuild all units.

0.1.2.1 (27.08.2008)

  • Fixed bug: Compiler crashes when calling procedure/function with boolean and non-boolean parameters

0.1.2.0 (16.08.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 improvements in source files processing
  • Change: Improvements in source line marking relative to generated code
  • Change: Minor improvements in error reporting in some cases
  • Change: Minor improvements 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

Warning: Unit file format has changed. Delete all unit files (*.u51) compiled with old versions of Turbo51 or use command line option /B to rebuild all units.


0.1.1.0 (22.06.2008)

  • Fixed bug: Internal error on some integer operations
  • Fixed bug: Wrong comparison of integer byte and word operands in procedures marked with UsingAny directive
  • Fixed bug: Internal error when some redundant code was removed by the optimizer
  • Fixed bug: Jump to $0000 caused by System procedures Val and Str
  • Fixed bug: various bug fixes in Asm statement
  • Change: Directive 'Recursive' changed to 'Reentrant'
  • New feature: Assembler statement: registers B, DPL, DPH, SP have precedence over locally defined variables with the same name
  • New feature: Compiler directives are not case sensitive anymore
  • New feature: Added switch $AbsoluteInstructions (short version: $A) to generate AJMP/ACALL instructions
  • New feature: Added library Turbo51A.l51 with AJMP/ACALL instructions and command line option /LA to use this library (Turbo51A.l51)

0.1.0.8 (01.06.2008)

  • Fixed bug: 'in' operator with constant set (element was not saved to R1)
  • Minor improvements in error reporting
  • Minor changes in file handling

0.1.0.7 (25.05.2008)

This is the first released version of Turbo51. It is not beta nor alpha version yet. It is simply a version that works fine and can be used for some project based on almost any 8051 derivative.