44 #include "avrmalloc.h" 77 enum _vector_table_select
116 VDevCreate vdev_create;
136 #define IO_REG_DEFN_TERMINATOR { .name = NULL, } 144 StackType stack_type;
163 struct io_reg_defn io_reg[];
170 dev_supp_has_ext_io_reg (DevSuppDefn *dev)
172 return dev->has_ext_io_reg;
176 dev_supp_get_flash_sz (DevSuppDefn *dev)
178 return dev->size.flash;
182 dev_supp_get_PC_sz (DevSuppDefn *dev)
188 dev_supp_get_stack_sz (DevSuppDefn *dev)
190 return dev->size.stack;
194 dev_supp_get_vtab_idx (DevSuppDefn *dev)
196 return dev->irq_vect_idx;
200 dev_supp_get_sram_sz (DevSuppDefn *dev)
202 return dev->size.sram;
206 dev_supp_get_eeprom_sz (DevSuppDefn *dev)
208 return dev->size.eeprom;
212 dev_supp_get_xram_sz (DevSuppDefn *dev)
214 return dev->size.xram;
223 #include "defn/90s1200.h" 224 #include "defn/90s2313.h" 225 #include "defn/90s4414.h" 226 #include "defn/90s8515.h" 228 #include "defn/mega8.h" 229 #include "defn/mega16.h" 230 #include "defn/mega32.h" 231 #include "defn/mega103.h" 232 #include "defn/mega128.h" 234 #include "defn/43usb320.h" 235 #include "defn/43usb325.h" 236 #include "defn/43usb326.h" 238 #include "defn/43usb351.h" 239 #include "defn/43usb353.h" 240 #include "defn/43usb355.h" 246 static DevSuppDefn *devices_supported[] = {
274 DevSuppDefn **dev = devices_supported;
279 len = strlen ((*dev)->name);
281 if (strncmp ((*dev)->name, dev_name, len) == 0)
296 for (dev = devices_supported; (*dev); dev++)
297 fprintf (fp,
" %s\n", (*dev)->name);
301 dev_supp_attach_io_regs (AvrCore *core, DevSuppDefn *dev)
304 struct io_reg_defn *reg = dev->io_reg;
310 if (reg->ref_addr < 0x20)
312 avr_error (
"can't attach IO reg into general register space");
321 avr_error (
"reference vdev hasn't been created yet");
328 reg->reset_value, reg->rd_mask,
331 avr_message (
"attach: IO Reg '%s' at 0x%04x: ref = 0x%04x\n",
332 reg->name, reg->addr, reg->ref_addr);
335 else if (reg->vdev_create)
337 vdev = reg->vdev_create (reg->addr, reg->name, reg->related,
340 reg->reset_value, reg->rd_mask,
347 avr_message (
"attach: IO Reg '%s' at 0x%04x: created\n",
348 reg->name, reg->addr);
353 avr_message (
"TODO: attach IO Reg '%s' at 0x%04x\n", reg->name,
356 avr_core_set_addr_name (core, reg->addr, reg->name);
void vdev_add_addr(VDevice *dev, int addr, char *name, int rel_addr, void *data)
Inform the vdevice that it needs to handle another address.
void avr_core_attach_vdev(AvrCore *core, uint16_t addr, char *name, VDevice *vdev, int flags, uint8_t reset_value, uint8_t rd_mask, uint8_t wr_mask)
Attach a virtual device into the Memory.
DevSuppDefn * dev_supp_lookup_device(char *dev_name)
Look up a device name in support list.
VDevice * avr_core_get_vdev_by_addr(AvrCore *core, int addr)
Returns the VDevice which handles the address addr.
void dev_supp_list_devices(FILE *fp)
Print a list of supported devices to a file pointer.
void class_unref(AvrClass *klass)
Decrements the reference count for the klass object.
#define avr_error(fmt, args...)
Print an error message to stderr and terminate program.
#define avr_message(fmt, args...)
Print an ordinary message to stdout.