#include #include #include #include #include #include #define ERROR -1 #define STATPT 0xe0d2 #define DATAPT 0xe0d0 #define DRR 0x0040 #define DSR 0x0080 #define PUT 8888 #define GET 9999 #define entry_table 0x0080 #define vector_offset_wave 1 #define vector_offset_w_block 2 #define vector_offset_user_com 10 #define vector_offset_w_bank 16 FILE *fds,*fdo; double wc[512]; char dum[50],name[16]; int num,ww,wk,kn[16],le[16],vol[16],pt; unsigned char wb[512],wd[512]; unsigned char patch[594] = { 0x1C,0x66,0x29,0xEB,0xE1,0xFE,0x37,0x00,0xEB,0xE3,0xFE,0x37, 0x00,0xEB,0xE2,0xFE,0x37,0x00,0xEB,0xE4,0xFE,0x37,0x00,0x1C, 0xA4,0x41,0x1C,0x20,0x41,0xC8,0xF8,0x47,0x7F,0x77,0x7D,0xFE, 0xD6,0x39,0x00,0x70,0xF9,0x70,0xE2,0x28,0xEF,0x76,0x20,0x97, 0x7F,0xAC,0x80,0xC6,0x04,0x3F,0x7F,0x00,0x00,0xF8,0xAF,0xC6, 0x1F,0xF8,0x6F,0xF0,0xC7,0x0B,0xF8,0x6F,0xF8,0xFE,0xD6,0xFE, 0xDF,0x37,0x78,0x00,0x1E,0x20,0xF8,0x6C,0xF0,0xEF,0x78,0x20, 0x6C,0x0F,0x2F,0x77,0x37,0x7A,0x00,0x1E,0x27,0x78,0x6F,0x00, 0xFE,0xD6,0xEF,0x7A,0x6F,0x00,0xCE,0x0C,0x6F,0xC0,0xC6,0x0F, 0x6F,0xD0,0xC6,0x1F,0x37,0x7A,0x01,0x1E,0x37,0x7A,0x00,0x37, 0x78,0x00,0x1E,0xEF,0x77,0x6F,0x0F,0xFE,0xDE,0x3A,0x00,0x68, 0xE3,0xE1,0xFE,0x2E,0xF7,0x20,0xE3,0xE1,0xFE,0x87,0x1E,0xEF, 0x77,0x6F,0x0F,0xFE,0xDE,0x3A,0x00,0x6A,0xE3,0xE3,0xFE,0x2E, 0xF7,0x20,0xE3,0xE3,0xFE,0x87,0x1E,0xA8,0x62,0xCE,0x08,0xA9, 0x62,0xFE,0xD6,0xB1,0x62,0xC8,0x08,0xB0,0x62,0x1C,0x46,0x04, 0x1C,0xBB,0x41,0x27,0xF1,0x1E,0x27,0x5F,0x6C,0xF0,0xA7,0xA7, 0xA7,0x3A,0xC9,0x41,0xF3,0x4A,0xEA,0xC8,0x58,0x11,0x58,0x11, 0x58,0x11,0x41,0x12,0xE9,0x12,0xE9,0x12,0xE9,0x12,0xE9,0x12, 0x7F,0x13,0xDC,0x13,0xE9,0x41,0x8C,0x14,0xF2,0x14,0x3F,0x15, 0x1C,0x16,0xC3,0x16,0x27,0x5F,0xFE,0xAB,0xEB,0x19,0x14,0xC6, 0x6C,0x07,0xA6,0x3A,0xFB,0x41,0xF3,0x4A,0xEA,0xC8,0x2D,0x43, 0x51,0x42,0x0B,0x42,0x2A,0x14,0x33,0x14,0x41,0x14,0x4F,0x14, 0x84,0x14,0xE3,0xE2,0xFE,0x2E,0xE3,0xE1,0xFE,0x67,0xCE,0x10, 0xE3,0xE4,0xFE,0x2E,0xE3,0xE3,0xFE,0x67,0xCE,0x1C,0x30,0xFF, 0x1C,0x48,0x04,0x1E,0x30,0xCF,0x1C,0x48,0x04,0x3A,0x00,0x68, 0xE3,0xE2,0xFE,0x2E,0xF3,0x28,0xE3,0xE2,0xFE,0x87,0x1C,0x48, 0x04,0x1E,0x30,0xDF,0x1C,0x48,0x04,0x3A,0x00,0x6A,0xE3,0xE4, 0xFE,0x2E,0xF3,0x28,0xE3,0xE4,0xFE,0x87,0x1C,0x48,0x04,0x1E, 0x27,0xF1,0xA9,0x62,0xC6,0xFC,0xB1,0x62,0x27,0x60,0xEB,0xE5, 0xFE,0x26,0x27,0xF1,0xA9,0x62,0xC6,0xFC,0xB1,0x62,0x27,0x60, 0xEB,0xE6,0xFE,0x26,0x27,0xF1,0xA9,0x62,0xC6,0xFC,0xB1,0x62, 0x27,0x60,0xEB,0xE7,0xFE,0x26,0x33,0x00,0x1C,0x87,0x42,0x83, 0xFB,0x6F,0x10,0xCE,0xF7,0x1E,0x30,0xFA,0xFB,0x31,0xF9,0x6E, 0xC0,0xE8,0x37,0xF0,0xFB,0x31,0xF9,0x6E,0xD0,0xE8,0x37,0x0F, 0xE3,0xE6,0xFE,0x28,0x31,0x48,0xF8,0x6A,0x02,0x35,0x20,0xF8, 0x12,0x30,0x00,0xF8,0x70,0x31,0x08,0xF8,0x70,0xFC,0x6E,0x90, 0x30,0xFA,0xE2,0x2E,0xFB,0x31,0xE8,0x26,0xFC,0x6C,0x0F,0xFC, 0x6E,0xA0,0xE2,0x2E,0xFB,0x31,0xF9,0x6E,0x10,0xE8,0x26,0xFC, 0x6E,0x10,0xE2,0x2E,0xFB,0x31,0xF9,0x6E,0x20,0xE8,0x26,0xFB, 0x31,0xF9,0x6E,0x30,0xE8,0x37,0x00,0xFB,0x31,0xF9,0x6E,0x40, 0xE8,0x37,0x00,0xE3,0xE5,0xFE,0x2E,0xFB,0x60,0xFB,0x31,0xF9, 0x6E,0x50,0xE8,0x26,0xFB,0x31,0xF9,0x6E,0x60,0xE8,0x37,0x80, 0xFB,0x31,0xF9,0x6E,0x70,0xE8,0x37,0x00,0xFB,0x31,0xF9,0x6E, 0xA0,0xE8,0x37,0x0F,0xFB,0x31,0xF9,0x6E,0xB0,0xE8,0x37,0x0F, 0xFB,0x31,0xF9,0x6E,0xC0,0xE3,0xE7,0xFE,0x2E,0xE8,0x26,0xFB, 0x31,0xF9,0x6E,0xD0,0xE8,0x37,0x0F,0xFB,0x31,0xF9,0x6E,0x90, 0xE8,0x37,0x03,0x1E,0x33,0x00,0x1C,0x38,0x43,0x83,0xFB,0x6F, 0x10,0xCE,0xF7,0x30,0xFA,0xFB,0x31,0xF9,0x6E,0xC0,0xE8,0x37, 0xF0,0xFB,0x31,0xF9,0x6E,0xD0,0xE8,0x37,0x0F,0xFB,0x31,0xF9, 0x6E,0x90,0xE8,0x37,0x00,0x1E }; unsigned char speed_get_7[66] = { 0x27,0xF1,0xA9,0x62,0xC6,0xFC,0xB1,0x62,0xE7,0x60,0x28,0x27,0xF1,0xA9, 0x62,0xC6,0xFC,0xB1,0x62,0xE7,0x60,0x29,0x27,0xF1,0xA9,0x62,0xC6,0xFC, 0xB1,0x62,0xE7,0x60,0x2C,0x27,0xF1,0xA9,0x62,0xC6,0xFC,0xB1,0x62,0xE7, 0x60,0x2D,0x7F,0x00,0x00,0xFE,0xD6,0xAC,0xC6,0xC6,0xFC,0xE0,0x2E,0x2F, 0xFE,0x27,0xF0,0x90,0x7A,0x01,0x00,0xCE,0xF0,0x1E }; unsigned char speed_put_8[68] = { 0x27,0xF1,0xA9,0x62,0xC6,0xFC,0xB1,0x62,0xE7,0x60,0x28,0x27,0xF1,0xA9, 0x62,0xC6,0xFC,0xB1,0x62,0xE7,0x60,0x29,0x27,0xF1,0xA9,0x62,0xC6,0xFC, 0xB1,0x62,0xE7,0x60,0x2C,0x27,0xF1,0xA9,0x62,0xC6,0xFC,0xB1,0x62,0xE7, 0x60,0x2D,0x7F,0x00,0x00,0xFE,0xD6,0x27,0xF1,0xA9,0x62,0xC6,0xFC,0xB1, 0x62,0x27,0x60,0xE8,0x26,0x90,0x7A,0x01,0x00,0xCE,0xEE,0x1E }; unsigned char volume[32] = { 0x7a,0x6a,0x5a,0x5e,0x48,0x4a,0x4c,0x4e, 0x38,0x3a,0x2c,0x3e,0x28,0x2a,0x2c,0x2e, 0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f, 0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f }; unsigned get_entry(x) int x; { unsigned ent,z; z=(unsigned)x; ent=msb_data_get(entry_table)+msb_data_get(entry_table+1)*256; return(msb_data_get(ent+2*z)+msb_data_get(ent+2*z+1)*256); } msb_data_put(add,data) unsigned add; int data; { set_command(0xe3); put_data(add/256); set_command(0xe5); put_data(add%256); set_command(0xeb); put_data(data); } msb_data_get(add) unsigned add; { set_command(0xe3); put_data(add/256); set_command(0xe5); put_data(add%256); set_command(0xae); return(get_data()); } msb_hot_reset(){ inp(DATAPT); inp(DATAPT); inp(DATAPT); set_command(0xff); } put_command(x) int x; { while((inp(STATPT)&DRR)!=0){} outp(STATPT,x); } put_data(x) int x; { while((inp(STATPT)&DRR)!=0){} outp(DATAPT,x); } get_data(){ while((inp(STATPT)&DSR)!=0){} return(inp(DATAPT)); } set_command(x) int x; { put_command(x); while(get_data()!=0xfe){} } turbo_command_set(x,add,count) int x; unsigned add,count; { if(x==PUT) set_command(0xcd); else if(x==GET) set_command(0xcc); put_data(add/256); put_data(add%256); put_data(count/256); put_data(count%256); } wave_draw(z,mode) int z,mode; { unsigned add; int i,j,xx,yy,xxx,yyy,tx,ty,dt,yyyy,d; xx=24+336*(z/8); xxx=xx+285; yy=9+48*(z%8); yyy=yy+43; _setcolor(0); _rectangle(_GFILLINTERIOR,xx,yy,xxx,yyy); _setcolor(7); if(mode==0) _setlinestyle(0x9999); else if(mode==1) _setlinestyle(0xffff); xx=25+336*(z/8); xxx=xx+128; yy=10+48*(z%8); yyy=yy+42; _rectangle(_GBORDER,xx,yy,xxx,yyy); xx=157+336*(z/8); xxx=xx+145; yy=34+48*(z%8); yyy=yy+18; _rectangle(_GBORDER,xx,yy,xxx,yyy); ty=2+3*(z%8); tx=42*(z/8); _settextposition(ty,tx); printf("[%X]",z); _settextposition(ty-1,tx+20); printf(" KN=%02x LE=%02x",kn[z],le[z]); xx=26+336*(z/8); xxx=xx+kn[z]; yy=14+48*(z%8); yyy=yy+4; _setlinestyle(0x5555); _rectangle(_GFILLINTERIOR,xx,yy,xxx,yyy); xx=26+336*(z/8); xxx=2+xx+4*vol[z]; yy=44+48*(z%8); yyy=yy+4; _setlinestyle(0x5555); _rectangle(_GFILLINTERIOR,xx,yy,xxx,yyy); xx=158+336*(z/8); xxx=xx+143*le[z]/127; yy=35+48*(z%8); yyy=yy+16; _setlinestyle(0x5555); _rectangle(_GFILLINTERIOR,xx,yy,xxx,yyy); xx=25+336*(z/8); xxx=xx+128; yy=10+48*(z%8); yyy=yy+42; _setlinestyle(0xffff); for(i=0;i<512;i=i+4){ if(i==0) _moveto(xx,yyy-14); else{ if(wb[i]<128) dt=wb[i]+128; else dt=128-(wb[i]&0x7f); yyyy=yyy-56*dt/256+14; if(yyyy>yyy) yyyy=yyy; _lineto(xx+i/4,yyyy); } if (i==508) _lineto(xx+127,yyy-14); } if(mode==1){ d=le[z]; if(d>127-16) d=127-16; set_command(0xa9); put_data(d); put_data(kn[z]); put_data(volume[vol[z]]); } } wave_calc(ww,wk) int ww,wk; { int i,wl,a,b; double p=3.1415926535,q,r,u,v=0; if(ww<16) wl=512-24*(16-ww); else wl=512-24*(ww-16); for(i=0;i<512;i++){ if(i=0) wd[i]=(char)u; else wd[i]=(char)(128-u); } if(ww<16){ a=(512-wl)/2; b=a+wl; for(i=0;i16){ a=wl/2; b=a+(512-wl); for(i=0;i'){ /* Wave Width +1 */ if(ww!=31){ flg=1; ww++; break; } } else if(c=='<'){ /* Wave Width -1 */ if(ww!=0){ flg=1; ww--; break; } } else if(c=='+'){ /* Wave Type +1 */ if(wk!=31){ flg=1; wk++; break; } } else if(c=='-'){ /* Wave Type -1 */ if(wk!=0){ flg=1; wk--; break; } } else if((c=='d')||(c=='D')){ /* Volume Down */ if(vol[pt]!=0){ vol[pt]--; wave_draw(pt,1); } } else if((c=='u')||(c=='U')){ /* Volume Up */ if(vol[pt]!=31){ vol[pt]++; wave_draw(pt,1); } } } if(flg!=0){ flg=0; goto _loop_loop; } parameter_file_write(); _clearscreen(_GCLEARSCREEN); _displaycursor(_GCURSORON); set_command(0xa8); }