Commit Graph

47 Commits

Author SHA1 Message Date
c7402b8dab msp430-asm: use macro_rules! instead of nightly macro syntax.
It may be nice, but y'know what's nicer? Building on stable.
2024-08-05 12:38:17 -05:00
0614e17b73 ast: Consistent constant folding. 2024-08-05 12:36:27 -05:00
5a1112db8f Update shellcode.asm 2024-07-31 11:59:45 -05:00
822c7f3700 parser: Parse char immediates into Expr::Number 2024-07-31 11:36:37 -05:00
d4c5005d8a Remove dependency on nightly Rust 2024-07-31 10:43:58 -05:00
45b8fa5c8b lexer: Remove redundant imports 2024-03-01 04:35:17 -06:00
dbc5a5fb69 Merge pull request 'v0.3.0' (#1) from v0.3.0 into main
Major rewrite to support new features. Should behave identically to v0.2.0 for any previously compatible source files, except the `.byte` and `.bytes` aliases for `.word` and `.words` have been removed, as has `.strings`

Reviewed-on: #1
2024-02-01 20:11:01 +00:00
e8fbae9837 Update copyright header 2024-02-01 12:37:59 -06:00
618200dc42 msp430-asm: Make UI a little bet prettier 2024-02-01 12:00:55 -06:00
f6c1914720 cargo doc: Fix linking errors in doc comments 2024-02-01 12:00:01 -06:00
a63a4b7ece util: Only contains Span, so rename module to span.rs 2024-02-01 11:59:21 -06:00
11bae9b348 Unit tests: Add more lexer tests, add parser tests 2024-01-31 17:59:55 -06:00
860c9d4a97 parser: Refactor Parsable to align with assembler::Assemble 2024-01-31 17:59:31 -06:00
af89541af1 lexer: Fix copy+paste error in greater. Now emits Rsh tokens~! 2024-01-31 17:58:26 -06:00
6b5663ae4e msp430-asm: Remove ANES as a dependency
- ANSI escape codes are stupid simple, and really don't warrant an external dependency
2024-01-31 13:48:16 -06:00
5a77985b39 lexer: Fix bug that did not check the second character of identifiers. This also fixes one-character identifiers not being properly detected. 2024-01-31 13:47:18 -06:00
b31295ad21 Add one of my old Microcorruption solutions as an example
- TODO: allow embedding unicode characters as numerics in expressions
2024-01-30 05:40:49 -06:00
22ade3750e grammar.ebnf: Commit incomplete grammar description 2024-01-30 05:29:25 -06:00
fc8f8b9622 v0.3.0: Total overhaul
- Everything has been rewritten
- Modularity is improved somewhat
  - No dependency injection in preprocessor/parser, though
- There are now early and late constant evaluation engines
  - This engine allows for by-value access to already-assembled code
  - Performs basic math operations, remainder, bitwise logic, bit shifts, negation, and bit inversion
  - Also allows for indexing into already-generated code using pointer-arithmetic syntax: `*(&main + 10)`. This is subject to change? It's clunky, and only allows word-aligned access. However, this rewrite is taking far too long, so I'll call the bikeshedding here.
  - Pretty sure this constant evaluation is computationally equivalent to Deadfish?
2024-01-30 05:27:12 -06:00
e4a1b889c2 Update .gitignore: Ignore vscode workspace config files 2024-01-26 18:27:23 -06:00
f0379ff1d3 msp430-help: Refactor opcode tables 2024-01-26 18:25:34 -06:00
04c5e2ddf3 msp430-help: fix footer font color 2023-10-04 04:44:26 -05:00
b24dd831fc msp430-help: using the power of The Parser™️, create a silly search tool 2023-10-04 04:40:37 -05:00
51e14334db directive: remove completed TODO 2023-10-04 04:33:43 -05:00
fd417afba0 opcode: Not all single-operand instructions take a width parameter 2023-10-04 04:31:43 -05:00
d73c5b2e5d main.rs: Basic TUI experience: line numbers, better errors 2023-09-15 18:21:01 -05:00
417ef03e41 0.2.0: Feature update and Refactor
- Each major module (lexer, parser, assembler) has its own error type
  - These error types are somewhat interconnected, but their
    dependency relationships are one-way and well defined
- The AST is no longer responsible for assembling itself
  - The Assembler (assembler::Assembler) will now visit every AST node
    and accumulate words
  - Words are assumed to be little-endian.
- There are now a set of assembler directives that affect the
  generated output:
  - .word <Number>: inserts a single word in the output
  - .words [<Number>,*]: inserts multiple words in the output
  - .byte <Number>: Alias for .word
  - .bytes [<Number>,*]: Alias for .words
  - .string "String": inserts a null-terminated UTF-8 encoded string
  - .strings ["String",*]: "" multiple strings
  - Data is always word-aligned at the moment.
- There are now assembler directives that affect the AST during
  parsing:
  - .include "path/to/file": Parses the contents of a file directly
    into the AST
    - Included files have their own defines, but *share* labels.
      This is because .defines are a tokenizer construct, and
      including a file creates a new buffer and tokenizer.
    - Circular includes are NOT checked for at the moment.
      It is very easy to exhaust the stack.
- General cleanup of several functions, comments, TODOs, etc.
- main.rs was moved to make room for upcoming improvements to the UI

TODO:
- REPL mode is only partially compatible with .define directive
- Branching to a label will branch to the data AT the label,
  not the label itself. I doubt this is correct behavior.
  - In case br <label> is meant to use the absolute address,
    I've created a .org directive (currently unimplemented)
    for specifying the load address of the program.
2023-09-05 01:54:50 -05:00
f79d7716c5 docs: Improve documentation comments somewhat 2023-08-25 03:05:42 -05:00
82420f0665 lexer: Overhaul to support token substitution 2023-08-25 03:01:53 -05:00
53f1f765f1 docs: Don't link to private components 2023-08-23 02:25:43 -05:00
8ba781bf69 Improve error messages and doc comments 2023-08-23 02:15:10 -05:00
7286d93e63 encoding.rs: Fix example in doc comment 2023-08-23 00:32:25 -05:00
0a4313bd1b parser.rs: Remove obtrusive debug printing 2023-08-23 00:27:09 -05:00
4314f8ee30 register.rs: store context in error after str::parse() 2023-08-23 00:25:10 -05:00
938b7d2af2 opcode.rs: Use Parsable trait for opcode parsing 2023-08-23 00:23:46 -05:00
2f867a67ad *_operand.rs: Directly delegate when possible in Display 2023-08-23 00:21:54 -05:00
7901c24d80 *_operand.rs: Improve clarity of expectation-failure errors 2023-08-23 00:19:17 -05:00
8ea41b46f8 number.rs: Allow Plus-sign before radix marker 2023-08-23 00:16:39 -05:00
8c2f53f950 parser.rs: Give priority to instruction parsing 2023-08-23 00:15:47 -05:00
b5fd49b0b4 parser: Improve module-level doc comments 2023-08-23 00:13:52 -05:00
8230d73495 token.rs: Lex numbers of arbitrary length, for better errors 2023-08-23 00:00:28 -05:00
b3af047d3a error.rs: Document errors & error messages 2023-08-22 23:59:17 -05:00
32c44fd311 Add readme.md 2023-08-20 00:53:35 -05:00
8947521181 token.rs: Allow one-character identifiers 2023-08-19 23:56:26 -05:00
f89d2ddfdd Update gitignore 2023-08-19 23:55:41 -05:00
d283043440 main.rs: Cleanup dead and commented-out code 2023-08-19 23:35:14 -05:00
a9ee7d3bc9 msp430-asm: init repo with proof-of-concept code 2023-08-19 23:02:24 -05:00