Reverse-engineering WD1000, WD1001 hard disk controllers
computerdoc at sc.rr.com
Sat Nov 19 19:20:50 CST 2016
Your Disassembler sounds very interesting. When you have a stable version, please let me know. I would be interested in seeing the disassembled source code for the WD1000 8-bit card I modified years ago.
I had an MFM hard drive or two that I was trying to format, but the 4 sets of hard drive parameters offered by the WD1000 didn't match one of my hard drives so I replaced one of the sets of hard drive parameters by reading the eprom using my homebrew eprom burner setup I built for my Color Computer 1 F Board version way back when I was in my 20s.
After getting the hex code into the Coco, I set out to figure out where that hard drive parameter table was located. I picked one of the set of hard drive parameters I didn't think I would ever need and replaced it with my own. I burnt the eprom, installed it into the WD1000 8-bit card and booted my MSDOS system and the WD1000 didn't respond. I turned everything off and uninstalled the eprom again.
I looked through the entire eprom for some idea as to why the Hard drive controller was not working. I found one 8-bit byte at the very end of the eprom. I started wondering if that was a simple 8-bit summation of all the bytes in the eprom. I quickly wrote a basic program to add up all the bytes in the eprom since the hex code was loaded in my Coco to arrive at a new 8-bit sum.
The result of that calculation was put into that last byte of the eprom file and burnt into the eprom. After reinstalling the WD1000 back into the computer, the WD1000 came right up and asked for my choice to pick for the hard drive parameters to use to format the hard drive with! It even included the set of hard drive parameters I had put into the eprom! I was very proud of what I had accomplished!
All this was done at the hex level as I did not have a clue what the code was doing. I just needed different parameters for my MFM hard drive so I could format it to use on my system so I changed them. If I remember correctly, I was setting up a 20MB and 30MB hard drive for an old MSDOS machine I had put together. I think the 20MB was in the table, but the 30MB was not again if I am remembering this correctly. I probably still have that old WD controller somewhere if I can find it. I thought you guys might be interested in my experience modifying the WD1000 Eprom. I had a lot of fun figuring it all out. Now with Eric's disassembler, I'll be able to finally see the disassembled source code for it! It will be so cool to examine! Take care my friends.
computerdoc at sc.rr.com
> -----Original Message-----
> From: cctalk [mailto:cctalk-bounces at classiccmp.org] On Behalf Of Eric Smith
> Sent: Saturday, November 19, 2016 7:07 PM
> To: General Discussion: On-Topic and Off-Topic Posts
> Subject: Reverse-engineering WD1000, WD1001 hard disk controllers
> I've been working a little bit off-and-on for years on reverse-engineering the WD1000 and WD1001 disk controllers (8X300/8X305-
> based), and their clones. I've only made any significant progress within the last few days, after hacking together my own
> disassesmbler which deals with the Fast I/O Select PROM. I do NOT recommend using this disassembler yet, for reasons that are
> explained in the README, but I've put it on github:
> I've made some progress interpreting the firmware of an early WD1000, which only had 512 words of firmware, and didn't support
> run-time configurable sector size selection. So far I've figured out how they handle the host reading and writing the task file,
> dispatching the commands, and much of the sector ID search.
More information about the cctalk