I find it a useful tool. Maybe you will, too!
				
				
				
					
				
					
				
				
				
				
				
				
				
				
				
				
						flash: Memory.MappedMemory @ sysbus 0x00000000
							size: 0x00008000
						sram: Memory.MappedMemory @ sysbus 0x20000000
							size: 0x00001000
	
						nvic: IRQControllers.NVIC @ sysbus 0xE000E000
							IRQ -> cpu@0
						cpu: CPU.CortexM @ sysbus
							nvic: nvic
							cpuType: "cortex-m0+"
							PerformanceInMips: 24
					
				Firmware is a series of instructions executed by the CPU in order to accomplish a task
Firmware is Memory
						sysbus LoadELF @firmware.elf
					
					
						sysbus LoadBinary @rom.bin 0x20000000
					
					
						sysbus LoadSymbolsFrom @rom.elf
					
				LoadBinary!
						
						sysbus.cpu VectorTableOffset 0x20000000
						sysbus.cpu PC 0x20000c00
					
				
				
						{(long)Registers.RxTx, new DoubleWordRegister(this)
							.WithValueField(0, 8,
								writeCallback: (_, value) => {
									this.TransmitCharacter((byte)value);
								},
								valueProviderCallback: _ => {
									if(!TryGetCharacter(out var character))
									{
										this.Log(LogLevel.Warning, "Empty Rx FIFO.");
									}
									return character;
								})
						},
					
				
				
				
							*** Test Cases ***
							Should Read Acceleration
								Create Machine
								Create Terminal Tester    ${UART}
							
								Execute Command   sysbus.twi1.lis2ds12 AccelerationX 10
								Execute Command   sysbus.twi1.lis2ds12 AccelerationY 5
								Execute Command   sysbus.twi1.lis2ds12 AccelerationZ -5
							
								Start Emulation
							
								Wait For Line On Uart  x 9.997213 , y 4.997410 , z -4.999803