Skip to content

Repository files navigation

irunes

irunes is a modern C11 media player for the Macintosh II targeting System 7.1 and later. It is designed for the MC68020 with optional 68881 FPU support and is inspired by the iTunes UI paradigm adapted for classic Mac OS.

irunes running on a Macintosh II under MAME, showing the source list, track list, and now-playing bar

It ships a DAAP client that browses and streams AIFF audio from the sibling sharon-jones-and-the-daap-king Rust server over MacTCP. Open Transport support is planned (see todos.md).

Prerequisites

  • macOS or Linux
  • CMake >= 3.23
  • Ninja
  • Retro68 toolchain built and RETRO68_ROOT exported (see below)

Building Retro68

Install macOS build dependencies (this repo pins them in Brewfile):

brew bundle install

Then build the toolchain:

git clone https://github.com/autc04/Retro68
cd Retro68
git submodule update --init
mkdir ../Retro68-build && cd ../Retro68-build
../Retro68/build-toolchain.bash
export RETRO68_ROOT="$(pwd)/toolchain"

Expect 30-60 minutes. Add the export to your shell profile.

Building

Cross-build (Mac app)

cmake --preset retro68
cmake --build --preset retro68-debug

Output: build/retro68/app/irunes.APPL, irunes.bin, irunes.dsk

Host build (tests)

Runs the platform-independent core/ code on the host with the greatest test harness. No Retro68 needed.

cmake --preset host
cmake --build --preset host-debug
ctest --preset host-test

Set -DIRUNES_WERROR=ON on either preset to treat warnings as errors.

Project layout

core/               - Platform-independent logic: DAAP/DMAP client, HTTP,
                      AIFF, PCM convert, track/playlist stores, ring buffer,
                      UTF-8 <-> MacRoman, sine table, log, result, version
platform/include/   - Cross-platform facades (audio, transport)
platform/mac/       - Classic Mac OS: Toolbox, MacTCP, Sound Manager, UI
platform/host/      - Host-side stubs so core links on macOS/Linux for tests
app/                - main() entry point, Apple Event scripting, Rez resources
tests/              - Host-only unit tests (greatest framework)
third_party/        - Vendored dependencies (greatest)
cmake/              - CMake helper modules (Retro68 detection, multilib check)

Running

Using MAME (you must supply Mac II ROMs):

mame macii -flop1 build/retro68/app/irunes.dsk -rp /path/to/roms

On real hardware: copy irunes.bin via BlueSCSI or floppy (future work).

Formatting & linting

# Format all C sources in-place (requires `shopt -s globstar` in bash, or use fd)
fd -e c -e h . core platform app | xargs clang-format -i

# Lint (host preset only - cross target has no compile_commands for host tools)
clang-tidy -p build/host core/src/version.c

FPU support

Off by default. Enable with -DIRUNES_ENABLE_FPU=ON. Requires Retro68 built with hard-float multilib; check availability with:

m68k-apple-macos-gcc -print-multi-lib

If m68020/m68881 appears in the output, the multilib is present.

Resource forks

The build produces .bin (MacBinary) and .dsk (HFS floppy image) because HFS resource forks do not survive modern filesystems. The .APPL file is the raw resource fork for use inside emulators that understand it directly.

License

MIT - see LICENSE.

About

iTunes-inspired DAAP client for Classic Macintosh / System 6+

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages