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!).