mirror of
https://github.com/arabine/open-story-teller.git
synced 2025-12-06 17:09:06 +01:00
fix unit tests for chip32, better debugger
This commit is contained in:
parent
7973aa4709
commit
59114c2a80
47 changed files with 18168 additions and 314 deletions
168
.gitignore
vendored
168
.gitignore
vendored
|
|
@ -95,167 +95,13 @@ story-player-raylib/build/
|
||||||
story-player/linux/flutter/generated_plugin_registrant.cc
|
story-player/linux/flutter/generated_plugin_registrant.cc
|
||||||
|
|
||||||
story-player/linux/flutter/generated_plugins.cmake
|
story-player/linux/flutter/generated_plugins.cmake
|
||||||
story-player-raylib/build-web/cmake_install.cmake
|
|
||||||
story-player-raylib/build-web/CMakeCache.txt
|
story-player-raylib/build-web
|
||||||
story-player-raylib/build-web/compile_commands.json
|
|
||||||
story-player-raylib/build-web/CPackConfig.cmake
|
story-vm/build
|
||||||
story-player-raylib/build-web/CPackSourceConfig.cmake
|
|
||||||
story-player-raylib/build-web/cpm-package-lock.cmake
|
|
||||||
story-player-raylib/build-web/Makefile
|
|
||||||
story-player-raylib/build-web/CMakeFiles/cmake.check_cache
|
|
||||||
story-player-raylib/build-web/CMakeFiles/CMakeConfigureLog.yaml
|
|
||||||
story-player-raylib/build-web/CMakeFiles/CMakeDirectoryInformation.cmake
|
|
||||||
story-player-raylib/build-web/CMakeFiles/CMakeRuleHashes.txt
|
|
||||||
story-player-raylib/build-web/CMakeFiles/Makefile.cmake
|
|
||||||
story-player-raylib/build-web/CMakeFiles/Makefile2
|
|
||||||
story-player-raylib/build-web/CMakeFiles/progress.marks
|
|
||||||
story-player-raylib/build-web/CMakeFiles/TargetDirectories.txt
|
|
||||||
story-player-raylib/build-web/CMakeFiles/3.30.3/CMakeCCompiler.cmake
|
|
||||||
story-player-raylib/build-web/CMakeFiles/3.30.3/CMakeCXXCompiler.cmake
|
|
||||||
story-player-raylib/build-web/CMakeFiles/3.30.3/CMakeSystem.cmake
|
|
||||||
story-player-raylib/build-web/CMakeFiles/pkgRedirects/raylib-config.cmake
|
|
||||||
story-player-raylib/build-web/CMakeFiles/pkgRedirects/raylib-version.cmake
|
|
||||||
story-player-raylib/build-web/CMakeFiles/story-player.dir/build.make
|
|
||||||
story-player-raylib/build-web/CMakeFiles/story-player.dir/cmake_clean.cmake
|
|
||||||
story-player-raylib/build-web/CMakeFiles/story-player.dir/compiler_depend.internal
|
|
||||||
story-player-raylib/build-web/CMakeFiles/story-player.dir/compiler_depend.make
|
|
||||||
story-player-raylib/build-web/CMakeFiles/story-player.dir/compiler_depend.ts
|
|
||||||
story-player-raylib/build-web/CMakeFiles/story-player.dir/depend.make
|
|
||||||
story-player-raylib/build-web/CMakeFiles/story-player.dir/DependInfo.cmake
|
|
||||||
story-player-raylib/build-web/CMakeFiles/story-player.dir/flags.make
|
|
||||||
story-player-raylib/build-web/CMakeFiles/story-player.dir/includes_C.rsp
|
|
||||||
story-player-raylib/build-web/CMakeFiles/story-player.dir/includes_CXX.rsp
|
|
||||||
story-player-raylib/build-web/CMakeFiles/story-player.dir/link.txt
|
|
||||||
story-player-raylib/build-web/CMakeFiles/story-player.dir/linkLibs.rsp
|
|
||||||
story-player-raylib/build-web/CMakeFiles/story-player.dir/main.c.o
|
|
||||||
story-player-raylib/build-web/CMakeFiles/story-player.dir/main.c.o.d
|
|
||||||
story-player-raylib/build-web/CMakeFiles/story-player.dir/objects1.rsp
|
|
||||||
story-player-raylib/build-web/CMakeFiles/story-player.dir/progress.make
|
|
||||||
story-player-raylib/build-web/CMakeFiles/story-player.dir/mnt/work/git/open-story-teller/firmware/chip32/chip32_assembler.cpp.o
|
|
||||||
story-player-raylib/build-web/CMakeFiles/story-player.dir/mnt/work/git/open-story-teller/firmware/chip32/chip32_assembler.cpp.o.d
|
|
||||||
story-player-raylib/build-web/CMakeFiles/story-player.dir/mnt/work/git/open-story-teller/firmware/chip32/chip32_vm.c.o
|
|
||||||
story-player-raylib/build-web/CMakeFiles/story-player.dir/mnt/work/git/open-story-teller/firmware/chip32/chip32_vm.c.o.d
|
|
||||||
story-player-raylib/build-web/_deps/raylib-build/cmake_install.cmake
|
|
||||||
story-player-raylib/build-web/_deps/raylib-build/cmake_uninstall.cmake
|
|
||||||
story-player-raylib/build-web/_deps/raylib-build/CTestTestfile.cmake
|
|
||||||
story-player-raylib/build-web/_deps/raylib-build/Makefile
|
|
||||||
story-player-raylib/build-web/_deps/raylib-build/CMakeFiles/CMakeDirectoryInformation.cmake
|
|
||||||
story-player-raylib/build-web/_deps/raylib-build/CMakeFiles/progress.marks
|
|
||||||
story-player-raylib/build-web/_deps/raylib-build/CMakeFiles/uninstall.dir/build.make
|
|
||||||
story-player-raylib/build-web/_deps/raylib-build/CMakeFiles/uninstall.dir/cmake_clean.cmake
|
|
||||||
story-player-raylib/build-web/_deps/raylib-build/CMakeFiles/uninstall.dir/compiler_depend.make
|
|
||||||
story-player-raylib/build-web/_deps/raylib-build/CMakeFiles/uninstall.dir/compiler_depend.ts
|
|
||||||
story-player-raylib/build-web/_deps/raylib-build/CMakeFiles/uninstall.dir/DependInfo.cmake
|
|
||||||
story-player-raylib/build-web/_deps/raylib-build/CMakeFiles/uninstall.dir/progress.make
|
|
||||||
story-player-raylib/build-web/_deps/raylib-build/raylib/cmake_install.cmake
|
|
||||||
story-player-raylib/build-web/_deps/raylib-build/raylib/CTestTestfile.cmake
|
|
||||||
story-player-raylib/build-web/_deps/raylib-build/raylib/libraylib.a
|
|
||||||
story-player-raylib/build-web/_deps/raylib-build/raylib/Makefile
|
|
||||||
story-player-raylib/build-web/_deps/raylib-build/raylib/raylib-config-version.cmake
|
|
||||||
story-player-raylib/build-web/_deps/raylib-build/raylib/raylib.pc
|
|
||||||
story-player-raylib/build-web/_deps/raylib-build/raylib/CMakeFiles/CMakeDirectoryInformation.cmake
|
|
||||||
story-player-raylib/build-web/_deps/raylib-build/raylib/CMakeFiles/progress.marks
|
|
||||||
story-player-raylib/build-web/_deps/raylib-build/raylib/CMakeFiles/raylib.dir/build.make
|
|
||||||
story-player-raylib/build-web/_deps/raylib-build/raylib/CMakeFiles/raylib.dir/cmake_clean_target.cmake
|
|
||||||
story-player-raylib/build-web/_deps/raylib-build/raylib/CMakeFiles/raylib.dir/cmake_clean.cmake
|
|
||||||
story-player-raylib/build-web/_deps/raylib-build/raylib/CMakeFiles/raylib.dir/compiler_depend.internal
|
|
||||||
story-player-raylib/build-web/_deps/raylib-build/raylib/CMakeFiles/raylib.dir/compiler_depend.make
|
|
||||||
story-player-raylib/build-web/_deps/raylib-build/raylib/CMakeFiles/raylib.dir/compiler_depend.ts
|
|
||||||
story-player-raylib/build-web/_deps/raylib-build/raylib/CMakeFiles/raylib.dir/depend.make
|
|
||||||
story-player-raylib/build-web/_deps/raylib-build/raylib/CMakeFiles/raylib.dir/DependInfo.cmake
|
|
||||||
story-player-raylib/build-web/_deps/raylib-build/raylib/CMakeFiles/raylib.dir/flags.make
|
|
||||||
story-player-raylib/build-web/_deps/raylib-build/raylib/CMakeFiles/raylib.dir/includes_C.rsp
|
|
||||||
story-player-raylib/build-web/_deps/raylib-build/raylib/CMakeFiles/raylib.dir/link.txt
|
|
||||||
story-player-raylib/build-web/_deps/raylib-build/raylib/CMakeFiles/raylib.dir/progress.make
|
|
||||||
story-player-raylib/build-web/_deps/raylib-build/raylib/CMakeFiles/raylib.dir/raudio.c.o
|
|
||||||
story-player-raylib/build-web/_deps/raylib-build/raylib/CMakeFiles/raylib.dir/raudio.c.o.d
|
|
||||||
story-player-raylib/build-web/_deps/raylib-build/raylib/CMakeFiles/raylib.dir/rcore.c.o
|
|
||||||
story-player-raylib/build-web/_deps/raylib-build/raylib/CMakeFiles/raylib.dir/rcore.c.o.d
|
|
||||||
story-player-raylib/build-web/_deps/raylib-build/raylib/CMakeFiles/raylib.dir/rmodels.c.o
|
|
||||||
story-player-raylib/build-web/_deps/raylib-build/raylib/CMakeFiles/raylib.dir/rmodels.c.o.d
|
|
||||||
story-player-raylib/build-web/_deps/raylib-build/raylib/CMakeFiles/raylib.dir/rshapes.c.o
|
|
||||||
story-player-raylib/build-web/_deps/raylib-build/raylib/CMakeFiles/raylib.dir/rshapes.c.o.d
|
|
||||||
story-player-raylib/build-web/_deps/raylib-build/raylib/CMakeFiles/raylib.dir/rtext.c.o
|
|
||||||
story-player-raylib/build-web/_deps/raylib-build/raylib/CMakeFiles/raylib.dir/rtext.c.o.d
|
|
||||||
story-player-raylib/build-web/_deps/raylib-build/raylib/CMakeFiles/raylib.dir/rtextures.c.o
|
|
||||||
story-player-raylib/build-web/_deps/raylib-build/raylib/CMakeFiles/raylib.dir/rtextures.c.o.d
|
|
||||||
story-player-raylib/build-web/_deps/raylib-build/raylib/CMakeFiles/raylib.dir/utils.c.o
|
|
||||||
story-player-raylib/build-web/_deps/raylib-build/raylib/CMakeFiles/raylib.dir/utils.c.o.d
|
|
||||||
story-player-raylib/build-web/_deps/raylib-build/raylib/include/raylib.h
|
|
||||||
story-player-raylib/build-web/_deps/raylib-build/raylib/include/raymath.h
|
|
||||||
story-player-raylib/build-web/_deps/raylib-build/raylib/include/rlgl.h
|
|
||||||
story-player-raylib/build-web/_deps/raylib-subbuild/cmake_install.cmake
|
|
||||||
story-player-raylib/build-web/_deps/raylib-subbuild/CMakeCache.txt
|
|
||||||
story-player-raylib/build-web/_deps/raylib-subbuild/CMakeLists.txt
|
|
||||||
story-player-raylib/build-web/_deps/raylib-subbuild/Makefile
|
|
||||||
story-player-raylib/build-web/_deps/raylib-subbuild/CMakeFiles/cmake.check_cache
|
|
||||||
story-player-raylib/build-web/_deps/raylib-subbuild/CMakeFiles/CMakeConfigureLog.yaml
|
|
||||||
story-player-raylib/build-web/_deps/raylib-subbuild/CMakeFiles/CMakeDirectoryInformation.cmake
|
|
||||||
story-player-raylib/build-web/_deps/raylib-subbuild/CMakeFiles/CMakeRuleHashes.txt
|
|
||||||
story-player-raylib/build-web/_deps/raylib-subbuild/CMakeFiles/Makefile.cmake
|
|
||||||
story-player-raylib/build-web/_deps/raylib-subbuild/CMakeFiles/Makefile2
|
|
||||||
story-player-raylib/build-web/_deps/raylib-subbuild/CMakeFiles/progress.marks
|
|
||||||
story-player-raylib/build-web/_deps/raylib-subbuild/CMakeFiles/raylib-populate-complete
|
|
||||||
story-player-raylib/build-web/_deps/raylib-subbuild/CMakeFiles/TargetDirectories.txt
|
|
||||||
story-player-raylib/build-web/_deps/raylib-subbuild/CMakeFiles/3.30.3/CMakeSystem.cmake
|
|
||||||
story-player-raylib/build-web/_deps/raylib-subbuild/CMakeFiles/raylib-populate.dir/build.make
|
|
||||||
story-player-raylib/build-web/_deps/raylib-subbuild/CMakeFiles/raylib-populate.dir/cmake_clean.cmake
|
|
||||||
story-player-raylib/build-web/_deps/raylib-subbuild/CMakeFiles/raylib-populate.dir/compiler_depend.make
|
|
||||||
story-player-raylib/build-web/_deps/raylib-subbuild/CMakeFiles/raylib-populate.dir/compiler_depend.ts
|
|
||||||
story-player-raylib/build-web/_deps/raylib-subbuild/CMakeFiles/raylib-populate.dir/DependInfo.cmake
|
|
||||||
story-player-raylib/build-web/_deps/raylib-subbuild/CMakeFiles/raylib-populate.dir/Labels.json
|
|
||||||
story-player-raylib/build-web/_deps/raylib-subbuild/CMakeFiles/raylib-populate.dir/Labels.txt
|
|
||||||
story-player-raylib/build-web/_deps/raylib-subbuild/CMakeFiles/raylib-populate.dir/progress.make
|
|
||||||
story-player-raylib/build-web/_deps/raylib-subbuild/raylib-populate-prefix/src/5.5.tar.gz
|
|
||||||
story-player-raylib/build-web/_deps/raylib-subbuild/raylib-populate-prefix/src/raylib-populate-stamp/download-raylib-populate.cmake
|
|
||||||
story-player-raylib/build-web/_deps/raylib-subbuild/raylib-populate-prefix/src/raylib-populate-stamp/extract-raylib-populate.cmake
|
|
||||||
story-player-raylib/build-web/_deps/raylib-subbuild/raylib-populate-prefix/src/raylib-populate-stamp/raylib-populate-build
|
|
||||||
story-player-raylib/build-web/_deps/raylib-subbuild/raylib-populate-prefix/src/raylib-populate-stamp/raylib-populate-configure
|
|
||||||
story-player-raylib/build-web/_deps/raylib-subbuild/raylib-populate-prefix/src/raylib-populate-stamp/raylib-populate-done
|
|
||||||
story-player-raylib/build-web/_deps/raylib-subbuild/raylib-populate-prefix/src/raylib-populate-stamp/raylib-populate-download
|
|
||||||
story-player-raylib/build-web/_deps/raylib-subbuild/raylib-populate-prefix/src/raylib-populate-stamp/raylib-populate-install
|
|
||||||
story-player-raylib/build-web/_deps/raylib-subbuild/raylib-populate-prefix/src/raylib-populate-stamp/raylib-populate-mkdir
|
|
||||||
story-player-raylib/build-web/_deps/raylib-subbuild/raylib-populate-prefix/src/raylib-populate-stamp/raylib-populate-patch
|
|
||||||
story-player-raylib/build-web/_deps/raylib-subbuild/raylib-populate-prefix/src/raylib-populate-stamp/raylib-populate-patch-info.txt
|
|
||||||
story-player-raylib/build-web/_deps/raylib-subbuild/raylib-populate-prefix/src/raylib-populate-stamp/raylib-populate-test
|
|
||||||
story-player-raylib/build-web/_deps/raylib-subbuild/raylib-populate-prefix/src/raylib-populate-stamp/raylib-populate-update
|
|
||||||
story-player-raylib/build-web/_deps/raylib-subbuild/raylib-populate-prefix/src/raylib-populate-stamp/raylib-populate-update-info.txt
|
|
||||||
story-player-raylib/build-web/_deps/raylib-subbuild/raylib-populate-prefix/src/raylib-populate-stamp/raylib-populate-urlinfo.txt
|
|
||||||
story-player-raylib/build-web/_deps/raylib-subbuild/raylib-populate-prefix/src/raylib-populate-stamp/verify-raylib-populate.cmake
|
|
||||||
story-player-raylib/build-web/_deps/raylib-subbuild/raylib-populate-prefix/tmp/raylib-populate-cfgcmd.txt
|
|
||||||
story-player-raylib/build-web/_deps/raylib-subbuild/raylib-populate-prefix/tmp/raylib-populate-mkdirs.cmake
|
|
||||||
story-vm/build/cmake_install.cmake
|
|
||||||
story-vm/build/CMakeCache.txt
|
|
||||||
story-vm/build/libstoryvm.a
|
|
||||||
story-vm/build/Makefile
|
|
||||||
story-vm/build/CMakeFiles/cmake.check_cache
|
|
||||||
story-vm/build/CMakeFiles/CMakeConfigureLog.yaml
|
|
||||||
story-vm/build/CMakeFiles/CMakeDirectoryInformation.cmake
|
|
||||||
story-vm/build/CMakeFiles/Makefile.cmake
|
|
||||||
story-vm/build/CMakeFiles/Makefile2
|
|
||||||
story-vm/build/CMakeFiles/progress.marks
|
|
||||||
story-vm/build/CMakeFiles/TargetDirectories.txt
|
|
||||||
story-vm/build/CMakeFiles/3.30.3/CMakeCCompiler.cmake
|
|
||||||
story-vm/build/CMakeFiles/3.30.3/CMakeCXXCompiler.cmake
|
|
||||||
story-vm/build/CMakeFiles/3.30.3/CMakeSystem.cmake
|
|
||||||
story-vm/build/CMakeFiles/storyvm.dir/build.make
|
|
||||||
story-vm/build/CMakeFiles/storyvm.dir/cmake_clean_target.cmake
|
|
||||||
story-vm/build/CMakeFiles/storyvm.dir/cmake_clean.cmake
|
|
||||||
story-vm/build/CMakeFiles/storyvm.dir/compiler_depend.internal
|
|
||||||
story-vm/build/CMakeFiles/storyvm.dir/compiler_depend.make
|
|
||||||
story-vm/build/CMakeFiles/storyvm.dir/compiler_depend.ts
|
|
||||||
story-vm/build/CMakeFiles/storyvm.dir/depend.make
|
|
||||||
story-vm/build/CMakeFiles/storyvm.dir/DependInfo.cmake
|
|
||||||
story-vm/build/CMakeFiles/storyvm.dir/flags.make
|
|
||||||
story-vm/build/CMakeFiles/storyvm.dir/includes_C.rsp
|
|
||||||
story-vm/build/CMakeFiles/storyvm.dir/includes_CXX.rsp
|
|
||||||
story-vm/build/CMakeFiles/storyvm.dir/link.txt
|
|
||||||
story-vm/build/CMakeFiles/storyvm.dir/objects1.rsp
|
|
||||||
story-vm/build/CMakeFiles/storyvm.dir/progress.make
|
|
||||||
story-vm/build/CMakeFiles/storyvm.dir/storyvm.cpp.o
|
|
||||||
story-vm/build/CMakeFiles/storyvm.dir/storyvm.cpp.o.d
|
|
||||||
story-vm/build/CMakeFiles/storyvm.dir/mnt/work/git/open-story-teller/firmware/chip32/chip32_vm.c.o
|
|
||||||
story-vm/build/CMakeFiles/storyvm.dir/mnt/work/git/open-story-teller/firmware/chip32/chip32_vm.c.o.d
|
|
||||||
story-player-raylib/bin/story-player.data
|
story-player-raylib/bin/story-player.data
|
||||||
story-player-raylib/bin/story-player.js
|
story-player-raylib/bin/story-player.js
|
||||||
story-player-raylib/bin/story-player.wasm
|
story-player-raylib/bin/story-player.wasm
|
||||||
|
|
||||||
|
core/chip32/tests/build
|
||||||
28
.vscode/launch.json
vendored
28
.vscode/launch.json
vendored
|
|
@ -67,6 +67,34 @@
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Debug VM Tests",
|
||||||
|
"type": "cppdbg",
|
||||||
|
"request": "launch",
|
||||||
|
"program": "${workspaceFolder}/core/chip32/tests/build/chip32_test", // Remplacez par le chemin de votre exécutable
|
||||||
|
"args": [],
|
||||||
|
"stopAtEntry": false,
|
||||||
|
"cwd": "${workspaceFolder}/core/chip32/tests",
|
||||||
|
"environment": [],
|
||||||
|
"externalConsole": false,
|
||||||
|
"linux": {
|
||||||
|
"MIMode": "gdb",
|
||||||
|
"miDebuggerPath": "/usr/bin/gdb"
|
||||||
|
},
|
||||||
|
"osx": {
|
||||||
|
"MIMode": "lldb",
|
||||||
|
"miDebuggerPath": "/Users/user936511/.vscode/extensions/ms-vscode.cpptools-1.18.5-darwin-arm64/debugAdapters/lldb-mi/bin/lldb-mi"
|
||||||
|
},
|
||||||
|
|
||||||
|
"setupCommands": [
|
||||||
|
{
|
||||||
|
"description": "Enable pretty-printing for gdb",
|
||||||
|
"text": "-enable-pretty-printing",
|
||||||
|
"ignoreFailures": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "Black Magic Probe",
|
"name": "Black Magic Probe",
|
||||||
|
|
|
||||||
3
.vscode/settings.json
vendored
3
.vscode/settings.json
vendored
|
|
@ -3,7 +3,8 @@
|
||||||
"cmake.sourceDirectory": [
|
"cmake.sourceDirectory": [
|
||||||
"${workspaceFolder}/story-editor",
|
"${workspaceFolder}/story-editor",
|
||||||
"${workspaceFolder}/story-player-raylib",
|
"${workspaceFolder}/story-player-raylib",
|
||||||
"${workspaceFolder}/software"
|
"${workspaceFolder}/software",
|
||||||
|
"${workspaceFolder}/core/chip32/tests"
|
||||||
],
|
],
|
||||||
"files.associations": {
|
"files.associations": {
|
||||||
"*.css": "tailwindcss",
|
"*.css": "tailwindcss",
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
# StoryTeller core files
|
# StoryTeller core components
|
||||||
|
|
||||||
GUI agnostic implementation of the editor engine.
|
Each component is organized as follow:
|
||||||
|
|
||||||
Directories:
|
Directories:
|
||||||
- interfaces: contains only pure virtual C++ interface classes
|
- interfaces: contains only pure virtual C++ interface classes
|
||||||
|
|
@ -8,3 +8,10 @@ Directories:
|
||||||
- src: core implementation (private files)
|
- src: core implementation (private files)
|
||||||
|
|
||||||
|
|
||||||
|
# story-manager
|
||||||
|
|
||||||
|
GUI agnostic implementation of the editor engine.
|
||||||
|
|
||||||
|
# story-vm
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -115,7 +115,7 @@ chip32_result_t chip32_run(chip32_ctx_t *ctx)
|
||||||
{
|
{
|
||||||
result = chip32_step(ctx);
|
result = chip32_step(ctx);
|
||||||
|
|
||||||
if (result > VM_OK)
|
if ((result > VM_OK) || (result == VM_FINISHED))
|
||||||
{
|
{
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
@ -5,8 +5,15 @@ project(chip32_test LANGUAGES CXX C)
|
||||||
set(CMAKE_CXX_STANDARD 17)
|
set(CMAKE_CXX_STANDARD 17)
|
||||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||||
|
|
||||||
add_executable(chip32_test main.cpp test_parser.cpp test_vm.cpp ../../chip32/chip32_assembler.cpp ../../chip32/chip32.cpp)
|
add_executable(chip32_test
|
||||||
target_include_directories(chip32_test PRIVATE ../../chip32 ../)
|
main.cpp
|
||||||
|
test_parser.cpp
|
||||||
|
test_vm.cpp
|
||||||
|
../chip32_assembler.cpp
|
||||||
|
../chip32_vm.c
|
||||||
|
)
|
||||||
|
|
||||||
|
target_include_directories(chip32_test PRIVATE ../)
|
||||||
|
|
||||||
install(TARGETS chip32_test
|
install(TARGETS chip32_test
|
||||||
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR})
|
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR})
|
||||||
17966
core/chip32/tests/catch.hpp
Normal file
17966
core/chip32/tests/catch.hpp
Normal file
File diff suppressed because it is too large
Load diff
|
|
@ -48,12 +48,13 @@ $MyArray DV8 10 ; array of 10 bytes
|
||||||
; We create a stupid loop just for RAM variable testing
|
; We create a stupid loop just for RAM variable testing
|
||||||
|
|
||||||
lcons r0, 4 ; prepare loop: 4 iterations
|
lcons r0, 4 ; prepare loop: 4 iterations
|
||||||
store $RamData1, r0 ; save R0 in RAM
|
lcons r2, $RamData1 ; save in R2 a ram address
|
||||||
|
store @r2, r0, 4 ; save R0 in RAM
|
||||||
lcons r1, 1
|
lcons r1, 1
|
||||||
.loop:
|
.loop:
|
||||||
load r0, $RamData1 ; load this variable
|
load r0, @r2, 4 ; load this variable
|
||||||
sub r0, r1
|
sub r0, r1
|
||||||
store $RamData1, r0 ; save R0 in RAM
|
store @r2, r0, 4 ; save R0 in RAM
|
||||||
skipz r0 ; skip loop if R0 == 0
|
skipz r0 ; skip loop if R0 == 0
|
||||||
jump .loop
|
jump .loop
|
||||||
|
|
||||||
|
|
@ -65,32 +66,45 @@ mov R0,R2 ; copy R2 into R0 (NO blank space between , and R2)
|
||||||
)";
|
)";
|
||||||
|
|
||||||
|
|
||||||
|
static uint8_t story_player_syscall(chip32_ctx_t *ctx, uint8_t code)
|
||||||
|
{
|
||||||
|
uint8_t retCode = SYSCALL_RET_OK;
|
||||||
|
|
||||||
|
return retCode;
|
||||||
|
}
|
||||||
|
|
||||||
TEST_CASE( "Check various indentations and typos" ) {
|
TEST_CASE( "Check various indentations and typos" ) {
|
||||||
|
|
||||||
std::vector<uint8_t> program;
|
std::vector<uint8_t> program;
|
||||||
Chip32Assembler assembler;
|
Chip32::Assembler assembler;
|
||||||
AssemblyResult result;
|
Chip32::Result result;
|
||||||
uint8_t data[8*1024];
|
uint8_t data[8*1024];
|
||||||
|
|
||||||
REQUIRE( assembler.Parse(test1) == true );
|
bool parseResult = assembler.Parse(test1);
|
||||||
|
|
||||||
|
std::cout << assembler.GetLastError().ToString();
|
||||||
|
|
||||||
|
REQUIRE( parseResult == true );
|
||||||
|
|
||||||
REQUIRE( assembler.BuildBinary(program, result) == true);
|
REQUIRE( assembler.BuildBinary(program, result) == true);
|
||||||
result.Print();
|
result.Print();
|
||||||
hexdump(program.data(), program.size());
|
hexdump(program.data(), program.size());
|
||||||
|
|
||||||
// --------- EXECUTE BINARY ---------
|
static chip32_ctx_t chip32_ctx;
|
||||||
virtual_mem_t rom = {
|
|
||||||
.mem = program.data(),
|
|
||||||
.size = 8*1024,
|
|
||||||
.addr = 0
|
|
||||||
};
|
|
||||||
virtual_mem_t ram = {
|
|
||||||
.mem = data,
|
|
||||||
.size = sizeof(data),
|
|
||||||
.addr = 40 *1024
|
|
||||||
};
|
|
||||||
|
|
||||||
chip32_initialize(&rom, &ram, 256);
|
chip32_ctx.stack_size = 512;
|
||||||
chip32_result_t runResult = chip32_run(program.size(), 1000);
|
|
||||||
|
chip32_ctx.rom.mem = program.data();
|
||||||
|
chip32_ctx.rom.addr = 0;
|
||||||
|
chip32_ctx.rom.size = program.size();
|
||||||
|
|
||||||
|
chip32_ctx.ram.mem = data;
|
||||||
|
chip32_ctx.ram.addr = 40 *1024,
|
||||||
|
chip32_ctx.ram.size = sizeof(data);
|
||||||
|
|
||||||
|
chip32_ctx.syscall = story_player_syscall;
|
||||||
|
|
||||||
|
chip32_initialize(&chip32_ctx);
|
||||||
|
chip32_result_t runResult = chip32_run(&chip32_ctx);
|
||||||
REQUIRE( runResult == VM_FINISHED );
|
REQUIRE( runResult == VM_FINISHED );
|
||||||
}
|
}
|
||||||
|
|
@ -25,7 +25,7 @@ THE SOFTWARE.
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include "catch.hpp"
|
#include "catch.hpp"
|
||||||
#include "chip32_assembler.h"
|
#include "chip32_assembler.h"
|
||||||
#include "chip32.h"
|
#include "chip32_vm.h"
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Purpose: test all opcodes
|
Purpose: test all opcodes
|
||||||
|
|
@ -33,6 +33,14 @@ Purpose: test all opcodes
|
||||||
|
|
||||||
void hexdump(void *ptr, int buflen);
|
void hexdump(void *ptr, int buflen);
|
||||||
|
|
||||||
|
static uint8_t story_player_syscall(chip32_ctx_t *ctx, uint8_t code)
|
||||||
|
{
|
||||||
|
uint8_t retCode = SYSCALL_RET_OK;
|
||||||
|
|
||||||
|
return retCode;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
class VmTestContext
|
class VmTestContext
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
@ -47,27 +55,28 @@ public:
|
||||||
REQUIRE( assembler.BuildBinary(program, result) == true );
|
REQUIRE( assembler.BuildBinary(program, result) == true );
|
||||||
result.Print();
|
result.Print();
|
||||||
|
|
||||||
// --------- EXECUTE BINARY ---------
|
chip32_ctx.stack_size = 512;
|
||||||
virtual_mem_t rom = {
|
|
||||||
.mem = program.data(),
|
|
||||||
.size = 8*1024,
|
|
||||||
.addr = 18 * 1024
|
|
||||||
};
|
|
||||||
virtual_mem_t ram = {
|
|
||||||
.mem = data,
|
|
||||||
.size = sizeof(data),
|
|
||||||
.addr = 56*1024
|
|
||||||
};
|
|
||||||
|
|
||||||
chip32_initialize(&rom, &ram, 256);
|
chip32_ctx.rom.mem = program.data();
|
||||||
chip32_result_t runResult = chip32_run(program.size(), 1000);
|
chip32_ctx.rom.addr = 18*1024;
|
||||||
|
chip32_ctx.rom.size = program.size();
|
||||||
|
|
||||||
|
chip32_ctx.ram.mem = data;
|
||||||
|
chip32_ctx.ram.addr = 56 *1024,
|
||||||
|
chip32_ctx.ram.size = sizeof(data);
|
||||||
|
|
||||||
|
chip32_ctx.syscall = story_player_syscall;
|
||||||
|
|
||||||
|
chip32_initialize(&chip32_ctx);
|
||||||
|
chip32_result_t runResult = chip32_run(&chip32_ctx);
|
||||||
REQUIRE( runResult == VM_FINISHED );
|
REQUIRE( runResult == VM_FINISHED );
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t data[8*1024];
|
uint8_t data[8*1024];
|
||||||
std::vector<uint8_t> program;
|
std::vector<uint8_t> program;
|
||||||
Chip32Assembler assembler;
|
Chip32::Assembler assembler;
|
||||||
AssemblyResult result;
|
Chip32::Result result;
|
||||||
|
chip32_ctx_t chip32_ctx;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -80,7 +89,7 @@ TEST_CASE_METHOD(VmTestContext, "MUL", "[vm]") {
|
||||||
)";
|
)";
|
||||||
Execute(test1);
|
Execute(test1);
|
||||||
|
|
||||||
uint32_t result = chip32_get_register(R0);
|
uint32_t result = chip32_ctx.registers[R0];
|
||||||
REQUIRE (result == 37 * 0x695);
|
REQUIRE (result == 37 * 0x695);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -93,6 +102,6 @@ TEST_CASE_METHOD(VmTestContext, "DIV", "[vm]") {
|
||||||
)";
|
)";
|
||||||
Execute(test1);
|
Execute(test1);
|
||||||
|
|
||||||
uint32_t result = chip32_get_register(R0);
|
uint32_t result = chip32_ctx.registers[R0];
|
||||||
REQUIRE (result == (int)(37/8));
|
REQUIRE (result == (int)(37/8));
|
||||||
}
|
}
|
||||||
|
|
@ -5,22 +5,40 @@
|
||||||
#include <sstream>
|
#include <sstream>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
#include <gui.h>
|
||||||
#include "imgui.h"
|
#include "imgui.h"
|
||||||
|
|
||||||
|
|
||||||
void CodeEditor::TextViewDraw()
|
void CodeEditor::TextViewDraw()
|
||||||
{
|
{
|
||||||
|
const ImVec2 childSize = ImVec2(0, 0);
|
||||||
|
// Début de la scrollview (Child)
|
||||||
|
ImGui::BeginChild("Table ScrollView", childSize, true, ImGuiWindowFlags_AlwaysVerticalScrollbar);
|
||||||
|
|
||||||
ImGui::BeginChild("TextView", ImVec2(0, 0), true, ImGuiWindowFlags_HorizontalScrollbar);
|
static ImGuiTableFlags tableFlags = ImGuiTableFlags_SizingFixedFit
|
||||||
|
| ImGuiTableFlags_BordersV
|
||||||
|
| ImGuiTableFlags_BordersOuterH
|
||||||
|
| ImGuiTableFlags_RowBg
|
||||||
|
| ImGuiTableFlags_ContextMenuInBody;
|
||||||
|
|
||||||
static ImGuiTableFlags flags1 = ImGuiTableFlags_SizingFixedFit | ImGuiTableFlags_BordersV | ImGuiTableFlags_BordersOuterH | ImGuiTableFlags_RowBg | ImGuiTableFlags_ContextMenuInBody;
|
|
||||||
static ImU32 cell_bg_color = ImGui::GetColorU32(ImVec4(0.3f, 0.3f, 0.7f, 0.65f));
|
static ImU32 cell_bg_color = ImGui::GetColorU32(ImVec4(0.3f, 0.3f, 0.7f, 0.65f));
|
||||||
|
|
||||||
if (ImGui::BeginTable("AssemblyCode", 3, flags1))
|
|
||||||
|
// Hauteur de chaque ligne
|
||||||
|
float lineHeight = ImGui::GetTextLineHeightWithSpacing(); // Hauteur d'une ligne avec l'espacement
|
||||||
|
|
||||||
|
if (ImGui::BeginTable("AssemblyCode", 3, tableFlags))
|
||||||
{
|
{
|
||||||
int i = 0;
|
int i = 1;
|
||||||
std::string line;
|
std::string line;
|
||||||
std::istringstream is(m_text);
|
std::istringstream is(m_text);
|
||||||
|
|
||||||
|
// Calcul de la position Y pour centrer la ligne cible
|
||||||
|
float scrollY = m_currentLine * lineHeight - ImGui::GetWindowHeight() * 0.5f + lineHeight * 0.5f;
|
||||||
|
|
||||||
|
// Début de la scrollview
|
||||||
|
ImGui::SetScrollY(scrollY);
|
||||||
|
|
||||||
while (std::getline(is, line))
|
while (std::getline(is, line))
|
||||||
{
|
{
|
||||||
ImGui::TableNextRow();
|
ImGui::TableNextRow();
|
||||||
|
|
@ -38,6 +56,7 @@ void CodeEditor::TextViewDraw()
|
||||||
{
|
{
|
||||||
m_breakpoints.insert(i);
|
m_breakpoints.insert(i);
|
||||||
}
|
}
|
||||||
|
m_storyManager.ToggleBreakpoint(i);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (m_breakpoints.contains(i)) {
|
if (m_breakpoints.contains(i)) {
|
||||||
|
|
@ -46,16 +65,16 @@ void CodeEditor::TextViewDraw()
|
||||||
}
|
}
|
||||||
ImGui::TableNextColumn();
|
ImGui::TableNextColumn();
|
||||||
|
|
||||||
if (m_highlights.count(i) > 0)
|
if (m_currentLine == i)
|
||||||
{
|
{
|
||||||
ImGui::TableSetBgColor(ImGuiTableBgTarget_CellBg, cell_bg_color);
|
ImGui::TableSetBgColor(ImGuiTableBgTarget_CellBg, cell_bg_color);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Colonne des numéros de ligne
|
// Colonne des numéros de ligne
|
||||||
ImGui::Text("%d", static_cast<int>(i + 1));
|
ImGui::Text("%d", static_cast<int>(i));
|
||||||
ImGui::TableNextColumn();
|
ImGui::TableNextColumn();
|
||||||
|
|
||||||
if (m_highlights.count(i) > 0)
|
if (m_currentLine == i)
|
||||||
{
|
{
|
||||||
ImGui::TableSetBgColor(ImGuiTableBgTarget_CellBg, cell_bg_color);
|
ImGui::TableSetBgColor(ImGuiTableBgTarget_CellBg, cell_bg_color);
|
||||||
}
|
}
|
||||||
|
|
@ -76,7 +95,7 @@ CodeEditor::CodeEditor(IStoryManager &project)
|
||||||
, m_storyManager(project)
|
, m_storyManager(project)
|
||||||
{
|
{
|
||||||
// mEditor.SetReadOnly(false);
|
// mEditor.SetReadOnly(false);
|
||||||
SetFlags(ImGuiWindowFlags_MenuBar);
|
// SetFlags(ImGuiWindowFlags_MenuBar);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CodeEditor::Initialize()
|
void CodeEditor::Initialize()
|
||||||
|
|
@ -139,85 +158,23 @@ void CodeEditor::Draw()
|
||||||
// auto cpos = mEditor.GetCursorPosition();
|
// auto cpos = mEditor.GetCursorPosition();
|
||||||
|
|
||||||
ImGui::SetWindowSize(ImVec2(800, 600), ImGuiCond_FirstUseEver);
|
ImGui::SetWindowSize(ImVec2(800, 600), ImGuiCond_FirstUseEver);
|
||||||
/*
|
|
||||||
if (ImGui::BeginMenuBar())
|
|
||||||
{
|
|
||||||
if (ImGui::BeginMenu("File"))
|
|
||||||
{
|
|
||||||
if (ImGui::MenuItem("Save"))
|
|
||||||
{
|
|
||||||
// auto textToSave = mEditor.GetText();
|
|
||||||
/// save text....
|
|
||||||
}
|
|
||||||
ImGui::EndMenu();
|
|
||||||
}
|
|
||||||
if (ImGui::BeginMenu("Edit"))
|
|
||||||
{
|
|
||||||
// bool ro = mEditor.IsReadOnly();
|
|
||||||
// if (ImGui::MenuItem("Read-only mode", nullptr, &ro))
|
|
||||||
// mEditor.SetReadOnly(ro);
|
|
||||||
ImGui::Separator();
|
|
||||||
|
|
||||||
if (ImGui::MenuItem("Undo", "ALT-Backspace", nullptr, !ro && mEditor.CanUndo()))
|
|
||||||
mEditor.Undo();
|
|
||||||
if (ImGui::MenuItem("Redo", "Ctrl-Y", nullptr, !ro && mEditor.CanRedo()))
|
|
||||||
mEditor.Redo();
|
|
||||||
|
|
||||||
ImGui::Separator();
|
|
||||||
|
|
||||||
if (ImGui::MenuItem("Copy", "Ctrl-C", nullptr, mEditor.HasSelection()))
|
|
||||||
mEditor.Copy();
|
|
||||||
if (ImGui::MenuItem("Cut", "Ctrl-X", nullptr, !ro && mEditor.HasSelection()))
|
|
||||||
mEditor.Cut();
|
|
||||||
if (ImGui::MenuItem("Delete", "Del", nullptr, !ro && mEditor.HasSelection()))
|
|
||||||
mEditor.Delete();
|
|
||||||
if (ImGui::MenuItem("Paste", "Ctrl-V", nullptr, !ro && ImGui::GetClipboardText() != nullptr))
|
|
||||||
mEditor.Paste();
|
|
||||||
|
|
||||||
|
|
||||||
ImGui::Separator();
|
// if (ImGui::SmallButton("Toggle breakpoint")) {
|
||||||
|
|
||||||
// if (ImGui::MenuItem("Select all", nullptr, nullptr))
|
// if (m_breakPoints.contains(cpos.mLine + 1))
|
||||||
// mEditor.SetSelection(TextEditor::Coordinates(), TextEditor::Coordinates(mEditor.GetTotalLines(), 0));
|
// {
|
||||||
|
// m_breakPoints.erase(cpos.mLine + 1);
|
||||||
|
// }
|
||||||
|
// else
|
||||||
|
// {
|
||||||
|
// m_breakPoints.insert(cpos.mLine + 1);
|
||||||
|
// }
|
||||||
|
// mEditor.SetBreakpoints(m_breakPoints);
|
||||||
|
|
||||||
ImGui::EndMenu();
|
// m_storyManager.ToggleBreakpoint(cpos.mLine + 1);
|
||||||
}
|
|
||||||
|
|
||||||
if (ImGui::BeginMenu("View"))
|
// }
|
||||||
{
|
|
||||||
if (ImGui::MenuItem("Dark palette"))
|
|
||||||
mEditor.SetPalette(TextEditor::GetDarkPalette());
|
|
||||||
if (ImGui::MenuItem("Light palette"))
|
|
||||||
mEditor.SetPalette(TextEditor::GetLightPalette());
|
|
||||||
if (ImGui::MenuItem("Retro blue palette"))
|
|
||||||
mEditor.SetPalette(TextEditor::GetRetroBluePalette());
|
|
||||||
ImGui::EndMenu();
|
|
||||||
}
|
|
||||||
|
|
||||||
ImGui::EndMenuBar();
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
// ImGui::Text("%6d/%-6d %6d lines | %s | %s ", cpos.mLine + 1, cpos.mColumn + 1, mEditor.GetTotalLines(),
|
|
||||||
// mEditor.IsOverwrite() ? "Ovr" : "Ins",
|
|
||||||
// mEditor.CanUndo() ? "*" : " ");
|
|
||||||
|
|
||||||
ImGui::SameLine();
|
|
||||||
if (ImGui::SmallButton("Toggle breakpoint")) {
|
|
||||||
/*
|
|
||||||
if (m_breakPoints.contains(cpos.mLine + 1))
|
|
||||||
{
|
|
||||||
m_breakPoints.erase(cpos.mLine + 1);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
m_breakPoints.insert(cpos.mLine + 1);
|
|
||||||
}
|
|
||||||
mEditor.SetBreakpoints(m_breakPoints);
|
|
||||||
|
|
||||||
m_storyManager.ToggleBreakpoint(cpos.mLine + 1);
|
|
||||||
*/
|
|
||||||
}
|
|
||||||
ImGui::SameLine();
|
ImGui::SameLine();
|
||||||
if (ImGui::SmallButton(ICON_MDI_SKIP_NEXT "##step_instruction")) {
|
if (ImGui::SmallButton(ICON_MDI_SKIP_NEXT "##step_instruction")) {
|
||||||
m_storyManager.Step();
|
m_storyManager.Step();
|
||||||
|
|
@ -228,6 +185,11 @@ void CodeEditor::Draw()
|
||||||
m_storyManager.Run();
|
m_storyManager.Run();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ImGui::SameLine();
|
||||||
|
if (ImGui::SmallButton(ICON_MDI_CONTENT_COPY "##copytocplipboard")) {
|
||||||
|
Gui::CopyToClipboard(m_text);
|
||||||
|
}
|
||||||
|
|
||||||
TextViewDraw();
|
TextViewDraw();
|
||||||
|
|
||||||
// mEditor.Render("TextEditor");
|
// mEditor.Render("TextEditor");
|
||||||
|
|
|
||||||
|
|
@ -21,15 +21,17 @@ public:
|
||||||
|
|
||||||
void HighlightLine(int line)
|
void HighlightLine(int line)
|
||||||
{
|
{
|
||||||
|
m_currentLine = line;
|
||||||
// mEditor.SetExecutionMarker(line);
|
// mEditor.SetExecutionMarker(line);
|
||||||
m_highlights[line] = ImVec4(0.5f, 0.5f, 1.0f, 0.5f);
|
// m_highlights[line] = ImVec4(0.5f, 0.5f, 1.0f, 0.5f);
|
||||||
}
|
}
|
||||||
private:
|
private:
|
||||||
IStoryManager &m_storyManager;
|
IStoryManager &m_storyManager;
|
||||||
|
|
||||||
std::string m_text;
|
std::string m_text;
|
||||||
std::unordered_set<int> m_breakpoints;
|
std::unordered_set<int> m_breakpoints;
|
||||||
std::map<int, ImVec4> m_highlights;
|
// std::map<int, ImVec4> m_highlights;
|
||||||
|
int m_currentLine{-1};
|
||||||
// TextEditor mEditor;
|
// TextEditor mEditor;
|
||||||
// TextEditor::Breakpoints m_breakPoints;
|
// TextEditor::Breakpoints m_breakPoints;
|
||||||
// TextEditor::ErrorMarkers m_markers;
|
// TextEditor::ErrorMarkers m_markers;
|
||||||
|
|
|
||||||
|
|
@ -280,6 +280,7 @@ end:
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Simple helper function to load an image into a OpenGL texture with common settings
|
// Simple helper function to load an image into a OpenGL texture with common settings
|
||||||
bool LoadTextureFromFile(const char* filename, Gui::Image &img)
|
bool LoadTextureFromFile(const char* filename, Gui::Image &img)
|
||||||
{
|
{
|
||||||
|
|
@ -376,6 +377,14 @@ Gui::Gui()
|
||||||
static ImFont* normalFont;
|
static ImFont* normalFont;
|
||||||
// static ImFont* bigFont;
|
// static ImFont* bigFont;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void Gui::CopyToClipboard(const std::string &text)
|
||||||
|
{
|
||||||
|
SDL_SetClipboardText(text.c_str());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void Gui::PushBigFont()
|
void Gui::PushBigFont()
|
||||||
{
|
{
|
||||||
// ImGui::PushFont(bigFont);
|
// ImGui::PushFont(bigFont);
|
||||||
|
|
|
||||||
|
|
@ -49,6 +49,7 @@ public:
|
||||||
|
|
||||||
static void PushBigFont();
|
static void PushBigFont();
|
||||||
static void PopBigFont();
|
static void PopBigFont();
|
||||||
|
static void CopyToClipboard(const std::string &text);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::string m_executablePath;
|
std::string m_executablePath;
|
||||||
|
|
|
||||||
|
|
@ -174,15 +174,12 @@ void MainWindow::ProcessStory()
|
||||||
if (m_dbg.run_result == VM_FINISHED)
|
if (m_dbg.run_result == VM_FINISHED)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (m_dbg.run_result == VM_READY)
|
// Error states
|
||||||
return;
|
|
||||||
|
|
||||||
if (m_dbg.run_result > VM_OK)
|
if (m_dbg.run_result > VM_OK)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// 1. First, check events
|
// Check events
|
||||||
if (m_dbg.run_result == VM_WAIT_EVENT)
|
|
||||||
{
|
|
||||||
VmEvent event;
|
VmEvent event;
|
||||||
if (m_eventQueue.try_pop(event))
|
if (m_eventQueue.try_pop(event))
|
||||||
{
|
{
|
||||||
|
|
@ -196,7 +193,16 @@ void MainWindow::ProcessStory()
|
||||||
m_dbg.free_run = true;
|
m_dbg.free_run = true;
|
||||||
m_dbg.run_result = VM_OK;
|
m_dbg.run_result = VM_OK;
|
||||||
}
|
}
|
||||||
else if (event.type == VmEventType::EvOkButton)
|
else if (event.type == VmEventType::EvStop)
|
||||||
|
{
|
||||||
|
m_dbg.run_result = VM_FINISHED;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Events managed only if the code is in wait event state
|
||||||
|
if (m_dbg.run_result == VM_WAIT_EVENT)
|
||||||
|
{
|
||||||
|
|
||||||
|
if (event.type == VmEventType::EvOkButton)
|
||||||
{
|
{
|
||||||
if (m_dbg.IsValidEvent(EV_MASK_OK_BUTTON))
|
if (m_dbg.IsValidEvent(EV_MASK_OK_BUTTON))
|
||||||
{
|
{
|
||||||
|
|
@ -236,10 +242,6 @@ void MainWindow::ProcessStory()
|
||||||
m_dbg.run_result = VM_OK;
|
m_dbg.run_result = VM_OK;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (event.type == VmEventType::EvStop)
|
|
||||||
{
|
|
||||||
m_dbg.run_result = VM_FINISHED;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue