• HLA working - Now What?

    PP04/04/2024 at 21:49 0 comments

    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.

  • Some Protocol interpretation success

    PP04/01/2024 at 14:12 0 comments

    Currently, I work on reversing the protocol.

    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 in and 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` for 01: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?