#include "stdafx.h" #include #include using namespace std; // define the intonations: enum Intonations : unsigned char { I_1 =0x40, I_2 =0x80, I_3 =0xC0 }; unsigned char END=0xFF; // define the Phonemes numbers enum Phonemes : unsigned char { EH3 =0, EH2, EH1, PA0, DT, A1, A2, ZH, AH2, I3, I2, I1, M, N, B, V, CH, SH, Z, AW1, NG, AH1, OO1, OO, L, K, J, H, G, F, D, S, A, AY, Y1, UH3, AH, P, O, I, U, Y, T, R, E, W, AE, AE1, AW2, UH2, UH1, UH, O2, O1, IU, U1, THV, TH, ER, EH, E1, AW, PA1, STOP }; // define the Phonemes text static const char *PhonemeTable[65] = { "EH3","EH2","EH1","PA0","DT" ,"A1" ,"A2" ,"ZH", "AH2","I3" ,"I2" ,"I1" ,"M" ,"N" ,"B" ,"V", "CH" ,"SH" ,"Z" ,"AW1","NG" ,"AH1","OO1","OO", "L" ,"K" ,"J" ,"H" ,"G" ,"F" ,"D" ,"S", "A" ,"AY" ,"Y1" ,"UH3","AH" ,"P" ,"O" ,"I", "U" ,"Y" ,"T" ,"R" ,"E" ,"W" ,"AE" ,"AE1", "AW2","UH2","UH1","UH" ,"O2" ,"O1" ,"IU" ,"U1", "THV","TH" ,"ER" ,"EH" ,"E1" ,"AW" ,"PA1","STOP", 0 }; // define a class to hold one phrase class phrase { char * name; unsigned int size; unsigned char* phn; static int pos; public: phrase(char* pName, unsigned char* pPhn) { name = pName; unsigned char* ptrPhn=pPhn; while(*ptrPhn!=END) { ++ptrPhn; } size = ptrPhn-pPhn; phn = pPhn; } const char* get_name() { return name; } ostream& print_phrase(ostream& stream) { stream << "<" << name << ">"; return stream; } ostream& print_phrase_and_byte(ostream& stream) { unsigned char* ptrPhn=phn; char buffer[16]; stream << name << "\n"; while(*ptrPhn != END) { sprintf(buffer, "%02.02x", *ptrPhn); stream << buffer; ++ptrPhn; } stream << "\n"; return stream; } ostream& out_part_of_roms(ostream& stream); }; ostream& phrase::out_part_of_roms(ostream& stream) { char buffer[16]; if(pos>15) { stream << endl; pos=0; } //stream << hex << size << " "; sprintf(buffer, "%02.02x", size); stream << buffer<< ' '; pos++; unsigned int i=0; while(i15) { stream << endl; pos=0; } //stream << hex << phn[i] << ' '; sprintf(buffer, "%02.02x", phn[i]); stream << buffer << ' '; pos++; i++; } return stream; } // steam print ostream& operator<<(ostream& stream, phrase& obj) { return obj.print_phrase(stream); } int phrase::pos = 6; /* Shows how to match this program with the roms: C:>copy/b wow.x1+wow.x2+wow.x3+wow.x4+wow.x5+wow.x6+wow.x7 wow.all C:>debug wow.all -d 4C60 11AF:5C60 34 11 FD 02 34 8B 1D 83-19 27 09 18 03 2D 26 35 11AF:5C70 2B 18 33 19 03 1D 35 2B-1E 33 0E 23 18 1F 19 26 11AF:5C80 35 2B 3E 83 31 27 1D 22-09 36 28 1C 3B 00 2A 2A 11AF:5C90 28 37 25 15 2D 3A 1D 32-18 3E 83 15 00 09 29 18 11AF:5CA0 2A 20 19 19 3B 2B 32 0F-22 36 28 03 0C 15 09 29 11AF:5CB0 1F 3B 18 1D 3E 83 0A 83-22 36 28 33 2B 27 0D 3E 11AF:5CC0 83 14 83 38 33 03 1E 33-0D 1A 02 0D 12 33 0F 2D 11AF:5CD0 26 35 2B 2B 3E BE 08 15-23 09 29 2F 00 0C 3E 11 - Sample output of this program (should match): 1d 83 19 27 09 18 03 2d 26 35 2b 18 33 19 03 1d 35 2b 1e 33 0e 23 18 1f 19 26 35 2b 3e 83 31 27 1d 22 09 36 28 1c 3b 00 2a 2a 28 37 25 15 2d 3a 1d 32 18 3e 83 15 00 09 29 18 2a 20 19 19 3b 2b 32 0f 22 36 28 03 0c 15 09 29 1f 3b 18 1d 3e 83 0a 83 22 36 28 33 2b 27 0d 3e 83 */ // (debug adds 100h to addresses) // starts at 4B66h that is 19302 dec class wowPhrases { static phrase wowPhrase[]; static int size; public: //wowPhrases() { //size = sizeof(wowPhrase)/sizeof(phrase); //} void yoyo(); ostream& print_hex_codes(ostream& stream); ostream& print(ostream& stream); }; ostream& wowPhrases::print_hex_codes(ostream& stream) { for(int i=0;i