/* all roms start at f000:6000 and end at f000:ffff */ #include #include #include #include #include #include /* starting address of xt rom f000:6000 */ /* add 100h for data, 300h for address */ unsigned int seg=0xF000; unsigned int offst=0x6000; void senddt(); void sendat(); void sendreg(); void sendchk(); void loadfil(); void getdata(); void saydata(); void xlat(); void logo(); int cth,ctl; int reg,oreg,data,ofst,gch; /* variables for functions */ int c,datas,del,h; unsigned int n; int coden[500]; int cnt=0,cnt2=0,result; char i[20]; int erc,res,fbr,fd; char fil[12]; char *res2; main() { FILE *stream; do{ printf("\nWhat is the offset for your synthesizer (hex)? "); scanf("%4x",&offst); } while(offst<=0); reg=7; data=127; /* initialize for output port A*/ senddt(); reg=14; data=0; senddt(); /* -------------------------------------------------*/ /* input the alphnumeric codes for the allophones */ start: do{ cnt=0; clrscr(); logo(); printf("\nLoad file?"); gch=getch(); if(gch==89 || gch==121) {loadfil(); saydata(); clrscr(); logo(); goto end;} getdata(); saydata(); clrscr(); logo(); printf("\nSave the data?"); gch=getch(); if(gch==121 || gch==89){savedata();} clrscr(); logo(); end: printf("\nAgain (Y/N)?"); gch=getch(); } while(gch!=110 && gch!=78); /* end */ } void logo() { gotoxy(1,1); puts("Speech Driver (c) 1.00á 12/22/89 ----- by Larry Battraw"); } /*--------------------Load file data -------------------------*/ void loadfil() { FILE *stream; start2: cnt=0; clrscr(); logo(); printf("\nLoad file name? "); gets(fil); stream=fopen(fil,"rb"); if(stream==NULL) { printf("\nFile Not Found- retry?"); gch=getch(); if(gch==89 || gch==121) goto start2; else goto end2; } /* read in data from file*/ rdta: do{ coden[cnt]=getc(stream); res=coden[cnt]; ++cnt; putch(res); } while(res!=EOF); --cnt; fclose(stream); printf("\nDone."); end2:; } /*-------------------Save data inputted ----------------------*/ savedata() { FILE *stream; cnt2=0; do{ printf("\nFilename?"); gets(fil); } while(strcmpi(fil,"")==1); stream=fopen(fil,"wb"); do{ c=coden[cnt2]; putc(c,stream); ++cnt2; } while(cnt2!=cnt); res=fclose(stream); if(res<0 || res>0) {printf("\n Disk write failed- Disk full?"); } else {printf("\n Done."); } } /*------------------- Input data code ----------------*/ void getdata() { printf("\nType 'qu' to end...\n"); do{ printf("\nAllophone code? --"); gets(i); result=strcmpi(i,"qu"); if(result==0) break; else {xlat(); ++cnt;} /* Translate alpha. codes to equivalent numerics */ } while(cnt<500); } /*---------------------Send and speak xlated code-------------*/ void saydata() { cnt2=0; printf("\n\nSpeaking...."); do{ data=coden[cnt2]; sendchk(); ++cnt2; } while(cnt2!=cnt); data=1; sendchk(); } /*--------------------- translate codes --------------*/ void xlat() { coden[cnt]=0; if(strcmpi(i,"PA1")==0) {coden[cnt]=1;} if(strcmpi(i,"PA2")==0) {coden[cnt]=1;} if(strcmpi(i,"PA3")==0) {coden[cnt]=2;} if(strcmpi(i,"PA4")==0) {coden[cnt]=3;} if(strcmpi(i,"PA5")==0) {coden[cnt]=4;} if(strcmpi(i,"OY")==0) {coden[cnt]=5;} if(strcmpi(i,"AY")==0){coden[cnt]=6;} if(strcmpi(i,"EH")==0){coden[cnt]=7;} if(strcmpi(i,"KK3")==0) {coden[cnt]=8;} if(strcmpi(i,"PP")==0){coden[cnt]=9;} if(strcmpi(i,"JH")==0){coden[cnt]=10;} if(strcmpi(i,"NN1")==0) {coden[cnt]=11;} if(strcmpi(i,"IH")==0){coden[cnt]=12;} if(strcmpi(i,"TT2")==0) {coden[cnt]=13;} if(strcmpi(i,"RR1")==0) {coden[cnt]=14;} if(strcmpi(i,"AX")==0){coden[cnt]=15;} if(strcmpi(i,"MM")==0){coden[cnt]=16;} if(strcmpi(i,"TT1")==0) {coden[cnt]=17;} if(strcmpi(i,"DH1")==0) {coden[cnt]=18;} if(strcmpi(i,"IY")==0){coden[cnt]=19;} if(strcmpi(i,"EY")==0){coden[cnt]=20;} if(strcmpi(i,"DD1")==0) {coden[cnt]=21;} if(strcmpi(i,"UW1")==0) {coden[cnt]=22;} if(strcmpi(i,"AO")==0){coden[cnt]=23;} if(strcmpi(i,"AA")==0){coden[cnt]=24;} if(strcmpi(i,"YY2")==0) {coden[cnt]=25;} if(strcmpi(i,"AE")==0){coden[cnt]=26;} if(strcmpi(i,"HH1")==0) {coden[cnt]=27;} if(strcmpi(i,"BB1")==0) {coden[cnt]=28;} if(strcmpi(i,"TH")==0){coden[cnt]=29;} if(strcmpi(i,"UH")==0){coden[cnt]=30;} if(strcmpi(i,"UW2")==0) {coden[cnt]=31;} if(strcmpi(i,"AW")==0){coden[cnt]=32;} if(strcmpi(i,"DD2")==0) {coden[cnt]=33;} if(strcmpi(i,"GG3")==0) {coden[cnt]=34;} if(strcmpi(i,"VV")==0){coden[cnt]=35;} if(strcmpi(i,"GG1")==0) {coden[cnt]=36;} if(strcmpi(i,"SH")==0){coden[cnt]=37;} if(strcmpi(i,"ZH")==0){coden[cnt]=38;} if(strcmpi(i,"RR2")==0) {coden[cnt]=39;} if(strcmpi(i,"FF")==0){coden[cnt]=40;} if(strcmpi(i,"KK2")==0) {coden[cnt]=41;} if(strcmpi(i,"KK1")==0) {coden[cnt]=42;} if(strcmpi(i,"ZZ")==0){coden[cnt]=43;} if(strcmpi(i,"NG")==0){coden[cnt]=44;} if(strcmpi(i,"LL")==0){coden[cnt]=45;} if(strcmpi(i,"WW")==0){coden[cnt]=46;} if(strcmpi(i,"XR")==0){coden[cnt]=47;} if(strcmpi(i,"WH")==0){coden[cnt]=48;} if(strcmpi(i,"YY1")==0) {coden[cnt]=49;} if(strcmpi(i,"CH")==0){coden[cnt]=50;} if(strcmpi(i,"ER1")==0) {coden[cnt]=51;} if(strcmpi(i,"ER2")==0) {coden[cnt]=52;} if(strcmpi(i,"OW")==0){coden[cnt]=53;} if(strcmpi(i,"DH2")==0) {coden[cnt]=54;} if(strcmpi(i,"SS")==0){coden[cnt]=55;} if(strcmpi(i,"NN2")==0) {coden[cnt]=56;} if(strcmpi(i,"HH2")==0) {coden[cnt]=57;} if(strcmpi(i,"OR")==0){coden[cnt]=58;} if(strcmpi(i,"AR")==0){coden[cnt]=59;} if(strcmpi(i,"YR")==0){coden[cnt]=60;} if(strcmpi(i,"GG2")==0) {coden[cnt]=61;} if(strcmpi(i,"EL")==0){coden[cnt]=62;} if(strcmpi(i,"BB2")==0) {coden[cnt]=63;} if(coden[cnt]==0) {printf("\n Code:%s not found.",i); --cnt;} } /* ------functions on registers -------------------- */ void sendchk() { erc=0; ofst=offst; ofst=ofst+0x100; n=peekb(seg,ofst); ofst=offst; ofst=ofst+0x100+data; n=peekb(seg,ofst); do{ n=peekb(seg,ofst); if(n==65535) ++erc;} while(erc<4); } void senddt() { ofst=offst; /* send register code */ ofst=ofst+0x300+reg; c=peekb(seg,ofst); ofst=offst; /* send data */ ofst=ofst+0x100+data; c=peekb(seg,ofst); } void sendat() { ofst=offst; /* send data */ ofst=ofst+0x100+data; n=peekb(seg,ofst); } void sendreg() { ofst=offst; ofst=ofst+0x300+reg; n=peekb(seg,ofst); }