{
avr_flash_t * p = (avr_flash_t *)param;
avr_regbit_clear(p->io.avr, p->selfprgen);
- printf("avr_progen_clear - SPM not received, clearing PRGEN bit\n");
+ AVR_LOG(avr, LOG_WARNING, "FLASH: avr_progen_clear - SPM not received, clearing PRGEN bit\n");
return 0;
}
-static uint8_t avr_flash_read(struct avr_t * avr, avr_io_addr_t addr, void * param)
-{
- avr_flash_t * p = (avr_flash_t *)param;
- uint8_t v = avr_core_watch_read(avr, addr);
- printf("avr_flash_read %02x\n", v);
- return v;
-}
static void avr_flash_write(avr_t * avr, avr_io_addr_t addr, uint8_t v, void * param)
{
avr_t * avr = p->io.avr;
uint16_t z = avr->data[R_ZL] | (avr->data[R_ZH] << 8);
+ if (avr->rampz)
+ z |= avr->data[avr->rampz] << 16;
uint16_t r01 = avr->data[0] | (avr->data[1] << 8);
// printf("AVR_IOCTL_FLASH_SPM %02x Z:%04x R01:%04x\n", avr->data[p->r_spm], z,r01);
avr_regbit_clear(avr, p->selfprgen);
if (avr_regbit_get(avr, p->pgers)) {
z &= ~1;
- printf("Erasing page %04x (%d)\n", (z / p->spm_pagesize), p->spm_pagesize);
+ AVR_LOG(avr, LOG_TRACE, "FLASH: Erasing page %04x (%d)\n", (z / p->spm_pagesize), p->spm_pagesize);
for (int i = 0; i < p->spm_pagesize; i++)
avr->flash[z++] = 0xff;
} else if (avr_regbit_get(avr, p->pgwrt)) {
z &= ~1;
- printf("Writing page %04x (%d)\n", (z / p->spm_pagesize), p->spm_pagesize);
+ AVR_LOG(avr, LOG_TRACE, "FLASH: Writing page %04x (%d)\n", (z / p->spm_pagesize), p->spm_pagesize);
} else if (avr_regbit_get(avr, p->blbset)) {
- printf("Settting lock bits (ignored)\n");
+ AVR_LOG(avr, LOG_TRACE, "FLASH: Setting lock bits (ignored)\n");
} else {
z &= ~1;
avr->flash[z++] = r01;
- avr->flash[z++] = r01 >> 8;
+ avr->flash[z] = r01 >> 8;
}
return 0;
}
void avr_flash_init(avr_t * avr, avr_flash_t * p)
{
p->io = _io;
- printf("%s init SPM %04x\n", __FUNCTION__, p->r_spm);
+// printf("%s init SPM %04x\n", __FUNCTION__, p->r_spm);
avr_register_io(avr, &p->io);
avr_register_vector(avr, &p->flash);
avr_register_io_write(avr, p->r_spm, avr_flash_write, p);
-// avr_register_io_read(avr, p->r_spm, avr_flash_read, p);
}