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.

Turbo51 - Turbo Pascal Compiler for 8051

Turbo51
Version 0.1.3.17, released 25.06.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
This is the latest version

Turbo51
Version 0.1.3.16, released 14.10.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
Turbo51
Version 0.1.3.15, released 15.07.2012
  • Fixed bug:   Using the -O or -OX switch without the -G switch crashes the compiler
Turbo51
Version 0.1.3.14, released 10.07.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)
Turbo51
Version 0.1.3.13, released 09.03.2012
  • Fixed bug: Wrong register optimization in system function Abs for integers
  • Fixed bug: Bug in calculation of unary minus for Real variables
Turbo51
Version 0.1.3.12, released 01.02.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
Turbo51
Version 0.1.3.11, released 09.10.2011
  • 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
Turbo51
Version 0.1.3.10, released 18.07.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
Turbo51
Version 0.1.3.9, released 30.01.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: Internal 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 (used for some monitors like PAULMON2)
Turbo51
Version 0.1.3.8, released 14.11.2010
  • Fixed bug:   Bug in system function Val
Turbo51
Version 0.1.3.7, released 21.08.2010
  • Fixed bug:   Wrong instruction address generated in some cases when using Word or LongInt variables at absolute addresses
Turbo51
Version 0.1.3.6, released 10.08.2010
  • Fixed bug: Wrong instruction address generated in some cases when using variables at absolute addresses
Turbo51
Version 0.1.3.5, released 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
Turbo51
Version 0.1.3.4, released 17.05.2009
  • Fixed bug: Wrong HEX file (at address $0002) in some rare cases
Turbo51
Version 0.1.3.3, released 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
Turbo51
Version 0.1.3.2, released 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.

Turbo51
Version 0.1.3.1, released 21.09.2008
  • Fixed bug: Compiler crashes when generating OMF file without map file (command line option -O without -G)
Turbo51
Version 0.1.3.0, released 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.

Turbo51
Version 0.1.2.1, released 27.08.2008
  • Fixed bug: Compiler crashes when calling procedure/function with boolean and non-boolean parameters
Turbo51
Version 0.1.2.0, released 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.

Turbo51
Version 0.1.1.0, released 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)
Turbo51
Version 0.1.0.8, released 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
Turbo51
Version 0.1.0.7, released 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.
Copyright © 2014 Igor Funa. All Rights Reserved. Terms, Conditions and Privacy policy