

Complete IDE Disk Driver in Forth - kyleburton
http://colorforth.com/ide.html

======
ajross
This is much more a statement about how simple the ATA port interface is than
it is about Forth. Writing for hardware only _sounds_ complicated to modern
folks who have never tried it. Remember that these were devices built with a
few thousand transistors at most. There's only so much complexity you can pack
into that structure.

~~~
mrcharles
I wish there were more resources available detailing how to write drivers.
I've had this dream in the back of my mind for a long time of hacking a
standard USB port on the end of a Steel Battalion controller, and then writing
a PC driver for it. But I wouldn't even know where to start, really.

~~~
wendroid
USB

Universal - No

Serial - No

Bus - No

leave the USB alone, seriously, that's my advice

~~~
mrcharles
Well, the issue is that Xbox controllers are already USB, they just have a
special end.

~~~
blasdel
...and they conveniently put those quick-disconnect dongles on the end so you
can make your own normal dongles

It looks like some people have already written Windows drivers, if you wanted
to experiment you might look at writing a userspace driver for Linux.

It's kind of strange that they built something custom instead of just
implementing it as a couple standard HID devices with an internal hub.

~~~
nitrogen
_It's kind of strange that they built something custom instead of just
implementing it as a couple standard HID devices with an internal hub._

Depending on the USB chip/microcontroller used, it can be a lot easier to just
toss in a bunch of vendor-specific requests instead of adhering to all the
requirements of an HID-class device (though I haven't analyzed the Xbox
controller itself, so I don't know if that's what was done).

Also, there's no need to use an internal hub, as a single USB device
("function" in the USB spec, IIRC) can have multiple "interfaces" that
implement different (or the same) classes, such as HID, CDC, mass storage, or
vendor-specific.

------
__david__
I would not call it "complete". Maybe "complete" in the sense that it works
under perfect conditions, but not "complete" in any real sense. I don't see
any error handling or power-up initialization, I don't see any DMA, I don't
see any timeouts, I don't see any interrupts.

I could write the same code in C and it would be just about as long.

------
mrcharles
Seeing things like this make me glad I started programming with a (then)
higher level language like C.

------
tghw
Forth has made it to 1986!

