Skip to content

Version 10.0

Compare
Choose a tag to compare
@irmen irmen released this 19 Jan 19:40
· 264 commits to master since this release

This is a BIG release. Many things got changed, improved or fixed.

Breaking changes:

  • additional rules for symbol prefixing to avoid name clashes in the generated assembly code. Details here https://prog8.readthedocs.io/en/latest/technical.html#symbol-prefixing-in-generated-assembly-code

  • push, pushw, pop and popw are no longer builtin functions but regular inlined subroutines in sys.

  • some floating point routines have been renamed to make the names more consistent:

    floats.rndf -> floats.rnd
    floats.parse_f -> floats.parse
    floats.rndseedf -> floats.rndseed
    floats.print_f -> floats.print
    floats.str_f -> floats.tostr
    
  • some type casting rules have been tweaked. You may have to add or remove type casts in certain places.

  • boolean logical "and" and "or" expressions are now evaluated with McCarthy / short-circuit evaluation.
    This means that not every term in the expression will be evaluated if the result can already be determined!
    This should normally not cause any problems because it is bad practice to write code that depends on
    the order of evaluation of the terms, but sometimes we can't help ourselves.

New features:

  • improved diskio error handling and file not found errors.
  • you can now use Python-style negative array indexing to count from the end of the array.
  • allow efficient containment check in range expression at runtime (if x in 10 to 100)
  • rol, ror, rol2, ror2, any() and reverse() are now supported on split word arrays
  • optimizer now replaces variables by compile time constants if possible
  • improved the const optimizer
  • cx16: added all remaining romsubs for the kernal audio routines (including an example program for it)
  • cx16: added the romsubs for the three X16Edit kernal entry points.
  • cx16: added several Vera register aliases that are memory mapped words (such as VERA_ADDR)
  • cx16: added verafx.copy() for fast vram to vram copy ("blitting")
  • cx16: added palette.get_color() and palette.default_colors_16[]
  • cx16: added sprites.set_mousepointer_image(), sprites.set_mousepointer_hand() and sprites.get_data_ptr()
  • cx16: added cx16.cpu_is_65816() to test for presence of the 65816 cpu vs the 6502 cpu
  • cx16: added celluar automatons code example
  • added string.isspace() and string.isprint() and string.contains().
  • added call builtin function for efficient indirect subroutine call (indirect JSR)
  • added cbm.CLEARST()
  • added -varsgolden compiler option to put variables into golden ram at $0400
  • added -slabshigh and -slabsgolden to do the same for memory() slabs as for variables
  • added -printast1 and -printast2 command line options to dump the internal parse trees (useful for debugging purposes)
  • added -check compiler option to only quickly syntax check a program
  • added %option ignore_unused directive to suppress warnings about unused stuff, useful when writing libraries
  • added floats.push() and floats.pop() to push and pop floating point numbers on the cpu stack
  • added math.crc16() and math.crc32() to compute checksums

Other

Many, many bug fixes and other improvements have been made.
Check the commit list for all the details: v9.7...v10.0

donation: If you'd like to buy me a hot coffee or spicy pizza, you can do so at ko-fi.com/irmen