Skip to content

Releases: irmen/prog8

version 7.6

04 Jan 19:56
Compare
Choose a tag to compare
  • added in containment check operator, this enables things such as if xx in [1,2,3] ... or if '@' 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

10 Dec 19:22
Compare
Choose a tag to compare

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

01 Dec 21:29
Compare
Choose a tag to compare

Fix regression: function call number of arguments check was broken.

version 7.4

30 Nov 21:56
Compare
Choose a tag to compare

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

14 Nov 22:16
Compare
Choose a tag to compare

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 than and/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

06 Nov 23:47
Compare
Choose a tag to compare

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

24 Oct 12:16
Compare
Choose a tag to compare
  • 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

13 Oct 00:01
Compare
Choose a tag to compare
release 7.1 beta Pre-release
Pre-release

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

25 Jun 20:09
Compare
Choose a tag to compare

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

30 May 16:46
Compare
Choose a tag to compare

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.