diff --git a/src/intel.c b/src/intel.c index 691d254..2010cc3 100644 --- a/src/intel.c +++ b/src/intel.c @@ -88,11 +88,46 @@ void intel_batman_init() uint8_t endeavor_brdconfig(uint16_t port, void *p) { + uint8_t temp; + CPU *cpu_s = &models[model].cpu[cpu_manufacturer].cpus[cpu]; // pclog("endeavor_brdconfig read port=%04x\n", port); switch (port) { case 0x79: - return 0xff; + // Bit # | Description | Bit = 1 | Bit = 0 + // 0 | Internal CPU Clock Freq. (Switch 6) | 3/2x | 2x (Manual has these swapped in one place?) + // 1 | Soft Off capable power supply | No | Yes + // 2 | On-board Audio present | Yes | No + // 3 | External CPU clock (Switch 7) | | + // 4 | External CPU clock (Switch 8) | | + // 5 | Setup Disable (Switch 5) | Enable access | Disable access + // 6 | Clear CMOS (Switch 4) | Keep values | Clear values + // 7 | Password Clear (Switch 3) | Keep password | Clear password + + // Bus Speed | Switch 7 | Switch 8 + // 50 MHz | Off | Off + // 60 Mhz | On | Off + // 66 MHz | Off | On + + // Multiplier for each supported processor- + // -The 3/2 setting is used for 75 MHz, 90 MHz, and 100 MHz processors + // -The 2 times setting is used for 120 MHz processors. + + if (cpu_s->rspeed == 75000000 && cpu_s->pci_speed == 25000000) + temp = 0x01; + else if (cpu_s->rspeed == 90000000 && cpu_s->pci_speed == 30000000) + temp = 0x01 | 0x08; + else if (cpu_s->rspeed == 100000000 && cpu_s->pci_speed == 25000000) + temp = 0x00; + else if (cpu_s->rspeed == 100000000 && cpu_s->pci_speed == 33333333) + temp = 0x01 | 0x10; + else if (cpu_s->rspeed == 120000000 && cpu_s->pci_speed == 30000000) + temp = 0x08; + else if (cpu_s->rspeed == 133333333 && cpu_s->pci_speed == 33333333) + temp = 0x10; + else + temp = 0x10; // TODO: how are the overdrive processors configured? + return 0xe2 | temp; } return 0; }