示例#1
0
文件: sound_opl.c 项目: Wack0/PCem-X
void opl2_write(uint16_t a, uint8_t v, void *priv)
{
        opl_t *opl = (opl_t *)priv;

        opl_write(0, a, v);
        opl_write(1, a, v);
}
示例#2
0
文件: hmpopl.c 项目: arbruijn/d1xnacl
static void v_setvelvol(hmpopl *h, int v, int subop, int velvol, int nopan, int revpan) {
    int op = v_op[v][subop];
    int volreg = calcvol(h, op, velvol);
	if (nopan) {
		opl_write_both(h, 0x40 + op, volreg);
	} else if ((h->ch_pan[h->v_ch[v]] < 64) ^ revpan)
		opl_write(h, 0, 0x40 + op, volreg);
	else
		opl_write(h, 1, 0x40 + op, volreg);
}
示例#3
0
void lds_setregs(Uint8 reg, Uint8 val)
{
	if(fmchip[reg] == val) return;

	fmchip[reg] = val;
	opl_write(reg, val);
}
示例#4
0
void opl3_write(uint16_t a, uint8_t v, void *priv)
{
        opl_t *opl = (opl_t *)priv;
        
        opl3_update2(opl);
        opl_write(0, a, v);
}
示例#5
0
文件: hmpopl.c 项目: arbruijn/d1xnacl
static void v_alloff(hmpopl *h) {
    int v;
	opl_write(h, 0, 0xbd, 0);
	for (v = 0; v < 9; v++)
		opl_write_both(h, oplri_key + v, h->oplreg_key[v] & 0xdf);
	for (v = 0; v < 9; v++)
		opl_write_both(h, oplri_vol + v_op[v][1], 0xff);
}
示例#6
0
文件: hmpopl.c 项目: arbruijn/d1xnacl
static void opl_clear(hmpopl *h) {
    int v;
	for (v = 0; v < 9; v++) {
		h->oplreg_key[v] = 0;
		opl_write_both(h, oplri_key + v, h->oplreg_key[v]);
	}
	opl_write(h, 0, oplri_drum, 0);
}
示例#7
0
// stripped down from DOSBOX adlib.cpp: Adlib::Module::PortWrite
void dbadlib_PortWrite(AdlibTimer *timer, Bitu port, Bitu val ) {
	if ( port&1 ) {
		if ( !AdlibChip__WriteTimer( timer, reg.normal, val ) ) {
			opl_write( reg.normal, val );
		}
	} else {
		opl_write_index( port, val );
		reg.normal = val & 0x1ff;
	}
}
示例#8
0
文件: hmpopl.c 项目: arbruijn/d1xnacl
static void v_setins(hmpopl *h, int v, struct oplins *ins) {
	int op = v_op[v][0];
	int op1 = v_op[v][1];
	h->op_sustrel[op] = ins->op0_sustrel;
	h->op_sustrel[op1] = ins->op1_sustrel;
	h->op_basevol[op] = ins->op0_vol;
	h->op_basevol[op1] = ins->op1_vol;
	
	opl_write_both(h, oplri_freq + op, ins->op0_freq);
	opl_write_both(h, oplri_vol + op, ins->op0_vol);
	opl_write_both(h, oplri_attdec + op, ins->op0_attdec);
	opl_write_both(h, oplri_sustrel + op, ins->op0_sustrel);
	
	opl_write(h, 0, oplri_chfb + v, (ins->chfb & 0x1f) | 0x20);
	opl_write(h, 1, oplri_chfb + v, (ins->chfb & 0x1f) | 0x10);
	
	opl_write_both(h, oplri_ws + op, ins->op0_ws);
	
	opl_write_both(h, oplri_freq + op1, ins->op1_freq);
	opl_write_both(h, oplri_attdec + op1, ins->op1_attdec);
	opl_write_both(h, oplri_sustrel + op1, ins->op1_sustrel);
	opl_write_both(h, oplri_ws + op1, ins->op1_ws);
}
示例#9
0
文件: hmpopl.c 项目: arbruijn/d1xnacl
static void opl_done(hmpopl *h) {
    opl_write(h, 1, oplri_new, 0);
}
示例#10
0
文件: hmpopl.c 项目: arbruijn/d1xnacl
static void opl_init(hmpopl *h) {
    opl_write(h, 1, oplri_new, 1);
    opl_write(h, 1, oplri_connsel, 0);
}
示例#11
0
文件: hmpopl.c 项目: arbruijn/d1xnacl
static void opl_write_both_rev(hmpopl *h, int reg, int val) {
	opl_write(h, 1, reg, val);
	opl_write(h, 0, reg, val);
}
示例#12
0
void lds_rewind( void )
{
	int i;

	/* init all with 0 */
	tempo_now = 3;
	playing = true; songlooped = false;
	jumping = fadeonoff = allvolume = hardfade = pattplay = posplay = jumppos =	mainvolume = 0;
	memset(channel, 0, sizeof(channel));
	memset(fmchip, 0, sizeof(fmchip));

	/* OPL2 init */
	opl_init();				/* Reset OPL chip */
	opl_write(1, 0x20);
	opl_write(8, 0);
	opl_write(0xbd, regbd);

	for(i = 0; i < 9; i++) {
		opl_write(0x20 + op_table[i], 0);
		opl_write(0x23 + op_table[i], 0);
		opl_write(0x40 + op_table[i], 0x3f);
		opl_write(0x43 + op_table[i], 0x3f);
		opl_write(0x60 + op_table[i], 0xff);
		opl_write(0x63 + op_table[i], 0xff);
		opl_write(0x80 + op_table[i], 0xff);
		opl_write(0x83 + op_table[i], 0xff);
		opl_write(0xe0 + op_table[i], 0);
		opl_write(0xe3 + op_table[i], 0);
		opl_write(0xa0 + i, 0);
		opl_write(0xb0 + i, 0);
		opl_write(0xc0 + i, 0);
	}
}