OpenCores
URL https://opencores.org/ocsvn/thor/thor/trunk

Subversion Repositories thor

[/] [thor/] [trunk/] [software/] [emuThor/] [source/] [clsDisassem.cpp] - Diff between revs 30 and 32

Go to most recent revision | Show entire file | Details | Blame | View Log

Rev 30 Rev 32
Line 1... Line 1...
#include "stdafx.h"
#include "stdafx.h"
#include "insn.h"
#include "insn.h"
#include "clsSystem.h"
 
#include "clsDisassem.h"
#include "clsDisassem.h"
 
 
extern clsSystem system1;
extern clsSystem system1;
 
 
std::string clsDisassem::SprName(int rg)
std::string clsDisassem::SprName(int rg)
Line 12... Line 11...
        buf[0] = '\0';
        buf[0] = '\0';
        if (rg < 16)
        if (rg < 16)
                sprintf(buf, "p%d", rg);
                sprintf(buf, "p%d", rg);
        else if (rg < 32)
        else if (rg < 32)
                sprintf(buf, "c%d", rg-16);
                sprintf(buf, "c%d", rg-16);
        else if (rg < 48) {
        else if (rg < 64) {
                switch(rg) {
                switch(rg) {
                case 32:        sprintf(buf, "zs"); break;
                case 32:        sprintf(buf, "zs"); break;
                case 33:        sprintf(buf, "ds"); break;
                case 33:        sprintf(buf, "ds"); break;
                case 34:        sprintf(buf, "es"); break;
                case 34:        sprintf(buf, "es"); break;
                case 35:        sprintf(buf, "fs"); break;
                case 35:        sprintf(buf, "fs"); break;
Line 30... Line 29...
                case 43:        sprintf(buf, "fs.lmt"); break;
                case 43:        sprintf(buf, "fs.lmt"); break;
                case 44:        sprintf(buf, "gs.lmt"); break;
                case 44:        sprintf(buf, "gs.lmt"); break;
                case 45:        sprintf(buf, "hs.lmt"); break;
                case 45:        sprintf(buf, "hs.lmt"); break;
                case 46:        sprintf(buf, "ss.lmt"); break;
                case 46:        sprintf(buf, "ss.lmt"); break;
                case 47:        sprintf(buf, "cs.lmt"); break;
                case 47:        sprintf(buf, "cs.lmt"); break;
 
                case 50:        sprintf(buf, "tick"); break;
 
                case 51:        sprintf(buf, "lc"); break;
 
                case 52:        sprintf(buf, "pregs"); break;
 
                case 60:        sprintf(buf, "bir"); break;
 
                default:        sprintf(buf, "???"); break;
                }
                }
        }
        }
        return std::string(buf);
        return std::string(buf);
}
}
 
 
Line 54... Line 58...
        case PLTU: return "PLTU";
        case PLTU: return "PLTU";
        default: return "????";
        default: return "????";
        }
        }
}
}
 
 
 
int clsDisassem::DefaultSeg(int rg)
 
{
 
        switch(rg) {
 
        case 27:
 
        case 28:
 
        case 29:
 
        case 30:
 
        case 31:        return 6;
 
        default:        return 1;
 
        }
 
}
 
 
 
std::string clsDisassem::SegName(int sg)
 
{
 
        switch(sg) {
 
        case 0:  return "zs";
 
        case 1: return "ds";
 
        case 2: return "es";
 
        case 3: return "fs";
 
        case 4: return "gs";
 
        case 5: return "hs";
 
        case 6: return "ss";
 
        case 7: return "cs";
 
        default: return "<err>";
 
        }
 
}
 
 
 
std::string clsDisassem::TLBRegName(int rg)
 
{
 
        switch(rg) {
 
        case 0:  return "Wired";
 
        case 1: return "Index";
 
        case 2: return "Random";
 
        case 3: return "PageSize";
 
        case 4: return "VirtPage";
 
        case 5: return "PhysPage";
 
        case 6: return "ASID";
 
        case 7: return "DMA";
 
        case 8: return "IMA";
 
        case 9: return "PTA";
 
        case 10: return "PTC";
 
        default: return "???";
 
        }
 
}
 
 
// Compute d[Rn] address info
// Compute d[Rn] address info
std::string clsDisassem::dRn(int b1, int b2, int b3, int *Ra, int *Sg, __int64 *disp)
std::string clsDisassem::dRn(int b1, int b2, int b3, int *Ra, int *Sg, __int64 *disp)
{
{
        char buf[100];
        char buf[100];
 
 
Line 70... Line 119...
                *disp |= 0xFFFFFFFFFFFFFE00LL;
                *disp |= 0xFFFFFFFFFFFFFE00LL;
        if (imm_prefix) {
        if (imm_prefix) {
                *disp &= 0xFF;
                *disp &= 0xFF;
                *disp |= imm;
                *disp |= imm;
        }
        }
 
        if (*Sg != DefaultSeg(*Ra))
 
                sprintf(buf, "%s:$%I64X[r%d]", SegName(*Sg).c_str(), *disp, *Ra);
 
        else
        sprintf(buf, "$%I64X[r%d]", *disp, *Ra);
        sprintf(buf, "$%I64X[r%d]", *disp, *Ra);
        return std::string(buf);
        return std::string(buf);
}
}
 
 
 
// Compute d[Rn] address info
 
std::string clsDisassem::ndx(int b1, int b2, int b3, int *Ra, int *Rb, int *Rt, int *Sg, int *Sc)
 
{
 
        char buf[100];
 
 
 
        if (!Ra || !Rb || !Rt || !Sg)
 
                return "<error>";
 
        *Ra = b1 & 0x3f;
 
        *Rb = (b1 >> 6) | ((b2 & 0x0f) << 2);
 
        *Rt = ((b2 & 0xF0) >> 4) | ((b3 & 3) << 4);
 
        *Sg = (b3 >> 5) & 7;
 
        *Sc = (b3 >> 2) & 3;
 
        if (*Sg != DefaultSeg(*Ra))
 
                sprintf(buf, "%s:[r%d+r%d", SegName(*Sg).c_str(), *Ra, *Rb);
 
        else
 
                sprintf(buf, "[r%d+r%d", *Ra, *Rb);
 
        if (*Sc != 1)
 
                sprintf(&buf[strlen(buf)], "*%d]", (1 << *Sc));
 
        else
 
                sprintf(&buf[strlen(buf)], "]");
 
        return std::string(buf);
 
}
 
 
 
std::string clsDisassem::mem(std::string mne, int ad, int *nb)
 
{
 
        int b1, b2, b3;
 
        int Ra,Rt,Sg;
 
        __int64 disp;
 
        std::string str;
 
        char buf[100];
 
 
 
        buf[0] = '\0';
 
        b1 = ReadByte(ad);
 
        ad++;
 
        b2 = ReadByte(ad);
 
        ad++;
 
        b3 = ReadByte(ad);
 
        ad++;
 
        Rt = ((b2 & 0xF) << 2) | (( b1 >> 6) & 3);
 
        str = dRn(b1,b2,b3,&Ra,&Sg,&disp);
 
        sprintf(&buf[strlen(buf)]," %s r%d,%s", mne.c_str(), Rt, str.c_str());
 
        if (nb) *nb = 5;
 
        imm_prefix = false;
 
        return std::string(buf);
 
}
 
 
 
std::string clsDisassem::memndx(std::string mne, int ad, int *nb)
 
{
 
        int b1, b2, b3;
 
        int Ra,Rb,Rt,Sg,Sc;
 
        __int64 disp;
 
        std::string str;
 
        char buf[100];
 
 
 
        buf[0] = '\0';
 
        b1 = ReadByte(ad);
 
        ad++;
 
        b2 = ReadByte(ad);
 
        ad++;
 
        b3 = ReadByte(ad);
 
        ad++;
 
        str = ndx(b1,b2,b3,&Ra,&Rb,&Rt,&Sg,&Sc);
 
        sprintf(&buf[strlen(buf)]," %s r%d,%s", mne.c_str(), Rt, str.c_str());
 
        if (nb) *nb = 5;
 
        imm_prefix = false;
 
        return std::string(buf);
 
}
 
 
std::string clsDisassem::Disassem(int ad, int *nb)
std::string clsDisassem::Disassem(int ad, int *nb)
{
{
        int byt;
        int byt;
        int opcode, func;
        int opcode, func;
        int n;
        int n;
        __int64 val, disp;
        __int64 val, disp;
        int rv;
        int rv;
        int b1, b2, b3, b4;
        int b1, b2, b3, b4;
        int Ra,Rb,Rc,Rt,Sprn,Sg;
        int Ra,Rb,Rc,Rt,Sprn,Sg,Sc,Sz;
        int Cr,Ct;
        int Cr,Ct,Tn;
        int Pn;
        int Pn;
        char buf[100];
        char buf[100];
        std::string str;
        std::string str;
 
 
        buf[0] = '\0';
        buf[0] = '\0';
Line 232... Line 352...
                sprintf(&buf[strlen(buf)], "TST p%d,r%d", Pn, Ra);
                sprintf(&buf[strlen(buf)], "TST p%d,r%d", Pn, Ra);
                if (nb) *nb = 3;
                if (nb) *nb = 3;
                imm_prefix = false;
                imm_prefix = false;
                return std::string(buf);
                return std::string(buf);
        }
        }
 
        if ((opcode & 0xF0)==0x10) {
 
                b1 = system1.ReadByte(ad);
 
                ad++;
 
                b2 = system1.ReadByte(ad);
 
                ad++;
 
                Ra = b1 & 0x3f;
 
                Rb = ((b2 << 2) | (b1 >> 6)) & 0x3f;
 
                Pn = opcode & 0x0f;
 
                switch(b2 >> 4) {
 
                case 0:  sprintf(&buf[strlen(buf)], " CMP p%d,r%d,r%d", Pn, Ra, Rb); break;
 
                case 1: sprintf(&buf[strlen(buf)], " FCMP.S p%d,r%d,r%d", Pn, Ra, Rb); break;
 
                case 2: sprintf(&buf[strlen(buf)], " FCMP.D p%d,r%d,r%d", Pn, Ra, Rb); break;
 
                }
 
                if (nb) *nb = 4;
 
                imm_prefix = false;
 
                return std::string(buf);
 
        }
        if ((opcode & 0xF0)==0x20) {
        if ((opcode & 0xF0)==0x20) {
                b1 = system1.ReadByte(ad);
                b1 = system1.ReadByte(ad);
                ad++;
                ad++;
                b2 = system1.ReadByte(ad);
                b2 = system1.ReadByte(ad);
                ad++;
                ad++;
Line 257... Line 394...
                b1 = system1.ReadByte(ad);
                b1 = system1.ReadByte(ad);
                ad++;
                ad++;
                disp = (b1 << 4) | (opcode & 0xF);
                disp = (b1 << 4) | (opcode & 0xF);
                if (disp & 0x800)
                if (disp & 0x800)
                        disp |= 0xFFFFFFFFFFFFF000LL;
                        disp |= 0xFFFFFFFFFFFFF000LL;
                sprintf(&buf[strlen(buf)], " BR $%LLX", disp + cpu1.pc);
                sprintf(&buf[strlen(buf)], " BR $%LLX", disp + ad);
                if (nb) *nb = 3;
                if (nb) *nb = 3;
                imm_prefix = false;
                imm_prefix = false;
                return std::string(buf);
                return std::string(buf);
        }
        }
 
 
        switch(opcode) {
        switch(opcode) {
 
 
 
        case _2ADDUI:
 
                b1 = system1.ReadByte(ad);
 
                ad++;
 
                b2 = system1.ReadByte(ad);
 
                ad++;
 
                b3 = system1.ReadByte(ad);
 
                ad++;
 
                Ra = b1 & 0x3f;
 
                Rt = ((b2 & 0xf) << 2) | (b1 >> 6);
 
                val = (b3 << 4) | (b2 >> 4);
 
                sprintf(&buf[strlen(buf)], " _2ADDUI r%d,r%d,#$%I64X", Rt, Ra, val);
 
                if (nb) *nb = 5;
 
                imm_prefix = false;
 
                return std::string(buf);
 
 
 
        case _4ADDUI:
 
                b1 = system1.ReadByte(ad);
 
                ad++;
 
                b2 = system1.ReadByte(ad);
 
                ad++;
 
                b3 = system1.ReadByte(ad);
 
                ad++;
 
                Ra = b1 & 0x3f;
 
                Rt = ((b2 & 0xf) << 2) | (b1 >> 6);
 
                val = (b3 << 4) | (b2 >> 4);
 
                sprintf(&buf[strlen(buf)], " _4ADDUI r%d,r%d,#$%I64X", Rt, Ra, val);
 
                if (nb) *nb = 5;
 
                imm_prefix = false;
 
                return std::string(buf);
 
 
 
        case _8ADDUI:
 
                b1 = system1.ReadByte(ad);
 
                ad++;
 
                b2 = system1.ReadByte(ad);
 
                ad++;
 
                b3 = system1.ReadByte(ad);
 
                ad++;
 
                Ra = b1 & 0x3f;
 
                Rt = ((b2 & 0xf) << 2) | (b1 >> 6);
 
                val = (b3 << 4) | (b2 >> 4);
 
                sprintf(&buf[strlen(buf)], " _8ADDUI r%d,r%d,#$%I64X", Rt, Ra, val);
 
                if (nb) *nb = 5;
 
                imm_prefix = false;
 
                return std::string(buf);
 
 
 
        case _16ADDUI:
 
                b1 = system1.ReadByte(ad);
 
                ad++;
 
                b2 = system1.ReadByte(ad);
 
                ad++;
 
                b3 = system1.ReadByte(ad);
 
                ad++;
 
                Ra = b1 & 0x3f;
 
                Rt = ((b2 & 0xf) << 2) | (b1 >> 6);
 
                val = (b3 << 4) | (b2 >> 4);
 
                sprintf(&buf[strlen(buf)], " _16ADDUI r%d,r%d,#$%I64X", Rt, Ra, val);
 
                if (nb) *nb = 5;
 
                imm_prefix = false;
 
                return std::string(buf);
 
 
        case ADDUI:
        case ADDUI:
                b1 = system1.ReadByte(ad);
                b1 = system1.ReadByte(ad);
                ad++;
                ad++;
                b2 = system1.ReadByte(ad);
                b2 = system1.ReadByte(ad);
                ad++;
                ad++;
                b3 = system1.ReadByte(ad);
                b3 = system1.ReadByte(ad);
                ad++;
                ad++;
                Ra = b1 & 0x3f;
                Ra = b1 & 0x3f;
                Rt = ((b2 & 0xf) << 2) | (b1 >> 6);
                Rt = ((b2 & 0xf) << 2) | (b1 >> 6);
                val = (b3 << 4) | (b2 >> 4);
                val = (b3 << 4) | (b2 >> 4);
                sprintf(&buf[strlen(buf)], " ADDUI r%d,r%d,#$%08LLX", Rt, Ra, val);
                sprintf(&buf[strlen(buf)], " ADDUI r%d,r%d,#$%I64X", Rt, Ra, val);
                if (nb) *nb = 5;
                if (nb) *nb = 5;
                imm_prefix = false;
                imm_prefix = false;
                return std::string(buf);
                return std::string(buf);
 
 
        case ADDUIS:
        case ADDUIS:
Line 288... Line 485...
                b2 = system1.ReadByte(ad);
                b2 = system1.ReadByte(ad);
                ad++;
                ad++;
                Ra = b1 & 0x3f;
                Ra = b1 & 0x3f;
                Rt = Ra;
                Rt = Ra;
                val = (b2 << 2) | (b1 >> 6);
                val = (b2 << 2) | (b1 >> 6);
                sprintf(&buf[strlen(buf)], " ADDUI r%d,r%d,#$%08LLX", Rt, Ra, val);
                sprintf(&buf[strlen(buf)], " ADDUI r%d,r%d,#$%I64X", Rt, Ra, val);
                if (nb) *nb = 4;
                if (nb) *nb = 4;
                imm_prefix = false;
                imm_prefix = false;
                return std::string(buf);
                return std::string(buf);
 
 
 
        case ANDI:
 
                b1 = system1.ReadByte(ad);
 
                ad++;
 
                b2 = system1.ReadByte(ad);
 
                ad++;
 
                b3 = system1.ReadByte(ad);
 
                ad++;
 
                Ra = b1 & 0x3f;
 
                Rt = ((b2 & 0xf) << 2) | (b1 >> 6);
 
                val = (b3 << 4) | (b2 >> 4);
 
                sprintf(&buf[strlen(buf)], " ANDI r%d,r%d,#$%I64X", Rt, Ra, val);
 
                if (nb) *nb = 5;
 
                imm_prefix = false;
 
                return std::string(buf);
 
 
 
        case BITI:
 
                b1 = system1.ReadByte(ad);
 
                ad++;
 
                b2 = system1.ReadByte(ad);
 
                ad++;
 
                b3 = system1.ReadByte(ad);
 
                ad++;
 
                Ra = b1 & 0x3f;
 
                Pn = ((b2 & 0x3) << 2) | (b1 >> 6);
 
                val = (b3 << 4) | (b2 >> 4);
 
                sprintf(&buf[strlen(buf)], " BITI p%d,r%d,#$%I64X", Pn, Ra, val);
 
                if (nb) *nb = 5;
 
                imm_prefix = false;
 
                return std::string(buf);
 
 
 
        case CLI:
 
                sprintf(&buf[strlen(buf)], " CLI");
 
                if (nb) *nb = 2;
 
                imm_prefix = false;
 
                return std::string(buf);
 
 
 
        case DIVI:
 
                b1 = system1.ReadByte(ad);
 
                ad++;
 
                b2 = system1.ReadByte(ad);
 
                ad++;
 
                b3 = system1.ReadByte(ad);
 
                ad++;
 
                Ra = b1 & 0x3f;
 
                Rt = ((b2 & 0xf) << 2) | (b1 >> 6);
 
                val = (b3 << 4) | (b2 >> 4);
 
                sprintf(&buf[strlen(buf)], " DIVI r%d,r%d,#$%I64X", Rt, Ra, val);
 
                if (nb) *nb = 5;
 
                imm_prefix = false;
 
                return std::string(buf);
 
 
 
        case DIVUI:
 
                b1 = system1.ReadByte(ad);
 
                ad++;
 
                b2 = system1.ReadByte(ad);
 
                ad++;
 
                b3 = system1.ReadByte(ad);
 
                ad++;
 
                Ra = b1 & 0x3f;
 
                Rt = ((b2 & 0xf) << 2) | (b1 >> 6);
 
                val = (b3 << 4) | (b2 >> 4);
 
                sprintf(&buf[strlen(buf)], " DIVUI r%d,r%d,#$%I64X", Rt, Ra, val);
 
                if (nb) *nb = 5;
 
                imm_prefix = false;
 
                return std::string(buf);
 
 
 
        case EORI:
 
                b1 = system1.ReadByte(ad);
 
                ad++;
 
                b2 = system1.ReadByte(ad);
 
                ad++;
 
                b3 = system1.ReadByte(ad);
 
                ad++;
 
                Ra = b1 & 0x3f;
 
                Rt = ((b2 & 0xf) << 2) | (b1 >> 6);
 
                val = (b3 << 4) | (b2 >> 4);
 
                sprintf(&buf[strlen(buf)], " EORI r%d,r%d,#$%I64X", Rt, Ra, val);
 
                if (nb) *nb = 5;
 
                imm_prefix = false;
 
                return std::string(buf);
 
 
        case JSR:
        case JSR:
                b1 = system1.ReadByte(ad);
                b1 = system1.ReadByte(ad);
                ad++;
                ad++;
                b2 = system1.ReadByte(ad);
                b2 = system1.ReadByte(ad);
                ad++;
                ad++;
Line 313... Line 591...
                        if (disp & 0x800000LL)
                        if (disp & 0x800000LL)
                                disp |= 0xFFFFFFFFFF000000LL;
                                disp |= 0xFFFFFFFFFF000000LL;
                }
                }
                if (nb) *nb = 6;
                if (nb) *nb = 6;
                imm_prefix = false;
                imm_prefix = false;
                sprintf(&buf[strlen(buf)], " JSR c%d,$%LLX[c%d]", Ct, disp, Cr);
                sprintf(&buf[strlen(buf)], " JSR c%d,$%I64X[c%d]", Ct, disp, Cr);
 
                if (Cr==15)
 
                        sprintf(&buf[strlen(buf)], "  ($%I64X)", ad-6 + disp);
 
                return std::string(buf);
 
 
 
        case JSRI:
 
                b1 = system1.ReadByte(ad);
 
                ad++;
 
                b2 = system1.ReadByte(ad);
 
                ad++;
 
                b3 = system1.ReadByte(ad);
 
                ad++;
 
                Ra = b1 & 0x3f;
 
                Ct = (b1 >> 6) | (b2 << 2) & 0xc0;
 
                Sz = (b2 >> 2) & 3;
 
                Sg = b3 >> 5;
 
                disp = ((b3 & 0x1f) << 4) | (b2 >> 4);
 
                if (disp & 0x800LL)
 
                        disp |= 0xFFFFFFFFFFFFFE00LL;
 
                if (imm_prefix) {
 
                        disp &= 0xFFLL;
 
                        disp = imm | disp;
 
                }
 
                if (nb) *nb = 5;
 
                imm_prefix = false;
 
                switch(Sz) {
 
                case 1: sprintf(&buf[strlen(buf)], " JCI c%d,%s:$%I64X[r%d]", Ct, SegName(Sg).c_str(), disp, Ra); break;
 
                case 2: sprintf(&buf[strlen(buf)], " JHI c%d,%s:$%I64X[r%d]", Ct, SegName(Sg).c_str(), disp, Ra); break;
 
                case 3: sprintf(&buf[strlen(buf)], " JWI c%d,%s:$%I64X[r%d]", Ct, SegName(Sg).c_str(), disp, Ra); break;
 
                }
                return std::string(buf);
                return std::string(buf);
 
 
        case JSRS:
        case JSRS:
                b1 = system1.ReadByte(ad);
                b1 = system1.ReadByte(ad);
                ad++;
                ad++;
Line 336... Line 643...
                }
                }
                if (nb) *nb = 5;
                if (nb) *nb = 5;
                imm_prefix = false;
                imm_prefix = false;
                sprintf(&buf[strlen(buf)], " JSR c%d,$%LLX", Ct, disp);
                sprintf(&buf[strlen(buf)], " JSR c%d,$%LLX", Ct, disp);
                if (Cr==15)
                if (Cr==15)
                        sprintf(&buf[strlen(buf)], "[c%d]  ($%LLX)", Cr, cpu1.pc + disp);
                        sprintf(&buf[strlen(buf)], "[c%d]  ($%LLX)", Cr, ad-5 + disp);
                else
                else
                        sprintf(&buf[strlen(buf)], "[c%d]", Cr);
                        sprintf(&buf[strlen(buf)], "[c%d]", Cr);
                return std::string(buf);
                return std::string(buf);
 
 
 
        case JSRR:
 
                b1 = system1.ReadByte(ad);
 
                ad++;
 
                Cr = b1 >> 4;
 
                Ct = b1 & 0xF;
 
                if (nb) *nb = 3;
 
                imm_prefix = false;
 
                sprintf(&buf[strlen(buf)], " JSR c%d,[c%d]", Ct, Cr);
 
                return std::string(buf);
 
 
        case LDI:
        case LDI:
                b1 = system1.ReadByte(ad);
                b1 = system1.ReadByte(ad);
                ad++;
                ad++;
                b2 = system1.ReadByte(ad);
                b2 = system1.ReadByte(ad);
                ad++;
                ad++;
Line 377... Line 694...
                sprintf(&buf[strlen(buf)], " LDIS %s,#$%08LLX", SprName(Sprn).c_str(), val);
                sprintf(&buf[strlen(buf)], " LDIS %s,#$%08LLX", SprName(Sprn).c_str(), val);
                if (nb) *nb = 4;
                if (nb) *nb = 4;
                imm_prefix = false;
                imm_prefix = false;
                return std::string(buf);
                return std::string(buf);
 
 
        case LH:
        case LB:        return mem("LB", ad, nb);
                b1 = ReadByte(ad);
        case LBX:       return memndx("LBX", ad, nb);
                ad++;
        case LBUX:      return memndx("LBUX", ad, nb);
                b2 = ReadByte(ad);
        case LVB:       return mem("LVB", ad, nb);
                ad++;
        case LBU:       return mem("LBU", ad, nb);
                b3 = ReadByte(ad);
        case LC:        return mem("LC", ad, nb);
                ad++;
        case LCX:       return memndx("LCX", ad, nb);
                Rt = ((b2 & 0xF) << 2) | (( b1 >> 6) & 3);
        case LCUX:      return memndx("LCUX", ad, nb);
                str = dRn(b1,b2,b3,&Ra,&Sg,&disp);
        case LVC:       return mem("LVC", ad, nb);
                sprintf(&buf[strlen(buf)]," LH r%d,%s", Rt, str.c_str());
        case LCU:       return mem("LCU", ad, nb);
                if (nb) *nb = 5;
        case LH:        return mem("LH", ad, nb);
                imm_prefix = false;
        case LHX:       return memndx("LHX", ad, nb);
                return std::string(buf);
        case LHUX:      return memndx("LHUX", ad, nb);
 
        case LVH:       return mem("LVH", ad, nb);
 
        case LHU:       return mem("LHU", ad, nb);
 
        case LW:        return mem("LW", ad, nb);
 
        case LWX:       return memndx("LWX", ad, nb);
 
        case LVW:       return mem("LVW", ad, nb);
 
        case LVWAR:     return mem("LVWAR", ad, nb);
 
 
        case LLA:
        case LLA:
                b1 = ReadByte(ad);
                b1 = ReadByte(ad);
                ad++;
                ad++;
                b2 = ReadByte(ad);
                b2 = ReadByte(ad);
Line 417... Line 740...
                Ra = b1 & 0x3f;
                Ra = b1 & 0x3f;
                Rb = ((b2 & 0x0f) << 2) | (b1 >> 6);
                Rb = ((b2 & 0x0f) << 2) | (b1 >> 6);
                Rt = ((b3 & 3) << 4) | (b2 >> 4);
                Rt = ((b3 & 3) << 4) | (b2 >> 4);
                func = b3 >> 2;
                func = b3 >> 2;
                switch(func) {
                switch(func) {
                case OR:
                case AND:       sprintf(&buf[strlen(buf)], " AND r%d,r%d,r%d", Rt, Ra, Rb); break;
                        sprintf(&buf[strlen(buf)], " OR r%d,r%d,r%d", Rt, Ra, Rb);
                case OR:        sprintf(&buf[strlen(buf)], " OR r%d,r%d,r%d", Rt, Ra, Rb); break;
                        break;
                case EOR:       sprintf(&buf[strlen(buf)], " EOR r%d,r%d,r%d", Rt, Ra, Rb); break;
 
                case NAND:      sprintf(&buf[strlen(buf)], " NAND r%d,r%d,r%d", Rt, Ra, Rb); break;
 
                case NOR:       sprintf(&buf[strlen(buf)], " NOR r%d,r%d,r%d", Rt, Ra, Rb); break;
 
                case ENOR:      sprintf(&buf[strlen(buf)], " ENOR r%d,r%d,r%d", Rt, Ra, Rb); break;
                }
                }
                if (nb) *nb = 5;
                if (nb) *nb = 5;
                imm_prefix = false;
                imm_prefix = false;
                return std::string(buf);
                return std::string(buf);
 
 
Line 435... Line 761...
                sprintf(&buf[strlen(buf)], " LOOP $%LLX", disp + ad);
                sprintf(&buf[strlen(buf)], " LOOP $%LLX", disp + ad);
                if (nb) *nb = 3;
                if (nb) *nb = 3;
                imm_prefix = false;
                imm_prefix = false;
                return std::string(buf);
                return std::string(buf);
 
 
 
        case LWS:
 
                b1 = ReadByte(ad);
 
                ad++;
 
                b2 = ReadByte(ad);
 
                ad++;
 
                b3 = ReadByte(ad);
 
                ad++;
 
                Rb = ((b2 & 0xF) << 2) | (( b1 >> 6) & 3);
 
                str = dRn(b1,b2,b3,&Ra,&Sg,&disp);
 
                sprintf(&buf[strlen(buf)]," LWS %s,%s", SprName(Rb).c_str(), str.c_str());
 
                if (nb) *nb = 5;
 
                imm_prefix = false;
 
                return std::string(buf);
 
 
 
        case MEMSB:
 
                sprintf(&buf[strlen(buf)], " MEMSB");
 
                if (nb) *nb = 2;
 
                imm_prefix = false;
 
                return std::string(buf);
 
 
 
        case MEMDB:
 
                sprintf(&buf[strlen(buf)], " MEMDB");
 
                if (nb) *nb = 2;
 
                imm_prefix = false;
 
                return std::string(buf);
 
 
        case MFSPR:
        case MFSPR:
                b1 = system1.ReadByte(ad);
                b1 = system1.ReadByte(ad);
                ad++;
                ad++;
                b2 = system1.ReadByte(ad);
                b2 = system1.ReadByte(ad);
                ad++;
                ad++;
Line 447... Line 799...
                sprintf(&buf[strlen(buf)], " MFSPR r%d,%s", Rt, SprName(Sprn).c_str());
                sprintf(&buf[strlen(buf)], " MFSPR r%d,%s", Rt, SprName(Sprn).c_str());
                if (nb) *nb = 4;
                if (nb) *nb = 4;
                imm_prefix = false;
                imm_prefix = false;
                return std::string(buf);
                return std::string(buf);
 
 
        case MOV:
        case MODI:
 
                b1 = system1.ReadByte(ad);
 
                ad++;
 
                b2 = system1.ReadByte(ad);
 
                ad++;
 
                b3 = system1.ReadByte(ad);
 
                ad++;
 
                Ra = b1 & 0x3f;
 
                Rt = ((b2 & 0xf) << 2) | (b1 >> 6);
 
                val = (b3 << 4) | (b2 >> 4);
 
                sprintf(&buf[strlen(buf)], " MODI r%d,r%d,#$%I64X", Rt, Ra, val);
 
                if (nb) *nb = 5;
 
                imm_prefix = false;
 
                return std::string(buf);
 
 
 
        case MODUI:
 
                b1 = system1.ReadByte(ad);
 
                ad++;
 
                b2 = system1.ReadByte(ad);
 
                ad++;
 
                b3 = system1.ReadByte(ad);
 
                ad++;
 
                Ra = b1 & 0x3f;
 
                Rt = ((b2 & 0xf) << 2) | (b1 >> 6);
 
                val = (b3 << 4) | (b2 >> 4);
 
                sprintf(&buf[strlen(buf)], " MODUI r%d,r%d,#$%I64X", Rt, Ra, val);
 
                if (nb) *nb = 5;
 
                imm_prefix = false;
 
                return std::string(buf);
 
 
 
        case GRPA7:
                b1 = ReadByte(ad);
                b1 = ReadByte(ad);
                ad++;
                ad++;
                b2 = ReadByte(ad);
                b2 = ReadByte(ad);
                ad++;
                ad++;
                Ra = b1 & 0x3f;
                Ra = b1 & 0x3f;
                Rt = ((b2 & 0xF) << 2) | (b1 >> 6);
                Rt = ((b2 & 0xF) << 2) | (b1 >> 6);
                sprintf(&buf[strlen(buf)]," MOV r%d,r%d", Rt, Ra);
                switch(b2>>4) {
 
                case MOV:       sprintf(&buf[strlen(buf)]," MOV r%d,r%d", Rt, Ra); break;
 
                case SXB:       sprintf(&buf[strlen(buf)]," SXB r%d,r%d", Rt, Ra); break;
 
                case SXC:       sprintf(&buf[strlen(buf)]," SXC r%d,r%d", Rt, Ra); break;
 
                case SXH:       sprintf(&buf[strlen(buf)]," SXH r%d,r%d", Rt, Ra); break;
 
                case ZXB:       sprintf(&buf[strlen(buf)]," ZXB r%d,r%d", Rt, Ra); break;
 
                case ZXC:       sprintf(&buf[strlen(buf)]," ZXC r%d,r%d", Rt, Ra); break;
 
                case ZXH:       sprintf(&buf[strlen(buf)]," ZXH r%d,r%d", Rt, Ra); break;
 
                }
                if (nb) *nb = 4;
                if (nb) *nb = 4;
                imm_prefix = false;
                imm_prefix = false;
                return std::string(buf);
                return std::string(buf);
 
 
        case MTSPR:
        case MTSPR:
Line 471... Line 861...
                sprintf(&buf[strlen(buf)], " MTSPR %s,r%d", SprName(Sprn).c_str(), Ra);
                sprintf(&buf[strlen(buf)], " MTSPR %s,r%d", SprName(Sprn).c_str(), Ra);
                if (nb) *nb = 4;
                if (nb) *nb = 4;
                imm_prefix = false;
                imm_prefix = false;
                return std::string(buf);
                return std::string(buf);
 
 
 
        case MULI:
 
                b1 = system1.ReadByte(ad);
 
                ad++;
 
                b2 = system1.ReadByte(ad);
 
                ad++;
 
                b3 = system1.ReadByte(ad);
 
                ad++;
 
                Ra = b1 & 0x3f;
 
                Rt = ((b2 & 0xf) << 2) | (b1 >> 6);
 
                val = (b3 << 4) | (b2 >> 4);
 
                sprintf(&buf[strlen(buf)], " MULI r%d,r%d,#$%I64X", Rt, Ra, val);
 
                if (nb) *nb = 5;
 
                imm_prefix = false;
 
                return std::string(buf);
 
 
 
        case MULUI:
 
                b1 = system1.ReadByte(ad);
 
                ad++;
 
                b2 = system1.ReadByte(ad);
 
                ad++;
 
                b3 = system1.ReadByte(ad);
 
                ad++;
 
                Ra = b1 & 0x3f;
 
                Rt = ((b2 & 0xf) << 2) | (b1 >> 6);
 
                val = (b3 << 4) | (b2 >> 4);
 
                sprintf(&buf[strlen(buf)], " MULUI r%d,r%d,#$%I64X", Rt, Ra, val);
 
                if (nb) *nb = 5;
 
                imm_prefix = false;
 
                return std::string(buf);
 
 
 
        case ORI:
 
                b1 = system1.ReadByte(ad);
 
                ad++;
 
                b2 = system1.ReadByte(ad);
 
                ad++;
 
                b3 = system1.ReadByte(ad);
 
                ad++;
 
                Ra = b1 & 0x3f;
 
                Rt = ((b2 & 0xf) << 2) | (b1 >> 6);
 
                val = (b3 << 4) | (b2 >> 4);
 
                sprintf(&buf[strlen(buf)], " ORI r%d,r%d,#$%I64X", Rt, Ra, val);
 
                if (nb) *nb = 5;
 
                imm_prefix = false;
 
                return std::string(buf);
 
 
        case RR:
        case RR:
                b1 = system1.ReadByte(ad);
                b1 = system1.ReadByte(ad);
                ad++;
                ad++;
                b2 = system1.ReadByte(ad);
                b2 = system1.ReadByte(ad);
                ad++;
                ad++;
Line 483... Line 918...
                Ra = b1 & 0x3f;
                Ra = b1 & 0x3f;
                Rb = ((b2 & 0x0f) << 2) | (b1 >> 6);
                Rb = ((b2 & 0x0f) << 2) | (b1 >> 6);
                Rt = ((b3 & 3) << 4) | (b2 >> 4);
                Rt = ((b3 & 3) << 4) | (b2 >> 4);
                func = b3 >> 2;
                func = b3 >> 2;
                switch(func) {
                switch(func) {
 
                case ADD:
 
                        sprintf(&buf[strlen(buf)], " ADD r%d,r%d,r%d", Rt, Ra, Rb);
 
                        break;
 
                case ADDU:
 
                        sprintf(&buf[strlen(buf)], " ADDU r%d,r%d,r%d", Rt, Ra, Rb);
 
                        break;
 
                case DIV:
 
                        sprintf(&buf[strlen(buf)], " DIV r%d,r%d,r%d", Rt, Ra, Rb);
 
                        break;
 
                case DIVU:
 
                        sprintf(&buf[strlen(buf)], " DIVU r%d,r%d,r%d", Rt, Ra, Rb);
 
                        break;
 
                case MUL:
 
                        sprintf(&buf[strlen(buf)], " MUL r%d,r%d,r%d", Rt, Ra, Rb);
 
                        break;
 
                case MULU:
 
                        sprintf(&buf[strlen(buf)], " MULU r%d,r%d,r%d", Rt, Ra, Rb);
 
                        break;
                case _2ADDU:
                case _2ADDU:
                        sprintf(&buf[strlen(buf)], " _2ADDU r%d,r%d,r%d", Rt, Ra, Rb);
                        sprintf(&buf[strlen(buf)], " _2ADDU r%d,r%d,r%d", Rt, Ra, Rb);
                        break;
                        break;
                case _4ADDU:
                case _4ADDU:
                        sprintf(&buf[strlen(buf)], " _4ADDU r%d,r%d,r%d", Rt, Ra, Rb);
                        sprintf(&buf[strlen(buf)], " _4ADDU r%d,r%d,r%d", Rt, Ra, Rb);
Line 495... Line 948...
                        sprintf(&buf[strlen(buf)], " _8ADDU r%d,r%d,r%d", Rt, Ra, Rb);
                        sprintf(&buf[strlen(buf)], " _8ADDU r%d,r%d,r%d", Rt, Ra, Rb);
                        break;
                        break;
                case _16ADDU:
                case _16ADDU:
                        sprintf(&buf[strlen(buf)], " _16ADDU r%d,r%d,r%d", Rt, Ra, Rb);
                        sprintf(&buf[strlen(buf)], " _16ADDU r%d,r%d,r%d", Rt, Ra, Rb);
                        break;
                        break;
 
                case MOD:
 
                        sprintf(&buf[strlen(buf)], " MOD r%d,r%d,r%d", Rt, Ra, Rb);
 
                        break;
 
                case MODU:
 
                        sprintf(&buf[strlen(buf)], " MODU r%d,r%d,r%d", Rt, Ra, Rb);
 
                        break;
 
                case SUB:
 
                        sprintf(&buf[strlen(buf)], " SUB r%d,r%d,r%d", Rt, Ra, Rb);
 
                        break;
 
                case SUBU:
 
                        sprintf(&buf[strlen(buf)], " SUBU r%d,r%d,r%d", Rt, Ra, Rb);
 
                        break;
                }
                }
                if (nb) *nb = 5;
                if (nb) *nb = 5;
                imm_prefix = false;
                imm_prefix = false;
                return std::string(buf);
                return std::string(buf);
 
 
 
        case RTD:
 
                sprintf(&buf[strlen(buf)], " RTD");
 
                if (nb) *nb = 2;
 
                imm_prefix = false;
 
                return std::string(buf);
 
 
 
        case RTE:
 
                sprintf(&buf[strlen(buf)], " RTE");
 
                if (nb) *nb = 2;
 
                imm_prefix = false;
 
                return std::string(buf);
 
 
 
        case RTI:
 
                sprintf(&buf[strlen(buf)], " RTI");
 
                if (nb) *nb = 2;
 
                imm_prefix = false;
 
                return std::string(buf);
 
 
        case RTS:
        case RTS:
                b1 = system1.ReadByte(ad);
                b1 = system1.ReadByte(ad);
                ad++;
                ad++;
                Cr = b1 >> 4;
                Cr = b1 >> 4;
                sprintf(&buf[strlen(buf)], " RTS $%X[c%d]", b1 & 0xF, Cr);
                sprintf(&buf[strlen(buf)], " RTS $%X[c%d]", b1 & 0xF, Cr);
Line 529... Line 1012...
                sprintf(&buf[strlen(buf)]," SB r%d,%s", Rb, str.c_str());
                sprintf(&buf[strlen(buf)]," SB r%d,%s", Rb, str.c_str());
                if (nb) *nb = 5;
                if (nb) *nb = 5;
                imm_prefix = false;
                imm_prefix = false;
                return std::string(buf);
                return std::string(buf);
 
 
 
        case SBX:       return memndx("SBX", ad, nb);
 
        case SCX:       return memndx("SCX", ad, nb);
 
        case SHX:       return memndx("SHX", ad, nb);
 
        case SWX:       return memndx("SWX", ad, nb);
 
 
        case SC:
        case SC:
                b1 = ReadByte(ad);
                b1 = ReadByte(ad);
                ad++;
                ad++;
                b2 = ReadByte(ad);
                b2 = ReadByte(ad);
                ad++;
                ad++;
Line 572... Line 1060...
                func = b3 >> 2;
                func = b3 >> 2;
                switch(func) {
                switch(func) {
                case SHL:
                case SHL:
                        sprintf(&buf[strlen(buf)], " SHL r%d,r%d,r%d", Rt, Ra, Rb);
                        sprintf(&buf[strlen(buf)], " SHL r%d,r%d,r%d", Rt, Ra, Rb);
                        break;
                        break;
 
                case SHR:
 
                        sprintf(&buf[strlen(buf)], " SHR r%d,r%d,r%d", Rt, Ra, Rb);
 
                        break;
 
                case SHLU:
 
                        sprintf(&buf[strlen(buf)], " SHLU r%d,r%d,r%d", Rt, Ra, Rb);
 
                        break;
 
                case SHRU:
 
                        sprintf(&buf[strlen(buf)], " SHRU r%d,r%d,r%d", Rt, Ra, Rb);
 
                        break;
                case SHLI:
                case SHLI:
                        sprintf(&buf[strlen(buf)], " SHLI r%d,r%d,#$%X", Rt, Ra, Rb);
                        sprintf(&buf[strlen(buf)], " SHLI r%d,r%d,#$%X", Rt, Ra, Rb);
                        break;
                        break;
 
                case SHRI:
 
                        sprintf(&buf[strlen(buf)], " SHRI r%d,r%d,#$%X", Rt, Ra, Rb);
 
                        break;
 
                case SHLUI:
 
                        sprintf(&buf[strlen(buf)], " SHLUI r%d,r%d,#$%X", Rt, Ra, Rb);
 
                        break;
 
                case SHRUI:
 
                        sprintf(&buf[strlen(buf)], " SHRUI r%d,r%d,#$%X", Rt, Ra, Rb);
 
                        break;
 
                case ROL:
 
                        sprintf(&buf[strlen(buf)], " ROL r%d,r%d,r%d", Rt, Ra, Rb);
 
                        break;
 
                case ROR:
 
                        sprintf(&buf[strlen(buf)], " ROR r%d,r%d,r%d", Rt, Ra, Rb);
 
                        break;
 
                case ROLI:
 
                        sprintf(&buf[strlen(buf)], " ROLI r%d,r%d,#$%X", Rt, Ra, Rb);
 
                        break;
 
                case RORI:
 
                        sprintf(&buf[strlen(buf)], " RORI r%d,r%d,#$%X", Rt, Ra, Rb);
 
                        break;
                }
                }
                if (nb) *nb = 5;
                if (nb) *nb = 5;
                imm_prefix = false;
                imm_prefix = false;
                return std::string(buf);
                return std::string(buf);
 
 
Line 590... Line 1108...
                sprintf(&buf[strlen(buf)]," STP #$%04X", (int)((b2<<8)|b1));
                sprintf(&buf[strlen(buf)]," STP #$%04X", (int)((b2<<8)|b1));
                if (nb) *nb = 4;
                if (nb) *nb = 4;
                imm_prefix = false;
                imm_prefix = false;
                return std::string(buf);
                return std::string(buf);
 
 
 
        case STSET:
 
                b1 = ReadByte(ad);
 
                ad++;
 
                b2 = ReadByte(ad);
 
                ad++;
 
                b3 = ReadByte(ad);
 
                ad++;
 
                Ra = b1 & 0x3f;
 
                Rb = ((b2 & 0xF) << 2) | (( b1 >> 6) & 3);
 
                Sg = b3 >> 5;
 
                switch((b3 >> 2) & 7) {
 
                case 0: sprintf(&buf[strlen(buf)]," STSET.BI r%d,%s:[r%d]", Rb, SegName(Sg).c_str(), Ra);
 
                case 1: sprintf(&buf[strlen(buf)]," STSET.CI r%d,%s:[r%d]", Rb, SegName(Sg).c_str(), Ra);
 
                case 2: sprintf(&buf[strlen(buf)]," STSET.HI r%d,%s:[r%d]", Rb, SegName(Sg).c_str(), Ra);
 
                case 3: sprintf(&buf[strlen(buf)]," STSET.WI r%d,%s:[r%d]", Rb, SegName(Sg).c_str(), Ra);
 
                case 4: sprintf(&buf[strlen(buf)]," STSET.BD r%d,%s:[r%d]", Rb, SegName(Sg).c_str(), Ra);
 
                case 5: sprintf(&buf[strlen(buf)]," STSET.CD r%d,%s:[r%d]", Rb, SegName(Sg).c_str(), Ra);
 
                case 6: sprintf(&buf[strlen(buf)]," STSET.HD r%d,%s:[r%d]", Rb, SegName(Sg).c_str(), Ra);
 
                case 7: sprintf(&buf[strlen(buf)]," STSET.WD r%d,%s:[r%d]", Rb, SegName(Sg).c_str(), Ra);
 
                }
 
                if (nb) *nb = 5;
 
                imm_prefix = false;
 
                return std::string(buf);
 
 
 
        case SUBUI:
 
                b1 = system1.ReadByte(ad);
 
                ad++;
 
                b2 = system1.ReadByte(ad);
 
                ad++;
 
                b3 = system1.ReadByte(ad);
 
                ad++;
 
                Ra = b1 & 0x3f;
 
                Rt = ((b2 & 0xf) << 2) | (b1 >> 6);
 
                val = (b3 << 4) | (b2 >> 4);
 
                sprintf(&buf[strlen(buf)], " SUBUI r%d,r%d,#$%I64X", Rt, Ra, val);
 
                if (nb) *nb = 5;
 
                imm_prefix = false;
 
                return std::string(buf);
 
 
        case SW:
        case SW:
                b1 = ReadByte(ad);
                b1 = ReadByte(ad);
                ad++;
                ad++;
                b2 = ReadByte(ad);
                b2 = ReadByte(ad);
                ad++;
                ad++;
Line 604... Line 1161...
                sprintf(&buf[strlen(buf)]," SW r%d,%s", Rb, str.c_str());
                sprintf(&buf[strlen(buf)]," SW r%d,%s", Rb, str.c_str());
                if (nb) *nb = 5;
                if (nb) *nb = 5;
                imm_prefix = false;
                imm_prefix = false;
                return std::string(buf);
                return std::string(buf);
 
 
 
        case SWCR:
 
                b1 = ReadByte(ad);
 
                ad++;
 
                b2 = ReadByte(ad);
 
                ad++;
 
                b3 = ReadByte(ad);
 
                ad++;
 
                Rb = ((b2 & 0xF) << 2) | (( b1 >> 6) & 3);
 
                str = dRn(b1,b2,b3,&Ra,&Sg,&disp);
 
                sprintf(&buf[strlen(buf)]," SWCR r%d,%s", Rb, str.c_str());
 
                if (nb) *nb = 5;
 
                imm_prefix = false;
 
                return std::string(buf);
 
 
 
        case SWS:
 
                b1 = ReadByte(ad);
 
                ad++;
 
                b2 = ReadByte(ad);
 
                ad++;
 
                b3 = ReadByte(ad);
 
                ad++;
 
                Rb = ((b2 & 0xF) << 2) | (( b1 >> 6) & 3);
 
                str = dRn(b1,b2,b3,&Ra,&Sg,&disp);
 
                sprintf(&buf[strlen(buf)]," SWS %s,%s", SprName(Rb).c_str(), str.c_str());
 
                if (nb) *nb = 5;
 
                imm_prefix = false;
 
                return std::string(buf);
 
 
 
        case SYNC:
 
                sprintf(&buf[strlen(buf)], " SYNC");
 
                if (nb) *nb = 2;
 
                imm_prefix = false;
 
                return std::string(buf);
 
 
 
        case SYS:
 
                b1 = ReadByte(ad);
 
                ad++;
 
                b2 = ReadByte(ad);
 
                ad++;
 
                Cr = b1 >> 4;
 
                Ct = b1 & 0xF;
 
                sprintf(&buf[strlen(buf)], " SYS c%d,c%d,#%X", Ct, Cr, b2);
 
                if (nb) *nb = 4;
 
                imm_prefix = false;
 
                return std::string(buf);
 
 
 
        case TLB:
 
                b1 = ReadByte(ad);
 
                ad++;
 
                b2 = ReadByte(ad);
 
                ad++;
 
                Tn = b1 >> 4;
 
                Rt = b2 & 0x3f;
 
                Ra = Rt;
 
                str = "TLB";
 
                switch(b1 & 0xF) {
 
                case 0:
 
                        str += "NOP";
 
                        sprintf(&buf[strlen(buf)]," %s", str.c_str());
 
                        break;
 
                case 1:
 
                        str += "PB";
 
                        sprintf(&buf[strlen(buf)]," %s r%d", str.c_str(), Ra);
 
                        break;
 
                case 2:
 
                        str += "RD";
 
                        sprintf(&buf[strlen(buf)]," %s r%d,%s", str.c_str(), Rt, TLBRegName(Tn));
 
                        break;
 
                case 3:
 
                        str += "WR";
 
                        sprintf(&buf[strlen(buf)]," %s %s,r%d", str.c_str(), TLBRegName(Tn), Rt);
 
                        break;
 
                case 4:
 
                        str += "WI";
 
                        sprintf(&buf[strlen(buf)]," %s %s,r%d", str.c_str(), TLBRegName(Tn), Rt);
 
                        break;
 
                case 5:
 
                        str += "EN";
 
                        sprintf(&buf[strlen(buf)]," %s", str.c_str());
 
                        break;
 
                case 6:
 
                        str += "DIS";
 
                        sprintf(&buf[strlen(buf)]," %s", str.c_str());
 
                        break;
 
                default:
 
                        str += "???";
 
                        sprintf(&buf[strlen(buf)]," %s", str.c_str());
 
                        break;
 
                }
 
                if (nb) *nb = 4;
 
                imm_prefix = false;
 
                return std::string(buf);
 
 
        }
        }
        *nb = 1;
        *nb = 1;
        return std::string("");
        return std::string("");
}
}
 
 
 No newline at end of file
 No newline at end of file

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.