Commit Graph

248 Commits

Author SHA1 Message Date
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