Releases: irmen/prog8
version 7.6
- added
in
containment check operator, this enables things such asif xx in [1,2,3] ...
orif '@' in email_address ...
- added experimental 'c128' compiler target to create programs for the Commodore-128
- added a porting guide to the manual for efforts to port the language to other systems
- added
-asmlist
argument to also generate a listing file as output - added
-noreinit
argument (experimental) to not create the reinitialization code for global variables. Can make programs smaller, but can also cause problems. - returnvalue of
diskio.load()
(and similar routines) has changed meaning: it's now just the last load address +1 (same as regular kernal's LOAD routine returns) - fixed position of
@shared
in variable declaration for array types - be a bit less verbose in similar warnings
- several code generation optimizations
- several bugfixes
version 7.5
Some new features and more optimizations have been added:
- added diskio.load_raw() to load headerless files
- added cx16diskio with load() and load_raw() that are HIRAM bank-aware
- added cx16.getrambank() / getrombank()
- fix grammar problem: \x and \u escape sequences now work properly in character literals
- fix grammar problem: scoped variables such as cx16.rX are now allowed as loop variable in for loops
- c16 r0-r15 are now properly considered to be already in zeropage on X16 if you use them as pointers
- allow using ubyte[] as subroutine parameter type
- some other bugfixes and optimizations
version 7.4.1
Fix regression: function call number of arguments check was broken.
version 7.4
Even more improvements in generated code efficiency, resulting in smaller code that runs faster.
- improved code generation.
- optimizer is now smarter about accesses to memory mapped IO that shouldn't be optimized away
- performance improvements in the compiler itself, updated to Kotlin 1.6
- fixed some illegal instructions in the conv module on c64 target
- other bugfixes
- documentation improvements
version 7.3
More improvements in generated code efficiency, resulting in smaller code that runs faster.
Also added a few small new quality of life features.
- fixed operator
not
priority: it is now higher prio thanand/or/xor
! - fixed division of signed bytes by 2
- added new cos and sin builtin functions
cosr8 sinr8 cosr16 sinr16
, and also their unsigned valued siblings. These make it easier to deal with arcs of degrees 0-359 rather than 0-255 of the existing trig functions. - added signed versions of the cx16 virtual registers:
r0s - r15s
including the L and H byte variants of them. - less temporary variables generated and used
- more optimizations to expression evaluations
- compiler no longer uses cx16 R15 virtual register as tempvar
- unit tests now use KoTest as test framework.
version 7.2
This is mainly a version with performance optimizations.
Various parts of the code generator now create faster code, and sometimes also smaller code.
Depending on your source code, you can observe pretty significant gains in resulting program size (tens to hundreds of bytes smaller).
Other fixes:
- PETSCII block drawing character mapping was updated to now correctly separate certain box line characters
- Fixed type casting errors related to certain const propagation
str
is now allowed as a parameter type in subroutines (it is passed by reference/address)- compiler no longer crashes when an input file doesn't exist
- gradle builds now automatically run installDist task after build
- updated to Kotlin 1.5.31
version 7.1
- removed %target directive because it was too confusing for what little it did. Just use -target command line option.
- non-asmsub subroutines can no longer be inlined because the way this worked was not reliable
- internal code refactoring to improve testability and reliability
- several error/warning message improvements
- added support for secondary alternative emulator to launch, with '-emu2' option (box16 in case of commanderX16)
- fixes for various issues related to different output path
- %asmbinary path related assembler bug fixed
- float[] array initializer bug fixed
- fixed some assembler bugs in swapping values with swap()
- fixed bug in palette.set_color
- fixed bug in optimizer that sometimes removed subroutines that were referenced, causing assembler crash
- some other miscellaneous bugfixes and improvements.
release 7.1 beta
Beta release of the upcoming 7.1 version
Most of the changes this time are internal to improve code quality and testability.
But several important bugfixes and enhancements have also been made.
One thing to mention now is that the %target
directive has been removed, the compilation target is set on the command line options.
A full list of changes will be published on the 7.1 final release.
release 7.0
Release 7.0.
Major changes and improvements since the previous release:
- CommanderX16 target: we now target the upcoming "V39" of the cx16 emulator and roms. Read the info box in the manual for more details https://prog8.readthedocs.io/en/latest/index.html#required-additional-tools
- the
struct
language feature has been removed. Rewrite any struct-uses as just the separate variables. - improved random number generators.
- string encoding and string interning bug fixes
- various compiler crashes fixed
- %asminclude fixed (scopelabel argument removed as well)
- repeat loop code gen optimized some more
- fixed various assembly symbol scoping issues
- documentation improvements
- streamlined the grammar definition about line endings and EOF, and improved some parse errors
- fixed warnings in gradle build scripts, updated some libraries and Kotlin runtime version.
release 7.0 beta2
This version will likely be very close to the final 7.0 release because I'm not considering adding or changing anything new from now on (except bug fixes).
Some of the most important fixes/changes since the previous beta release:
- string encoding and string interning bug fixes
- various compiler crashes fixed
- %asminclude fixed (scopelabel argument removed as well)
- repeat loop code gen optimized some more
Once again: the CommanderX16 target targets the upcoming "V39" of the cx16 emulator and roms.
Programs targeting the cx16 compiled with this new Prog8 version may no longer work on the previous version of the emulator (although if you're not using floating point and bank switching, they will likely still work)
Detailed change list will be added when this 7.0 version is finalized, which will probably be shortly after the "V39" of the commanderx16 is officially released as well.