mirror of
https://github.com/irmen/prog8.git
synced 2024-10-21 04:24:05 +00:00
elaborate pointervar indexing a bit more in the docs
This commit is contained in:
parent
dcf487bdc1
commit
c812b5ee09
@ -294,6 +294,11 @@ This way you can set the second character on the second row from the top like th
|
|||||||
|
|
||||||
top5screenrows[41] = '!'
|
top5screenrows[41] = '!'
|
||||||
|
|
||||||
|
**Array indexing on a pointer variable:**
|
||||||
|
An uword variable can be used in limited scenarios as a 'pointer' to a byte in memory at a specific,
|
||||||
|
dynamic, location. You can use array indexing on a pointer variable to use it as a byte array at
|
||||||
|
a dynamic location in memory: currently this is equivalent to directly referencing the bytes in
|
||||||
|
memory at the given index. See also :ref:`pointervars_programming`
|
||||||
|
|
||||||
Strings
|
Strings
|
||||||
^^^^^^^
|
^^^^^^^
|
||||||
@ -368,6 +373,7 @@ address you specified, and setting the varible will directly modify that memory
|
|||||||
const byte max_age = 2000 - 1974 ; max_age will be the constant value 26
|
const byte max_age = 2000 - 1974 ; max_age will be the constant value 26
|
||||||
&word SCREENCOLORS = $d020 ; a 16-bit word at the addres $d020-$d021
|
&word SCREENCOLORS = $d020 ; a 16-bit word at the addres $d020-$d021
|
||||||
|
|
||||||
|
.. _pointervars_programming:
|
||||||
|
|
||||||
Direct access to memory locations
|
Direct access to memory locations
|
||||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
@ -361,6 +361,8 @@ should be the *memory address* where the value is located::
|
|||||||
&ubyte[5*40] top5screenrows = $0400 ; works for array as well
|
&ubyte[5*40] top5screenrows = $0400 ; works for array as well
|
||||||
|
|
||||||
|
|
||||||
|
.. _pointervars:
|
||||||
|
|
||||||
Direct access to memory locations
|
Direct access to memory locations
|
||||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
Instead of defining a memory mapped name for a specific memory location, you can also
|
Instead of defining a memory mapped name for a specific memory location, you can also
|
||||||
@ -370,7 +372,7 @@ directly access the memory. Enclose a numeric expression or literal with ``@(...
|
|||||||
@($d020) = 0 ; set the c64 screen border to black ("poke 53280,0")
|
@($d020) = 0 ; set the c64 screen border to black ("poke 53280,0")
|
||||||
@(vic+$20) = 6 ; a dynamic expression to 'calculate' the address
|
@(vic+$20) = 6 ; a dynamic expression to 'calculate' the address
|
||||||
|
|
||||||
The array indexing notation is syntactic sugar for such a direct memory access expression::
|
The array indexing notation on a uword 'pointer variable' is syntactic sugar for such a direct memory access expression::
|
||||||
|
|
||||||
pointervar[999] = 0 ; equivalent to @(pointervar+999) = 0
|
pointervar[999] = 0 ; equivalent to @(pointervar+999) = 0
|
||||||
|
|
||||||
@ -420,6 +422,9 @@ Syntax is familiar with brackets: ``arrayvar[x]`` ::
|
|||||||
array[2] ; the third byte in the array (index is 0-based)
|
array[2] ; the third byte in the array (index is 0-based)
|
||||||
string[4] ; the fifth character (=byte) in the string
|
string[4] ; the fifth character (=byte) in the string
|
||||||
|
|
||||||
|
Note: you can also use array indexing on a 'pointer variable', which is basically an uword variable
|
||||||
|
containing a memory address. Currently this is equivalent to directly referencing the bytes in
|
||||||
|
memory at the given index. See :ref:`pointervars`
|
||||||
|
|
||||||
String
|
String
|
||||||
^^^^^^
|
^^^^^^
|
||||||
|
@ -21,6 +21,7 @@ Future
|
|||||||
- improve testability further, add more tests
|
- improve testability further, add more tests
|
||||||
- use more of Result<> and Either<> to handle errors/ nulls better
|
- use more of Result<> and Either<> to handle errors/ nulls better
|
||||||
- can we get rid of pieces of asmgen.AssignmentAsmGen by just reusing the AugmentableAssignment ? generated code should not suffer
|
- can we get rid of pieces of asmgen.AssignmentAsmGen by just reusing the AugmentableAssignment ? generated code should not suffer
|
||||||
|
- add a switch to not create the globals-initialization logic, but instead create a smaller program (that can only run once though)
|
||||||
- c64: make the graphics.BITMAP_ADDRESS configurable (VIC banking)
|
- c64: make the graphics.BITMAP_ADDRESS configurable (VIC banking)
|
||||||
- optimize several inner loops in gfx2 even further?
|
- optimize several inner loops in gfx2 even further?
|
||||||
- add modes 2 and 3 to gfx2 (lowres 4 color and 16 color)?
|
- add modes 2 and 3 to gfx2 (lowres 4 color and 16 color)?
|
||||||
|
@ -4,5 +4,16 @@
|
|||||||
main {
|
main {
|
||||||
sub start() {
|
sub start() {
|
||||||
|
|
||||||
|
uword array = $8000
|
||||||
|
array[0] = 10
|
||||||
|
array[1] = 20
|
||||||
|
array[2] = 30
|
||||||
|
|
||||||
|
txt.print_ub(@($8000))
|
||||||
|
txt.spc()
|
||||||
|
txt.print_ub(@($8001))
|
||||||
|
txt.spc()
|
||||||
|
txt.print_ub(@($8002))
|
||||||
|
txt.spc()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user