Jump to content

Recommended Posts

For all of you Falcon owners.

I'm just curious if you guys are interested in new Falcon Digital Interface+

Note this is work in progress...

Currently what I have developed so far:

ADAT out 8ch.

SPDIF out 2ch Stereo.

USB 2ch to PC (but this is only a side effect for testing).

🙂

Edited by Chri O.
  • Like 8
Link to comment
https://forums.atariage.com/topic/350669-falcon-030-fdi-work-in-progress/
Share on other sites

18 hours ago, sunaiac said:

Is that an optical out replacement for all audio (including YM) or just a part of it ?

it is optical output from external DSP Port. What is redirected there is up to you, e.g. with fsnd.zip > a falcon sound cpx

sound_extension.png.6351810d4e1688e8b013444468a83808.png

https://www.atari-forum.com/viewtopic.php?p=415697#p415697

https://www.atari-forum.com/viewtopic.php?t=34402

Edited by Cyprian
14 hours ago, Matej said:

Please keep USB recording to PC too. This can be nice feature to record stuff from AceTracker.

I hear you I wish it was that easy but unfortunately USB has a bit of glitching sound, possible fix means a deep dive into USB descriptors and buffers and low-level code.

I am using Teensy 4.1 microcontroller and Teensy Audio Library.

  • Like 1
15 hours ago, Cyprian said:

it is optical output from external DSP Port.

What I found fascinating about Atari Falcon audio its the TDM 8 channels protocol, normally digital audio is communicated between chips using I2S protocol.

I got to admit the engineers were way ahead of their time. 😲

SDP and AUDIO Subsystems.jpg

Edited by Chri O.
add pic.
  • Like 1
16 hours ago, Chri O. said:

I hear you I wish it was that easy but unfortunately USB has a bit of glitching sound, possible fix means a deep dive into USB descriptors and buffers and low-level code.

I am using Teensy 4.1 microcontroller and Teensy Audio Library.

I own studio card with SPDIF record 192khz 32bit / playback 384khz 32bit max. So no problem. Oldschool musicians dont need USB. Maybe in future version.

I know I've been kind of quiet for the past 2 weeks but I've been messing with the USB low-level code descriptors (8 in out channels) implementation unfortunately still no go 😞.

 

Current USB Descriptor:

 

Information for device Teensy Audio (VID=0x16C0 PID=0x04D2):

------------------------------
Connection Information:
------------------------------
Device current bus speed: HighSpeed
Device supports USB 1.1 specification
Device supports USB 2.0 specification
Device address: 0x0004
Current configuration value: 0x01
Number of open pipes: 2


------------------------------
Device Descriptor:
------------------------------
0x12	bLength
0x01	bDescriptorType
0x0200	bcdUSB
0x00	bDeviceClass      
0x00	bDeviceSubClass   
0x00	bDeviceProtocol   
0x40	bMaxPacketSize0   (64 bytes)
0x16C0	idVendor
0x04D2	idProduct
0x0280	bcdDevice
0x01	iManufacturer
0x02	iProduct     
0x03	iSerialNumber
0x01	bNumConfigurations

Device Qualifier Descriptor:
------------------------------
0x0A	bLength
0x06	bDescriptorType
0x0200	bcdUSB
0x00	bDeviceClass      
0x00	bDeviceSubClass   
0x00	bDeviceProtocol   
0x40	bMaxPacketSize0   (64 bytes)
0x01	bNumConfigurations 
0x00	bReserved 


-------------------------
Configuration Descriptor:
-------------------------
0x09	bLength
0x02	bDescriptorType
0x00E9	wTotalLength   (233 bytes)
0x04	bNumInterfaces
0x01	bConfigurationValue
0x00	iConfiguration
0xC0	bmAttributes   (Self-powered Device),  // EDIT todo note: 0x80    // (BUS Powered) usb_desc.c line 664 & 1678
0x32	bMaxPower      (100 mA) // EDIT todo note: teensy 4 = 250 mA

Interface Descriptor:
------------------------------
0x09	bLength
0x04	bDescriptorType
0x00	bInterfaceNumber
0x00	bAlternateSetting
0x02	bNumEndPoints
0x03	bInterfaceClass      (Human Interface Device Class)
0x00	bInterfaceSubClass   
0x00	bInterfaceProtocol   
0x00	iInterface

HID Descriptor:
------------------------------
0x09	bLength
0x21	bDescriptorType
0x0111	bcdHID
0x00	bCountryCode
0x01	bNumDescriptors
0x22	bDescriptorType   (Report descriptor)
0x0021	bDescriptorLength

Endpoint Descriptor:
------------------------------
0x07	bLength
0x05	bDescriptorType
0x82	bEndpointAddress  (IN endpoint 2)
0x03	bmAttributes      (Transfer: Interrupt / Synch: None / Usage: Data)
0x0040	wMaxPacketSize    (1 x 64 bytes)
0x01	bInterval         (1 microframes)

Endpoint Descriptor:
------------------------------
0x07	bLength
0x05	bDescriptorType
0x02	bEndpointAddress  (OUT endpoint 2)
0x03	bmAttributes      (Transfer: Interrupt / Synch: None / Usage: Data)
0x0020	wMaxPacketSize    (1 x 32 bytes)
0x02	bInterval         (2 microframes)

Interface Association Descriptor:
------------------------------
0x08	bLength
0x0B	bDescriptorType
0x01	bFirstInterface
0x03	bInterfaceCount
0x01	bFunctionClass      (Audio Device Class)
0x01	bFunctionSubClass   (Audio Control Interface)
0x00	bFunctionProtocol   (Audio Protocol undefined)
0x00	iFunction

Interface Descriptor:
------------------------------
0x09	bLength
0x04	bDescriptorType
0x01	bInterfaceNumber
0x00	bAlternateSetting
0x00	bNumEndPoints
0x01	bInterfaceClass      (Audio Device Class)
0x01	bInterfaceSubClass   (Audio Control Interface)
0x00	bInterfaceProtocol   (Audio Protocol undefined)
0x00	iInterface

AC Interface Header Descriptor:
------------------------------
0x0A	bLength
0x24	bDescriptorType
0x01	bDescriptorSubtype
0x0100	bcdADC
0x003E	wTotalLength   (62 bytes)
0x02	bInCollection
0x02	baInterfaceNr(1)
0x03	baInterfaceNr(2)

AC Input Terminal Descriptor:
------------------------------
0x0C	bLength
0x24	bDescriptorType
0x02	bDescriptorSubtype
0x01	bTerminalID
0x0602	wTerminalType   (Digital audio interface)
0x00	bAssocTerminal
0x08	bNrChannels   (8 channels)
0x0003	wChannelConfig
0x00	iChannelNames
0x00	iTerminal

AC Output Terminal Descriptor:
------------------------------
0x09	bLength
0x24	bDescriptorType
0x03	bDescriptorSubtype
0x02	bTerminalID
0x0101	wTerminalType   (USB Streaming)
0x00	bAssocTerminal
0x01	bSourceID
0x00	iTerminal

AC Input Terminal Descriptor:
------------------------------
0x0C	bLength
0x24	bDescriptorType
0x02	bDescriptorSubtype
0x03	bTerminalID
0x0101	wTerminalType   (USB Streaming)
0x00	bAssocTerminal
0x08	bNrChannels   (8 channels)
0x0003	wChannelConfig
0x00	iChannelNames
0x00	iTerminal

AC Feature Unit Descriptor:
------------------------------
0x0A	bLength
0x24	bDescriptorType
0x06	bDescriptorSubtype
0x31	bUnitID
0x03	bSourceID
0x01	bControlSize
bmaControls: 
 0x01	Channel(0) - Mute
 0x02	Channel(1) - Volume
 0x02	Channel(2) - Volume
0x00	iFeature


AC Output Terminal Descriptor:
------------------------------
0x09	bLength
0x24	bDescriptorType
0x03	bDescriptorSubtype
0x04	bTerminalID
0x0602	wTerminalType   (Digital audio interface)
0x00	bAssocTerminal
0x31	bSourceID
0x00	iTerminal

Interface Descriptor:
------------------------------
0x09	bLength
0x04	bDescriptorType
0x02	bInterfaceNumber
0x00	bAlternateSetting    // Value used to select an alternate setting for the interface identified in the prior field. 
                             //  Allows an interface to change the settings on the fly.
0x00	bNumEndPoints        // If this value is zero, this interface uses the Default Control Pipe only
0x01	bInterfaceClass      (Audio Device Class)
0x02	bInterfaceSubClass   (Audio Streaming Interface)
0x00	bInterfaceProtocol   (Audio Protocol undefined)
0x00	iInterface

Interface Descriptor:
------------------------------
0x09	bLength
0x04	bDescriptorType
0x02	bInterfaceNumber
0x01	bAlternateSetting
0x01	bNumEndPoints
0x01	bInterfaceClass      (Audio Device Class)
0x02	bInterfaceSubClass   (Audio Streaming Interface)
0x00	bInterfaceProtocol   (Audio Protocol undefined)
0x00	iInterface

AS Interface Descriptor:
------------------------------
0x07	bLength
0x24	bDescriptorType
0x01	bDescriptorSubtype
0x02	bTerminalLink
0x03	bDelay
0x0001	wFormatTag   (PCM)

AS Format Type 1 Descriptor:
------------------------------
0x0B	bLength
0x24	bDescriptorType
0x02	bDescriptorSubtype
0x01	bFormatType   (FORMAT_TYPE_1)
0x08	bNrChannels   (8 channels)
0x02	bSubframeSize
0x10	bBitResolution   (16 bits per sample)
0x01	bSamFreqType   (Discrete sampling frequencies)
0x00BB80 	tSamFreq(1)   (48000 Hz)

Endpoint Descriptor (Audio/MIDI 1.0):
------------------------------
0x09	bLength
0x05	bDescriptorType
0x83	bEndpointAddress  (IN endpoint 3)
0x09	bmAttributes      (Transfer: Isochronous / Synch: Adaptive / Usage: Data)
0x0310	wMaxPacketSize    (1 x 784 bytes)
0x01	bInterval         (1 microframes)
0x00	bRefresh
0x00	bSynchAddress

AS Isochronous Data Endpoint Descriptor:
------------------------------
0x07	bLength
0x25	bDescriptorType
0x01	bDescriptorSubtype
0x00	bmAttributes
0x00	bLockDelayUnits   (undefined)
0x0000	wLockDelay

Interface Descriptor:
------------------------------
0x09	bLength
0x04	bDescriptorType
0x03	bInterfaceNumber
0x00	bAlternateSetting
0x00	bNumEndPoints
0x01	bInterfaceClass      (Audio Device Class)
0x02	bInterfaceSubClass   (Audio Streaming Interface)
0x00	bInterfaceProtocol   (Audio Protocol undefined)
0x00	iInterface

Interface Descriptor:
------------------------------
0x09	bLength
0x04	bDescriptorType
0x03	bInterfaceNumber
0x01	bAlternateSetting
0x02	bNumEndPoints
0x01	bInterfaceClass      (Audio Device Class)
0x02	bInterfaceSubClass   (Audio Streaming Interface)
0x00	bInterfaceProtocol   (Audio Protocol undefined)
0x00	iInterface

AS Interface Descriptor:
------------------------------
0x07	bLength
0x24	bDescriptorType
0x01	bDescriptorSubtype
0x03	bTerminalLink
0x03	bDelay
0x0001	wFormatTag   (PCM)

AS Format Type 1 Descriptor:
------------------------------
0x0B	bLength
0x24	bDescriptorType
0x02	bDescriptorSubtype
0x01	bFormatType   (FORMAT_TYPE_1)
0x08	bNrChannels   (8 channels)
0x02	bSubframeSize
0x10	bBitResolution   (16 bits per sample)
0x01	bSamFreqType   (Discrete sampling frequencies)
0x00BB80 	tSamFreq(1)   (48000 Hz)

Endpoint Descriptor (Audio/MIDI 1.0):
------------------------------
0x09	bLength
0x05	bDescriptorType
0x03	bEndpointAddress  (OUT endpoint 3)
0x05	bmAttributes      (Transfer: Isochronous / Synch: Asynchronous / Usage: Data)
0x0310	wMaxPacketSize    (1 x 784 bytes)
0x01	bInterval         (1 microframes)
0x00	bRefresh
0x84	bSynchAddress

AS Isochronous Data Endpoint Descriptor:
------------------------------
0x07	bLength
0x25	bDescriptorType
0x01	bDescriptorSubtype
0x00	bmAttributes
0x00	bLockDelayUnits   (undefined)
0x0000	wLockDelay

Endpoint Descriptor (Audio/MIDI 1.0):
------------------------------
0x09	bLength
0x05	bDescriptorType
0x84	bEndpointAddress  (IN endpoint 4)
0x11	bmAttributes      (Transfer: Isochronous / Synch: None / Usage: Feedback)
0x0004	wMaxPacketSize    (1 x 4 bytes)
0x01	bInterval         (1 microframes)
0x07	bRefresh
0x00	bSynchAddress


-------------------------------------
Other Speed Configuration Descriptor:
-------------------------------------
0x09	bLength
0x07	bDescriptorType
0x00E9	wTotalLength   (233 bytes)
0x04	bNumInterfaces
0x01	bConfigurationValue
0x00	iConfiguration
0xC0	bmAttributes   (Self-powered Device)
0x32	bMaxPower      (100 mA)

Interface Descriptor:
------------------------------
0x09	bLength
0x04	bDescriptorType
0x00	bInterfaceNumber
0x00	bAlternateSetting
0x02	bNumEndPoints
0x03	bInterfaceClass      (Human Interface Device Class)
0x00	bInterfaceSubClass   
0x00	bInterfaceProtocol   
0x00	iInterface

HID Descriptor:
------------------------------
0x09	bLength
0x21	bDescriptorType
0x0111	bcdHID
0x00	bCountryCode
0x01	bNumDescriptors
0x22	bDescriptorType   (Report descriptor)
0x0021	bDescriptorLength

Endpoint Descriptor:
------------------------------
0x07	bLength
0x05	bDescriptorType
0x82	bEndpointAddress  (IN endpoint 2)
0x03	bmAttributes      (Transfer: Interrupt / Synch: None / Usage: Data)
0x0040	wMaxPacketSize    (1 x 64 bytes)
0x01	bInterval         (1 frames)

Endpoint Descriptor:
------------------------------
0x07	bLength
0x05	bDescriptorType
0x02	bEndpointAddress  (OUT endpoint 2)
0x03	bmAttributes      (Transfer: Interrupt / Synch: None / Usage: Data)
0x0020	wMaxPacketSize    (1 x 32 bytes)
0x02	bInterval         (2 frames)

Interface Association Descriptor:
------------------------------
0x08	bLength
0x0B	bDescriptorType
0x01	bFirstInterface
0x03	bInterfaceCount
0x01	bFunctionClass      (Audio Device Class)
0x01	bFunctionSubClass   (Audio Control Interface)
0x00	bFunctionProtocol   (Audio Protocol undefined)
0x00	iFunction

Interface Descriptor:
------------------------------
0x09	bLength
0x04	bDescriptorType
0x01	bInterfaceNumber
0x00	bAlternateSetting
0x00	bNumEndPoints
0x01	bInterfaceClass      (Audio Device Class)
0x01	bInterfaceSubClass   (Audio Control Interface)
0x00	bInterfaceProtocol   (Audio Protocol undefined)
0x00	iInterface

AC Interface Header Descriptor:
------------------------------
0x0A	bLength
0x24	bDescriptorType
0x01	bDescriptorSubtype
0x0100	bcdADC
0x003E	wTotalLength   (62 bytes)
0x02	bInCollection
0x02	baInterfaceNr(1)
0x03	baInterfaceNr(2)

AC Input Terminal Descriptor:
------------------------------
0x0C	bLength
0x24	bDescriptorType
0x02	bDescriptorSubtype
0x01	bTerminalID
0x0602	wTerminalType   (Digital audio interface)
0x00	bAssocTerminal
0x08	bNrChannels   (8 channels)
0x0003	wChannelConfig
0x00	iChannelNames
0x00	iTerminal

AC Output Terminal Descriptor:
------------------------------
0x09	bLength
0x24	bDescriptorType
0x03	bDescriptorSubtype
0x02	bTerminalID
0x0101	wTerminalType   (USB Streaming)
0x00	bAssocTerminal
0x01	bSourceID
0x00	iTerminal

AC Input Terminal Descriptor:
------------------------------
0x0C	bLength
0x24	bDescriptorType
0x02	bDescriptorSubtype
0x03	bTerminalID
0x0101	wTerminalType   (USB Streaming)
0x00	bAssocTerminal
0x08	bNrChannels   (8 channels)
0x0003	wChannelConfig
0x00	iChannelNames
0x00	iTerminal

AC Feature Unit Descriptor:
------------------------------
0x0A	bLength
0x24	bDescriptorType
0x06	bDescriptorSubtype
0x31	bUnitID
0x03	bSourceID
0x01	bControlSize
bmaControls: 
 0x01	Channel(0) - Mute
 0x02	Channel(1) - Volume
 0x02	Channel(2) - Volume
0x00	iFeature


AC Output Terminal Descriptor:
------------------------------
0x09	bLength
0x24	bDescriptorType
0x03	bDescriptorSubtype
0x04	bTerminalID
0x0602	wTerminalType   (Digital audio interface)
0x00	bAssocTerminal
0x31	bSourceID
0x00	iTerminal

Interface Descriptor:
------------------------------
0x09	bLength
0x04	bDescriptorType
0x02	bInterfaceNumber
0x00	bAlternateSetting
0x00	bNumEndPoints
0x01	bInterfaceClass      (Audio Device Class)
0x02	bInterfaceSubClass   (Audio Streaming Interface)
0x00	bInterfaceProtocol   (Audio Protocol undefined)
0x00	iInterface

Interface Descriptor:
------------------------------
0x09	bLength
0x04	bDescriptorType
0x02	bInterfaceNumber
0x01	bAlternateSetting
0x01	bNumEndPoints
0x01	bInterfaceClass      (Audio Device Class)
0x02	bInterfaceSubClass   (Audio Streaming Interface)
0x00	bInterfaceProtocol   (Audio Protocol undefined)
0x00	iInterface

AS Interface Descriptor:
------------------------------
0x07	bLength
0x24	bDescriptorType
0x01	bDescriptorSubtype
0x02	bTerminalLink
0x03	bDelay
0x0001	wFormatTag   (PCM)

AS Format Type 1 Descriptor:
------------------------------
0x0B	bLength
0x24	bDescriptorType
0x02	bDescriptorSubtype
0x01	bFormatType   (FORMAT_TYPE_1)
0x08	bNrChannels   (8 channels)
0x02	bSubframeSize
0x10	bBitResolution   (16 bits per sample)
0x01	bSamFreqType   (Discrete sampling frequencies)
0x00BB80 	tSamFreq(1)   (48000 Hz)

Endpoint Descriptor (Audio/MIDI 1.0):
------------------------------
0x09	bLength
0x05	bDescriptorType
0x83	bEndpointAddress  (IN endpoint 3)
0x09	bmAttributes      (Transfer: Isochronous / Synch: Adaptive / Usage: Data)
0x0310	wMaxPacketSize    (1 x 784 bytes)
0x01	bInterval         (1 frames)
0x00	bRefresh
0x00	bSynchAddress

AS Isochronous Data Endpoint Descriptor:
------------------------------
0x07	bLength
0x25	bDescriptorType
0x01	bDescriptorSubtype
0x00	bmAttributes
0x00	bLockDelayUnits   (undefined)
0x0000	wLockDelay

Interface Descriptor:
------------------------------
0x09	bLength
0x04	bDescriptorType
0x03	bInterfaceNumber
0x00	bAlternateSetting
0x00	bNumEndPoints
0x01	bInterfaceClass      (Audio Device Class)
0x02	bInterfaceSubClass   (Audio Streaming Interface)
0x00	bInterfaceProtocol   (Audio Protocol undefined)
0x00	iInterface

Interface Descriptor:
------------------------------
0x09	bLength
0x04	bDescriptorType
0x03	bInterfaceNumber
0x01	bAlternateSetting
0x02	bNumEndPoints
0x01	bInterfaceClass      (Audio Device Class)
0x02	bInterfaceSubClass   (Audio Streaming Interface)
0x00	bInterfaceProtocol   (Audio Protocol undefined)
0x00	iInterface

AS Interface Descriptor:
------------------------------
0x07	bLength
0x24	bDescriptorType
0x01	bDescriptorSubtype
0x03	bTerminalLink
0x03	bDelay
0x0001	wFormatTag   (PCM)

AS Format Type 1 Descriptor:
------------------------------
0x0B	bLength
0x24	bDescriptorType
0x02	bDescriptorSubtype
0x01	bFormatType   (FORMAT_TYPE_1)
0x08	bNrChannels   (8 channels)
0x02	bSubframeSize
0x10	bBitResolution   (16 bits per sample)
0x01	bSamFreqType   (Discrete sampling frequencies)
0x00BB80 	tSamFreq(1)   (48000 Hz)

Endpoint Descriptor (Audio/MIDI 1.0):
------------------------------
0x09	bLength
0x05	bDescriptorType
0x03	bEndpointAddress  (OUT endpoint 3)
0x05	bmAttributes      (Transfer: Isochronous / Synch: Asynchronous / Usage: Data)
0x0310	wMaxPacketSize    (1 x 784 bytes)
0x01	bInterval         (1 frames)
0x00	bRefresh
0x84	bSynchAddress

AS Isochronous Data Endpoint Descriptor:
------------------------------
0x07	bLength
0x25	bDescriptorType
0x01	bDescriptorSubtype
0x00	bmAttributes
0x00	bLockDelayUnits   (undefined)
0x0000	wLockDelay

Endpoint Descriptor (Audio/MIDI 1.0):
------------------------------
0x09	bLength
0x05	bDescriptorType
0x84	bEndpointAddress  (IN endpoint 4)
0x11	bmAttributes      (Transfer: Isochronous / Synch: None / Usage: Feedback)
0x0003	wMaxPacketSize    (1 x 3 bytes)
0x01	bInterval         (1 frames)
0x05	bRefresh
0x00	bSynchAddress

Microsoft OS Descriptor is not available. Error code: 0x0000001F


--------------------------------
String Descriptor Table
--------------------------------
Index  LANGID  String
0x00   0x0000  
0x01   0x0000  "Teensyduino"
0x02   0x0000  "Teensy Audio"
0x03   0x0000  "7521140"

------------------------------

Connection path for device: 
USB xHCI Compliant Host Controller
Root Hub
Teensy Audio (VID=0x16C0 PID=0x04D2) Port: 2

Running on: Windows 10 or greater (Build Version 19044)

Brought to you by TDD v2.17.0, Feb 23 2021, 14:04:02

 

On 5/4/2023 at 5:23 AM, Cyprian said:

cool, I wonder how the device (e.g. FDI) informs the Falcon about number of outputs.

A bit late response but just so you know the Atari Falcon 030 always transmit 8 channels in and out on the DSP port regardless of the device used (SPDIF - ADAT -  FA8).

  • Like 1

That sounds like a nice idea in my opinion!  So the FDI / SPDIF would be the main part of the unit, and if the user wanted they could add the ADAT In / Out illustrated top left above on your design, not separate PCBs like SPDIF / FDI and ADAT SoundPool built units of old?

To be honest it's only the input ADAT side that gets expensive as the ADAT output is implemented on the microcontroller.

See this: 🙂

 

Let's just say decoding the ADAT stream is kind of CPU demanded so I am off loading this task to CoolAudio V1402 IC ADAT Optical Audio Data Generator and Encoder

DATASHEET PDF:https://mediadl.musictribe.com/download/documents/coolaudio/docs/COOLAUDIO_V1402_DATASHEET.pdf

  • Like 1
  • 2 weeks later...

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...