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);
z &= ~1;
printf("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");
+ printf("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);
}