diff --git a/src/chipset/via_apollo.c b/src/chipset/via_apollo.c index e85bc5191..b089c2c92 100644 --- a/src/chipset/via_apollo.c +++ b/src/chipset/via_apollo.c @@ -56,7 +56,7 @@ apollo_map(uint32_t addr, uint32_t size, int state) mem_set_mem_state_both(addr, size, MEM_READ_EXTANY | MEM_WRITE_INTERNAL); break; case 2: - mem_set_mem_state_both(addr, size, MEM_READ_INTERNAL | MEM_WRITE_EXTANY); + mem_set_mem_state_both(addr, size, MEM_READ_INTERNAL | MEM_WRITE_DISABLED); break; case 3: mem_set_mem_state_both(addr, size, MEM_READ_INTERNAL | MEM_WRITE_INTERNAL); diff --git a/src/mem/sst_flash.c b/src/mem/sst_flash.c index ccbd43943..f314c0574 100644 --- a/src/mem/sst_flash.c +++ b/src/mem/sst_flash.c @@ -131,6 +131,8 @@ sst_new_command(sst_t *dev, uint32_t addr, uint8_t val) memset(dev->page_buffer, 0xff, 128); memset(dev->page_dirty, 0x00, 128); dev->page_bytes = 0; + dev->last_addr = 0xffffffff; + timer_on_auto(&dev->page_write_timer, 210.0); } dev->command_state = 6; break; @@ -153,12 +155,19 @@ sst_page_write(void *priv) sst_t *dev = (sst_t *) priv; int i; + pclog("sst_page_write(): dev->last_addr = %08X\n", dev->last_addr); + + if (dev->last_addr == 0xffffffff) + return; + dev->page_base = dev->last_addr & dev->page_mask; for (i = 0; i < 128; i++) { - if (dev->page_dirty[i]) + if (dev->page_dirty[i]) { dev->array[dev->page_base + i] = dev->page_buffer[i]; + dev->dirty |= 1; + } } - dev->dirty = 1; + pclog("dev->dirty = %i\n", dev->dirty); dev->page_bytes = 0; dev->command_state = 0; timer_disable(&dev->page_write_timer);