Skip to content

Repository files navigation

CPPIP / NPPIP / FPPIP / ZPPIP - CP/M File Copy Utility

Latest release: v1.20 - see CHANGELOG.md for what changed, or the Releases page for downloads and full release notes.

Also available: ZPPIP, the ZX Spectrum Next CP/M 3 edition - built from the same source tree and included in the same release as the other three. It stays a separate binary because the Next's own storage support cannot fit in the same TPA image alongside IA:/SD: support.

A C reimplementation of PPIP v1.8 (D. Jewett III, 1985-1988), a classic CP/M file copy utility. Built with z88dk targeting CP/M 2.2. Adds direct access to the NABU RetroNET Internet Adapter file store (IA:), the FreHD Hard Disk emulator (SD:), and the ZX Spectrum Next's own storage (NX:).


Why This Project Exists

CPPIP started as C programming practice for me, specifically as an exercise in porting a favourite utility from my own CP/M days, PPIP, into something I could then keep adapting. PPIP was also close to command-format compatible with CP/M's own PIP utility, which made it an easy drop-in replacement in SUBMIT files and anywhere else PIP was already expected.

Accessing the modern additions available to these old machines, like the FreHD hard disk emulator and the NABU's Internet Adapter, was never simple from the CP/M command line. Turning CPPIP into a way to reach both of those file stores directly, with proper CRC verification and far more wildcard support than most existing CP/M tools offer, gave the port a reason to exist beyond the exercise itself.

The project has since grown past the original C port: LPPIP is a native Z80 assembly fork for TRS-80 LS-DOS/TRS-DOS, and ZPPIP brings the same file-copy command line to the ZX Spectrum Next's built-in CP/M 3 with its own NX: extension - a machine I'll be getting my hands on soon.


Four binaries are produced from the same source tree in one build:

Binary Description
CPPIP.COM Standard build. IA: available via /N or on CloudCP/M. SD: compiled in (requires FreHD hardware).
NPPIP.COM NABU edition. IA: always active. No SD: code.
FPPIP.COM FreHD edition. SD: always active. No IA: code.
ZPPIP.COM ZX Spectrum Next edition. NX: always active. No IA:/SD: code (see above).

The original Z80 assembly source (all nine modules) is preserved in the PPIP Master/ folder.


What it does

CPPIP copies files on CP/M systems - between drives, between user areas, or any combination. It handles wildcards, CRC verification, move operations, and read-only file protection. The IA: prefix adds direct access to the RetroNET Internet Adapter file store on NABU systems. The SD: prefix adds direct access to files on an SD card via a FreHD hard disk emulator on TRS-80 and compatible systems. The NX: prefix (ZPPIP only) adds direct access to the ZX Spectrum Next's own storage.

Tested on: NABU CloudCP/M, RomWBW CP/M 2.2, TRS-80 Model 4P with Montezuma Micro CP/M 2.2, Kaypro CP/M 2.2, ZX Spectrum Next's built-in CP/M 3 (under MAME).


Documentation

File Contents
manual/manual.txt Full user manual - all commands, options, and examples.
manual/manual.md Same manual in Markdown
manual/ia-guide.txt IA: RetroNET Internet Adapter path reference and troubleshooting
manual/ia-guide.md Same guide in Markdown
manual/frehd-guide.txt FreHD SD: path reference, setup, and troubleshooting
manual/frehd-guide.md Same guide in Markdown
manual/nx-guide.txt ZPPIP NX: path reference and troubleshooting (ZX Spectrum Next)
manual/nx-guide.md Same guide in Markdown
CHANGELOG.md Full version history
GLOSSARY.md Function reference for the source code - every function, its file, prototype, and what it does

Usage

CPPIP [DU:]source[.ext] [[DU:]dest[.ext]] [/options]

or CP/M style (auto-detected when = is present):

CPPIP [[DU:]dest[.ext]=][DU:]source[.ext] [/options]

(Replace CPPIP with NPPIP, FPPIP, or ZPPIP as appropriate.)

DU: prefix - drive letter A-P, user area 0-31. Examples: B3:FILE.TXT, A0:*.COM, B:, 15:

IA: prefix (NABU only) - RetroNET Internet Adapter file store. See manual/ia-guide.md for the full path reference.

SD: prefix (FreHD only) - SD card via the FreHD emulator. See manual/frehd-guide.md for setup and usage.

NX: prefix (ZPPIP only) - ZX Spectrum Next's own storage. See manual/nx-guide.md for the full path reference.

CON: as source - type text directly to a file from the console. Ctrl-Z ends input.

Options

All options default to OFF:

Switch Description
/V CRC-16 verify after copy - re-reads destination and compares
/C Print CRC value after each verified copy (requires /V)
/E Overwrite existing read/write destination without asking
/W Overwrite any destination including read-only without asking
/M Move: copy then delete source (automatically enables /V)
/N Enable IA: on non-CloudCP/M NABU systems (CPPIP only)
/H Show help

Building

Requires z88dk.

build.bat

Produces CPPIP.COM, NPPIP.COM, FPPIP.COM, and ZPPIP.COM in one pass.

build.bat debug

Debug build of CPPIP.COM.


Development Phases

Phase Description Status
1 Core single-file copy - BDOS I/O, DU: prefix, FCB building Complete
2 Wildcard expansion - *.COM, ? matching, duplicate detection Complete
3 Options - CRC verify /V, report /C, move /M, overwrite /E /W Complete
4 Console copy mode - CON: as source, mini line editor Complete
5 NABU IA extension - IA: prefix, subdirectory support, wildcard on IA side Complete
6 Dual binary - CPPIP.COM / NPPIP.COM, TPA memory optimisation Complete
7 FreHD SD extension - SD: prefix, FPPIP.COM, hardware testing Complete
8 LPPIP project - native LS-DOS 6 (Z80 assembly) port for TRS-80 Model I/III/4 Beta test
9 ZPPIP project - ZX Spectrum Next CP/M 3 port, NX: extension Complete
10 Combined source tree - ZPPIP merged into the shared C codebase, one build.bat produces all four binaries, Next hardware detection Complete

Background

PPIP was originally written in Z80 assembly by D. Jewett III between 1985 and 1988. It was a staple utility on CP/M systems of the era, offering cross-drive and cross-user-area file operations that CP/M's own PIP utility handled less conveniently.

This C reimplementation preserves the original functionality and adds the NABU-specific IA: extension for the NABU Personal Computer running with a RetroNET Internet Adapter, the SD: extension for TRS-80 systems equipped with a FreHD hard disk emulator, and the NX: extension for the ZX Spectrum Next's own storage.


Related

LPPIP - native LS-DOS 6 (Z80 assembly) port for TRS-80 Model I/III/4, with the same FreHD SD: card support.

My TRS-80 FreHD Update Story - background on the FreHD project that CPPIP's SD: extension talks to.


License

Original assembly source (c) D. Jewett III, 1985-1988. C reimplementation (c) Intangybles 2026.

About

Recreation / Port of classic CP/M PPIP to "C" for use with the NABU, RetroNET & FreHD (CP/M)

Topics

Resources

Stars

6 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages