---
name: "cbmlink"
section: "1"
platform: "linux"
package: "cbmlink"
version: "0.9.6-1.1"
release: "Debian 4.0 (Etch)"
platforms: ["linux"]
url: "https://new.carta.tech/cbmlink"
---

# cbmlink(1)

Remote control and data transfers for Commodore 8-bit computers

## NAME

cbmlink - Remote control and data transfers for Commodore 8-bit computers

## SYNOPSIS

**cbmlink -c** *protocol device* \[*options*\]

## DESCRIPTION

This manual page documents briefly the **cbmlink** command.

**cbmlink** implements data communications between an 8-bit Commodore computer and another computer system.  Once a small server process has been loaded and started in the Commodore, **cbmlink** can transfer data between the system where it is run and the Commodore.  On the Commodore side, **cbmlink** can access main memory, files and entire disks.  Access to files and disks is implemented by downloading and invoking an extension program on the Commodore.

## OPTIONS

CBMLINK follows the usual Unix command line syntax, with options starting with a dash (\`**-**').

- **-b** *bank*

  Specify the memory bank for **-s** and **-l** memory transfers. The default is 1 for the Commodore B series (the 600 and 700 series), and 0 for all other Commodores.  On a Commodore 128, banks 0-3 are for MMU-based memory access, and banks 4-15 are for the PIA-based internal memory extension.  Banks 16-255 refer to the first 15,360 kilobytes of a Commodore RAM Expansion Unit.

- **-c** *protocol device*

  Specify the protocol and the interface name used for accessing the Commodore.  For a **C2N232** device connection, you may use something like **-c c2n232 /dev/ttyS0**.  For a null modem connection, also the default bit rate of 19200 can be overridden: **-c serial 38400,/dev/ttyS0**.  A PC64 cable connected to the first parallel port of a PC compatible can be accessed via **-c** **pc64 0x3bc**.

- **-d** *drive\[***,***secondary\]*

  Specify the device number for remote file and disk operations, and secondary address for remote file operations.  The default device number is 8, and the default secondary address is 0 for **-fr** and 1 for **-fw**.

- **-dc** *command*

  Execute a disk drive command and read the drive status.  Beware that the **UJ** (reset) command may lock up the communications.

- **-dd** *pattern*

  Fetch the disk directory by reading a remote file **$***pattern*.  The output is partially translated from PETSCII to ASCII.  To get the raw directory, type **-fr '$***pattern***'**.

- **-dmc,***address1***,***address2* *file.prg*

  Save the memory bytes from *address1* up to but excluding *address2* in a dual disk drive's controller address space to a program file.  Write *address1* to the first two bytes of the file.  Note that the drive may act strangely once this command has been issued.

- **-dmco,***address1***,***address2* *file.bin*

  Save the memory bytes from *address1* up to but excluding *address2* in a dual disk drive's controller address space to a binary file.  Note that the drive may act strangely once this command has been issued.

- **-dml** *file.prg*

  Load a program at its specified absolute address in the disk drive's main address space.  The first two bytes of the file indicate the 16-bit loading address (least significant byte first), and the remaining bytes contain the file data.  At most 64 kilobytes can be transferred at a time.

- **-dmlo,***address* *file.bin*

  Load a binary file (not containing a starting address) to the specified address in the disk drive's main address space.

- **-dmlr,***address* *file.prg*

  Load a program, ignoring its address bytes, to the specified address in the disk drive's main address space.

- **-dms,***address***,***address* *file.prg*

  Save the memory bytes from *address1* up to but excluding *address2* in the disk drive's main address space to a program file.  Write *address1* to the first two bytes of the file.

- **-dmso,***address***,***address* *file.bin*

  Save the memory bytes from *address1* up to but excluding *address2* in the disk drive's main address space to a binary file.

- **-dr**\[***0***\|***1***\]\[**,***interleave*\[**,***start*\[**,***end*\]\]\] ***file***

  Read a disk in unit 0 (default) or 1 to an image file.  Optionally, an interleave factor (number of sectors to skip) may be specified to improve the transfer speed.  When it differs from 0, *file* must be seekable.  The default is 10.  Also, the default start and end tracks of 1 and 1000 can be overridden.

- **-ds**

  Query the disk drive status.

- **-dw**\[***0***\|***1***\]\[**,***interleave*\[**,***start*\[**,***end*\]\]\] ***file***

  Write an image file to a disk in unit 0 (default) or 1, starting from track 1, sector 0.  If the file is shorter than the capacity of the disk, the rest of the disk will be left intact.  Optionally, an interleave factor (number of sectors to skip) may be specified to improve the transfer speed.  When it differs from 0, *file* must be seekable.  The default is 10.  Also, the default start and end tracks of 1 and 1000 can be overridden.

- **-fr** *file***...**

  Copy the specified files from the Commodore to the local file system.  As the file names are not translated between PETSCII and ASCII, it is best to use upper-case file names on the local system, which correspond to lower-case Commodore file names.

- **-fw** *file***...**

  Copy the specified files from the local file system to the Commodore.  As the file names are not translated between PETSCII and ASCII, it is best to use upper-case file names on the local system, which correspond to lower-case Commodore file names.

- **-qf** *name,id*

  Quick format a Commodore 1541 disk.

- **-qr** *file*

  Read a 1541 disk to an image file.  The interleave is adjusted dynamically.

- **-qw**\[**,***interleave*\] ***file***

  Write a seekable image file to a 1541 disk, starting from track 1, sector 0. If the file is shorter than the capacity of the disk, the rest of the disk will be left intact.  Optionally, an interleave factor (number of sectors to skip) may be specified to improve the transfer speed.

- **-l**\[**p**\] ***file.prg***

  Load a program at its specified absolute address.  The first two bytes of the file indicate the 16-bit loading address (least significant byte first), and the remaining bytes contain the file data.  At most 64 kilobytes can be transferred at a time.  The options beginning with **-lp** support the P00 file format by skipping the 26-byte file header.

- **-l**\[**p**\]**b** *file.prg*

  Load a program, relocated to the start of the BASIC text area.

- **-l**\[**p**\]**o,***address file.bin*

  Load a binary file (not containing a starting address) to the specified address.

- **-l**\[**p**\]**r,***address file.prg*

  Load a program, ignoring its address bytes, to the specified address.

- **-s,***address1***,***address2* *file.prg*

  Save the memory bytes from *address1* up to but excluding *address2* in the specified bank to a program file.  Write *address1* to the first two bytes of the file.

- **-so,***address1***,***address2* *file.bin*

  Save the memory bytes from *address1* up to but excluding *address2* in the specified bank to a binary file.

- **-r**

  Disable the remote server and perform a RUN command in order to start a BASIC program.

- **-j,***address*

  Disable the remote server and jump to the specified address in order to start a machine language program.

- **-jc,***address*

  Disable the remote server on a Commodore VIC-20 or VIC-1001, install some code at *address* and invoke an auto-start cartridge that has been loaded previously with one or more **-l** switches.

## BUGS

On the Commodore VIC-20, the keyboard is connected to the cassette write line.  When using the **C2N232** device on this computer, it is better not to not touch the keyboard during data transfers.

On the Commodore 64, the Action Replay cartridge may cause problems with some cables.

Other cables than **c2n232**, **serial**, **pc64** and **kontros** have not been tested with this release.

## AUTHOR

The **cbmlink** utility and the **C2N232** cassette drive emulator device were designed and implemented by Marko Mäkelä \<msmakela@nic.funet.fi\>.  Some of **cbmlink** is based on **prlink**, which was designed and implemented by Marko Mäkelä and Olaf Seibert.  The quick disk routines are based on the work of Daniel Kahlin and Andreas "pitch" Andersson.

## SEE ALSO

[**c2n**(1)](/c2n/1.md), [**cbmconvert**(1)](/cbmconvert/1.md).
