ust hacked together a command interpreter with Saleae's High Level Analyzer python framework.10/10, would recommend. Turnaround time is low because you can reload the plugin without restarting the Program; And debugging with e.g. python exceptions is very handy (no need to attach a c++-debugger).
Of course, this is only possible because of the Low Level Analyzer that was already done in C++. Which was done very hacky, but... It's a hobby project! Pre-compiled plugin data can be downloaded In the github releases.
Next up is the micro-controller and the power supply. As I saw (and measured) around 18V AC to the Tape Deck, but anything above 16V RMS will probably be enough. I will thus buy those cheap-o trafo-based supplies. At first I wanted to use a buck converter from the 5V USB supply, but 1. this may be not enough power (worst case 18v * 2A = 36w), and 2. I took a look into the schematics and I don't want to burn the fragile 1n4003 rectifier diodes (only 1A each) in the Deck:
Regarding the Micro-Controller: I had some STM32F4 Bluepills laying around, but especially with this custom protocol, sending and receiving, and translating this into USB commands without loosing data from the wire, I wanted something with multithreading. So I will probably use some of the RP2040 picos. I don't yet have them laying around, so in the meantime I will try using the bigger, non-pico brother. Let's see how I finally get my own PIO program done.
For that, I use the cheap Saleae Logic Analyzer clone connected to DATA and GND (COM) of the ribbon cable. Thanks to the very well written (repair) manual of this old Sound System, I could get a hint how zeros and ones are encoded, as well as the framing and timing. Based on that, I wrote a custom Low-Level Analyzer plugin for Saleae to decode the raw values (see repo for details). I already got a preliminary table of commands and interpretation of payload data together. Currently the Low-Level Analyzer also decodes the meaning, but later this should be done via a (python) High-Level Analyzer. This is 1. more clean, and 2. can be reused better, as I plan on the Microcontroller to just read/write raw commands, with the interpretation done separately (in the host computer).
Note: All numbers in Hex
Recorded IDs
| ID | Name |
| ---- | ----- || `0`| Probably the Tuner (or display?) |
|`3`| Probably the Tape Deck || `4`| ?? Only acted as destination, perhaps CD, or AMP ?|
|`6`| only startup and off: `6->6 0x20` |
Commands `0 -> 3`
----
Missing to identify: Mute / unmute output
| ID | Description | (Data)
| ---- | ----------- | ------
| `05` | Stop ?? Comes directly after `0->4: 07`and after startup|
|`07`| Eject ? || `08` | Increase FF speed |
|`09`| Increase FR speed || `0A` | Fast Forward ? |
|`0B`| Fast Reverse ? || `0E` |Dolby: B |
|`0F`| Dolby: C || `10` |Dolby: None |
|`11`| Reverse Playing direction
|`12`| ?? Comes directly after `08` or `09`|| `13` | ?? Comes directly after startup
| `15` | Request to record
| `17` | Play |
|`16`| Pause (Mute?)|| `1C` | ? Answer to `3->0 : 07`, so perhaps "Ok to output", or"request for playing direction"| `1E` | RECORD "NORM"| `1F` | Zero time counter
Commands `3 -> 0`
----
| ID | Description | (Data)
| ---- | ----------- | ------
| `05` | ? Comes sometimes after `13` (is it the broadcast stop?)|
|`06`| Status Un-Playable? Eject was pressed, tape coming out
|`07`| Status playable? Eject was pressed, tape coming inand small wait time
|`0B`| Current FF/FR speed | _Only one byte!_ : lower nibble = speed (1-4), MSBit (`80`) = isReverse |
|`0C`| Set Time display | BCD-Like MM:SS, e.g. `0x0159`for01:59|
|`0D`| Set Time display Negative ? | like `0C`|
|`0F`| Tape deck is present (in Dolby: C mode?) || `10` | Is playing "to the right"|
|`11`| Is playing "to the left" || `12` | ?? comes sometimes as answer to `0 -> 3: 12`| `13` | ? Came during FF, and after startup |
|`14`| Can not record (tape was not loaded) || `15` | Able to record (tape was just loaded) |
Broadcast commands `0 -> 0`| Command | Direction | Type | Data |
| ------- | --------- | ---- | ---- || `01` |`0->0`| System On
|`02`| `0->0` | System Off
| `05` |`0->0`| Stop all?