
/* sound bios call */
/**/

#include<stdio.h>
#include<snd.h>
char swork[17000];


int pad(int port)
{
    int a;

    SND_joy_in_2(port, &a);
    return a;
}

int sndinit()
{
    return SND_init(swork);
}

int soff()
{
    return SND_end();
}

int sndclr()
{
    return SND_pcm_sound_delete(0xffffffff);
}

int sndset(char *data)
{
    return SND_pcm_sound_set(data);
}

int toneset(char *data, int ch, int ton)
{
    return SND_inst_write(ch, ton, data);
}

int chgtone(int ch, int ton)
{
    return SND_inst_change(ch, ton);
}

void intenv()
{
    ;
}

int evolume(int ch, int lvol, int rvol)
{
    return SND_elevol_set(ch, lvol, rvol);
}

int keyon(int ch, int pit, int vol)
{
    return SND_key_on(ch, pit, vol);
}

int keyoff(int ch)
{
    return SND_key_off(ch);
}

int pcmplay(char *data, int ch, int pit, int vol)
{
    return SND_pcm_play2(ch, pit, vol, data);
}

int snduse(int sw)
{
    return SND_pcm_mode_set(sw);
}

void mute(int sw)
{
    SND_elevol_mute(sw);
}

int pmbset(char *t, int size)
{
    int i, er = 0;

    for (i = 0; i < 32; i++) {
        er = toneset(t + 8 + i * 128, 64, i);
    }
    i = 0x1008;
    while (i < size) {
        er = sndset(t + i);
        i += *((unsigned int *) (t + i + 12)) + 32;
    }
    return er;
}

void sinit()
{
    sndinit();
    mute(1);
    evolume(1, 127, 127);
}

void play(int c, int x, int vol)
{
    keyoff(c);
    chgtone(c, x);
    keyon(c, 0x3c, vol);
}

void span(int c, int x)
{
    SND_pan_set(c, x);
}

void chpitch(int c, int x)
{
    SND_pitch_change(c, x);
}
