Virgil Dupras
289037a3dd
lib/parse: make parseDecimal "tail" HL
...
HL, instead of being preserved, is set to the character following
the last read character.
2019-12-30 10:13:55 -05:00
Virgil Dupras
dcb96aefe9
lib/parse: remove parseHexPair
...
Also, make parseHexadecimal "tail" (HL). Soon, all routines in lib/parse
will do that, making the life of lib/expr easier.
2019-12-29 21:56:56 -05:00
Virgil Dupras
2503bdfced
lib/args: remove
2019-12-29 21:05:09 -05:00
Virgil Dupras
5f2615a134
at28w: don't use lib/args
2019-12-29 21:02:04 -05:00
Virgil Dupras
346bcc3d3d
zasm: don't use lib/args
...
This unit is being removed.
2019-12-29 20:56:13 -05:00
Virgil Dupras
d0f031939f
lib/parse: make parseLiteral a little tighter
...
Sub-parsers are seldom used by themselves, except for parseDecimal.
I'm tightening the code of this unit for two reasons:
1. Optimization
2. Upcoming API change where HL won't be preserved anymore, but will
point to char following the last parse char. This will allow us
to simplify lib/expr.
2019-12-29 19:47:19 -05:00
Virgil Dupras
15628da7de
lib/expr: make EXPR_PARSE put result in DE instead of IX
...
Finally getting rid of this bad mistake of using IX for this.
2019-12-29 17:37:04 -05:00
Virgil Dupras
981c93bfd4
lib/expr: fix stack imbalance on failure
2019-12-29 16:15:48 -05:00
Virgil Dupras
213614af33
lib/expr: make recursion process a bit more orderly
...
Instead of going left and right, finding operators chars and replacing them
with nulls, we parse expressions in a more orderly manner, one chunk at a
time. I think it qualifies as "recursive descent", but I'm not sure.
This allows us to preserve the string we parse and should also make the
implementation of parens much easier.
2019-12-29 11:42:18 -05:00
Virgil Dupras
7410891ad1
lib/expr: fix unary minus
...
For some reason, I've mistakenly disabled tests in test_expr without noticing
and I also broke "-123" parsing. Fixed.
2019-12-23 20:53:31 -05:00
Virgil Dupras
6d88c3a754
parseExprDE --> parseExpr
2019-12-23 19:13:44 -05:00
Virgil Dupras
5301200d6f
basic: parseExpr --> parseExprDE
2019-12-23 19:01:03 -05:00
Virgil Dupras
476178ee7c
zasm: parseExpr --> parseExprDE
2019-12-23 18:44:55 -05:00
Virgil Dupras
cc754e12aa
parseExpr --> parseExprDE: easy ones
...
Those replacements were trivially equivalent. For the other ones, an
examination of the context is necessary.
2019-12-23 15:59:55 -05:00
Virgil Dupras
a034f63e23
test: begin adding common test harnessing code
...
This should make tests a bit more convenient to write and debug.
Moreover, begin de de-IX-ization of parseExpr. I have, in a local WIP, a
parseExpr implemented using a recursive descent algo, it passes all tests, but
it unfortunately assembles a faulty zasm. I have to find the expressions that
it doesn't parse properly.
But before I do that, I prefer to commit these significant improvements I've
been making to tests harness in parallel of this development.
2019-12-23 15:41:25 -05:00
Virgil Dupras
98ca338aba
avra: add LD/ST
2019-12-22 21:50:20 -05:00
Virgil Dupras
51e500e8da
avra: avoid pgm addr truncation error on first pass
2019-12-22 19:44:46 -05:00
Virgil Dupras
b955a67daa
avra: add TST
2019-12-22 19:24:36 -05:00
Virgil Dupras
6e1e8e0e59
avra: add LSL
2019-12-22 18:36:15 -05:00
Virgil Dupras
8ded02bc78
avra: fix misordered MOV, MUL, NEG and NOP
2019-12-22 18:35:08 -05:00
Virgil Dupras
f54e10f9fd
avra: add CALL and JMP
2019-12-22 15:54:46 -05:00
Virgil Dupras
10b925e0e0
avra: add BCLR and BSET
2019-12-22 15:11:15 -05:00
Virgil Dupras
1771ee8da7
avra: add SER
2019-12-22 15:01:08 -05:00
Virgil Dupras
0a9ac27cf6
avra: add SBIC and SBIS
2019-12-22 14:55:38 -05:00
Virgil Dupras
a9dcba5793
avra: add CBR instruction
2019-12-22 14:45:10 -05:00
Virgil Dupras
c968995ec0
avra: add CBI and SBI
...
This completes instruction support for the Blink tn45 example.
2019-12-15 20:51:31 -05:00
Virgil Dupras
5c43988649
avra: code consolidation
2019-12-15 20:15:44 -05:00
Virgil Dupras
b130cac635
avra: code consolidation
2019-12-15 19:17:03 -05:00
Virgil Dupras
52359a4e42
avra: a little code deduplication
2019-12-15 18:52:00 -05:00
Virgil Dupras
e9c692ed50
avra: a litte bit of code deduplication
2019-12-15 18:34:14 -05:00
Virgil Dupras
2652c81519
avra: make CLR work properly
2019-12-15 16:43:32 -05:00
Virgil Dupras
20861767e6
avra: generalize arg swapping behavior
2019-12-15 16:36:43 -05:00
Virgil Dupras
14fbfa2967
avra: small _parseArgs refactoring
...
Take argspec pairs directly as an argument instead of taking a
pointer to an argspec pair.
2019-12-15 16:25:16 -05:00
Virgil Dupras
62eb5589c3
avra: refactor instruction tbl
...
The instruction table is now beefier and has redundant data, but
this simplifies processing. This should simplify upcoming work.
2019-12-15 15:53:28 -05:00
Virgil Dupras
aa8df95f7d
Add "avr/" includes folder
...
Also, add a "real world" example in AVRA tests, a blink program on
a ATtiny45. Some instructions are commented out because they aren't
implemented yet, but not many.
The output of the program has been verified against AVRA's own
output.
2019-12-15 09:38:01 -05:00
Virgil Dupras
64935d8b40
avra: add IN and OUT instructions
2019-12-15 08:43:59 -05:00
Virgil Dupras
ab578159b7
avra: refactor args parsing
...
This costs us a bit of space for now but should make things a lot
simpler down the road, especially with "alias ops" which are simple
syntactic sugar for another op.
2019-12-14 15:17:55 -05:00
Virgil Dupras
fa75f30ffb
avra: add RJMP and RCALL instructions
2019-12-14 12:28:27 -05:00
Virgil Dupras
33c480a5dd
avra: remove useless instrBRBits table
...
I had written this when trying different approaches to adding BR and
I forgot to remove it.
2019-12-14 09:41:36 -05:00
Virgil Dupras
a5efc695e9
avra: add "Rd + bit" instructions
2019-12-14 09:33:46 -05:00
Virgil Dupras
c696fcbce4
avra: add "with immediate" instructions
2019-12-14 09:05:38 -05:00
Virgil Dupras
4b9712a224
avra: add branching instructions
2019-12-13 22:49:15 -05:00
Virgil Dupras
57c1a10434
avra: first steps
2019-12-13 17:38:40 -05:00
Virgil Dupras
e691dab070
zasm: little drive-by optimization
...
Use IX directly for argspec rows instead of going through DE. It saves a bit
of processing. The code was this way because I initially didn't use IX at all,
so as code evolved, that DE translation stayed as an artifact.
2019-12-13 10:54:01 -05:00
Virgil Dupras
0d7693a163
core: remove writeHLinDE
...
It wasn't used much so I inlined it.
2019-12-13 09:56:23 -05:00
Virgil Dupras
4f7a05e3b7
core: remove cpHLDE
...
It wasn't used much, so I replaced its use in the kernel with direct code
and moved the routine in apps/ed, the only other place where it was used.
2019-12-12 15:53:14 -05:00
Virgil Dupras
43f4c5200e
basic: don't choke on ':' in '"' literals
2019-12-12 12:22:38 -05:00
Virgil Dupras
3db38b0d89
basic: add while command
2019-12-12 11:17:10 -05:00
Virgil Dupras
51c977f2ed
basic: allow multiple commands on the same line
2019-12-12 10:51:13 -05:00
Virgil Dupras
1710c865dc
doc: refer to the new BASIC shell in example
...
ref #80
2019-12-11 14:57:07 -05:00
Virgil Dupras
25d25d017c
Replace old shell with BASIC shell
...
fixes #80
2019-12-11 14:05:34 -05:00
Virgil Dupras
20151a97f8
recipes/rc2014/zasm: use BASIC shell
...
Also made Makefile actually portable.
2019-12-11 13:01:51 -05:00
Virgil Dupras
880775ae69
recipes/rc2014/sdcard: use BASIC shell
2019-12-11 11:18:32 -05:00
Virgil Dupras
beaea6f978
basic: add puth command
2019-12-09 14:34:14 -05:00
Virgil Dupras
105acedab8
basic: improve README
...
markdown formatting was broken. Also, don't mark it as WIP.
2019-12-01 20:15:45 -05:00
Virgil Dupras
10864afa96
recipes/ti84: use the BASIC shell
2019-12-01 20:11:13 -05:00
Virgil Dupras
4c07639808
basic: make cmd table more compact
...
This shaves off quite a few bytes from the binary.
2019-11-30 21:36:34 -05:00
Virgil Dupras
4ba84dac5c
basic: add getc/putc commands
2019-11-30 21:13:44 -05:00
Virgil Dupras
77485a0031
basic: change welcome prompt
...
This is becoming the new shell, it has to step up to its new responsibilities!
2019-11-30 20:50:34 -05:00
Virgil Dupras
fc23a7c4a1
basic: do registers-to-vars transfer after pgm hook call
2019-11-25 23:16:15 -05:00
Virgil Dupras
264e72e0fd
basic: add fnew and fdel commands
2019-11-25 22:49:24 -05:00
Virgil Dupras
7c893dada1
basic: can now execute user apps!
...
Shell replacement sequence beginning in 3, 2, 1...
2019-11-25 22:05:10 -05:00
Virgil Dupras
b29073b01d
basic: add fopen command
2019-11-25 21:41:37 -05:00
Virgil Dupras
a0daed6812
basic: add usr command
2019-11-24 21:07:03 -05:00
Virgil Dupras
12bc120375
basic: add bsel, bseek, getb, putb commands
2019-11-24 20:34:23 -05:00
Virgil Dupras
8f1d942e5f
basic: add addr command
2019-11-24 15:39:36 -05:00
Virgil Dupras
381d57a513
basic: make variable A the only input variable
...
Mechanism for assigning inputs to the specified variable is clumsy and uses
binary space. Always using A is much simpler and doesn't seem very limiting to
me. I do that because there's many more "input" commands I'd like to add.
2019-11-24 14:55:50 -05:00
Virgil Dupras
e1df320d44
basic: add ldbas command
2019-11-24 14:26:32 -05:00
Virgil Dupras
13f935aa88
basic: add fls command
...
Also, add the new `bshell` emulated tool. BASIC is on its way to replace the
shell.
2019-11-24 10:24:15 -05:00
Virgil Dupras
b7d4860acf
basic: add in/out commands
...
Also, fixed the cmd matching algo to not accept partial matches. For example,
to stop matching "input" when the command was "in".
2019-11-23 20:38:56 -05:00
Virgil Dupras
7761cebb0a
basic: add sleep command
...
also fix broken "peek"
2019-11-23 17:07:14 -05:00
Virgil Dupras
9602f9b983
basic: add peek/poke/deek/doke commands
2019-11-23 16:09:34 -05:00
Virgil Dupras
a680fd3328
basic: add support for signed integers
2019-11-23 14:56:23 -05:00
Virgil Dupras
501fe96e07
lib/expr: use the IX register a bit less
...
It's an awkward register to use and avoiding its use allows us to strip the
resulting binary significantly. parseEXPR keeps the same signature though.
2019-11-22 19:56:08 -05:00
Virgil Dupras
2f71ad6d2f
lib/expr: add left/right shifting operators
2019-11-22 18:35:10 -05:00
Virgil Dupras
a03c5ac700
lib/expr: add bitwise operators
2019-11-22 17:16:51 -05:00
Virgil Dupras
972e8221f1
lib/expr: add division and modulo operators
2019-11-22 15:03:16 -05:00
Virgil Dupras
1b01f13105
lib/expr: refactor for easier operator addition
2019-11-22 14:45:12 -05:00
Virgil Dupras
fd5b2ab856
Put app-common documentation in apps/README.md
2019-11-22 14:01:16 -05:00
Virgil Dupras
e17dc1e1e1
basic: add input command
2019-11-21 20:17:55 -05:00
Virgil Dupras
982d20f895
basic: allow printing of quoted strings
2019-11-21 19:56:51 -05:00
Virgil Dupras
704d32279a
basic: document better
2019-11-21 17:03:46 -05:00
Virgil Dupras
7262993f14
basic: add if
2019-11-21 16:06:14 -05:00
Virgil Dupras
3f3dd9141e
basic: allow multiple args in print
2019-11-20 21:02:11 -05:00
Virgil Dupras
9c400ca642
basic: add goto
...
Things are getting super cereal...
2019-11-20 15:45:53 -05:00
Virgil Dupras
9d6cbe577c
basic: add variables
...
Things are getting cereal...
2019-11-20 15:10:00 -05:00
Virgil Dupras
9c9484fb88
basic: add run command
2019-11-20 10:49:23 -05:00
Virgil Dupras
9d1003e7a2
basic: keep line index ordered and line numbers unique
2019-11-19 21:55:26 -05:00
Virgil Dupras
62138b12cf
basic: add buffer line index
2019-11-19 20:43:01 -05:00
Virgil Dupras
4c6de413df
basic: begin implementing a line buffer
2019-11-19 15:14:04 -05:00
Virgil Dupras
f5b04fc02f
basic: add expression support to print
...
Again, same thing as in zasm.
2019-11-18 15:52:44 -05:00
Virgil Dupras
0bd58fd178
basic: parse hex, binary and char literals
...
Same thing as in zasm.
2019-11-18 15:22:09 -05:00
Virgil Dupras
1cea6e71e0
basic: add a print cmd
...
It can only print a decimal literal. But still, that's a big step because
I hadn't implemented decimal formatting yet.
2019-11-18 13:40:23 -05:00
Virgil Dupras
019d05f64c
Make the shell a userspace app
...
That's my mega-commit you've all been waiting for.
The code for the shell share more routines with userspace apps than with kernel
units, because, well, its behavior is that of a userspace app, not a device
driver.
This created a weird situation with libraries and jump tables. Some routine
belonging to the `kernel/` directory felt weird there.
And then comes `apps/basic`, which will likely share even more code with the
shell. I was seeing myself creating huge jump tables to reuse code from the
shell. It didn't feel right.
Moreover, we'll probably want basic-like apps to optionnally replace the shell.
So here I am with this huge change in the project structure. I didn't test all
recipes on hardware yet, I will do later. I might have broken some...
But now, the structure feels better and the line between what belongs to
`kernel` and what belongs to `apps` feels clearer.
2019-11-15 15:37:49 -05:00
Virgil Dupras
cdd0b64570
Modify userspace .org and RAMSTART expectations
...
Instead of expecting a `USER_CODE` symbol to be set, we expect `.org` to be
set in all userspace glue code. This gives us more flexibility with regards to
how we manage that.
Moreover, instead of making `USER_RAMSTART` mandatory, we make it default to
the end of the binary, which is adequate in a majority of cases.
Will be useful for my upcoming mega-commit... :)
2019-11-15 10:33:13 -05:00
Virgil Dupras
d74b85f146
zasm: allow .org to be specified from command line
...
Also important for upcoming mega commit...
2019-11-15 09:57:53 -05:00
Virgil Dupras
e5255d22f9
zasm: make .org affect "@" symbol
2019-11-15 08:59:26 -05:00
Virgil Dupras
6e714875dc
zasm: Constants now override labels at all times
...
Will be important for a mega-commit I'm preparing.
2019-11-14 21:16:36 -05:00
Virgil Dupras
7cf3ed38da
Extract str.asm from core.asm and make core included by userspace
...
Most of register fiddling routines (which is now the only thing contained
in care.asm) are used by almost all userspace apps, often in inner loops.
That makes the penalty of using jump tables for those a bit too high.
Moreover, it burdens jump tables needlessly.
Because this unit is very small (now that string routines are out), it makes
sense to always include it in binaries.
2019-11-14 10:14:15 -05:00
Virgil Dupras
82995eb346
zasm: have .fill generate an error on overflow
...
Can possibly avoid a lot of debugging pain.
2019-11-13 22:27:48 -05:00