Skip to content

Commit 8cb8879

Browse files
committed
implement some more audio stuff in 2600 tia. many things still undone
1 parent 1b0f1a5 commit 8cb8879

File tree

1 file changed

+27
-18
lines changed
  • BizHawk.Emulation/Consoles/Atari/2600

1 file changed

+27
-18
lines changed

BizHawk.Emulation/Consoles/Atari/2600/TIA.cs

Lines changed: 27 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)