Revision 8da3ff18 hw/ds1225y.c

b/hw/ds1225y.c
30 30

  
31 31
typedef struct ds1225y_t
32 32
{
33
    target_phys_addr_t mem_base;
34 33
    uint32_t chip_size;
35 34
    QEMUFile *file;
36 35
    uint8_t *contents;
......
41 40
static uint32_t nvram_readb (void *opaque, target_phys_addr_t addr)
42 41
{
43 42
    ds1225y_t *s = opaque;
44
    int64_t pos;
45 43
    uint32_t val;
46 44

  
47
    pos = addr - s->mem_base;
48
    if (pos >= s->chip_size)
49
        pos -= s->chip_size;
50

  
51
    val = s->contents[pos];
45
    val = s->contents[addr];
52 46

  
53 47
#ifdef DEBUG_NVRAM
54 48
    printf("nvram: read 0x%x at " TARGET_FMT_lx "\n", val, addr);
......
77 71
static void nvram_writeb (void *opaque, target_phys_addr_t addr, uint32_t val)
78 72
{
79 73
    ds1225y_t *s = opaque;
80
    int64_t pos;
81 74

  
82 75
#ifdef DEBUG_NVRAM
83 76
    printf("nvram: write 0x%x at " TARGET_FMT_lx "\n", val, addr);
84 77
#endif
85 78

  
86
    pos = addr - s->mem_base;
87
    s->contents[pos] = val & 0xff;
79
    s->contents[addr] = val & 0xff;
88 80
    if (s->file) {
89
        qemu_fseek(s->file, pos, SEEK_SET);
81
        qemu_fseek(s->file, addr, SEEK_SET);
90 82
        qemu_put_byte(s->file, (int)val);
91 83
        qemu_fflush(s->file);
92 84
    }
......
117 109
        return;
118 110
    }
119 111

  
120
    nvram_writeb(opaque, addr - s->chip_size, val);
112
    nvram_writeb(opaque, addr, val);
121 113
}
122 114

  
123 115
static void nvram_writew_protected (void *opaque, target_phys_addr_t addr, uint32_t val)
......
167 159
    if (!s->contents) {
168 160
        return NULL;
169 161
    }
170
    s->mem_base = mem_base;
171 162
    s->protection = 7;
172 163

  
173 164
    /* Read current file */

Also available in: Unified diff