1*** Variables ***
2${URI}                              @https://dl.antmicro.com/projects/renode
3${MSP430F2619_HELLO_WORLD_ELF}      ${URI}/msp430f2619-hello_world.elf-s_7912-e951b1bdd3bb562397ca9da8da88722c503507a3
4
5*** Keywords ***
6Create MSP430F2619 Machine
7    [Arguments]                             ${ELF}=${EMPTY}
8
9    Execute Command                         mach create
10    Execute Command                         machine LoadPlatformDescription @platforms/cpus/msp430f2619.repl
11    Execute Command                         sysbus.cpu PerformanceInMips 1
12    Run Keyword If                          "${ELF}" != "${EMPTY}"
13    ...  Execute Command                    sysbus LoadELF ${ELF}
14
15*** Test Cases ***
16Should Change Internal Memory Every Second
17    Create MSP430F2619 Machine              ${MSP430F2619_HELLO_WORLD_ELF}
18    ${counterAddress}=  Execute Command     sysbus GetSymbolAddress "seconds_passed"
19
20    Execute Command                         emulation RunFor "0.05"
21    ${secondsPassed}=   Execute Command     sysbus ReadWord ${counterAddress}
22    Should Be Equal     ${secondsPassed}    0x0000    strip_spaces=True
23
24    FOR  ${second}  IN RANGE  1  10
25        ${secondHex}=       Convert To Hex      ${second}  prefix=0x  length=4
26        Execute Command                         emulation RunFor "1"
27        ${secondsPassed}=   Execute Command     sysbus ReadWord ${counterAddress}
28        Should Be Equal     ${secondsPassed}    ${secondHex}    strip_spaces=True
29   END
30
31Should Correctly Handle Constant Generators In ADDA And SUBA
32    Create MSP430F2619 Machine
33
34    # NOTE: Prepare small program using ADDA and SUBA with CG1/CG2
35    Execute Command                         sysbus WriteWord 0x2100 0x02e4  # asm: ADDA R2, R4
36    Execute Command                         sysbus WriteWord 0x2102 0x03e4  # asm: ADDA R3, R4
37    Execute Command                         sysbus WriteWord 0x2104 0x02f4  # asm: SUBA R2, R4
38    Execute Command                         sysbus WriteWord 0x2106 0x03f4  # asm: SUBA R3, R4
39    Execute Command                         cpu PC 0x2100
40
41    # NOTE: Start with zeroed R4
42    Execute Command                         cpu R4 0x00000
43
44    # NOTE: ADDA R2, R4 ==> ADDA #4, R4
45    Execute Command                         cpu Step
46    ${REG_VALUE}=  Execute Command          cpu R4
47    ${REG_VALUE}=  Convert To Integer       ${REG_VALUE}  base=16
48    Should Be Equal                         ${REG_VALUE}  ${4}
49
50    # NOTE: ADDA R3, R4 ==> ADDA #2, R4
51    Execute Command                         cpu Step
52    ${REG_VALUE}=  Execute Command          cpu R4
53    ${REG_VALUE}=  Convert To Integer       ${REG_VALUE}  base=16
54    Should Be Equal                         ${REG_VALUE}  ${6}
55
56    # NOTE: SUBA R2, R4 ==> SUBA #4, R4
57    Execute Command                         cpu Step
58    ${REG_VALUE}=  Execute Command          cpu R4
59    ${REG_VALUE}=  Convert To Integer       ${REG_VALUE}  base=16
60    Should Be Equal                         ${REG_VALUE}  ${2}
61
62    # NOTE: SUBA R3, R4 ==> SUBA #2, R4
63    Execute Command                         cpu Step
64    ${REG_VALUE}=  Execute Command          cpu R4
65    ${REG_VALUE}=  Convert To Integer       ${REG_VALUE}  base=16
66    Should Be Equal                         ${REG_VALUE}  ${0}
67