Additions, amendments and fixes made in version 3.3.0.5 Beta of the PROTON+ Compiler. (16th December 2007)

Amendments from Beta Version 3.3.0.4
Corrected the DIV32 command.
Corrected POT command with a comment following it.
Corrected String slicing. i.e. STRING1[INDEX].
Corrected some PPI file settings.
For the third party Library Manager software, the macros NUM_FSR, NUM_FSR0, NUM_FSR1, NUM_FSR2, and LABEL_WORD can now be accessed from
the BASIC file without a preceding ampersand. This ensures that they follow the rules of macro generation and usage and will help the optimiser do its job.

Added a simple cast for expressions within Conditions.

For example:
A comparison that contains an expression will always evaluate the expression with a DWORD (32-bit) product if the left hand variable is a WORD (16-bit).

IF WORDIN = (100 * WORDVAR) + 60000 THEN

A comparison that contains an expression will always evaluate the expression with a WORD (16-bit) product if the left hand variable is a BIT or BYTE (8-bit).

IF BYTEIN = (100 * BYTEVAR) THEN

The addition of a BYTE, WORD, DWORD or FLOAT keyword at the start of an expression within a condition will ensure that the expression will have the appropriate result. i.e.

IF DWORD WORDIN = (100 * WORDIN) + 60000 THEN

or

IF BYTE BYTEIN = BYTE (BYTEVAR - 20) THEN

Note: This will not become an official part of the language until it has been extensively tested.


 
Additions, amendments and fixes made in version 3.3.0.4 Beta of the PROTON+ Compiler. (1st December 2007)


ADDITIONS
WREG tracking optimisation is now implemented as standard for all devices.
This monitors the value held within the WREG and eliminates any unnecessary MOVLW mnemonics.
For example, a sequence of ASM mnemonics such as:

MOVLW 7
MOVWF VAR1
MOVLW 7
MOVWF VAR2


will be shortened to:

MOVLW 7
MOVWF VAR1
MOVWF VAR2


Added oscillator frequency 64MHz for use with the 16 MIPS (Million Instructions Per Second) 18F(K) devices.
Added full interrupt context saving and restoring with 14-bit core (16F) and 16-bit core (18F) devices by the use four new directives: -

HIGH_INT_SUB_START, HIGH_INT_SUB_END
LOW_INT_SUB_START, LOW_INT_SUB_END


When each of the above pair of directives surrounds a Hardware Generated Interrupt subroutine, any of the compiler's system variables used will be saved to reserved RAM
when the commands CONTEXT SAVE and CONTEXT RESTORE are issued.
Both high and low priority interrupts are catered for. For example: -

' High Priority Interrupt Subroutine for a 16-bit core (18F) device
HIGH_INT_SUB_START
InterruptSubHigh:
  CONTEXT SAVE
  ' Interrupt Code goes Here !
  CONTEXT RESTORE
HIGH_INT_SUB_END

' Low Priority Interrupt Subroutine for a 16-bit core (18F) device
LOW_INT_SUB_START
InterruptSubLow:
  CONTEXT SAVE
  ' Interrupt Code goes Here !
  CONTEXT RESTORE
LOW_INT_SUB_END


Several of the PICmicro's SFR's (Special Funtion Registers) will also be context saved along with the compiler's System Variables.
This is unavoidable, and essential for the seemless operation of the program.
The SFR's in mention are: -

WREG, STATUS, BSR, FSR0L\FSR0H, FSR1L\FSR1H, FSR2L\ FSR2H, PRODL\PRODH, TBLPTRL\TBLPTRH, and TABLAT

When using 14-bit core devices, the declares INT_SUB_START, INT_SUB_END can be used as well as HIGH_INT_SUB_START, HIGH_INT_SUB_END.

' Interrupt Subroutine for a 14-bit core (16F) device
INT_SUB_START
InterruptSub:
  CONTEXT SAVE
  ' Interrupt Code goes Here !
  CONTEXT RESTORE
INT_SUB_END

All of this takes RAM space, so the compiler reserves just enough RAM at the top of memory to cater for the amount of variables and SFR's used.
A hint (reminder) will be issued when this is accomplished, which can be disabled using the REMINDERS declare.

AMENDMENTS
Added support for long BASIC file names and file paths that exceed 62 characters. However, the full path should be kept less than 230 characters when using ISIS.
The compiler now produces a single ASM file containing all the information necessary for the PICmicro used.

The compiler now implements dead code removal, further tightening the ASM produced by the declare:

DEAD_CODE_REMOVE ON-OFF or TRUE-FALSE or 1-0

This means that the optimiser now has only three levels (four including 0). Note 14-bit core devices now only have two levels of optimisation. See the "KNOWN ISSUES" section
The first two levels optimise the main code. The third optimise pass (18F devices only) tightens loops and branches further, but at a cost of another assembler pass.
Optimised Boolean conditions.
The CONFIG directive can no longer be used with a following equals character with 14-bit (16F) devices. i..e. CONFIG = xxxxx
Added preceding 0 to floating point display when using the faster, but larger library routine initiated by the declare:-

FLOAT_DISPLAY_TYPE = LARGE or FAST

Word arrays can now have up to 256 elements when using 16-bit core (18F) devices.
Support for the, now obsolete, One Time Programmable (OTP) 18C devices has been removed. Chiefly due to the lack of the essential LFSR mnemonic.
Altered library ASM code for 32-bit multiply to use the hardware multiplier with 18F devices. The code produced is slightly larger but the speed increase is tremendous.
The compiler now uses a single configuration file with the extension .PPI instead of the .INF and .LPB files.
The PPI files are semi-automatically created from Microchip .INC files, however, Microchip have changed some of  the fuse configuration  names.
To view the valid fuse names, open the relevant PPI file, found in the compiler's INC\PPI folder, and scroll down to the bottom of the texts.
The names are in the [CONFIGSTART]/[CONFIGEND] section.
For 16-bit core (18F) devices, the fuse names for the new CONFIG_START/CONFIG_END block can be found in the [FUSESTART]/[FUSEEND] section.
18F devices containing built-in ethernet hardware such as the 18F97J60 have an SFR (Special Function Register) named EDATA which clashes with the compiler's eeprom data Keyword.
The EDATA SFR has to be addressed as _EDATA or PP_EDATA
 
Implemented support using PPI files for devices: -

12-bit core OTP (One Time Programmable).
12C508, 12C508A, 12C509, 12C509A, 12CE518, 12CE519
16C54, 16C54A, 16C54B, 16C54C, 16C55, 16C554, 16C558, 16C55A, 16C56, 16C56A, 16C57, 16C57C, 16C58A, 16C58B, 16CR54
16CR54A, 16CR57A, 16CR57B, 16CR57C, 16CR58A, 16CR58B

12-bit core Flash Programmable.
10F200, 10F202, 10F204, 10F206, 10F220, 10F222, 12F508, 12F509, 12F510, 16F54, 16F57,RF509AF, RF509AG

14-bit core OTP (One Time Programmable).
12C671, 12C672, 12CE673, 12CE674
16C61, 16C62, 16C620, 16C620A, 16C621, 16C621A, 16C622, 16C622A, 16C62A, 16C62B, 16C63, 16C63A, 16C64, 16C642, 16C64A, 16C65
16C65A, 16C65B, 16C66, 16C662, 16C67, 16C71, 16C710, 16C711, 16C712, 16C715, 16C716, 16C717, 16C72, 16C72A, 16C73, 16C73A
16C73B, 16C74, 16C745, 16C74A, 16C74B, 16C76, 16C765, 16C77, 16C770, 16C771, 16C773, 16C774, 16C781, 16C782, 16C923, 16C924
16CE623, 16CE624, 16CE625, 16CR62, 16CR63, 16CR64, 16CR65, 16CR72, 16CR83, 16CR84,16C432, 16C433, 16C505

14-bit core Flash Programmable.
12F629, 12F635, 12F675, 12F683, RF675F, RF675H, RF675K
16C84, 16F506, 16F610, 16F616, 16F627, 16F627A, 16F628, 16F628A, 16F630, 16F636, 16F639, 16F648A, 16F676, 16F684, 16F685, 16F687
16F688, 16F689, 16F690, 16F716, 16F72, 16F73, 16F737, 16F74, 16F747, 16F76, 16F767, 16F77, 16F777, 16F785, 16F818, 16F819
16F83, 16F84, 16F84A, 16F87, 16F870, 16F871, 16F872, 16F873, 16F873A, 16F874, 16F874A, 16F876, 16F876A, 16F877, 16F877A
16F88, 16F882, 16F883, 16F884, 16F886, 16F887, 16F913, 16F914, 16F916, 16F917, 16HV610, 16HV616

16-bit core Flash Programmable.
18F1220, 18F1230, 18F1320, 18F1330, 18F2220, 18F2320, 18F2331, 18F2410, 18F242, 18F2423, 18F2431, 18F2439, 18F2455, 18F248, 18F24J10, 18F24K20
18F2510, 18F2515, 18F252, 18F2520, 18F2523, 18F2525, 18F2539, 18F2550, 18F258, 18F2580, 18F2585, 18F25K20, 18F2610, 18F2620, 18F2680, 18F4220
18F4320, 18F4331, 18F4410, 18F442, 18F4423, 18F4431, 18F4439, 18F4455, 18F448, 18F44J10, 18F44K20, 18F4510, 18F4515, 18F452, 18F4520, 18F4523
18F4525, 18F4539, 18F4550, 18F458, 18F4580, 18F4585, 18F45J10, 18F45K20, 18F4610, 18F4620, 18F4680, 18F6310, 18F6390, 18F63J90, 18F6410, 18F6490
18F64J90, 18F6520, 18F6525, 18F6585, 18F65J10, 18F65J15, 18F65J50, 18F65J90, 18F6620, 18F6621, 18F6622, 18F6627, 18F6680, 18F66J10, 18F66J15, 18F66J50
18F66J55, 18F66J60, 18F66J65, 18F6720, 18F6722, 18F67J10, 18F67J50, 18F67J60, 18F8310, 18F8390, 18F83J90, 18F8410, 18F8490, 18F84J90, 18F8520, 18F8525
18F8585, 18F85J10, 18F85J15, 18F85J50, 18F85J90, 18F8620, 18F8621, 18F8627, 18F8680, 18F86J10, 18F86J15, 18F86J50, 18F86J55, 18F86J60, 18F86J65, 18F8720
18F8722, 18F87J10, 18F87J50, 18F87J60, 18F96J60, 18F96J65, 18F97J60.

For 18LF devices use the standard 18F device. This list of devices will be amended when final datasheets for a specific device are available from Microchip.

FIXES
Corrected Integer DWORD = DWORD + WORD for 14-bit core devices where any of the variables are not in the same bank and the operator is not the same as the assignment.
Corrected RC5IN command with 16-bit core (18F) devices.
Corrected Complement and Negation within expressions.
Corrected Keyboard mapping for countries other than UK and American English when using Floating Point Constants.
Corrected BRANCHL with 16-bit core (18F) devices where the list of labels is too long to be jumped over.
Slowed down OREAD library routine when using an 8MHz crystal.
Corrected SERIN with timeout, Sometimes not loading a variable with the received data.
Corrected CREAD and CWRITE with 14-bit core devices containing SFR EECON1 in bank1 of RAM.
Corrected ADIN with devices 16F883, 16F883, 16F886 and 16F887.
Corrected WORD Array results within expressions when the Array has an expression for its index.
Corrected some obscure bank anomalies with certain 16-bit core (18F)  DWORD compares.
Corrected the creation of a floating point constant when using an expression containing alias's to floating point constants: -

SYMBOL X = 2.0
SYMBOL Y = 100.0
SYMBOL Z = X * Y


Z will represent the floating point constant 200.0

If a mix of floating point constants and  integer constants are in the expression, the compiler will implement a floating point calculation: -

SYMBOL X = 2 '(integer)
SYMBOL Y = 100.0
SYMBOL Z = X * Y


Z with represent the floating point constant 200.0

KNOWN ISSUES
1).

Compiler does not complain with a syntax error if a quoted string of characters is used within an expression and is not the first part. This will produce no code for the expression.
STR and STRN accept multiple parameters but do not produce the correct code if STR or STRN are used as parameters before a quoted character string, or value.

3).
The Optimiser for 14-bit (16F) devices still has a few problems when using optimisation levels greater than 1 on some large, complex, programs.
However, the 16-bit (18F) optimiser works as expected and is recommended.

Important Note: The optimiser for 14-bit core devices is no longer a supported feature of the compiler and is only retained because of user pressure.

2).
A deeply nested inline command as a LOOKUPL parameter will cause an internal stack underflow error.

3).
STRING concatenations where the assignment string is also one of the operators after the first operator will produce an incorrect assignment result.
For example: -

STRING1 = "TEXT"
STRING1 = "1234" + STRING1

will leave STRING1 holding "12341234TEXT"

The workaround is to assign STRING1 to a temporary string first: -

STRING1 = "TEXT"
TEMP_STRING = STRING1
STRING1 = "1234" + TEMP_STRING


 
Additions, amendments and fixes made in version 3.2.5.4 of the PROTON+ Compiler. (12th February 2007)


ADDITIONS
Added support for devices: -
12F510, 16F506, 16F616, 16F636, 16F639, 16F883, 16F884, 16F886, 16F887, 18F2423, 18F2523, 18F4423, 18F4523, 18F65J10,
18F65J15, 18F66J15, 18F66J60, 18F66J65, 18F67J10, 18F67J60, 18F85J10, 18F86J10, 18F86J60, 18F86J65, 18F87J10, 18F87J60,
18F96J60, 18F96J65, 18F97J60.
Added DECLARE to swap the position of the TRIS register manipulation with the HIGH and LOW commands: -

DECLARE HIGHLOW_TRIS_REVERSE =
ON or OFF, 1 or 0, TRUE or FALSE

When the HIGH or LOW command is issued, the PICmicro's TRIS (direction) register is altered then the PORT is altered,
however, some users have stipulated that the reverse of this operation is required. i.e. the PORT altered then the TRIS.

This DECLARE can be used throughout the program altering the TRIS position at will.

The default if the DECLARE is not used if the TRIS manipulated then the PORT.
 
AMENDMENTS
None
   
FIXES
Corrected DWORD < BYTE, DWORD < WORD, BYTE > DWORD, and WORD > DWORD Comparisons.
Corrected intermittent ASM error "Argument Out of Range" when using Floating Point Trigonometry.
Corrected BAUDCON register name in 18F4620 INF and LPB files.
Corrected LPB files for: - 18F6310, 18F6390, 18F6410, 18F6490, 18F8310, 18F8410, 18F8490.

 
Additions, amendments and fixes made in version 3.2.5.2 of the PROTON+ Compiler. (3rd October 2006)


ADDITIONS
Added crystal frequency 29.2MHz (7.3MHz * 4) for 14-bit (16F) and 16-bit (18F) core devices. Use XTAL = 29.
Added commands I2CIN and I2COUT. These communicate with the I2C bus and operate similarly to BUSIN and BUSOUT
but have user configurable SDA and SCL pins.
Syntax: -

I2CIN SDA Pin , SCL Pin , Control , { Address }, [ Variable {, Variable…} ]
I2COUT SDA Pin , SCL Pin , Control , { Address }, [ Variable {, Variable…} ]


AMENDMENTS
None
   
FIXES
Corrected RAM bank anomaly for 16-bit core (18F) devices.
Corrected BIT to BIT operations when bits are in differing banks and none of the bits are in ACCESS RAM or an SFR with 16-bit core (18F) devices.
Corrected amount of UARTS within INF files for devices 18F2680, 18F2585, 18F4680, and 18F4585.
Corrected PPRINT when displaying 32-bit or floating point values.
Corrected CSTR with 16-bit core (18F) devices and Samsung graphic LCD.
Corrected error produced with 32-bit binary values created with SYMBOL.

 Additions, amendments and fixes made in version 3.2.5.1 of the PROTON+ Compiler. (8th August 2006)

ADDITIONS
Added crystal frequency 19.66MHz for 14-bit (16F) and 16-bit (18F) core devices. Use XTAL = 19.
Added crystal frequency 7.3MHz for 14-bit (16F) and 16-bit (18F) core devices. Use XTAL = 7.
Added support for devices; 18F2420, 18F4420, 18F24J10, 18F44J10, 18F25J10, 18F45J10, 10F220, 10F222.


AMENDMENTS
Commands HIGH and LOW can now use the Latch registers as a parameter with 16-bit (18F) devices.
Command SET now sets all RAM to 255 if no parameter follows it.
Increased accuracy of 32-bit signed integer divide library subroutine for 14-bit (16F) and 16-bit (18F) core devices.
Optimised for speed and size, Shift Left and Shift Right for 16-bit (18F) devices.
Optimised for speed and size, 16-bit integer divide for 18F devices.
Optimised accurate floating point display library subroutine for 14-bit (16F) and 16-bit (18F) core devices.
Optimised DWORD comparisons for 14-bit (16F) and 16-bit (18F) core devices.
   
FIXES
Corrected intermitent code misalignment with LOOKUP, LOOKUPL, LOOKDOWN, and LOOKDOWNL for 14-bit (16F) devices.
Corrected Dword LESS THAN comparison on negative values. i.e. IF DWORDIN < -1 THEN.
Corrected Float to Byte Array conversion.
Corrected Sign and Complement of Arrays where the assignment and the operand are both arrays. i.e. ARRAY[INDEX] = -ARRAY[INDEX].
Corrected expression DWORD = WORD + BYTE with 16-bit (18F) devices.
Corrected eeprom size for 16F874 and 16F876 devices.
Corrected INF files for 18F2510 and 18F4510 to indicate code memory reads only.
Corrected INF files for 18F2585, 18F4585, 18F2680 and 18F4680 to indicate the correct end address of ACCESS RAM.
Corrected ADC amount with 18F2431 device.
Corrected DWORD > CONSTANT comparison with 16-bit (18F) devices.
Corrected ESTR modifier with devices containing more than 256 bytes of data memory. i.e. eeprom.
Corrected DIV32 command with 16-bit (18F) devices.
Corrected BIT = BIT operation when bit variables are in differing RAM banks with 16-bit (18F) devices.
Corrected DWORD <= 511 comparison with 16-bit (18F) devices.
Corrected ABS operation of a BYTE variable.
Corrected Shift Right and Shift Left operations where the amount of shifts is held in the same variable as the result. i.e. BYTEOUT = BYTEIN >> BYTEOUT.
Corrected inapropriate complementing of constants within comparisons following legitimate negative comparisons.
Corrected some code page switching issues with 12-bit and 14-bit core devices.
Corrected CWRITE block write for 16-bit core (18F) devices.
Corrected HRSIN with some devices containing 2 USARTs.
Corrected identification of hardware PWM within P16F864.INF and 16F865.INF files.

KNOWN ISSUES
Compiler does not complain with a syntax error if a quoted string of characters is used within an expression and is not the first part. This will produce no code for the expression.
STR and STRN accept multiple parameters but do not produce the correct code if STR or STRN are used as parameters before a quoted character string, or value.

The Optimiser for 14-bit (16F) devices still has a few problems when using optimisation levels greater than 1 on some large programs. However, the 16-bit (18F) optimiser works as expected.
A deeply nested inline command as a LOOKUPL parameter will cause an internal stack underflow error.

STRING concatenations where the assignment string is also one of the operators after the first operator will produce an incorrect assignment result.
For example: -

STRING1 = "TEXT"
STRING1 = "1234" + STRING1

will leave STRING1 holding "12341234TEXT"

The workaround is to assign STRING1 to a temporary string first: -

STRING1 = "TEXT"
TEMP_STRING = STRING1
STRING1 = "1234" + TEMP_STRING


 
Additions, amendments and fixes made in version 3.2.4.5 of the PROTON+ Compiler. (9th February 2006)

ADDITIONS
Added declare: -

DECLARE FLOAT_ROUNDING = ON or OFF, 1 or 0, TRUE or FALSE

This will disable or enable  floating point rounding.
The default if the DECLARE is not used in the program is Floating Point Rounding ON.

Added statements CONFIG_START and CONFIG_END to encompass the new CONFIG directives for 18F devices: -

CONFIG_START
    OSC = HS         ' Oscillator Selection HS
    OSCS = OFF       ' Osc. Switch Enable Disabled
    PWRT = ON        ' Power-up Timer Enabled
    BOR = OFF        ' Brown-out Reset Disabled
    BORV = 25        ' Brown-out Voltage 2.5V
    WDT = OFF        ' Watchdog Timer Disabled
    WDTPS = 128      ' Watchdog Postscaler 1:128
    CCP2MUX = ON     ' CCP2 MUX Enable (RC1)
    STVR = OFF       ' Stack Overflow Reset Disabled
    LVP = OFF        ' Low Voltage ICSP Disabled
    DEBUG = OFF      ' Background Debugger Enable Disabled
    CP0 = OFF        ' Code Protection Block 0 Disabled
    CP1 = OFF        ' Code Protection Block 1 Disabled
    CP2 = OFF        ' Code Protection Block 2 Disabled
    CP3 = OFF        ' Code Protection Block 3 Disabled
    CPB = OFF        ' Boot Block Code Protection Disabled
    CPD = OFF        ' Data EEPROM Code Protection Disabled
    WRT0 = OFF       ' Write Protection Block 0 Disabled
    WRT1 = OFF       ' Write Protection Block 1Disabled
    WRT2 = OFF       ' Write Protection Block 2 Disabled
    WRT3 = OFF       ' Write Protection Block 3 Disabled
    WRTB = OFF       ' Boot Block Write Protection Disabled
    WRTC = OFF       ' Configuration Register Write Protection Disabled
    WRTD = OFF       ' Data EEPROM Write Protection Disabled
    EBTR0 = OFF      ' Table Read Protection Block 0 Disabled
    EBTR1 = OFF      ' Table Read Protection Block 1 Disabled
    EBTR2 = OFF      ' Table Read Protection Block 2 Disabled
    EBTR3 = OFF      ' Table Read Protection Block 3 Disabled
    EBTRB = OFF      ' Boot Block Table Read Protection Disabled
CONFIG_END


The configs shown above are for the 18F452 device and differ from device to device.
An complete list of CONFIG fuse settings can be found in the "PIC18-Config-Settings-Addendum_51537e.pdf" file downloadable from www.microchip.com.

The text between
CONFIG_START and CONFIG_END will have the preceding CONFIG text added and is passed directly to the assembler.
Any errors in the fuse setting texts will result in Assembler errors being produced.

AMENDMENTS
Optimiser now picks up the date and version from the compiler. This saves having to build a new optimiser for every version update.
Optimised expression BYTE = CONSTANT >> BYTE for 18F devices.
Optimised expression WORD = BYTE + CONSTANT for all devices.
Optimised expression WORD = BYTE - CONSTANT for all devices.
Optimised Boolean condition BYTE = CONSTANT for all devices.
Register ADCON1 is not manipulated for ALL_DIGITAL with 16F676 device.

FIXES
Corrected inapropriate use of the mnemonic MOVLW 0 instead of CLRW.
Corrected error produced from decimal point placed within a quoted string of characters within a condition. i.e. IF STRING = "HELLO.THERE" THEN.
Corrected P18F8722.INF and P18F8722.LPB files.
Corrected Boolean condition BYTE != 0. i.e. when used with AND or OR within an IF-THEN condition.
Corrected code memory access with devices that have registers EEADR and EEDATA in RAM bank 1. i.e. 16F688 etc...
Corrected missing or misspelled HLVDCON register from some INF and LPB files. Compiler now recognises HLVDCON or LVDCON.
DELAYUS command now creates the correct code for constant expressions as the delay time.
Corrected compiler error if an inappropriate keyword is used within a condition.
Corrected wrong XTAL frequency error and wrong numeric value translation.
Corrected the HBUS commands for use with the 18F4XXX devices, and 18F2XXX devices, and possibly others.
This anomaly occurred because Microchip blundered with the MSSP module for the newer 18F devices, and existing code for I2C master did not operate correctly without their workarounds implemented.
See the 18F4520 errata datasheet for other anomalies concerning the MSSP module. downloadable from www.microchip.com

KNOWN ISSUES
Compiler does not complain with a syntax error if a quoted string of characters is used within an expression and is not the first part. This will produce no code for the expression.
STR and STRN accept multiple parameters but do not produce the correct code if STR or STRN are used as parameters before a quoted character string, or value.

The Optimiser for 14-bit (16F) devices still has a few problems when using optimisation levels greater than 1 on some large programs. However, the 16-bit (18F) optimiser works as expected.
A deeply nested inline command as a LOOKUPL parameter will cause an internal stack underflow error.

STRING concatenations where the assignment string is also one of the operators after the first operator will produce an incorrect assignment result.
For example: -

STRING1 = "TEXT"
STRING1 = "1234" + STRING1

will leave STRING1 holding "12341234TEXT"

The workaround is to assign STRING1 to a temporary string first: -

STRING1 = "TEXT"
TEMP_STRING = STRING1
STRING1 = "1234" + TEMP_STRING


 
Additions, amendments and fixes made in version 3.2.0 of the PROTON+ Compiler. (17th January 2006)


ADDITIONS
Added support for the 18F66J10 device, more J parts to follow.
Added error message if STACK_SIZE is larger than 127 bytes. This is because command POP uses the PLUSW2 mnemonic, which is 2's complement in operation.

AMENDMENTS
No manipulation of the TBLPTRU register is carried out with 18F devices that don't contain more than 64K bytes of code memory, thus saving code space.
However, the compiler does clear the TBLPTRU register before the main program starts, because some PICmicros cannot guarantee that it is cleared at reset.
If a user ASM section alters the TBLPTRU register, remember to clear it before entering back into BASIC code.
To access the upper 64K of a larger PICmicro device from BASIC, issue the declare: -

ACCESS_UPPER_64K = 1 or 0, TRUE or FALSE, ON or OFF

However, this will increase code size considerably, as the TBPLTRU register will be manipulated at all times.
The compiler will give a warning if the 64K code memory barrier is breached.

FIXES
Corrected omission of EEADRH register in 18F2525 and 18F4545 INF and LPB files.
Corrected and optimised expression BYTE = BYTE >> BYTE, where any of the variables are in differing RAM banks on 18F devices.
Corrected and optimised expressions WORD = WORD * 512, WORD = WORD * 1024, and WORD = WORD * 2048 on 18F devices.
Corrected and optimised expressions WORD = BYTE * CONSTANT, where num contains a value other than 1 in its high byte on 18F devices.
Corrected and optimised expression BYTEOUT = CONSTANT << BYTEIN, where BYTEOUT and BYTEIN are the same variable on 18F devices.
Fixed
incorrect recognition of compiler keywords wrapped in quotes with a GOSUB containing parameters.

 
Additions, amendments and fixes made in version 3.1.9 of the PROTON+ Compiler. (11th January 2006)


ADDITIONS
None

AMENDMENTS
None

FIXES
None

Note. This version has been created in order to overwrite a corrupted file download of version 3.1.8.

 Additions, amendments and fixes made in version 3.1.8 of the PROTON+ Compiler. (4th January 2006)

 ADDITIONS
Added Crystal frequency 22.1184MHz for 14-bit (16F) and 16-bit (18F) devices. Use XTAL = 22.
Added a new declare to indepedently set the baud rate of RSOUT. DECLARE RSOUT_BAUD = n.

 AMENDMENTS
Optimised byte arrays with less than 128 elements when using 16-bit (18F) devices.
Moved the offset size for the declare PROTON_START_ADDRESS to the amount of code memory contained within the PICmicro.

 FIXES
Fixed recognition of PAUSE, PAUSEUS, DEBUG, DEBUGIN, and LCDOUT for PBP compatability.
Fixed STRING = BYTE_ARRAY[INDEX] construct.
Fixed stray negation of expression results within a condition.
Fixed Floating point LOG subroutine.

 Additions, amendments and fixes made in version 3.1.7 of the PROTON+ Compiler. (12th December 2005)

 ADDITIONS
Added support for devices: -
18F6310, 18F6390, 18F6410, 18F6490, 18F6520, 18F6525, 18F6621, 18F6622, 18F6627, 18F6722
18F8310, 18F8390, 18F8410, 18F8490, 18F8520, 18F8525, 18F8621, 18F8627, 18F8722

Added Declare PROTON_START_ADDRESS for 16-bit core (18F) devices.
This offsets the library file to the designated address: -

DECLARE PROTON_START_ADDRESS = $0800 ' Start at address $0800

This allows bootloaders etc to be located at the bottom of code memory.

 AMENDMENTS
Added 4_FOSC, 16_FOSC, and 64_FOSC to ADIN_TAD declare.
Removed the IDE bitnames texts from the INF files.

 FIXES
Fixed 18F8720 INF and LPB files.
Fixed PORTE definition in 16F737.INF file.
Fixed typo in file OPT_LD16.INC
Fixed address offset error when aliasing a string or an array to another string or array.
Fixed ASM code for expression WORD = BYTE << CONSTANT.
Fixed the THEN not found error when a Quoted String of Characters contained an inline command's text within an IF-THEN construct.
Fixed analogue channels greater than 7 with ADIN command on 14-bit core devices.
Fixed SEROUT with arrays that cross BANK boundaries on 14-bit core devices.

 Additions, amendments and fixes made in version 3.1.6 of the PROTON+ Compiler. (19th September 2005)

 ADDITIONS
None

 AMENDMENTS
Added an 8x8 division subroutine for programs that only operate on BYTE variables.
This will be overridden by the 16x16 division subroutine if the later is used, or modulus is used.
You must remember that some commands use the 16x16 division subroutine internally such as PRINT, HPWM etc,
so this will override the 8x8 subroutine to save code memory at the sacrifice of a little speed.
Optimised the method used to pass byte variables to the 16x16 division subroutine.
Optimised (for speed) some SHIFT, DIVIDE and MULTIPLY operations with 16-bit core (18F) devices.

 FIXES
Fixed some warning messages that simply displayed a number instead of a message.
Fixed some comparisons for correct bank switching.
Fixed Complement and Negation of array assignments. i.e. VARIABLE = ~ARRAY[INDEX].
Fixed aliasing to a SYSTEM variable.
Fixed Spelling mistake NOLOST instead of NOLIST in file OPT_LD16.INC
Fixed INF files for 12F629, 12F683, 16F737, 16F747, 16F767, 16F777, 18F2539, 18F2620, 18F4525, 18F4539, 18F4620

 Additions, amendments and fixes made in version 3.1.5 of the PROTON+ Compiler. (11th August 2005)

 ADDITIONS
None

 AMENDMENTS
None

 FIXES
Fixed FOR-NEXT loop with negative step using BYTE variables or 8-bit constants.
Fixed FOR-NEXT loop with BYTE variables and constant values 0 TO 255.

 Additions, amendments and fixes made in version 3.1.2 of the PROTON+ Compiler. (26th July 2005)

 ADDITIONS
Added release version of the optimiser with 6 levels. Still rather experimental but seems to work well.
Added DECLARE LCD_COMMANDUS to choose the delay (in microseconds) between commands sent to an alphanumeric LCD.
Added DECLARE LCD_DATAUS to choose the delay (in microseconds) between data sent to an alphanumeric LCD.
Added support for RF12F675, 16F716, 16F785, 16F685, 16F687, 16F689, 16F890, 16F913, 16F914, 16F915, 16F916
18F2580, 18F4580

 AMENDMENTS
Printing or serial transmission of quoted strings of characters on devices that can
access their own code memory now places the ASCII text in code memory as a string of text.
INCLUDE directive is now able to place the exact path of an INCLUDE file. i.e. INCLUDE "C:\MY_PROGRAMS\TEST.INC"
Tightened IF-THEN-ELSE-ENDIF syntax checking.
ALL_DIGITAL can now be used as an actual DECLARE or compiler directive.

 FIXES
Fixed error checking for casting a constant value's alias.
Fixed OSCCAL address for 16F630 and 16F676.
Fixed reference to RE3 with devices: - 18F2220, 18F2320, 18F2331, 18F2431, 18F2439, 18F2455, 18F2520
18F2525, 18F2539, 18F2550, 18F2585, 18F2620, 18F2680.
Fixed ADIN command with 12F683.
Fixed recognition of the RF12C509 device.
Fixed EEADRH register recognition with 18F4620 device.
Fixed "Command terminated incorrectly" error when an expression wrapped in parenthasis
follows a quoted string of characters in commands HSEROUT, and RSOUT.
Fixed internal alias addressing
Fixed TOUPPER and TOLOWER functions

 Additions, amendments and fixes made in version 3.08 of the PROTON+ Compiler. (11th April 2005)

 ADDITIONS
Added an optimising pass in the compiler.
The optimiser has 3 levels enabled by the declare: -

OPTIMISER_LEVEL = 0, 1, or 2

Level 0 Disables the optimiser
Level 1 Re-arranges Page boundary settings with 12 and 14-bit core devices and chooses appropriate mnemonics for 16-bit core devices.
Level 2 Manipulates the way some conditional jumps are performed on all devices.

The compiler defaults to the optimiser DISABLED.

 Note that the optimiser is still a Beta version.

If you experience any difficulties that are a direct result of using the optimiser please contact me at [email protected].
But please ensure that it is the optimiser at fault before doing so.

 AMENDMENTS
None

 FIXES
None

 Additions, amendments and fixes made in version 3.07 of the PROTON+ Compiler. (29th March 2005)

 ADDITIONS
Added support for a Toshiba T6963 graphic LCD of any size up to 256 x 256 pixels.
Added TOSHIBA_COMMAND command for the above Toshiba LCD.
Added TOSHIBA_UDG command for the above Toshiba LCD. This allows User Defined Graphics to be created.
Added TEXT modifier to LCDREAD in order for it to read Text Data from a Toshiba LCD.
Added USB 2.0 commands for suitable 18F devices.
Added support for 18F2520, 18F4520, 18F2455, 18F2550, 18F4455, 18F4550 devices.

 AMENDMENTS
Altered the way STRING variables hold a BYTE or a BYTE array variable. Now, instead of the BYTE variable
being used as a pointer, the contents of the variable will be placed within the STRING. However, WORD, and DWORD variables will
still be used as pointers. This only applies to STRING loading and concatenation.

When using a STRING variable within commands SERIN, HSERIN, HSERIN2 and RSIN, either a CR (13) or a NULL (0) will terminate the string.
This allows a terminal program to be used to load a STRING variable, and terminate when the RETURN key is detected.
Note that the CR (Carriage Return) value (13) will NOT be placed within the STRING, and it will be replaced by a NULL (0).

Altered the mnemonics produced by ALL_DIGITAL for the 16F87 and 16F88 devices. It does not alter ADCON1 now.
Altered the LINE and CIRCLE commands library subroutines for larger resolution graphic LCDs.
PUSH and GOSUB with parameters can now push a pointer to an array: -

PUSH ARRAY

If an array without an index is used in POP, the contents of the pushed array will be copied into the destination array: -

POP ARRAY

 FIXES
Fixed FLOAT = FLOAT + BYTE expression not finding system variable PPZ.
Fixed Context Saving\Restoring of FSR1L\H when STRING variables are declared within a program.
Fixed MCLRE_OFF fuse value for devices 18F1220 and 18F1320.
Fixed mnemonic NEGF not being recognised.
Fixed assembler label PRT@MTL2 not being found when printing a quoted string of characters with an 18F device.
Fixed CLEAR word array when using an 18F device.
Fixed wrong variable name error being produced with array variable names over 20 characters used within expressions.
Fixed TXSTA and SPBRG bank selection with certain 14-bit core devices.
Fixed bank selection for hardware registers starting at address 0X0F60 with 16-bit core devices.
Fixed EEPROM access using the ESTR modifier when PICmicro has eeprom larger than 256 bytes.
Fixed final program byte count with 16-bit core devices when eeprom data is an uneven amount.

 Amendments and fixes made in version 3.06 of the PROTON+ Compiler.

 AMENDMENTS
Altered default CONFIG fuses of devices 18F2410, 18F2525, 18F2610, 18F2620, 18F4410, 18F4525, 18F4610, and 18F4620
to Enhanced Instruction Set OFF, and PORTB 0-4 digital mode on reset.

 FIXES
Fixed Word Arrays when loaded with the value 0.
Fixed PPRINT not finding some system variables.


 Amendments and fixes made in version 3.05 of the PROTON+ Compiler.

 AMENDMENTS
Added C language type formatters to a quoted string of characters: -

\a Bell (alert) character $07
\b Backspace character $08
\f Form feed character $0C
\n New line character $0A
\r Carriage return character $0D
\t Horizontal tab character $09
\v Vertical tab character $0B
\\ Backslash $5C
\" Double quote character $22

Example: -

PRINT "HELLO WORLD\n\r"

Altered the way macros handle quoted strings of characters for 14 and 16-bit core devices.
CLEAR command now clears (resets to 0) all of an array if the array's name is used without the square braces: -

CLEAR ARRAY NAME

SET command now fills (sets to 255 or 65535) all of an array if the array's name is used without the square braces: -

SET ARRAY NAME

Compiler now recognises an empty quoted string of characters and will place a NULL in the string where found: -

STRING1 = "" + "HELLO"

relates to: -

STRING1 = 0,"H" "E" "L" "L" "O"

The above line would be nonsense as the NULL would terminate the string and any characters after it will be ignored.

When used within a comparison, a value of 0 will be used.

IF STRING1 = "" THEN STOP

relates to: -

IF STRING1#0 = 0 THEN STOP

Optimised RSIN, HRSIN, HSERIN STR modifier when using a 16-bit core device.

 ADDITIONS
Added SONYIN command to receive Sony SIRC infrared remote control data.
Added RC5IN command to receive Philips RC5 infrared remote control data.
Added special detection of 16F87 and 16F88 config settings. This sets CONFIG1 only.
Added support for devices 18F6585, 18F6680, 18F8585, and 18F8680

 FIXES
Fixed return parameter from GOSUB when the parameter is a byte array.
Fixed POP command when the parameter is a byte array.
Fixed STR modifier when used with BUSIN and HBUSIN (also optimised it's operation on 16-bit core devices).
Fixed compiler lockup when extra characters are used after a "THEN label" type IF-THEN operation.
Fixed the AT modifier with certain expressions.
Fixed the 16F872.INF file that stated the device had a USART.
Fixed the 18F248, 18F448, 18F258, 18F458 INF files that incorrectly assigned ADCON2.

 Amendments and fixes made in version 3.0 of PROTON+ Compiler.

 AMENDMENTS
Added Compact Flash interfacing commands, CF_INIT, CF_SECTOR, CF_READ, and CF_WRITE.
Increased the speed of compilation.
Optimised some shift operations.
Optimised LREAD command with 16-bit core devices.
Optimised Array operations with 16-bit core devices.
Optimised Integer ORing when using constants.
Optimised Integer ANDing when using constants and bits.
Optimised Negation of variables.
Altered Error message format for FOR without NEXT, and MACRO without ENDM.
Compiler now shortens the path of the BASIC file if more than 62 characters are detected.
It then tests the shortened path and filename to see if these exceed 62 characters before an error is produced.
Added extra info to the .INF files in order to allow conditional syntax highlighting in the new editor.
Added DT_MCHP_FLOAT,4 and DT_STRING to the .LST file for use with the ISIS simulator.
Added support for the 10F20x 6-pin PICmicro devices and 12F508, 12F509 8-pin flash PICmicro devices.
Added support for the 18F2545, 18F4545, 18F262, and 18F4620 PICmicro devices
Added three extra commands for efficient reading of LDATA tables. These are: -
LREAD8, LREAD16, and LREAD32. See helpfile for details.
The compiler now builds the full path and filename internally, in order to compensate for MPLAB only sending the filename.
This resulted in an error whenever a BASIC include file was used.
The compiler will now automatically use BRANCH instead of BRANCHL when used on PICmicros with only 1 code page.

 FIXES
Fixed LOOKDOWNL.
Fixed LOOKUPL when using an array as the index variable.
Fixed HSERIN/HRSIN when the assignment is a byte array.
Fixed double ASM label name DIG@LP error when using both WORD and DWORD DIG operator in the same program.
Fixed bank boundary crossing WARNING messages.
Fixed DWORD expressions within comparisons.
Fixed the length of entries for BRANCH, BRANCHL, ON GOTO, ON GOTOL, ON GOSUB, LOOKUP, LOOKUPL, LOOKDOWN, and LOOKDOWNL.
Fixed SHOUT data pin set to output.
Fixed BUTTON auto repeat with 14-bit core devices.
Fixed 32-bit multiply library subroutine.
Fixed FOR-NEXT Word loops with the STEP value as a variable.
Fixed FREQOUT with 16-bit core devices.
Fixed Shift Right operations from a DWORD into a BYTE or WORD.
Fixed 18F8720 recognition of USART2.
Fixed recognition of ports H and J on the larger 18Fxxxx devices.
Fixed HSERIN and HRSIN with a timeout label.
Fixed WORD to BYTE multiply where the Assignement Word variable is the same as the Expression Word variable. With 16-bit core devices
i.e.
WORDOUT = WORDOUT * BYTEIN

and

WORDOUT = BYTEIN * WORDOUT

Fixed Float into WORD or BYTE array assignments. i.e. MYARRAY[1] = FLOAT
Fixed LOOKUP, LOOKUPL, LOOKDOWN, LOOKDOWNL when using PBP or STAMP syntax.
Fixed Variable declaration when using PBP or STAMP syntax.
Fixed ALL_DIGITAL command for 12F675, 12F629, 12F683, 16F630, 16F676.
Fixed anomaly with DELAYMS on 16-bit core devices.
Fixed compiler giving PROTECTED COMMAND error when not applicable.
Fixed ABS function when used with floating point variables on a 16-bit core device.
Fixed SLEEP command with a parameter following it.
Fixed floating point constants used with SYMBOL. Now accepts a value without a preceding zero for fractional values.
Fixed Negation of a floating point variable.
Fixed the AT modifier with RSOUT.
Fixed FLOAT to WORD conversion for 14-bit core devices.
Fixed SEROUT with flow control on 16-bit core devices.
Fixed DWORD addition with a WORD variable on 16-bit core devices:- DWORD = DWORD + WORD
Fixed Floating Point Greater Than, Less Than, Greater or Equal, Less or Equal comparisons in boolean conditions.
Fixed REPEAT-UNTIL condition checking when used on a single line.

 Changes, fixes and additions made in version 2.2.0 BETA 8 of PROTON+ Compiler.

 AMENDMENTS
The compiler is now split into two entities. The loader and the compiler.
The loader incorporates any include files, sorts variables and labels. Extracts the PICmicro device,
checks for valid compiler files, then sends the resultant parsed code to the compiler's second executable.

This opens the door to having three seperate executables for the 12, 14, and 16-bit core devices.
Which will streamline the operation of the compiler, and also allow newer architecture devices, such as the dsPICs.

Error, Reminder, and Warning messages now contain the full path name of the offending file.

The Loader now produces an error if the BASIC filename's path is deeper than 62 characters.
This is an issue with the MPASM assembler and not the compiler.

At long last, the MPASM assembler is able to handle long filenames, so the compiler now passes long filenames to the assembler.
This means that any ancillary files produced by the compiler and assembler will also be the same.

When the compiler is used within MPLAB, it will compile for the PICmicro chosen in MPLAB's IDE and ignore any
DEVICE commands within the BASIC program.

 FIXES
Fixed BUTTON auto repeat with 14-bit core devices.

 Changes, fixes and additions made in version 2.2.0 BETA 7 of PROTON+ Compiler.

 AMENDMENTS
Most General syntax Errors are now reported on pass 3 of the compiler instead of pass 4. With all devices.
Added warning of default BYTE size if the AS keyword is missing from a DIM statement.

 FIXES
Fixed LOOKUP and LOOKUPL with 16-bit core devices.
Fixed HSERIN and HRSIN with a timeout label.
Fixed WORD to BYTE multiply where the Assignement Word variable is the same as the Expression Word variable. With 16-bit core devices
i.e.
WORDOUT = WORDOUT * BYTEIN

and

WORDOUT = BYTEIN * WORDOUT

Fixed Float into WORD or BYTE array assignments. i.e. MYARRAY[1] = FLOAT


 Changes, fixes and additions made in version 2.2.0 BETA 6 of PROTON+ Compiler.

 ADDITIONS
Added reminder whenever variable or constant declarations are recognised as PBP or STAMP syntax.
Added compatability for device 12F683.

 FIXES
Fixed LOOKUP, LOOKUPL, LOOKDOWN, LOOKDOWNL when using PBP or STAMP syntax.
Fixed Variable declaration when using PBP or STAMP syntax.
Fixed ALL_DIGITAL command for 12F675, 12F629, 12F683, 16F630, 16F676.

 Changes, fixes and additions made in version 2.2.0 BETA 5 of PROTON+ Compiler.

 AMENDMENTS
Floating point expressions will now always calculate as floating point whenever a FLOAT type variable is the assignment.
Even if the expression variables are not FLOAT types.

 FIXES
Fixed anomaly with DELAYMS on 16-bit core devices.
Fixed compiler giving PROTECTED COMMAND error when not applicable.
Fixed ABS function when used with floating point variables on a 16-bit core device.

 Changes, fixes and additions made in version 2.2.0 BETA 4 of PROTON+ Compiler.

 ADDITIONS
Added support for 3.58MHz and 14.32MHz (3.58 * 4) crystals. Use XTAL = 3 or XTAL = 14 accordingly.

 Changes, fixes and additions made in version 2.2.0 BETA 3 of PROTON+ Compiler.

 ADDITIONS
Added ON GOTO and ON GOTOL commands. These have the same funtionality as BRANCH and BRANCHL but are
more in-keeping with standard BASIC syntax.
Added ON GOSUB for 16-bit core devices. This Calls a subroutine based on an indexed value.
Added new devices. 16F684, 16F688, 16F737, 16F747, 16F767, 16F777, 18F2439, 18F4439, 18F2539, 18F4525, 18F4539

 AMENDMENTS
Updated the Help File in order to correct some typos.

 FIXES
Fixed string comparisons where the contents of a quoted string of characters contains a keyword's text.

 Changes, fixes and additions made in version 2.2.0 BETA 2 of PROTON+ Compiler.

 AMENDMENTS
The compiler now recognises empty quotes as a space when used in strings. i.e.

STRING1 = ""

Altered the way DATA memory is presented in the .PBP file. Allowing correct alignment in the HEX file for 16-bit core devices.

 FIXES
Fixed the access violation anomaly when quoted character strings of approximately 50 characters are used.
Fixed an internal error produced when lines of code are extremely long. i.e over 500 characters.

 IMPORTANT NOTICE
The compiler is now compiled using Borland Builder C++ version 6.0, in order to increase its speed and allow extra functionality.
However, this does mean that the compiler may not work with a 486 microprocessor, a minimum requirement is a Pentium.
It also means that it may not be compatible with Windows 95 and Windows 98 (First Edition).
This is a necessary change in order to keep up with current technologies.

 Changes, fixes and additions made in version 2.2.0 BETA 1 of PROTON+ Compiler.

 ADDITIONS
Added PUSH command. For 16-bit devices only. PUSH can also push multiple parameters: -

PUSH VAR1 , VAR2 , etc.

Added POP command. For 16-bit devices only.
Added parameters to the GOSUB command when using a software stack. For 16-bit devices only: -

GOSUB LABEL [VAR1 , VAR2, etc]

GOSUB also returns a variable from the stack: -

GOSUB LABEL [VAR1 , VAR2] , RET_VAR

It can also return a value without passing any parameters by placing two empty square brackets after the label name: -

GOSUB LABEL [] , RET_VAR

Added a parameter to RETURN in order to push a variable to the stack before returning from a subroutine. For 16-bit devices only: -

RETURN RET_VAR

Added STACK_SIZE declare in order to reserve memory at the top of RAM to be used by PUSH, POP and GOSUB/RETURN with parameters: -

STACK_SIZE = Amount of bytes to reserve.

Added STRING variables. For 16-bit devices only. Declared using the syntax: -

DIM String's Name AS STRING * 20

The value after the asterisk determines the length of the string.

Added MID$, LEFT$, RIGHT$. For 16-bit devices only.
Added LEN and STRCMP. For 16-bit devices only.
Added TOUPPER and TOLOWER for Strings with 16-bit core devices only. They convert uppercase to lowercase and vice-versa.
Added SBREAK to use the BRA mnemonic instead of the GOTO mnemonic with 16-bit core devices.
Added a second method of displaying floating point values. This allows more accurate and larger numbers to be displayed but requires more memory. However it does operate much faster than the standard routine.
Enabled/Disabled by DECLARE FLOAT_DISPLAY_TYPE LARGE/STANDARD.
If the declare is not issued within the program, the default is the STANDARD display routine.

Added floating point EXP function for 16-bit core devices.
Added floating point POW function for 16-bit core devices.

Added ESTR modifier to allow character strings to be displayed or transmitted that are stored in DATA memory. Same functionality and syntax as the CSTR modifier.

Example: -
STRING1 EDATA "HELLO WORLD",0
PRINT ESTR STRING1


Added the ability for PROTON+ to be integrated into MPLAB IDE, Version 6.40 onwards. More info to follow.

Added support for new PICmicro devices: -

16CE625, 16F87, 16F88

 AMENDMENTS
Added extra functionality to WAIT modifier. It can now wait for a series of
variables or values seperated by commas. i.e. WAIT (65,66,67).

CONTEXT SAVE/RESTORE now saves/restores the FSR1 register as well as FSR0 if strings are used in the program
and also saves/restores FSR2 if a STACK is set up. For 16-bit devices only.
These can be enabled/disabled by using the FSR_SAVE declare

Ammended P16F870.LPB file with TMRL1LH, ADRESLH and CCPR1LH for combining registers.

Improved floating point accuracy.

Added clock frequencies 25, 32, 40 and 64 for 14-bit core devices when using the Xilinx FPGA model.
This devices is named 16X76.

Added the ability for RSOUT, PRINT, HRSOUT etc to automatically output a string held in CODE memory
whenever they encounter a LABEL name within their parameters. This is the same functioanlity to using CSTR
but without placing the CSTR text in front of the label. This only applies to devices that can
read/modify their own code memory. i.e. 16F87x and 18Fxxx: -

PRINT LABEL

LABEL: CDATA "HELLO WORLD" , 0


Altered the way quoted strings are displayed on an LCD with 16-bit core devices.
The string is now placed in high memory as a data table, and a subroutine scans
and displays the characters. This can save many hundreds of bytes of code memory
with large programs.

Altered the way SEROUT, RSOUT, HRSOUT, HSEROUT, HRSOUT2 and HSEROUT2 send variables.
Instead of simply sending a single byte, all the elements of the variable are sent.
For example, a WORD variable will send 2 bytes, the low byte then the high byte.
A DWORD or a FLOAT variable will send 4 bytes, again, low byte first.

Also altered the way SERIN, RSIN, HRSIN, HSERIN, HRSIN2 and HSERIN receive variables.
Instead of simply receiving a single byte, all elements of a variable type will be received.
For example, a WORD variable will expect to receive 2 bytes, the low byte then the high byte.
A DWORD or a FLOAT variable will expect to receive 4 bytes, again, low byte first.

Added another formatter for EDATA, CDATA and LDATA. If all the values are required to have the same byte count
an AS keyword can be used: -

CDATA AS WORD 1,100,100

Formatters are BYTE, WORD, DWORD, and FLOAT.

Improved ICD2 support for the compiler.
The declare, ICD_REQ = TRUE will reserve the correct amount of memory within the PICmicro.

 FIXES
Fixed SLEEP command with a parameter following it.
Fixed floating point constants used with SYMBOL. Now accepts a value without a preceding zero for fractional values.
Fixed Negation of a floating point variable.
Fixed the AT modifier with RSOUT.
Fixed FLOAT to WORD conversion for 14-bit core devices.
Fixed SEROUT with flow control on 16-bit core devices.
Fixed DWORD addition with a WORD variable on 16-bit core devices:- DWORD = DWORD + WORD
Fixed Floating Point Greater Than, Less Than, Greater or Equal, Less or Equal comparisons in boolean conditions.
Fixed REPEAT-UNTIL condition checking when used on a single line.

 KNOWN PROBLEMS
Compiler does not complain with a syntax error if a quoted string of characters is used
within an expression and is not the first part. This will produce no code for the expression.
STR and STRN accept multiple paramters but do not produce the correct code if STR or STRN are used as parameters before a quoted character string, or value.

 Changes and additions made in revised version 2.1.3 of PROTON+ Compiler.

Fixed HPWM duty cycle anomaly.
Fixed 32-bit subtraction anomaly on 16-bit core devices.
Also optimised both subtraction and addition routines using 16-bit core specific mnemonics.
Fixed expressions in CDATA with 16-bit core devices.
Fixed ABS with 32-bit expressions and float expressions.
Fixed floating point being enabled when SIN used on a 14-bit core device.
Fixed LOOKUP, LOOKUPL, LOOKDOWN, LOOKDOWNL when using two consecutive
commands with differing array variable types.
Fixed ALL_DIGITAL directive with 12F629 device.
Fixed Compiler lock up with a comment on the same line as CALL

Added Identifying names for EDATA addressing.
Added command RESET_BANK to manually force the RAM bank to zero.
Added command SET_BANK to manually set the RAM bank of a variable.
Added new DECLARE to enable/disable RAM bank resets on all BASIC labels.

LABEL_BANK_RESETS = ON/OFF or TRUE/FALSE or 1/0

Added new declare to enable/disable compiler reminders.

REMINDERS = ON/OFF or TRUE/FALSE or 1/0

See the help file for more details.

 Changes and additions made in revised version 2.1.1 of PROTON+ Compiler.

Fixed BANK switching anomaly when using single page PICmicro devices.
Fixed subtraction expression in an array with no white spaces present.
Fixed 16-bit Greater than or Equal expression of constant value 65535.

Added new declare to choose either ODD or EVEN parity when using SERIN and SEROUT.

SERIAL_PARITY = ODD-EVEN , 1-0

Fixed Code and Data memory windows in Editor. They now correctly show 14 and 16 bit core device info.
Added an ASCII area within Code and Data windows.
Updated help file to include SERIAL_PARITY declare, and fixed BUSIN reference to MSSP typo.

 Changes and additions made in Released version 2.1 of PROTON+ Compiler.

Added LINETO command to draw a line starting from a previous LINE command's end position.
Added Compile then Download option to the editor. Pressing F12 initiates it, or use the OPTIONS menu.

Fixed STR modifier with 16-bit core devices and arrays that cross over BANKA.
Fixed intermittent lock-up if label names and variable names duplicated.
Fixed aliasing parts of a larger variable. i.e

DIM DWD as DWORD
DIM VAR1 as DWD.BYTE3
DIM VAR2 as DWD.BYTE2
DIM VAR1 as DWD.BYTE1
DIM VAR0 as DWD.BYTE0


Fixed expressions in FOR-NEXT loops.

Optimised FOR-NEXT loops that use expressions.
Added Graphic LCD Space Invaders game to the samples folder.
Also added several macro examples to the samples folder.

 Changes and additions made in version 2.1 Beta 6 of PROTON+ Compiler.

Fixed word arrays being loaded with word arrays.
Fixed Stack underflow error when expressions used as array index.
Fixed DWORD > DWORD comparison.
Fixed inline CASE constructs.
Fixed DWORD variable loaded with an array.
Fixed floating point subtract by 0 with 14-bit core devices.
Fixed floating point ACOS.
Fixed comment directly after certain commands (without spaces). Compiler now traps them succesfully.
(but I still think it is bad programming practice).
Fixed sign comparison warning message when not applicable.

Added ability to place labels in 14-bit core CDATA tables.
Thanks to Tim, the PPRINT subroutine is now available for 14-bit core FLASH devices.

Replaced some warnings with reminders. Especially those concerning floating point SIN and COS.
Updated help file with some information concerning interrupt context saving/restoring with 16-bit core devices.

I would like to take this opportunity to thank Tim Box for his on going support and invaluable
help in improving the functionality of the compiler. My task would have been a lot harder
without his insatiable appetite for experimenting, and his patience and eagerness to help others.

And I would like to thank all those who have spotted and reported anomalies.
Without your constant vigilance the compiler would not be the programming aid that it is today.

I take my hat off to you all!!!

PROTON Compiler Version 2.1 Beta 5 Fix's and Optimisations.

Fixed ADIN with certain devices.
Fixed LOOKDOWN for 16-bit core devices.
Fixed LOOKUPL when label names are used in the table.
Fixed ALL_DIGITAL directive with 12F675 device.
Fixed expressions in CWRITE for 16-bit core devices.
Fixed CERASE for 16-bit core devices.

Optimised ASM code produced for REPEAT..UNTIL construct.
Optimised ASM code produced for BRANCH and BRANCHL with 16-bit core devices.
Optimised graphic LCD library subroutines.
Optimised floating point library for 16-bit core devices.
Various tweeks of existing commands and expression calculations.
Updated Editor to match new KEYWORDS added.
Updated help file to explain the new constructs.

 Changes and additions made in version 2.1 Beta 5 of PROTON+ Compiler.

Added SELECT..CASE..ENDSELECT construct (see helpfile).
Added ELSEIF to IF..THEN construct (see helpfile).
Added BREAK command to prematurely exit FOR..NEXT, REPEAT..UNTIL or WHILE..WEND loops.
Added LINE command for graphic LCD.
Added CIRCLE command for graphic LCD.
Added BOX command for graphic LCD.
Added HRSIN2, HRSOUT2, HSERIN2 and HSEROUT2 for 16-bit core devices that contain a second USART.

Added floating point SIN for 16-bit core devices.
Added floating point COS for 16-bit core devices.
Added floating point TAN for 16-bit core devices.
Added floating point ATAN for 16-bit core devices.
Added floating point ACOS for 16-bit core devices.
Added floating point ASIN for 16-bit core devices.
Added floating point LOG for 16-bit core devices.
Added floating point LOG10 for 16-bit core devices.
Added floating point SQR for 16-bit core devices.

Added VAL command to convert a string into an Integer.
Added STR$ command to convert a value into a string.
Added STRN command to create a null terminated character array. i.e. A string

Added Formatters for DATA, LDATA, EDATA, and 16-bit core device CDATA tables.
All the data tables allow label names as entries.

Added support for newer 16F and 18F devices (see helpfile for list).
Added support for 16-bit core PICmicros that contain up to 1K of DATA (eeprom) memory.
Added auto context saving/restoring for 16-bit core device interrupts (if required).

Added WARNINGS declare to enable/disable compiler warnings (see helpfile).
Added a reminder message on some messages that were previously warnings.

Added an error message if PCL, TOSL or TOSH is the destination of mnemonic MOVFF.
If the compiler senses this internally, it will use the two part mnemonics: -

MOVFW
MOVWF


and issue a warning that it is doing so. This should not be encountered in normal BASIC
progamming, but could be if used for more advanced coding.

Added improved MACRO support (more details on this to follow).
Incorporated Tim's PPRINT design into compiler's PRINT command (more details on this to follow).
(This really has to be seen to be believed!).