This commit is contained in:
OBattler
2023-10-08 01:32:10 +02:00
parent 63ce626f29
commit 4be73f0b7a
3 changed files with 64 additions and 7 deletions

View File

@@ -372,15 +372,18 @@ extern int machine_has_mouse(void);
extern int machine_is_sony(void); extern int machine_is_sony(void);
extern uint8_t machine_get_p1(void); extern uint8_t machine_get_p1(void);
extern void machine_set_p1_default(uint8_t val);
extern void machine_set_p1(uint8_t val); extern void machine_set_p1(uint8_t val);
extern void machine_init_p1(void); extern void machine_init_p1(void);
extern uint8_t machine_handle_p1(uint8_t write, uint8_t val); extern uint8_t machine_handle_p1(uint8_t write, uint8_t val);
extern uint32_t machine_get_gpio(void); extern uint32_t machine_get_gpio(void);
extern void machine_set_gpio_default(uint32_t val);
extern void machine_set_gpio(uint32_t val); extern void machine_set_gpio(uint32_t val);
extern void machine_init_gpio(void); extern void machine_init_gpio(void);
extern uint32_t machine_handle_gpio(uint8_t write, uint32_t val); extern uint32_t machine_handle_gpio(uint8_t write, uint32_t val);
extern uint32_t machine_get_gpio_acpi(void); extern uint32_t machine_get_gpio_acpi(void);
extern void machine_set_gpio_acpi(uint32_t gpio_val); extern void machine_set_gpio_acpi_default(uint32_t val);
extern void machine_set_gpio_acpi(uint32_t val);
extern void machine_init_gpio_acpi(void); extern void machine_init_gpio_acpi(void);
extern uint32_t machine_handle_gpio_acpi(uint8_t write, uint32_t val); extern uint32_t machine_handle_gpio_acpi(uint8_t write, uint32_t val);

View File

@@ -158,6 +158,41 @@ machine_at_apollo_init(const machine_t *model)
return ret; return ret;
} }
static void
machine_at_zappa_gpio_init(void)
{
uint32_t gpio = 0xffffffff;
/* Register 0x0079: */
/* Bit 7: 0 = Clear password, 1 = Keep password. */
/* Bit 6: 0 = NVRAM cleared by jumper, 1 = NVRAM normal. */
/* Bit 5: 0 = CMOS Setup disabled, 1 = CMOS Setup enabled. */
/* Bit 4: External CPU clock (Switch 8). */
/* Bit 3: External CPU clock (Switch 7). */
/* 50 MHz: Switch 7 = Off, Switch 8 = Off. */
/* 60 MHz: Switch 7 = On, Switch 8 = Off. */
/* 66 MHz: Switch 7 = Off, Switch 8 = On. */
/* Bit 2: No Connect. */
/* Bit 1: No Connect. */
/* Bit 0: 0 = 1.5x multiplier, 1 = 2x multiplier (Switch 6). */
/* NOTE: A bit is read as 1 if switch is off, and as 0 if switch is on. */
gpio = 0xffffe6ff;
if (cpu_busspeed <= 50000000)
gpio |= 0xffff10ff;
else if ((cpu_busspeed > 50000000) && (cpu_busspeed <= 60000000))
gpio |= 0xffff18ff;
else if (cpu_busspeed > 60000000)
gpio |= 0xffff00ff;
if (cpu_dmulti <= 1.5)
gpio |= 0xffff01ff;
else
gpio |= 0xffff00ff;
machine_set_gpio_default(gpio);
}
int int
machine_at_zappa_init(const machine_t *model) machine_at_zappa_init(const machine_t *model)
{ {
@@ -171,6 +206,7 @@ machine_at_zappa_init(const machine_t *model)
return ret; return ret;
machine_at_common_init_ex(model, 2); machine_at_common_init_ex(model, 2);
machine_at_zappa_gpio_init();
pci_init(PCI_CONFIG_TYPE_1); pci_init(PCI_CONFIG_TYPE_1);
pci_register_slot(0x00, PCI_CARD_NORTHBRIDGE, 0, 0, 0, 0); pci_register_slot(0x00, PCI_CARD_NORTHBRIDGE, 0, 0, 0, 0);

View File

@@ -13278,10 +13278,16 @@ machine_get_p1(void)
return machine_p1; return machine_p1;
} }
void
machine_set_p1_default(uint8_t val)
{
machine_p1 = machine_p1_default = val;
}
void void
machine_set_p1(uint8_t val) machine_set_p1(uint8_t val)
{ {
machine_p1 = machines[machine].kbc_p1 & val; machine_p1 = machine_p1_default & val;
} }
@@ -13294,7 +13300,7 @@ machine_handle_p1(uint8_t write, uint8_t val)
ret = machines[machine].p1_handler(write, val); ret = machines[machine].p1_handler(write, val);
else { else {
if (write) if (write)
machine_p1 = machines[machine].kbc_p1 & val; machine_p1 = machine_p1_default & val;
else else
ret = machine_p1; ret = machine_p1;
} }
@@ -13314,10 +13320,16 @@ machine_get_gpio(void)
return machine_gpio; return machine_gpio;
} }
void
machine_set_gpio_default(uint32_t val)
{
machine_gpio = machine_gpio_default = val;
}
void void
machine_set_gpio(uint32_t val) machine_set_gpio(uint32_t val)
{ {
machine_gpio = machines[machine].gpio & val; machine_gpio = machine_gpio_default & val;
} }
uint32_t uint32_t
@@ -13329,7 +13341,7 @@ machine_handle_gpio(uint8_t write, uint32_t val)
ret = machines[machine].gpio_handler(write, val); ret = machines[machine].gpio_handler(write, val);
else { else {
if (write) if (write)
machine_gpio = machines[machine].gpio & val; machine_gpio = machine_gpio_default & val;
else else
ret = machine_gpio; ret = machine_gpio;
} }
@@ -13349,10 +13361,16 @@ machine_get_gpio_acpi(void)
return machine_gpio_acpi; return machine_gpio_acpi;
} }
void
machine_set_gpio_acpi_default(uint32_t val)
{
machine_gpio_acpi = machine_gpio_acpi_default = val;
}
void void
machine_set_gpio_acpi(uint32_t val) machine_set_gpio_acpi(uint32_t val)
{ {
machine_gpio_acpi = machines[machine].gpio_acpi & val; machine_gpio_acpi = machine_gpio_acpi_default & val;
} }
uint32_t uint32_t
@@ -13364,7 +13382,7 @@ machine_handle_gpio_acpi(uint8_t write, uint32_t val)
ret = machines[machine].gpio_acpi_handler(write, val); ret = machines[machine].gpio_acpi_handler(write, val);
else { else {
if (write) if (write)
machine_gpio_acpi = machines[machine].gpio_acpi & val; machine_gpio_acpi = machine_gpio_acpi_default & val;
else else
ret = machine_gpio_acpi; ret = machine_gpio_acpi;
} }