#serial-port #disk-image #8-bit #tui #mode #matrix #mega65

bin+lib matrix65

Matrix Mode Serial Communicator for MEGA65

5 releases

0.2.0 Nov 23, 2022
0.1.3 Sep 22, 2022
0.1.2 Sep 16, 2022
0.1.1 Sep 15, 2022
0.1.0 Sep 15, 2022

#2732 in Command line utilities

MIT/Apache

64KB
1.5K SLoC

Crates.io Rust rust-clippy analyze docs.rs

Matrix Mode Serial Communicator for MEGA65

matrix65 is a CLI tool, for communicating with the MEGA65 8-bit retro computer using a serial connection. It has a mix of features from m65, mega65_ftp, and M65connect and is written entirely in Rust. Here is a short demonstration video.

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 the Rust compiler, followed by:

cargo install matrix65

There are no other dependencies on MacOS and Windows. On Linux, you may have to install libudev-dev (Ubuntu) or systemd-devel (Fedora). To access the serial port, the Linux user may need to be added to the dialout group.

Using

# 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.

  • World-class memory safety thanks to Rust
  • Cross platform serial device detection
  • Fancy CLI interface with subcommands
  • Online Filehost access with TUI (experimental)
  • Send and run PRG files
    • Go C64/C65 dependent on detected load address
    • Extract PRG from CBM disk images (.d81)
    • Regular files and URL's are allowed
  • Send sequence of key-presses
  • Reset MEGA65
  • Peek into memory; hexdump, binary file dump
  • Poke into memory; single value or from file
  • Logging with e.g. export RUST_LOG=info
  • REPL command interface (experimental)
  • Disassembly (currently only 6502 opcodes)
  • 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. Creative fun: I wanted to learn more about Rust and the MEGA65 hardware
  2. A Text User Interface (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
    • has Cargo which makes dependency handling easy-peasy
  4. In my opinion, higher level language features in Rust are superior to raw C for tasks like HTTP requests, JSON parsing, and TUI handling (No offence meant, MEGA65 Team🖖).

Resources

Dependencies

~16–32MB
~541K SLoC