Propeller Tool Enhancement Requests - rosco-pc/propeller-wiki GitHub Wiki

This is a list of enhancements which Propeller Developers believe could be made to the Propeller Tool to provide more functionality than the latest released version delivers. It is also a useful guide to what a third-party developer of programming tools for the Propeller may wish to consider implementing to satisfy the perceived needs of developers.

This page has been split into three sections -

New Feature Requests - Features which can be implemented in an IDE or other front-end to enhance the compilation process or programming languages ( Spin and/opr PASM ) which can be achieved through pre-processing in the IDE or using another application and do not require a change in the compilation process.

Compiler Enhancement Requests - Enhancements which can only be provided for by a change to the compiler itself and cannot be achieved through pre-processing by the IDE or other application before compilation.

Propeller Tool Improvement Requests - Enhancements which are suggested for the Parallex Propeller Tool IDE.


New Feature Requests

Macros and Conditional Compilation

C-style #include, #define, #if-else-endif and similar pre-processor directives.

Third-Party Hooks / Plug-Ins

  1. A mechanism to integrate third-party pre-processing tools into the compilation process.

  2. A mechanism to allow third-party downloaders to be used instead of the in-built IDE downloader. This will allow end-users to use three-wire (RX/TX/0V) download mechanisms which do not have DTR signalling for Propeller Reset.

  3. A mechanism to launch third-party tools after download completes, for example third-part debugging tools and and terminal emulators.

Separate Tokeniser

A separation of the IDE front-end and Spin Compiler back-end would be desirable for those wishing to write their own front-ends, IDE's and GUI's.

Ideally multi-platform command-line tokenisers would be made available.

Library Paths

The means to supply user-specified paths which can be used to locate pre-written Spin modules which have been specified in a program's OBJ section.

Paths Within Object Specifications

The current definition of a sub-object in the OBJ section of a program is name : "filename". The filename should allow a path to specified, an absolute path, or relative to the directory the current object ( that including the sub-object ) has been saved in.

Object Base Address Identifier

A mechanism like "@Mymethod" which allows the start of an object to be identified within hub memory.

Method Index Identifier

A mechanism to determine the index of a method ( subroutine or function ) within the vector table held within an object through which a method call is made.

String Packing

Compile-time directives additional to String() to allow 5-bit, 6-bit and 7-bit character encoding and packing within hub memory, with and without terminating zero.

Compile-time directives to allow 5-bit, 6-bit and 7-bit character encoding and packing within a 32-bit long variable, left or right aligned.

String Hashing

A compile-time directive which will return a 32-bit constant being a hash of a supplied string. Ideally this would use the same syntax as the "String()" directive but return a hash value rather than a pointer to the string.

Pre-Defined String Constants

Compile time constants which work like String() but return pointers to text strings which indicate the top-object filename, current filename, compilation date ( including non-US date formats ) and time.

SizeOf Operator

A SizeOf() compile-time directive which returns the number of bytes reserved for a variable, or number of bytes reserved for an 'array'.

Address Variable Type

Provide an "Addr" variable type of the correct size to hold a hub address of the Propeller Chip for which the code is being compiled for. This would be a word for the Propeller Mk I, a long for the forthcoming Propeller Mk II.

PASM should also be updated to provide rdaddr and wraddr as equivalents for rdword/rdlong and wrword/wrlong and Spin also updated to include addr[ ] arrays.

Top-Object Only Download

A mechanism to avoid accidentally downloading and running anything other than a top-object. One suggestion is to check for the presence of _CLKMODE in the open file being downloaded. If present allow downloads, if not present allow a syntax check F9, but do not allow an F10/F11 download.

Enhanced Assembly Options

A mechanism to cause the use of long or other PASM instructions used after 'res' to be flagged as an error. The option should be user-selectable so it can be disabled for those cases where such use is intentional.

Target Identification

A means to identify whether source code is targeted at Mk I, Mk II, or both Propeller Chips and a mechanism to inform the Propeller Developer that they are using incompatible source for their intended target.

Automatic generation of .eeprom or .binary files

A mechanism to allow the automatic generation of .eeprom or .binary files with every compilation without having to perform an explicit F8 or confirm the deletion of existing .eeprom or .binary files, while deleting any outdated .eeprom and .binary files.


Compiler Enhancement Requests

Listing and Symbol Table File

The production of human-readable and/or computer-readable listing and/or symbol tables of the compilation to allow the location of labels to be related to hub memory address ( and cog address where relevant ) for that compilation.

Current Hub Address Identifier

An "@" token which will specify current hub address within DAT sections in a similar way that the "$" token is used to specify current cog address. This would be particularly useful for developers of LMM code and VM's.


Propeller Tool Improvement Requests

Better COM/Serial Port Selection/Polling

This has been implemented by Parallax staff and is available from version 1.06 ( 2008-01-22) - Thanks Jeff (Parallax).

A Debug Terminal Display

This is currently scheduled for implementation by Parallax staff.

Tabs

  1. The ability to reorder (organize) the tabs when several tabs are open.

  2. The "x" for closing the tabs to be located on the tab itself instead of right most side of the window. Similar to Internet Explorer 7.

Windows 2000 compatibility

Probably not high on most people's lists

Printing

  1. Ability to print in landscape orientation

  2. Remember my settings (e.g. 'Header', and 'Line numbers')

Compiler output

Add option to always generate the .BINARY and .EEPROM files (instead of running the internal loader). This would allow the use of external loaders for linux and mac users. It would also allow two propellers (or more) propellers to be attached via USB and programmed by the external loader (for example, you could run two copies of Loader.py in watch mode, watching different binary files and connected to two different USB ports) by just compiling the appropriate top level object.

Configuration Override

The ability to specify a _CLKMODE and _XINFREQ which overrides whatever is specified in source code. Most home users will use one Propeller board or multiple boards configured the same and this will save having to alter other source code to match the target hardware they have. This is particularly useful should the crystal be some unusual frequency prone to typing error. It also allows those users to deliver source code set for the standard XTAL1+PLL16x / 5MHz while developing with whatever they are actually using.