Пример #1
0
void LogCDData(uint8 *opcode, uint16 A, int size) {
	int i, j;
	uint8 memop = 0;

	if((j = GetPRGAddress(_PC)) != -1)
		for (i = 0; i < size; i++) {
			if(cdloggerdata[j+i] & 1)continue; //this has been logged so skip
			cdloggerdata[j+i] |= 1;
			cdloggerdata[j+i] |= ((_PC + i) >> 11) & 0x0c;
			cdloggerdata[j+i] |= ((_PC & 0x8000) >> 8) ^ 0x80;	// 19/07/14 used last reserved bit, if bit 7 is 1, then code is running from lowe area (6000)
			if(indirectnext)cdloggerdata[j+i] |= 0x10;
			codecount++;
			if(!(cdloggerdata[j+i] & 2))undefinedcount--;
		}

	//log instruction jumped to in an indirect jump
	if(opcode[0] == 0x6c)
		indirectnext = 1;
	else
		indirectnext = 0;

	switch (optype[opcode[0]]) {
		case 1:
		case 4: memop = 0x20; break;
	}

	if((j = GetPRGAddress(A)) != -1) {
		if(!(cdloggerdata[j] & 2)) {
			cdloggerdata[j] |= 2;
			cdloggerdata[j] |=(A>>11)&0x0c;
			cdloggerdata[j] |= memop;
			datacount++;
			if(!(cdloggerdata[j] & 1))undefinedcount--;
		}
	}
Пример #2
0
void LogDPCM(int romaddress, int dpcmsize){
	int i = GetPRGAddress(romaddress);

	if(i == -1)return;

	for (int dpcmstart = i; dpcmstart < (i + dpcmsize); dpcmstart++) {
		if(!(cdloggerdata[dpcmstart] & 0x40)) {
			cdloggerdata[dpcmstart] |= 0x40;

			if(!(cdloggerdata[dpcmstart] & 2)){
				datacount++;
				cdloggerdata[dpcmstart] |= 2;
				if(!(cdloggerdata[dpcmstart] & 1))undefinedcount--;
			}
		}
	}
}
Пример #3
0
//called by the cpu to perform logging if CDLogging is enabled
void LogCDVectors(int which){
	int j;
	j = GetPRGAddress(which);
	if(j == -1) return;

	if(!(cdloggerdata[j] & 2)){
		cdloggerdata[j] |= 0x0E; // we're in the last bank and recording it as data so 0x1110 or 0xE should be what we need
		datacount++;
		if(!(cdloggerdata[j] & 1))undefinedcount--;
	}
	j++;

	if(!(cdloggerdata[j] & 2)){
		cdloggerdata[j] |= 0x0E;
		datacount++;
		if(!(cdloggerdata[j] & 1))undefinedcount--;
	}
}
Пример #4
0
void LogCDData() {
    int i, j;
    uint16 A = 0;
    uint8 opcode[3] = {0}, memop = 0;

    opcode[0] = GetMem(_PC);
    switch (opsize[opcode[0]]) {
    case 2:
        opcode[1] = GetMem(_PC + 1);
        break;
    case 3:
        opcode[1] = GetMem(_PC + 1);
        opcode[2] = GetMem(_PC + 2);
        break;
    }

    if((j = GetPRGAddress(_PC)) != -1)
        for (i = 0; i < opsize[opcode[0]]; i++) {
            if(cdloggerdata[j+i] & 1)continue; //this has been logged so skip
            cdloggerdata[j+i] |= 1;
            cdloggerdata[j+i] |=((_PC+i)>>11)&0x0c;
            if(indirectnext)cdloggerdata[j+i] |= 0x10;
            codecount++;
            if(!(cdloggerdata[j+i] & 2))undefinedcount--;
        }

    //log instruction jumped to in an indirect jump
    if(opcode[0] == 0x6c) indirectnext = 1;
    else indirectnext = 0;

    switch (optype[opcode[0]]) {
    case 0:
        break;
    case 1:
        A = (opcode[1]+_X) & 0xFF;
        A = GetMem(A) | (GetMem(A+1)<<8);
        memop = 0x20;
        break;
    case 2:
        A = opcode[1];
        break;
    case 3:
        A = opcode[1] | opcode[2]<<8;
        break;
    case 4:
        A = (GetMem(opcode[1]) | (GetMem(opcode[1]+1)<<8))+_Y;
        memop = 0x20;
        break;
    case 5:
        A = opcode[1]+_X;
        break;
    case 6:
        A = (opcode[1] | (opcode[2]<<8))+_Y;
        break;
    case 7:
        A = (opcode[1] | (opcode[2]<<8))+_X;
        break;
    case 8:
        A = opcode[1]+_Y;
        break;
    }

    if((j = GetPRGAddress(A)) != -1) {
        if(!(cdloggerdata[j] & 2)) {
            cdloggerdata[j] |= 2;
            cdloggerdata[j] |=(A>>11)&0x0c;
            cdloggerdata[j] |= memop;
            datacount++;
            if(!(cdloggerdata[j] & 1))undefinedcount--;
        }
    }