mirror of
https://github.com/catseye/SixtyPical.git
synced 2024-12-01 16:50:09 +00:00
Deal with the inputs/outputs of buffers, in a weak way.
This commit is contained in:
parent
d84566a880
commit
6afbf581f7
@ -6,6 +6,7 @@ History of SixtyPical
|
|||||||
|
|
||||||
* Explicit word literals prefixed with `word` token.
|
* Explicit word literals prefixed with `word` token.
|
||||||
* Can `copy` literals into user-defined destinations.
|
* Can `copy` literals into user-defined destinations.
|
||||||
|
* Fixed bug where loop variable wasn't being checked at end of `repeat` loop.
|
||||||
* `buffer` and `pointer` types.
|
* `buffer` and `pointer` types.
|
||||||
* `copy ^` syntax to load the addr of a buffer into a pointer.
|
* `copy ^` syntax to load the addr of a buffer into a pointer.
|
||||||
* `copy []+y` syntax to read and write values to and from memory through a pointer.
|
* `copy []+y` syntax to read and write values to and from memory through a pointer.
|
||||||
|
@ -41,9 +41,10 @@ Documentation
|
|||||||
TODO
|
TODO
|
||||||
----
|
----
|
||||||
|
|
||||||
Insist the buffer being read or written to through pointer, appears in approporiate set.
|
### Add to pointer.
|
||||||
|
|
||||||
Add to pointer.
|
And then write a little demo "game" where you can move a block around the screen with
|
||||||
|
the joystick.
|
||||||
|
|
||||||
### `word table` and `vector table` types
|
### `word table` and `vector table` types
|
||||||
|
|
||||||
@ -58,6 +59,9 @@ are trashed inside the block.
|
|||||||
|
|
||||||
### And at some point...
|
### And at some point...
|
||||||
|
|
||||||
|
* `copy x, [ptr] + y`
|
||||||
|
* Maybe even `copy [ptra] + y, [ptrb] + y`, which can be compiled to indirect LDA then indirect STA!
|
||||||
|
* Check that the buffer being read or written to through pointer, appears in approporiate inputs or outputs set.
|
||||||
* initialized `byte table` memory locations
|
* initialized `byte table` memory locations
|
||||||
* always analyze before executing or compiling, unless told not to
|
* always analyze before executing or compiling, unless told not to
|
||||||
* `trash` instruction.
|
* `trash` instruction.
|
||||||
|
@ -1176,9 +1176,20 @@ Can't `copy` from a `word` to a `byte`.
|
|||||||
|
|
||||||
Buffers and pointers.
|
Buffers and pointers.
|
||||||
|
|
||||||
Note that `^buf` is not considered "reading" buf, so does not require it in `inputs`.
|
Note that `^buf` is a constant value, so it by itself does not require `buf` to be
|
||||||
TODO: If reading from it through a pointer, it *should* require it in `inputs`.
|
listed in any input/output sets.
|
||||||
TODO: If writing to it through a pointer, it *should* require it in `outputs`.
|
|
||||||
|
However, if the code reads from it through a pointer, it *should* be in `inputs`.
|
||||||
|
|
||||||
|
Likewise, if the code writes to it through a pointer, it *should* be in `outputs`.
|
||||||
|
|
||||||
|
Of course, unless you write to *all* the bytes in a buffer, some of those bytes
|
||||||
|
might not be meaningful. So how meaningful is this check?
|
||||||
|
|
||||||
|
This is an open problem.
|
||||||
|
|
||||||
|
For now, convention says: if it is being read, list it in `inputs`, and if it is
|
||||||
|
being modified, list it in both `inputs` and `outputs`.
|
||||||
|
|
||||||
Write literal through a pointer.
|
Write literal through a pointer.
|
||||||
|
|
||||||
@ -1186,7 +1197,8 @@ Write literal through a pointer.
|
|||||||
| pointer ptr
|
| pointer ptr
|
||||||
|
|
|
|
||||||
| routine main
|
| routine main
|
||||||
| outputs y //, buf
|
| inputs buf
|
||||||
|
| outputs y, buf
|
||||||
| trashes a, z, n, ptr
|
| trashes a, z, n, ptr
|
||||||
| {
|
| {
|
||||||
| ld y, 0
|
| ld y, 0
|
||||||
@ -1201,7 +1213,8 @@ It does use `y`.
|
|||||||
| pointer ptr
|
| pointer ptr
|
||||||
|
|
|
|
||||||
| routine main
|
| routine main
|
||||||
| // outputs buf
|
| inputs buf
|
||||||
|
| outputs buf
|
||||||
| trashes a, z, n, ptr
|
| trashes a, z, n, ptr
|
||||||
| {
|
| {
|
||||||
| copy ^buf, ptr
|
| copy ^buf, ptr
|
||||||
@ -1216,8 +1229,8 @@ Write stored value through a pointer.
|
|||||||
| byte foo
|
| byte foo
|
||||||
|
|
|
|
||||||
| routine main
|
| routine main
|
||||||
| inputs foo
|
| inputs foo, buf
|
||||||
| outputs y //, buf
|
| outputs y, buf
|
||||||
| trashes a, z, n, ptr
|
| trashes a, z, n, ptr
|
||||||
| {
|
| {
|
||||||
| ld y, 0
|
| ld y, 0
|
||||||
@ -1233,7 +1246,7 @@ Read through a pointer.
|
|||||||
| byte foo
|
| byte foo
|
||||||
|
|
|
|
||||||
| routine main
|
| routine main
|
||||||
| // inputs buf
|
| inputs buf
|
||||||
| outputs foo
|
| outputs foo
|
||||||
| trashes a, y, z, n, ptr
|
| trashes a, y, z, n, ptr
|
||||||
| {
|
| {
|
||||||
|
@ -342,7 +342,9 @@ goto.
|
|||||||
| }
|
| }
|
||||||
= 00c0a0c84c06c060a2c860
|
= 00c0a0c84c06c060a2c860
|
||||||
|
|
||||||
Buffers and pointers.
|
### Buffers and Pointers
|
||||||
|
|
||||||
|
Load address into pointer.
|
||||||
|
|
||||||
| buffer[2048] buf
|
| buffer[2048] buf
|
||||||
| pointer ptr @ 254
|
| pointer ptr @ 254
|
||||||
@ -357,12 +359,13 @@ Buffers and pointers.
|
|||||||
| }
|
| }
|
||||||
= 00c0a000a90b85fea9c085ff60
|
= 00c0a000a90b85fea9c085ff60
|
||||||
|
|
||||||
Writing literal through a pointer.
|
Write literal through a pointer.
|
||||||
|
|
||||||
| buffer[2048] buf
|
| buffer[2048] buf
|
||||||
| pointer ptr @ 254
|
| pointer ptr @ 254
|
||||||
|
|
|
|
||||||
| routine main
|
| routine main
|
||||||
|
| inputs buf
|
||||||
| outputs buf, y
|
| outputs buf, y
|
||||||
| trashes a, z, n, ptr
|
| trashes a, z, n, ptr
|
||||||
| {
|
| {
|
||||||
@ -379,8 +382,8 @@ Write stored value through a pointer.
|
|||||||
| byte foo
|
| byte foo
|
||||||
|
|
|
|
||||||
| routine main
|
| routine main
|
||||||
| inputs foo
|
| inputs foo, buf
|
||||||
| outputs y //, buf
|
| outputs y, buf
|
||||||
| trashes a, z, n, ptr
|
| trashes a, z, n, ptr
|
||||||
| {
|
| {
|
||||||
| ld y, 0
|
| ld y, 0
|
||||||
@ -389,14 +392,14 @@ Write stored value through a pointer.
|
|||||||
| }
|
| }
|
||||||
= 00c0a000a91085fea9c085ffad12c091fe60
|
= 00c0a000a91085fea9c085ffad12c091fe60
|
||||||
|
|
||||||
Reading through a pointer.
|
Read through a pointer.
|
||||||
|
|
||||||
| buffer[2048] buf
|
| buffer[2048] buf
|
||||||
| pointer ptr @ 254
|
| pointer ptr @ 254
|
||||||
| byte foo
|
| byte foo
|
||||||
|
|
|
|
||||||
| routine main
|
| routine main
|
||||||
| // inputs buf
|
| inputs buf
|
||||||
| outputs y, foo
|
| outputs y, foo
|
||||||
| trashes a, z, n, ptr
|
| trashes a, z, n, ptr
|
||||||
| {
|
| {
|
||||||
|
Loading…
Reference in New Issue
Block a user