X-Git-Url: http://4ch.mooo.com/gitweb/?a=blobdiff_plain;f=src%2Fsountest.c;h=8fd5b0258bad32564014a153e8dcf493b598df9b;hb=c7c2bbbf981e929e57c12fcef0dfe7ad7322c4e6;hp=58f1fd912930dc4ec09659ce243f527ce8f0ada5;hpb=6e1e6445d36dc09619dbd22716455fa794998d0d;p=16.git diff --git a/src/sountest.c b/src/sountest.c old mode 100644 new mode 100755 index 58f1fd91..8fd5b025 --- a/src/sountest.c +++ b/src/sountest.c @@ -23,37 +23,114 @@ #include #include "src/lib/16_in.h" -#include "src/lib/16_snd.h" +//#include "src/lib/16_snd.h" +#include "src/lib/doslib/adlib.h" +#include "src/lib/doslib/8254.h" /* 8254 timer */ + +static unsigned int musical_scale[18] = { + 0x1B0, /* E */ + 0x1CA, /* F */ + 0x1E5, /* f# */ + 0x202, /* G */ + 0x220, /* G# */ + 0x241, /* A */ + 0x263, /* A# */ + 0x287, /* B */ + 0x2AE, /* C */ + + 0x2B0, /* E */ + 0x2CA, /* F */ + 0x2E5, /* f# */ + 0x302, /* G */ + 0x320, /* G# */ + 0x341, /* A */ + 0x363, /* A# */ + 0x387, /* B */ + 0x3AE, /* C */ +}; void main(int argc, char near *argv[]) { - static FMInstrument testInst = -{ -0x00, 0x01, /* modulator frequency multiple... 0x20 */ -0x00, 0x00, /* modulator frequency level... 0x40 */ -0xF0, 0xF0, /* modulator attack/decay... 0x60 */ -0x73, 0x73, /* modulator sustain/release... 0x80 */ -0x03, 0x00, /* output waveform distortion 0xE0 */ -0x36, /* feedback algorithm and strength 0xC0 */ -}; + word i; +// static FMInstrument testInst = +//{ +//0x00, 0x01, /* modulator frequency multiple... 0x20 */ +//0x00, 0x00, /* modulator frequency level... 0x40 */ +//0xF0, 0xF0, /* modulator attack/decay... 0x60 */ +//0x73, 0x73, /* modulator sustain/release... 0x80 */ +//0x03, 0x00, /* output waveform distortion 0xE0 */ +//0x36, /* feedback algorithm and strength 0xC0 */ +//}; IN_Startup(); - FMReset(); - FMSetVoice(0, &testInst); - printf("press Z!\n"); + //FMReset(); + //FMSetVoice(0, &testInst); + if(!init_adlib()) + { + printf("Cannot init library\n"); + exit(-5); + } + + if (adlib_fm_voices > 9) + printf("OPL3!\n"); +// vga_bios_set_80x50_text(); + + memset(adlib_fm,0,sizeof(adlib_fm)); + memset(&adlib_reg_bd,0,sizeof(adlib_reg_bd)); + for (i=0;i < adlib_fm_voices;i++) { + struct adlib_fm_operator *f; + f = &adlib_fm[i].mod; + f->ch_a = f->ch_b = f->ch_c = f->ch_d = 1; + f = &adlib_fm[i].car; + f->ch_a = f->ch_b = f->ch_c = f->ch_d = 1; + } + + for (i=0;i < /*adlib_fm_voices*/1;i++) { + struct adlib_fm_operator *f; + + f = &adlib_fm[i].mod; + f->mod_multiple = 1; + f->total_level = 63 - 16; + f->attack_rate = 15; + f->decay_rate = 0; + f->sustain_level = 7; + f->release_rate = 7; + f->f_number = musical_scale[i%18]; + f->octave = 4; + f->key_on = 0; + + f = &adlib_fm[i].car; + f->mod_multiple = 1; + f->total_level = 63 - 16; + f->attack_rate = 15; + f->decay_rate = 0; + f->sustain_level = 7; + f->release_rate = 7; + f->f_number = 0; + f->octave = 0; + f->key_on = 0; + } + + adlib_apply_all(); + + printf("press Z! to noise\npress ESC to quit"); printf("p"); while(!IN_qb(1)) { if(IN_qb(44)) { - printf("e"); - FMKeyOn(0, 0x106, 4); + printf("e"); + adlib_fm[0].mod.key_on = 1; + //FMKeyOn(0, 0x106, 4); } else { - FMKeyOff(0); - } + adlib_fm[0].mod.key_on = 0; + //FMKeyOff(0); + } + adlib_update_groupA0(0,&adlib_fm[0]); } printf("!\n"); + shutdown_adlib(); IN_Shutdown(); -} \ No newline at end of file +}