Skip to content

Releases: irmen/prog8

version 8.4

13 Aug 10:46
Compare
Choose a tag to compare
  • added a few new library functions: string.endswith(), diskio.send_command(), diskio.diskname()
  • improved error checking in diskio.directory()
  • fixed rounding errors in signed divide by power-of-two
  • on C64, the cx16.r0...cx16.r15 virtual registers are now moved into zeropage if possible.
  • allow bool return type (and arguments) for asmsub / romsub
  • removed several problematic code optimizations (may lead to larger code size unfortunately)
  • added a few new code optimizations related to mkword() and logical expressions
  • several bugfixes and improvements.

version 8.3.1

17 Jul 20:26
Compare
Choose a tag to compare

A quick update to address some issues discovered in the previous release.

  • fix possible endless loop in optimizer
  • fix codegen crash on certain nested typecast
  • fix cx16 register clobbering in psg module irq routine
  • fix crash on certain array definitions, and a few other places
  • fix undefined symbol error when it's simply located in another imported module
  • fix stack crash in cx16.push_vera_context()
  • fix wrong assembly code generated for signed word >= 0
  • enhancement: callfar() now also accepts variable jump address, so can be used as an (inefficient) indirect JSR
  • enhancement: sys.reset_system() on cx16 now more thoroughly resets the Vera so any psg sounds playing are silenced as well
  • enhancement: conv.any2uword() / conv.hex2uword() can now deal with iso lower and uppercase letters too
  • graphics module's Y resolution on cx16 has been corrected to 240

version 8.3

12 Jul 20:30
Compare
Choose a tag to compare
  • added -D compiler option to set symbols in the generated assembly file.
  • added -esa compiler option to override the eval-stack memory location.
  • added bool datatype. Use this when you only need true/false values (0/1) the compiler creates more optimized code then.
  • fixed various logical expression evaluations that used to yield the improper value
  • added cx16 psg library for the Vera's psg sounds.
  • added cx16.push_vera_context() and cx16.pop_vera_context() for use in irq handlers that poke the vera registers.
  • added zsound combo example for cx16
  • added maze example to show how to work around recursion limitations in the language.
  • cx16 programs now reset rom/ram banks and monitor bank at exit.
  • cx16diskio.f_read() now correcly deals with banked ram boundary
  • several bugfixes and optimizations.

version 8.2

15 Jun 20:46
Compare
Choose a tag to compare
  • Syntax change: The pipe expression "|>" has been removed from the language.
  • Syntax change: now allows casting of negative numbers to unsigned (will result in the proper 2's complement)
  • API change: swap() builtin function has been removed.
  • API change: boolean() builtin function has been added, to get the 'thruthy' value of a number.
  • diskio.f_read_all() now returns correct size.
  • cx16: fixed macptr() signature and it is now used in cx16diskio.f_read(), vastly improving load times.
  • fix for regression: again gives proper name redefinition errors in same scope
  • Improved (not) mentioning of the GPL software license in the shared library files.
  • greatly improved code gen for logical expressions and array / pointer indexing.
  • zsound examples added for cx16.
  • improved compatibility with running the compiler on windows (some file/path errors solved)
  • bugfixes.

version 8.1

25 May 18:19
Compare
Choose a tag to compare
  • API change: moved all integer trig builtin functions (sin8u, cos8u etc) to regular subroutines in the math module
  • API change: moved all floating piont builtin functions to regular subroutines in the floats module
  • API change: sum() builtin function was removed altogether
  • API change: max() min() and abs() now always return uword type.
  • API change: abs() supports only integer arguments now, use floats.fabs() for floating point.
  • compiler now correctly accepts string multiplication "xxxx" * expr where expr is not just a number literal (but still must be constant)
  • compiler now automatically converts multi compare expression (if x==1 or x==2 or x==3..) into a more efficient containment check (used to only give a warning)
  • compiler now gives a warning in many cases about shadowing symbols (re-definitions)
  • compiler now automatically inlines some more trivial non-assembly subroutines
  • added %option merge to merge module content with existing
  • improve checks for invalid pipe expressions
  • improve error message for invalid args to min() and max()
  • fixed superfluous printing of WARN and ERROR
  • optimized cx16.setcc() and setcc2() library routines
  • finished the 'virtual' compiler target codegen and the 'emulator'
  • several other minor bugfixes and improvements

version 8.0

02 Apr 19:31
Compare
Choose a tag to compare

A new major version release to commemorate the long awaited official "r39" release of the Commander X16 emulator and kernal roms.
Some fundamental changes were made there that had to be reflected in Prog8's cx16 target and libraries.

For current cx16 development, prog8 8.0 is required. Older versions won't work properly anymore.

Changes:

  • support for the official r39 commander x16 release (new Vera memory layout, changes to rom routines, etc.)
  • updated cx16 examples to new routines
  • breaking syntax change: ** operator has been removed. Use floats.pow() instead.
  • make '&&' a parser error instead of treating it as bitwise and followed by address-of
  • library API change: moved pattern_match() from prog8_lib to string module
  • fixed string encoding for escaped characters
  • fixed bug in codegen for containment check in bytearrays and strings
  • fixed error for certain typecasted expressions inside comparisons
  • fixed return type error for asmsubs with >1 result values
  • [internal] new simplified Ast meant to build better code generators on in the future
  • [experiment] new 'virtual' target and built-in VM to compile prog8 programs for
  • [experiment] new syscall builtin funcion to interface with the VM

version 7.9

03 Mar 19:58
Compare
Choose a tag to compare
  • added atari compilation target, to create programs for the Atari 800XL. It's very rudimentary still.
  • breaking syntax change of the pipe operator |> : the functions in a pipe now have to be actual function calls (without the first argument specified), rather than just the function names
  • breaking change of the pipe operator |>: you can no longer use a variable at the end to store the value into. Just use an assignment instead.
  • sys.memcopy and sys.memset on the cx16 target no longer depend on kernal routine so now work even when the kernal is not banked in.
  • fix program crash bug caused by non-inlined asmsub not having a proper RTS instruction.
  • fixed compile time calculated constant results of sin() and cos() functions to now be identical to their runtime counterpart
  • better searching for used variable names inside assembly code so unused variable elimination is smarter
  • properly report duplicate label names
  • properly report invalid text encoding selection
  • properly report in check against non-constant range
  • many internal refactorings in the code generator as ongoing attempts to make it easier to change/replace

version 7.8

12 Feb 16:59
Compare
Choose a tag to compare
  • removed old @"screencodes" string encoding syntax (use sc:"hello" instead)
  • library API change: moved cx16.vload() to cx16diskio module
  • API change: added alignment parameter to memory() function
  • library API change: string.find now returns index of character + carry bit status (instead of substring address)
  • completely rewritten variable allocation, resulting in large program size savings
  • diskio.list_files() now has a larger buffer to be able to list larger directories
  • restructured code generator and added -expericodegen command line flag to select alternate experimental code generator (only a stub at the moment)
  • tweak compiler output to be less noisy
  • various bugfixes and optimizations

version 7.7.1

24 Jan 00:17
Compare
Choose a tag to compare

Bugfix release to fix a bunch of compiler crashes.

version 7.7

19 Jan 21:00
Compare
Choose a tag to compare
  • added pipe operator |>
  • added new syntax for string encodings, and added iso: encoding
  • on cx16: added txt.iso() to switch to iso charset
  • added @requirezp flag on variables to force them in Zeropage
  • added pokemon() function
  • fix assembly <-> prog8 label referencing issue (labels in asm no longer start with underscore)
  • less aggressive dead code (variables) removal
  • fixed some type casting issues
  • several small code gen optimizations
  • fix broken code generated for certain equality comparison expressions
  • several other bugfixes.