[](https://crates.io/crates/ultimate64)
[](https://github.com/mlund/ultimate64/actions/workflows/rust.yml)
[](https://github.com/mlund/ultimate64/actions/workflows/rust-clippy.yml)
[](https://github.com/mlund/ultimate64/actions/workflows/release.yml)
[](https://docs.rs/ultimate64/latest/ultimate64)
# Ultimate64
Rust library and command line interface for communicating with [Ultimate-64 and Ultimate-II+](https://ultimate64.com) devices using
the [REST API](https://1541u-documentation.readthedocs.io/en/latest/api/api_calls.html).
# Installation
Either download a [pre-compiled binary](https://github.com/mlund/ultimate64/releases/latest),
or compile and install using `cargo`, provided that you have a working
[Rust](https://www.rust-lang.org/tools/install) installation:
~~~ bash
cargo install ultimate64
~~~
# Usage
~~~ bash
ultimate64 HOST COMMAND <OPTIONS>
~~~
Where `HOST` is the IP address or hostname of the Ultimate device on your local network.
Alternatively specify this in the environmental variable `ULTIMATE_HOST` as
assumed in the following examples.
## Examples
~~~ bash
ultimate64 --help # show available commands
ultimate64 run skate_or_die.prg # load and run PRG file
ultimate64 mount desert_dream.d64 --run # mount external image and run
ultimate64 sidplay yie_ar_kung_fu.sid -n 2 # play SID tune
ultimate64 modplay enigma.mod # play Amiga MOD tune
ultimate64 load sprites.dat --address 0x2000 # load data to memory
ultimate64 peek 0x1000 --dasm -n 32 # disassemble memory
ultimate64 poke 0xd020 3 # write single byte
ultimate64 poke 4096 --xor 0b0000_1100 # bitwise manipulation
ultimate64 poke 0x0400 0x20 --fill 1000 # fill memory
ultimate64 type $'print "hello"\n' # Emulate keyboard typing
ultimate64 pause # pause machine
ultimate64 reset # reset machine
~~~
Addresses can be hexadecimal (`0x1000`) or decimal (`4096`).
# Features
- [x] Compiled, small, and cross platform with no external dependencies
- [x] Can be used either as a CLI tool or as a library
- [x] Modern CLI with subcommands
- [x] First class memory safety due to Rust
- [x] Excellent error handling; error messages; and input validation
- [x] Convenient decimal, hexadecimal, and binary input
- [x] Bitwise operations for memory manipulation
- [x] Emulate keyboard typing w. unicode to PETSCII conversion
- [x] Mount and run external disk images
- [x] 6502 disassembly
- [x] Load address detection
- [x] Precompiled binaries for MacOS, Linux, and Windows
## Todo
- [ ] Disk image manipulation
- [ ] Memory bank switching for RAM access
- [ ] Ultimate configuration handling