I fixed a few problems in the Synchronous Serial capturing program that catches the output of the microcontroller in the DCC-175, and behold: this was scrolling up my screen while I was playing my Grace Jones - Island Life prerecorded cassette!

Not So Fast!
Okay, there still seems to be a problem where every once in a while it misses a byte. I don't know why this happens, it could be interference. I'm sure my non-shielded wires don't help, and it's possible that, even though output buffers are used for the output lines in the DCC-175 computer connection, they might not generate enough current in some cases to draw the Propeller inputs low or high. Or maybe there's something that I can do about my timing parameters to prevent this.
Try the Veal: Wait, There's a Menu???
The titles of the last two songs on the cassette are clearly visible (and so was the rest of the track list): "9 MY JAMAICAN GUY" "10 SLAVE TO THE RHYTHM" but there's more to see here: "MAIN MENU" "1 ALBUM TITLE" "2 TRACK LIST"...
Those last texts would have totally bewildered me a few years ago. What is this strange information that looks like it's an interactive menu, and why is the DCC-175 sending it to the computer?
The answer is that this is the Interactive Text Transmission Service (ITTS) data that's stored on every prerecorded tape. Prerecorded tapes usually mention this on the J-card: they tell you they contain "DCC-Text" data that can be shown on TV if you have a compatible DCC recorder. No such recorder was ever available to consumers, but Philips made prototype ITTS decoders that could be connected to early DCC recorders to show the information so that mastering facilities could verify that the DCC-Text information showed up as expected.
The ITTS information is formatted according to the ISO-61866 standard. I have a copy of that standard, and it's expensive and big. I can't share the standard here because of copyright, but as I understand, the way that the data is formatted is similar to CD-Text. I strongly suspect that there are lots of things in the standard that existing prerecorded DCC tapes don't use, but because the recorder basically only acts as a device to pick up the information and spew it out to a decoder, the standard can be any size and there can be any amount of features, and the recorder couldn't care less. Making a decoder for ITTS is probably difficult (and that might be why Philips never went through with it) but it's not impossible. It may happen one day, but that's a whole different story.
Decoding All the Bits
The DCC Museum recently found a PDF online that might help with decoding the data. The document is called "Technical Guide Volume 31: Auto DCC Technology" and it pretends to be a service manual for the Panasonic CQ-DC1 car stereo system with DCC mechanism, but contains a HUGE amount of information about the inner workings of DCC, probably copy-and-pasted from the DCC specifications. And it looks like Page 27 has information about how various information such as time codes and song titles are stored in the AUX track. This could be the Rosetta Stone that could help me decode the information that the microcontroller spits out, but I expect that there's more about the data format of the synchronous serial port, since it also gives the computer information about the state of the mechanism (Play, Stop, Wind etc.) and possibly other things.
EDIT: The DCC System Description, donated to the DCC Museum, contains the official information.
Lather, Rinse, Repeat
When I look at the myriads of data scrolling by on my terminal emulator screen, there are a few things that stand out:
- When playing a self-recorded cassette, there is almost no data at all: Most bytes from the recorder are zeroes. When there's a marker (recorded with the DCC-Studio program), I can see the song title scroll by but then it gets mostly quiet again. It's like the Borg were all told to go to sleep and the voices get really quiet
- It appears that when the recorder has nothing to report, it just sends the same data over and over. Obviously this is by design. Probably the microcontroller sends a designated buffer based on interrupts and/or timers, and that part of the code doesn't have time to decide whether it already sent something. On the other side, the PC can probably detect where the data belongs "in the big picture", and stores anything it gets. It reminds me a bit of how Teletext works/worked: TV's would just show the lines of the selected page but all pages would be transmitted by the TV station continuously.
- It's not clear where data begins and how long the blocks of data are. I already know that data is transferred in packets of 32 bytes but it looks like those packets are grouped together. But just like other things in the world of DCC, things don't necessarily make sense at all levels; for example you might expect that packets are in groups of 4 because there are 4 tape blocks to a tape frame, but no. This will take some research. EDIT: There are 12 blocks of data in each tape frame, with 4 times a group of 3 packets containing 28 bytes of recorder data, 36 bytes of AUXINFO and 32 bytes of SYSINFO. Thanks Vick for pointing this out in the comments!
So Where Am I Going?
The dropped bytes are a potential problem, I should figure out what goes wrong there. Maybe the recorder really is sending fewer bytes sometimes? Is it an electrical problem? Maybe the tape I'm using is too damaged or my heads weren't clean? I should try cleaning the heads and try some other tapes to see if the dropped bytes can be eliminated.
As for the repeating data, I wonder if it would help to detect the L3REF pulse in my Propeller code. That might let me know where the start of the data is.
In order to follow the data from the recorder to the PC as well as the data from the PC to the recorder, I need to run two instances of the sync serial decoder. But the data stream for each line (TX and RX basically) runs at a pretty high speed, and generating a hexdump generates a lot more serial traffic than just sending the bytes in another way. I think if I interleave the transmit data with the receive data, it will make things very confusing very quickly, and I would be practically begging for flow control problem (because there is no flow control) if I would keep doing things in Hex.
So I think it would be better if I send the data out from the Propeller in binary or (slightly more friendly to the eyes) Base64 or something. That way, the stream has a much better chance of arriving intact, and that way I can write a C application under Windows to help me decipher the data. I'm thinking for starters I'll write a console application that hexdumps the data in a much wider format than 80 characters, so that I can get a feeling of where the fields are in the data that gets repeated all the time.
In the next log, I hope I can show some results of my analysis.
Discussions
Become a Hackaday.io Member
Create an account to leave a comment. Already have an account? Log In.
Hi Jac,
I'm trying to do the same thing you're working on, your project inspired me to study DCC spec draft and DCC-175 internals and try to make some kind of DCC-Dumper and then have the ability to record this dump to a cassette. The main problem with DCC-175 is that we do not have a direct control of L3BUS from PC. We don't know exact protocol on the Sx2 bus. Now it is not clear whether DCC-175 MCU is able to record custom SYSINFO, or it records only Setmaker's signature. As soon as I'm only in the progress of repairing my DCC-175 (it basically works but with high W&F, so I'm doing full rehaul of the mechanism), and then going to do some kind of sniffer for SB and Sx2 buses, is it possible to ask you to make a short test with DCC-175 and your sniffer:
1) record short fragment on DCC-175 from analog or digital source,
2) record short fragment using DCC-Studio.
3) Observe Serial bus for both fragments and make screenshots of them.
The intention is to check what will be recorded in the sysinfo area with both methods. If Setmaker's signature is different (or for example no signature in case of using DCC-Studio) then it is highly possible that we will be able to record custom SYSINFO on DCC-175. If not, then it seems DDU from 3rd generation will be better choice for custom recorder.
Best regards,
Alexander
Are you sure? yes | no
Is this project still interesting?
The screenshot shows the structure from the aux data (36 bytes) and sysinfo data (32 bytes), as well as the internal data (28 bytes)
sysinfo data:
0F 12 0F 12 1D 00 00 00 89 00 1C 09 01 6D 00 00
20 20 39 20 4D 59 11 4A 41 4D 41 49 43 41 4E 20
internal data:
5B 20 00 40 00 71 00 00 00 00 00 02 31 35 00 C2
38 00 00 01 00 00 00 00 00 00 00 00
aux data:
07 8C 01 00
00 00 00 80 00 00 04 01 10 14 10 05 01 30 19 21
02 94 12 14 15 27 01 50 48 15 00 00 00 00 00 00
4 structures per frame:
4 * 32 = 128 bytes per frame - sysinfo
4 blocks per frame - aux data
4 packets of internal data have an unknown format
Are you sure? yes | no
+1
:thumbsup:
Are you sure? yes | no