diff --git a/src/chipset/ali1429.c b/src/chipset/ali1429.c index 08cc6ff14..da8ded3ab 100644 --- a/src/chipset/ali1429.c +++ b/src/chipset/ali1429.c @@ -38,17 +38,19 @@ #include <86box/smram.h> #include <86box/chipset.h> -#define disabled_shadow (MEM_READ_EXTANY | MEM_WRITE_EXTANY) +#define disabled_shadow (MEM_READ_EXTANY | MEM_WRITE_EXTANY) + #ifdef ENABLE_ALI1429_LOG int ali1429_do_log = ENABLE_ALI1429_LOG; + + static void ali1429_log(const char *fmt, ...) { va_list ap; - if (ali1429_do_log) - { + if (ali1429_do_log) { va_start(ap, fmt); pclog_ex(fmt, ap); va_end(ap); @@ -58,17 +60,19 @@ ali1429_log(const char *fmt, ...) #define ali1429_log(fmt, ...) #endif + typedef struct { - uint8_t index, cfg_locked, - regs[256]; + uint8_t index, cfg_locked, + regs[256]; - smram_t *smram; + smram_t * smram; } ali1429_t; -static void ali1429_shadow_recalc(ali1429_t *dev) -{ +static void +ali1429_shadow_recalc(ali1429_t *dev) +{ uint32_t base, i, can_write, can_read; shadowbios = (dev->regs[0x13] & 0x40) && (dev->regs[0x14] & 0x01); @@ -77,8 +81,7 @@ static void ali1429_shadow_recalc(ali1429_t *dev) can_write = (dev->regs[0x14] & 0x02) ? MEM_WRITE_INTERNAL : MEM_WRITE_EXTANY; can_read = (dev->regs[0x14] & 0x01) ? MEM_READ_INTERNAL : MEM_READ_EXTANY; - for (i = 0; i < 8; i++) - { + for (i = 0; i < 8; i++) { base = 0xc0000 + (i << 15); if (dev->regs[0x13] & (1 << i)) @@ -87,56 +90,61 @@ static void ali1429_shadow_recalc(ali1429_t *dev) mem_set_mem_state_both(base, 0x8000, disabled_shadow); } - flushmmucache(); + flushmmucache_nopc(); } + static void ali1429_write(uint16_t addr, uint8_t val, void *priv) { ali1429_t *dev = (ali1429_t *)priv; - switch (addr) - { - case 0x22: - dev->index = val; - break; + switch (addr) { + case 0x22: + dev->index = val; + break; - case 0x23: - if (dev->index != 0x03) - ali1429_log("M1429: dev->regs[%02x] = %02x\n", dev->index, val); + case 0x23: +#ifdef ENABLE_ALI1429_LOG + if (dev->index != 0x03) + ali1429_log("M1429: dev->regs[%02x] = %02x\n", dev->index, val); +#endif - if (dev->index == 0x03) - dev->cfg_locked = !(val == 0xc5); + if (dev->index == 0x03) + dev->cfg_locked = !(val == 0xc5); - if (!dev->cfg_locked) - { - dev->regs[dev->index] = val; + if (!dev->cfg_locked) { + dev->regs[dev->index] = val; - switch (dev->index) - { - case 0x13: - case 0x14: - ali1429_shadow_recalc(dev); - break; + switch (dev->index) { + case 0x13: case 0x14: + ali1429_shadow_recalc(dev); + break; - case 0x18: - cpu_cache_ext_enabled = !!(val & 2); - cpu_update_waitstates(); - break; - } - } - - break; + case 0x18: + cpu_cache_ext_enabled = !!(val & 2); + cpu_update_waitstates(); + break; + } + } + break; } } + static uint8_t ali1429_read(uint16_t addr, void *priv) { ali1429_t *dev = (ali1429_t *)priv; - return (addr == 0x23) ? dev->regs[dev->index] : 0xff; + uint8_t ret = 0xff; + + if ((addr == 0x23) && (dev->index < 0xc0)) + ret = dev->regs[dev->index]; + + return ret; } + static void ali1429_close(void *priv) { @@ -145,16 +153,16 @@ ali1429_close(void *priv) free(dev); } + static void * ali1429_init(const device_t *info) { ali1429_t *dev = (ali1429_t *)malloc(sizeof(ali1429_t)); memset(dev, 0, sizeof(ali1429_t)); - /* - M1429 Ports: - 22h Index Port - 23h Data Port + /* M1429 Ports: + 22h Index Port + 23h Data Port */ io_sethandler(0x0022, 0x0002, ali1429_read, NULL, NULL, ali1429_write, NULL, NULL, dev); @@ -167,6 +175,7 @@ ali1429_init(const device_t *info) return dev; } + const device_t ali1429_device = { "ALi M1429", 0, @@ -174,7 +183,8 @@ const device_t ali1429_device = { ali1429_init, ali1429_close, NULL, - {NULL}, + { NULL }, NULL, NULL, - NULL}; + NULL +};