Virgil Dupras
e1e6d52fea
zasm: add ERR_BAD_FMT
2019-05-27 11:58:12 -04:00
Virgil Dupras
412b3f374a
zasm: add ERR_BAD_ARG
2019-05-27 11:22:38 -04:00
Virgil Dupras
af2c561c6b
zasm: begin erroring out reliably
...
Up until now, invalid source input had undefined behavior. We're now
beginning to define that behavior so that zasm can be a bit more usable.
2019-05-27 11:04:31 -04:00
Virgil Dupras
976a93971c
zasm: improve docs
2019-05-27 10:38:29 -04:00
Virgil Dupras
c40bc329d5
zasm: fix expr returning wrong values on first pass
...
To run a parseExpr on first pass would always return a false success
with dummy value because symbols are configured to always succeed on
first pass. This would make expressions like ".fill 0x38-$" so bad
things to labels because "0x38-$" wouldn't return the same thing on
first and second pass.
Revert to parsing literals and symbols after having scanned for
expressions and add a special case specifically for char literals (which
is why we scanned for literals and symbols first in the first place).
2019-05-20 10:46:27 -04:00
Virgil Dupras
e18f9b53a9
zasm: add support for "$" symbol
...
Allows for the ".fill x-$" pattern.
2019-05-20 09:17:50 -04:00
Virgil Dupras
848a7500bc
zasm: add support for .fill directive
2019-05-20 08:39:53 -04:00
Virgil Dupras
acddb045a5
zasm: add support for .org directive
2019-05-19 14:40:42 -04:00
Virgil Dupras
bc1496a7e3
zasm emul: bring back kernel/user distinction
...
It was a bad idea to remove it. Now that I'm introducing the concept of
a per-app glue file, it becomes much easier to build emulated zasm as a
userspace app.
2019-05-19 12:57:59 -04:00
Virgil Dupras
78d9764005
zasm: can now assemble zasm/expr.asm!
2019-05-19 10:45:11 -04:00
Virgil Dupras
6cbce0533a
zasm: can now assemble zasm/instr.asm!
2019-05-19 10:40:45 -04:00
Virgil Dupras
ea8477bb91
zasm: accept whitespaces before separating comma
2019-05-19 10:39:29 -04:00
Virgil Dupras
3b1ef2b9af
zasm: bump global symbol limit to 0x200
2019-05-19 09:54:42 -04:00
Virgil Dupras
44abc79850
zasm: add support for SBC HL, ss
2019-05-19 09:54:02 -04:00
Virgil Dupras
d9fff16157
zasm emul: get rid of the kernel/user distinction
...
Made things complicated for nothing.
2019-05-19 09:14:40 -04:00
Virgil Dupras
98695f9912
zasm: de-index symRegister
...
Make symRegister's logic pointer-based so we can break through the 0x100
limit.
2019-05-19 09:06:24 -04:00
Virgil Dupras
c01816b055
zasm: make instr a bit more zasm-friendly
...
But we're still at a certain distance from assembling it with zasm:
we're busting the 0x100 symbol limit.
2019-05-18 21:07:35 -04:00
Virgil Dupras
bccf933ea9
zasm: try for regular number or symbol before parsing expr
...
Previously, we would mess up literals like '-'.
2019-05-18 21:06:31 -04:00
Virgil Dupras
723497af69
zasm: can now assemble zasm/directive.asm!
2019-05-18 20:37:34 -04:00
Virgil Dupras
9f6ebf538d
zasm: can assemble zasm/tok.asm!
2019-05-18 20:31:52 -04:00
Virgil Dupras
fd11941867
zasm: can now assemble zasm/parse.asm!
2019-05-18 19:59:58 -04:00
Virgil Dupras
2ce6b61964
zasm: add support for RLC r and RRC r
2019-05-18 19:59:31 -04:00
Virgil Dupras
29f0bcbe23
zasm: can now assemble zasm/symbol.asm!
2019-05-18 18:56:27 -04:00
Virgil Dupras
84090dcd14
zasm: add support for RL r and RR r
...
Also, make zasm assemble zasm/util.asm again!
2019-05-18 15:41:21 -04:00
Virgil Dupras
d47d07757e
zasm: fix expr operator priority
2019-05-18 15:17:56 -04:00
Virgil Dupras
068e4327ec
zasm: fix false truncation error on "-" expressions
2019-05-18 14:51:11 -04:00
Virgil Dupras
650eec23de
zasm: add LD r, (IX/Y+d) support
2019-05-17 23:01:29 -04:00
Virgil Dupras
f44c3e5413
zasm: fix 3-digit hex parsing
2019-05-17 23:00:57 -04:00
Virgil Dupras
cdb6cce914
zasm: add multiplication expressions
2019-05-17 22:22:10 -04:00
Virgil Dupras
157ac03e25
zasm: can now assemble zasm/util.asm!
2019-05-17 20:47:43 -04:00
Virgil Dupras
28d5ebdc8a
Make apps folder into a namespace
...
To straighten out includes and to pave the way into zasm being part of
the same "include CFS" as parts, we make zasm includes namespaced.
2019-05-17 20:22:32 -04:00
Virgil Dupras
ae2187ad06
zasm: avoid ';' literal
...
Simplifies comment stripping through sed.
2019-05-17 19:49:37 -04:00
Virgil Dupras
d58cf122a8
zasm: fix regression with lowercase (ix+d) parsing
2019-05-17 19:32:58 -04:00
Virgil Dupras
2a97966bdc
zasm: add LD IX/IY, NN instructions
2019-05-17 17:43:42 -04:00
Virgil Dupras
21c49d80cf
zasm: allow single quote to contain whitespace
2019-05-17 17:22:16 -04:00
Virgil Dupras
40d5530666
zasm: allow expression in .db
2019-05-17 17:21:49 -04:00
Virgil Dupras
556be3f0ce
zasm: allow for whitespace inside string literals
...
Also, increase scratchpad size. It wasn't big enough for some
expressions in shell unit.
2019-05-17 16:44:08 -04:00
Virgil Dupras
f9dac15449
zasm: add support for string literals in .db
2019-05-17 16:17:22 -04:00
Virgil Dupras
16922da3d4
zasm: support multiple elements in .dw and .db
2019-05-17 15:39:28 -04:00
Virgil Dupras
b0318f4891
zasm: make instr unt write directly to ioPutC
...
Couldn't get rid of instrUpcode though, too complicated.
2019-05-17 15:35:49 -04:00
Virgil Dupras
26d6dd1912
zasm: remove direcData buffer
2019-05-17 15:14:38 -04:00
Virgil Dupras
ad7428e471
zasm: make io unit handle PC and output suppression
2019-05-17 14:58:16 -04:00
Virgil Dupras
6547e83f20
zasm: improve comma processing
...
We don't treat "," exactly as a whitespace anymore. We have specific
processing for it.
2019-05-17 14:34:38 -04:00
Virgil Dupras
3a91e9eb46
zasm: add support for PUSH/POP IX/IY
2019-05-17 14:00:37 -04:00
Virgil Dupras
c1b09123f1
zasm: add support for RETI and RETN
2019-05-17 13:21:49 -04:00
Virgil Dupras
072aad775a
zasm: don't match prefixes in symFind
...
Only match when full names match.
2019-05-17 13:14:16 -04:00
Virgil Dupras
92a119105d
zasm: add support for "0b" literals
2019-05-17 10:34:01 -04:00
Virgil Dupras
0f5fab23e9
zasm: don't accept "0X" prefix for hex anymore
...
This was only necessary in the time where input was upcased right after
reading.
2019-05-17 10:03:36 -04:00
Virgil Dupras
4075c90d44
Add unit test for zasm's parse unit
2019-05-17 10:00:30 -04:00
Virgil Dupras
7083116379
zasm: remove JUMP_ prefixes
...
They serve no purpose and make the code less flexible.
2019-05-17 09:50:11 -04:00
Virgil Dupras
2f0dd5d668
zasm: iiiiiiiincluuuuuuudes!!1!
2019-05-16 21:15:00 -04:00
Virgil Dupras
22c7eeaa5d
Move apps/zasm/tests to tools/tests/zasm
...
This 'apps' folder is going to disappear. Everything is going to be a
"part" to be assembled through recipes. 'apps' has no meaning.
2019-05-16 11:23:15 -04:00
Virgil Dupras
0ae91e55ec
zasm: big local symbols overhaul
2019-05-16 08:26:00 -04:00
Virgil Dupras
e9244b80ee
zasm: big I/O overhaul
...
Instead of buffering input in memory one line at a time, we go in "just
in time" mode and always read contents directly from I/O, without
buffering.
It forces us to implement a `ioPutback` scheme, but on the other hand it
greatly simplifies cases where multiple tokens are on the same line
(when a label is directly followed by an instruction).
The end result feels much more solid and less hackish.
2019-05-16 07:53:42 -04:00
Virgil Dupras
34ff0a6c2a
zasm: consolidate code
2019-05-15 15:27:33 -04:00
Virgil Dupras
a2b5b1efab
zasm: add one layer of indirection in symbol registry
...
We'll need it for an upcoming "local labels" registry.
2019-05-15 14:30:41 -04:00
Virgil Dupras
fa28d64278
zasm: change ioRewind to ioSeek
...
Will need it soon.
2019-05-15 13:41:56 -04:00
Virgil Dupras
33a1ee250d
zasm: rename curOutputOffset to ZASM_PC
2019-05-15 13:31:49 -04:00
Virgil Dupras
a994867a86
Wohoo! zasm assembles core.asm!!!
2019-05-14 16:50:35 -04:00
Virgil Dupras
b0218349ff
zasm: support multiple instructions on single line
2019-05-14 16:45:56 -04:00
Virgil Dupras
1010e8372c
zasm: add support for subtractions in expressions
2019-05-14 16:39:10 -04:00
Virgil Dupras
67803f6cb5
zasm: don't upcase char literals
2019-05-14 15:42:15 -04:00
Virgil Dupras
72d2a8f073
zasm: add support for + expressions
2019-05-14 15:26:29 -04:00
Virgil Dupras
99a7c94c9f
zasm: make "double parsing" a bit more solid
...
It was previously skipped on a local label.
2019-05-14 14:35:34 -04:00
Virgil Dupras
7972b92be1
zasm: refactoring
2019-05-14 14:32:12 -04:00
Virgil Dupras
2c0166814f
zasm: support inline labels
...
That is, labels with code following right afterwards.
2019-05-14 14:10:20 -04:00
Virgil Dupras
a486a2a81e
zasm: support char literals
2019-05-14 13:53:12 -04:00
Virgil Dupras
2de69ee7cd
zasm: add support for local labels
2019-05-13 20:23:10 -04:00
Virgil Dupras
17dbee6a49
zasm: deduplicate code
2019-05-13 19:47:34 -04:00
Virgil Dupras
746c86cbf8
zasm: make getSymVal not responsible for calling symFind
...
With local labels, these two will have to be decoupled.
2019-05-13 16:53:52 -04:00
Virgil Dupras
c9deac599e
zasm: add support for LD r, r' instructions
2019-05-13 16:38:09 -04:00
Virgil Dupras
878bc2919f
zasm: add support for relative labels
2019-05-12 22:07:21 -04:00
Virgil Dupras
1e3982d3ab
zasm: make DE indicate the last line to be read
...
Facilitates debugging
2019-05-12 21:44:59 -04:00
Virgil Dupras
dd6fa5d38b
zasm: properly propagate error conditions
...
Gives clearer output on errors. Easier debugging...
2019-05-12 21:31:11 -04:00
Virgil Dupras
86cad39de4
zasm: fix wrong logic in .numberTruncated error condition
...
`xor c` didn't do what I thought it did at the time. Newbie mistake,
there are probably a lot like this scattered around...
2019-05-12 21:23:24 -04:00
Virgil Dupras
d6f5cf5b90
zasm: fix first pass inversion bug
...
Also, confirm in tests that we can refer to other symbols in `.equ`.
2019-05-12 08:50:29 -04:00
Virgil Dupras
89848dbfe2
zasm: add support for .equ
2019-05-11 22:11:05 -04:00
Virgil Dupras
6d4515cd03
zasm: little code reorganisation
2019-05-10 21:19:34 -04:00
Virgil Dupras
95f53d0ce3
zasm: support symbols in .dw directive
2019-05-10 21:17:19 -04:00
Virgil Dupras
c000d5cfb1
zasm: support forward label references!
2019-05-10 21:14:46 -04:00
Virgil Dupras
c239ec7dea
zasm: read input in two passes
2019-05-10 20:32:05 -04:00
Virgil Dupras
34ee91a0d7
zasm: use blkdev IDs as input and output
...
This will soon allow use to seek and tell on input, which is necessary
for a second pass which is necessary for forward symbol references.
This require making `blkSel` a bit more flexible. Rather than having one
global selected blkdev, each app can select its own, in its own memory
space.
2019-05-10 19:33:34 -04:00
Virgil Dupras
5a6078df4d
zasm: add support for hex literals
2019-05-09 22:14:11 -04:00
Virgil Dupras
b87feac785
zasm: add support for labels!
2019-05-09 21:21:08 -04:00
Virgil Dupras
1c17dcb7a2
zasm: consolidate code
2019-05-09 15:55:29 -04:00
Virgil Dupras
d34aff67bb
zasm: Read from and write to streams instead of memory
2019-05-09 15:36:03 -04:00
Virgil Dupras
7f27d63c19
Move apps/zasm/emul to tools/emul
2019-05-09 14:09:40 -04:00
Virgil Dupras
f9ae5ca46b
zasm: simplify readWord calling
...
It always reads in the scratchpad with the same max size. No need for
DE-dancing anymore.
2019-05-01 14:19:43 -04:00
Virgil Dupras
6811d98618
zasm: add support for the ".dw" directive
2019-05-01 14:07:01 -04:00
Virgil Dupras
dde5161fc1
zasm: add support for ".db" directive
2019-05-01 11:26:41 -04:00
Virgil Dupras
28e1ba5e26
zasm: adjust parseLine success condition
...
De-couple "success" from "wrote something to (DE)" so that directive
parsing can be considered successful without writing to (DE).
2019-05-01 10:16:57 -04:00
Virgil Dupras
a00bc8cc4b
zasm: remove the "token" variable
2019-04-30 22:32:12 -04:00
Virgil Dupras
5fd9b7812c
zasm: make each token type parse the remaining of line directly
2019-04-30 21:55:18 -04:00
Virgil Dupras
a7693ffd86
zasm: still inching toward directives
2019-04-30 21:40:22 -04:00
Virgil Dupras
1ffe05dd09
zasm: creep in the notion of directive
2019-04-30 21:27:44 -04:00
Virgil Dupras
8241298c8f
zasm: code consolidation
2019-04-30 21:13:37 -04:00
Virgil Dupras
98ad223ee1
zasm: introduce the concept of instruction ID
...
It will make tokenization cleaner and it also makes the instruction
table significantly more compact.
2019-04-30 20:26:41 -04:00
Virgil Dupras
79b5c701f6
zasm: move token variables from tok.asm into main.asm
2019-04-30 17:04:42 -04:00
Virgil Dupras
a7635cb1ea
zasm: allow blank lines in asm source code
2019-04-30 16:24:45 -04:00
Virgil Dupras
eb5c974573
zasm: allow leading whitespace in parsed lines
2019-04-30 16:08:56 -04:00
Virgil Dupras
57c3dfece8
zasm: assemble multiple lines at once
2019-04-30 15:51:39 -04:00
Virgil Dupras
2653826dff
zasm: move zasm.asm to instr.asm and create main.asm
...
instr.asm is for single instruction assembly.
2019-04-30 13:52:14 -04:00
Virgil Dupras
175e1328e7
zasm: consolidate
...
* Build emulated zasm statically
* Improve comments in zasm.asm
* Fix build
* Use unsetZ from core
2019-04-30 13:45:31 -04:00
Virgil Dupras
b4694225c5
blockdev: change GetC API
...
Instead of waiting, GetC always return immediately, with Z indicating if
something was fetched. The "wait" loop is implemented by the called (and
in the new `blkGetCW`).
This simplifies out-of-bounds verifications for storage blockdevs.
2019-04-22 14:26:16 -04:00
Virgil Dupras
63afa5798b
zasm: add a bunch of instructions
2019-04-21 14:49:33 -04:00
Virgil Dupras
8594084b06
zasm: simplify code
2019-04-21 14:23:24 -04:00
Virgil Dupras
93eb262083
zasm: add a bunch of instructions
2019-04-21 14:12:06 -04:00
Virgil Dupras
e9e2f30fc5
zasm: add support for BIT
2019-04-21 13:41:55 -04:00
Virgil Dupras
e073fbff79
zasm: add support for "special instructions"
...
Let's not create complex rules for exception cases.
2019-04-21 12:58:28 -04:00
Virgil Dupras
ecf7d7fbd6
zasm: add a bunch of instructions
2019-04-21 11:49:20 -04:00
Virgil Dupras
056bbde710
zasm: add support for IX/IY with displacement
2019-04-21 10:55:47 -04:00
Virgil Dupras
14a410b024
zasm: extract tok.asm from zasm.asm
2019-04-21 09:25:52 -04:00
Virgil Dupras
89972ca210
zasm: add a bunch of instructions
2019-04-20 23:03:13 -04:00
Virgil Dupras
115dc18971
zasm: add support for extended instructions
2019-04-20 22:37:38 -04:00
Virgil Dupras
70f61ec451
zasm: a bit of refactoring
2019-04-20 20:35:45 -04:00
Virgil Dupras
f6dddaa380
zasm: add automated tests and fix a bunch of bugs
...
A python script generates all possibilities for all supported
instructions and compare zasm output with scas. After having fixed a
couple of bugs, all tests pass!
2019-04-17 21:03:20 -04:00
Virgil Dupras
8ce528c752
zasm: add a bunch of instructions
2019-04-17 17:08:45 -04:00
Virgil Dupras
76caf944dd
zasm: add support for the "e" arg type (djnz, jr)
2019-04-17 16:26:04 -04:00
Virgil Dupras
c5c8369ce9
zasm: Add support for (NN) constants
2019-04-17 16:04:24 -04:00
Virgil Dupras
e1d6178457
zasm: add a bunch of instructions
2019-04-17 15:25:35 -04:00
Virgil Dupras
7996a9997a
zasm: add support for numerical constants
2019-04-17 14:47:42 -04:00
Virgil Dupras
3fe5eb3e60
zasm: add a bunch of primary instructions
2019-04-17 11:37:49 -04:00
Virgil Dupras
a7dc1e7b4a
zasm: make "RET cc" work
2019-04-17 11:06:51 -04:00
Virgil Dupras
279f6e0ad8
zasm: invert emulator io_write() handling
...
This facilitates debugging. To know the value of `A` at any point,
you can do `out (0), a`. The number of bytes in the output will be the
value of `A`.
2019-04-17 10:34:30 -04:00
Virgil Dupras
9b556c8883
zasm: support "special" groups and groups in arg2
2019-04-17 10:34:10 -04:00
Virgil Dupras
a7538473e4
zasm: add support for variable arguments
2019-04-17 08:23:01 -04:00
Virgil Dupras
38e40bfc16
zasm: make the instruction table fixed
...
Looping is easier
2019-04-16 22:46:04 -04:00
Virgil Dupras
8cd400651a
zasm: read each argument immediately insto an argspec
...
Previously, we would go the other way around: match all available
argspecs to raw argument strings. It's much better to go the other way
around because we can "reduce" each argument much sooner. That will be
important when we start to support constants and expressions.
2019-04-16 22:40:07 -04:00
Virgil Dupras
1f94b6c3f7
zasm: can now match all "constant" primary opcodes
2019-04-16 20:32:30 -04:00
Virgil Dupras
453cf3d74a
zasm: start matching args
...
We now properly match arg-less operations.
2019-04-16 19:40:37 -04:00
Virgil Dupras
b3af6e0115
zasm: reuse code from core
2019-04-16 17:00:19 -04:00
Virgil Dupras
9acca52e44
zasm: begin parsing with easy pickings
...
Single opcodes that yield constants. "echo ret | zasm" yields 0xc9.
2019-04-16 16:49:47 -04:00
Virgil Dupras
88cee235b1
zasm: have a whole kernel in emulation instead of a simple wrapper
...
zasm is going to need to call to kernel code...
2019-04-16 14:26:45 -04:00
Virgil Dupras
43c1005d61
zasm: implement stdin/stdout in emulator
2019-04-16 13:59:19 -04:00
Virgil Dupras
1ae2331763
Add zasm app
...
For now, only a dummy app, but it's emulated properly with libz80.
Exciting times!
2019-04-16 13:36:57 -04:00