|
|
@ -555,17 +555,18 @@ such as animations. |
|
|
|
|
|
|
|
|
|
|
|
## Stdio module |
|
|
|
## Stdio module |
|
|
|
|
|
|
|
|
|
|
|
- This module currently defines two global handles (resp. constants): `@stdin` and `@stdout`. |
|
|
|
- This module defines 4 global handles: `@cin`, `@cout`, `@cin_r`, `@cout_r`. |
|
|
|
- You can think of these handles as streams or SFRs (special function registers). |
|
|
|
- You can think of these handles as streams or SFRs (special function registers). |
|
|
|
To use them, simply load data to or from the handles (e.g. `(ld r0 @stdin)`). |
|
|
|
To use them, simply load data to or from the handles (e.g. `(ld r0 @cin)`). |
|
|
|
- They operate over unicode code points, which are a superset of ASCII. |
|
|
|
- They operate over unicode code points, which are a superset of ASCII. |
|
|
|
|
|
|
|
- The "_r" variants work with raw bytes. Do not combine them, or you may get problems with multi-byte characters. |
|
|
|
|
|
|
|
|
|
|
|
You can use these special handles in almost all instructions: |
|
|
|
You can use these special handles in almost all instructions: |
|
|
|
|
|
|
|
|
|
|
|
```lisp |
|
|
|
```lisp |
|
|
|
(cmp @stdin 'y' |
|
|
|
(cmp @cin 'y' |
|
|
|
(eq? (ld @stdout '1')) |
|
|
|
(eq? (ld @cout '1')) |
|
|
|
(ne? (ld @stdout '0'))) |
|
|
|
(ne? (ld @cout '0'))) |
|
|
|
``` |
|
|
|
``` |
|
|
|
|
|
|
|
|
|
|
|
When you compile a program using such handles, you will get a strange looking assembly: |
|
|
|
When you compile a program using such handles, you will get a strange looking assembly: |
|
|
@ -577,7 +578,7 @@ When you compile a program using such handles, you will get a strange looking as |
|
|
|
``` |
|
|
|
``` |
|
|
|
|
|
|
|
|
|
|
|
These are unique constants assigned to the streams at compile time. They are not meant to be used |
|
|
|
These are unique constants assigned to the streams at compile time. They are not meant to be used |
|
|
|
directly, but the value can be obtained by simply leaving out the '@' sign: `(ld r0 stdin)`. |
|
|
|
directly, but the value can be obtained by simply leaving out the '@' sign: `(ld r0 cin)`. |
|
|
|
That can be useful when these stream handles need to be passed to a function. Obviously this makes |
|
|
|
That can be useful when these stream handles need to be passed to a function. Obviously this makes |
|
|
|
more sense when there are different kinds of streams available, not just these two default ones. |
|
|
|
more sense when there are different kinds of streams available, not just these two default ones. |
|
|
|
|
|
|
|
|
|
|
|