it's also very possible that i made a mistake when i initially
reassembled the thing. it was very fiddly to get everything back
together. i'll let you know if i find anything interesting.

On Wed, Dec 13, 2023 at 02:36:18PM -0800, runrin wrote:
> 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