#rest

bin+lib ultimate64

Rust library and command line interface for interfacing with Ultimate-64 and Ultimate-II+ devices using the REST API

4 releases (breaking)

0.4.0 Jan 19, 2024
0.3.0 Jan 18, 2024
0.2.0 Jan 16, 2024
0.1.0 Jan 15, 2024

#1570 in Command line utilities

MIT/Apache

27KB
491 lines

Crates.io Rust rust-clippy analyze .github/workflows/release.yml docs.rs

Ultimate64

Rust library and command line interface for communicating with Ultimate-64 and Ultimate-II+ devices using the REST API.

Installation

Either download a pre-compiled binary, or compile and install using cargo, provided that you have a working Rust installation:

cargo install ultimate64

Usage

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

ultimate64 --help                            # show available commands
ultimate64 pause                             # pause machine
ultimate64 run skate_or_die.prg              # load and run PRG file
ultimate64 load sprites.dat --address 0x2000 # load data to memory
ultimate65 peek 0x1000 --dasm -n 32          # disassemble memory
ultimate65 poke 0xd020 3                     # write single byte
ultimate65 poke 4096 --xor 0b0000_1100       # bitwise manipulation
ultimate65 poke 0x0400 0x20 --fill 1000      # fill memory
ultimate64 sidplay yie_ar_kung_fu.sid -n 2   # play SID tune
ultimate64 modplay enigma.mod                # play Amiga MOD tune

Addresses can be hexadecimal (0x1000) or decimal (4096).

Features

  • Compiled, small, and cross platform with no external dependencies
  • Can be used either as a CLI tool or as a library
  • Modern CLI with subcommands
  • First class memory safety due to Rust
  • Excellent error handling; error messages; and input validation
  • Convenient decimal, hexadecimal, and binary input
  • Bitwise operations for memory manipulation
  • 6502 disassembly
  • Load address detection
  • Precompiled binaries for MacOS, Linux, and Windows

Todo

  • Disk image and file manipulation
  • Memory bank switching for RAM access
  • Ultimate configuration handling

Dependencies

~7–20MB
~305K SLoC