From 18412593d68928eb5fdf30ab3a10576b0aee96c0 Mon Sep 17 00:00:00 2001
From: Manfred Steiner <sx@htl-kaindorf.at>
Date: Sun, 4 Dec 2022 15:22:30 +0100
Subject: [PATCH] simuc V0.0.4

---
 examples/simuc/.vscode/settings.json |   8 +-
 examples/simuc/src/main.cpp          |   2 +-
 examples/simuc/src/sim/sim.cpp       |   6 +-
 examples/simuc/src/simavr/simavr.cpp |  54 +-
 log                                  | 738 +++++++++++++++++++++++++++
 5 files changed, 755 insertions(+), 53 deletions(-)
 create mode 100644 log

diff --git a/examples/simuc/.vscode/settings.json b/examples/simuc/.vscode/settings.json
index 4d4585d..4c1291f 100644
--- a/examples/simuc/.vscode/settings.json
+++ b/examples/simuc/.vscode/settings.json
@@ -58,7 +58,13 @@
         "thread": "cpp",
         "cinttypes": "cpp",
         "typeinfo": "cpp",
-        "variant": "cpp"
+        "variant": "cpp",
+        "iom324.h": "c",
+        "sim_megax4.h": "c",
+        "sim_core_declare.h": "c",
+        "iom328p.h": "c",
+        "iom16.h": "c",
+        "sim_avr.h": "c"
     },
     "cSpell.words": [
         "aref",
diff --git a/examples/simuc/src/main.cpp b/examples/simuc/src/main.cpp
index 5606fa9..fe2fe31 100644
--- a/examples/simuc/src/main.cpp
+++ b/examples/simuc/src/main.cpp
@@ -47,7 +47,7 @@ int main (int argc, char **argv) {
     params.avcc = -1;
     params.aref = -1;
     params.nosync = 0;
-    params.log = LOG_NONE;
+    params.log = LOG_WARNING;
 
     if (argc <= 1) {
         const char *fileName = ".simucinit";
diff --git a/examples/simuc/src/sim/sim.cpp b/examples/simuc/src/sim/sim.cpp
index 7f0e3e3..4ba1da0 100644
--- a/examples/simuc/src/sim/sim.cpp
+++ b/examples/simuc/src/sim/sim.cpp
@@ -153,10 +153,8 @@ void init (struct StartParameters *param) {
 			std::logic_error(error(AT, "missing elf filename"));
 		}
 		simavr.load(param);
-		if (strcmp(simavr.getTargetDeviceName(), "atmega324p") != 0) {
-			std::logic_error(error(AT, "invalid target device %s", simavr.getTargetDeviceName()));
-		}
-		
+
+		printf("--------------------------------------------------------------------\n");
 		simavr.setUartDumpEnabled(false);
 		// simavr.registerIoWrite(PORTB, handleWritePortB);
 		simavr.setUartPtyEnabled(0, true);
diff --git a/examples/simuc/src/simavr/simavr.cpp b/examples/simuc/src/simavr/simavr.cpp
index 7c70c96..ac15d1f 100644
--- a/examples/simuc/src/simavr/simavr.cpp
+++ b/examples/simuc/src/simavr/simavr.cpp
@@ -115,6 +115,7 @@ void SimAvr::load (struct StartParameters *params) {
 		} else {
 			avr->gdb_port = 1234;
 		}
+
 		if (params->log >= LOG_TRACE) {
 			printf("init with gdb-port=%d, mmcu=%s, f=%u, vcc=%d, avcc=%d, aref=%d, pc=0x%04x\n",
 				avr->gdb_port, firmware->mmcu, firmware->frequency, firmware->vcc, firmware->avcc, firmware->aref, params->pc < 0 ? 0 : params->pc);
@@ -128,49 +129,6 @@ void SimAvr::load (struct StartParameters *params) {
 		// firmware->eeprom[0] = 0x01;
 		// firmware->eesize = 1024;
 
-		// fuse values set in section .fuse (ORIGIN = 0x820000)
-	    // lock bit values set in section .lock (ORIGIN = 0x830000)
-		printf("Fuse- and Lockbits:");
-		if (firmware->fusesize == 0 && firmware->lockbits == NULL) {
-			printf(" not defined (neither section .eeprom nor section .lock found");
-		} else {
-			if (firmware->fusesize >= 0) {
-				for (uint32_t i = 0; i < firmware->fusesize; i++) {
-					switch (i) {
-						case 0: printf("  LFUSE"); break;
-						case 1: printf("  HFUSE"); break;
-						case 2: printf("  EFUSE"); break;
-						default: printf("  ?="); break;
-					}
-					printf("=0x%02x", firmware->fuse[i]);
-				}
-			}
-			if (firmware->lockbits != NULL) {
-				printf("  LOCK=0x%02x", *firmware->lockbits);
-			}
-			printf("\n");
-			if (firmware->fusesize >= 2) {
-				if (strcmp("atmega324p", firmware->mmcu) == 0 ||
-				    strcmp("atmega328p", firmware->mmcu) == 0 || 
-					strcmp("atmega16", firmware->mmcu) == 0) {
-
-					uint8_t bootsz = ~(firmware->fuse[1] >> 1) & 0x03;
-					uint8_t bootrst = ~(firmware->fuse[1]) & 0x01;
-					if (bootrst && startParameters->pc < 0) {
-						switch (bootsz) {
-							case 0: avr->reset_pc = 0x7000; break; 
-							case 1: avr->reset_pc = 0x7800; break; 
-							case 2: avr->reset_pc = 0x7c00; break; 
-							case 3: avr->reset_pc = 0x7e00; break; 
-						}
-						printf("reset on 0x%04x (HFUSE-> BOOTRST=%d, BOOTSZ=%d%d)\n", avr->reset_pc, bootrst, bootsz & 0x02, bootsz & 0x01);
-					}
-				} else {
-					printf("WARNING: cannot decode FUSE (%s not supported)", firmware->mmcu);
-				}
-			}
-		}
-
 		printf("EEPROM: ");
 		if (firmware->eesize == 0) {
 			printf("not defined (no section .eeprom found)");
@@ -193,6 +151,12 @@ void SimAvr::load (struct StartParameters *params) {
 			printf("reset on 0x%04x (option --pc)\n", avr->reset_pc);
 		}
 
+		// avr_init() sets log level to LOG_WARNING
+		if (avr_init(avr) != 0) {
+			throw std::logic_error(error(AT, "avr_init() fails"));
+		}
+
+		// now we can chang log level to desired value
 		avr->log = params->log;
 		printf("simavr log level: ");
 		switch (avr->log) {
@@ -205,10 +169,6 @@ void SimAvr::load (struct StartParameters *params) {
 			default: printf(" ? (=%d)\n", avr->log); break;
 		}
 
-		if (avr_init(avr) != 0) {
-			throw std::logic_error(error(AT, "avr_init() fails"));
-		}
-
 		avr_load_firmware(avr, firmware);
 		status.state = StateLoaded;
 
diff --git a/log b/log
new file mode 100644
index 0000000..02e7aab
--- /dev/null
+++ b/log
@@ -0,0 +1,738 @@
+./simavr/cores/sim_megaxm1.c:	avr->data[ mcu->lin.r_linbtr] = 0x20;
+./simavr/cores/sim_mega128rfr2.c: * Temporary hack for mangled avr-libc headers
+./simavr/cores/sim_mega324.c:/* borken avr-libc missing these declarations :/ */
+./simavr/cores/sim_mega324.c:// 	avr->fuse_value.lfuse = avr->fuse[0];
+./simavr/cores/sim_mega324.c:// 	avr->fuse_value.hfuse = avr->fuse[1];
+./simavr/cores/sim_mega324.c:// 	avr->fuse_value.efuse = avr->fuse[2];
+./simavr/cores/sim_mega324.c:// 	uint8_t hfuse = avr->fuse_value.hfuse;
+./simavr/cores/sim_mega324.c:// 	avr->fuse_value.bootrst = (hfuse & ~FUSE_BOOTRST) != 0;
+./simavr/cores/sim_mega324.c:// 	avr->fuse_value.bootsz = (((hfuse & ~FUSE_BOOTSZ0) != 0) << 1) | ((hfuse & ~FUSE_BOOTSZ1) != 0);
+./simavr/cores/sim_mega324.c:// 		switch (avr->fuse_value.bootsz) {
+./simavr/cores/sim_mega324.c:// 			case 0: avr->fuse_value.bootloader_pages = 32; break;
+./simavr/cores/sim_mega324.c:// 			case 1: avr->fuse_value.bootloader_pages = 16; break;
+./simavr/cores/sim_mega324.c:// 			case 2: avr->fuse_value.bootloader_pages =  8; break;
+./simavr/cores/sim_mega324.c:// 			case 3: avr->fuse_value.bootloader_pages =  4; break;
+./simavr/cores/sim_mega324.c:// 		uint32_t appEnd = avr->flashend  - avr->fuse_value.bootloader_pages * avr->spm_pagesize;
+./simavr/cores/sim_mega324.c:// 		AVR_LOG(avr, LOG_DEBUG, "HFUSE=0x%02x -> application 0..0x%04x, bootloader: 0x%04x..0x%04x\n", hfuse, appEnd, appEnd + 1, avr->flashend);
+./simavr/cores/sim_mega324.c:// 		if (avr->fuse_value.bootrst == 0) {
+./simavr/cores/sim_mega324.c:// 			avr->reset_pc = appEnd + 1;
+./simavr/cores/sim_mega324.c:// 			avr->pc = avr->reset_pc;
+./simavr/cores/sim_mega324.c:// 			AVR_LOG(avr, LOG_OUTPUT, "HFUSE=0x%02x -> bootloader reset at 0x%04x\n", hfuse, avr->reset_pc);
+./simavr/cores/sim_mega324.c:	// avr->init_fuse_lock = init_fuse_lock;
+./simavr/cores/sim_mega324.c:	// avr->init_fuse_lock(avr);
+./simavr/sim/sim_io.c:	avr_io_t * port = avr->io_port;
+./simavr/sim/sim_io.c:	io->next = avr->io_port;
+./simavr/sim/sim_io.c:	avr->io_port = io;
+./simavr/sim/sim_io.c:	if (avr->io[a].r.param || avr->io[a].r.c) {
+./simavr/sim/sim_io.c:		if (avr->io[a].r.param != param || avr->io[a].r.c != readp) {
+./simavr/sim/sim_io.c:					avr->io[a].r.c, avr->io[a].r.param, readp, param);
+./simavr/sim/sim_io.c:	avr->io[a].r.param = param;
+./simavr/sim/sim_io.c:	avr->io[a].r.c = readp;
+./simavr/sim/sim_io.c:	for (int i = 0; i < avr->io_shared_io[io].used; i++) {
+./simavr/sim/sim_io.c:		avr_io_write_t c = avr->io_shared_io[io].io[i].c;
+./simavr/sim/sim_io.c:			c(avr, addr, v, avr->io_shared_io[io].io[i].param);
+./simavr/sim/sim_io.c:	if (avr->io[a].w.param || avr->io[a].w.c) {
+./simavr/sim/sim_io.c:		if (avr->io[a].w.param != param || avr->io[a].w.c != writep) {
+./simavr/sim/sim_io.c:			if (avr->io[a].w.c != _avr_io_mux_write) {
+./simavr/sim/sim_io.c:				int no = avr->io_shared_io_count++;
+./simavr/sim/sim_io.c:				if (avr->io_shared_io_count > ARRAY_SIZE(avr->io_shared_io)) {
+./simavr/sim/sim_io.c:				avr->io_shared_io[no].used = 1;
+./simavr/sim/sim_io.c:				avr->io_shared_io[no].io[0].param = avr->io[a].w.param;
+./simavr/sim/sim_io.c:				avr->io_shared_io[no].io[0].c = avr->io[a].w.c;
+./simavr/sim/sim_io.c:				avr->io[a].w.param = (void*)(intptr_t)no;
+./simavr/sim/sim_io.c:				avr->io[a].w.c = _avr_io_mux_write;
+./simavr/sim/sim_io.c:			int no = (intptr_t)avr->io[a].w.param;
+./simavr/sim/sim_io.c:			int d = avr->io_shared_io[no].used++;
+./simavr/sim/sim_io.c:			if (avr->io_shared_io[no].used > ARRAY_SIZE(avr->io_shared_io[0].io)) {
+./simavr/sim/sim_io.c:			avr->io_shared_io[no].io[d].param = param;
+./simavr/sim/sim_io.c:			avr->io_shared_io[no].io[d].c = writep;
+./simavr/sim/sim_io.c:	avr->io[a].w.param = param;
+./simavr/sim/sim_io.c:	avr->io[a].w.c = writep;
+./simavr/sim/sim_io.c:	avr_io_t * port = avr->io_port;
+./simavr/sim/sim_io.c:	if (avr->io[a].irq == NULL) {
+./simavr/sim/sim_io.c:		avr->io[a].irq = avr_alloc_irq(&avr->irq_pool, 0, 9, namep);
+./simavr/sim/sim_io.c:			avr->io[a].irq[i].flags |= IRQ_FLAG_FILTERED;
+./simavr/sim/sim_io.c:		free((void*)avr->io[a].irq[index].name);
+./simavr/sim/sim_io.c:		avr->io[a].irq[index].name = strdup(n);
+./simavr/sim/sim_io.c:	return avr->io[a].irq + index;
+./simavr/sim/sim_io.c://				strcpy(dst, io->avr->mmcu);
+./simavr/sim/sim_io.c:		irqs = avr_alloc_irq(&io->avr->irq_pool, 0,
+./simavr/sim/sim_io.c:	avr_io_t * port = avr->io_port;
+./simavr/sim/sim_io.c:	avr->io_port = NULL;
+./simavr/sim/avr_uart.c:			uint8_t st = avr->data[addr];
+./simavr/sim/avr_uart.c:			avr->data[addr] = st;
+./simavr/sim/avr_uart.c:		avr->data[addr] = 0;
+./simavr/sim/avr_uart.c:				((avr->cycle-p->rxc_raise_time)/p->rx_cnt < p->cycles_per_byte)) {
+./simavr/sim/avr_uart.c:	avr->data[addr] = v;
+./simavr/sim/avr_uart.c:	double baud = ((double)avr->frequency) / cycles_per_bit; // can be less than 1
+./simavr/sim/avr_uart.c:	if (avr->gdb) {
+./simavr/sim/sim_interrupts.c:	avr_int_table_p table = &avr->interrupts;
+./simavr/sim/sim_interrupts.c:	avr_init_irq(&avr->irq_pool, table->irq,
+./simavr/sim/sim_interrupts.c:	avr_int_table_p table = &avr->interrupts;
+./simavr/sim/sim_interrupts.c:	avr->interrupt_state = 0;
+./simavr/sim/sim_interrupts.c:	avr_int_table_p table = &avr->interrupts;
+./simavr/sim/sim_interrupts.c:	avr_init_irq(&avr->irq_pool, vector->irq,
+./simavr/sim/sim_interrupts.c:	avr_int_table_p table = &avr->interrupts;
+./simavr/sim/sim_interrupts.c:				vector->vector, !!avr->sreg[S_I], avr_regbit_get(avr, vector->enable),
+./simavr/sim/sim_interrupts.c:				(long long int)avr->cycle, avr->pc);
+./simavr/sim/sim_interrupts.c:	avr_raise_irq(avr->interrupts.irq + AVR_INT_IRQ_PENDING, vector->vector);
+./simavr/sim/sim_interrupts.c:		avr_int_table_p table = &avr->interrupts;
+./simavr/sim/sim_interrupts.c:		if (avr->sreg[S_I] && avr->interrupt_state == 0)
+./simavr/sim/sim_interrupts.c:			avr->interrupt_state = 1;
+./simavr/sim/sim_interrupts.c:		if (avr->state == cpu_Sleeping) {
+./simavr/sim/sim_interrupts.c:			avr->state = cpu_Running;	// in case we were sleeping
+./simavr/sim/sim_interrupts.c:	avr_raise_irq_float(avr->interrupts.irq + AVR_INT_IRQ_PENDING,
+./simavr/sim/sim_interrupts.c:							&avr->interrupts.pending, 0)->vector : 0,
+./simavr/sim/sim_interrupts.c:	avr_raise_irq(avr->interrupts.irq + AVR_INT_IRQ_PENDING,
+./simavr/sim/sim_interrupts.c:	avr_int_table_p table = &avr->interrupts;
+./simavr/sim/sim_interrupts.c:	avr_int_table_p table = &avr->interrupts;
+./simavr/sim/sim_interrupts.c:	if (!avr->sreg[S_I] || !avr->interrupt_state)
+./simavr/sim/sim_interrupts.c:	if (avr->interrupt_state < 0) {
+./simavr/sim/sim_interrupts.c:		avr->interrupt_state++;
+./simavr/sim/sim_interrupts.c:		if (avr->interrupt_state == 0)
+./simavr/sim/sim_interrupts.c:			avr->interrupt_state = avr_has_pending_interrupts(avr);
+./simavr/sim/sim_interrupts.c:	avr_int_table_p table = &avr->interrupts;
+./simavr/sim/sim_interrupts.c:		avr->interrupt_state = avr_has_pending_interrupts(avr);
+./simavr/sim/sim_interrupts.c:		_avr_push_addr(avr, avr->pc);
+./simavr/sim/sim_interrupts.c:		avr->pc = vector->vector * avr->vector_size;
+./simavr/sim/avr_adc.c:                    avr->data[p->r_adcl] = p->result & 0xff;
+./simavr/sim/avr_adc.c:                    avr->data[p->r_adch] = p->result >> 8;
+./simavr/sim/avr_adc.c:			if ( !avr->vcc) {
+./simavr/sim/avr_adc.c:				reg = avr->vcc / 4;
+./simavr/sim/avr_adc.c:			if (!avr->vcc)
+./simavr/sim/avr_adc.c:				vref = avr->vcc;
+./simavr/sim/avr_adc.c:			if (!avr->aref)
+./simavr/sim/avr_adc.c:				vref = avr->aref;
+./simavr/sim/avr_adc.c:			if (!avr->avcc)
+./simavr/sim/avr_adc.c:				vref = avr->avcc;
+./simavr/sim/avr_adc.c:                        v |= (mask & avr->data[p->adsc.reg]);
+./simavr/sim/avr_adc.c:	avr->data[p->adsc.reg] = v;
+./simavr/sim/avr_adc.c:		v = avr->data[p->adsc.reg];
+./simavr/sim/avr_adc.c:		AVR_LOG(avr, LOG_TRACE, "ADC: Start AREF %d AVCC %d\n", avr->aref, avr->avcc);
+./simavr/sim/avr_adc.c:		v = avr->data[p->adsc.reg];	// Peter Ross pross@xvid.org
+./simavr/sim/avr_adc.c:                                (avr->frequency >> div) / 13 / 100);
+./simavr/sim/avr_adc.c:						uint8_t val = avr->data[addr] | (1 << p->adsc.bit);
+./simavr/sim/avr_timer.c:	return p->io.avr->data[p->comp[compi].r_ocr] |
+./simavr/sim/avr_timer.c:					  (p->io.avr->data[p->comp[compi].r_ocrh] << 8) : 0);
+./simavr/sim/avr_timer.c:	return avr->data[comp->r_ocr] |
+./simavr/sim/avr_timer.c:		(ocrh ? (avr->data[ocrh] << 8) : 0);
+./simavr/sim/avr_timer.c:	return p->io.avr->data[p->r_tcnt] |
+./simavr/sim/avr_timer.c:				(p->r_tcnth ? (p->io.avr->data[p->r_tcnth] << 8) : 0);
+./simavr/sim/avr_timer.c:	return p->io.avr->data[p->r_icr] |
+./simavr/sim/avr_timer.c:				(p->r_tcnth ? (p->io.avr->data[p->r_icrh] << 8) : 0);
+./simavr/sim/avr_timer.c:				dispatch[compi](avr, avr->cycle, param);
+./simavr/sim/avr_timer.c:			if (p->comp[compi].comp_cycles < p->tov_cycles && p->comp[compi].comp_cycles >= (avr->cycle - when)) {
+./simavr/sim/avr_timer.c:					p->comp[compi].comp_cycles - (avr->cycle - next),
+./simavr/sim/avr_timer.c:			uint64_t when = avr->cycle - p->tov_base;
+./simavr/sim/avr_timer.c:	avr->data[p->r_tcnt] = tcnt;
+./simavr/sim/avr_timer.c:		avr->data[p->r_tcnth] = tcnt >> 8;
+./simavr/sim/avr_timer.c:			avr_timer_tov(avr, avr->cycle - cycles, p);
+./simavr/sim/avr_timer.c:		//	tcnt = ((avr->cycle - p->tov_base) * p->tov_top) / p->tov_cycles;
+./simavr/sim/avr_timer.c:			resulting_clock = (float)avr->frequency / prescaler;
+./simavr/sim/avr_timer.c:			tov_cycles_exact = (float)avr->frequency / p->ext_clock * prescaler * (top+1);
+./simavr/sim/avr_timer.c:					__FUNCTION__, p->name, ((float)avr->frequency / tov_cycles_exact),
+./simavr/sim/avr_timer.c:			comp_cycles = (uint32_t)((float)avr->frequency / p->ext_clock * prescaler * (ocr+1));
+./simavr/sim/avr_timer.c:				avr_timer_tov(avr, avr->cycle, p);
+./simavr/sim/avr_timer.c:				avr_cycle_timer_register(avr, p->tov_cycles - (avr->cycle - orig_tov_base), avr_timer_tov, p);
+./simavr/sim/avr_timer.c:				//p->cs_div_value = (uint32_t)((uint64_t)avr->frequency * (1 << p->cs_div[new_cs]) / 32768);
+./simavr/sim/avr_timer.c:			avr_timer_comp(p, avr->cycle, compi, 0);
+./simavr/sim/avr_timer.c:	avr->data[p->r_icr] = tcnt;
+./simavr/sim/avr_timer.c:		avr->data[p->r_icrh] = tcnt >> 8;
+./simavr/sim/avr_timer.c:				if (new_freq <= port->avr->frequency/4) {
+./simavr/sim/avr_timer.c:				if (new_freq <= port->avr->frequency/2) {
+./simavr/sim/sim_avr.c:	if (!avr->time_base)
+./simavr/sim/sim_avr.c:		avr->time_base = stamp;
+./simavr/sim/sim_avr.c:	return stamp - avr->time_base;
+./simavr/sim/sim_avr.c:	avr->flash = malloc(avr->flashend + 4);
+./simavr/sim/sim_avr.c:	memset(avr->flash, 0xff, avr->flashend + 1);
+./simavr/sim/sim_avr.c:	*((uint16_t*)&avr->flash[avr->flashend + 1]) = AVR_OVERFLOW_OPCODE;
+./simavr/sim/sim_avr.c:	avr->codeend = avr->flashend;
+./simavr/sim/sim_avr.c:	avr->data = malloc(avr->ramend + 1);
+./simavr/sim/sim_avr.c:	memset(avr->data, 0, avr->ramend + 1);
+./simavr/sim/sim_avr.c:	avr->trace_data = calloc(1, sizeof(struct avr_trace_data_t));
+./simavr/sim/sim_avr.c:	AVR_LOG(avr, LOG_TRACE, "%s init\n", avr->mmcu);
+./simavr/sim/sim_avr.c:	avr->state = cpu_Limbo;
+./simavr/sim/sim_avr.c:	avr->frequency = 1000000;	// can be overridden via avr_mcu_section
+./simavr/sim/sim_avr.c:	if (avr->custom.init)
+./simavr/sim/sim_avr.c:		avr->custom.init(avr, avr->custom.data);
+./simavr/sim/sim_avr.c:	if (avr->init)
+./simavr/sim/sim_avr.c:		avr->init(avr);
+./simavr/sim/sim_avr.c:	avr->run = avr_callback_run_raw;
+./simavr/sim/sim_avr.c:	avr->sleep = avr_callback_sleep_raw;
+./simavr/sim/sim_avr.c:	avr->address_size = avr->eind ? 3 : 2;
+./simavr/sim/sim_avr.c:	avr->log = 1;
+./simavr/sim/sim_avr.c:	avr_regbit_set(avr, avr->reset_flags.porf);		// by  default set to power-on reset
+./simavr/sim/sim_avr.c:	if (avr->custom.deinit)
+./simavr/sim/sim_avr.c:		avr->custom.deinit(avr, avr->custom.data);
+./simavr/sim/sim_avr.c:	if (avr->gdb) {
+./simavr/sim/sim_avr.c:		avr->gdb = NULL;
+./simavr/sim/sim_avr.c:	if (avr->vcd) {
+./simavr/sim/sim_avr.c:		avr_vcd_close(avr->vcd);
+./simavr/sim/sim_avr.c:		avr->vcd = NULL;
+./simavr/sim/sim_avr.c:	if (avr->flash) free(avr->flash);
+./simavr/sim/sim_avr.c:	if (avr->data) free(avr->data);
+./simavr/sim/sim_avr.c:	if (avr->io_console_buffer.buf) {
+./simavr/sim/sim_avr.c:		avr->io_console_buffer.len = 0;
+./simavr/sim/sim_avr.c:		avr->io_console_buffer.size = 0;
+./simavr/sim/sim_avr.c:		free(avr->io_console_buffer.buf);
+./simavr/sim/sim_avr.c:		avr->io_console_buffer.buf = NULL;
+./simavr/sim/sim_avr.c:	avr->flash = avr->data = NULL;
+./simavr/sim/sim_avr.c:	if (avr->cycle > 0) {
+./simavr/sim/sim_avr.c:		AVR_LOG(avr, LOG_OUTPUT, "%s reset (PC set to 0x%04x)\n", avr->mmcu, avr->reset_pc);
+./simavr/sim/sim_avr.c:	avr->state = cpu_Running;
+./simavr/sim/sim_avr.c:	for(int i = 0x20; i <= avr->ioend; i++)
+./simavr/sim/sim_avr.c:		avr->data[i] = 0;
+./simavr/sim/sim_avr.c:	_avr_sp_set(avr, avr->ramend);
+./simavr/sim/sim_avr.c:	avr->pc = avr->reset_pc;	// Likely to be zero
+./simavr/sim/sim_avr.c:		avr->sreg[i] = 0;
+./simavr/sim/sim_avr.c:	if (avr->reset)
+./simavr/sim/sim_avr.c:		avr->reset(avr);
+./simavr/sim/sim_avr.c:	avr_io_t * port = avr->io_port;
+./simavr/sim/sim_avr.c:	avr->cycle = 0; // Prevent crash
+./simavr/sim/sim_avr.c:	avr->state = cpu_Stopped;
+./simavr/sim/sim_avr.c:	if (avr->gdb_port) {
+./simavr/sim/sim_avr.c:		if (!avr->gdb)
+./simavr/sim/sim_avr.c:	if (!avr->gdb)
+./simavr/sim/sim_avr.c:		avr->state = cpu_Crashed;
+./simavr/sim/sim_avr.c:	if (v == '\r' && avr->io_console_buffer.buf) {
+./simavr/sim/sim_avr.c:		avr->io_console_buffer.buf[avr->io_console_buffer.len] = 0;
+./simavr/sim/sim_avr.c:			avr->io_console_buffer.buf);
+./simavr/sim/sim_avr.c:		avr->io_console_buffer.len = 0;
+./simavr/sim/sim_avr.c:	if (avr->io_console_buffer.len + 1 >= avr->io_console_buffer.size) {
+./simavr/sim/sim_avr.c:		avr->io_console_buffer.size += 128;
+./simavr/sim/sim_avr.c:		avr->io_console_buffer.buf = (char*)realloc(
+./simavr/sim/sim_avr.c:			avr->io_console_buffer.buf,
+./simavr/sim/sim_avr.c:			avr->io_console_buffer.size);
+./simavr/sim/sim_avr.c:		avr->io_console_buffer.buf[avr->io_console_buffer.len++] = v;
+./simavr/sim/sim_avr.c:	if ((address + size) > avr->flashend+1) {
+./simavr/sim/sim_avr.c:			size, avr->flashend + 1);
+./simavr/sim/sim_avr.c:	memcpy(avr->flash + address, code, size);
+./simavr/sim/sim_avr.c:	avr->sleep_usec += avr_cycles_to_usec(avr, howLong);
+./simavr/sim/sim_avr.c:	uint32_t usec = avr->sleep_usec;
+./simavr/sim/sim_avr.c:		avr->sleep_usec = 0;
+./simavr/sim/sim_avr.c:	avr_gdb_processor(avr, avr->state == cpu_Stopped ? 50000 : 0);
+./simavr/sim/sim_avr.c:	if (avr->state == cpu_Stopped)
+./simavr/sim/sim_avr.c:	int step = avr->state == cpu_Step;
+./simavr/sim/sim_avr.c:		avr->state = cpu_Running;
+./simavr/sim/sim_avr.c:	avr_flashaddr_t new_pc = avr->pc;
+./simavr/sim/sim_avr.c:	if (avr->state == cpu_Running) {
+./simavr/sim/sim_avr.c:	avr->pc = new_pc;
+./simavr/sim/sim_avr.c:	if (avr->state == cpu_Sleeping) {
+./simavr/sim/sim_avr.c:		if (!avr->sreg[S_I]) {
+./simavr/sim/sim_avr.c:			if (avr->log)
+./simavr/sim/sim_avr.c:			avr->state = cpu_Done;
+./simavr/sim/sim_avr.c:		avr->sleep(avr, sleep);
+./simavr/sim/sim_avr.c:		avr->cycle += 1 + sleep;
+./simavr/sim/sim_avr.c:	if (avr->state == cpu_Running || avr->state == cpu_Sleeping)
+./simavr/sim/sim_avr.c:		avr->state = cpu_StepDone;
+./simavr/sim/sim_avr.c:	uint64_t deadline_ns = avr_cycles_to_nsec(avr, avr->cycle + how_long);
+./simavr/sim/sim_avr.c:	avr_flashaddr_t new_pc = avr->pc;
+./simavr/sim/sim_avr.c:	if (avr->state == cpu_Running) {
+./simavr/sim/sim_avr.c:	avr->pc = new_pc;
+./simavr/sim/sim_avr.c:	if (avr->state == cpu_Sleeping) {
+./simavr/sim/sim_avr.c:		if (!avr->sreg[S_I]) {
+./simavr/sim/sim_avr.c:			if (avr->log)
+./simavr/sim/sim_avr.c:			avr->state = cpu_Done;
+./simavr/sim/sim_avr.c:		avr->sleep(avr, sleep);
+./simavr/sim/sim_avr.c:		avr->cycle += 1 + sleep;
+./simavr/sim/sim_avr.c:	if (avr->state == cpu_Running || avr->state == cpu_Sleeping) {
+./simavr/sim/sim_avr.c:		if (avr->interrupt_state)
+./simavr/sim/sim_avr.c:	avr->run(avr);
+./simavr/sim/sim_avr.c:	return avr->state;
+./simavr/sim/sim_avr.c:			avr->mmcu, avr->flashend, avr->ramend, avr->e2end);
+./simavr/sim/sim_avr.c:	if (!avr || avr->log >= level) {
+./simavr/sim/sim_vcd_file.c:		avr->state = cpu_Done;
+./simavr/sim/sim_vcd_file.c:	next = (log.when * avr->frequency) / (1000*1000*1000);
+./simavr/sim/sim_vcd_file.c:			when = (vcd->period * vcd->avr->frequency) /
+./simavr/sim/sim_vcd_file.c:		.when = vcd->avr->cycle,
+./simavr/sim/sim_vcd_file.c:	avr_init_irq(&vcd->avr->irq_pool, &s->irq, index, 1, names);
+./simavr/sim/sim_vcd_file.c:	vcd->start = vcd->avr->cycle;
+./simavr/sim/avr_extint.c:	if (avr->sreg[S_I]) {
+./simavr/sim/avr_extint.c:	avr_io_t * periferal = avr->io_port;
+./simavr/sim/avr_extint.c:					if (avr->sreg[S_I]) {
+./simavr/sim/sim_elf.c:		avr->frequency = firmware->frequency;
+./simavr/sim/sim_elf.c:		avr->vcc = firmware->vcc;
+./simavr/sim/sim_elf.c:		avr->avcc = firmware->avcc;
+./simavr/sim/sim_elf.c:		avr->aref = firmware->aref;
+./simavr/sim/sim_elf.c:	avr->trace_data->codeline = malloc(scount * sizeof(avr_symbol_t*));
+./simavr/sim/sim_elf.c:	memset(avr->trace_data->codeline, 0, scount * sizeof(avr_symbol_t*));
+./simavr/sim/sim_elf.c:			avr->trace_data->codeline[firmware->symbol[i]->addr >> 1] =
+./simavr/sim/sim_elf.c:		if (!avr->trace_data->codeline[i])
+./simavr/sim/sim_elf.c:			avr->trace_data->codeline[i] = last;
+./simavr/sim/sim_elf.c:			last = avr->trace_data->codeline[i];
+./simavr/sim/sim_elf.c:	avr->codeend = firmware->flashsize +
+./simavr/sim/sim_elf.c:		memcpy(avr->fuse, firmware->fuse, firmware->fusesize);
+./simavr/sim/sim_elf.c:		if (avr->init_fuse_lock) {
+./simavr/sim/sim_elf.c:			avr->init_fuse_lock(avr);
+./simavr/sim/sim_elf.c:		avr->lockbits = firmware->lockbits[0];
+./simavr/sim/sim_elf.c:	avr->vcd = malloc(sizeof(*avr->vcd));
+./simavr/sim/sim_elf.c:	memset(avr->vcd, 0, sizeof(*avr->vcd));
+./simavr/sim/sim_elf.c:		avr->vcd,
+./simavr/sim/sim_elf.c:			avr->vcd->filename);
+./simavr/sim/sim_elf.c:				avr_vcd_add_signal(avr->vcd, irq, 1,
+./simavr/sim/sim_elf.c:				avr_vcd_add_signal(avr->vcd,
+./simavr/sim/sim_elf.c:				avr_vcd_add_signal(avr->vcd, all, 8,
+./simavr/sim/sim_elf.c:						avr_vcd_add_signal(avr->vcd,
+./simavr/sim/sim_elf.c:					avr_vcd_add_signal(avr->vcd, bit, 1, comp);
+./simavr/sim/sim_elf.c:		avr_vcd_start(avr->vcd);
+./simavr/sim/sim_elf.c:				firmware->flashsize = avr->flashend + 1;
+./simavr/sim/sim_elf.c:		//	avr->frequency = f_cpu;
+./simavr/sim/avr_watchdog.c:		p->reset_context.avr_run = avr->run;
+./simavr/sim/avr_watchdog.c:		avr->run = avr_watchdog_run_callback_software_reset;
+./simavr/sim/avr_watchdog.c:	p->cycle_count = (p->cycle_count * avr->frequency) / 128000;
+./simavr/sim/avr_watchdog.c:	uint8_t old_v = avr->data[addr]; // allow gdb to see write...
+./simavr/sim/avr_watchdog.c:		avr->data[addr] = old_v;
+./simavr/sim/avr_watchdog.c:		avr->run = p->reset_context.avr_run;
+./simavr/sim/avr_eeprom.c:		ee_addr = avr->data[p->r_eearl] | (avr->data[p->r_eearh] << 8);
+./simavr/sim/avr_eeprom.c:		ee_addr = avr->data[p->r_eearl];
+./simavr/sim/avr_eeprom.c:				avr->pc);
+./simavr/sim/avr_eeprom.c:		//	printf("eeprom write %04x <- %02x\n", addr, avr->data[p->r_eedr]);
+./simavr/sim/avr_eeprom.c:		p->eeprom[ee_addr] = avr->data[p->r_eedr];
+./simavr/sim/avr_eeprom.c:		avr->data[p->r_eedr] = p->eeprom[ee_addr];
+./simavr/sim/run_avr.c:	avr->log = (log > LOG_TRACE ? LOG_TRACE : log);
+./simavr/sim/run_avr.c:	avr->trace = trace;
+./simavr/sim/run_avr.c:		avr->pc = f.flashbase;
+./simavr/sim/run_avr.c:		for (int vi = 0; vi < avr->interrupts.vector_count; vi++)
+./simavr/sim/run_avr.c:			if (avr->interrupts.vector[vi]->vector == trace_vectors[ti])
+./simavr/sim/run_avr.c:				avr->interrupts.vector[vi]->trace = 1;
+./simavr/sim/run_avr.c:	avr->gdb_port = port;
+./simavr/sim/run_avr.c:		avr->state = cpu_Stopped;
+./simavr/sim/avr_lin.c:	uint32_t lbrr = (avr->data[p->r_linbrrh] << 8) | avr->data[p->r_linbrrl];
+./simavr/sim/avr_lin.c:	//uint32_t baud = avr->frequency / (lbt * (lbrr + 1));
+./simavr/sim/avr_lin.c:	double baud = ((double)avr->frequency) / cycles_per_bit; // can be less than 1
+./simavr/sim/avr_lin.c:	avr->data[p->r_linbtr] = 0x20;
+./simavr/sim/sim_cycle_timers.c:	avr_cycle_timer_pool_t * pool = &avr->cycle_timers;
+./simavr/sim/sim_cycle_timers.c:	avr->run_cycle_count = 1;
+./simavr/sim/sim_cycle_timers.c:	avr->run_cycle_limit = 1;
+./simavr/sim/sim_cycle_timers.c:	avr_cycle_count_t run_cycle_count = ((avr->run_cycle_limit >= sleep_cycle_count) ?
+./simavr/sim/sim_cycle_timers.c:		sleep_cycle_count : avr->run_cycle_limit);
+./simavr/sim/sim_cycle_timers.c:	avr->run_cycle_count = run_cycle_count ? run_cycle_count : 1;
+./simavr/sim/sim_cycle_timers.c:	avr_cycle_timer_pool_t * pool = &avr->cycle_timers;
+./simavr/sim/sim_cycle_timers.c:		if(pool->timer->when > avr->cycle) {
+./simavr/sim/sim_cycle_timers.c:			sleep_cycle_count = pool->timer->when - avr->cycle;
+./simavr/sim/sim_cycle_timers.c:	avr_cycle_timer_pool_t * pool = &avr->cycle_timers;
+./simavr/sim/sim_cycle_timers.c:	when += avr->cycle;
+./simavr/sim/sim_cycle_timers.c:	avr_cycle_timer_pool_t * pool = &avr->cycle_timers;
+./simavr/sim/sim_cycle_timers.c:	avr_cycle_timer_pool_t * pool = &avr->cycle_timers;
+./simavr/sim/sim_cycle_timers.c:	avr_cycle_timer_pool_t * pool = &avr->cycle_timers;
+./simavr/sim/sim_cycle_timers.c:			return 1 + (t->when - avr->cycle);
+./simavr/sim/sim_cycle_timers.c:	avr_cycle_timer_pool_t * pool = &avr->cycle_timers;
+./simavr/sim/sim_cycle_timers.c:		if (when > avr->cycle)
+./simavr/sim/sim_cycle_timers.c:			return avr_cycle_timer_return_sleep_run_cycles_limited(avr, when - avr->cycle);
+./simavr/sim/sim_cycle_timers.c:		} while (when && when <= avr->cycle);
+./simavr/sim/sim_cycle_timers.c:			avr_cycle_timer_insert(avr, when - avr->cycle, t->timer, t->param);
+./simavr/sim/sim_core.c:	if (avr->trace) {\
+./simavr/sim/sim_core.c:		if (avr->trace_data->codeline && avr->trace_data->codeline[avr->pc>>1]) {\
+./simavr/sim/sim_core.c:			const char * symn = avr->trace_data->codeline[avr->pc>>1]->symbol; \
+./simavr/sim/sim_core.c:				printf("%04x: %-25s " _f, avr->pc, symn, ## args);\
+./simavr/sim/sim_core.c:			printf("%s: %04x: " _f, __FUNCTION__, avr->pc, ## args);\
+./simavr/sim/sim_core.c:#define SREG() if (avr->trace && donttrace == 0) {\
+./simavr/sim/sim_core.c:	printf("%04x: \t\t\t\t\t\t\t\t\tSREG = ", avr->pc); \
+./simavr/sim/sim_core.c:		printf("%c", avr->sreg[_sbi] ? toupper(_sreg_bit_name[_sbi]) : '.');\
+./simavr/sim/sim_core.c:	printf("*** CYCLE %" PRI_avr_cycle_count "PC %04x\n", avr->cycle, avr->pc);
+./simavr/sim/sim_core.c:		int pci = (avr->trace_data->old_pci + i) & 0xf;
+./simavr/sim/sim_core.c:				avr->trace_data->old[pci].pc, avr->trace_data->codeline ? avr->trace_data->codeline[avr->trace_data->old[pci].pc>>1]->symbol : "unknown", OLD_PC_SIZE-i, avr->trace_data->old[pci].sp);
+./simavr/sim/sim_core.c:	printf("Stack Ptr %04x/%04x = %d \n", _avr_sp_get(avr), avr->ramend, avr->ramend - _avr_sp_get(avr));
+./simavr/sim/sim_core.c:	return(avr->flash[addr] | (avr->flash[addr + 1] << 8));
+./simavr/sim/sim_core.c:		if (avr->io[io].irq) {
+./simavr/sim/sim_core.c:			uint8_t v = avr->data[addr];
+./simavr/sim/sim_core.c:			avr_raise_irq(avr->io[io].irq + AVR_IOMEM_IRQ_ALL, v);
+./simavr/sim/sim_core.c:				avr_raise_irq(avr->io[io].irq + i, (v >> i) & 1);
+./simavr/sim/sim_core.c:	if (addr > avr->ramend) {
+./simavr/sim/sim_core.c:				avr->pc, _avr_sp_get(avr), _avr_flash_read16le(avr, avr->pc), v, addr, (avr->ramend + 1), addr % (avr->ramend + 1));
+./simavr/sim/sim_core.c:		addr = addr % (avr->ramend + 1);
+./simavr/sim/sim_core.c:				avr->pc, _avr_sp_get(avr), _avr_flash_read16le(avr, avr->pc), addr, v);
+./simavr/sim/sim_core.c:	if (avr->trace_data->stack_frame_index > 1 && addr > avr->trace_data->stack_frame[avr->trace_data->stack_frame_index-2].sp) {
+./simavr/sim/sim_core.c:				avr->pc, _avr_sp_get(avr), addr, v);
+./simavr/sim/sim_core.c:	if (avr->gdb) {
+./simavr/sim/sim_core.c:	avr->data[addr] = v;
+./simavr/sim/sim_core.c:	if (addr > avr->ramend) {
+./simavr/sim/sim_core.c:				avr->pc, _avr_sp_get(avr), _avr_flash_read16le(avr, avr->pc),
+./simavr/sim/sim_core.c:				addr, (avr->ramend + 1), addr % (avr->ramend + 1));
+./simavr/sim/sim_core.c:		addr = addr % (avr->ramend + 1);
+./simavr/sim/sim_core.c:	if (avr->gdb) {
+./simavr/sim/sim_core.c:	return avr->data[addr];
+./simavr/sim/sim_core.c:		avr->data[R_SREG] = v;
+./simavr/sim/sim_core.c:		if (avr->io[io].w.c) {
+./simavr/sim/sim_core.c:			avr->io[io].w.c(avr, r, v, avr->io[io].w.param);
+./simavr/sim/sim_core.c:			avr->data[r] = v;
+./simavr/sim/sim_core.c:			if (avr->io[io].irq) {
+./simavr/sim/sim_core.c:				avr_raise_irq(avr->io[io].irq + AVR_IOMEM_IRQ_ALL, v);
+./simavr/sim/sim_core.c:					avr_raise_irq(avr->io[io].irq + i, (v >> i) & 1);
+./simavr/sim/sim_core.c:		avr->data[r] = v;
+./simavr/sim/sim_core.c:	return avr->data[R_SPL] | (avr->data[R_SPH] << 8);
+./simavr/sim/sim_core.c:	if (addr <= avr->ioend)
+./simavr/sim/sim_core.c:		READ_SREG_INTO(avr, avr->data[R_SREG]);
+./simavr/sim/sim_core.c:		if (avr->io[io].r.c)
+./simavr/sim/sim_core.c:			avr->data[addr] = avr->io[io].r.c(avr, addr, avr->io[io].r.param);
+./simavr/sim/sim_core.c:		if (avr->io[io].irq) {
+./simavr/sim/sim_core.c:			uint8_t v = avr->data[addr];
+./simavr/sim/sim_core.c:			avr_raise_irq(avr->io[io].irq + AVR_IOMEM_IRQ_ALL, v);
+./simavr/sim/sim_core.c:				avr_raise_irq(avr->io[io].irq + i, (v >> i) & 1);
+./simavr/sim/sim_core.c:	for (int i = 0; i < avr->address_size; i++, addr >>= 8, sp--) {
+./simavr/sim/sim_core.c:	return avr->address_size;
+./simavr/sim/sim_core.c:	for (int i = 0; i < avr->address_size; i++, sp++) {
+./simavr/sim/sim_core.c:			avr->pc, avr->trace_data->codeline[avr->pc>>1]->symbol, _avr_sp_get(avr), _avr_flash_read16le(avr, avr->pc));
+./simavr/sim/sim_core.c:			avr->pc, _avr_sp_get(avr), _avr_flash_read16le(avr, avr->pc));
+./simavr/sim/sim_core.c:	if (!avr->trace || donttrace)
+./simavr/sim/sim_core.c:		if (avr->trace_data->touched[r])
+./simavr/sim/sim_core.c:			printf("%s=%02x ", avr_regname(i), avr->data[i]);
+./simavr/sim/sim_core.c:		const uint8_t vd = avr->data[d];
+./simavr/sim/sim_core.c:		const uint8_t vd = avr->data[d], vr = avr->data[r];
+./simavr/sim/sim_core.c:		const uint8_t vr = avr->data[r];
+./simavr/sim/sim_core.c:		const uint8_t vh = avr->data[h];
+./simavr/sim/sim_core.c:		const uint16_t vp = avr->data[p] | (avr->data[p + 1] << 8);
+./simavr/sim/sim_core.c:	avr->trace_data->old[avr->trace_data->old_pci].pc = avr->pc;\
+./simavr/sim/sim_core.c:	avr->trace_data->old[avr->trace_data->old_pci].sp = _avr_sp_get(avr);\
+./simavr/sim/sim_core.c:	avr->trace_data->old_pci = (avr->trace_data->old_pci + 1) & (OLD_PC_SIZE-1);\
+./simavr/sim/sim_core.c:	avr->trace_data->stack_frame[avr->trace_data->stack_frame_index].pc = avr->pc;\
+./simavr/sim/sim_core.c:	avr->trace_data->stack_frame[avr->trace_data->stack_frame_index].sp = _avr_sp_get(avr);\
+./simavr/sim/sim_core.c:	avr->trace_data->stack_frame_index++;
+./simavr/sim/sim_core.c:	if (avr->trace_data->stack_frame_index > 0) \
+./simavr/sim/sim_core.c:		avr->trace_data->stack_frame_index--;
+./simavr/sim/sim_core.c:	avr->sreg[S_Z] = res == 0;
+./simavr/sim/sim_core.c:	avr->sreg[S_N] = (res >> 7) & 1;
+./simavr/sim/sim_core.c:	avr->sreg[S_S] = avr->sreg[S_N] ^ avr->sreg[S_V];
+./simavr/sim/sim_core.c:	avr->sreg[S_Z] = res == 0;
+./simavr/sim/sim_core.c:	avr->sreg[S_N] = (res >> 15) & 1;
+./simavr/sim/sim_core.c:	avr->sreg[S_S] = avr->sreg[S_N] ^ avr->sreg[S_V];
+./simavr/sim/sim_core.c:	avr->sreg[S_H] = (add_carry >> 3) & 1;
+./simavr/sim/sim_core.c:	avr->sreg[S_C] = (add_carry >> 7) & 1;
+./simavr/sim/sim_core.c:	avr->sreg[S_V] = (((rd & rr & ~res) | (~rd & ~rr & res)) >> 7) & 1;
+./simavr/sim/sim_core.c:	avr->sreg[S_H] = (sub_carry >> 3) & 1;
+./simavr/sim/sim_core.c:	avr->sreg[S_C] = (sub_carry >> 7) & 1;
+./simavr/sim/sim_core.c:	avr->sreg[S_V] = (((rd & ~rr & ~res) | (~rd & rr & res)) >> 7) & 1;
+./simavr/sim/sim_core.c:		avr->sreg[S_Z] = 0;
+./simavr/sim/sim_core.c:	avr->sreg[S_N] = (res >> 7) & 1;
+./simavr/sim/sim_core.c:	avr->sreg[S_S] = avr->sreg[S_N] ^ avr->sreg[S_V];
+./simavr/sim/sim_core.c:	avr->sreg[S_H] = (sub_carry >> 3) & 1;
+./simavr/sim/sim_core.c:	avr->sreg[S_C] = (sub_carry >> 7) & 1;
+./simavr/sim/sim_core.c:	avr->sreg[S_V] = (((rd & ~rr & ~res) | (~rd & rr & res)) >> 7) & 1;
+./simavr/sim/sim_core.c:	avr->sreg[S_Z] = res == 0;
+./simavr/sim/sim_core.c:	avr->sreg[S_C] = vr & 1;
+./simavr/sim/sim_core.c:	avr->sreg[S_V] = avr->sreg[S_N] ^ avr->sreg[S_C];
+./simavr/sim/sim_core.c:	avr->sreg[S_S] = avr->sreg[S_N] ^ avr->sreg[S_V];
+./simavr/sim/sim_core.c:	avr->sreg[S_Z] = res == 0;
+./simavr/sim/sim_core.c:	avr->sreg[S_C] = vr & 1;
+./simavr/sim/sim_core.c:	avr->sreg[S_N] = res >> 7;
+./simavr/sim/sim_core.c:	avr->sreg[S_V] = avr->sreg[S_N] ^ avr->sreg[S_C];
+./simavr/sim/sim_core.c:	avr->sreg[S_S] = avr->sreg[S_N] ^ avr->sreg[S_V];
+./simavr/sim/sim_core.c:	avr->sreg[S_V] = 0;
+./simavr/sim/sim_core.c:	if ((avr->pc == 0 && avr->cycle > 0) || avr->pc >= avr->codeend || _avr_sp_get(avr) > avr->ramend) {
+./simavr/sim/sim_core.c://		avr->trace = 1;
+./simavr/sim/sim_core.c:	avr->trace_data->touched[0] = avr->trace_data->touched[1] = avr->trace_data->touched[2] = 0;
+./simavr/sim/sim_core.c:	if (unlikely(avr->pc >= avr->flashend)) {
+./simavr/sim/sim_core.c:	uint32_t		opcode = _avr_flash_read16le(avr, avr->pc);
+./simavr/sim/sim_core.c:	avr_flashaddr_t	new_pc = avr->pc + 2;	// future "default" pc
+./simavr/sim/sim_core.c:							uint8_t res = vd - vr - avr->sreg[S_C];
+./simavr/sim/sim_core.c:							uint8_t res = vd - vr - avr->sreg[S_C];
+./simavr/sim/sim_core.c:							STATE("sbc %s[%02x], %s[%02x] = %02x\n", avr_regname(d), avr->data[d], avr_regname(r), avr->data[r], res);
+./simavr/sim/sim_core.c:									STATE("movw %s:%s, %s:%s[%02x%02x]\n", avr_regname(d), avr_regname(d+1), avr_regname(r), avr_regname(r+1), avr->data[r+1], avr->data[r]);
+./simavr/sim/sim_core.c:									uint16_t vr = avr->data[r] | (avr->data[r + 1] << 8);
+./simavr/sim/sim_core.c:									int16_t res = ((int8_t)avr->data[r]) * ((int8_t)avr->data[d]);
+./simavr/sim/sim_core.c:									STATE("muls %s[%d], %s[%02x] = %d\n", avr_regname(d), ((int8_t)avr->data[d]), avr_regname(r), ((int8_t)avr->data[r]), res);
+./simavr/sim/sim_core.c:									avr->sreg[S_C] = (res >> 15) & 1;
+./simavr/sim/sim_core.c:									avr->sreg[S_Z] = res == 0;
+./simavr/sim/sim_core.c:											res = ((uint8_t)avr->data[r]) * ((int8_t)avr->data[d]);
+./simavr/sim/sim_core.c:											res = ((uint8_t)avr->data[r]) * ((uint8_t)avr->data[d]);
+./simavr/sim/sim_core.c:											res = ((int8_t)avr->data[r]) * ((int8_t)avr->data[d]);
+./simavr/sim/sim_core.c:											res = ((uint8_t)avr->data[r]) * ((int8_t)avr->data[d]);
+./simavr/sim/sim_core.c:									STATE("%s %s[%d], %s[%02x] = %d\n", name, avr_regname(d), ((int8_t)avr->data[d]), avr_regname(r), ((int8_t)avr->data[r]), res);
+./simavr/sim/sim_core.c:									avr->sreg[S_C] = c;
+./simavr/sim/sim_core.c:									avr->sreg[S_Z] = res == 0;
+./simavr/sim/sim_core.c:					STATE("cpse %s[%02x], %s[%02x]\t; Will%s skip\n", avr_regname(d), avr->data[d], avr_regname(r), avr->data[r], res ? "":" not");
+./simavr/sim/sim_core.c:					uint8_t res = vd + vr + avr->sreg[S_C];
+./simavr/sim/sim_core.c:						STATE("rol %s[%02x] = %02x\n", avr_regname(d), avr->data[d], res);
+./simavr/sim/sim_core.c:						STATE("addc %s[%02x], %s[%02x] = %02x\n", avr_regname(d), avr->data[d], avr_regname(r), avr->data[r], res);
+./simavr/sim/sim_core.c:						STATE("tst %s[%02x]\n", avr_regname(d), avr->data[d]);
+./simavr/sim/sim_core.c:						STATE("clr %s[%02x]\n", avr_regname(d), avr->data[d]);
+./simavr/sim/sim_core.c:			uint8_t res = vh - k - avr->sreg[S_C];
+./simavr/sim/sim_core.c:					uint16_t v = avr->data[R_ZL] | (avr->data[R_ZH] << 8);
+./simavr/sim/sim_core.c:						STATE("st (Z+%d[%04x]), %s[%02x]\n", q, v+q, avr_regname(d), avr->data[d]);
+./simavr/sim/sim_core.c:						_avr_set_ram(avr, v+q, avr->data[d]);
+./simavr/sim/sim_core.c:						STATE("ld %s, (Z+%d[%04x])=[%02x]\n", avr_regname(d), q, v+q, avr->data[v+q]);
+./simavr/sim/sim_core.c:					uint16_t v = avr->data[R_YL] | (avr->data[R_YH] << 8);
+./simavr/sim/sim_core.c:						STATE("st (Y+%d[%04x]), %s[%02x]\n", q, v+q, avr_regname(d), avr->data[d]);
+./simavr/sim/sim_core.c:						_avr_set_ram(avr, v+q, avr->data[d]);
+./simavr/sim/sim_core.c:						STATE("ld %s, (Y+%d[%04x])=[%02x]\n", avr_regname(d), q, v+q, avr->data[d+q]);
+./simavr/sim/sim_core.c:					if (!avr_has_pending_interrupts(avr) || !avr->sreg[S_I])
+./simavr/sim/sim_core.c:						avr->state = cpu_Sleeping;
+./simavr/sim/sim_core.c:					if (avr->gdb) {
+./simavr/sim/sim_core.c:						avr->state = cpu_Stopped;
+./simavr/sim/sim_core.c:					if (e && !avr->eind)
+./simavr/sim/sim_core.c:					uint32_t z = avr->data[R_ZL] | (avr->data[R_ZH] << 8);
+./simavr/sim/sim_core.c:						z |= avr->data[avr->eind] << 16;
+./simavr/sim/sim_core.c:					cycle += 1 + avr->address_size;
+./simavr/sim/sim_core.c:					uint16_t z = avr->data[R_ZL] | (avr->data[R_ZH] << 8);
+./simavr/sim/sim_core.c:					_avr_set_r(avr, 0, avr->flash[z]);
+./simavr/sim/sim_core.c:					if (!avr->rampz)
+./simavr/sim/sim_core.c:					uint32_t z = avr->data[R_ZL] | (avr->data[R_ZH] << 8) | (avr->data[avr->rampz] << 16);
+./simavr/sim/sim_core.c:					_avr_set_r(avr, 0, avr->flash[z]);
+./simavr/sim/sim_core.c:							STATE("lds %s[%02x], 0x%04x\n", avr_regname(d), avr->data[d], x);
+./simavr/sim/sim_core.c:							uint16_t z = avr->data[R_ZL] | (avr->data[R_ZH] << 8);
+./simavr/sim/sim_core.c:							_avr_set_r(avr, d, avr->flash[z]);
+./simavr/sim/sim_core.c:							if (!avr->rampz)
+./simavr/sim/sim_core.c:							uint32_t z = avr->data[R_ZL] | (avr->data[R_ZH] << 8) | (avr->data[avr->rampz] << 16);
+./simavr/sim/sim_core.c:							_avr_set_r(avr, d, avr->flash[z]);
+./simavr/sim/sim_core.c:								_avr_set_r(avr, avr->rampz, z >> 16);
+./simavr/sim/sim_core.c:							uint16_t x = (avr->data[R_XH] << 8) | avr->data[R_XL];
+./simavr/sim/sim_core.c:							uint16_t x = (avr->data[R_XH] << 8) | avr->data[R_XL];
+./simavr/sim/sim_core.c:							uint16_t y = (avr->data[R_YH] << 8) | avr->data[R_YL];
+./simavr/sim/sim_core.c:							uint16_t y = (avr->data[R_YH] << 8) | avr->data[R_YL];
+./simavr/sim/sim_core.c:							uint16_t z = (avr->data[R_ZH] << 8) | avr->data[R_ZL];
+./simavr/sim/sim_core.c:							uint16_t z = (avr->data[R_ZH] << 8) | avr->data[R_ZL];
+./simavr/sim/sim_core.c:							STATE("pop %s (@%04x)[%02x]\n", avr_regname(d), sp, avr->data[sp]);
+./simavr/sim/sim_core.c:							avr->sreg[S_C] = 1;
+./simavr/sim/sim_core.c:							avr->sreg[S_H] = ((res >> 3) | (vd >> 3)) & 1;
+./simavr/sim/sim_core.c:							avr->sreg[S_V] = res == 0x80;
+./simavr/sim/sim_core.c:							avr->sreg[S_C] = res != 0;
+./simavr/sim/sim_core.c:							avr->sreg[S_V] = res == 0x80;
+./simavr/sim/sim_core.c:							avr->sreg[S_N] = 0;
+./simavr/sim/sim_core.c:							uint8_t res = (avr->sreg[S_C] ? 0x80 : 0) | vd >> 1;
+./simavr/sim/sim_core.c:							avr->sreg[S_V] = res == 0x7f;
+./simavr/sim/sim_core.c:									avr->sreg[S_V] = ((~vp & res) >> 15) & 1;
+./simavr/sim/sim_core.c:									avr->sreg[S_C] = ((~res & vp) >> 15) & 1;
+./simavr/sim/sim_core.c:									avr->sreg[S_V] = ((vp & ~res) >> 15) & 1;
+./simavr/sim/sim_core.c:									avr->sreg[S_C] = ((res & ~vp) >> 15) & 1;
+./simavr/sim/sim_core.c:									STATE("cbi %s[%04x], 0x%02x = %02x\n", avr_regname(io), avr->data[io], mask, res);
+./simavr/sim/sim_core.c:									STATE("sbic %s[%04x], 0x%02x\t; Will%s branch\n", avr_regname(io), avr->data[io], mask, !res?"":" not");
+./simavr/sim/sim_core.c:									STATE("sbi %s[%04x], 0x%02x = %02x\n", avr_regname(io), avr->data[io], mask, res);
+./simavr/sim/sim_core.c:									STATE("sbis %s[%04x], 0x%02x\t; Will%s branch\n", avr_regname(io), avr->data[io], mask, res?"":" not");
+./simavr/sim/sim_core.c:											avr->sreg[S_Z] = res == 0;
+./simavr/sim/sim_core.c:											avr->sreg[S_C] = (res >> 15) & 1;
+./simavr/sim/sim_core.c:					STATE("out %s, %s[%02x]\n", avr_regname(A), avr_regname(d), avr->data[d]);
+./simavr/sim/sim_core.c:					_avr_set_ram(avr, A, avr->data[d]);
+./simavr/sim/sim_core.c:					STATE("in %s, %s[%02x]\n", avr_regname(d), avr_regname(A), avr->data[A]);
+./simavr/sim/sim_core.c:			new_pc = (new_pc + o) % (avr->flashend+1);
+./simavr/sim/sim_core.c:			new_pc = (new_pc + o) % (avr->flashend+1);
+./simavr/sim/sim_core.c:					int branch = (avr->sreg[s] && set) || (!avr->sreg[s] && !set);
+./simavr/sim/sim_core.c:					uint8_t v = (vd & ~mask) | (avr->sreg[S_T] ? mask : 0);
+./simavr/sim/sim_core.c:					avr->sreg[S_T] = (vd >> s) & 1;
+./simavr/sim/sim_core.c:	avr->cycle += cycle;
+./simavr/sim/sim_core.c:	if ((avr->state == cpu_Running) &&
+./simavr/sim/sim_core.c:		(avr->run_cycle_count > cycle) &&
+./simavr/sim/sim_core.c:		(avr->interrupt_state == 0))
+./simavr/sim/sim_core.c:		avr->run_cycle_count -= cycle;
+./simavr/sim/sim_core.c:		avr->pc = new_pc;
+./simavr/sim/avr_ioport.c:	uint8_t ddr = avr->data[p->r_ddr];
+./simavr/sim/avr_ioport.c:	uint8_t v = (avr->data[p->r_pin] & ~ddr) | (avr->data[p->r_port] & ddr);
+./simavr/sim/avr_ioport.c:	avr->data[addr] = v;
+./simavr/sim/avr_ioport.c:	D(if (avr->data[addr] != v) printf("** PIN%c(%02x) = %02x\r\n", p->name, addr, v);)
+./simavr/sim/avr_ioport.c:	uint8_t ddr = avr->data[p->r_ddr];
+./simavr/sim/avr_ioport.c:			avr_raise_irq(p->io.irq + i, (avr->data[p->r_port] >> i) & 1);
+./simavr/sim/avr_ioport.c:		else if ((avr->data[p->r_port] >> i) & 1)
+./simavr/sim/avr_ioport.c:	uint8_t pin = (avr->data[p->r_pin] & ~ddr) | (avr->data[p->r_port] & ddr);
+./simavr/sim/avr_ioport.c:	if (avr->io[port_io].irq) {
+./simavr/sim/avr_ioport.c:		avr_raise_irq(avr->io[port_io].irq + AVR_IOMEM_IRQ_ALL, avr->data[p->r_port]);
+./simavr/sim/avr_ioport.c:			avr_raise_irq(avr->io[port_io].irq + i, (avr->data[p->r_port] >> i) & 1);
+./simavr/sim/avr_ioport.c:	D(if (avr->data[addr] != v) printf("** PORT%c(%02x) = %02x\r\n", p->name, addr, v);)
+./simavr/sim/avr_ioport.c:	avr_ioport_write(avr, p->r_port, avr->data[p->r_port] ^ v, param);
+./simavr/sim/avr_ioport.c:	D(if (avr->data[addr] != v) printf("** DDR%c(%02x) = %02x\r\n", p->name, addr, v);)
+./simavr/sim/avr_ioport.c:	uint8_t ddr = avr->data[p->r_ddr];
+./simavr/sim/avr_ioport.c:				 (avr->data[p->r_port] & ~mask) |
+./simavr/sim/avr_ioport.c:							 (avr->data[p->r_pin] & ~mask) |
+./simavr/sim/avr_ioport.c:		int raisedata = avr->data[p->r_pcint];
+./simavr/sim/avr_ioport.c:					.port = avr->data[p->r_port],
+./simavr/sim/avr_ioport.c:					.ddr = avr->data[p->r_ddr],
+./simavr/sim/avr_ioport.c:					.pin = avr->data[p->r_pin],
+./simavr/sim/avr_ioport.c:		printf("skipping PORT%c for core %s\n", p->name, avr->mmcu);
+./simavr/sim/sim_cmds.c:	avr_cmd_table_t * commands = &avr->commands;
+./simavr/sim/sim_cmds.c:	avr_cmd_table_t * commands = &avr->commands;
+./simavr/sim/sim_cmds.c:	avr_cmd_table_t * commands = &avr->commands;
+./simavr/sim/sim_cmds.c:	if (avr->vcd)
+./simavr/sim/sim_cmds.c:		avr_vcd_start(avr->vcd);
+./simavr/sim/sim_cmds.c:	if (avr->vcd)
+./simavr/sim/sim_cmds.c:		avr_vcd_stop(avr->vcd);
+./simavr/sim/sim_cmds.c:	memset(&avr->commands, 0, sizeof(avr->commands));
+./simavr/sim/avr_flash.c:	avr_flashaddr_t z = avr->data[R_ZL] | (avr->data[R_ZH] << 8);
+./simavr/sim/avr_flash.c:	if (avr->rampz)
+./simavr/sim/avr_flash.c:		z |= avr->data[avr->rampz] << 16;
+./simavr/sim/avr_flash.c:	uint16_t r01 = avr->data[0] | (avr->data[1] << 8);
+./simavr/sim/avr_flash.c://	printf("AVR_IOCTL_FLASH_SPM %02x Z:%04x R01:%04x\n", avr->data[p->r_spm], z,r01);
+./simavr/sim/avr_flash.c:				avr->flash[z++] = 0xff;
+./simavr/sim/avr_flash.c:				avr->flash[z++] = p->tmppage[i];
+./simavr/sim/avr_flash.c:				avr->flash[z++] = p->tmppage[i] >> 8;
+./simavr/sim/avr_usb.c:	return p->io.avr->data[p->r_usbcon + uenum];
+./simavr/sim/avr_usb.c:	avr->data[p->r_usbcon + ueint] |= 1 << ep;
+./simavr/sim/avr_usb.c:	uint8_t * Rudien = &p->io.avr->data[p->r_usbcon + udien];
+./simavr/sim/avr_usb.c:	uint8_t * Rudint = &p->io.avr->data[p->r_usbcon + udint];
+./simavr/sim/avr_usb.c:	if(avr->data[addr]&1 && !(v&1))
+./simavr/sim/avr_usb.c:		avr->data[p->r_usbcon + ueint] &= 0xff ^ (1 << ep); // mark ep0 interrupt
+./simavr/sim/avr_usb.c:	if (avr->data[p->r_usbcon + udcon] & 1)
+./simavr/sim/avr_usb.c:		p->io.avr->data[p->r_usbcon + i] = 0;
+./simavr/sim/avr_usb.c:	p->io.avr->data[p->r_usbcon] = 0x20;
+./simavr/sim/avr_usb.c:	p->io.avr->data[p->r_usbcon + udcon] = 1;
+./simavr/sim/avr_twi.c:	uint16_t bitrate =  p->io.avr->data[p->r_twbr];
+./simavr/sim/avr_twi.c:		if (avr->data[p->r_twar]) {
+./simavr/sim/avr_twi.c:			AVR_TRACE(avr, "TWEN Slave: %02x&%02x\n", avr->data[p->r_twar] >> 1, avr->data[p->r_twamr] >> 1);
+./simavr/sim/avr_twi.c:						avr_twi_irq_msg(TWI_COND_READ | TWI_COND_ACK, p->peer_addr, avr->data[p->r_twdr]));
+./simavr/sim/avr_twi.c:					avr_twi_irq_msg(TWI_COND_ADDR + (do_ack ? TWI_COND_ACK : 0), p->peer_addr, avr->data[p->r_twdr]));
+./simavr/sim/avr_twi.c:						p->peer_addr, avr->data[p->r_twdr]));
+./simavr/sim/avr_twi.c:				AVR_TRACE(avr, "I2C WRITE byte %02x to %02x\n", avr->data[p->r_twdr], p->peer_addr);
+./simavr/sim/avr_twi.c:						avr_twi_irq_msg(msgv, p->peer_addr, avr->data[p->r_twdr]));
+./simavr/sim/avr_twi.c:			AVR_TRACE(avr, "I2C Master address %02x\n", avr->data[p->r_twdr]);
+./simavr/sim/avr_twi.c:			p->peer_addr = avr->data[p->r_twdr];
+./simavr/sim/avr_twi.c:	return avr->data[p->r_twdr];
+./simavr/sim/avr_twi.c:			uint8_t mask = ~avr->data[p->r_twamr] >> 1;
+./simavr/sim/avr_twi.c:				msg.u.twi.addr, avr->data[p->r_twar] >> 1, mask);
+./simavr/sim/avr_twi.c:			if (p->peer_addr == ((avr->data[p->r_twar] >> 1) & mask)) {
+./simavr/sim/avr_twi.c:			if (avr->data[p->r_twar] & 1) {
+./simavr/sim/avr_twi.c:			avr->data[p->r_twdr] = msg.u.twi.data;
+./simavr/sim/avr_twi.c:			avr->data[p->r_twdr] = msg.u.twi.data;
+./simavr/sim/sim_gdb.c:				avr->data[R_SPL], avr->data[R_SPH],
+./simavr/sim/sim_gdb.c:				avr->pc & 0xff, (avr->pc >> 8) & 0xff,
+./simavr/sim/sim_gdb.c:				(avr->pc >> 16) & 0xff);
+./simavr/sim/sim_gdb.c:			g->avr->data[regi] = *src;
+./simavr/sim/sim_gdb.c:			g->avr->data[R_SREG] = *src;
+./simavr/sim/sim_gdb.c:			g->avr->data[R_SPL] = src[0];
+./simavr/sim/sim_gdb.c:			g->avr->data[R_SPH] = src[1];
+./simavr/sim/sim_gdb.c:			g->avr->pc = src[0] | (src[1] << 8) | (src[2] << 16) | (src[3] << 24);
+./simavr/sim/sim_gdb.c:			sprintf(rep, "%02x", g->avr->data[regi]);
+./simavr/sim/sim_gdb.c:			sprintf(rep, "%02x%02x", g->avr->data[R_SPL], g->avr->data[R_SPH]);
+./simavr/sim/sim_gdb.c:				g->avr->pc & 0xff, (g->avr->pc>>8)&0xff, (g->avr->pc>>16)&0xff);
+./simavr/sim/sim_gdb.c:			avr->state = cpu_Stopped;
+./simavr/sim/sim_gdb.c:			avr->state = cpu_Stopped;
+./simavr/sim/sim_gdb.c:					base + count + 32 > avr->ioend) {
+./simavr/sim/sim_gdb.c:			if (addr + count > avr->ioend)
+./simavr/sim/sim_gdb.c:				count = avr->ioend + 1 - addr;
+./simavr/sim/sim_gdb.c:						 name, avr->data[addr + i]);
+./simavr/sim/sim_gdb.c:						avr->ioend > REG_NAME_COUNT ?
+./simavr/sim/sim_gdb.c:							REG_NAME_COUNT - 32 : avr->ioend - 32;
+./simavr/sim/sim_gdb.c:		if (addr < avr->flashend) {
+./simavr/sim/sim_gdb.c:			src = avr->flash + addr;
+./simavr/sim/sim_gdb.c:			if (addr + len > avr->flashend)
+./simavr/sim/sim_gdb.c:				len = avr->flashend - addr;
+./simavr/sim/sim_gdb.c:			} else if (addr < avr->flashend) {
+./simavr/sim/sim_gdb.c:				src = avr->flash + addr;
+./simavr/sim/sim_gdb.c:				limit = avr->flash + avr->flashend;
+./simavr/sim/sim_gdb.c:						   (src - avr->flash) - addr);)
+./simavr/sim/sim_gdb.c:				addr = src - avr->flash; // Address of end.
+./simavr/sim/sim_gdb.c:				if (addr > avr->codeend) // Checked by sim_core.c
+./simavr/sim/sim_gdb.c:					avr->codeend = addr;
+./simavr/sim/sim_gdb.c:						g->avr->ramend + 1, g->avr->flashend + 1);
+./simavr/sim/sim_gdb.c:			if (addr <= avr->flashend) {
+./simavr/sim/sim_gdb.c:				src = avr->flash + addr;
+./simavr/sim/sim_gdb.c:			} else if (addr >= 0x800000 && (addr - 0x800000) <= avr->ramend) {
+./simavr/sim/sim_gdb.c:				src = avr->data + addr - 0x800000;
+./simavr/sim/sim_gdb.c:			} else if (addr == (0x800000 + avr->ramend + 1) && len == 2) {
+./simavr/sim/sim_gdb.c:			} else if (addr >= 0x810000 && (addr - 0x810000) <= avr->e2end) {
+./simavr/sim/sim_gdb.c:						addr, len, avr->ramend+1);
+./simavr/sim/sim_gdb.c:				read_hex_string(start + 1, avr->flash + addr, strlen(start+1));
+./simavr/sim/sim_gdb.c:			} else if (addr >= 0x800000 && (addr - 0x800000) <= avr->ramend) {
+./simavr/sim/sim_gdb.c:				read_hex_string(start + 1, avr->data + addr - 0x800000, strlen(start+1));
+./simavr/sim/sim_gdb.c:			} else if (addr >= 0x810000 && (addr - 0x810000) <= avr->e2end) {
+./simavr/sim/sim_gdb.c:			avr->state = cpu_Running;
+./simavr/sim/sim_gdb.c:			avr->state = cpu_Step;
+./simavr/sim/sim_gdb.c:			avr->state = cpu_Stopped;
+./simavr/sim/sim_gdb.c:					if (addr > avr->flashend ||
+./simavr/sim/sim_gdb.c:					if (addr > avr->ramend ||
+./simavr/sim/sim_gdb.c:			if (avr->state = cpu_Stopped)
+./simavr/sim/sim_gdb.c:				avr->state = cpu_Running;
+./simavr/sim/sim_gdb.c:			avr->state = cpu_Done;
+./simavr/sim/sim_gdb.c:		g->avr->state = cpu_Stopped;
+./simavr/sim/sim_gdb.c:			g->avr->state = cpu_Running;	// resume
+./simavr/sim/sim_gdb.c:			g->avr->state = cpu_Stopped;
+./simavr/sim/sim_gdb.c:	avr_gdb_t *g = avr->gdb;
+./simavr/sim/sim_gdb.c:	avr_gdb_t *g = avr->gdb;
+./simavr/sim/sim_gdb.c:		avr->state = cpu_Stopped;
+./simavr/sim/sim_gdb.c:	if (!avr || !avr->gdb)
+./simavr/sim/sim_gdb.c:	avr_gdb_t * g = avr->gdb;
+./simavr/sim/sim_gdb.c:	if (avr->state == cpu_Running &&
+./simavr/sim/sim_gdb.c:			gdb_watch_find(&g->breakpoints, avr->pc) != -1) {
+./simavr/sim/sim_gdb.c:		DBG(printf("avr_gdb_processor hit breakpoint at %08x\n", avr->pc);)
+./simavr/sim/sim_gdb.c:		avr->state = cpu_Stopped;
+./simavr/sim/sim_gdb.c:	} else if (avr->state == cpu_StepDone) {
+./simavr/sim/sim_gdb.c:		avr->state = cpu_Stopped;
+./simavr/sim/sim_gdb.c:	if (avr->gdb)
+./simavr/sim/sim_gdb.c:	avr->gdb = NULL;
+./simavr/sim/sim_gdb.c:	address.sin_port = htons (avr->gdb_port);
+./simavr/sim/sim_gdb.c:	printf("avr_gdb_init listening on port %d\n", avr->gdb_port);
+./simavr/sim/sim_gdb.c:	avr->gdb = g;
+./simavr/sim/sim_gdb.c:	avr->run = avr_callback_run_gdb;
+./simavr/sim/sim_gdb.c:	avr->sleep = avr_callback_sleep_gdb;
+./simavr/sim/sim_gdb.c:	if (!avr->gdb)
+./simavr/sim/sim_gdb.c:	avr->run = avr_callback_run_raw; // restore normal callbacks
+./simavr/sim/sim_gdb.c:	avr->sleep = avr_callback_sleep_raw;
+./simavr/sim/sim_gdb.c:	if (avr->gdb->listen != -1)
+./simavr/sim/sim_gdb.c:		close(avr->gdb->listen);
+./simavr/sim/sim_gdb.c:	avr->gdb->listen = -1;
+./simavr/sim/sim_gdb.c:	if (avr->gdb->s != -1)
+./simavr/sim/sim_gdb.c:		close(avr->gdb->s);
+./simavr/sim/sim_gdb.c:	avr->gdb->s = -1;
+./simavr/sim/sim_gdb.c:	free(avr->gdb);
+./simavr/sim/sim_gdb.c:	avr->gdb = NULL;
+./simavr/sim/avr_spi.c:			avr_raise_irq(p->io.irq + SPI_IRQ_OUTPUT, avr->data[p->r_spdr]);
+./simavr/sim/avr_spi.c:		uint16_t clock_shift = _avr_spi_clkdiv[avr->data[p->r_spcr]&0b11];
+./simavr/sim/avr_spi.c:		avr_raise_irq(p->io.irq + SPI_IRQ_OUTPUT, avr->data[p->r_spdr]);
+./tests/test_atmega2560_uart_echo.c:	avr->log = LOG_TRACE;
+./tests/tests.c:	if (avr->state == cpu_Stopped)
+./tests/tests.c:		return avr->state;
+./tests/tests.c:	uint16_t new_pc = avr->pc;
+./tests/tests.c:	if (avr->state == cpu_Running)
+./tests/tests.c:	avr->pc = new_pc;
+./tests/tests.c:	if (avr->state == cpu_Sleeping) {
+./tests/tests.c:		if (!avr->sreg[S_I]) {
+./tests/tests.c:		avr->cycle += 1 + sleep;
+./tests/tests.c:	if (avr->state == cpu_Running || avr->state == cpu_Sleeping)
+./tests/tests.c:	return avr->state;
+./tests/tests.c:	avr->custom.deinit = special_deinit_longjmp_cb;
+./tests/tests.c:	tests_cycle_count = avr->cycle;
+./tests/atmega88_uart_echo.c:	// see http://www.nongnu.org/avr-libc/user-manual/group__util__setbaud.html
+./tests/atmega2560_uart_echo.c:#ifdef USART3_RX_vect_num	// stupid ubuntu has antique avr-libc
+./tests/atmega2560_uart_echo.c:	// see http://www.nongnu.org/avr-libc/user-manual/group__util__setbaud.html
+./examples/board_i2ctest/i2ctest.c:	avr->gdb_port = 1234;
+./examples/board_i2ctest/i2ctest.c:		//avr->state = cpu_Stopped;
+./examples/board_rotenc/rotenc_test.c:	//avr->gdb_port = 1234;
+./examples/board_rotenc/rotenc_test.c:	//avr->state = cpu_Stopped;
+./examples/board_ledramp/ledramp.c:	avr->gdb_port = 1234;
+./examples/board_ledramp/ledramp.c:		//avr->state = cpu_Stopped;
+./examples/simuc/src/simavr/parts/uart_pty.c:	p->irq = avr_alloc_irq(&avr->irq_pool, 0, IRQ_UART_PTY_COUNT, irq_names);
+./examples/simuc/src/simavr/parts/uart_pty.c:		snprintf(link, sizeof(link), "/tmp/simavr-uart%c%s", uart, ti == 1 ? "-tap" : "");
+./examples/board_ds1338/twimaster.c:* Software: AVR-GCC 3.4.3 / avr-libc 1.2.3
+./examples/board_ds1338/ds1338demo.c:	avr->gdb_port = 1234;
+./examples/board_ds1338/ds1338demo.c:		avr->state = cpu_Stopped;
+./examples/shared/twimaster.c:* Software: AVR-GCC 3.4.3 / avr-libc 1.2.3
+./examples/parts/uart_pty.c:	p->irq = avr_alloc_irq(&avr->irq_pool, 0, IRQ_UART_PTY_COUNT, irq_names);
+./examples/parts/uart_pty.c:		snprintf(link, sizeof(link), "/tmp/simavr-uart%c%s", uart, ti == 1 ? "-tap" : "");
+./examples/parts/i2c_eeprom.c:	p->irq = avr_alloc_irq(&avr->irq_pool, 0, 2, _ee_irq_names);
+./examples/parts/ac_input.c:	b->irq = avr_alloc_irq(&avr->irq_pool, 0, IRQ_AC_COUNT, &name);
+./examples/parts/ds1338_virt.c:	p->irq = avr_alloc_irq(&avr->irq_pool, 0, DS1338_IRQ_COUNT, _ds1338_irq_names);
+./examples/parts/hd44780.c:	b->irq = avr_alloc_irq(&avr->irq_pool, 0, IRQ_HD44780_COUNT, irq_names);
+./examples/parts/hc595.c:	p->irq = avr_alloc_irq(&avr->irq_pool, 0, IRQ_HC595_COUNT, irq_names);
+./examples/parts/button.c:	b->irq = avr_alloc_irq(&avr->irq_pool, 0, IRQ_BUTTON_COUNT, &name);
+./examples/parts/rotenc.c:			&avr->irq_pool,
+./examples/parts/ssd1306_virt.c:	part->irq = avr_alloc_irq (&avr->irq_pool, 0, IRQ_SSD1306_COUNT,
+./examples/parts/uart_udp.c:	p->irq = avr_alloc_irq(&avr->irq_pool, 0, IRQ_UART_UDP_COUNT, irq_names);
+./examples/board_timer_64led/timer_64led.c:	avr->gdb_port = 1234;
+./examples/board_timer_64led/timer_64led.c:		//avr->state = cpu_Stopped;
+./examples/board_simduino/simduino.c:	(void)ftruncate(flash_data->avr_flash_fd, avr->flashend + 1);
+./examples/board_simduino/simduino.c:	ssize_t r = read(flash_data->avr_flash_fd, avr->flash, avr->flashend + 1);
+./examples/board_simduino/simduino.c:	if (r != avr->flashend + 1) {
+./examples/board_simduino/simduino.c:	ssize_t r = write(flash_data->avr_flash_fd, avr->flash, avr->flashend + 1);
+./examples/board_simduino/simduino.c:	if (r != avr->flashend + 1) {
+./examples/board_simduino/simduino.c:	avr->custom.init = avr_special_init;
+./examples/board_simduino/simduino.c:	avr->custom.deinit = avr_special_deinit;
+./examples/board_simduino/simduino.c:	avr->custom.data = &flash_data;
+./examples/board_simduino/simduino.c:	avr->frequency = freq;
+./examples/board_simduino/simduino.c:	memcpy(avr->flash + boot_base, boot, boot_size);
+./examples/board_simduino/simduino.c:	avr->pc = boot_base;
+./examples/board_simduino/simduino.c:	avr->codeend = avr->flashend;
+./examples/board_simduino/simduino.c:	avr->log = 1 + verbose;
+./examples/board_simduino/simduino.c:	avr->gdb_port = 1234;
+./examples/board_simduino/simduino.c:		avr->state = cpu_Stopped;
+./examples/extra_board_usb/simusb.c:	if(avr->flash) free(avr->flash);
+./examples/extra_board_usb/simusb.c:	(void)ftruncate(flash_data->avr_flash_fd, avr->flashend + 1);
+./examples/extra_board_usb/simusb.c:	avr->flash = (uint8_t*)mmap(NULL, avr->flashend + 1, // 32k is multiple of 4096
+./examples/extra_board_usb/simusb.c:	if (!avr->flash) {
+./examples/extra_board_usb/simusb.c:	munmap( avr->flash, avr->flashend + 1);
+./examples/extra_board_usb/simusb.c:	avr->flash = NULL;
+./examples/extra_board_usb/simusb.c:	avr->custom.init = avr_special_init;
+./examples/extra_board_usb/simusb.c:	avr->custom.deinit = avr_special_deinit;
+./examples/extra_board_usb/simusb.c:	avr->custom.data = &flash_data;
+./examples/extra_board_usb/simusb.c:	//avr->reset = NULL;
+./examples/extra_board_usb/simusb.c:	avr->frequency = 8000000;
+./examples/extra_board_usb/simusb.c:		memcpy(avr->flash + base, boot, size);
+./examples/extra_board_usb/simusb.c:		avr->pc = base;
+./examples/extra_board_usb/simusb.c:		avr->codeend = avr->flashend;
+./examples/extra_board_usb/simusb.c:	avr->gdb_port = 1234;
+./examples/extra_board_usb/simusb.c:		//avr->state = cpu_Stopped;
-- 
2.39.5