git @ Cat's Eye Technologies JaC64 / master com / dreamfabric / jac64 / RS6581Waves.java
master

Tree @master (Download .tar.gz)

RS6581Waves.java @masterraw · history · blame

/**
 * This file is a part of JaC64 - a Java C64 Emulator
 * Main Developer: Joakim Eriksson (Dreamfabric.com)
 * Contact: joakime@sics.se
 * Web: http://www.dreamfabric.com/c64
 * ---------------------------------------------------
 */

package com.dreamfabric.jac64;

/**
 * Waveform lookup tables borrowed from the Re-Sid SID emulator
 *
 *
 * Created: Fri Aug 26 22:42:51 2005
 *
 */
public class RS6581Waves {

  // Compressed versions of the resid sampled waves (6581)

  private static int wave6581_PS_src[] = new int[] {
    0xff00, 0x7, 0x7f00, 0x3, 0x3f00, 0x3, 0x3e00, 0x2, 0x1f, 0x7f00, 0x3,
    0x3f00, 0x1, 0x3f00, 0x2f, 0x7f00, 0x37, 0x3f00, 0x3b, 0x1f00, 0x3d,
    0xf00, 0x3e, 0x600, 0x30, 0x3f, 0x100, 0x30, 0x38, 0x3f, 0x3e,
    0x3f, 0x3f, 0x3f, 0x7f00, 0x3, 0x7f00, 0x4f, 0x7f00, 0x57, 0x3f00, 0x5b,
    0x1f00, 0x5d, 0xf00, 0x5e, 0x600, 0x40, 0x5f, 0x100, 0x40, 0x40,
    0x5f, 0x5c, 0x5f, 0x5f, 0x5f, 0x7f00, 0x67, 0x3e00, 0x40, 0x6b,
    0x1d00, 0x40, 0x40, 0x6d, 0x700, 0x40, 0x300, 0x40, 0x100, 0x40,
    0x40, 0x6e, 0x300, 0x40, 0x100, 0x60, 0x60, 0x6f, 0x100, 0x60,
    0x60, 0x6f, 0x60, 0x6f, 0x6f, 0x6f, 0x1f00, 0x40, 0xf00, 0x40,
    0x700, 0x40, 0x300, 0x40, 0x100, 0x40, 0x60, 0x73, 0xf00, 0x40,
    0x700, 0x40, 0x300, 0x40, 0x100, 0x60, 0x60, 0x75, 0x700, 0x60,
    0x300, 0x60, 0x100, 0x60, 0x60, 0x76, 0x300, 0x60, 0x100, 0x60,
    0x60, 0x77, 0x100, 0x70, 0x70, 0x77, 0x70, 0x77, 0x77, 0x77,
    0xf00, 0x60, 0x700, 0x60, 0x300, 0x60, 0x100, 0x60, 0x60, 0x79,
    0x700, 0x60, 0x300, 0x60, 0x100, 0x70, 0x70, 0x7a, 0x300, 0x70,
    0x100, 0x70, 0x70, 0x7b, 0x40, 0x70, 0x70, 0x7b, 0x78, 0x7b,
    0x7b, 0x7b, 0x700, 0x70, 0x300, 0x70, 0x100, 0x70, 0x70, 0x7c,
    0x300, 0x70, 0x40, 0x70, 0x70, 0x7d, 0x40, 0x70, 0x78, 0x7d,
    0x78, 0x7d, 0x7d, 0x7d, 0x100, 0x40, 0x40, 0x78, 0x60, 0x78,
    0x78, 0x7e, 0x60, 0x78, 0x78, 0x7e, 0x7c, 0x7e, 0x7e, 0x7e,
    0x70, 0x7c, 0x7c, 0x7f, 0x7e, 0x7f, 0x7f, 0x7f, 0x7e, 0x7f,
    0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0xff00, 0x7, 0x7f00, 0x3,
    0x3f00, 0x3, 0x3e00, 0x2, 0x1f, 0x7f00, 0x3, 0x3f00, 0x1, 0x3f00, 0x2f,
    0x7f00, 0x37, 0x3f00, 0x3b, 0x1f00, 0x3d, 0xf00, 0x3e, 0x600, 0x30,
    0x3f, 0x100, 0x30, 0x38, 0x3f, 0x3e, 0x3f, 0x3f, 0x3f, 0x7f00, 0x3,
    0x7f00, 0x4f, 0x7f00, 0x57, 0x3f00, 0x5b, 0x1f00, 0x5d, 0xf00, 0x5e,
    0x600, 0x40, 0x5f, 0x100, 0x40, 0x40, 0x5f, 0x5c, 0x5f, 0x5f,
    0x5f, 0x7f00, 0x67, 0x3e00, 0x40, 0x6b, 0x1e00, 0x40, 0x6d, 0x700, 0x40,
    0x300, 0x40, 0x100, 0x40, 0x40, 0x6e, 0x300, 0x40, 0x100, 0x60,
    0x60, 0x6f, 0x100, 0x60, 0x60, 0x6f, 0x60, 0x6f, 0x6f, 0x6f,
    0x1f00, 0x40, 0xf00, 0x40, 0x700, 0x40, 0x300, 0x40, 0x100, 0x40,
    0x60, 0x73, 0xf00, 0x40, 0x700, 0x40, 0x300, 0x40, 0x100, 0x60,
    0x60, 0x75, 0x700, 0x60, 0x300, 0x60, 0x100, 0x60, 0x60, 0x76,
    0x300, 0x60, 0x100, 0x60, 0x60, 0x77, 0x100, 0x70, 0x70, 0x77,
    0x70, 0x77, 0x77, 0x77, 0xf00, 0x60, 0x700, 0x60, 0x300, 0x60,
    0x100, 0x60, 0x60, 0x79, 0x700, 0x60, 0x300, 0x60, 0x100, 0x70,
    0x70, 0x7a, 0x300, 0x70, 0x100, 0x70, 0x70, 0x7b, 0x40, 0x70,
    0x70, 0x7b, 0x78, 0x7b, 0x7b, 0x7b, 0x700, 0x70, 0x300, 0x70,
    0x100, 0x70, 0x70, 0x7c, 0x300, 0x70, 0x40, 0x70, 0x70, 0x7d,
    0x40, 0x70, 0x78, 0x7d, 0x78, 0x7d, 0x7d, 0x7d, 0x100, 0x40,
    0x40, 0x78, 0x60, 0x78, 0x78, 0x7e, 0x60, 0x78, 0x78, 0x7e,
    0x7c, 0x7e, 0x7e, 0x7e, 0x70, 0x7c, 0x7c, 0x7f, 0x7c, 0x7f,
    0x7f, 0x7f, 0x7e, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f
  };

  private static int wave6581_P_Tsrc[] = new int[] {
    0x1fd00, 0x20, 0x38, 0x3f, 0xfb00, 0x40, 0x100, 0x40, 0x40, 0x5f,0x6f00,0x40,
    0x700, 0x40, 0x300, 0x60, 0x100, 0x60, 0x60, 0x6f, 0x1f00, 0x40,
    0xf00, 0x60, 0x700, 0x60, 0x300, 0x60, 0x100, 0x60, 0x70, 0x77,
    0xf00, 0x60, 0x700, 0x60, 0x300, 0x70, 0x40, 0x70, 0x70, 0x7b,
    0x600, 0x40, 0x70, 0x100, 0x40, 0x40, 0x70, 0x60, 0x70, 0x78,
    0x7d, 0x100, 0x40, 0x60, 0x78, 0x60, 0x78, 0x78, 0x7e, 0x70,
    0x7c, 0x7c, 0x7f, 0x7e, 0x7f, 0x7f, 0x7f, 0x7f00, 0x80, 0x3f00, 0x80,
    0x1f00, 0x80, 0xf00, 0x80, 0x700, 0x80, 0x300, 0x80, 0x80, 0x80,
    0x80, 0x9f, 0x3f00, 0x80, 0x1f00, 0x80, 0xf00, 0x80, 0x700, 0x80,
    0x100, 0x80, 0x80, 0x80, 0x80, 0xa0, 0xa0, 0xaf, 0x1f00, 0x80,
    0xd00, 0x80, 0x80, 0x80, 0x300, 0x80, 0x100, 0x80, 0x80, 0xa0,
    0x100, 0x80, 0x80, 0xa0, 0x80, 0xa0, 0xb0, 0xb7, 0x700, 0x80,
    0x300, 0x80, 0x100, 0x80, 0x80, 0xa0, 0x300, 0x80, 0x100, 0x80,
    0x80, 0xa0, 0x100, 0x80, 0x80, 0xa0, 0x80, 0xb0, 0xb0, 0xbb,
    0x300, 0x80, 0x80, 0x80, 0x80, 0xb0, 0x80, 0x80, 0x80, 0xb0,
    0x80, 0xb0, 0xb8, 0xbd, 0x80, 0x80, 0x80, 0xb8, 0xa0, 0xb8,
    0xb8, 0xbe, 0xa0, 0xb8, 0xbc, 0xbf, 0xbe, 0xbf, 0xbf, 0xbf,
    0x3f00, 0xc0, 0x1d00, 0x80, 0x80, 0xc0, 0xb00, 0x80, 0x100, 0x80,
    0x80, 0xc0, 0x300, 0x80, 0x100, 0x80, 0x80, 0xc0, 0x100, 0x80,
    0x80, 0xc0, 0xc0, 0xc0, 0xc0, 0xcf, 0xf00, 0x80, 0x700, 0x80,
    0x300, 0x80, 0x100, 0x80, 0x80, 0xc0, 0x700, 0x80, 0x300, 0x80,
    0x100, 0x80, 0x80, 0xc0, 0x300, 0x80, 0x100, 0x80, 0xc0, 0xc0,
    0x80, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xd0, 0xd7, 0x700, 0x80,
    0x300, 0x80, 0x80, 0x80, 0xc0, 0xc0, 0x100, 0x80, 0x80, 0xc0,
    0x80, 0xc0, 0xc0, 0xc0, 0x80, 0xc0, 0xc0, 0xc0, 0xc0, 0xd0,
    0xd0, 0xdb, 0x100, 0x80, 0x80, 0xc0, 0x80, 0xc0, 0xc0, 0xd0,
    0x80, 0xc0, 0xc0, 0xd0, 0xc0, 0xd0, 0xd8, 0xdd, 0xc0, 0xc0,
    0xc0, 0xd0, 0xc0, 0xd8, 0xd8, 0xde, 0xc0, 0xd8, 0xdc, 0xdf,
    0xdc, 0xdf, 0xdf, 0xdf, 0xf00, 0x80, 0x700, 0x80, 0x300, 0x80,
    0x80, 0xc0, 0xc0, 0xe0, 0x700, 0x80, 0x100, 0x80, 0x80, 0xc0,
    0x80, 0xc0, 0xc0, 0xe0, 0x100, 0x80, 0x80, 0xc0, 0x80, 0xc0,
    0xc0, 0xe0, 0x80, 0xc0, 0xc0, 0xe0, 0xc0, 0xe0, 0xe0, 0xe7,
    0x300, 0x80, 0x100, 0x80, 0x80, 0xc0, 0x100, 0x80, 0x80, 0xc0,
    0x80, 0xc0, 0xc0, 0xe0, 0x100, 0x80, 0x80, 0xc0, 0x80, 0xc0,
    0xc0, 0xe0, 0xc0, 0xc0, 0xc0, 0xe0, 0xe0, 0xe0, 0xe0, 0xeb,
    0x80, 0x80, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xe0, 0xc0, 0xe0,
    0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xed, 0xc0, 0xe0, 0xe0, 0xe0,
    0xe0, 0xe8, 0xe8, 0xee, 0xe0, 0xe8, 0xec, 0xef, 0xec, 0xef,
    0xef, 0xef, 0x300, 0x80, 0x80, 0x80, 0x80, 0xc0, 0x80, 0x80,
    0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xf0, 0x80, 0xc0, 0xc0, 0xc0,
    0xc0, 0xe0, 0xe0, 0xf0, 0xc0, 0xe0, 0xe0, 0xf0, 0xe0, 0xf0,
    0xf0, 0xf3, 0x80, 0xc0, 0xc0, 0xe0, 0xc0, 0xe0, 0xe0, 0xf0,
    0xc0, 0xe0, 0xe0, 0xf0, 0xe0, 0xf0, 0xf0, 0xf5, 0xe0, 0xe0,
    0xe0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf6, 0xf0, 0xf0, 0xf4, 0xf7,
    0xf4, 0xf7, 0xf7, 0xf7, 0xc0, 0xc0, 0xc0, 0xe0, 0xe0, 0xe0,
    0xe0, 0xf0, 0xe0, 0xe0, 0xe0, 0xf8, 0xf0, 0xf8, 0xf8, 0xf9,
    0xe0, 0xf0, 0xf0, 0xf8, 0xf0, 0xf8, 0xf8, 0xfa, 0xf0, 0xf8,
    0xf8, 0xfb, 0xf8, 0xfb, 0xfb, 0xfb, 0xe0, 0xf0, 0xf0, 0xf8,
    0xf0, 0xf8, 0xfc, 0xfc, 0xf8, 0xfc, 0xfc, 0xfd, 0xfc, 0xfd,
    0xfd, 0xfd, 0xf8, 0xfc, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe,
    0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe,
    0xfe, 0xfe, 0xfc, 0xf8, 0xfd, 0xfd, 0xfd, 0xfc, 0xfd, 0xfc,
    0xfc, 0xf8, 0xfc, 0xfc, 0xfc, 0xf0, 0xf8, 0xf0, 0xf0, 0xe0,
    0xfb, 0xfb, 0xfb, 0xf8, 0xfb, 0xf8, 0xf8, 0xf0, 0xfa, 0xf8,
    0xf8, 0xf0, 0xf8, 0xf0, 0xf0, 0xe0, 0xf9, 0xf8, 0xf8, 0xf0,
    0xf8, 0xf0, 0xe0, 0xe0, 0xf0, 0xe0, 0xe0, 0xe0, 0xe0, 0xc0,
    0xc0, 0xc0, 0xf7, 0xf7, 0xf7, 0xf4, 0xf7, 0xf4, 0xf0, 0xf0,
    0xf6, 0xf0, 0xf0, 0xf0, 0xf0, 0xe0, 0xe0, 0xe0, 0xf5, 0xf0,
    0xf0, 0xe0, 0xf0, 0xe0, 0xe0, 0xc0, 0xf0, 0xe0, 0xe0, 0xc0,
    0xe0, 0xc0, 0xc0, 0x80, 0xf3, 0xf0, 0xf0, 0xe0, 0xf0, 0xe0,
    0xe0, 0xc0, 0xf0, 0xe0, 0xe0, 0xc0, 0xc0, 0xc0, 0xc0, 0x80,
    0xf0, 0xe0, 0xc0, 0xc0, 0xc0, 0xc0, 0x80, 0x80, 0xc0, 0x80,
    0x80, 0x80, 0x80, 0x300, 0xef, 0xef, 0xef, 0xec, 0xef, 0xec,
    0xe8, 0xe0, 0xee, 0xe8, 0xe8, 0xe0, 0xe0, 0xe0, 0xe0, 0xc0,
    0xed, 0xe8, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xc0, 0xe0, 0xe0,
    0xc0, 0xc0, 0xc0, 0xc0, 0x80, 0x80, 0xeb, 0xe0, 0xe0, 0xe0,
    0xe0, 0xc0, 0xc0, 0xc0, 0xe0, 0xc0, 0xc0, 0x80, 0xc0, 0x80,
    0x80, 0x100, 0xe0, 0xc0, 0xc0, 0x80, 0xc0, 0x80, 0x80, 0x100, 0xc0,
    0x80, 0x80, 0x100, 0x80, 0x300, 0xe7, 0xe0, 0xe0, 0xc0, 0xe0,
    0xc0, 0xc0, 0x80, 0xe0, 0xc0, 0xc0, 0x80, 0xc0, 0x80, 0x80,
    0x100, 0xe0, 0xc0, 0xc0, 0x80, 0xc0, 0x80, 0x80, 0x100, 0x80,
    0x80, 0x600, 0xe0, 0xc0, 0xc0, 0x80, 0x80, 0x300, 0x80, 0x700, 0x80,
    0xf00, 0xdf, 0xdf, 0xdf, 0xdc, 0xdf, 0xdc, 0xd8, 0xc0, 0xde,
    0xd8, 0xd8, 0xc0, 0xd8, 0xc0, 0xc0, 0xc0, 0xdd, 0xd8, 0xd0,
    0xc0, 0xd0, 0xc0, 0xc0, 0x80, 0xd0, 0xc0, 0xc0, 0x80, 0xc0,
    0x80, 0x80, 0x100, 0xdb, 0xd0, 0xd0, 0xc0, 0xc0, 0xc0, 0xc0,
    0x80, 0xc0, 0xc0, 0xc0, 0x80, 0xc0, 0x80, 0x80, 0x100, 0xc0,
    0xc0, 0x80, 0x80, 0x80, 0x300, 0x80, 0x700, 0xd7, 0xd0, 0xc0,
    0xc0, 0xc0, 0xc0, 0xc0, 0x80, 0xc0, 0xc0, 0x80, 0x100, 0x80,
    0x300, 0xc0, 0x80, 0x80, 0x100, 0x80, 0x300, 0x80, 0x700, 0xc0,
    0x80, 0x80, 0x100, 0x80, 0x300, 0x80, 0x700, 0x80, 0xf00, 0xcf,
    0xc0, 0xc0, 0xc0, 0xc0, 0x80, 0x80, 0x100, 0xc0, 0x80, 0x80,
    0x100, 0x80, 0x300, 0xc0, 0x80, 0x80, 0x100, 0x80, 0xb00, 0xc0,
    0x80, 0x80, 0x1d00, 0xc0, 0x80, 0x3e00, 0xbf, 0xbf, 0xbf, 0xbe,
    0xbf, 0xbc, 0xbc, 0xa0, 0xbe, 0xbc, 0xb8, 0xa0, 0xb8, 0xa0,
    0x80, 0x80, 0xbd, 0xb8, 0xb0, 0x80, 0xb0, 0x80, 0x80, 0x80,
    0xb0, 0x80, 0x80, 0x80, 0x80, 0x300, 0xbb, 0xb0, 0xb0, 0x80,
    0xa0, 0x80, 0x80, 0x100, 0xa0, 0x80, 0x80, 0x100, 0x80, 0x300, 0xa0,
    0x80, 0x80, 0x100, 0x80, 0x300, 0x80, 0x700, 0xb7, 0xb0, 0xa0,
    0x80, 0xa0, 0x80, 0x80, 0x100, 0xa0, 0x80, 0x80, 0x100, 0x80,
    0x300, 0x80, 0x80, 0x80, 0xd00, 0x80, 0x80, 0x1e00, 0xaf, 0xa0,
    0xa0, 0x80, 0x80, 0x80, 0x80, 0x100, 0x80, 0x80, 0x600, 0x80,
    0xf00, 0x80, 0x1f00, 0x80, 0x3f00, 0x9f, 0x90, 0x80, 0x80, 0x80,
    0x300, 0x80, 0x700, 0x80, 0xf00, 0x80, 0x1f00, 0x80, 0x3f00, 0x80,
    0x7f00, 0x7f, 0x7f, 0x7f, 0x7e, 0x7f, 0x7c, 0x7c, 0x70, 0x7e,
    0x7c, 0x78, 0x60, 0x78, 0x60, 0x60, 0x100, 0x7d, 0x78, 0x78,
    0x60, 0x70, 0x40, 0x40, 0x100, 0x70, 0x40, 0x600, 0x7b, 0x78,
    0x70, 0x40, 0x70, 0x40, 0x200, 0x60, 0x700, 0x60, 0xf00, 0x77,
    0x70, 0x70, 0x100, 0x60, 0x300, 0x60, 0x700, 0x60, 0xf00, 0x40,
    0x1f00, 0x6f, 0x60, 0x60, 0x100, 0x60, 0x300, 0x40, 0x700, 0x40,
    0x6f00, 0x5f, 0x58, 0x40, 0x100, 0x40, 0x300, 0x40, 0xf700, 0x3f,
    0x3c, 0x30, 0x1fd00};

  private static int wave6581__STsrc[] = new int[] {
    0x7e00, 0x3, 0x3, 0x3f00, 0x1, 0x3c00, 0x7, 0x7, 0x7, 0x7, 0x3f00, 0x1,
    0x3e00, 0x3, 0x3, 0x3f00, 0x1, 0x3800, 0xe, 0xe, 0xe, 0xe,
    0xf, 0xf, 0xf, 0xf, 0x7e00, 0x3, 0x3, 0x3f00, 0x1, 0x3c00, 0x7,
    0x7, 0x7, 0x7, 0x3f00, 0x1, 0x3e00, 0x3, 0x3, 0x3f00, 0x1,
    0x3000, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1e,
    0x1e, 0x1e, 0x1e, 0x1f, 0x1f, 0x3f, 0x3f, 0x7e00, 0x3, 0x3,
    0x3f00, 0x1, 0x3c00, 0x7, 0x7, 0x7, 0x7, 0x3f00, 0x1, 0x3e00, 0x3,
    0x3, 0x3f00, 0x1, 0x3800, 0xe, 0xe, 0xe, 0xe, 0xf, 0xf,
    0xf, 0x1f, 0x7e00, 0x3, 0x3, 0x3f00, 0x1, 0x3c00, 0x7, 0x7,
    0x7, 0x7, 0x3f00, 0x1, 0x3e00, 0x3, 0x3, 0x3f00, 0x1, 0x2000, 0x38,
    0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38,
    0x38, 0x38, 0x38, 0x38, 0x38, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c,
    0x3c, 0x3c, 0x3c, 0x3e, 0x3e, 0x3f, 0x3f, 0x7f, 0x7f, 0x7f,
    0x7f, 0x7e00, 0x3, 0x3, 0x3f00, 0x1, 0x3c00, 0x7, 0x7, 0x7,
    0x7, 0x3f00, 0x1, 0x3e00, 0x3, 0x3, 0x3f00, 0x1, 0x3800, 0xe,
    0xe, 0xe, 0xe, 0xf, 0xf, 0xf, 0xf, 0x7e00, 0x3, 0x3,
    0x3f00, 0x1, 0x3c00, 0x7, 0x7, 0x7, 0x7, 0x3f00, 0x1, 0x3e00, 0x3,
    0x3, 0x3f00, 0x1, 0x3000, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c,
    0x1c, 0x1c, 0x1e, 0x1e, 0x1e, 0x1e, 0x1f, 0x1f, 0x3f, 0x3f,
    0x7e00, 0x3, 0x3, 0x3f00, 0x1, 0x3c00, 0x7, 0x7, 0x7, 0x7,
    0x3f00, 0x1, 0x3e00, 0x3, 0x3, 0x3f00, 0x1, 0x3800, 0xe, 0xe,
    0xe, 0xe, 0xf, 0xf, 0xf, 0x1f, 0x7e00, 0x3, 0x3, 0x3f00, 0x1,
    0x3c00, 0x7, 0x7, 0x7, 0x7, 0x3f00, 0x1, 0x3e00, 0x3, 0x3,
    0x3f00, 0x1, 0x2000, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38,
    0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x3c,
    0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3e, 0x3e, 0x3f,
    0x3f, 0x7f, 0x7f, 0x7f, 0x7f
  };

  private static int wave6581_PSTsrc[] = new int[] {
    0x3ff00, 0x3f, 0x3ef00, 0x20, 0x700, 0x30, 0x300, 0x78, 0x78, 0x7e, 0x7f,
    0x7f, 0x3ff00, 0x3f, 0x3ef00, 0x20, 0x700, 0x30, 0x300, 0x78, 0x78,
    0x7e, 0x7f, 0x7f
  };



  public static int wave6581_PS_[] = new int[4096];
  public static int wave6581_P_T[] = new int[4096];
  public static int wave6581_PST[] = new int[4096];
  public static int wave6581__ST[] = new int[4096];

  static {
    initWaves();
  }

  public static void initWaves() {
    unpack(wave6581_PS_src, wave6581_PS_);
    unpack(wave6581_P_Tsrc, wave6581_P_T);
    unpack(wave6581_PSTsrc, wave6581_PST);
    unpack(wave6581__STsrc, wave6581__ST);
  }

  private static void unpack(int[] src, int[] dst) {
    int wavePos = 0;
    for (int i = 0, n = src.length; i < n; i++) {
      if (src[i] > 0xff) {
	// Skip a bunch of zeroes!
	for (int j = 0, m = (src[i] >> 8); j < m; j++) {
	  dst[wavePos++] = 0;
	}
	//	wavePos += src[i] >> 8;
      } else {
	// Make them 12 bits samples
	dst[wavePos++] = (src[i] << 4);
      }
    }
    System.out.println("Unpacked: " + wavePos + " data");
  }

  public static void main(String[] args) {
    initWaves();
    int[] wave = wave6581__ST;
    for (int i = 0, n = 4096; i < n; i++) {
      System.out.print("0x" + Integer.toString(wave[i], 16));
      if (i % 8 == 7) System.out.print("\n" + Integer.toString(i + 1, 16) + "\t");
      else System.out.print(",");
    }
  }

}