misc: Point to correct simavr include dirs
[simavr] / simavr / sim / avr_flash.c
index 05f3e87..5b8a615 100644 (file)
@@ -28,17 +28,10 @@ static avr_cycle_count_t avr_progen_clear(struct avr_t * avr, avr_cycle_count_t
 {
        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)
 {
@@ -61,6 +54,8 @@ static int avr_flash_ioctl(struct avr_io_t * port, uint32_t ctl, void * io_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);
@@ -68,18 +63,18 @@ static int avr_flash_ioctl(struct avr_io_t * port, uint32_t ctl, void * io_param
        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;
 }
@@ -92,12 +87,11 @@ static      avr_io_t        _io = {
 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);
 }