Jim Battle Posted January 2, 2014 Report Share Posted January 2, 2014 I've finally gotten far enough in my project to post some status. The task at hand is to capture (and maybe in the future write) data off of arcane disk formats. In the past I've used the catweasel card, but it is no longer supported, and isn't general purpose enough to support the needs of my current subject, the Compucolor II floppy disk. I turned to the kryoflux card, but soon realized that I didn't like the API much, and I was going to have to build an adapter card, as the CCII floppy interface is nonstandard. Also, some of my past arcane disk decoder projects used an 8" drive, and I would need yet another adapter for those. Since I was going to build an adapter, why not go all in and build my own capture hardware. So I bought my Papilio Pro and got to work. I wrote my own SDRAM controller, but then glommed on to Mike Field's (Hamster's) SDRAM design, before going back to my own. The FPGA work was actually the easy part. Once I was able to capture bits off the disk, I had to write a python script to decode the bits into sectors and tracks and whole disk images, to decode the file structure and detokenize BASIC programs and such. The python script has a mini-shell to allow me to interact with it, eg, if a disk has read errors, I can dump the contents of individual sectors, or ask for specific tracks to retry capture. Anyway, I've posted a 5 minute youtube clip of my setup showing it at work. This is my first attempt at narrating a video and it could be better, but it is good enough for now. I've used this system to capture about 250 disk images for the Compucolor II, and I may come into another large batch to process. PCBs should be showing up in a week or two, then I'm going to rewrite one of my old catweasel drivers (for the wang 2200 computer) to use this new system.This post has been promoted to an article Link to comment Share on other sites More sharing options...
alex Posted January 3, 2014 Report Share Posted January 3, 2014 Good stuff there and the video narration is great. Link to comment Share on other sites More sharing options...
Peter Aus Wyk Posted January 3, 2014 Report Share Posted January 3, 2014 great project for anyone interested in vintage computing and conserving good old treasures. I like the narrativeThank you very much Peter Link to comment Share on other sites More sharing options...
Jack Gassett Posted January 3, 2014 Report Share Posted January 3, 2014 Wow! This is a really impressive project, very well done. The video was great, the narrative was just fine. Every time you showed something I would think, "Oh, that's cool", and then you would show something even cooler right after. I'm marking this to put up on the blog and the showcase, but I think this is something that the Hackaday community would really love too! Jack. Link to comment Share on other sites More sharing options...
Jim Battle Posted January 3, 2014 Author Report Share Posted January 3, 2014 Thanks, everyone, for the kind words. If there is interest, I can add a more complete description of things on a sub webpage of the compucolor.org website. Just as a taste of this script which is shown in the video, here is the top level "help" description of my ccvfutil (compucolor virtual floppy utility) program, and a few commands: F:\Jim\Documents\compucolor\ccvfutil>ccvfutil.py port:com10ccvfutil.py, version 0.8, 2013/12/07Type "help" to see all commandsConnecting to device at port com10 ccvf>helpUsage: ccvfutil.py <source> [<command> [<args>]] [<redirection>]<source> is either a *.ccvf file name which is to be inspected, or it isof the form "port:com10" to specify that a connection is to be opened onthe com10 serial port to real floppy capture hardware.With no command, enter into command line mode, where each subsequent linecontains one of the commands, as described below.Arguments containing spaces can be surrounded by double quote characters.<redirection> is optional, and takes one of three forms: ... > <logfile> -- write command output to a logfile ... >> <logfile> -- append command output to a logfile ... | more -- send command output through a pagerType "help <command>" to get more detailed help on a particular command. analyze - produce a detailed bit-by-bit decoding log of a track capture - capture an entire disk to a file check - check the disk data structures for consistency compare - Compare two disks or selected files on two disks dir - display all or selected files on the disk dump - show contents of file or sectors in hex and ascii exit - quit program fill - fill a range of memory with a constant byte help - print list of commands more details of one command label - inspect or write a label on the virtual disk list - show program or data file as text load - read a disk image from a file mem - hex dump of a range of memory memtest - perform memory test on a range of memory meta - report virtual disk metadata normalize - rewrite each sector with canonical timing pound - step to track 0, and set the motor phase properly reset - reset the device save - write the in-memory disk image back to disk step - step floppy head in or out N tracks vol - display or change the disk volume label wp - report, set, or clear the virtual disk write protect statusccvf>help capturecapture [-nov(erify)] [-r(etries) <#>] [-t(rack(s)) <tracklist>] [-b(ad)] Read the disk attached in the attached disk drive and dump the result into <filename>.ccvf and status into <filename>.log. -nov(erify): just read each track without verifying the contents. -r(etries): on read errors, how many times to try to read a given track before giving up. The default is 10. -t(rack(s)): specify a list of tracks or track ranges to capture. e.g, -t 19 captures track 19 -t 19,23 captures tracks 19 and 23 -t 19:23 captures tracks 19 through 23, inclusively -t 19:23,32 captures tracks 19 through 23 and 32 -b(ad): captures just the set of tracks which have errors ccvf>metafilename: F:\Jim\Documents\compucolor\disk_images\other\alltronics.ccvfwrite protect: nosectors: 400label:.... DISASSEMBLER + ALLTRONICS ccvf>dirVolume Name: SC1179Volume Directory Blocks: 3ATR NAME TYPE VR SBLK SIZE LBC LADR SADR 03 MENU .BAS;01 0003 000E 5D 829A 8977 03 SCRMOD.LDA;01 0011 000D 7A 8200 8200 03 SCRMOD.SRC;01 001E 0099 36 0000 0000 03 MON .SRC;01 00B7 0097 33 0000 0000 03 EDITOR.PRG;02 014E 0023 17 8200 8200 01 <FREE SPACE> 0171 001F ccvf>help dumpdump {<filename> | <secnumber> | <secnumber> <secnumber> } Prints a sector-by-sector dump in hex and ascii of the specified file. If the specified filename doesn't exist but looks like a number, the that sector will be dumped. If there is a pair of numbers, then all sectors in that range, inclusive, will be dumped. ccvf>dump 0### Disk Sector 0 ###00: 00 02 41 11 53 43 31 31 37 39 12 20 20 e5 e5 e5 ..A.SC1179. ...10: e5 e5 e5 e5 e5 e5 e5 03 4d 45 4e 55 20 20 42 41 ........MENU BA20: 53 01 03 00 0e 00 5d 9a 82 77 89 4e 03 53 43 52 S.....]..w.N.SCR30: 4d 4f 44 4c 44 41 01 11 00 0d 00 7a 00 82 00 82 MODLDA.....z....40: 3e 03 53 43 52 4d 4f 44 53 52 43 01 1e 00 99 00 >.SCRMODSRC.....50: 36 00 00 00 00 00 03 4d 4f 4e 20 20 20 53 52 43 6......MON SRC60: 01 b7 00 97 00 33 00 00 00 00 00 03 45 44 49 54 .....3......EDIT70: 4f 52 50 52 47 02 4e 01 23 00 17 00 82 00 82 3e ORPRG.N.#......> ccvf> The same script can be used to manipulate disk images without any of the disk capture stuff. In fact, it is part of the plumbing of the compucolor website. All the disk images are online. When you click on a "directory" link for a given disk image, on the fly the script is invoked and it creates a web page containing the directory listing. Each file is a hot link and if you click on one of those, the script is invoked again to dump the file contents. If it is a format it knows (eg, .BAS or .TXT) it is listed as ASCII, but if it doesn't know the file type, it just does a sector-by-sector dump of the file. It is a feature I like a lot: http://www.compucolor.org/vmedia.html Link to comment Share on other sites More sharing options...
Jim Battle Posted January 11, 2014 Author Report Share Posted January 11, 2014 A little more progress to report. My PCBs from iteadstudio.com arrived today, and 20 minutes later I received an email from the Hamster indicating that this thread had gotten featured on hackaday. I'm honored. I built up one of my PCBs -- it is a 3.3" x 3.5" board which connects directly to the papilio pro's "C" connector, has a couple voltage translation chips, and connectors for a standard 5.25" floppy drive, a standard 8" floppy drive, and a weird 16-pin DIP connector for the Compucolor II computer floppy drive. I ran into a couple problems: (1) I didn't notice that while all the through-hole parts used a 0.032" drill, the 16-pin strip I used to connect to the papilio was using 0.023" drill size. As a result, I spent a half hour filing down the connector strip so it would mechanically fit in the holes. Then after soldering it in, I realized I mounted it on the top of the board rather than the bottom. So I unsoldered it, filed down another strip, and soldered it in. (2) I messed up when I did the mental gyrations to figure out how to place the two 4-pin power connectors adjacent to the C[15:0] connector -- they are on the wrong side of it. So I soldered some jumper wires in the board and plug into the gnd/+3.3V/+5V connectors adjacent to the B[15:0] connector. It is not ideal, but it works for now. These connections draw very little power, and there is a few decoupling caps on the board, which helps. Once I got that all straightened out, I powered it up and it worked on the first try! I've attached a photo of the board mounted to my papilio pro. It is partially obscured by the 16 pin ribbon cable going to the floppy drive itself. The thick black cable on the left is from the power supply feeding +12V/+5V/GND to the floppy drive. Not shown is that the two-pin connector "P4" would normally have a twisted pair of wires going off to a high intensity white LED. The transistor immediately adjacent to it drives sufficient current to get enough current for it. The LED strobes 1 ms every 16.667 ms (ie, 60 Hz). This can be used to illuminate the tach label on the back of the drive in order to calibrate it to operate at 300 RPM. Link to comment Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.