Skip to content

Iomega Ditto 2GB returns 0x78 response instead of expected 0x40/0xc0 #2

@vm-wylbur

Description

@vm-wylbur

Hardware

Drive:

  • Model: Iomega Ditto 2GP-PPT IO2000-PX
  • Serial: U707161UEG
  • No visible "Series" markings on label
  • No DIP switches or jumpers visible

System:

  • Dell OptiPlex GX620
  • Motherboard-integrated parallel port (not PCI card)
  • Parallel port: 0x378, IRQ 7
  • Debian GNU/Linux, kernel 6.12.43+deb13-amd64

Cable:

  • 3-foot DB25 male-to-female
  • Bidirectional parallel cable

ftape Version:

commit 4caf99a (HEAD -> master, origin/master, origin/HEAD)
Author: dbrant
Date:   [latest]
    Add note about isapnp.

Issue Description

The Iomega Ditto 2GB (IO2000-PX) consistently returns 0x78 during protocol detection instead of the expected 0x40 (SPP mode) or 0xc0 (EPP mode). This causes ftape's bpck-fdc driver to fail initialization with "unsupported protocol" error.

Response Code Analysis

The 0x78 value corresponds to:

PARPORT_STATUS_ACK (0x40)
| PARPORT_STATUS_PAPEROUT (0x20)
| PARPORT_STATUS_SELECT (0x10)
| PARPORT_STATUS_ERROR (0x08)
= 0x78

This differs from the two currently recognized responses:

  • 0x40 - Standard Backpack SPP mode
  • 0xc0 - Backpack EPP mode (0x40 | PARPORT_STATUS_BUSY)

Attempted Configurations

All attempts resulted in the same 0x78 response:

  1. bpck-fdc driver with default settings
  2. bpck-fdc with SPP mode: parport_proto=0
  3. bpck-fdc with EPP mode: parport_proto=2
  4. bpck-fdc with explicit parport: ft_fdc_parport=0
  5. bpck-fdc with rate limiting: ft_fdc_rate_limit=2000
  6. trakker-fdc driver (alternative protocol)

All configurations consistently returned 0x78 during protocol query phase.

Code Modifications

Modified /ftape/lowlevel/bpck-fdc.c to accept 0x78 as a valid response:

In bpck_fdc_query_proto():

// Original code only accepted 0x40 or 0xc0
// Added 0x78 as valid response:

if (response == 0x40 || response == 0xc0 || response == 0x78) {
    // proceed with protocol detection
}

In bpck_fdc_connect():

// Similar modification to accept 0x78 during connect phase

if (response == 0x40 || response == 0xc0 || response == 0x78) {
    // proceed with connection
}

Current Status: Partial Success

After applying the above modifications:

✅ What Now Works:

  • Initial protocol detection succeeds
  • Drive responds consistently with 0x78
  • Connect phase completes: Connect response: 0x78
  • Protocol switching (bpck_fdc_switch_proto) completes

❌ What Still Fails:

  • Second parport probe after protocol negotiation fails
  • Error: can't find parport interface for ftape id 0
  • ft_parport_probe(fdc, &bpck->parinfo) returns -6 (ENXIO)
  • Device remains inaccessible: /dev/nqft0 returns "No such device or address"

Debug Output

Parport Configuration:

root@recovery-station:~/ftape# dmesg | grep -i parport
[ 6325.973380] [107] fdc-parport.h (ft_parport_probe) - can't find parport interface for ftape id 0
[ 6325.973426] [112] bpck-fdc.c (bpck_fdc_detect) - ft_parport_probe(fdc, &bpck->parinfo) failed: -6

root@recovery-station:~/ftape# cat /proc/ioports | grep parport
  0378-037a : parport0
  037b-037f : parport0

root@recovery-station:~/ftape# cat /proc/interrupts | grep parport
  7:          0          0   IO-APIC   7-edge      parport0

root@recovery-station:~/ftape# lsmod | grep parport
ftape_parport          12288  0
parport_pc             40960  0
parport                81920  3 parport_pc,ppdev,ftape_bpck

Detailed Trace (with ft_tracing=0xffff):

The trace shows repeated 0x77 responses during initial communication, then successful 0x78 connect:

[ 6325.960304] 0x77
[ 6325.960366] 0x77
[ 6325.960424] 0x77
[... many 0x77 responses ...]
[ 6325.972145] [075] -bpck-fdc.c (bpck_fdc_test_protocol)
[ 6325.972294] [076] +bpck-fdc.c (bpck_fdc_connect)
[ 6325.972442] [077]  bpck-fdc.c (bpck_fdc_connect) - Connect response: 0x78
[ 6325.972478] [078] -bpck-fdc.c (bpck_fdc_connect)

Protocol switching completes successfully through multiple register operations:

[ 6325.972487] [079] +bpck-fdc.c (bpck_fdc_select_reg)
[ 6325.972529] [080] -bpck-fdc.c (bpck_fdc_select_reg)
[ 6325.972536] [081] +bpck-fdc.c (bpck_fdc_write_reg_value)
[... successful register operations ...]
[ 6325.973223] [103] -bpck-fdc.c (bpck_fdc_switch_proto)
[ 6325.973229] [104] +bpck-fdc.c (bpck_fdc_release)
[ 6325.973240] [105] -bpck-fdc.c (bpck_fdc_release)

But then fails at second parport probe:

[ 6325.973246] [106] -bpck-fdc.c (bpck_fdc_probe)
[ 6325.973380] [107] fdc-parport.h (ft_parport_probe) - can't find parport interface for ftape id 0
[ 6325.973418] [111] bpck-fdc.c (bpck_fdc_detect) - can't find bpck interface for ftape id 0
[ 6325.973426] [112] bpck-fdc.c (bpck_fdc_detect) - ft_parport_probe(fdc, &bpck->parinfo) failed: -6
[ 6325.973440] [114] fdc-io.c (fdc_search_driver) - No tape drive found for "bpck-fdc" driver

Observations

  1. Consistent 0x78 response indicates the drive is powered, responding, and communicating on the parallel port
  2. Different response codes at different stages: Drive returns 0x77 during initial polling, then 0x78 at connect
  3. Protocol negotiation succeeds with our modifications
  4. Secondary parport probe fails after successful protocol switching, suggesting:
    • Parport state management issue
    • Problem with parport reclaim after release
    • Potential issue with "ftape id 0" indexing

Additional Information

Drive Behavior:

  • LEDs power on normally
  • No tape currently inserted (unable to control drive yet)
  • No mechanical sounds during initialization attempts
  • Drive has not been tested under Windows

Notes:

  • IO2000-PX was standard model for Ditto 2GB parallel port drives
  • Sony sold identical hardware as "StorStation 2GB" with same model number
  • This was a joint Iomega/Sony development

The drive's consistent 0x78 response suggests this is a legitimate protocol variant that could be supported with additional modifications beyond accepting the 0x78 handshake code.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions