--- hatari/src/falcon/crossbar.c 2019/04/09 08:54:35 1.1.1.6 +++ hatari/src/falcon/crossbar.c 2019/04/09 08:55:48 1.1.1.7 @@ -5,7 +5,7 @@ or at your option any later version. Read the file gpl.txt for details. Falcon Crossbar (Matrice) emulation. - input device: + input device: - DSP transmit (SSI) - external DSP connector - ADC (micro + PSG chip) @@ -22,7 +22,7 @@ - internal clock 32 MHz - external clock (DSP external port, up to 32 Mhz) - Transfers between 2 devices can use handshaking or continuous mode + Transfers between 2 devices can use handshaking or continuous mode Hardware I/O registers: $FF8900 (byte) : Sound DMA control @@ -53,7 +53,7 @@ Crossbar schematics: - + - one receiving device can be connected to only one source device - one source device can be connected to multiple receiving device @@ -66,7 +66,7 @@ TRANSMIT | | | | | | | | Mic L -----| DMA ---O------O------O-----O - /---|XOR ----|\ PLAYBACK | | | | + /---|XOR ----|\ PLAYBACK | | | | PSG --| | \ | | | | \---| | /-------X--------O------O------O-----O Mic R -----|XOR ----|/ | | | | | @@ -84,9 +84,9 @@ | | Output to: - - header, - - internal speaker, - - monitor speaker + - header, + - internal speaker, + - monitor speaker */ const char crossbar_fileid[] = "Hatari Crossbar.c : " __DATE__ " " __TIME__; @@ -243,7 +243,7 @@ struct crossbar_s { Uint16 attenuationSettingLeft; /* Left channel attenuation for DAC */ Uint16 attenuationSettingRight; /* Right channel attenuation for DAC */ Uint16 microphone_ADC_is_started; - + Uint32 clock25_cycles; /* cycles for 25 Mzh interrupt */ Uint32 clock25_cycles_decimal; /* decimal part of cycles counter for 25 Mzh interrupt (*DECIMAL_PRECISION) */ Uint32 clock25_cycles_counter; /* Cycle counter for 25 Mhz interrupts */ @@ -254,7 +254,7 @@ struct crossbar_s { Uint32 pendingCyclesOver32; /* Number of delayed cycles for the interrupt */ Sint64 frequence_ratio; /* Ratio between host computer's sound frequency and hatari's sound frequency */ Sint64 frequence_ratio2; /* Ratio between hatari's sound frequency and host computer's sound frequency */ - + Uint32 dmaPlay_CurrentFrameStart; /* current DmaPlay Frame start ($ff8903 $ff8905 $ff8907) */ Uint32 dmaPlay_CurrentFrameCount; /* current DmaRecord Frame start ($ff8903 $ff8905 $ff8907) */ Uint32 dmaPlay_CurrentFrameEnd; /* current DmaRecord Frame start ($ff8903 $ff8905 $ff8907) */ @@ -263,7 +263,7 @@ struct crossbar_s { Uint32 dmaRecord_CurrentFrameEnd; /* current DmaRecord Frame end ($ff890f $ff8911 $ff8913) */ Uint32 adc2dac_readBufferPosition; /* read position for direct adc->dac transfer */ Sint64 adc2dac_readBufferPosition_float; /* float value of read position for direct adc->dac transfer index */ - + Uint32 save_special_transfer; /* Used in a special undocumented transfer mode (dsp sent is not in handshake mode and dsp receive is in handshake mode) */ }; @@ -303,10 +303,6 @@ void Crossbar_Reset(bool bCold) { nCbar_DmaSoundControl = 0; - if (bCold) - { - } - /* Stop DMA sound playing / record */ IoMem_WriteByte(0xff8901,0); dmaPlay.isRunning = 0; @@ -372,13 +368,13 @@ void Crossbar_Reset(bool bCold) Crossbar_Start_InterruptHandler_32Mhz(); /* Start Microphone jack emulation */ - if (crossbar.microphone_ADC_is_started == 0) { + if (crossbar.microphone_ADC_is_started == 0) { crossbar.microphone_ADC_is_started = Microphone_Start((int)nAudioFrequency); } /* Initialize special transfer mode */ crossbar.save_special_transfer = 0; - + /* Initialize Crossbar values after reboot */ IoMem_WriteByte(0xff8900,0x05); IoMem_WriteByte(0xff8903,0xff); @@ -418,7 +414,7 @@ void Crossbar_MemorySnapShot_Capture(boo * Write byte to Microwire Mask register(0xff8924). * Note: On Falcon, the Microwire is not present. * But for compatibility with the STe, Atari implemented the Microwire - * as follow (when one writes at the following address): + * as follow (when one writes at the following address): * $ff8922: always reads 0 for any value written at this address * $ff8924: NOT the value, then 8 cycles later, NOT the value again to its initial value. */ @@ -917,7 +913,7 @@ void Crossbar_SrcControler_WriteWord(voi dspXmit.isTristated = 1 - ((nCbSrc >> 7) & 0x1); dspXmit.isInHandshakeMode = 1 - ((nCbSrc >> 4) & 0x1); - + crossbar.dspXmit_freq = (nCbSrc >> 5) & 0x3; crossbar.dmaPlay_freq = (nCbSrc >> 1) & 0x3; } @@ -1038,7 +1034,7 @@ void Crossbar_TrackRecSelect_WriteByte(v /** * Write byte to CODEC input source from 16 bit adder (0xff8937). * Bit 1 : source = multiplexer - * Bit 0 : source = A/D convertor + * Bit 0 : source = A/D convertor */ void Crossbar_CodecInput_WriteByte(void) { @@ -1128,7 +1124,7 @@ static void Crossbar_Recalculate_Clocks_ cyclesClk = ((double)CPU_FREQ / Crossbar_DetectSampleRate(32)) / (double)(crossbar.playTracks) / 2.0; crossbar.clock32_cycles = (int)(cyclesClk); crossbar.clock32_cycles_decimal = (int)((cyclesClk - (double)(crossbar.clock32_cycles)) * (double)DECIMAL_PRECISION); - + LOG_TRACE(TRACE_CROSSBAR, "Crossbar : Recalculate_clock_Cycles\n"); LOG_TRACE(TRACE_CROSSBAR, " clock25 : %d\n", crossbar.clock25_cycles); LOG_TRACE(TRACE_CROSSBAR, " clock32 : %d\n", crossbar.clock32_cycles); @@ -1138,7 +1134,7 @@ static void Crossbar_Recalculate_Clocks_ if ((crossbar.int_freq_divider == 0) && (crossbar.steFreq == 0)) crossbar.isDacMuted = 1; - if ((crossbar.int_freq_divider == 6) || (crossbar.int_freq_divider == 8) || + if ((crossbar.int_freq_divider == 6) || (crossbar.int_freq_divider == 8) || (crossbar.int_freq_divider == 10) || (crossbar.int_freq_divider >= 12)) { crossbar.isDacMuted = 1; LOG_TRACE(TRACE_CROSSBAR, " DAC is muted\n"); @@ -1149,7 +1145,7 @@ static void Crossbar_Recalculate_Clocks_ } /** - * Compute Ratio between host computer sound frequency and Hatari's DAC sound frequency and + * Compute Ratio between host computer sound frequency and Hatari's DAC sound frequency and * ratio between hatari's DAC sound frequency and host's sound frequency. * Both values use << 32 to simulate floating point precision * Can be called by audio.c if a sound frequency value is changed in the parameter GUI. @@ -1188,10 +1184,10 @@ static int Crossbar_DetectSampleRate(Uin static void Crossbar_Start_InterruptHandler_25Mhz(void) { Uint32 cycles_25; - + cycles_25 = crossbar.clock25_cycles; crossbar.clock25_cycles_counter += crossbar.clock25_cycles_decimal; - + if (crossbar.clock25_cycles_counter >= DECIMAL_PRECISION) { crossbar.clock25_cycles_counter -= DECIMAL_PRECISION; cycles_25 ++; @@ -1215,7 +1211,7 @@ static void Crossbar_Start_InterruptHand static void Crossbar_Start_InterruptHandler_32Mhz(void) { Uint32 cycles_32; - + cycles_32 = crossbar.clock32_cycles; crossbar.clock32_cycles_counter += crossbar.clock32_cycles_decimal; @@ -1253,19 +1249,19 @@ void Crossbar_InterruptHandler_25Mhz(voi Crossbar_Process_DSPXmit_Transfer(); Crossbar_Process_DMAPlay_Transfer(); Crossbar_Process_ADCXmit_Transfer(); - + /* Restart the 25 Mhz clock interrupt */ Crossbar_Start_InterruptHandler_25Mhz(); return; } Crossbar_Process_ADCXmit_Transfer(); - + /* DSP Play transfer ? */ if (crossbar.dspXmit_freq == CROSSBAR_FREQ_25MHZ) { Crossbar_Process_DSPXmit_Transfer(); } - + /* DMA Play transfer ? */ if (crossbar.dmaPlay_freq == CROSSBAR_FREQ_25MHZ) { Crossbar_Process_DMAPlay_Transfer(); @@ -1292,12 +1288,12 @@ void Crossbar_InterruptHandler_32Mhz(voi Crossbar_Start_InterruptHandler_32Mhz(); return; } - + /* DSP Play transfer ? */ if (crossbar.dspXmit_freq == CROSSBAR_FREQ_32MHZ) { Crossbar_Process_DSPXmit_Transfer(); } - + /* DMA Play transfer ? */ if (crossbar.dmaPlay_freq == CROSSBAR_FREQ_32MHZ) { Crossbar_Process_DMAPlay_Transfer(); @@ -1319,7 +1315,7 @@ static void Crossbar_Process_DSPXmit_Tra { Uint16 frame=0; Sint32 data; - + /* If DSP Xmit is tristated, do nothing */ if (dspXmit.isTristated) return; @@ -1395,7 +1391,7 @@ static void Crossbar_SendDataToDspReceiv } dmaPlay.handshakeMode_Frame = 0; - + /* Send the clock to the DSP SSI receive */ DSP_SsiReceive_SC0(); } @@ -1432,14 +1428,14 @@ static void Crossbar_Process_DMAPlay_Tra Sint16 value, eightBits; Sint8 *pFrameStart; Uint8 dmaCtrlReg; - + /* if DMA play is not running, return */ if (dmaPlay.isRunning == 0) return; pFrameStart = (Sint8 *)&STRam[dmaPlay.frameStartAddr]; increment_frame = 0; - + /* 16 bits stereo mode ? */ if (crossbar.is16Bits) { eightBits = 1; @@ -1468,10 +1464,10 @@ static void Crossbar_Process_DMAPlay_Tra dmaPlay.frameCounter += increment_frame; - /* Special undocumented transfer mode : + /* Special undocumented transfer mode : When DMA Play --> DSP Receive is in HandShake mode at 32 Mhz, datas are shifted 2 bits on the left after the transfer. - This occurs with all demos using the Mpeg2 player from nocrew (amanita, LostBlubb, Wait, ...) + This occurs with all demos using the Mpeg2 player from nocrew (amanita, LostBlubb, Wait, ...) */ if (crossbar.dmaPlay_freq == CROSSBAR_FREQ_32MHZ) { temp = (crossbar.save_special_transfer<<2) + ((value & 0xc000)>>14); @@ -1516,7 +1512,7 @@ static void Crossbar_Process_DMAPlay_Tra /* Check if end-of-frame has been reached and raise interrupts if needed. */ if (dmaPlay.frameCounter >= dmaPlay.frameLen) - { + { /* Send a MFP15_Int (I7) at end of replay buffer if enabled */ if (dmaPlay.mfp15_int) { MFP_InputOnChannel ( MFP_INT_GPIP7 , 0 ); @@ -1533,7 +1529,7 @@ static void Crossbar_Process_DMAPlay_Tra if (dmaPlay.loopMode) { Crossbar_setDmaPlay_Settings(); - } + } else { /* Create samples up until this point with current values */ Sound_Update(false); @@ -1589,7 +1585,7 @@ void Crossbar_SendDataToDmaRecord(Sint16 if (dmaRecord.isRunning == 0) { return; } - + pFrameStart = (Sint8 *)&STRam[dmaRecord.frameStartAddr]; /* 16 bits stereo mode ? */ @@ -1618,12 +1614,12 @@ void Crossbar_SendDataToDmaRecord(Sint16 MFP_InputOnChannel ( MFP_INT_GPIP7 , 0 ); LOG_TRACE(TRACE_CROSSBAR, "Crossbar : MFP15 (IT7) interrupt from DMA record\n"); } - + /* Send a TimerA_Int at end of record buffer if enabled */ if (dmaRecord.timerA_int) { if (MFP_TACR == 0x08) /* Is timer A in Event Count mode? */ MFP_TimerA_EventCount_Interrupt(); - LOG_TRACE(TRACE_CROSSBAR, "Crossbar : MFP Timer A interrupt from DMA record\n"); + LOG_TRACE(TRACE_CROSSBAR, "Crossbar : MFP Timer A interrupt from DMA record\n"); } if (dmaRecord.loopMode) { @@ -1666,7 +1662,7 @@ static void Crossbar_Process_DMARecord_H /* read data from DSP Xmit */ data = DSP_SsiReadTxValue(); dmaRecord.handshakeMode_Frame = 0; - + Crossbar_SendDataToDmaRecord(data); } @@ -1702,10 +1698,10 @@ void Crossbar_GetMicrophoneDatas(Sint16 adc.writePosition = (adc.writePosition + 1) % DACBUFFER_SIZE; adc.buffer_left[adc.writePosition] = micro_bufferL[bufferIndex]; - adc.buffer_right[adc.writePosition] = micro_bufferR[bufferIndex]; + adc.buffer_right[adc.writePosition] = micro_bufferR[bufferIndex]; idxPos += crossbar.frequence_ratio2; - bufferIndex += idxPos>>32; + bufferIndex += idxPos>>32; idxPos &= 0xffffffff; /* only keep the fractional part */ } } @@ -1717,10 +1713,10 @@ static void Crossbar_Process_ADCXmit_Tra { Sint16 sample; Uint16 frame; - + /* swap from left to right channel or right to left channel */ adc.wordCount = 1 - adc.wordCount; - + /* Left Channel */ if (adc.wordCount == 0) { sample = adc.buffer_left[adc.readPosition]; @@ -1731,12 +1727,12 @@ static void Crossbar_Process_ADCXmit_Tra adc.readPosition = (adc.readPosition + 1) % DACBUFFER_SIZE; frame = 0; } - + /* Send sample to DSP receive ? */ if (adc.isConnectedToDsp) { Crossbar_SendDataToDspReceive(sample, frame); } - + /* Send sample to DMA record ? */ if (adc.isConnectedToDma) { Crossbar_SendDataToDmaRecord(sample); @@ -1774,7 +1770,7 @@ static void Crossbar_SendDataToDAC(Sint1 } /** - * Mix PSG sound with microphone sound in ADC. + * Mix PSG sound with microphone sound in ADC. * Also mix ADC sound sample with the crossbar DAC samples. * (Called by sound.c) */ @@ -1783,7 +1779,7 @@ void Crossbar_GenerateSamples(int nMixBu int i, j, nBufIdx; int n; Sint16 adc_leftData, adc_rightData, dac_LeftData, dac_RightData; - + if (crossbar.isDacMuted) { /* Output sound = 0 */ for (i = 0; i < nSamplesToGenerate; i++) { @@ -1853,11 +1849,11 @@ void Crossbar_GenerateSamples(int nMixBu dac.buffer_right[dac.readPosition]; break; } - + MixBuffer[nBufIdx][0] = (dac_LeftData * crossbar.attenuationSettingLeft) >> 16; MixBuffer[nBufIdx][1] = (dac_RightData * crossbar.attenuationSettingRight) >> 16; - /* Upgrade dac's buffer read pointer */ + /* Upgrade dac's buffer read pointer */ dac.readPosition_float += crossbar.frequence_ratio; n = dac.readPosition_float >> 32; /* number of samples to skip */ @@ -1871,8 +1867,8 @@ void Crossbar_GenerateSamples(int nMixBu dac.readPosition = (dac.readPosition + n) % DACBUFFER_SIZE; dac.readPosition_float &= 0xffffffff; /* only keep the fractional part */ - - /* Upgrade adc->dac's buffer read pointer */ + + /* Upgrade adc->dac's buffer read pointer */ crossbar.adc2dac_readBufferPosition_float += crossbar.frequence_ratio; n = crossbar.adc2dac_readBufferPosition_float >> 32; /* number of samples to skip */ crossbar.adc2dac_readBufferPosition = (crossbar.adc2dac_readBufferPosition + n) % DACBUFFER_SIZE; @@ -1884,13 +1880,13 @@ void Crossbar_GenerateSamples(int nMixBu /** * display the Crossbar registers values (for debugger info command) */ -void Crossbar_Info(Uint32 dummy) +void Crossbar_Info(FILE *fp, Uint32 dummy) { char matrixDMA[5], matrixDAC[5], matrixDSP[5], matrixEXT[5]; char frqDMA[11], frqDAC[11], frqDSP[11], frqEXT[11]; char frqSTE[30], frq25Mhz[30], frq32Mhz[30]; char dataSize[15]; - + static const Uint32 Ste_SampleRates[4] = { 6258, 12517, 25033, 50066 }; @@ -1904,42 +1900,42 @@ void Crossbar_Info(Uint32 dummy) }; if (ConfigureParams.System.nMachineType != MACHINE_FALCON) { - fprintf(stderr, "Not Falcon - no Crossbar!\n"); + fprintf(fp, "Not Falcon - no Crossbar!\n"); return; } - fprintf(stderr, "$FF8900.b : Sound DMA control : %02x\n", IoMem_ReadByte(0xff8900)); - fprintf(stderr, "$FF8901.b : Sound DMA control : %02x\n", IoMem_ReadByte(0xff8901)); - fprintf(stderr, "$FF8903.b : Frame Start High : %02x\n", IoMem_ReadByte(0xff8903)); - fprintf(stderr, "$FF8905.b : Frame Start middle : %02x\n", IoMem_ReadByte(0xff8905)); - fprintf(stderr, "$FF8907.b : Frame Start low : %02x\n", IoMem_ReadByte(0xff8907)); - fprintf(stderr, "$FF8909.b : Frame Count High : %02x\n", IoMem_ReadByte(0xff8909)); - fprintf(stderr, "$FF890B.b : Frame Count middle : %02x\n", IoMem_ReadByte(0xff890b)); - fprintf(stderr, "$FF890D.b : Frame Count low : %02x\n", IoMem_ReadByte(0xff890d)); - fprintf(stderr, "$FF890F.b : Frame End High : %02x\n", IoMem_ReadByte(0xff890f)); - fprintf(stderr, "$FF8911.b : Frame End middle : %02x\n", IoMem_ReadByte(0xff8911)); - fprintf(stderr, "$FF8913.b : Frame End low : %02x\n", IoMem_ReadByte(0xff8913)); - fprintf(stderr, "\n"); - fprintf(stderr, "$FF8920.b : Sound Mode Control : %02x\n", IoMem_ReadByte(0xff8920)); - fprintf(stderr, "$FF8921.b : Sound Mode Control : %02x\n", IoMem_ReadByte(0xff8921)); - fprintf(stderr, "$FF8930.w : DMA Crossbar Input Select Controller : %04x\n", IoMem_ReadWord(0xff8930)); - fprintf(stderr, "$FF8932.w : DMA Crossbar Output Select Controller : %04x\n", IoMem_ReadWord(0xff8932)); - fprintf(stderr, "\n"); - fprintf(stderr, "$FF8934.b : External Sync Frequency Divider : %02x\n", IoMem_ReadByte(0xff8934)); - fprintf(stderr, "$FF8935.b : Internal Sync Frequency Divider : %02x\n", IoMem_ReadByte(0xff8935)); - fprintf(stderr, "$FF8936.b : Record Track select : %02x\n", IoMem_ReadByte(0xff8936)); - fprintf(stderr, "$FF8937.b : Codec Input Source : %02x\n", IoMem_ReadByte(0xff8937)); - fprintf(stderr, "$FF8938.b : Codec ADC Input : %02x\n", IoMem_ReadByte(0xff8938)); - fprintf(stderr, "$FF8939.b : Gain Settings Per Channel : %02x\n", IoMem_ReadByte(0xff8939)); - fprintf(stderr, "$FF893A.b : Attenuation Settings Per Channel : %02x\n", IoMem_ReadByte(0xff893a)); - fprintf(stderr, "$FF893C.w : Codec Status : %04x\n", IoMem_ReadWord(0xff893c)); - fprintf(stderr, "$FF8940.w : GPIO Data Direction : %04x\n", IoMem_ReadWord(0xff8940)); - fprintf(stderr, "$FF8942.w : GPIO Data : %04x\n", IoMem_ReadWord(0xff8942)); - fprintf(stderr, "\n"); - + fprintf(fp, "$FF8900.b : Sound DMA control : %02x\n", IoMem_ReadByte(0xff8900)); + fprintf(fp, "$FF8901.b : Sound DMA control : %02x\n", IoMem_ReadByte(0xff8901)); + fprintf(fp, "$FF8903.b : Frame Start High : %02x\n", IoMem_ReadByte(0xff8903)); + fprintf(fp, "$FF8905.b : Frame Start middle : %02x\n", IoMem_ReadByte(0xff8905)); + fprintf(fp, "$FF8907.b : Frame Start low : %02x\n", IoMem_ReadByte(0xff8907)); + fprintf(fp, "$FF8909.b : Frame Count High : %02x\n", IoMem_ReadByte(0xff8909)); + fprintf(fp, "$FF890B.b : Frame Count middle : %02x\n", IoMem_ReadByte(0xff890b)); + fprintf(fp, "$FF890D.b : Frame Count low : %02x\n", IoMem_ReadByte(0xff890d)); + fprintf(fp, "$FF890F.b : Frame End High : %02x\n", IoMem_ReadByte(0xff890f)); + fprintf(fp, "$FF8911.b : Frame End middle : %02x\n", IoMem_ReadByte(0xff8911)); + fprintf(fp, "$FF8913.b : Frame End low : %02x\n", IoMem_ReadByte(0xff8913)); + fprintf(fp, "\n"); + fprintf(fp, "$FF8920.b : Sound Mode Control : %02x\n", IoMem_ReadByte(0xff8920)); + fprintf(fp, "$FF8921.b : Sound Mode Control : %02x\n", IoMem_ReadByte(0xff8921)); + fprintf(fp, "$FF8930.w : DMA Crossbar Input Select Controller : %04x\n", IoMem_ReadWord(0xff8930)); + fprintf(fp, "$FF8932.w : DMA Crossbar Output Select Controller : %04x\n", IoMem_ReadWord(0xff8932)); + fprintf(fp, "\n"); + fprintf(fp, "$FF8934.b : External Sync Frequency Divider : %02x\n", IoMem_ReadByte(0xff8934)); + fprintf(fp, "$FF8935.b : Internal Sync Frequency Divider : %02x\n", IoMem_ReadByte(0xff8935)); + fprintf(fp, "$FF8936.b : Record Track select : %02x\n", IoMem_ReadByte(0xff8936)); + fprintf(fp, "$FF8937.b : Codec Input Source : %02x\n", IoMem_ReadByte(0xff8937)); + fprintf(fp, "$FF8938.b : Codec ADC Input : %02x\n", IoMem_ReadByte(0xff8938)); + fprintf(fp, "$FF8939.b : Gain Settings Per Channel : %02x\n", IoMem_ReadByte(0xff8939)); + fprintf(fp, "$FF893A.b : Attenuation Settings Per Channel : %02x\n", IoMem_ReadByte(0xff893a)); + fprintf(fp, "$FF893C.w : Codec Status : %04x\n", IoMem_ReadWord(0xff893c)); + fprintf(fp, "$FF8940.w : GPIO Data Direction : %04x\n", IoMem_ReadWord(0xff8940)); + fprintf(fp, "$FF8942.w : GPIO Data : %04x\n", IoMem_ReadWord(0xff8942)); + fprintf(fp, "\n"); + /* DAC connexion */ switch ((IoMem_ReadWord(0xff8932) >> 13) & 0x3) { - case 0 : + case 0 : /* DAC connexion with DMA Playback */ if ((IoMem_ReadWord(0xff8930) & 0x1) == 1) strcpy(matrixDAC, "OOXO"); @@ -1960,7 +1956,7 @@ void Crossbar_Info(Uint32 dummy) else strcpy(matrixDAC, "HOOO"); break; - case 3 : + case 3 : /* DAC connexion with ADC */ strcpy(matrixDAC, "OOOX"); break; @@ -2058,21 +2054,21 @@ void Crossbar_Info(Uint32 dummy) } /* Display the crossbar Matrix */ - fprintf(stderr, " INPUT\n"); - fprintf(stderr, "External Imp ---%c------%c------%c------%c\n", matrixDAC[0], matrixDMA[0], matrixDSP[0], matrixEXT[0]); - fprintf(stderr, "%s | | | | O = no connexion\n", frqEXT); - fprintf(stderr, " | | | | X = connexion\n"); - fprintf(stderr, "Dsp Transmit ---%c------%c------%c------%c H = Handshake connexion\n", matrixDAC[1], matrixDMA[1], matrixDSP[1], matrixEXT[1]); - fprintf(stderr, "%s | | | |\n", frqDSP); - fprintf(stderr, " | | | | %s\n", dataSize); - fprintf(stderr, "DMA PlayBack ---%c------%c------%c------%c\n", matrixDAC[2], matrixDMA[2], matrixDSP[2], matrixEXT[2]); - fprintf(stderr, "%s | | | | Sound Freq :\n", frqDMA); - fprintf(stderr, " | | | | %s\n", frqSTE); - fprintf(stderr, "ADC ---%c------%c------%c------%c %s\n", matrixDAC[3], matrixDMA[3], matrixDSP[3], matrixEXT[3], frq25Mhz); - fprintf(stderr, "%s | | | | %s\n", frqDAC, frq32Mhz); - fprintf(stderr, " | | | |\n"); - fprintf(stderr, " DAC DMA DSP External OUTPUT\n"); - fprintf(stderr, " Record Record Out\n"); - fprintf(stderr, "\n"); + fprintf(fp, " INPUT\n"); + fprintf(fp, "External Imp ---%c------%c------%c------%c\n", matrixDAC[0], matrixDMA[0], matrixDSP[0], matrixEXT[0]); + fprintf(fp, "%s | | | | O = no connexion\n", frqEXT); + fprintf(fp, " | | | | X = connexion\n"); + fprintf(fp, "Dsp Transmit ---%c------%c------%c------%c H = Handshake connexion\n", matrixDAC[1], matrixDMA[1], matrixDSP[1], matrixEXT[1]); + fprintf(fp, "%s | | | |\n", frqDSP); + fprintf(fp, " | | | | %s\n", dataSize); + fprintf(fp, "DMA PlayBack ---%c------%c------%c------%c\n", matrixDAC[2], matrixDMA[2], matrixDSP[2], matrixEXT[2]); + fprintf(fp, "%s | | | | Sound Freq :\n", frqDMA); + fprintf(fp, " | | | | %s\n", frqSTE); + fprintf(fp, "ADC ---%c------%c------%c------%c %s\n", matrixDAC[3], matrixDMA[3], matrixDSP[3], matrixEXT[3], frq25Mhz); + fprintf(fp, "%s | | | | %s\n", frqDAC, frq32Mhz); + fprintf(fp, " | | | |\n"); + fprintf(fp, " DAC DMA DSP External OUTPUT\n"); + fprintf(fp, " Record Record Out\n"); + fprintf(fp, "\n"); }