Jules Richardson wrote:
I dunno. If I
have a lapse in sanity I'll write it in Java (which
means it'll run veeery slooowly on just about anything)
It shouldn't be too bad to be honest - there's going to be a fair bit of
"wait for user input" and "wait for device" in there, and Java tends
to
be reasonable when processing raw data if there's not lots of thread
synchronisation and object creation in the way.
Have you ever actually used Java on anything less than a 1GHz box? When my
laptop steps down to 500MHz, Java apps become intolerably slow. Admittedly
it's nice because a lot of the data processing algorithms are already
implemented and ready for use, but for some thing's it's just too slow. Not to
mention the amount of memory it hogs just for doing something simple like a
"hello world" window.
I was thinking GTK+ :-)
So compile wxWidgets to use the GTK backend - I get my object-oriented API
(I've been spoiled by Swing), you get your cute little GTK widgets. Win-win :)
But yeah, doesn't matter... a goal of
portability's the main thing to my mind. I'm not sure what device access
is like under Windows (particularly from Java) - from Linux / Mac it's
probably just as simple as opening an I/O stream and reading/writing.
On Linux you've got LibUSB, which has been ported to Windows too (but works in
a slightly different way due to the kernel-mode and driver differences - on
Linux it uses usbdevfs, on Windows there's a device driver). I have a sneaking
suspicion LibUSB also works on the BSDs...
Ah, here we go (from
libusb.sourceforge.net):
Operating System support: Linux, FreeBSD, NetBSD, OpenBSD, Darwin, MacOS X
And for LibUSB-win32:
Libusb-win32 is a port of the USB library libusb to the Windows operating
systems (Win98SE, WinME, Win2k, WinXP). The library allows user space
applications to access any USB device on Windows in a generic way without
writing any line of kernel driver code.
Like I said - I get a single API, everyone else gets cross-platform
compatibility. Win-win again.
:-) You know I'd assumed that there was some sort
of "testing/hobbyist"
scenario where you could just do what you wanted without fear of
stomping all over commercial cards...
It's the same as USB really - you pick a manufacturer ID that isn't in the
Linux PCI-ID list, then pray it doesn't conflict. Then there's the bus
protocol - for USB I can use a PIC18F4550 which has a built-in USB slave
adapter, for PCI I need to cook up the PHY and a VxD/kernel driver for it.
Lots of extra effort for very little gain.
USB?! USB?! :-) Urgh... SCSI, please...
USB: Plug in, install drivers, play.
SCSI: Plug in, fiddle with terminators, play with cables, replace cables,
replace terminators, replace host adapter card, replace terminators again, try
with terminators on and off, try daisychaining in various combinations, give
up, go home.
I don't like SCSI much, can you tell?
But seriously, yes an external device is probably more
useful than an
internal card I think. And an external card can always be mounted
internally anyway :-)
Oh yes - in this case you just chop the end off a USB A-B cable, screw the
external device down to something, then crimp a connector onto the B end of
the cable and plug it into the USB header on the motherboard. External becomes
internal, nice and easy. It's much harder to do the reverse, especially with
PCI cards.
that's
small enough to shove into a laptop bag with a wall-wart and a
3.5" drive so that you can handle the "Joe Bloggs has the discs, will
let someone image them, but won't let the Royal Mail handle them"
Very good point.
Quick question - does the write protect sensor on floppy drives also lock out
the write circuitry, or does the drive depend on the controller not trying to
do silly things like writing to protected floppies?
ST-506 is
coming in Version 2 :)
Hmmm. I'm not sure if the current implementation's quick enough
though... you probably need to be sampling at around 50MHz for ST506.
But I assume there are faster chips out there you can use?
I was joking, but ISE reckons the logic's good to 70MHz. That's still nearly a
50% safety margin over 50MHz. That said, I don't have any ST506 type drives,
but making a "semi virtual disc" clone for the ST506 interface would be quite
neat.
Scavenging from scrap I/O cards works well.
Only if you've got scrap I/O cards to scavenge from.
That's going from hazy memory of discussions on
here... I'm rather new
to the 8" drive game. I gather there's an interface line which gets
toggled on at least some 8" drives and tells the drive to do write
precomp; I think this line was replaced with another signal when things
moved to 5.25" drives though, so it's not available separately on the
standard 34-way header.
You're not as new as I am - I don't even HAVE an 8" drive. I want to get a
5.25" DD (both 40 and 80 track variants) first, though, as mine's a HD and I
can't tell how to jumper it for 300RPM. It's a YE Data YD-380B, just on the
offchance anyone has a jumper list knocking about... Otherwise I might
dismantle the motor board and trace the speed control pin back to its source...
[Out of interest, I wonder if this gadget will be able
to drive one of
those floppy tape units? I've got no idea how their protocol works...]
Might be able to. It'd be mostly a case of writing software, assuming the data
format is fairly standard MFM.
Absolutely... hence the need for having lots of drives
connected at once
via an addressing scheme. It just feels a bit 'cleaner' to have one
drive per cable and have termination set on all drives, somehow. But
never mind, as the way you're doing it, it should still work in that
configuration anyway :)
So you think it'd be better to have TTL out of the I/O port, then have a set
of O/C buffers on the adapter cards, and have a separate O/C buffer set for
the PC FDD port? Hmm, the cost just keeps mounting...
I saw some nice documentation about how M2FM worked
*somewhere*. I'll
shout if I remember where it was now.
It's in the Intel Intellec disc controller manuals (on Bitsavers no less), if
this page is accurate:
<http://retrotechnology.com/herbs_stuff/drive.html>
I'd have one in preference to a Catweasel board...
OK, that's one potential sale then. Any more takers? :P
FWIW, by
"decode support", I mean "take the raw bitstream and turn it
into bytes, then decode those into sectors". I'm not doing filesystem
decoding, that can wait until later.
Definitely a separate project!
Ho yus. There are far too many weird formats out there to handle them all.
Better IMO to just handle bit-level decoding in DART, then write something
else to handle splitting out the data from the sector headers, etc.
--
Phil. | (\_/) This is Bunny. Copy and paste Bunny
classiccmp at philpem.me.uk | (='.'=) into your signature to help him gain
http://www.philpem.me.uk/ | (")_(") world domination.