*** Variables *** ${MEM} 0x0 ${LOG_TIMEOUT} 1 *** Keywords *** Create Machine Execute Command mach create Execute Command machine LoadPlatformDescriptionFromString "mem: Memory.ArrayMemory @ sysbus ${MEM} { size: 0x1000 }" Test Peripheral Read Write Hook [Arguments] ${size} ${writeValue} ${expectedOutput} Execute Command sysbus SetHookBeforePeripheralWrite sysbus.mem "self.Log(LogLevel.Info, 'written: 0x{0:x}', value)" Execute Command sysbus Write${size} ${MEM} ${writeValue} Wait For Log Entry written: ${expectedOutput} Execute Command sysbus SetHookBeforePeripheralWrite sysbus.mem "" Execute Command sysbus SetHookAfterPeripheralRead sysbus.mem "self.Log(LogLevel.Info, 'read: 0x{0:x}', value)" Execute Command sysbus Read${size} ${MEM} Wait For Log Entry read: ${expectedOutput} Execute Command sysbus SetHookAfterPeripheralRead sysbus.mem "" *** Test Cases *** Should Handle Peripheral Read Write Hooks Create Machine Create Log Tester ${LOG_TIMEOUT} Start Emulation Test Peripheral Read Write Hook Byte 0x2b 0x2b Test Peripheral Read Write Hook Byte 0xff 0xff Test Peripheral Read Write Hook Byte 0x100 0x0 Test Peripheral Read Write Hook Word 0xdead 0xdead Test Peripheral Read Write Hook Word 0xffff 0xffff Test Peripheral Read Write Hook Word 0x10000 0x0 Test Peripheral Read Write Hook DoubleWord 0xdeadbeef 0xdeadbeef Test Peripheral Read Write Hook DoubleWord 0xffffffff 0xffffffff Test Peripheral Read Write Hook DoubleWord 0x100000000 0x0 Test Peripheral Read Write Hook QuadWord 0x1234facedeadbabe 0x1234facedeadbabe # Test Peripheral Read Write Hook QuadWord 0xffffffffffffffff 0xffffffffffffffff # Test Peripheral Read Write Hook QuadWord 0x10000000000000000 0x0 # As of writing this, Monitor does not support parsing UInt64. Once support # is added, please uncomment the above two tests.