• Looking for more optimizations!

    From Harry Potter@3:770/3 to All on Wed Oct 10 07:49:13 2018
    Hi! I have a lot of optimizations for cc65 code at https://sourceforge.net/projects/cc65extra/files/ and am looking for others. Any recommendations? I want to optimize my text adventure.
    --- SoupGate-Win32 v1.05
    * Origin: Agency HUB, Dunedin - New Zealand | Fido<>Usenet Gateway (3:770/3)
  • From Harry Potter@3:770/3 to All on Thu Oct 25 07:24:32 2018
    Following are snippets of the code I'm optimizing:
    --------------------------
    void vLook (void)//char Itm1)
    {
    //static unsigned char i;
    //static char* s;
    static void (*func)();
    //if (Itm1!=-1) {
    if (Itm1!=0xFF) {
    //if (Itm1>=128 && Itm1<160){
    if ((signed char)Itm1<160) {
    //i=
    }
    //if (SearchInv (Player.Inv, Itm1) ||
    // SearchInv (Player.RoomInv[CRoom], Itm1))
    //if (SearchInv2 (Player.Inv) || SearchInv2 (Player.RoomInv[CRoom]))
    if (SearchInvPlayer () || SearchInvRoom ())
    {
    //if (Itm1 < NumItems) {
    //if ((signed char)Itm1>=0) {
    if ((s=hidereadw((void*)&Item[Itm1].Info))==0) {
    printscr ("No help available for that item.");
    return;
    }
    printh (s);
    //printh ((void*)&Item[Itm1].Info);
    //else
    // ;
    //return;
    //}
    }
    else {
    //puts (Message[msgItemNotAvail]);
    printmsg(msgItemNotAvail);
    }
    return;
    }
    CurRoomInv=Player.RoomInv[CRoom];
    CRm=(void*)&Room[CRoom];
    //printh ((char*)hidereadw((void*)&Room[CRoom].Desc));
    printh ((char*)hidereadw((void*)&CRm->Desc));
    //printh (hidereadw(hidereadw((void*)&Room[CRoom].Desc)));
    //puts (Room[CRoom].Desc);
    //printh (&Room[CRoom].Desc);
    //printh (Room[CRoom].RoomHandler);
    func=hidereadw((void*)&CRm->RoomHandler);
    (*func) ();
    printcr();//putchar (13);

    for (i=0; i<8 && (c=CurRoomInv[i])!=0xFF;++i) {
    //printf ("There is a %s here.\n",
    prints ("There is a ");
    printh (hidereadw((void*)&Item[/*CurRoomInv[i]*/c].Name));
    printscr (" here.");
    //printf ("There is a %Hs here.\n",
    // hidereadw((void*)&Item[Player.RoomInv[CRoom][i]].Name));
    }
    if (i) /*{cputc (13); cputc (10);}*/
    printcr();//putchar (13);
    }

    void vLook2 (void)
    {
    Itm1=-1;
    vLook ();

    }

    void vGo ()//char Itm1)
    {
    //static unsigned char s; /* 1 if go successful */
    //static unsigned char Dir;
    //static unsigned char i;
    //s=0;Dir=-1;
    if (Itm1>=160 && Itm1<164) {
    //if ((Itm1&~3)==160) {
    //j = Itm1-iNorth; goto godir;
    j = Itm1&0x0F; //goto godir;
    //if ((i= Room[CRoom].NextRoom[j])==0xFF) {
    if ((i=CRm->NextRoom[j])==0xFF) {
    printmsg(msgCantGoThere); return;
    }
    CRoom = i; goto exitgood;
    }
    switch (Itm1)
    {
    /*case iNorth:
    case iSouth:
    case iEast:
    case iWest:
    j = Itm1-iNorth; goto godir;*/
    case iTeleporter:
    if (!SearchInvRoom(/*,
    iTeleporter*/)) {
    printscr ("There's no teleporter here.");
    return;
    }
    Player.ExitRoom = CRoom;
    CRoom = rTeleporter;
    goto exitgood;
    //default:
    //err:
    //printmsg(msgCantGoThere); return;
    }
    printmsg(msgCantGoThere); return;
    godir:
    /* if ((i= Room[CRoom].NextRoom[j])==0xFF) {
    printmsg(msgCantGoThere); return;
    }
    CRoom = i; //Player.ExitRoom = -1;*/
    exitgood:
    //Player.ExitRoom =Itm1=-1; vLook();
    Player.ExitRoom =-1; vLook2();
    }
    ------------------------------------
    void main (void)
    {
    //static unsigned char c;
    //static char Input [38];
    //static unsigned char Vrb;//, Itm, ItmNum, CurPos;
    //static unsigned char CurPos;//IncPos;
    //static unsigned char i;
    static void (* vfunc) ();
    //printf ("%X\n", &Item[0].Name);
    //cgetc();
    //bordercolor(8); bgcolor (1);
    //textcolor (4);
    brdrcol=8;
    backcol=1;
    //textcol=4;
    /*123456789012345678901234567890123456789*/
    //clrscr ();
    printscr("\f\n\x9cWelcome to \"Adventures on Planet Smir\n"
    "III, Episode 1, v .10\" for the Commo-\n"
    "dore 64 and emulators, created with cc65"
    "by Joseph Rose.\n\n"

    "Type INTRO during the game for\n"
    "instructions.\n\n"
    "Do you want to load a saved game?");
    //do//while(1)
    //{
    //c=tolower(cgetc ());
    //if ((c=tolower(getkey ()))=='y'/* || c=='Y'*/) { /* If user pressed "Y"
    */
    //if ((c=(getkey ()&0x7F))=='y'/* || c=='Y'*/) { /* If user pressed "Y" */
    // c=1; break;
    //} if (c=='n' /*|| c=='N'*/) { /* If user pressed "N" */
    // c=2; break;
    //} if (c=='d' /*|| c=='D'*/) { /* Debug mode */
    // c=3; break;
    //}
    //switch (c) {
    //case 'y': c=1; break;
    //case 'n': c=2; break;
    //case 'd': c=3; break;
    //default: c=0;
    //}
    switch (getkey ())
    {
    case 'd': ++c;
    case 'y': ++c;
    //default: ++c;
    //case 'y': ++c; //break;
    //default: continue;
    }
    //} while (!c);
    InitPlayer ();
    if (c==2) {
    printscr ("Debug mode: Enter room #"); GetInput (Input, 4);
    //CRoom=0;
    for (CurPos=0;Input[CurPos]; ++CurPos)
    {
    //CRoom=CRoom*10+(Input[CurPos]-'0');
    //CRoom=CRoom*10+(Input[CurPos]&0xF);
    CRoom=(((CRoom<<2)+CRoom)<<1)+(Input[CurPos]&0xF);
    }
    //CRoom=atoi(Input);
    }
    //Itm1=-1;
    vLook2 ();
    while (1)
    {
    //bordercolor(0);
    /*Itm1=Vrb=Itm = -1;
    ItmNum =
    CurPos =
    IncPos = 0;*/
    //Itm1=Vrb= -1;
    //CurPos = 0;

    DispScoreBoard();
    if (!GetInput (Input,38)) continue;
    //puts (Input);
    //if (Input[0] == 0) continue;
    //CvtLowerCase (Input);
    //for (; Input[CurPos] == 32; CurPos++);
    //while (Input[CurPos] == 32) ++CurPos;
    //if (Input[0] == 0) continue;
    //bordercolor(1);
    Vrb = FindVerb (/*Input*/);
    //bordercolor(2); cgetc();
    if (Vrb == 0xFF) {
    //Input [CurPos]=0;
    //printf("I don't know how to %s.\n",
    // &Input [CurPos]);
    prints ("I don't know how to ");
    prints (Input);
    printperiod ();
    continue;
    }
    //CurPos = IncPos;
    //bordercolor(3);cgetc();
    //while (Input [CurPos] != 0 && !ItmNum)
    //{
    /*for (; ispunct(Input [CurPos]); CurPos++);*/
    //if ((isspace (Input [CurPos]) /*||
    // ispunct (Input [CurPos])*/) &&
    // Input [CurPos] != '$')
    //{
    // ++CurPos; continue;
    //}

    //do {
    // if (Input[CurPos]==32) {++CurPos; continue;}
    // //c = isNullWord(&Input[CurPos]);
    // //CurPos+=c;
    //} while (c!=0);
    while (Input[CurPos]==32) ++CurPos;
    if (Input[CurPos]) //Itm1=-1; goto runverb;}
    //puts (&Input[CurPos]); cgetc();
    //Itm1 = FindItem (&Input[CurPos]);
    {
    //bordercolor(4);cgetc();
    if ((Itm1 = FindItem (&Input[CurPos]))==0xFF ) {
    //Input [CurPos+IncPos]=0;
    //printf ("I don't know what a %s is.\n",
    // &Input[CurPos]);
    prints ("I don't know what a ");
    prints (&Input[CurPos]);
    //prints (Input+CurPos);
    printscr (" is.");
    //Vrb = -1;
    //goto runverb;
    continue;
    }
    } else Itm1=0xFF;
    //CurPos+=IncPos;
    //Itm1 = c; //ItmNum=1;
    //printc ('<'); printu (Itm1); printscr (">");
    //}
    runverb:
    //if (Vrb != 0xFF) {
    //(*(void*)hidereadw(Verb[Vrb].vdo)) ();
    vfunc=hidereadw((void*)&Verb[Vrb].vdo);
    //printf ("%04.4X %d\n", vfunc, (unsigned) Vrb);
    //bordercolor(5);cgetc();
    (*vfunc) ();
    //}
    }
    }
    -----------------------
    Does anybody have any optimizations I can use? :)
    --- SoupGate-Win32 v1.05
    * Origin: Agency HUB, Dunedin - New Zealand | Fido<>Usenet Gateway (3:770/3)
  • From Janne Johansson@2:221/6 to Harry Potter on Thu Oct 25 21:49:56 2018
    On 2018-10-25 06:24, Harry Potter : All wrote:
    Following are snippets of the code I'm optimizing:
    --------------------------
    void vLook (void)//char Itm1)
    {
       //static unsigned char i;

             (*vfunc) ();
          //}
       }
    }
    -----------------------
    Does anybody have any optimizations I can use?  :)

    It's super hard to read with all that code commented out, since it is
    control flow commands begin taken out. I have no idea if it even
    compiles standalone as it came here, so one couldn't even begin to
    verify that less instructions are being generated for any hyptothetical optimization one would invent.

    Nah, please do better if you want to stir up some interest.
    ---
    * Origin: - nntp://news.fidonet.fi - Lake Ylo - Finland - (2:221/6.0)
  • From Harry Potter@3:770/3 to Janne Johansson on Thu Oct 25 15:57:10 2018
    On Thursday, October 25, 2018 at 2:59:06 PM UTC-4, Janne Johansson wrote:
    It's super hard to read with all that code commented out, since it is
    control flow commands begin taken out. I have no idea if it even
    compiles standalone as it came here, so one couldn't even begin to
    verify that less instructions are being generated for any hyptothetical optimization one would invent.

    Nah, please do better if you want to stir up some interest.

    Please ignore the commented-out code. It's left-overs from debugging. :(
    --- SoupGate-Win32 v1.05
    * Origin: Agency HUB, Dunedin - New Zealand | Fido<>Usenet Gateway (3:770/3)