Flash and Apollo fixes - fixes Flash corruption on the FIC KA-6130.

This commit is contained in:
OBattler
2020-10-20 21:29:45 +02:00
parent bd0a4f490d
commit 2bda968594
2 changed files with 12 additions and 3 deletions

View File

@@ -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); mem_set_mem_state_both(addr, size, MEM_READ_EXTANY | MEM_WRITE_INTERNAL);
break; break;
case 2: 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; break;
case 3: case 3:
mem_set_mem_state_both(addr, size, MEM_READ_INTERNAL | MEM_WRITE_INTERNAL); mem_set_mem_state_both(addr, size, MEM_READ_INTERNAL | MEM_WRITE_INTERNAL);

View File

@@ -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_buffer, 0xff, 128);
memset(dev->page_dirty, 0x00, 128); memset(dev->page_dirty, 0x00, 128);
dev->page_bytes = 0; dev->page_bytes = 0;
dev->last_addr = 0xffffffff;
timer_on_auto(&dev->page_write_timer, 210.0);
} }
dev->command_state = 6; dev->command_state = 6;
break; break;
@@ -153,12 +155,19 @@ sst_page_write(void *priv)
sst_t *dev = (sst_t *) priv; sst_t *dev = (sst_t *) priv;
int i; 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; dev->page_base = dev->last_addr & dev->page_mask;
for (i = 0; i < 128; i++) { 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->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->page_bytes = 0;
dev->command_state = 0; dev->command_state = 0;
timer_disable(&dev->page_write_timer); timer_disable(&dev->page_write_timer);