Esempio n. 1
0
void HiscoreReset()
{
#if defined FBA_DEBUG
	if (!Debug_HiscoreInitted) bprintf(PRINT_ERROR, _T("HiscoreReset called without init\n"));
#endif

	if (!CheckHiscoreAllowed() || !HiscoresInUse) return;
	
	if (nCpuType == -1) set_cpu_type();
	
	for (UINT32 i = 0; i < nHiscoreNumRanges; i++) {
		HiscoreMemRange[i].ApplyNextFrame = 0;
		HiscoreMemRange[i].Applied = APPLIED_STATE_NONE;
		
		if (HiscoreMemRange[i].Loaded) {
			cpu_open(HiscoreMemRange[i].nCpu);
			cpu_write_byte(HiscoreMemRange[i].Address, (UINT8)~HiscoreMemRange[i].StartValue);
			if (HiscoreMemRange[i].NumBytes > 1) cpu_write_byte(HiscoreMemRange[i].Address + HiscoreMemRange[i].NumBytes - 1, (UINT8)~HiscoreMemRange[i].EndValue);
			cpu_close();
			
#if 1 && defined FBA_DEBUG
			bprintf(PRINT_IMPORTANT, _T("Hi Score Memory Range %i Initted\n"), i);
#endif
		}
	}
}
Esempio n. 2
0
int test_LDDR() {
    asic_t *device = asic_init(TI83p);
    uint8_t test[] = { 0xED, 0xB8 }; // LDDR
    device->cpu->registers.HL = 0xC004;
    device->cpu->registers.DE = 0xD004;
    device->cpu->registers.BC = 5;
    cpu_write_byte(device->cpu, 0xC000, 0x11);
    cpu_write_byte(device->cpu, 0xC001, 0x22);
    cpu_write_byte(device->cpu, 0xC002, 0x33);
    cpu_write_byte(device->cpu, 0xC003, 0x44);
    cpu_write_byte(device->cpu, 0xC004, 0x55);
    flash(device, test, sizeof(test));
    int cycles = cpu_execute(device->cpu, 100);
    if (cpu_read_byte(device->cpu, 0xD000) != 0x11 ||
        cpu_read_byte(device->cpu, 0xD001) != 0x22 ||
        cpu_read_byte(device->cpu, 0xD002) != 0x33 ||
        cpu_read_byte(device->cpu, 0xD003) != 0x44 ||
        cpu_read_byte(device->cpu, 0xD004) != 0x55 ||
        device->cpu->registers.HL != 0xBFFF ||
        device->cpu->registers.DE != 0xCFFF ||
        device->cpu->registers.BC != 0 ||
        cycles != 0) {
        asic_free(device);
        return 1;
    }
    asic_free(device);
    return 0;
}
Esempio n. 3
0
int test_CPD() {
    asic_t *device = asic_init(TI83p);
    uint8_t test[] = { 0xED, 0xA9 }; // CPD
    device->cpu->registers.HL = 0xC002;
    device->cpu->registers.BC = 5;
    device->cpu->registers.A = 0x11;
    cpu_write_byte(device->cpu, 0xC000, 0x11);
    cpu_write_byte(device->cpu, 0xC001, 0x22);
    cpu_write_byte(device->cpu, 0xC002, 0x33);
    flash(device, test, sizeof(test));
    int cycles = cpu_execute(device->cpu, 16);
    if (device->cpu->registers.flags.Z != 0 ||
        device->cpu->registers.HL != 0xC001 ||
        device->cpu->registers.BC != 4 ||
        cycles != 0) {
        asic_free(device);
        return 1;
    }
    device->cpu->registers.PC = 0;
    cpu_execute(device->cpu, 16);
    device->cpu->registers.PC = 0;
    cpu_execute(device->cpu, 16);
    if (device->cpu->registers.flags.Z != 1 ||
        device->cpu->registers.HL != 0xBFFF ||
        device->cpu->registers.BC != 2) {
        asic_free(device);
        return 1;
    }
    asic_free(device);
    return 0;
}
Esempio n. 4
0
void HiscoreApply()
{
#if defined FBA_DEBUG
	if (!Debug_HiscoreInitted) bprintf(PRINT_ERROR, _T("HiscoreApply called without init\n"));
#endif

	if (!CheckHiscoreAllowed() || !HiscoresInUse) return;
	
	if (nCpuType == -1) set_cpu_type();
	
	for (UINT32 i = 0; i < nHiscoreNumRanges; i++) {
		if (HiscoreMemRange[i].Loaded && HiscoreMemRange[i].Applied == APPLIED_STATE_ATTEMPTED) {
			INT32 Confirmed = 1;
			cpu_open(HiscoreMemRange[i].nCpu);
			for (UINT32 j = 0; j < HiscoreMemRange[i].NumBytes; j++) {
				if (cpu_read_byte(HiscoreMemRange[i].Address + j) != HiscoreMemRange[i].Data[j]) {
					Confirmed = 0;
				}
			}
			cpu_close();
			
			if (Confirmed == 1) {
				HiscoreMemRange[i].Applied = APPLIED_STATE_CONFIRMED;
#if 1 && defined FBA_DEBUG
				bprintf(PRINT_IMPORTANT, _T("Applied Hi Score Memory Range %i on frame number %i\n"), i, GetCurrentFrame());
#endif
			} else {
				HiscoreMemRange[i].Applied = APPLIED_STATE_NONE;
				HiscoreMemRange[i].ApplyNextFrame = 1;
#if 1 && defined FBA_DEBUG
				bprintf(PRINT_IMPORTANT, _T("Failed attempt to apply Hi Score Memory Range %i on frame number %i\n"), i, GetCurrentFrame());
#endif
			}
		}
		
		if (HiscoreMemRange[i].Loaded && HiscoreMemRange[i].Applied == APPLIED_STATE_NONE && HiscoreMemRange[i].ApplyNextFrame) {			
			cpu_open(HiscoreMemRange[i].nCpu);
			for (UINT32 j = 0; j < HiscoreMemRange[i].NumBytes; j++) {
				cpu_write_byte(HiscoreMemRange[i].Address + j, HiscoreMemRange[i].Data[j]);				
			}
			cpu_close();
			
			HiscoreMemRange[i].Applied = APPLIED_STATE_ATTEMPTED;
			HiscoreMemRange[i].ApplyNextFrame = 0;
		}
		
		if (HiscoreMemRange[i].Loaded && HiscoreMemRange[i].Applied == APPLIED_STATE_NONE) {
			cpu_open(HiscoreMemRange[i].nCpu);
			if (cpu_read_byte(HiscoreMemRange[i].Address) == HiscoreMemRange[i].StartValue && cpu_read_byte(HiscoreMemRange[i].Address + HiscoreMemRange[i].NumBytes - 1) == HiscoreMemRange[i].EndValue) {
				HiscoreMemRange[i].ApplyNextFrame = 1;
			}
			cpu_close();
		}
	}
}
Esempio n. 5
0
int test_CPDR() {
    asic_t *device = asic_init(TI83p);
    uint8_t test[] = { 0xED, 0xB9 }; // CPDR
    device->cpu->registers.HL = 0xC004;
    device->cpu->registers.BC = 5;
    device->cpu->registers.A = 0x33;
    cpu_write_byte(device->cpu, 0xC001, 0x22);
    cpu_write_byte(device->cpu, 0xC002, 0x33);
    cpu_write_byte(device->cpu, 0xC003, 0x44);
    cpu_write_byte(device->cpu, 0xC004, 0x55);
    flash(device, test, sizeof(test));
    int cycles = cpu_execute(device->cpu, 58);
    if (device->cpu->registers.HL != 0xC001 ||
        device->cpu->registers.BC != 2 ||
        cycles != 0) {
        asic_free(device);
        return 1;
    }
    asic_free(device);
    return 0;
}
Esempio n. 6
0
int test_LDI() {
	asic_t *device = asic_init(TI83p, NULL);
	uint8_t test[] = { 0xED, 0xA0 }; // LDI
	device->cpu->registers.HL = 0xC000;
	device->cpu->registers.DE = 0xD000;
	device->cpu->registers.BC = 5;
	cpu_write_byte(device->cpu, 0xC000, 0x11);
	cpu_write_byte(device->cpu, 0xC001, 0x22);
	cpu_write_byte(device->cpu, 0xC002, 0x33);
	cpu_write_byte(device->cpu, 0xC003, 0x44);
	cpu_write_byte(device->cpu, 0xC004, 0x55);
	flash(device, test, sizeof(test));
	int cycles = cpu_execute(device->cpu, 16);
	if (cpu_read_byte(device->cpu, 0xD000) != 0x11 ||
			device->cpu->registers.HL != 0xC001 ||
			device->cpu->registers.DE != 0xD001 ||
			device->cpu->registers.BC != 4 ||
			cycles != 0) {
		asic_free(device);
		return 1;
	}
	asic_free(device);
	return 0;
}