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