@@ -430,8 +430,11 @@ public TIA(Atari2600 core)
430430
431431 public struct audio
432432 {
433+ /// <summary>noise/division control</summary>
433434 public byte AUDC ;
435+ /// <summary>frequency divider</summary>
434436 public byte AUDF ;
437+ /// <summary>volume</summary>
435438 public byte AUDV ;
436439
437440 public byte sr4 ;
@@ -463,8 +466,8 @@ public void SyncState(Serializer ser)
463466
464467 public void GetSamples ( short [ ] samples )
465468 {
466- short [ ] moreSamples = new short [ 1000 ] ;
467- for ( int i = 0 ; i < 1000 ; i ++ )
469+ short [ ] moreSamples = new short [ 523 ] ;
470+ for ( int i = 0 ; i < moreSamples . Length ; i ++ )
468471 {
469472 for ( int snd = 0 ; snd < 2 ; snd ++ )
470473 {
@@ -513,7 +516,7 @@ public void GetSamples(short[] samples)
513516 }
514517
515518 }
516- moreSamples [ i ] = ( short ) ( ( ( AUD [ 0 ] . sr4 & 0x08 ) != 0 ) ? 32767 : 0 ) ;
519+ moreSamples [ i ] + = ( short ) ( ( ( AUD [ snd ] . sr4 & 0x08 ) != 0 ) ? AUD [ snd ] . AUDV * 1092 : 0 ) ;
517520 }
518521 /*if (++freqDiv == (audioFreqDiv * 2))
519522 {
@@ -525,21 +528,11 @@ public void GetSamples(short[] samples)
525528 */
526529 }
527530
528- for ( int i = 0 ; i < samples . Length / 2 ; i ++ )
531+ for ( int i = 0 ; i < samples . Length / 2 ; i ++ )
529532 {
530- //samples[i] = 0;
531- //if (audioEnabled)
532- //{
533- samples [ i * 2 ] = moreSamples [ ( int ) ( ( ( double ) moreSamples . Length / ( double ) ( samples . Length / 2 ) ) * i ) ] ;
534- //samples[i * 2 + 1] = moreSamples[(int)((moreSamples.Length / (samples.Length / 2)) * i)];
535- //samples[i] = (short)(Math.Sin(((((32000.0 / (tia.audioFreqDiv+1)) / 60.0) * Math.PI) / samples.Length) * i) * MaxVolume + MaxVolume);
536- //}
537- //else
538- //{
539- // samples[i] = 0;
540- //}
533+ samples [ i * 2 ] = moreSamples [ ( int ) ( ( ( double ) moreSamples . Length / ( double ) ( samples . Length / 2 ) ) * i ) ] ;
534+ samples [ i * 2 + 1 ] = samples [ i * 2 ] ;
541535 }
542- //samples = tia.samples;
543536 }
544537 public void DiscardSamples ( ) { }
545538 public int MaxVolume { get ; set ; }
@@ -1056,11 +1049,27 @@ public void WriteMemory(ushort addr, byte value)
10561049 }
10571050 else if ( maskedAddr == 0x15 ) // AUDC0
10581051 {
1059- AUD [ 0 ] . AUDC = value ;
1052+ AUD [ 0 ] . AUDC = ( byte ) ( value & 15 ) ;
1053+ }
1054+ else if ( maskedAddr == 0x16 ) // AUDC1
1055+ {
1056+ AUD [ 1 ] . AUDC = ( byte ) ( value & 15 ) ;
10601057 }
10611058 else if ( maskedAddr == 0x17 ) // AUDF0
10621059 {
1063- AUD [ 0 ] . AUDF = ( byte ) ( value + 1 ) ;
1060+ AUD [ 0 ] . AUDF = ( byte ) ( ( value & 31 ) + 1 ) ;
1061+ }
1062+ else if ( maskedAddr == 0x18 ) // AUDF1
1063+ {
1064+ AUD [ 1 ] . AUDF = ( byte ) ( ( value & 31 ) + 1 ) ;
1065+ }
1066+ else if ( maskedAddr == 0x19 ) // AUDV0
1067+ {
1068+ AUD [ 0 ] . AUDV = ( byte ) ( value & 15 ) ;
1069+ }
1070+ else if ( maskedAddr == 0x1A ) // AUDV1
1071+ {
1072+ AUD [ 1 ] . AUDV = ( byte ) ( value & 15 ) ;
10641073 }
10651074 else if ( maskedAddr == 0x1B ) // GRP0
10661075 {
0 commit comments