1
0
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:
Chris Pressey 2017-12-01 15:10:16 +00:00
parent d84566a880
commit 6afbf581f7
4 changed files with 37 additions and 16 deletions

View File

@ -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.

View File

@ -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.

View File

@ -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
| { | {

View File

@ -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
| { | {