update some docs

This commit is contained in:
Irmen de Jong 2024-11-23 16:26:17 +01:00
parent 906b137a7c
commit 3a7a7091c0
8 changed files with 51 additions and 19 deletions

View File

@ -84,11 +84,12 @@ What does Prog8 provide?
*Multiple supported compiler targets* (contributions to improve these or to add support for other machines are welcome!): *Multiple supported compiler targets* (contributions to improve these or to add support for other machines are welcome!):
- "cx16": [CommanderX16](https://www.commanderx16.com) (65c02 CPU)
- "c64": Commodore-64 (6502 like CPU) - "c64": Commodore-64 (6502 like CPU)
- "c128": Commodore-128 (6502 like CPU - the Z80 cpu mode is not supported) - "c128": Commodore-128 (6502 like CPU - the Z80 cpu mode is not supported)
- "cx16": [CommanderX16](https://www.commanderx16.com) (65c02 CPU) - "pet32": Commodore PET (limited support)
- "pet32": Commodore PET (experimental)
- "atari": Atari 8 bit such as 800XL (experimental) - "atari": Atari 8 bit such as 800XL (experimental)
- "neo": Neo6502 (experimental)
- If you only use standard kernal and prog8 library routines, it is possible to compile the *exact same program* for different machines (just change the compiler target flag) - If you only use standard kernal and prog8 library routines, it is possible to compile the *exact same program* for different machines (just change the compiler target flag)

View File

@ -22,11 +22,12 @@ such as the `Commodore 64 <https://en.wikipedia.org/wiki/Commodore_64>`_.
You can compile programs for various machines: You can compile programs for various machines:
* Commander X16 (with 65c02 cpu, 65816 cpu specifics are currently not supported) * Commander X16 (with 65c02 cpu, 65816 cpu specifics are currently not supported by prog8 itself)
* Commodore 64 * Commodore 64
* Commodore 128 (limited support) * Commodore 128 (limited support)
* Commodore PET (limited support) * Commodore PET (limited support)
* Atari 800 XL (limited support) * Atari 800 XL (very limited support)
* Neo6502 (very imited support)
Some language features are mentioned below, and you can also read :ref:`comparingprog8` if you Some language features are mentioned below, and you can also read :ref:`comparingprog8` if you
want to quickly read about how Prog8 compares to well-known other languages. want to quickly read about how Prog8 compares to well-known other languages.

View File

@ -103,8 +103,9 @@ msb (x)
bnk (x) bnk (x)
Get the 'bank' byte from the value x. This means bits 16-24 of that value: bnk($1234567) = $12. Get the 'bank' byte from the value x. This means bits 16-24 of that value: bnk($1234567) = $12.
(To get the 16 bit address out of a value simply use ``x & $ffff``)
If x is a word or smaller, bnk(x) will always be zero. If x is a word or smaller, bnk(x) will always be zero.
You can consider this equivalent to the expression ``lsb(x >> 16)``. You can consider this function equivalent to the expression ``lsb(x >> 16)``.
mkword (msb, lsb) mkword (msb, lsb)
Efficiently create a word value from two bytes (the msb and the lsb). Avoids multiplication and shifting. Efficiently create a word value from two bytes (the msb and the lsb). Avoids multiplication and shifting.

View File

@ -276,6 +276,10 @@ Unsigned integers are in the range 0-255 for unsigned byte types, and 0-65535 fo
The signed integers integers are in the range -128..127 for bytes, The signed integers integers are in the range -128..127 for bytes,
and -32768..32767 for words. and -32768..32767 for words.
Only for ``const`` numbers, you can use larger values (32 bits signed integers). The compiler can handle those
internally in expressions. As soon as you have to actually store it into a variable,
you have to make sure the resulting value fits into the byte or word size of the variable.
.. attention:: .. attention::
Doing math on signed integers can result in code that is a lot larger and slower than Doing math on signed integers can result in code that is a lot larger and slower than
when using unsigned integers. Make sure you really need the signed numbers, otherwise when using unsigned integers. Make sure you really need the signed numbers, otherwise

View File

@ -427,6 +427,8 @@ type identifier type storage size example var declara
``bool`` boolean 1 byte = 8 bits ``bool myvar = true`` or ``bool myvar == false`` ``bool`` boolean 1 byte = 8 bits ``bool myvar = true`` or ``bool myvar == false``
``word`` signed word 2 bytes = 16 bits ``word myvar = -12345`` ``word`` signed word 2 bytes = 16 bits ``word myvar = -12345``
``uword`` unsigned word 2 bytes = 16 bits ``uword myvar = $8fee`` ``uword`` unsigned word 2 bytes = 16 bits ``uword myvar = $8fee``
``long`` signed 32 bits integer n/a ``const long LARGE = $12345678``
(only for consts)
``float`` floating-point 5 bytes = 40 bits ``float myvar = 1.2345`` ``float`` floating-point 5 bytes = 40 bits ``float myvar = 1.2345``
stored in 5-byte cbm MFLPT format stored in 5-byte cbm MFLPT format
``byte[x]`` signed byte array x bytes ``byte[4] myvar`` ``byte[x]`` signed byte array x bytes ``byte[4] myvar``

View File

@ -1,12 +1,25 @@
TODO TODO
==== ====
fix weird error messages for long vars long @shared foo2 = 123456
what to do with bnk(): it's an awkward name but bank() is too general a name and will forbid you to use 'bank' as a variable...
add a function like addr() or lsw() to complement bnk() in getting easy access to the lower 16 bits of a long integer?
convert examples/cx16/vtui/testvtui.p8 and zsmkit to new extsub addr capability
... ...
Future Things and Ideas Future Things and Ideas
^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^
- a way to specify subroutine params for normal (non-asmsub) subs to be in r0-r15 registers instead of allocating a new localvariable for them
- the previous should give another footgun warning (the @dirty info should be a footgun warning/info as well). Need a switch to turn off footgun warnings.
- something to reduce the need to use fully qualified names all the time. 'with' ? Or 'using <prefix>'? - something to reduce the need to use fully qualified names all the time. 'with' ? Or 'using <prefix>'?
- on the C64: make the floating point routines @banked so that basic can be permanently banked out even if you use floats? But this will crash when the call is done from program code at $a000+ - on the C64: make the floating point routines @banked so that basic can be permanently banked out even if you use floats? But this will crash when the call is done from program code at $a000+
- Libraries: improve ability to create library files in prog8; for instance there's still stuff injected into the start of the start() routine AND there is separate setup logic going on before calling it. - Libraries: improve ability to create library files in prog8; for instance there's still stuff injected into the start of the start() routine AND there is separate setup logic going on before calling it.

View File

@ -1,8 +1,6 @@
%import floats
%import strings
main { main {
sub start() { sub start() {
long @shared foo2 = 123456
} }
} }

View File

@ -766,17 +766,29 @@ syn match prog8BuiltInFunc "\<diskio\.rename\>"
" prog8_lib.p8 " prog8_lib.p8
" string.p8 " strings.p8
syn match prog8BuiltInFunc "\<string\.length\>" syn match prog8BuiltInFunc "\<strings\.length\>"
syn match prog8BuiltInFunc "\<string\.left\>" syn match prog8BuiltInFunc "\<strings\.left\>"
syn match prog8BuiltInFunc "\<string\.right\>" syn match prog8BuiltInFunc "\<strings\.right\>"
syn match prog8BuiltInFunc "\<string\.slice\>" syn match prog8BuiltInFunc "\<strings\.slice\>"
syn match prog8BuiltInFunc "\<string\.find\>" syn match prog8BuiltInFunc "\<strings\.find\>"
syn match prog8BuiltInFunc "\<string\.copy\>" syn match prog8BuiltInFunc "\<strings\.rfind\>"
syn match prog8BuiltInFunc "\<string\.compare\>" syn match prog8BuiltInFunc "\<strings\.contains\>"
syn match prog8BuiltInFunc "\<string\.lower\>" syn match prog8BuiltInFunc "\<strings\.copy\>"
syn match prog8BuiltInFunc "\<string\.upper\>" syn match prog8BuiltInFunc "\<strings\.append\>"
syn match prog8BuiltInFunc "\<string\.pattern_match\>" syn match prog8BuiltInFunc "\<strings\.compare\>"
syn match prog8BuiltInFunc "\<strings\.lower\>"
syn match prog8BuiltInFunc "\<strings\.lowerchar\>"
syn match prog8BuiltInFunc "\<strings\.upper\>"
syn match prog8BuiltInFunc "\<strings\.upperchar\>"
syn match prog8BuiltInFunc "\<strings\.pattern_match\>"
syn match prog8BuiltInFunc "\<strings\.hash\>"
syn match prog8BuiltInFunc "\<strings\.isdigit\>"
syn match prog8BuiltInFunc "\<strings\.isupper\>"
syn match prog8BuiltInFunc "\<strings\.islower\>"
syn match prog8BuiltInFunc "\<strings\.isletter\>"
syn match prog8BuiltInFunc "\<strings\.isspace\>"
syn match prog8BuiltInFunc "\<strings\.isprint\>"
" test_stack.p8 " test_stack.p8