unfortunately format fails with the same error. i'll try tearing the
thing open later and see if i can find anything obviously wrong with it.

here's what i got:

% VERBOSE=9 ./pdd.sh format
get_tpdd_port()
Using port "/dev/ttyUSB0"
open_com()
set_stty()
speed 19200 baud; rows 0; columns 0; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>;
eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S;
susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V; discard = ^O; min = 1;
time = 1;
-parenb -parodd -cmspar cs8 hupcl -cstopb cread clocal crtscts
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr -icrnl
-ixon -ixoff -iuclc -ixany -imaxbel -iutf8
-opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0
vt0 ff0
-isig -icanon iexten -echo echoe echok -echonl -noflsh -xcase -tostop
-echoprt echoctl echoke -flusho -extproc
do_cmd(format)
_init()
fonzie_smack()
tpdd_drain()
tpdd_check()
tpdd_write(4D 31 0D)
tpdd_drain()
tpdd_check()
pdd2_unk23()
ocmd_send_req(23)
calc_cksum(23 00):DC
ocmd_send_req: fmt="23" len="00" dat="" chk="DC"
tpdd_write(5A 5A 23 00 DC)
ocmd_read_ret(100)
ocmd_read_ret: reading 2 bytes (fmt & len)
tpdd_read(2 100)
tpdd_wait(100)
tpdd_check()
tpdd_check()
Detected TPDD1
ocmd_format()
Formatting Disk, TPDD1 filesystem
: Are you sure? (y/N) y
ocmd_send_req(06)
calc_cksum(06 00):F9
ocmd_send_req: fmt="06" len="00" dat="" chk="F9"
tpdd_write(5A 5A 06 00 F9)
ocmd_read_ret(105000 2)
ocmd_read_ret: reading 2 bytes (fmt & len)
tpdd_read(2 105000 2)
tpdd_wait(105000 2)
tpdd_check()
tpdd_check()
tpdd_check()
tpdd_check()
tpdd_check()
tpdd_check()
tpdd_check()
tpdd_check()
tpdd_check()
tpdd_check()
tpdd_check()
tpdd_check()
tpdd_check()
tpdd_check()
tpdd_check()
tpdd_check()
tpdd_check()
tpdd_check()
tpdd_check()
tpdd_check()
tpdd_check()
tpdd_check()
tpdd_check()
tpdd_check()
tpdd_check()
tpdd_check()

tpdd_wait: 105000 2:2500
tpdd_read: l=2 12 01
ocmd_read_ret: reading 2 bytes (data & checksum)
tpdd_read(2)
tpdd_wait()
tpdd_check()
tpdd_wait: :0
tpdd_read: l=2 80 6C
ocmd_read_ret: fmt=12 len=01 dat=(80) chk=6C
verify_checksum(12 01 80 6C)
calc_cksum(12 01 80):6C
verify_checksum: given:6C calc:6C
ocmd_check_err()
ocmd_check_err: ret_fmt=12 ret_len=01 ret_dat=(80) read_err="0"
ocmd_check_err: 80:Hardware Fault 0

format: Hardware Fault 0

On Wed, Dec 13, 2023 at 04:23:11PM -0500, Brian K. White wrote:
> Communication all looks good actually. Cabling and serial port are solid.
> The problem is only when it issues the initial dirent() as part of the
> directory listing process, and gets a hardware fault error code from the
> drive.
> 
> The drive firmware tried to run the disk and read the media, and failed, and
> said so.
> 
> It may possibly just be that the disk is not formatted. The disk needs to be
> formatted by the drive, it can not use the normal PC formatting the disk
> already has.
> 
> So verify:
> * The drive has a good belt.
> * The disk is DD not HD, aka 720K not 1.4M, aka has only one hole in one
> corner.
> * The write-protect door in that one hole is closed (open=write-protect).
> * The disk contains no data you care about.
> 
> Then in pdd.sh issue the "format" command.
> Wait approximately one solar flare cycle.
> 
> Ok 100 seconds but feels like 11 years because there is no data on the wire
> all during that time and no way to monitor progress. Even in verbose mode
> the percent-done animation is just counting down the expected time which is
> known. And you can't do any better. You can not send any data to the drive
> during this time or it will just crash it. The client must just sit and wait
> for data from the drive, or abort if no data comes after some max possible
> time.
> 
> Maybe your drive has the same problem my Purple Computing drive has.
> Everything works except actually accessing the media.
> So like, something wrong with the drive head or it's signal amplifier maybe?
> I have not figured out what's actually wrong with mine yet. That level of
> problem may be just a bit beyond me, figuring out how the head read circuit
> actaully works and where to probe with a scope and what to expect there etc.
> Though, I have a scope and haven't actually tried yet so who knows.
> 
> -- 
> bkw
> 
> 
> On 12/13/23 15:22, runrin wrote:
> > OK! I think there might be a problem with my PC cable.
> > 
> > With a standard 25 pin to 9 pin adapter and a gender changer on my M100
> > cable, I'm getting some output, but there may be some other issues with
> > the drive or cable.
> > 
> > I will paste my results below.
> > 
> > --------------------------------------------------------------------------------
> > `ready' without a disk:
> > --------------------------------------------------------------------------------
> > 
> > % VERBOSE=9 ./pdd.sh ready
> > get_tpdd_port()
> > Using port "/dev/ttyUSB0"
> > open_com()
> > set_stty()
> > speed 19200 baud; rows 0; columns 0; line = 0;
> > intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>;
> > eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S;
> > susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V; discard = ^O; min = 1;
> > time = 1;
> > -parenb -parodd -cmspar cs8 hupcl -cstopb cread clocal crtscts
> > -ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr -icrnl
> > -ixon -ixoff -iuclc -ixany -imaxbel -iutf8
> > -opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0
> > vt0 ff0
> > -isig -icanon iexten -echo echoe echok -echonl -noflsh -xcase -tostop
> > -echoprt echoctl echoke -flusho -extproc
> > do_cmd(ready)
> > _init()
> > fonzie_smack()
> > tpdd_drain()
> > tpdd_check()
> > tpdd_write(4D 31 0D)
> > tpdd_drain()
> > tpdd_check()
> > pdd2_unk23()
> > ocmd_send_req(23)
> > calc_cksum(23 00):DC
> > ocmd_send_req: fmt="23" len="00" dat="" chk="DC"
> > tpdd_write(5A 5A 23 00 DC)
> > ocmd_read_ret(100)
> > ocmd_read_ret: reading 2 bytes (fmt & len)
> > tpdd_read(2 100)
> > tpdd_wait(100)
> > tpdd_check()
> > tpdd_check()
> > Detected TPDD1
> > ocmd_ready()
> > ocmd_send_req(07)
> > calc_cksum(07 00):F8
> > ocmd_send_req: fmt="07" len="00" dat="" chk="F8"
> > tpdd_write(5A 5A 07 00 F8)
> > ocmd_read_ret()
> > ocmd_read_ret: reading 2 bytes (fmt & len)
> > tpdd_read(2)
> > tpdd_wait()
> > tpdd_check()
> > tpdd_wait: :0
> > tpdd_read: l=2 12 01
> > ocmd_read_ret: reading 2 bytes (data & checksum)
> > tpdd_read(2)
> > tpdd_wait()
> > tpdd_check()
> > tpdd_wait: :0
> > tpdd_read: l=2 71 7B
> > ocmd_read_ret: fmt=12 len=01 dat=(71) chk=7B
> > verify_checksum(12 01 71 7B)
> > calc_cksum(12 01 71):7B
> > verify_checksum: given:7B calc:7B
> > ocmd_check_err()
> > ocmd_check_err: ret_fmt=12 ret_len=01 ret_dat=(71) read_err="0"
> > ocmd_check_err: 71:Disk Not Inserted or Disk Change Error
> > Not Ready
> > 
> > ready: Disk Not Inserted or Disk Change Error
> > 
> > --------------------------------------------------------------------------------
> > ready with a disk in:
> > --------------------------------------------------------------------------------
> > 
> > % VERBOSE=9 ./pdd.sh ready
> > get_tpdd_port()
> > Using port "/dev/ttyUSB0"
> > open_com()
> > set_stty()
> > speed 19200 baud; rows 0; columns 0; line = 0;
> > intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>;
> > eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S;
> > susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V; discard = ^O; min = 1;
> > time = 1;
> > -parenb -parodd -cmspar cs8 hupcl -cstopb cread clocal crtscts
> > -ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr -icrnl
> > -ixon -ixoff -iuclc -ixany -imaxbel -iutf8
> > -opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0
> > vt0 ff0
> > -isig -icanon iexten -echo echoe echok -echonl -noflsh -xcase -tostop
> > -echoprt echoctl echoke -flusho -extproc
> > do_cmd(ready)
> > _init()
> > fonzie_smack()
> > tpdd_drain()
> > tpdd_check()
> > tpdd_write(4D 31 0D)
> > tpdd_drain()
> > tpdd_check()
> > pdd2_unk23()
> > ocmd_send_req(23)
> > calc_cksum(23 00):DC
> > ocmd_send_req: fmt="23" len="00" dat="" chk="DC"
> > tpdd_write(5A 5A 23 00 DC)
> > ocmd_read_ret(100)
> > ocmd_read_ret: reading 2 bytes (fmt & len)
> > tpdd_read(2 100)
> > tpdd_wait(100)
> > tpdd_check()
> > tpdd_check()
> > Detected TPDD1
> > ocmd_ready()
> > ocmd_send_req(07)
> > calc_cksum(07 00):F8
> > ocmd_send_req: fmt="07" len="00" dat="" chk="F8"
> > tpdd_write(5A 5A 07 00 F8)
> > ocmd_read_ret()
> > ocmd_read_ret: reading 2 bytes (fmt & len)
> > tpdd_read(2)
> > tpdd_wait()
> > tpdd_check()
> > tpdd_wait: :0
> > tpdd_read: l=2 12 01
> > ocmd_read_ret: reading 2 bytes (data & checksum)
> > tpdd_read(2)
> > tpdd_wait()
> > tpdd_check()
> > tpdd_wait: :0
> > tpdd_read: l=2 00 EC
> > ocmd_read_ret: fmt=12 len=01 dat=(00) chk=EC
> > verify_checksum(12 01 00 EC)
> > calc_cksum(12 01 00):EC
> > verify_checksum: given:EC calc:EC
> > ocmd_check_err()
> > ocmd_check_err: ret_fmt=12 ret_len=01 ret_dat=(00) read_err="0"
> > ocmd_check_err: 00:OK
> > Ready
> > 
> > --------------------------------------------------------------------------------
> > `ls' without a disk:
> > --------------------------------------------------------------------------------
> > 
> > VERBOSE=9 ./pdd.sh ls
> > get_tpdd_port()
> > Using port "/dev/ttyUSB0"
> > open_com()
> > set_stty()
> > speed 19200 baud; rows 0; columns 0; line = 0;
> > intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>;
> > eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S;
> > susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V; discard = ^O; min = 1;
> > time = 1;
> > -parenb -parodd -cmspar cs8 hupcl -cstopb cread clocal crtscts
> > -ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr -icrnl
> > -ixon -ixoff -iuclc -ixany -imaxbel -iutf8
> > -opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0
> > vt0 ff0
> > -isig -icanon iexten -echo echoe echok -echonl -noflsh -xcase -tostop
> > -echoprt echoctl echoke -flusho -extproc
> > do_cmd(ls)
> > _init()
> > fonzie_smack()
> > tpdd_drain()
> > tpdd_check()
> > tpdd_write(4D 31 0D)
> > tpdd_drain()
> > tpdd_check()
> > pdd2_unk23()
> > ocmd_send_req(23)
> > calc_cksum(23 00):DC
> > ocmd_send_req: fmt="23" len="00" dat="" chk="DC"
> > tpdd_write(5A 5A 23 00 DC)
> > ocmd_read_ret(100)
> > ocmd_read_ret: reading 2 bytes (fmt & len)
> > tpdd_read(2 100)
> > tpdd_wait(100)
> > tpdd_check()
> > tpdd_check()
> > Detected TPDD1
> > lcmd_ls()
> > --------  Directory Listing  --------
> > ocmd_dirent(  1)
> > ocmd_dirent: req: filename="" attr=0x00 action=1
> > ocmd_send_req(00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> > 00 00 00 00 00 00 00 01)
> > calc_cksum(00 1A 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> > 00 00 00 00 00 00 00 01):E4
> > ocmd_send_req: fmt="00" len="1A" dat="00 00 00 00 00 00 00 00 00 00 00
> > 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01" chk="E4"
> > tpdd_write(5A 5A 00 1A 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> > 00 00 00 00 00 00 00 00 00 01 E4)
> > ocmd_read_ret(10000)
> > ocmd_read_ret: reading 2 bytes (fmt & len)
> > tpdd_read(2 10000)
> > tpdd_wait(10000)
> > tpdd_check()
> > tpdd_check()
> > tpdd_wait: 10000:100
> > tpdd_read: l=2 12 01
> > ocmd_read_ret: reading 2 bytes (data & checksum)
> > tpdd_read(2)
> > tpdd_wait()
> > tpdd_check()
> > tpdd_wait: :0
> > tpdd_read: l=2 71 7B
> > ocmd_read_ret: fmt=12 len=01 dat=(71) chk=7B
> > verify_checksum(12 01 71 7B)
> > calc_cksum(12 01 71):7B
> > verify_checksum: given:7B calc:7B
> > ocmd_check_err()
> > ocmd_check_err: ret_fmt=12 ret_len=01 ret_dat=(71) read_err="0"
> > ocmd_check_err: 71:Disk Not Inserted or Disk Change Error
> > -------------------------------------
> > 
> > ls: Disk Not Inserted or Disk Change Error
> > 
> > --------------------------------------------------------------------------------
> > `ls' with a disk:
> > --------------------------------------------------------------------------------
> > 
> > % VERBOSE=9 ./pdd.sh ls
> > get_tpdd_port()
> > Using port "/dev/ttyUSB0"
> > open_com()
> > set_stty()
> > speed 19200 baud; rows 0; columns 0; line = 0;
> > intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>;
> > eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S;
> > susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V; discard = ^O; min = 1;
> > time = 1;
> > -parenb -parodd -cmspar cs8 hupcl -cstopb cread clocal crtscts
> > -ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr -icrnl
> > -ixon -ixoff -iuclc -ixany -imaxbel -iutf8
> > -opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0
> > vt0 ff0
> > -isig -icanon iexten -echo echoe echok -echonl -noflsh -xcase -tostop
> > -echoprt echoctl echoke -flusho -extproc
> > do_cmd(ls)
> > _init()
> > fonzie_smack()
> > tpdd_drain()
> > tpdd_check()
> > tpdd_write(4D 31 0D)
> > tpdd_drain()
> > tpdd_check()
> > pdd2_unk23()
> > ocmd_send_req(23)
> > calc_cksum(23 00):DC
> > ocmd_send_req: fmt="23" len="00" dat="" chk="DC"
> > tpdd_write(5A 5A 23 00 DC)
> > ocmd_read_ret(100)
> > ocmd_read_ret: reading 2 bytes (fmt & len)
> > tpdd_read(2 100)
> > tpdd_wait(100)
> > tpdd_check()
> > tpdd_check()
> > Detected TPDD1
> > lcmd_ls()
> > --------  Directory Listing  --------
> > ocmd_dirent(  1)
> > ocmd_dirent: req: filename="" attr=0x00 action=1
> > ocmd_send_req(00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> > 00 00 00 00 00 00 00 01)
> > calc_cksum(00 1A 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> > 00 00 00 00 00 00 00 01):E4
> > ocmd_send_req: fmt="00" len="1A" dat="00 00 00 00 00 00 00 00 00 00 00
> > 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01" chk="E4"
> > tpdd_write(5A 5A 00 1A 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> > 00 00 00 00 00 00 00 00 00 01 E4)
> > ocmd_read_ret(10000)
> > ocmd_read_ret: reading 2 bytes (fmt & len)
> > tpdd_read(2 10000)
> > tpdd_wait(10000)
> > tpdd_check()
> > tpdd_check()
> > tpdd_check()
> > tpdd_check()
> > tpdd_check()
> > tpdd_check()
> > tpdd_check()
> > tpdd_check()
> > tpdd_check()
> > tpdd_check()
> > tpdd_check()
> > tpdd_check()
> > tpdd_check()
> > tpdd_check()
> > tpdd_check()
> > tpdd_check()
> > tpdd_check()
> > tpdd_check()
> > tpdd_check()
> > tpdd_check()
> > tpdd_check()
> > tpdd_check()
> > tpdd_check()
> > tpdd_check()
> > tpdd_wait: 10000:2300
> > tpdd_read: l=2 12 01
> > ocmd_read_ret: reading 2 bytes (data & checksum)
> > tpdd_read(2)
> > tpdd_wait()
> > tpdd_check()
> > tpdd_wait: :0
> > tpdd_read: l=2 80 6C
> > ocmd_read_ret: fmt=12 len=01 dat=(80) chk=6C
> > verify_checksum(12 01 80 6C)
> > calc_cksum(12 01 80):6C
> > verify_checksum: given:6C calc:6C
> > ocmd_check_err()
> > ocmd_check_err: ret_fmt=12 ret_len=01 ret_dat=(80) read_err="0"
> > ocmd_check_err: 80:Hardware Fault 0
> > -------------------------------------
> > 
> > ls: Hardware Fault 0
> > 
> > On Wed, Dec 13, 2023 at 02:54:59PM -0500, Brian K. White wrote:
> > > I should write up some steps to verify things, both for the cable and for
> > > pdd.sh. It's one thing to say "do this to make this" but then when it
> > > doesn't work, then what? Is something broken or did you get a step wrong 
> > > or
> > > are the directions wrong?
> > > 
> > > One thing is with the solder blob in place, you should tell pdd.sh to run 
> > > at
> > > 9600, which is not the default. ```$ BAUD=9600 pdd```
> > > or issue "baud 9600" command after starting pdd. Since it's not the 
> > > default,
> > > if you hadn't used the baud command or variable then it wouldn't have 
> > > worked
> > > before you removed the solder blob.
> > > 
> > > With all jumpers open, the drive is at 19200 and the default in pdd.sh is
> > > 19200 so you're good to go now.
> > > 
> > > I have a FB100 with the blob still in place. So I can at least confirm 
> > > that
> > > with a good cable and drive and usb serial adapter, no disk inserted, door
> > > opened or closed, "ready" and "ls" do work and the access light only 
> > > blinks
> > > for a split second and the motor never starts at all.
> > > 
> > > Getting no reaction at all sounds like no communication. I have a Purple
> > > Computing drive that doesn't work, and just looks dead in a normal tpdd
> > > client, but with pdd.sh I can tell that the controller is up and running
> > > fine, accepting commands and returning results and communicating just 
> > > fine,
> > > and even reading the door-open, disk-inserted, & write-protect sensors,
> > > merely it can't actually read or write media. On that drive, "ready" and
> > > "ls" still work, at least in so far as they accept the command and return 
> > > a
> > > result, all sensibly. The "ls" just says there was a disk error, but the
> > > point is the drive responds and SAYS disk error, because communication is
> > > working.
> > > 
> > > You could try the verbose setting to see if you can tell if the drive is
> > > responding at all, not at all, or with unexpected data that pdd.sh doesn't
> > > understand.
> > > 
> > > Here is a capture of a short verbose session with a working FB100 with the
> > > door open and no disk inserted. You will omit the BAUD=9600. I wanted to 
> > > do
> > > this on an actual FB100 just to be sure we're both testing the same 
> > > things,
> > > and mine still has the solder blob.
> > > 
> > > What we're looking for is, did the stty command at the beginning seem to
> > > work? Some other problem like a permissions problem with my gimmicky 
> > > sleep()
> > > function that uses a trick with a fifo file to get a sleep function 
> > > without
> > > having to execute the external /bin/sleep? Did the drive ever return even 
> > > a
> > > single byte of anything? The verbosity shows every byte of traffic in 
> > > either
> > > direction, so, even if the data is unrecognized and not handled, you can
> > > still see that there was data, or not.
> > > 
> > > bkw@fw:~$
> > > bkw@fw:~$ BAUD=9600 VERBOSE=9 pdd ready
> > > get_tpdd_port()
> > > Using port "/dev/ttyUSB0"
> > > open_com()
> > > set_stty()
> > > speed 9600 baud; rows 0; columns 0; line = 0;
> > > intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>;
> > > eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt =
> > > ^R;
> > > werase = ^W; lnext = ^V; discard = ^O; min = 1; time = 1;
> > > -parenb -parodd -cmspar cs8 hupcl -cstopb cread clocal crtscts
> > > -ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr -icrnl -ixon
> > > -ixoff
> > > -iuclc -ixany -imaxbel -iutf8
> > > -opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 
> > > vt0
> > > ff0
> > > -isig -icanon -iexten -echo echoe echok -echonl -noflsh -xcase -tostop
> > > -echoprt
> > > echoctl echoke -flusho -extproc
> > > do_cmd(ready)
> > > _init()
> > > fonzie_smack()
> > > tpdd_drain()
> > > tpdd_check()
> > > tpdd_write(4D 31 0D)
> > > tpdd_drain()
> > > tpdd_check()
> > > pdd2_unk23()
> > > ocmd_send_req(23)
> > > calc_cksum(23 00):DC
> > > ocmd_send_req: fmt="23" len="00" dat="" chk="DC"
> > > tpdd_write(5A 5A 23 00 DC)
> > > ocmd_read_ret(100)
> > > ocmd_read_ret: reading 2 bytes (fmt & len)
> > > tpdd_read(2 100)
> > > tpdd_wait(100)
> > > tpdd_check()
> > > tpdd_check()
> > > Detected TPDD1
> > > ocmd_ready()
> > > ocmd_send_req(07)
> > > calc_cksum(07 00):F8
> > > ocmd_send_req: fmt="07" len="00" dat="" chk="F8"
> > > tpdd_write(5A 5A 07 00 F8)
> > > ocmd_read_ret()
> > > ocmd_read_ret: reading 2 bytes (fmt & len)
> > > tpdd_read(2)
> > > tpdd_wait()
> > > tpdd_check()
> > > tpdd_wait: :0
> > > tpdd_read: l=2 12 01
> > > ocmd_read_ret: reading 2 bytes (data & checksum)
> > > tpdd_read(2)
> > > tpdd_wait()
> > > tpdd_check()
> > > tpdd_wait: :0
> > > tpdd_read: l=2 71 7B
> > > ocmd_read_ret: fmt=12 len=01 dat=(71) chk=7B
> > > verify_checksum(12 01 71 7B)
> > > calc_cksum(12 01 71):7B
> > > verify_checksum: given:7B calc:7B
> > > ocmd_check_err()
> > > ocmd_check_err: ret_fmt=12 ret_len=01 ret_dat=(71) read_err="0"
> > > ocmd_check_err: 71:Disk Not Inserted or Disk Change Error
> > > Not Ready
> > > 
> > > ready: Disk Not Inserted or Disk Change Error
> > > bkw@fw:~$
> > > 
> > > ----------------------
> > > 
> > > I'll break down some of that to explain what you're looking at:
> > > 
> > > 
> > > tpdd_write(5A 5A 23 00 DC)
> > > ocmd_read_ret(100)
> > > ocmd_read_ret: reading 2 bytes (fmt & len)
> > > tpdd_read(2 100)
> > > tpdd_wait(100)
> > > tpdd_check()
> > > tpdd_check()
> > > Detected TPDD1
> > > 
> > > 
> > > This looks like we aren't displaying something because we sent 5A 5A 23 00
> > > DC to the drive, and then just declared "detected tpdd1" without seeing 
> > > the
> > > response from the drive. In this case, that is actually how we detect 
> > > tpdd1
> > > is by the lack of response to that command.
> > > 
> > > 
> > > ocmd_ready()
> > > ocmd_send_req(07)
> > > calc_cksum(07 00):F8
> > > ocmd_send_req: fmt="07" len="00" dat="" chk="F8"
> > > tpdd_write(5A 5A 07 00 F8)
> > > 
> > > Send the "ready" command,
> > > which ultimately means send 5A 5A 07 00 F8 to the drive
> > > 
> > > ocmd_read_ret()
> > > ocmd_read_ret: reading 2 bytes (fmt & len)
> > > tpdd_read(2)
> > > tpdd_wait()
> > > tpdd_check()
> > > tpdd_wait: :0
> > > tpdd_read: l=2 12 01
> > > 
> > > Read a standard response packet from the drive,
> > > which ultimately means to start by reading 2 bytes and interpret them to
> > > tell how many more bytes to read for the rest of the response packet.
> > > 
> > > And we did get 2 bytes back from the drive, and they were 12 01
> > > 
> > > And then it goes on to interpret that as packet type 12 payload length 1,
> > > which means read one more byte for the payload and one more after that for
> > > the checksum, which gave us the payload error code 71 which was looked up
> > > from a table of error codes to give us the human readable message for code
> > > 71.
> > > 
> > > 
> > > ----------------------------
> > > 
> > > Some basic physical stuff to check just so you have some baseline to know
> > > what is normal. A lot of the drives normal correct behavior seems kind of
> > > dead if you didn't know what to expect. Like how when you turn it on,
> > > nothing happens. Two lights on the front and neither one lights, the motor
> > > doesn't spin, etc.
> > > 
> > > Holding the drive in your hand, you should feel the motor nudge just a bit
> > > every time you flip the power switch on. It doesn't spin even one 
> > > rotation,
> > > just a short vibration for 1/2 second or less. It doesn't matter if the 
> > > door
> > > is open or closed. It doesn't matter if there is a disk inserted or not. 
> > > The
> > > access light never comes on.
> > > 
> > > The battery light stays off at all times except it blinks on for a split
> > > second every time you turn the power off.
> > > 
> > > ----------------------------------------
> > > 
> > > Checking some electrical basics right at the drive itself without the 
> > > cable
> > > in the equation:
> > > 
> > > Looking at the rear of the drive, pin 1 is top-right, and pin 2 is bottom
> > > right.
> > > 
> > > You should get continuity from pin 1 to the center pin of the power jack.
> > > 
> > > With the power ON, and a dmm in dc volts mode, black on pin 1, you should
> > > get 5v on pin 3 and 0v on all other pins.
> > > 
> > > 
> > > --------------------------------------
> > > 
> > > verifying the cable (probably should have started with this)
> > > 
> > > Looking into the drive-end of the cable, with the polarity key up, and
> > > ignoring the two positions that form the polarity key,
> > > pin 1 is top-left, pin 2 is bottom-left.
> > > 
> > > 
> > > Looking into the pc end of the cable, with the long side up, the plug 
> > > should
> > > be 9-pin female, pin 1 is top-right, pin 6 is bottom-right.
> > > 
> > > (Regardless how the cable is constructed between those two ends, whether a
> > > custom one-piece cable like you made using the WP-2/PC cable directions, 
> > > or
> > > using the cable meant for the 100 and adding the special 25f-9f adapter
> > > linked in the hardware document in the pdd.sh readme. Point being I'm
> > > testing the end-to-end connection with nothing that might change the 
> > > pinout
> > > left out. The only other "adapter" is just the usb-serial adapter which 
> > > you
> > > can consider as not an adapter but just a 9-pin male com port.)
> > > 
> > > https://raw.githubusercontent.com/bkw777/TPDD_Cable/master/DE9F_to_PC.jpg
> > > 
> > > 
> > > With a dmm in continuity mode, you should get beeps with these, direction 
> > > of
> > > black vs red doesn't matter:
> > > 
> > > drive pin 1 to pc pin 5
> > > drive pin 2 to pc pin 7
> > > drive pin 5 to pc pin 4
> > > drive pin 7 to pc pin 3
> > > 
> > > With a dmm in diode mode:
> > > 
> > > black on drive pin 3 to red on pc pin 6: 1.7v  (reversed: ol)
> > > black on drive pin 4 to red on pc pin 8: 1.7v  (reversed: ol)
> > > black on drive pin 6 to red on pc pin 2: 1.7v  (reversed: ol)
> > > 
> > > 
> > > There are no pin-to-pin shorts within the cable at either end. In a normal
> > > serial cable it's not wrong to have DCD connected to DSR right at the end 
> > > in
> > > the plug, which would be pin 1 to pin 6 both on the pc end here, but in 
> > > this
> > > case pin 1 on the pc end is not connected to anything and there are no 
> > > other
> > > things like that either. Just 7 individual 1:1 connections.
> > > 
> > > --------------------------------------------------------
> > > 
> > > 
> > > I just performed all of these with my own working FB100 and cable.
> > > 
> > > I have used a variety of usb-serial adapters and I think every one I've 
> > > used
> > > has worked, but bad usb-serial adapters are definitely a thing, and I 
> > > used a
> > > good FTDI cable just now. Gearmo GM-FTDI2-LED-C for the record.
> > > 
> > > -- 
> > > bkw
> > > 
> > > 
> > > 
> > > 
> > > 
> > > 
> > > 
> > > 
> > > 
> > > 
> > > 
> > > 
> > > 
> > > 
> > > On 12/13/23 01:17, runrin wrote:
> > > > Hey all
> > > > 
> > > > I acquired an FB100 recently, popped it open and checked the belt, and
> > > > it looks brand new.
> > > > 
> > > > I spent a few hours building some of bwk's TPDD cables tonight and
> > > > testing it out, but I'm struggling to get the drive working.
> > > > 
> > > > When I connect the drive to my M100 and use the TS-DOS rom, the drive
> > > > access light pops up, and then it tells me my disk isn't formatted (it's
> > > > not). Then when I press "Y" to format, there is no activity on the
> > > > access light.
> > > > 
> > > > I tried hooking it up to my Linux box with the WP-2/PC cable and pdd.sh,
> > > > and I get no response at all from the drive. No access light at all even
> > > > with an `ls' or `ready' command.
> > > > 
> > > > I checked the jumpers on the bottom and one was bridged, so I tried
> > > > desoldering that (since the TPDD manual suggests setting the DIP
> > > > switches to all off), and it didn't make any difference.
> > > > 
> > > > Any thoughts what might be going on?
> > > > 
> > > > Thanks!!
> > > 
> > > -- 
> > > bkw
> > > 
> 
> -- 
> bkw
> 

Reply via email to