cc6502 1.0.10

a library for making C compilers for the 6502 8-bits processor
Documentation
v1.0.10 (10/17/2023) :
    - Bug fix : Already defined local functions in blocks 
    - Bug fix : Forbid complex 16 bits operations with 8 bits shifts
    - Bug fix : corrected (short >> 8) >> 4 
    - Bug fix : corrected 16 bits +X, +Y

v1.0.9 (10/09/2023) :
    - Removed a debug println 

v1.0.8 (10/08/2023) :
    - Fixed a bug on win32 with CR/LF included asm files

v1.0.7 (10/05/2023) :
    - Fixed bankswtiching issue with SuperGames 

v1.0.6 (10/02/2023) :
    - Added bank header to asm files 

v1.0.5 (09/25/2023) :
    - Corrected a bug wrt parameter passing (and comma operator) 

v1.0.4 (09/18/2023) :
    - Corrected a bug wrt whitespace management in grammar (charz = 1 was accepted as a z variable declaration)

v1.0.3 (09/04/2023) :
    - Corrected a bug wrt to double use of Y register when assigning to Y while using Y as an index

v1.0.2 (08/28/2023) :
    - Corrected a small bug in assemble.rs in optimizer, the sometimes results in a Rust panic during compilation

v1.0.1 (08/14/2023) : 
    - Corrected bug wrt cc2600 compatibility with v1.0.0

v1.0.0 (07/13/2023) :
    - Accept *ptr with ptr not const (allows char* params)
    - Generate performance warning for *ptr ("hidden" Y indirect access)
    - Added W (warnings) compile flag
    - Corrected ptr[0] error

v0.9.2 (07/12/2023) :
    - Corrected bug with variables beginning with char or int

v0.9.1 (07/12/2023) :
    - Added sizeof(type) support
    - Added preliminary support for function parameters
    - Added support for bytes hint in asm statment

v0.9.0 (07/09/2023) :
    - Added support for local variables
    - Corrected a small bug wrt ++/-- in subscript of 16-bits instructions
    - Optimized out ORA #0 instructions
    - Added support for references (pointers) in arrays of char definition (not just immediate values)

v0.8.1 (06/28/2023) :
    - Small bug correction for char * pointers references
    - Added optimization : optimized TXA/TAX & TAY/TYA pairs
    - Corrected a bug with line numbering with included assembler code
    - Added comparison between Acc & Tmp

v0.8.0 (06/19/2023) :
    - Better integration of assembler code (with codesize comment)
    - Corrected a big bug with assembler code inclusion (preprocessing of strings)

v0.7.4 (06/14/2023) :
    - Added recursion in preprocessor
    - Changed regex of #define to cope with () expressions (up to 3 levels of depth) 
    - Corrected a bug in carry propagartion error
    - Experimental: now accepts any subscript expression (not only X and Y)

v0.7.3 (06/12/2023) :
    - Detect carry propagation errors in 16 bits arithmetics code
    - Implmented function return in accumulator
    - Added support for & 0xff to extract lower byte of short

v0.7.2 (06/08/2023) :
    - Refactoring: Split huge generate.rs file into multiple source files
    - Added optimized implementation of 16 bits increment and decrement
    - Added optimization : removed first LDA followed by a second LDA  
    - Added optimization : removed LDA followed by STA with same mnemonic
    - Bug correction: avoided panic when inline function is not defined before use
    - Bug correction: removed optimization around JSR

v0.7.1 (06/05/2023) :
    - Bug correction : big bug in switch/case...
    - Bug correction : tmp was sometimes not released during 16-bits compare
    - Bug correction : registers out of zeropage are set to ramchip memory (instead of zeropage)
    - Corrected a bug: return Y didn't work 

v0.7.0 (06/02/2023) :
    - Changed interface to actually compute call tree (for linker) 

v0.6.0 (05/28/2023) :
    - Mark functions actually in use (for linker) 
    - Implemented 16-bis comparisons (partial)
    - Corrected a bug in 16-bits negation
    - Added function return values (in cctmp)
    - Added NMI interrupt routine support

v0.5.3 (5/25/2023) :
    - Moved processing of literal strings to preprocessor, in order to avoid troubles with comments inside strings

v0.5.2 (5/22/2023) :
    - Corrected a bug with mutiple string literals
    - Added missing cases for conditions on X or Y

v0.5.1 (5/15/2023) :
    - Added support for function macros without parameters
    - Solved an issue with for statement
    - Fixed ++/-- with 16 bits operations
    - Fixed -- prefix operator
    - Fixed sizeof operator
    - Added support for ternary expressions in declarations
    - Added quoted character support
    - Corrected a bug with carry flag
    - Added better support for immediate expression results 
    - Added int type (short int)

v0.5.0 (4/29/2023) :
    - Added -g debug flag

v0.4.1 (4/24/2023) :
    - Corrected a bug with splices processing under windows

v0.4.0 (4/24/2023) :
    - Changed out.a default output file name to classical a.out
    - Added -S option for assembler output only
    - Enhanced error reporting in case of syntax error in array definitions

v0.3.5 (4/16/2023) :
    - Shortened included C comments
    - Even better optimization for branching (added carry_flag_ok flag)

v0.3.4 (4/13/2023) :
    - Added better optimization for branching (to be fully tested)
    - Added better support for macros with parameters (accepts spaces after comma, substitutes words only)

v0.3.3 (4/6/2023) :
    - Removed strange MemoryOnChip flag in compile_var_decl for constants out of zeropage...
    - Added SuperGame bankswitching (for Atari 7800)
    - Added a default 3 bytes for inline asm (for code size estimation)

v0.3.2 (4/4/2023) :
    - Added screencode support for constant strings declarations
    - Added support for comma operator

v0.3.1 (4/3/2023) :
    - Added function size_bytes() to generated code
    - Checked scattering validity for atari 7800 (8 or 16 lines)

v0.3.0 (4/2/2023) :
    - Added "atari2600" and "atari7800" cargo features
    - Corrected missing acc in use flags
    - Corrected bug with respect to definition of multiple arrays on the same line