[#59758] translate: Restore CPU state to the next instruction after a precise pause
diff --git a/src/Infrastructure b/src/Infrastructure index dba5b21..5904a43 160000 --- a/src/Infrastructure +++ b/src/Infrastructure
@@ -1 +1 @@ -Subproject commit dba5b2134eb75b659468a8c98bc2de7b9631f558 +Subproject commit 5904a437c60ea376b679e8de92b71b29a62c8f8a
diff --git a/tests/unit-tests/hooks.robot b/tests/unit-tests/hooks.robot index 519d976..788b397 100644 --- a/tests/unit-tests/hooks.robot +++ b/tests/unit-tests/hooks.robot
@@ -167,7 +167,7 @@ Wait For Prompt On Uart x pauseEmulation=true ${cnt}= Execute Command sysbus.cpu PC - Should Be Equal As Numbers ${cnt} 0x2c + Should Be Equal As Numbers ${cnt} 0x30 ${cnt}= Execute Command sysbus.cpu ExecutedInstructions Should Be Equal As Numbers ${cnt} 8
diff --git a/tests/unit-tests/precise-pause.robot b/tests/unit-tests/precise-pause.robot index 3b1ad45..08f51cf 100644 --- a/tests/unit-tests/precise-pause.robot +++ b/tests/unit-tests/precise-pause.robot
@@ -85,7 +85,22 @@ Should Be Equal ${l.groups[0]} 6401 Emulation Should Be Paused At Time 00:00:00.000226 - PC Should Be Equal 0x8002c08 # this is the STR that writes to TDR in LL_USART_TransmitData8 + PC Should Be Equal 0x8002c0a # this is the next instruction after STR that writes to TDR in LL_USART_TransmitData8 + +Emulation Should Pause Precisely Between Translation Blocks + Create Machine With Button And LED button + # Forcing all blocks to contain a single instruction will force the precise pauses to be handled between blocks + Execute Command cpu MaximumBlockSize 1 + + Wait For Line On Uart Press the button pauseEmulation=true + + Execute Command gpioPortB.button Press + + ${l}= Wait For Line On Uart Button pressed at (\\d+) pauseEmulation=true treatAsRegex=true + Should Be Equal ${l.groups[0]} 6401 + + Emulation Should Be Paused At Time 00:00:00.000226 + PC Should Be Equal 0x8002c0a # this is the next instruction after STR that writes to TDR in LL_USART_TransmitData8 Quantum Should Not Impact Tester Pause PC Create Machine With Button And LED button @@ -97,7 +112,7 @@ Wait For Line On Uart Button pressed at (\\d+) pauseEmulation=true treatAsRegex=true - PC Should Be Equal 0x8002c08 + PC Should Be Equal 0x8002c0a RunFor Should Work After Precise Pause Create Machine With Button And LED button @@ -134,11 +149,11 @@ Assert LED State true pauseEmulation=true Emulation Should Be Paused At Time 00:00:00.000120 - PC Should Be Equal 0x8002a46 # this is the STR that writes to BSRR in gpio_stm32_port_set_bits_raw + PC Should Be Equal 0x8002a48 # this is the next instruction after STR that writes to BSRR in gpio_stm32_port_set_bits_raw Assert LED State false pauseEmulation=true Emulation Should Be Paused At Time 00:00:01.000211 - PC Should Be Equal 0x80028a2 # this is the STR that writes to BRR in LL_GPIO_ResetOutputPin + PC Should Be Equal 0x80028a4 # this is the next instruction after STR that writes to BRR in LL_GPIO_ResetOutputPin Provides synced-blinky @@ -172,14 +187,14 @@ Write Line To Uart led on leds 0 waitForEcho=false Wait For Line On Uart leds: turning on LED 0 pauseEmulation=true Emulation Should Be Paused At Time 00:00:00.001239 - PC Should Be Equal 0x800b26a + PC Should Be Equal 0x800b26c # The LED should not be turned on yet: the string is printed before actually changing the GPIO Assert LED State false 0 # Now wait for the LED to turn on Assert LED State true pauseEmulation=true Emulation Should Be Paused At Time 00:00:00.001243 - PC Should Be Equal 0x800af0a + PC Should Be Equal 0x800af0c LED Tester Assertion Triggered By PWM Should Not Log Errors Create Log Tester 0