#include #include #include #include #include #include #include #include #include #include #include #include #pragma check_stack(off) #pragma intrinsic(_disable,_enable) #pragma function(inp,outp) #define _GB 2 #define _GF 3 void interrupt far new_0a(void); void (interrupt far *old_0a)(void); union REGS inregs,outregs; struct SREGS segregs; int moux,mouy,right,left,old_l,old_r,old_x,old_y; time_t ltime; FILE *fds,*fdo; char far wind[14000]; long vsync_counter; double myu[8],chaos[8]; unsigned char ref_table[8][3200],midi_fifo[3][10000]; int volume[8],filter[8][12],midich[8],shift[8],range[2][8],tim[2][8],sum[8]; int down[8],program[8],para1[8],note[8],velocity[8],phase[8],counter[8]; int pad_assign[3][8],pad_mark[8],pad_para[8],cond_pad[32]; int on_off[8],data_buffer[30][8],fifo_pointer,read_pointer; int ch,dh,scene,ch_trig,edit_ch,debug; int drums[12]={ 43,41,50,45,48,38,46,44,42,52,49,55 }; int pad_note[8]={ 40,43,47,50,38,42,45,49 }; int pad_cg[8]={ 1,3,5,7,0,2,4,6 }; mouse(flag) int flag; { if(flag==0){inregs.x.ax=2;} else if(flag==1){inregs.x.ax=1;} int86(51,&inregs,&outregs); } getmouse(right,left,x,y) int *right,*left,*x,*y; { inregs.x.ax=3; int86(51,&inregs,&outregs); *right=outregs.x.bx; *left=outregs.x.ax; *x=outregs.x.cx; *y=outregs.x.dx; } setmouse(x,y) int x,y; { inregs.x.ax=4; inregs.x.cx=x; inregs.x.dx=y; int86(51,&inregs,&outregs); } m_style(x,y,buf) int x,y; char *buf; { inregs.x.ax=9; inregs.x.bx=x; inregs.x.cx=y; segread(&segregs); segregs.es=segregs.ds; inregs.x.dx=(int)buf; int86x(51,&inregs,&outregs,&segregs); } m_view(xmin,ymin,xmax,ymax) int xmin,ymin,xmax,ymax; { inregs.x.ax=16; inregs.x.cx=xmin; inregs.x.dx=xmax; int86(51,&inregs,&outregs); inregs.x.ax=17; inregs.x.cx=ymin; inregs.x.dx=ymax; int86(51,&inregs,&outregs); } m_color(color) int color; { inregs.x.ax=18; inregs.x.bx=color; int86(51,&inregs,&outregs); } symbol(x,y,color,str,skip) int x,y,color,skip; unsigned char str[80]; { int i=0; _setcolor(color); while(str[i]!=0){ _gputchar(x,y,str[i++],_GXOR); x += skip; } } int style[]={ 0,0,0,0,0,0,0,0,0x0070,0x0e88,0x1184,0x2142,0x2221,0x9210, 0xe107,0x1108,0x1108,0xe107,0x1108,0x1108,0xe107,0x4108,0x4208, 0xfc07,0,0,0,0,0,0,0,0 }; put_command(x) int x; { while((inp(0xe0d2)&0x40)!=0){} outp(0xe0d2,x); } put_data(x) int x; { while((inp(0xe0d2)&0x40)!=0){} outp(0xe0d0,x); } get_data(){ while((inp(0xe0d2)&0x80)!=0){} return(inp(0xe0d0)); } set_command(x) int x; { put_command(x); while(get_data()!=0xfe){} } msb98_check(){ int i,j; for(i=0;i<100;i++) inp(0xe0d0); j=0; for(i=0;i<10000;i++){ if((inp(0xe0d2)&0x40)==0) j=1; } if(j==0) return(-1); outp(0xe0d2,0xff); j=0; for(i=0;i<32000;i++){ if((inp(0xe0d2)&0x80)==0) j=1; } if(j==0) return(-1); if(inp(0xe0d0)!=0xfe) return(-1); set_command(0xff); set_command(0xac); i=get_data(); if(i!=0x15) return(-1); set_command(0xf0); set_command(0xac); i=get_data(); if(i!=0x28) return(-1); set_command(0xff); if(debug==0){ set_command(0xf0); set_command(0xfd); } set_command(0x3f); for(i=0;i<4096;i++){ for(j=0;j<200;j++){} inp(0xe0d0); } return(0); } vsync_int_start(){ if(old_0a!=NULL) return; old_0a=_dos_getvect(0x0a); _dos_setvect(0x0a,new_0a); outp(0x64,0); _disable(); outp(0x02,inp(0x02)&0xfb); _enable(); signal(SIGINT,SIG_IGN); } vsync_int_stop(){ if(old_0a==NULL) return; _disable(); outp(0x02,inp(0x02)|0x04); _enable(); _dos_setvect(0x0a,old_0a); old_0a=NULL; signal(SIGINT,SIG_DFL); } void interrupt far new_0a(){ outp(0x64,0); vsync_counter++; _disable(); _chain_intr(old_0a); } main(){ int i,j,d,y,z,m_ctr,rsb,dcb,keyno,m_m,m_stat=0; int job_fg[8],job_ct=0,run_flag=0,bar_disp=0; debug=0; /********** [0]=Normal, [1]=Debug ****************/ inregs.x.ax=0; int86(51,&inregs,&outregs); if(outregs.x.ax==0){printf("\nPlease install mouse.sys !\n");exit(0);} m_style(0,8,style); m_color(1); m_view(0,0,639,399); setmouse(580,65); if(msb98_check()==-1){ printf("\n\n\n\n\n\t\t\t[MSB-98] is not found !\n\n"); while(1){ if(kbhit()!=0) break; } exit(0); } for(d=0;d<8;d++){ midich[d]=d; velocity[d]=0; chaos[d]=0.5; phase[d]=0; counter[d]=0; job_fg[d]=0; on_off[d]=0; pad_mark[d]=0; pad_para[d]=0; cond_pad[d]=0; } _setvideomode(_98RESS16COLOR); _displaycursor(_GCURSOROFF); _clearscreen(_GCLEARSCREEN); time(<ime); srand((int)ltime); parameter_file_read(); screen_display(); pad_assign_display(0); edit_ch=0; scene=1; scene_display(); bar_display(0); put_data(0xaf); put_data(98); put_data(11); if(debug!=0){ _settextposition(4,59); printf("### Debug Mode ###"); put_data(0xcc); put_data(23); put_data(0xcd); put_data(51); } fifo_pointer=0; read_pointer=0; mouse(1); getmouse(&old_r,&old_l,&old_x,&old_y); vsync_counter=0; vsync_int_start(); while(1){ if(vsync_counter!=0){ vsync_counter=0; m_ctr++; if(run_flag!=2) put_data(0xf8); for(i=0;i<8;i++) job_fg[i]=1; } if((inp(0xe0d2)&0x80)==0){ d=inp(0xe0d0); if(d>0xef){} else if(d>0x7f){ rsb=d; dcb=0; } else if(rsb==0x9f){ if(dcb==0){ keyno=d; dcb=1; } else{ dcb=0; if(d!=0){ midi_display(rsb,keyno,d,0); pad_event(keyno,d); } } } else if(rsb==0xaf){ if(dcb==0){ keyno=d; dcb=1; } else{ dcb=0; if(scene!=5){ midi_display(rsb,keyno,d,0); } if(keyno==60){ if((d>0)&&(d<10)){ scene=d; scene_display(); } } else if(keyno==61){ if((d>0)&&(d<9)){ if(volume[d-1]!=0){ dh=d-1; chaos_off(); phase[dh]=1; } } } else if(keyno==62) edit_ch=d; else if((keyno>62)&&(keyno<93)){ edit_midi_rx(keyno,d); } else if(keyno==93){ run_flag=2; window_draw(1); } else if(keyno==94){ if(d==0) run_flag=0; else run_flag=3; ch_trig=1; } else if(keyno==95){ if(d==0) bar_disp=0; else{ bar_disp=d; bar_display(d); } } else if((keyno>102)&&(keyno<127)){ edit_midi_rx(keyno,d); } } } else if(rsb==0xbf){ if(dcb==0){ keyno=d; dcb=1; } else{ dcb=0; midi_display(rsb,keyno,d,0); if((keyno==0x7f)&&(d==0)){ run_flag=1; window_draw(1); } } } else if((rsb==0xcf)||(rsb==0xdf)){ if((scene<4)||(scene>5)){ midi_display(rsb,d,0,0); } if((run_flag==1)&&((d==0x7f)||(d==0))){ put_data(0xfa); run_flag=0; window_draw(0); } else if((run_flag==2)&&((d==0x7f)||(d==0))){ run_flag=0; window_draw(0); } else if((run_flag==3)&&((d==0x7f)||(d==0))){ d=ch_trig; if(++ch_trig>4) ch_trig=1; if(volume[d]!=0) phase[d]=1; } else joy_to_grain(rsb,d); } else if((rsb>0xbf)&&(rsb<0xc8)){ y=rsb-0xc0; program[y]=d; point_screen(5,y,1); } else if((rsb>0xaf)&&(rsb<0xb8)){ if(dcb==0){ keyno=d; dcb=1; } else{ dcb=0; midi_display(rsb,keyno,d,0); if(keyno==7){ y=rsb-0xb0; volume[y]=d; point_screen(1,y,1); } } } } else if(job_fg[job_ct]!=0){ ch=job_ct; each_channel(); job_fg[job_ct]=0; job_ct=(job_ct+1)&0x07; } else if(kbhit()!=0){ d=getch(); if(d==0x1b) break; else if((d==0x20)||(d==0x0d)){ if(run_flag==1){ put_data(0xfa); run_flag=0; window_draw(0); } else if(run_flag==2){ run_flag=0; window_draw(0); } else{ for(i=0;i<8;i++){ dh=i; chaos_off(); phase[dh]=0; velocity[dh]=0; } } } else if((d>0x30)&&(d<0x39)){ d=d-0x31; if(volume[d]!=0){ dh=d; chaos_off(); phase[dh]=1; } else{ dh=d; chaos_off(); phase[dh]=0; velocity[dh]=0; } } else if((d=='i')||(d=='I')){ parameters_initial(); screen_display(); pad_assign_display(0); } else if((d=='m')||(d=='M')){ for(i=0;i<8;i++){ dh=i; chaos_off(); phase[dh]=0; velocity[dh]=0; } } else if((d=='b')||(d=='B')){ put_data(0xaf); put_data(98); put_data(11); } } else{ getmouse(&right,&left,&moux,&mouy); if((right==0)&&(left==0)) m_stat=0; else if((old_l==0)&&(left!=0)){ m_stat=1; m_ctr=0; m_m=1; } else if((old_r==0)&&(right!=0)){ m_stat=2; m_ctr=0; m_m=1; } else if(left!=0){ if(m_ctr>10){ m_stat=1; m_ctr=0; m_m=0; } } else if(right!=0){ if(m_ctr>10){ m_stat=2; m_ctr=0; m_m=0;} } if(m_stat==1){ m_stat=0; m_stat_1(m_m); } else if(m_stat==2){ m_stat=0; m_stat_2(m_m); } else{ _settextposition(6,67); printf("(X=%03d,Y=%03d)",moux,mouy); } old_r=right; old_l=left; old_x=moux; old_y=mouy; pad_mark_display(); midi_display(0,0,0,1); } } vsync_int_stop(); mouse(0); for(i=0;i<8;i++){ put_data(0x80+midich[i]); put_data(note[i]); put_data(0); } put_data(0xfc); for(i=0;i<16;i++){ put_data(0xb0+i); put_data(0x7f); put_data(0); } put_command(0xff); parameter_file_write(); for(i=0;i<4096;i++){ for(j=0;j<200;j++){} inp(0xe0d0); } _clearscreen(_GCLEARSCREEN); _displaycursor(_GCURSORON); _setvideomode (_DEFAULTMODE); } m_stat_1(m_m) int m_m; { if((mouy>240)&&(mouy<253)) volume_change(0,m_m); else if((mouy>384)&&(mouy<397)) volume_change(4,m_m); else if((mouy>178)&&(mouy<192)) range_change(0,0); else if((mouy>322)&&(mouy<336)) range_change(4,0); else if((mouy>162)&&(mouy<176)) time_change(0,0); else if((mouy>306)&&(mouy<320)) time_change(4,0); else if((mouy>146)&&(mouy<160)) dwn_prg_change(0,0); else if((mouy>290)&&(mouy<304)) dwn_prg_change(4,0); else if((mouy>114)&&(mouy<128)) myu_change(0,0,m_m); else if((mouy>258)&&(mouy<272)) myu_change(4,0,m_m); else if((mouy>222)&&(mouy<238)) map_change(0,0); else if((mouy>366)&&(mouy<382)) map_change(4,0); else if((mouy>130)&&(mouy<144)) p1_p2_change(0,0); else if((mouy>274)&&(mouy<288)) p1_p2_change(4,0); else if((mouy>29)&&(mouy<51)) pad_change(0,0); else if((mouy>61)&&(mouy<83)) pad_change(4,0); } m_stat_2(m_m) int m_m; { if((mouy>240)&&(mouy<253)) volume_change(0,m_m); else if((mouy>384)&&(mouy<397)) volume_change(4,m_m); else if((mouy>178)&&(mouy<192)) range_change(0,1); else if((mouy>322)&&(mouy<336)) range_change(4,1); else if((mouy>162)&&(mouy<176)) time_change(0,1); else if((mouy>306)&&(mouy<320)) time_change(4,1); else if((mouy>146)&&(mouy<160)) dwn_prg_change(0,1); else if((mouy>290)&&(mouy<304)) dwn_prg_change(4,1); else if((mouy>114)&&(mouy<128)) myu_change(0,1,m_m); else if((mouy>258)&&(mouy<272)) myu_change(4,1,m_m); else if((mouy>222)&&(mouy<238)) map_change(0,1); else if((mouy>366)&&(mouy<382)) map_change(4,1); else if((mouy>130)&&(mouy<144)) p1_p2_change(0,1); else if((mouy>274)&&(mouy<288)) p1_p2_change(4,1); else if((mouy>29)&&(mouy<51)) pad_change(0,1); else if((mouy>61)&&(mouy<83)) pad_change(4,1); } point_screen(mode,y,midi) int mode,y,midi; { int i,j,k,l,xx,yy,xt,yt,xx_b,yy_b; char ss[4]; xt=1+(y%4)*20; yt=4+(y/4)*9; xx=1+(y%4)*160; yy=65+(y/4)*144; if(mode==1){ mouse(0); _setlinestyle(0xffff); _setcolor(0); _rectangle(_GF,xx+1,yy+173,xx+156,yy+189); _setcolor(7); xx_b=xx+6+(volume[y]/2)*143/64; yy_b=yy+176; _moveto(xx+7,yy_b+5); _lineto(xx+150,yy_b+5); _moveto(xx+7,yy_b+6); _lineto(xx+150,yy_b+6); i=0; _moveto(xx+7+11*i,yy_b+2); _lineto(xx+7+11*i,yy_b+9); i=13; _moveto(xx+7+11*i,yy_b+2); _lineto(xx+7+11*i,yy_b+9); for(i=1;i<13;i++){ _moveto(xx+7+11*i,yy_b+3); _lineto(xx+7+11*i,yy_b+8); } _rectangle(_GF,xx_b,yy_b,xx_b+5,yy_b+11); _setcolor(0); _rectangle(_GF,xx_b+1,yy_b+1,xx_b+4,yy_b+10); _setcolor(7); _rectangle(_GF,xx_b+2,yy_b+2,xx_b+3,yy_b+9); if(midi==0){ if((scene>6)&&(y==6)) put_data(0xbb); else put_data(0xb0+midich[y]); put_data(0x07); put_data(volume[y]); } mouse(1); } else if(mode==2){ mouse(0); _setlinestyle(0xffff); _setcolor(0); _rectangle(_GF,xx+13,yy+131,xx+144,yy+157); _setcolor(7); _setlinestyle(0x6666); _rectangle(_GB,xx+12,yy+130,xx+145,yy+158); _setlinestyle(0xffff); for(i=0;i<7;i++){ _rectangle(_GB,xx+12+19*i,yy+158,xx+31+19*i,yy+172); } yy_b=yy+159; xx_b=xx+31; _rectangle(_GF,xx_b-6,yy_b,xx_b+6,yy_b+7); xx_b=xx+50; _rectangle(_GF,xx_b-6,yy_b,xx_b+6,yy_b+7); xx_b=xx+88; _rectangle(_GF,xx_b-6,yy_b,xx_b+6,yy_b+7); xx_b=xx+107; _rectangle(_GF,xx_b-6,yy_b,xx_b+6,yy_b+7); xx_b=xx+126; _rectangle(_GF,xx_b-6,yy_b,xx_b+6,yy_b+7); yy_b=yy+156; _rectangle(_GB,xx+20,yy_b,xx+23,yy_b-filter[y][0]); _rectangle(_GF,xx+29,yy_b,xx+33,yy_b-filter[y][1]); _rectangle(_GB,xx+39,yy_b,xx+42,yy_b-filter[y][2]); _rectangle(_GF,xx+48,yy_b,xx+52,yy_b-filter[y][3]); _rectangle(_GB,xx+58,yy_b,xx+61,yy_b-filter[y][4]); _rectangle(_GB,xx+77,yy_b,xx+80,yy_b-filter[y][5]); _rectangle(_GF,xx+86,yy_b,xx+90,yy_b-filter[y][6]); _rectangle(_GB,xx+96,yy_b,xx+99,yy_b-filter[y][7]); _rectangle(_GF,xx+105,yy_b,xx+109,yy_b-filter[y][8]); _rectangle(_GB,xx+115,yy_b,xx+118,yy_b-filter[y][9]); _rectangle(_GF,xx+124,yy_b,xx+128,yy_b-filter[y][10]); _rectangle(_GB,xx+134,yy_b,xx+137,yy_b-filter[y][11]); mouse(1); } else if((mode==3)&&(midi==0)){ _settextposition(yt+7,xt); printf(" low=%03d high=%03d",range[0][y],range[1][y]); } else if(mode==4){ _settextposition(yt+6,xt); printf(" dly=%03d stp=%03d",tim[0][y],tim[1][y]); } else if(mode==5){ _settextposition(yt+5,xt); printf(" dwn=%03d prg=%03d",down[y],program[y]); if(midi==0){ put_data(0xc0+midich[y]); put_data(program[y]); } } else if(mode==6){ ss[0]='1'+y; ss[1]=0; _settextposition(yt+3,xt); printf(" [%s]=%f <%d>",ss,myu[y],shift[y]+1); } else if(mode==8){ _settextposition(yt+4,xt); printf(" int=%03d vel=%03d",para1[y],velocity[y]); } else if(mode==0){ mouse(0); _setlinestyle(0xffff); _setcolor(0); _rectangle(_GF,xx-1,yy+46,xx+158,yy+190); _setcolor(7); _rectangle(_GB,xx-1,yy+46,xx+158,yy+190); mouse(1); } if((mode==2)||(mode==3)){ sum[y]=0; j=0; for(i=range[0][y];i7)&&(moux<152)) { of=0; x=8; } else if((moux>167)&&(moux<312)) { of=1; x=168; } else if((moux>327)&&(moux<472)) { of=2; x=328; } else if((moux>487)&&(moux<632)) { of=3; x=488; } else return(0); y=off+of; volume[y]=(moux-x)*127/143; point_screen(1,y,0); /* Volume */ } range_change(off,md) int off,md; { int of,y,z; if((moux>15)&&(moux<71)) { of=0; z=0; } else if((moux>80)&&(moux<143)) { of=0; z=1; } else if((moux>175)&&(moux<231)) { of=1; z=0; } else if((moux>240)&&(moux<303)) { of=1; z=1; } else if((moux>335)&&(moux<391)) { of=2; z=0; } else if((moux>400)&&(moux<463)) { of=2; z=1; } else if((moux>495)&&(moux<551)) { of=3; z=0; } else if((moux>560)&&(moux<623)) { of=3; z=1; } else return(0); y=off+of; if((z==0)&&(md==0)){ if(range[0][y]>0) range[0][y]--; } else if((z==0)&&(md==1)){ if(range[0][y]<127) range[0][y]++; } else if((z==1)&&(md==0)){ if(range[1][y]>0) range[1][y]--; } else if((z==1)&&(md==1)){ if(range[1][y]<127) range[1][y]++; } point_screen(3,y,0); /* Range */ } time_change(off,md) int off,md; { int of,y,z; if((moux>15)&&(moux<71)) { of=0; z=0; } else if((moux>87)&&(moux<143)) { of=0; z=1; } else if((moux>175)&&(moux<231)) { of=1; z=0; } else if((moux>247)&&(moux<303)) { of=1; z=1; } else if((moux>335)&&(moux<391)) { of=2; z=0; } else if((moux>407)&&(moux<463)) { of=2; z=1; } else if((moux>495)&&(moux<551)) { of=3; z=0; } else if((moux>567)&&(moux<623)) { of=3; z=1; } else return(0); y=off+of; if((z==0)&&(md==0)){ if(tim[0][y]>0) tim[0][y]--; } else if((z==0)&&(md==1)){ if(tim[0][y]<127) tim[0][y]++; } else if((z==1)&&(md==0)){ if(tim[1][y]>0) tim[1][y]--; } else if((z==1)&&(md==1)){ if(tim[1][y]<127) tim[1][y]++; } point_screen(4,y,0); /* Delay, Step */ } dwn_prg_change(off,md) int off,md; { int of,y,z,zz; if((moux>15)&&(moux<71)) { of=0; z=0; } else if((moux>87)&&(moux<143)) { of=0; z=1; } else if((moux>175)&&(moux<231)) { of=1; z=0; } else if((moux>247)&&(moux<303)) { of=1; z=1; } else if((moux>335)&&(moux<391)) { of=2; z=0; } else if((moux>407)&&(moux<463)) { of=2; z=1; } else if((moux>495)&&(moux<551)) { of=3; z=0; } else if((moux>567)&&(moux<623)) { of=3; z=1; } else return(0); y=off+of; if((z==0)&&(md==0)){ zz=1; if(down[y]>0) down[y]--; } else if((z==0)&&(md==1)){ zz=1; if(down[y]<127) down[y]++; } else if((z==1)&&(md==0)){ zz=0; if(program[y]>0) program[y]--; } else if((z==1)&&(md==1)){ zz=0; if(program[y]<127) program[y]++; } point_screen(5,y,zz); /* Down, Program */ } p1_p2_change(off,md) int off,md; { int of,y,z; if((moux>15)&&(moux<71)) { of=0; z=0; } else if((moux>175)&&(moux<231)) { of=1; z=0; } else if((moux>335)&&(moux<391)) { of=2; z=0; } else if((moux>495)&&(moux<551)) { of=3; z=0; } else return(0); y=off+of; if((z==0)&&(md==0)){ if(para1[y]>0) para1[y]--; } else if((z==0)&&(md==1)){ if(para1[y]<127) para1[y]++; } point_screen(8,y,0); /* Parameters */ } myu_change(off,md,m_m) int off,md,m_m; { int of,y,z; if((moux>15)&&(moux<111)) { of=0; z=0; } else if((moux>120)&&(moux<142)) { of=0; z=1; } else if((moux>175)&&(moux<271)) { of=1; z=0; } else if((moux>280)&&(moux<302)) { of=1; z=1; } else if((moux>335)&&(moux<431)) { of=2; z=0; } else if((moux>440)&&(moux<462)) { of=2; z=1; } else if((moux>495)&&(moux<591)) { of=3; z=0; } else if((moux>600)&&(moux<622)) { of=3; z=1; } else return(0); y=off+of; if((z==0)&&(md==0)){ if(shift[y]==0) myu[y]=myu[y]-0.1; else if(shift[y]==1) myu[y]=myu[y]-0.01; else if(shift[y]==2) myu[y]=myu[y]-0.001; else if(shift[y]==3) myu[y]=myu[y]-0.0001; else if(shift[y]==4) myu[y]=myu[y]-0.00001; else if(shift[y]==5) myu[y]=myu[y]-0.000001; if(myu[y]<1.0) myu[y]=1.0; } else if((z==0)&&(md==1)){ if(shift[y]==0) myu[y]=myu[y]+0.1; else if(shift[y]==1) myu[y]=myu[y]+0.01; else if(shift[y]==2) myu[y]=myu[y]+0.001; else if(shift[y]==3) myu[y]=myu[y]+0.0001; else if(shift[y]==4) myu[y]=myu[y]+0.00001; else if(shift[y]==5) myu[y]=myu[y]+0.000001; if(myu[y]>4.0) myu[y]=4.0; } else if((m_m!=0)&&(z==1)&&(md==0)){ if(shift[y]>0) shift[y]--; } else if((m_m!=0)&&(z==1)&&(md==1)){ if(shift[y]<5) shift[y]++; } point_screen(6,y,0); /* Myu, Shift */ } map_change(off,md) int off,md; { int f,of,y,z,xx,yy; if(off==0) yy=mouy; else yy=mouy-144; if((moux>13)&&(moux<147)) { of=0; xx=moux; } else if((moux>172)&&(moux<307)) { of=1; xx=moux-160; } else if((moux>332)&&(moux<467)) { of=2; xx=moux-320; } else if((moux>492)&&(moux<627)) { of=3; xx=moux-480; } else return(0); if((yy<232)&&(xx>25)&&(xx<38)) z=1; else if((yy<232)&&(xx>44)&&(xx<58)) z=3; else if((yy<232)&&(xx>82)&&(xx<96)) z=6; else if((yy<232)&&(xx>101)&&(xx<115)) z=8; else if((yy<232)&&(xx>120)&&(xx<134)) z=10; else if(xx<32) z=0; else if(xx<51) z=2; else if(xx<70) z=4; else if(xx<89) z=5; else if(xx<108) z=7; else if(xx<127) z=9; else z=11; y=off+of; if(md==0){ if(filter[y][z]>0) filter[y][z]--; } else { if(filter[y][z]<24) filter[y][z]++; } point_screen(2,y,0); /* Note Map */ } screen_display(){ int i,j,k,m0,m1,m2,m3,m4,m5,m6; for(j=0;j<8;j++){ m0=data_buffer[0][j]; /* Myu over point */ m1=data_buffer[1][j]; /* Myu (1) */ m2=data_buffer[2][j]; /* Myu (2) */ m3=data_buffer[3][j]; /* Myu (3) */ m4=data_buffer[4][j]; /* Myu (4) */ m5=data_buffer[5][j]; /* Myu (5) */ m6=data_buffer[6][j]; /* Myu (6) */ myu[j]=(double)m0; myu[j]=myu[j]+0.1*(double)m1; myu[j]=myu[j]+0.01*(double)m2; myu[j]=myu[j]+0.001*(double)m3; myu[j]=myu[j]+0.0001*(double)m4; myu[j]=myu[j]+0.00001*(double)m5; myu[j]=myu[j]+0.000001*(double)m6; shift[j]=data_buffer[7][j]; /* shift */ down[j]=data_buffer[8][j]; /* down */ program[j]=data_buffer[9][j]; /* program */ volume[j]=data_buffer[10][j]; /* volume */ para1[j]=data_buffer[12][j]; /* para(1) */ range[0][j]=data_buffer[14][j]; /* range[0] low */ range[1][j]=data_buffer[15][j]; /* range[1] high */ tim[0][j]=data_buffer[16][j]; /* tim[0] Delay */ tim[1][j]=data_buffer[17][j]; /* tim[1] Step */ for(k=0;k<12;k++){ filter[j][k]=data_buffer[18+k][j]; /* filter[k] */ } } for(i=0;i<8;i++){ point_screen(0,i,0); /* Whole Frame */ point_screen(6,i,0); /* Myu, Shift */ point_screen(8,i,0); /* Parameters */ point_screen(1,i,0); /* Volume */ point_screen(5,i,0); /* Down, Program */ point_screen(4,i,0); /* Delay, Step */ point_screen(3,i,0); /* Range */ point_screen(2,i,0); /* Note Map */ } } scene_display(){ _settextposition(0,0); if(scene==1) printf("y1z2 3 4 5 6 7 8 9 "); else if(scene==2) printf(" 1y2z3 4 5 6 7 8 9 "); else if(scene==3) printf(" 1 2y3z4 5 6 7 8 9 "); else if(scene==4) printf(" 1 2 3y4z5 6 7 8 9 "); else if(scene==5) printf(" 1 2 3 4y5z6 7 8 9 "); else if(scene==6) printf(" 1 2 3 4 5y6z7 8 9 "); else if(scene==7) printf(" 1 2 3 4 5 6y7z8 9 "); else if(scene==8) printf(" 1 2 3 4 5 6 7y8z9 "); else if(scene==9) printf(" 1 2 3 4 5 6 7 8y9z"); } myu_decode(j) int j; { double myu_buff; int i,m; myu_buff=myu[j]; m=(int)myu_buff; myu_buff=10.0*(myu_buff-(double)m); data_buffer[0][j]=m; m=(int)myu_buff; myu_buff=10.0*(myu_buff-(double)m); data_buffer[1][j]=m; m=(int)myu_buff; myu_buff=10.0*(myu_buff-(double)m); data_buffer[2][j]=m; m=(int)myu_buff; myu_buff=10.0*(myu_buff-(double)m); data_buffer[3][j]=m; m=(int)myu_buff; myu_buff=10.0*(myu_buff-(double)m); data_buffer[4][j]=m; m=(int)myu_buff; myu_buff=10.0*(myu_buff-(double)m); data_buffer[5][j]=m; m=(int)myu_buff; myu_buff=10.0*(myu_buff-(double)m); data_buffer[6][j]=m; } myu_encode(j) int j; { int i,m0,m1,m2,m3,m4,m5,m6; m0=data_buffer[0][j]; /* Myu over point */ m1=data_buffer[1][j]; /* Myu (1) */ m2=data_buffer[2][j]; /* Myu (2) */ m3=data_buffer[3][j]; /* Myu (3) */ m4=data_buffer[4][j]; /* Myu (4) */ m5=data_buffer[5][j]; /* Myu (5) */ m6=data_buffer[6][j]; /* Myu (6) */ myu[j]=(double)m0; myu[j]=myu[j]+0.1*(double)m1; myu[j]=myu[j]+0.01*(double)m2; myu[j]=myu[j]+0.001*(double)m3; myu[j]=myu[j]+0.0001*(double)m4; myu[j]=myu[j]+0.00001*(double)m5; myu[j]=myu[j]+0.000001*(double)m6; } edit_midi_rx(sel,data) int sel,data; { int i,j,k,m0,m1,m2,m3,m4,m5,m6; if((sel>102)&&(sel<111)){ k=sel-103; pad_assign[0][k]=data; pad_assign_display(1); return(0); } else if((sel>110)&&(sel<119)){ k=sel-111; pad_assign[1][k]=data; pad_assign_display(1); return(0); } else if((sel>118)&&(sel<127)){ k=sel-119; pad_assign[2][k]=1+(data-1)%7; pad_assign_display(1); return(0); } if((edit_ch<1)||(edit_ch>8)) return(0); j=edit_ch-1; if((sel>63)&&(sel<70)){ k=sel-63; myu_decode(j); data_buffer[k][j]=data; myu_encode(j); point_screen(6,j,0); return(0); } else if((sel>80)&&(sel<93)){ k=sel-81; filter[j][k]=data; point_screen(2,j,0); return(0); } switch(sel){ case (63): myu_decode(j); data_buffer[0][j]=data; /* Myu over point */ myu_encode(j); point_screen(6,j,0); /* Myu, Shift */ break; case (70): shift[j]=data; point_screen(6,j,0); /* Myu, Shift */ break; case (71): down[j]=data; point_screen(5,j,0); /* Down, Program */ break; case (72): program[j]=data; point_screen(5,j,0); /* Down, Program */ break; case (73): volume[j]=data; point_screen(1,j,0); /* Volume */ break; case (75): para1[j]=data; point_screen(8,j,0); /* Parameters */ break; case (77): range[0][j]=data; point_screen(3,j,0); /* Range */ break; case (78): range[1][j]=data; point_screen(3,j,0); /* Range */ break; case (79): tim[0][j]=data; point_screen(4,j,0); /* Delay, Step */ break; case (80): tim[1][j]=data; point_screen(4,j,0); /* Delay, Step */ break; } } midi_display(status,keyno,data,u_d) int status,keyno,data,u_d; { int j,fifo_buff; if(u_d==0){ fifo_buff=fifo_pointer; midi_fifo[0][fifo_pointer]=status; midi_fifo[1][fifo_pointer]=keyno; midi_fifo[2][fifo_pointer]=data; fifo_pointer++; if(fifo_pointer>9999) fifo_pointer=0; if(fifo_pointer==read_pointer) fifo_pointer=fifo_buff; return(0); } if(fifo_pointer==read_pointer) return(0); status=midi_fifo[0][read_pointer]; keyno=midi_fifo[1][read_pointer]; data=midi_fifo[2][read_pointer]; read_pointer++; if(read_pointer>9999) read_pointer=0; if((status>0xaf)&&(status<0xb8)){ _settextposition(0,52); printf("[%02X-%02X-%02X]",status,keyno,data); return(0); } switch(status){ case(0x9f): _settextposition(0,30); printf("[%02X-%02X-%02X]",status,keyno,data); break; case(0xaf): _settextposition(0,41); printf("[%02X-%02X-%02X]",status,keyno,data); break; case(0xbf): _settextposition(0,52); printf("[%02X-%02X-%02X]",status,keyno,data); break; case(0xcf): _settextposition(0,63); printf("[%02X-%02X]",status,keyno); break; case(0xdf): _settextposition(0,71); printf("[%02X-%02X]",status,keyno); break; } } window_draw(d) int d; { int w1x=7,w1y=197,w2x=632,w2y=234; if(d==0){ _settextposition(13,15); printf(" "); mouse(0); _putimage(w1x,w1y,wind,_GPSET); mouse(1); return(0); } mouse(0); _getimage(w1x,w1y,w2x,w2y,wind); _setcolor(0); _rectangle(_GFILLINTERIOR,w1x,w1y,w2x,w2y); _setcolor(7); _rectangle(_GFILLINTERIOR,w1x+4,w1y+4,w2x-4,w2y-4); _setcolor(0); _rectangle(_GFILLINTERIOR,w1x+8,w1y+8,w2x-8,w2y-8); _setcolor(7); mouse(1); _settextposition(13,15); printf("System is waiting ... Plaese Cueing with JOY/KBD !!"); } bar_display(d) int d; { _settextposition(2,61); printf(" "); if(d>127) char_disp(10); else if(d>99) char_disp(1); else char_disp(0); d=d-100*(d/100); char_disp(d/10); char_disp(d%10); printf(" "); } char_disp(x) int x; { if(x==0) printf("O"); else if(x==1) printf("P"); else if(x==2) printf("Q"); else if(x==3) printf("R"); else if(x==4) printf("S"); else if(x==5) printf("T"); else if(x==6) printf("U"); else if(x==7) printf("V"); else if(x==8) printf("W"); else if(x==9) printf("X"); else printf(""); } parameter_file_write(){ double myu_buff; int j,k,m; for(j=0;j<8;j++){ myu_buff=myu[j]; m=(int)myu_buff; myu_buff=10.0*(myu_buff-(double)m); data_buffer[0][j]=m; m=(int)myu_buff; myu_buff=10.0*(myu_buff-(double)m); data_buffer[1][j]=m; m=(int)myu_buff; myu_buff=10.0*(myu_buff-(double)m); data_buffer[2][j]=m; m=(int)myu_buff; myu_buff=10.0*(myu_buff-(double)m); data_buffer[3][j]=m; m=(int)myu_buff; myu_buff=10.0*(myu_buff-(double)m); data_buffer[4][j]=m; m=(int)myu_buff; myu_buff=10.0*(myu_buff-(double)m); data_buffer[5][j]=m; m=(int)myu_buff; myu_buff=10.0*(myu_buff-(double)m); data_buffer[6][j]=m; data_buffer[7][j]=shift[j]; data_buffer[8][j]=down[j]; data_buffer[9][j]=program[j]; data_buffer[10][j]=volume[j]; data_buffer[12][j]=para1[j]; data_buffer[14][j]=range[0][j]; data_buffer[15][j]=range[1][j]; data_buffer[16][j]=tim[0][j]; data_buffer[17][j]=tim[1][j]; for(k=0;k<12;k++){ data_buffer[18+k][j]=filter[j][k]; } } fds=fopen("chaosgen.dat","wb"); for(j=0;j<8;j++){ for(k=0;k<30;k++) fputc(data_buffer[k][j],fds); fputc(0xff,fds); fputc(0xff,fds); } for(j=0;j<8;j++){ for(k=0;k<3;k++) fputc(pad_assign[k][j],fds); fputc(0xff,fds); } fclose(fds); } parameters_initial(){ int j,k; for(j=0;j<8;j++){ data_buffer[0][j]=3; for(k=1;k<13;k++) data_buffer[k][j]=0; data_buffer[14][j]=40; /* range[0] low */ data_buffer[15][j]=80; /* range[1] high */ data_buffer[16][j]=0; /* tim[0] Delay */ for(k=17;k<30;k++) data_buffer[k][j]=10; pad_assign[0][j]=0x20; pad_assign[1][j]=0x20; pad_assign[2][j]=0; } } parameter_file_read(){ int j,k; if((fds=fopen("chaosgen.dat","rb"))==NULL) parameters_initial(); else{ for(j=0;j<8;j++){ for(k=0;k<30;k++) data_buffer[k][j]=fgetc(fds); fgetc(fds); fgetc(fds); } for(j=0;j<8;j++){ for(k=0;k<3;k++) pad_assign[k][j]=fgetc(fds); fgetc(fds); } fclose(fds); } } chaos_on(){ double mpy; chaos[dh]=myu[dh]*chaos[dh]*(1.0-chaos[dh]); mpy=(double)sum[dh]*chaos[dh]; note[dh]=(int)ref_table[dh][(int)mpy]; if((scene>6)&&(dh==6)){ note[dh]=drums[note[dh]%12]; put_data(0x9b); } else put_data(0x90+midich[dh]); put_data(note[dh]); put_data(velocity[dh]); point_screen(8,dh,0); on_off[dh]=1; } chaos_off(){ if(on_off[dh]==1){ if((scene>6)&&(dh==6)) put_data(0x8b); else put_data(0x80+midich[dh]); put_data(note[dh]); put_data(0x00); on_off[dh]=0; } } each_channel(){ int z; dh=ch; if(phase[ch]==0){ counter[ch]=0; } else if(phase[ch]==1){ if(++counter[ch]>tim[0][ch]){ z=40+(rand()%20); chaos[ch]=(double)z/100.0; phase[ch]=2; } } else if(phase[ch]==2){ velocity[ch]=0x7f; chaos_on(); phase[ch]=3; } else if(phase[ch]==3){ counter[ch]=0; chaos_off(); phase[ch]=4; } else if(phase[ch]==4){ if(++counter[ch]>tim[1][ch]) phase[ch]=5; } else if(phase[ch]==5){ if((rand()%127)>(127-para1[ch])){ counter[ch]=0; phase[ch]=4; return(0); } velocity[ch]=velocity[ch]-down[ch]; if(velocity[ch]<1){ velocity[ch]=0; phase[ch]=0; } else { chaos_on(); phase[ch]=3; } } } pad_change(off,md) int off,md; { int of,y,z; if((moux>18)&&(moux<44)) { of=0; z=0; } else if((moux>50)&&(moux<76)) { of=1; z=0; } else if((moux>82)&&(moux<108)) { of=2; z=0; } else if((moux>114)&&(moux<140)) { of=3; z=0; } else if((moux>170)&&(moux<196)) { of=0; z=1; } else if((moux>202)&&(moux<228)) { of=1; z=1; } else if((moux>234)&&(moux<260)) { of=2; z=1; } else if((moux>266)&&(moux<292)) { of=3; z=1; } else if((moux>322)&&(moux<347)) { of=0; z=2; } else if((moux>354)&&(moux<379)) { of=1; z=2; } else if((moux>386)&&(moux<411)) { of=2; z=2; } else if((moux>418)&&(moux<443)) { of=3; z=2; } else return(0); y=off+of; if(z==2){ if(md==0){ if(pad_assign[z][y]>0) pad_assign[z][y]--; } else if(md==1){ if(pad_assign[z][y]<8) pad_assign[z][y]++; } } else{ if(md==0){ if(pad_assign[z][y]>0) pad_assign[z][y]--; } else if(md==1){ if(pad_assign[z][y]<127) pad_assign[z][y]++; } } pad_assign_display(1); if(debug!=0){ if((z==0)&&(y==0)) cg_debug(0); else if((z==0)&&(y==4)) cg_debug(0); else if((z==1)&&(y==0)) cg_debug(1); else if((z==1)&&(y==4)) cg_debug(1); } } pad_assign_display(mode) int mode; { int i,j,xx,yy,k=0; for(j=0;j<3;j++){ if(j==2) k=1; if(mode==0){ mouse(0); _setlinestyle(0xffff); _setcolor(7); _rectangle(_GB,13+152*j,24,145+152*j-k,88); for(i=0;i<8;i++){ xx=32*(i%4)+18+152*j; yy=32*(i/4)+29; _rectangle(_GB,xx,yy,xx+26-k,yy+22); } mouse(1); } for(i=0;i<8;i++){ _settextposition(2*(i/4)+2,4*(i%4)+3+19*j); if(j==2) char_disp(pad_assign[j][i]); else printf("%02X",pad_assign[j][i]); } } } pad_paint(no,mode) int no,mode; { int j,xx,yy,k=0; for(j=0;j<3;j++){ if(j==2) k=1; xx=32*(no%4)+18+152*j; yy=32*(no/4)+29; mouse(0); _setlinestyle(0xffff); if(mode==0){ _setcolor(0); _rectangle(_GF,xx,yy,xx+26-k,yy+22); _setcolor(7); _rectangle(_GB,xx,yy,xx+26-k,yy+22); } else if(mode==1){ _setcolor(7); _rectangle(_GF,xx,yy,xx+26-k,yy+22); } mouse(1); } } pad_mark_display(){ int i; for(i=0;i<8;i++){ if(pad_mark[i]!=0){ pad_mark[i]--; if(pad_mark[i]==0) pad_paint(i,0); } } } pad_event(keyno,velo) int keyno,velo; { int d,z,v,yura; if((keyno>0x64)&&(keyno<0x6d)){ z=keyno-0x65; pad_mark[z]=20; pad_paint(z,1); if((scene<4)||(scene>5)){ put_data(0x99); put_data(pad_assign[0][z]); put_data(velo); put_data(0x9b); put_data(pad_assign[1][z]); put_data(velo); put_data(0x89); put_data(pad_assign[0][z]); put_data(0); put_data(0x8b); put_data(pad_assign[1][z]); put_data(0); } if(pad_assign[2][z]!=0){ d=pad_assign[2][z]-1; if(volume[d]!=0){ dh=d; chaos_off(); phase[dh]=1; } else{ dh=d; chaos_off(); phase[dh]=0; velocity[dh]=0; } } if(scene==2){ if((keyno==0x65)||(keyno==0x68)){ put_data(0xaf); put_data(97); pad_para[0]=(pad_para[0]+3)%5+1; put_data(pad_para[0]); } } else if((scene==4)||(scene==5)){ put_data(0x98); put_data(pad_note[z]); put_data(velo); put_data(0x88); put_data(pad_note[z]); put_data(0); put_data(0xaf); put_data(101); put_data(0x40+8*pad_cg[z]); if(keyno==0x68){ put_data(0xaf); put_data(97); put_data(26); } else if(keyno==0x66){ yura=rand()%100; if(yura<33){ put_data(0xaf); put_data(97); put_data(27); } } } else if(scene>6){ if(scene==7){ pad_para[1]=(pad_para[1]+3)%5+1; if(keyno<0x69) d=pad_para[1]+5; else d=pad_para[1]+10; } else if(scene==8){ pad_para[1]=(pad_para[1]+3)%5+1; if(keyno<0x67) d=pad_para[1]+5; else if(keyno<0x69) d=pad_para[1]+10; else if(keyno<0x6b) d=pad_para[1]+15; else d=pad_para[1]+20; } else{ pad_para[1]=(pad_para[1]+8)%25+1; d=pad_para[1]; } put_data(0xaf); put_data(97); put_data(d); } } else if((keyno>0x22)&&(keyno<0x45)){ if(scene==3){ cond_pad[0]=(cond_pad[0]+1)%3; if(cond_pad[0]==0){ z=54; v=112; } else if(cond_pad[0]==1){ z=70; v=112; } else { z=73; v=112; } put_data(0x9b); put_data(z); put_data(v); put_data(0x8b); put_data(z); put_data(0); cond_pad[1]=(cond_pad[1]+53)%64; put_data(0xaf); put_data(101); put_data(cond_pad[1]); cond_pad[2]=(cond_pad[2]+1)%2; d=6+cond_pad[2]; if(volume[d]!=0){ dh=d; chaos_off(); phase[dh]=1; } } else if(scene>6){ cond_pad[3]=(cond_pad[3]+1)%2; myu_decode(6); data_buffer[1][6]=5+3*cond_pad[3]; myu_encode(6); point_screen(6,6,0); cond_pad[4]=(cond_pad[4]+1)%3; d=scene-6+3*cond_pad[4]; put_data(0xaf); put_data(98); put_data(d); d=3+2*cond_pad[3]; if(volume[d]!=0){ dh=d; chaos_off(); phase[dh]=1; } } } } cg_debug(mode) int mode; { int aa,bb,cc; aa=0x9c+mode; bb=pad_assign[mode][0]; cc=pad_assign[mode][4]; if(mode==0){ _settextposition(6,3); printf("CG(1) Performer : %02X %02X %02X",aa,bb,cc); } else{ _settextposition(6,33); printf("CG(2) Bars & Pipes : %02X %02X %02X",aa,bb,cc); } put_data(aa); put_data(bb); put_data(0x4c); put_data(aa+0x50); put_data(00); put_data(cc); } joy_to_grain(rsb,data) int rsb,data; { if(scene==4){ if((data%2)==0) return(0); if(rsb==0xcf) range[1][1]=64+data/4; else range[0][1]=58-(127-data)/5; point_screen(3,1,1); } else if(scene==5){ if((data%3)!=0) return(0); if(rsb==0xcf){ put_data(0xaf); put_data(19); put_data(data); put_data(29); put_data(127-data); } else{ put_data(0xaf); put_data(14); put_data(data); put_data(24); put_data(data); } } }