Virgil Dupras
7ca54d179d
lib/expr: make EXPR_PARSE "tail" HL
...
Things are now much simpler.
2019-12-30 19:24:53 -05:00
Virgil Dupras
73a5275b1e
lib/parse: make parseBinaryLiteral "tail" HL
2019-12-30 13:05:21 -05:00
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