diff --git a/docs/source/index.rst b/docs/source/index.rst index 1aa6730c1..43fabeb5c 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -202,7 +202,6 @@ Look in the `syntax-files `_ . diff --git a/docs/source/todo.rst b/docs/source/todo.rst index 8fd4a6dba..e1b5d37cb 100644 --- a/docs/source/todo.rst +++ b/docs/source/todo.rst @@ -17,6 +17,7 @@ Need help with Future Things and Ideas ^^^^^^^^^^^^^^^^^^^^^^^ Compiler: + - [much work:] more support for (64tass) SEGMENTS ? - (What, how, isn't current BSS support enough?) - Add a mechanism to allocate variables into golden ram (or segments really) (see GoldenRam class) @@ -26,6 +27,7 @@ Compiler: - OR.... do all this automatically if 'golden' is enabled as a compiler option? So compiler allocates in ZP first, then Golden Ram, then regular ram - OR.... make all this more generic and use some %segment option to create real segments for 64tass? - (need separate step in codegen and IR to write the "golden" variables) + - ir: idea: (but LLVM IR simply keeps the variables, so not a good idea then?...): replace all scalar variables by an allocated register. Keep a table of the variable to register mapping (including the datatype) global initialization values are simply a list of LOAD instructions. Variables replaced include all subroutine parameters! So the only variables that remain as variables are arrays and strings. diff --git a/docs/source/upgrading8.rst b/docs/source/upgrading8.rst deleted file mode 100644 index d7acf5a53..000000000 --- a/docs/source/upgrading8.rst +++ /dev/null @@ -1,85 +0,0 @@ -======================== -Upgrading from version 8 -======================== - -How to upgrade older programs written for Prog8 version 8 or earlier to version 9. - -List of new stuff in version 9 -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Details of several important ones and how to convert version 8 code can be found below this list. - -- added 'cbm' block in the syslib module that now contains all CBM compatible kernal routines and variables -- added min(), max() builtin functions. For floats, use floats.minf() and floats.maxf(). -- added clamp(value, minimum, maximum) to restrict a value x to a minimum and maximum value. For floats, use floats.clampf(f, minv, maxv). -- rename sqrt16() to just sqrt(), make it accept multiple numeric types including float. Removed floats.sqrt(). -- abs() now supports multiple datatypes including float. Removed floats.fabs(). -- divmod() now supports multiple datatypes. divmodw() has been removed. -- cx16diskio module merged into diskio (which got specialized for commander x16 target). load() and load_raw() with extra ram bank parameter are gone. -- drivenumber parameter removed from all routines in diskio module. The drive to work on is now simply stored as a diskio.drivenumber variable, which defaults to 8. -- for loops now skip the whole loop if from value already outside the loop range (this is what all other programming languages also do) -- asmsub params or return values passed in cpu flags (like carry) now must be declared as booleans (previously ubyte was still accepted). -- (on cx16) added diskio.save_raw() to save without the 2 byte prg header -- added sys.irqsafe_xxx irqd routines -- added gfx2.fill() flood fill routine -- added @split storage class for (u)word arrays to store them as split lsb/msb arrays which is more efficient (but doesn't yet support all array operations) -- added -splitarrays command line option and '%option splitarrays' to treat all word arrays as tagged with @split -- the -target option is now required, c64 is no longer a default. - - -``cx16diskio`` is now just ``diskio`` -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -The ``cx16diskio`` module is gone, just use ``diskio``. The drivenumber is no longer a parameter on all routines. - -* replace all imports and references to ``cx16diskio`` with just ``diskio`` -* remove all drive number arguments from the calls. If you're not using drive 8, set the correct drive - with a call to ``diskio.set_drive()``. Read the active drive from ``diskio.drivenumber``. -* replace load calls that use a ram bank argument by setting the ram bank first using ``cx16.rambank()`` - and then call the load routine normally. - - -@Pc param and return value is now always ``bool`` -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Parameters and return values passed via the carry status flag (@Pc) now need to be declared as ``bool``. -(Previously also ``ubyte`` was allowed but as the value is just a single bit, this wasn't really correct) - - -Standard Commodore kernal calls moved to ``cbm`` -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Instead of ``c64``, the CBM compatible kernal calls (such as CHROUT) and a bunch of variables, are now -located in the ``cbm`` module. You don't have to import this module as it is part of the syslib. - -* replace all references such as ``c64.CHROUT`` with the ``cbm`` module instead to fix those undefined symbol errors. - - -some routines moved to ``sys`` -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Several routines have been moved to the ``sys`` module rather than being in ``c64`` or ``cx16`` for instance. -An example is ``set_irq()``. If you fixed the previous item above, and still get undefined symbol errors, -the routine is likely now located in the ``sys`` module so simplychange its prefix to ``sys.`` - - -for loop range checking to avoid wrap-around looping -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Modify any for loops that depend on a 'wrap-around' loop where the from value lies -outside of the the loop range (for example: a loop from $fe to $02 which used to loop through $fe, $ff, $00, $01 and $02). -For loops now do a check at the start and skip the whole loop if the start value is already outside of the range. -This is the normal behavior of most other programming languages. - - -divmod(), sqrt() and abs() builtin functions accept multiple data types -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -- ``divmodw()`` doesn't exist anymore, just use ``divmod()``. -- ``sqrt16()`` doesn't exist anymore, just use ``sqrt()``. -- ``floats.fabs()`` and ``floats.sqrt()`` don't exist anymore, just use ``abs()`` and ``sqrt()`` they now accept floating point as well. - - -min(), max() and clamp() are new builtin functions -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -If you used symbols named ``min`` or ``max`` or ``clamp``, you have to choose a new name as these are now -reserved for these new builtin functions. -Code that uses an if statement and a comparison to determine the greater or lesser of two values, -can now *sometimes* be optimized by just using one of these new builtin functions. (But sometimes -just using a simple if statement results in more efficient code. If your goal is fastest code, -compare both approaches!) -For floats, use ``floats.minf()``, ``floats.maxf()`` and ``floats.clampf()``.