Releases: irmen/prog8
Releases · irmen/prog8
version 8.10
- uninitialized variables are now put into a 'bss' section instead of in the resulting PRG itself, this can shrink the PRG size by hundreds or even thousands of bytes
- added
varshigh
compiler option to move the bss section out of regular program memory space altogether, to allow PRGs to be larger. On the c64 it is moved to $c000+ and on the cx16 to bank 1 of banked ram at $a000+ - the internal expression evaluation stack as been reduced to 1 page of memory (was 2 pages)
- on the cx16, the eval stack was moved from bottom of golden ram to top of golden ram to make it easier to load other things in golden ram ($0400-$06ff is free now).
- the experimental
noreinit
compiler option has been removed for now - removed
cx16.callrom()
, just usecx16.callfar()
- cx16 programs now turn off the mouse cursor at startup
- added streaming audio player example to cx16/examples/pcmaudio
- internal change: code generators uses unified interface and no longer uses internal compiler Ast
- vm improvements
- bugfixes
- documentation improvements
version 8.9
- removed workaround for black cursor bug in older X16 kernal
cx16.numbanks()
now returns a word because the result can be >255- fixed cx16/keyboardhandler example
sys.wait()
behaves better- no longer allow ~ (bitwise invert) on booleans
- some boolean logic optimizations
- fixed zsound example
- fix some casting type errors
- upgrade to kotlin 1.8.0
version 8.8.1
Patches a few nasty issues found since the last release that couldn't wait for the next full release.
- fix compiler crash on hoisting certain variable declarations from inner scopes to subroutine scope.
- don't remove non-trivial initialization assignments for unused variables
- don't remove consecutive assigns to certain memory locations or memorymapped vars (I/O space)
- now able to compile "not xx in array" expression (for 6502 targets)
- "xx not in array" is not synonymous for "not xx in array"
- as a bonus, includes an updated "christmas season" snow example
version 8.8
- fix several FP rom routine addresses on cx16. Some floating point operations didn't work before.
- it's now possible to use symbols that are the same name as 6502 instructions
- removed unused command line option
keepIR
- API change:
diskio.list_files
doesn't have an internal buffer anymore, you now have to supply a buffer + size yourself. Function renamed tolist_filenames
- added
cx16diskio.f_seek()
to seek to a position in an opened file - diskio file lister routine now also remember the file type (prg, seq, dir)
- fixed endless loop in optimizer on certain expressions
- fixed
gfx2
text color and more robust screen mode reset on real hardware (retains display mode) - added cx16 snow example for the season
- added cx16 diskspeed example
- added more $03xx vector definitions to C64/C128/CX16 syslib
- various other bugfixes and optimizations
- various changes in IR
version 8.7
rnd
andrndw
are no longer builtin functions, but are now regular routines in themath
module.rnd
andrndf
routines can now be seeded withrndseed
andrndseedf
routines. You can get a reproducible sequence of random numbers this way.- new integer
rnd
routine that is smaller and faster than the previous one. - added
cx16diskio.vload_raw
to load headerless file into VRAM. - added
gfx2.pget
to get a pixel color value. - bit shifts of 8 and more no longer silently result in 0 but give a warning.
- removed silent promotion of byte -> word bit shift that would occur if it was a simple assignment.
- fixed indexing pointer variable with word index.
- fixed various compiler problems with negating array values.
- documentation improvements and spelling corrections.
- other bug fixes.
- the IR and VM have been rewritten to use a graph based code chunk representation. A dead code remover has been added that can remove all unused/unreachable code lines. NOTE: this codegen backend still only works in the vm target.
version 8.6.2
- fix compiler issue on windows (line endings...)
- fix for the documentation build error on readthedocs.io (should be up to date again)
- ".p8virt" virtual machine source file format removed - vm now directly reads and executes the ".p8ir" IR file.
- code cleanups in IR and VM.
version 8.6.1
- added string.lowerchar() and string.upperchar()
- added a few more complex vm examples
- fixed a lot of issues in the IR and VM that I forgot to fix in the 8.6 release..... finally the IR and VM are feature complete and can run complex prog8 programs such as textelite.
version 8.5
- removed the 16 bits sin/cos routines from math library (sin16, sin16r etc) - just create your own specialized tables if you need
- added '-keepIR' option to save the IR file if it's generated.
- command line '-vm' option now also reads .p8ir files
- fixed operator precedence: bitwise must come before comparisons
- added cx16.kbdbuf_clear() routine
- several documentation improvements
- added c64 starfield example
- lots of VM fixes and improvements.
- (internal) massive rewrite of VM code generator, now has Intermediate Representation step. Intended to also be used for future code generators.
- several bug fixes
version 8.4
- 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
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