matrix65 0.1.0

Matrix Mode Serial Communicator for MEGA65
# Matrix Mode Serial Communicator for MEGA65

`matrix65` is a CLI tool, for communicating with the [MEGA65](https://mega65.org/)
8-bit retro computer using a serial connection.
It has a mix of features from `m65`, `mega65ftp`, and `M65connect` and is written entirely in **Rust**.
Disclaimer: This tool is still under development; use it at your own risk.

## Getting Started

### Installing

The easiest way to get started is to [install Rust](https://www.rust-lang.org/tools/install), followed by:

~~~ bash
cargo install matrix65
~~~

### Using

~~~ bash
# transfer prg file and run it (url allowed)
matrix65 --port /dev/myserial prg plasma.prg --run

# text-user-interface (TUI) for the FileHost
matrix65 --port /dev/myserial filehost 

# look for and select PRG file inside disk image (url allowed)
matrix65 --port /dev/myserial prg commando.d81 --run --reset

# type something on the mega65
matrix65 --port /dev/myserial type "dir\n"

# hexdump 16 bytes, starting at $C000
matrix65 --port /dev/myserial peek -@ 0xc000 -n 16
~~~

## Features and current status

As of writing, the list of functionality is inferior to `m65`, but
expect more features over time.
Should you be interested in testing or try some Rust programming,
your involvement is very welcome.

- [x] World-class memory safety thanks to Rust
- [x] Cross platform serial device detection
- [x] Fancy CLI interface with subcommands
- [x] Online Filehost access with TUI (experimental)
- [x] Send and run PRG files
  - [x] Go C64/C65 dependent on detected load address
  - [x] Extract PRG from CBM disk images (.d81)
  - [x] Regular files and URL's are allowed
- [x] Send sequence of key-presses
- [x] Reset MEGA65
- [x] Peek into memory; hexdump, binary file dump
- [x] Logging with e.g. `export RUST_LOG=info`
- [ ] Transfer and mount disk images
- [ ] Load at arbitrary address and optionally start with `SYS`
- [ ] Memory dumps in YAML format
- [ ] Bitstream transfer
- [ ] Transfer to SD card

## Motivation

1. I wanted to learn more about Rust and the MEGA65 hardware
2. A Text User Inferface (TUI) for the FileHost has an inherent retro-feel
3. Rust
   - is safe and free of undefined behavior
   - compiles to lean, efficient binaries, similar to C
   - has lot's of useful _crates_, e.g. for supporting [CBM disk images]https://crates.io/crates/cbm
   - has **Cargo** which makes dependency handling easy-peasy
4. In my opinion, a higher level language is more suitable than C for tasks like
   HTTP requests, JSON parsing, and TUI handling.

## Resources

- MEGA65 Book:
  - Matrix Mode Monitor: section K-13, page 866
  - https://github.com/MEGA65/mega65-user-guide/blob/master/appendix-monitor.tex
- mega65-tools: `src/monitor/monitor.a65`