From 1f8c7a609e3c0d953777ff6a6efac0af80438022 Mon Sep 17 00:00:00 2001 From: sukhman-sukh Date: Thu, 26 Oct 2023 04:37:08 +0530 Subject: [PATCH 01/16] Add info functionality Signed-off-by: sukhman-sukh --- .vscode/settings.json | 16 + CMakeFiles/3.27.4/CMakeCCompiler.cmake | 74 ++ CMakeFiles/3.27.4/CMakeCXXCompiler.cmake | 85 ++ .../3.27.4/CMakeDetermineCompilerABI_C.bin | Bin 0 -> 15424 bytes .../3.27.4/CMakeDetermineCompilerABI_CXX.bin | Bin 0 -> 15440 bytes CMakeFiles/3.27.4/CMakeSystem.cmake | 15 + .../3.27.4/CompilerIdC/CMakeCCompilerId.c | 866 ++++++++++++++++++ CMakeFiles/3.27.4/CompilerIdC/a.out | Bin 0 -> 15536 bytes .../CompilerIdCXX/CMakeCXXCompilerId.cpp | 855 +++++++++++++++++ CMakeFiles/3.27.4/CompilerIdCXX/a.out | Bin 0 -> 15552 bytes CMakeFiles/CMakeConfigureLog.yaml | 487 ++++++++++ CMakeFiles/Makefile2 | 129 +++ CMakeFiles/TargetDirectories.txt | 5 + CMakeFiles/cmake.check_cache | 1 + CMakeFiles/gbemu.dir/DependInfo.cmake | 23 + CMakeFiles/gbemu.dir/build.make | 176 ++++ CMakeFiles/gbemu.dir/cmake_clean.cmake | 19 + CMakeFiles/gbemu.dir/compiler_depend.make | 2 + CMakeFiles/gbemu.dir/compiler_depend.ts | 2 + CMakeFiles/gbemu.dir/depend.make | 2 + CMakeFiles/gbemu.dir/flags.make | 10 + CMakeFiles/gbemu.dir/link.txt | 1 + CMakeFiles/gbemu.dir/progress.make | 7 + CMakeFiles/gbemu.dir/src/cpu.cpp.o | Bin 0 -> 153184 bytes CMakeFiles/gbemu.dir/src/cpu.cpp.o.d | 250 +++++ CMakeFiles/gbemu.dir/src/gameBoy.cpp.o | Bin 0 -> 11872 bytes CMakeFiles/gbemu.dir/src/gameBoy.cpp.o.d | 251 +++++ CMakeFiles/gbemu.dir/src/graphics.cpp.o | Bin 0 -> 76568 bytes CMakeFiles/gbemu.dir/src/graphics.cpp.o.d | 248 +++++ CMakeFiles/gbemu.dir/src/main.cpp.o | Bin 0 -> 2576 bytes CMakeFiles/gbemu.dir/src/main.cpp.o.d | 251 +++++ CMakeFiles/gbemu.dir/src/mmap.cpp.o | Bin 0 -> 5848 bytes CMakeFiles/gbemu.dir/src/mmap.cpp.o.d | 26 + CMakeFiles/progress.marks | 1 + .../CMakeDirectoryInformation.cmake | 16 + src/CMakeFiles/progress.marks | 1 + src/Makefile | 140 +++ src/cmake_install.cmake | 44 + src/cpu.h | 29 +- src/gameBoy.cpp | 217 ++++- src/gameBoy.h | 15 +- src/graphics.cpp | 77 -- src/graphics.h | 1 - src/mmap.h | 1 + tests/Tetris.gb | Bin 0 -> 32768 bytes 45 files changed, 4260 insertions(+), 83 deletions(-) create mode 100644 .vscode/settings.json create mode 100644 CMakeFiles/3.27.4/CMakeCCompiler.cmake create mode 100644 CMakeFiles/3.27.4/CMakeCXXCompiler.cmake create mode 100755 CMakeFiles/3.27.4/CMakeDetermineCompilerABI_C.bin create mode 100755 CMakeFiles/3.27.4/CMakeDetermineCompilerABI_CXX.bin create mode 100644 CMakeFiles/3.27.4/CMakeSystem.cmake create mode 100644 CMakeFiles/3.27.4/CompilerIdC/CMakeCCompilerId.c create mode 100755 CMakeFiles/3.27.4/CompilerIdC/a.out create mode 100644 CMakeFiles/3.27.4/CompilerIdCXX/CMakeCXXCompilerId.cpp create mode 100755 CMakeFiles/3.27.4/CompilerIdCXX/a.out create mode 100644 CMakeFiles/CMakeConfigureLog.yaml create mode 100644 CMakeFiles/Makefile2 create mode 100644 CMakeFiles/TargetDirectories.txt create mode 100644 CMakeFiles/cmake.check_cache create mode 100644 CMakeFiles/gbemu.dir/DependInfo.cmake create mode 100644 CMakeFiles/gbemu.dir/build.make create mode 100644 CMakeFiles/gbemu.dir/cmake_clean.cmake create mode 100644 CMakeFiles/gbemu.dir/compiler_depend.make create mode 100644 CMakeFiles/gbemu.dir/compiler_depend.ts create mode 100644 CMakeFiles/gbemu.dir/depend.make create mode 100644 CMakeFiles/gbemu.dir/flags.make create mode 100644 CMakeFiles/gbemu.dir/link.txt create mode 100644 CMakeFiles/gbemu.dir/progress.make create mode 100644 CMakeFiles/gbemu.dir/src/cpu.cpp.o create mode 100644 CMakeFiles/gbemu.dir/src/cpu.cpp.o.d create mode 100644 CMakeFiles/gbemu.dir/src/gameBoy.cpp.o create mode 100644 CMakeFiles/gbemu.dir/src/gameBoy.cpp.o.d create mode 100644 CMakeFiles/gbemu.dir/src/graphics.cpp.o create mode 100644 CMakeFiles/gbemu.dir/src/graphics.cpp.o.d create mode 100644 CMakeFiles/gbemu.dir/src/main.cpp.o create mode 100644 CMakeFiles/gbemu.dir/src/main.cpp.o.d create mode 100644 CMakeFiles/gbemu.dir/src/mmap.cpp.o create mode 100644 CMakeFiles/gbemu.dir/src/mmap.cpp.o.d create mode 100644 CMakeFiles/progress.marks create mode 100644 src/CMakeFiles/CMakeDirectoryInformation.cmake create mode 100644 src/CMakeFiles/progress.marks create mode 100644 src/Makefile create mode 100644 src/cmake_install.cmake create mode 100644 tests/Tetris.gb diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..bedc2f7 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,16 @@ +{ + "files.associations": { + "cstddef": "cpp", + "charconv": "cpp", + "chrono": "cpp", + "optional": "cpp", + "format": "cpp", + "ratio": "cpp", + "system_error": "cpp", + "array": "cpp", + "functional": "cpp", + "tuple": "cpp", + "type_traits": "cpp", + "utility": "cpp" + } +} \ No newline at end of file diff --git a/CMakeFiles/3.27.4/CMakeCCompiler.cmake b/CMakeFiles/3.27.4/CMakeCCompiler.cmake new file mode 100644 index 0000000..7a93a25 --- /dev/null +++ b/CMakeFiles/3.27.4/CMakeCCompiler.cmake @@ -0,0 +1,74 @@ +set(CMAKE_C_COMPILER "/usr/bin/cc") +set(CMAKE_C_COMPILER_ARG1 "") +set(CMAKE_C_COMPILER_ID "GNU") +set(CMAKE_C_COMPILER_VERSION "13.2.1") +set(CMAKE_C_COMPILER_VERSION_INTERNAL "") +set(CMAKE_C_COMPILER_WRAPPER "") +set(CMAKE_C_STANDARD_COMPUTED_DEFAULT "17") +set(CMAKE_C_EXTENSIONS_COMPUTED_DEFAULT "ON") +set(CMAKE_C_COMPILE_FEATURES "c_std_90;c_function_prototypes;c_std_99;c_restrict;c_variadic_macros;c_std_11;c_static_assert;c_std_17;c_std_23") +set(CMAKE_C90_COMPILE_FEATURES "c_std_90;c_function_prototypes") +set(CMAKE_C99_COMPILE_FEATURES "c_std_99;c_restrict;c_variadic_macros") +set(CMAKE_C11_COMPILE_FEATURES "c_std_11;c_static_assert") +set(CMAKE_C17_COMPILE_FEATURES "c_std_17") +set(CMAKE_C23_COMPILE_FEATURES "c_std_23") + +set(CMAKE_C_PLATFORM_ID "Linux") +set(CMAKE_C_SIMULATE_ID "") +set(CMAKE_C_COMPILER_FRONTEND_VARIANT "GNU") +set(CMAKE_C_SIMULATE_VERSION "") + + + + +set(CMAKE_AR "/usr/bin/ar") +set(CMAKE_C_COMPILER_AR "/usr/bin/gcc-ar") +set(CMAKE_RANLIB "/usr/bin/ranlib") +set(CMAKE_C_COMPILER_RANLIB "/usr/bin/gcc-ranlib") +set(CMAKE_LINKER "/usr/bin/ld") +set(CMAKE_MT "") +set(CMAKE_TAPI "CMAKE_TAPI-NOTFOUND") +set(CMAKE_COMPILER_IS_GNUCC 1) +set(CMAKE_C_COMPILER_LOADED 1) +set(CMAKE_C_COMPILER_WORKS TRUE) +set(CMAKE_C_ABI_COMPILED TRUE) + +set(CMAKE_C_COMPILER_ENV_VAR "CC") + +set(CMAKE_C_COMPILER_ID_RUN 1) +set(CMAKE_C_SOURCE_FILE_EXTENSIONS c;m) +set(CMAKE_C_IGNORE_EXTENSIONS h;H;o;O;obj;OBJ;def;DEF;rc;RC) +set(CMAKE_C_LINKER_PREFERENCE 10) +set(CMAKE_C_LINKER_DEPFILE_SUPPORTED TRUE) + +# Save compiler ABI information. +set(CMAKE_C_SIZEOF_DATA_PTR "8") +set(CMAKE_C_COMPILER_ABI "ELF") +set(CMAKE_C_BYTE_ORDER "LITTLE_ENDIAN") +set(CMAKE_C_LIBRARY_ARCHITECTURE "") + +if(CMAKE_C_SIZEOF_DATA_PTR) + set(CMAKE_SIZEOF_VOID_P "${CMAKE_C_SIZEOF_DATA_PTR}") +endif() + +if(CMAKE_C_COMPILER_ABI) + set(CMAKE_INTERNAL_PLATFORM_ABI "${CMAKE_C_COMPILER_ABI}") +endif() + +if(CMAKE_C_LIBRARY_ARCHITECTURE) + set(CMAKE_LIBRARY_ARCHITECTURE "") +endif() + +set(CMAKE_C_CL_SHOWINCLUDES_PREFIX "") +if(CMAKE_C_CL_SHOWINCLUDES_PREFIX) + set(CMAKE_CL_SHOWINCLUDES_PREFIX "${CMAKE_C_CL_SHOWINCLUDES_PREFIX}") +endif() + + + + + +set(CMAKE_C_IMPLICIT_INCLUDE_DIRECTORIES "/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include;/usr/local/include;/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include-fixed;/usr/include") +set(CMAKE_C_IMPLICIT_LINK_LIBRARIES "gcc;gcc_s;c;gcc;gcc_s") +set(CMAKE_C_IMPLICIT_LINK_DIRECTORIES "/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1;/usr/lib;/lib") +set(CMAKE_C_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES "") diff --git a/CMakeFiles/3.27.4/CMakeCXXCompiler.cmake b/CMakeFiles/3.27.4/CMakeCXXCompiler.cmake new file mode 100644 index 0000000..d36a961 --- /dev/null +++ b/CMakeFiles/3.27.4/CMakeCXXCompiler.cmake @@ -0,0 +1,85 @@ +set(CMAKE_CXX_COMPILER "/usr/bin/c++") +set(CMAKE_CXX_COMPILER_ARG1 "") +set(CMAKE_CXX_COMPILER_ID "GNU") +set(CMAKE_CXX_COMPILER_VERSION "13.2.1") +set(CMAKE_CXX_COMPILER_VERSION_INTERNAL "") +set(CMAKE_CXX_COMPILER_WRAPPER "") +set(CMAKE_CXX_STANDARD_COMPUTED_DEFAULT "17") +set(CMAKE_CXX_EXTENSIONS_COMPUTED_DEFAULT "ON") +set(CMAKE_CXX_COMPILE_FEATURES "cxx_std_98;cxx_template_template_parameters;cxx_std_11;cxx_alias_templates;cxx_alignas;cxx_alignof;cxx_attributes;cxx_auto_type;cxx_constexpr;cxx_decltype;cxx_decltype_incomplete_return_types;cxx_default_function_template_args;cxx_defaulted_functions;cxx_defaulted_move_initializers;cxx_delegating_constructors;cxx_deleted_functions;cxx_enum_forward_declarations;cxx_explicit_conversions;cxx_extended_friend_declarations;cxx_extern_templates;cxx_final;cxx_func_identifier;cxx_generalized_initializers;cxx_inheriting_constructors;cxx_inline_namespaces;cxx_lambdas;cxx_local_type_template_args;cxx_long_long_type;cxx_noexcept;cxx_nonstatic_member_init;cxx_nullptr;cxx_override;cxx_range_for;cxx_raw_string_literals;cxx_reference_qualified_functions;cxx_right_angle_brackets;cxx_rvalue_references;cxx_sizeof_member;cxx_static_assert;cxx_strong_enums;cxx_thread_local;cxx_trailing_return_types;cxx_unicode_literals;cxx_uniform_initialization;cxx_unrestricted_unions;cxx_user_literals;cxx_variadic_macros;cxx_variadic_templates;cxx_std_14;cxx_aggregate_default_initializers;cxx_attribute_deprecated;cxx_binary_literals;cxx_contextual_conversions;cxx_decltype_auto;cxx_digit_separators;cxx_generic_lambdas;cxx_lambda_init_captures;cxx_relaxed_constexpr;cxx_return_type_deduction;cxx_variable_templates;cxx_std_17;cxx_std_20;cxx_std_23") +set(CMAKE_CXX98_COMPILE_FEATURES "cxx_std_98;cxx_template_template_parameters") +set(CMAKE_CXX11_COMPILE_FEATURES "cxx_std_11;cxx_alias_templates;cxx_alignas;cxx_alignof;cxx_attributes;cxx_auto_type;cxx_constexpr;cxx_decltype;cxx_decltype_incomplete_return_types;cxx_default_function_template_args;cxx_defaulted_functions;cxx_defaulted_move_initializers;cxx_delegating_constructors;cxx_deleted_functions;cxx_enum_forward_declarations;cxx_explicit_conversions;cxx_extended_friend_declarations;cxx_extern_templates;cxx_final;cxx_func_identifier;cxx_generalized_initializers;cxx_inheriting_constructors;cxx_inline_namespaces;cxx_lambdas;cxx_local_type_template_args;cxx_long_long_type;cxx_noexcept;cxx_nonstatic_member_init;cxx_nullptr;cxx_override;cxx_range_for;cxx_raw_string_literals;cxx_reference_qualified_functions;cxx_right_angle_brackets;cxx_rvalue_references;cxx_sizeof_member;cxx_static_assert;cxx_strong_enums;cxx_thread_local;cxx_trailing_return_types;cxx_unicode_literals;cxx_uniform_initialization;cxx_unrestricted_unions;cxx_user_literals;cxx_variadic_macros;cxx_variadic_templates") +set(CMAKE_CXX14_COMPILE_FEATURES "cxx_std_14;cxx_aggregate_default_initializers;cxx_attribute_deprecated;cxx_binary_literals;cxx_contextual_conversions;cxx_decltype_auto;cxx_digit_separators;cxx_generic_lambdas;cxx_lambda_init_captures;cxx_relaxed_constexpr;cxx_return_type_deduction;cxx_variable_templates") +set(CMAKE_CXX17_COMPILE_FEATURES "cxx_std_17") +set(CMAKE_CXX20_COMPILE_FEATURES "cxx_std_20") +set(CMAKE_CXX23_COMPILE_FEATURES "cxx_std_23") + +set(CMAKE_CXX_PLATFORM_ID "Linux") +set(CMAKE_CXX_SIMULATE_ID "") +set(CMAKE_CXX_COMPILER_FRONTEND_VARIANT "GNU") +set(CMAKE_CXX_SIMULATE_VERSION "") + + + + +set(CMAKE_AR "/usr/bin/ar") +set(CMAKE_CXX_COMPILER_AR "/usr/bin/gcc-ar") +set(CMAKE_RANLIB "/usr/bin/ranlib") +set(CMAKE_CXX_COMPILER_RANLIB "/usr/bin/gcc-ranlib") +set(CMAKE_LINKER "/usr/bin/ld") +set(CMAKE_MT "") +set(CMAKE_TAPI "CMAKE_TAPI-NOTFOUND") +set(CMAKE_COMPILER_IS_GNUCXX 1) +set(CMAKE_CXX_COMPILER_LOADED 1) +set(CMAKE_CXX_COMPILER_WORKS TRUE) +set(CMAKE_CXX_ABI_COMPILED TRUE) + +set(CMAKE_CXX_COMPILER_ENV_VAR "CXX") + +set(CMAKE_CXX_COMPILER_ID_RUN 1) +set(CMAKE_CXX_SOURCE_FILE_EXTENSIONS C;M;c++;cc;cpp;cxx;m;mm;mpp;CPP;ixx;cppm;ccm;cxxm;c++m) +set(CMAKE_CXX_IGNORE_EXTENSIONS inl;h;hpp;HPP;H;o;O;obj;OBJ;def;DEF;rc;RC) + +foreach (lang C OBJC OBJCXX) + if (CMAKE_${lang}_COMPILER_ID_RUN) + foreach(extension IN LISTS CMAKE_${lang}_SOURCE_FILE_EXTENSIONS) + list(REMOVE_ITEM CMAKE_CXX_SOURCE_FILE_EXTENSIONS ${extension}) + endforeach() + endif() +endforeach() + +set(CMAKE_CXX_LINKER_PREFERENCE 30) +set(CMAKE_CXX_LINKER_PREFERENCE_PROPAGATES 1) +set(CMAKE_CXX_LINKER_DEPFILE_SUPPORTED TRUE) + +# Save compiler ABI information. +set(CMAKE_CXX_SIZEOF_DATA_PTR "8") +set(CMAKE_CXX_COMPILER_ABI "ELF") +set(CMAKE_CXX_BYTE_ORDER "LITTLE_ENDIAN") +set(CMAKE_CXX_LIBRARY_ARCHITECTURE "") + +if(CMAKE_CXX_SIZEOF_DATA_PTR) + set(CMAKE_SIZEOF_VOID_P "${CMAKE_CXX_SIZEOF_DATA_PTR}") +endif() + +if(CMAKE_CXX_COMPILER_ABI) + set(CMAKE_INTERNAL_PLATFORM_ABI "${CMAKE_CXX_COMPILER_ABI}") +endif() + +if(CMAKE_CXX_LIBRARY_ARCHITECTURE) + set(CMAKE_LIBRARY_ARCHITECTURE "") +endif() + +set(CMAKE_CXX_CL_SHOWINCLUDES_PREFIX "") +if(CMAKE_CXX_CL_SHOWINCLUDES_PREFIX) + set(CMAKE_CL_SHOWINCLUDES_PREFIX "${CMAKE_CXX_CL_SHOWINCLUDES_PREFIX}") +endif() + + + + + +set(CMAKE_CXX_IMPLICIT_INCLUDE_DIRECTORIES "/usr/include/c++/13.2.1;/usr/include/c++/13.2.1/x86_64-pc-linux-gnu;/usr/include/c++/13.2.1/backward;/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include;/usr/local/include;/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include-fixed;/usr/include") +set(CMAKE_CXX_IMPLICIT_LINK_LIBRARIES "stdc++;m;gcc_s;gcc;c;gcc_s;gcc") +set(CMAKE_CXX_IMPLICIT_LINK_DIRECTORIES "/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1;/usr/lib;/lib") +set(CMAKE_CXX_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES "") diff --git a/CMakeFiles/3.27.4/CMakeDetermineCompilerABI_C.bin b/CMakeFiles/3.27.4/CMakeDetermineCompilerABI_C.bin new file mode 100755 index 0000000000000000000000000000000000000000..21ed532b48a14211fcbfa8f8de0fa5f6ec235844 GIT binary patch literal 15424 zcmeHOU2Ggz6~4Q68mGkBO^Acrgl1Jx)JS+@JBek2(yqN;dsed7A>9a}D7_tf$M%Tz zuGt-fT~vq&pjg4kyZ{eWs)VT2w}KEYFR;O=(6?5A6!By#ic*x4ASf7!yqq(0zV&!w zmkJOsony_Md%knNd+(h2-I?PrWJibNv6zCis7DoBsicpj#gRTO4N_^*T5 zk=^QHzCZ0N^7?WkzE!sg-a?vro!r<)AMs%t!xzkuHS>0o^(yhXS4)QoRNyFzQAKj{z zTkN>l6ygcT9;AiS&ivIQe>=8(^Q%v{P9FO1jnlKw?fcbBF^=Kw;66Eqg)v?r?85@= z-DvLjz&3#y!cyDddI!9`1I}}Lc$q?aXz*=XOLe6aK0u$UJc-K%6hIF0X%qotOannG@`3WM;VAR5M?0BK$L+f15pN| z47>+3@aM!s|1huIYBR6xx_&|_^UHNN-gwo#^0T&8FB|Odc`LW{+7sr|>*kf;-8omt z_SAb`F_+K&h5{NLpCi^^ri{eVFM08V|A_lp-t~P}A6<7lsOu-B>phLN#L>$fxGI|B zm%RAXUu1QB!(6&!UjO4`=JoX!GxoCi+J<|OI_Q!P+8S$9iK9cCe4gLsvsrSh`I8sS zD`)TLrn&Tn+iqSvdyI@m$2$F%zB$=wG+y3ygn-zk)y?^?PHnamN7IV?dvls%FHj## zPv0_^=GT6ny~|U+mc3Y)O5M?0BK$L+f15pN|4E%Q);O}1VB)RH82lgeu63?{X7q1eNfk>hZ zL>Y)O5M?0BK$L+f15pN|3`7}-GVtEa0O}Y~w}_fVu8m~b>#Js=WV_faQvdjX*r<;@ zEH-{>Jt#KnB>DFl3;b_yG%9S@rMM9_i*r)c$aRt|YvRA(H`P_q?-SiAxQ9Yu6z4yt_NjEr_dFy4-GV&c>A98ScztRIXbC%@g3@>)Wrf{qQ-Xh(9aQ`LQp`z z?%{`&N(Vq{{*;#ew7sd6kK_3JC7DTeNF~!gjx`ri9Ei6ooIk+VsKN2!{@)@zMN3%j z60kphNMS$1zbEF;2P8QxRVU#|^#RqHMx?KQPwD`jZK4oVzmDxF`WLF0UbH=1{ z%2O4+`Lan*IMdoL7agm7kE`UkZpq%_rMFN@4}CH}FqX?uAvv7`I&13T^8;g9Z4RAR zdSrBba9~uA4-Y?{E$G6)Aic=Cw}3s3vh{ycs_soT@McYEyJ)$V;@Wtch-SktWWT4X zT^DN=J!6%NT=AY8r>LS+*7G&HNS%~vr6+1N;d(XoT2qxgzjV{@R1?3oG{3nWTz;=< zPA=`$+TyHhO^|l0zMetLDN`-}oHEK4*EXih^Tu4YGG|xa#Q-!h@6bO~I7NYIr**m3 zwDQ7dtlEq+ii>3$!q;xq_k6~#)|^Uti=oL^wM!Ngl;KUzaP0+G8D92`YQ@W?VbAEP zsx@otnIbV@`3!AUs}@a<8E8{?)~qv0V^ydxS{ZXCYWST|Qk5}TnVq%El#Bn3@coev z@#b6DPPtJ)}(`>%A5#QbsJhsO5fz8{{yMSQ;JgOBF|=oJ~4w~=!PKJM=hVLWB<@tgsD zm3%=7=l|2>l=^AhHdIOxw4pPwmU0~e~%b@hL#{7_YLT|P{P8O@$ZEAxDP_(`I5(C2_HYt z6UIYe`&EhzmXx7*RKFi4=;p2}5JnY9m z5XK?kgAaY1JV8F5%WeuE=P5b>4|+YsS80iq69@AQ^I>mLgZsk# z@w}20KE^@3qywgEA%HOnZ{pyG&mZuEx_Rt2+0>tOcvYPIyJ-(Cm=E&880H?JtCxCx ZYaRoMGi1`U>h}CD{%A(BH$(`T>R&8RiS7UZ literal 0 HcmV?d00001 diff --git a/CMakeFiles/3.27.4/CMakeDetermineCompilerABI_CXX.bin b/CMakeFiles/3.27.4/CMakeDetermineCompilerABI_CXX.bin new file mode 100755 index 0000000000000000000000000000000000000000..4f865f5b465bc7a071d66400ed799dd2e99da859 GIT binary patch literal 15440 zcmeHOU2Ggz6~4Q68VBO6Q{pylLNf}eY7{*7ZXDw#GF^MU_N?ST(v2uY;dZ<`wnwaY zm)UW#D?u$x5mrcLcz{aKr%IK0Dn*Ev7ud?EB`+vNLW+1mrlP{F0x@cfLJ3~ZxpU5B zJX)7OiHB;gHS^u`opbKJbMB1i?#!7dvSTChSWIwf5uXw$X&oMuCdJfgssN-#zi5a3 zQE^1v0dlM2Jbl^&(0b)sd?&UM-vWq!hq2NGk9sup;T0YsBKqxCG#n5VMnT7cetS?s zau}bX4j5VQ_otyV6iw}YY$ZR&pdSupqsz137}$wD6qkNN_CpcAv3XQn9OKmlqbh7W@0U`g-+RMNg@oaa=vH;W;%r zabCoiMIAZzkBQh0IZiT|sDieKV8gJZ|0mZnqsM=>cJ|jd{?VIy+x*>gy)Qh8Hh3J^ zCfZ;@4mU2So@coReH<<2HNjzeq0W8cmAPwc`ADQD*^Wm$7g$CXmZTz*^@ zEytR*Yp&(w$1|l$*~**KCCk$_*T}-6DQE1mS+XAoLkY80pf=}CyDUJixy8cClQ?62 zD9-z}*#elNltjMZ@uOq8p^QxFr+NifQ@Z+}7l%25*@QnVF%cI}0rL6v<8OTjPRkbY zG;s^}+WQ39Jd4Iq_`2uot>d7_Z_;(me4QF>OM80eS*}0i@puh*Bk|;426#G^mEvlE zr%PM$*8+U-JlY8G>i?wIe6)`u5Je!0Koo%}0#O8_2t*P1fJNZ##C`7>E7#kMOM9+# z3t>E2cjJw##>y|+*42@sKKZBI>T91jR$n(({;)Nb&nD~1E5_x4--1D-a|OKKnb8x+ zzNYMf|0%X}dC!j!9=z#xLen$U^uESM;@C18t`ma&sw@}D0vUcT94 z#9lF8+jb8@1E;Bhw#LRx;@I$Qe;nWPKo-bRYZo6@5;C|p6o!5Zc zEHoO8SN0qQB6e~8_ITH4Zr2mX(gNFia~5pRLmR7KzHY28Y`mJig+soSy>2{hT<(1H zfDnnFw00zZR*z+G5qk&^`37oUY>g*g3~SzPrs-^iTDo;{-JcJC2C(a>L=lK05Je!0 zKoo%}0#O8_2t*NxA`nF&ia->B|1AReKI{ETZenEeObuSLRc2(d>N*#C`Y#6UCvuY` z(`VczX*m_Ec)`gH$!bH8=sA$e03_Wygs z8xN4mberTJ@`pFYYP=jr_?f9>jr4ybIhcb=*aY^`o9q0QX1O4#w{iJTL6@4%)}t1z&H>zlS^v z0qllxV*4897prF@puZdWI9x5nv&%<;$9}`ddjfcjL-=_66o0okoaPohJWG7Iol)Sm zou*1E?7};{@FFvAe!*z zvB{yqF*!Lh@^CgU^Mgb1z)MK0Xu2lkv`<2wdeJV+g_>1_c7loQ>0s))%43(ZSgXi6 zvs}b{cu081u0zT0z8B=KOR#Xk1oG(d85<_pOYGOnjfX*$vCrvRjfwY5zi*PM-!vOv z=(VMJ*PI4)9S`TYW|twWzbf={#kKU=@`7G z2p%kX9@2Ci6NZN#T!-e&dAk68RiG`{>D3Zcyv87!LN8S2=dH5a0HSF`{d84 zu_0mD|1-e<74DfleqIMK^6~RJAUu8({BaGy{=80LT%&&R7%_J2&-Z&9I2GvmN7Cz#rEbEb}_UN9sI0ejd|hs9;RlpVv8zbu#4s z!^i(!(Bm<&-oHQ4eS+6>)Xa`=k&t@^wxB=XcNnXofQ4>9>bsesKi}sVdA+$?|39Gq z`S^uKmV~^HCDvE7jQ4x&pZ(V~Ps7OPpU3X}77Mwb!xr@ap@yswjCoJ=_Z)vFu0RFX zHgwte-w*NkYhinq8Gi%5iGV+^vp4B`Lbd}FRaj>HJ+L_U+&{0A_bBH^6?3H$(m+O_n_#@;Hh0$ItRM zRIn``Kd)ap$e;URdmL-9v;ct|nfogC4_`m*A4ER)d}nNr8vF(+@plyd_TlkxT=oIS hV~46=UP^h@Z*oVZ35l?FZSFseFVUdv4>^QH@lT4KuNwdW literal 0 HcmV?d00001 diff --git a/CMakeFiles/3.27.4/CMakeSystem.cmake b/CMakeFiles/3.27.4/CMakeSystem.cmake new file mode 100644 index 0000000..fa75dab --- /dev/null +++ b/CMakeFiles/3.27.4/CMakeSystem.cmake @@ -0,0 +1,15 @@ +set(CMAKE_HOST_SYSTEM "Linux-6.1.48-1-lts") +set(CMAKE_HOST_SYSTEM_NAME "Linux") +set(CMAKE_HOST_SYSTEM_VERSION "6.1.48-1-lts") +set(CMAKE_HOST_SYSTEM_PROCESSOR "x86_64") + + + +set(CMAKE_SYSTEM "Linux-6.1.48-1-lts") +set(CMAKE_SYSTEM_NAME "Linux") +set(CMAKE_SYSTEM_VERSION "6.1.48-1-lts") +set(CMAKE_SYSTEM_PROCESSOR "x86_64") + +set(CMAKE_CROSSCOMPILING "FALSE") + +set(CMAKE_SYSTEM_LOADED 1) diff --git a/CMakeFiles/3.27.4/CompilerIdC/CMakeCCompilerId.c b/CMakeFiles/3.27.4/CompilerIdC/CMakeCCompilerId.c new file mode 100644 index 0000000..66be365 --- /dev/null +++ b/CMakeFiles/3.27.4/CompilerIdC/CMakeCCompilerId.c @@ -0,0 +1,866 @@ +#ifdef __cplusplus +# error "A C++ compiler has been selected for C." +#endif + +#if defined(__18CXX) +# define ID_VOID_MAIN +#endif +#if defined(__CLASSIC_C__) +/* cv-qualifiers did not exist in K&R C */ +# define const +# define volatile +#endif + +#if !defined(__has_include) +/* If the compiler does not have __has_include, pretend the answer is + always no. */ +# define __has_include(x) 0 +#endif + + +/* Version number components: V=Version, R=Revision, P=Patch + Version date components: YYYY=Year, MM=Month, DD=Day */ + +#if defined(__INTEL_COMPILER) || defined(__ICC) +# define COMPILER_ID "Intel" +# if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +# endif +# if defined(__GNUC__) +# define SIMULATE_ID "GNU" +# endif + /* __INTEL_COMPILER = VRP prior to 2021, and then VVVV for 2021 and later, + except that a few beta releases use the old format with V=2021. */ +# if __INTEL_COMPILER < 2021 || __INTEL_COMPILER == 202110 || __INTEL_COMPILER == 202111 +# define COMPILER_VERSION_MAJOR DEC(__INTEL_COMPILER/100) +# define COMPILER_VERSION_MINOR DEC(__INTEL_COMPILER/10 % 10) +# if defined(__INTEL_COMPILER_UPDATE) +# define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER_UPDATE) +# else +# define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER % 10) +# endif +# else +# define COMPILER_VERSION_MAJOR DEC(__INTEL_COMPILER) +# define COMPILER_VERSION_MINOR DEC(__INTEL_COMPILER_UPDATE) + /* The third version component from --version is an update index, + but no macro is provided for it. */ +# define COMPILER_VERSION_PATCH DEC(0) +# endif +# if defined(__INTEL_COMPILER_BUILD_DATE) + /* __INTEL_COMPILER_BUILD_DATE = YYYYMMDD */ +# define COMPILER_VERSION_TWEAK DEC(__INTEL_COMPILER_BUILD_DATE) +# endif +# if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +# endif +# if defined(__GNUC__) +# define SIMULATE_VERSION_MAJOR DEC(__GNUC__) +# elif defined(__GNUG__) +# define SIMULATE_VERSION_MAJOR DEC(__GNUG__) +# endif +# if defined(__GNUC_MINOR__) +# define SIMULATE_VERSION_MINOR DEC(__GNUC_MINOR__) +# endif +# if defined(__GNUC_PATCHLEVEL__) +# define SIMULATE_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__) +# endif + +#elif (defined(__clang__) && defined(__INTEL_CLANG_COMPILER)) || defined(__INTEL_LLVM_COMPILER) +# define COMPILER_ID "IntelLLVM" +#if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +#endif +#if defined(__GNUC__) +# define SIMULATE_ID "GNU" +#endif +/* __INTEL_LLVM_COMPILER = VVVVRP prior to 2021.2.0, VVVVRRPP for 2021.2.0 and + * later. Look for 6 digit vs. 8 digit version number to decide encoding. + * VVVV is no smaller than the current year when a version is released. + */ +#if __INTEL_LLVM_COMPILER < 1000000L +# define COMPILER_VERSION_MAJOR DEC(__INTEL_LLVM_COMPILER/100) +# define COMPILER_VERSION_MINOR DEC(__INTEL_LLVM_COMPILER/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__INTEL_LLVM_COMPILER % 10) +#else +# define COMPILER_VERSION_MAJOR DEC(__INTEL_LLVM_COMPILER/10000) +# define COMPILER_VERSION_MINOR DEC(__INTEL_LLVM_COMPILER/100 % 100) +# define COMPILER_VERSION_PATCH DEC(__INTEL_LLVM_COMPILER % 100) +#endif +#if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +#endif +#if defined(__GNUC__) +# define SIMULATE_VERSION_MAJOR DEC(__GNUC__) +#elif defined(__GNUG__) +# define SIMULATE_VERSION_MAJOR DEC(__GNUG__) +#endif +#if defined(__GNUC_MINOR__) +# define SIMULATE_VERSION_MINOR DEC(__GNUC_MINOR__) +#endif +#if defined(__GNUC_PATCHLEVEL__) +# define SIMULATE_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__) +#endif + +#elif defined(__PATHCC__) +# define COMPILER_ID "PathScale" +# define COMPILER_VERSION_MAJOR DEC(__PATHCC__) +# define COMPILER_VERSION_MINOR DEC(__PATHCC_MINOR__) +# if defined(__PATHCC_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__PATHCC_PATCHLEVEL__) +# endif + +#elif defined(__BORLANDC__) && defined(__CODEGEARC_VERSION__) +# define COMPILER_ID "Embarcadero" +# define COMPILER_VERSION_MAJOR HEX(__CODEGEARC_VERSION__>>24 & 0x00FF) +# define COMPILER_VERSION_MINOR HEX(__CODEGEARC_VERSION__>>16 & 0x00FF) +# define COMPILER_VERSION_PATCH DEC(__CODEGEARC_VERSION__ & 0xFFFF) + +#elif defined(__BORLANDC__) +# define COMPILER_ID "Borland" + /* __BORLANDC__ = 0xVRR */ +# define COMPILER_VERSION_MAJOR HEX(__BORLANDC__>>8) +# define COMPILER_VERSION_MINOR HEX(__BORLANDC__ & 0xFF) + +#elif defined(__WATCOMC__) && __WATCOMC__ < 1200 +# define COMPILER_ID "Watcom" + /* __WATCOMC__ = VVRR */ +# define COMPILER_VERSION_MAJOR DEC(__WATCOMC__ / 100) +# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10) +# if (__WATCOMC__ % 10) > 0 +# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10) +# endif + +#elif defined(__WATCOMC__) +# define COMPILER_ID "OpenWatcom" + /* __WATCOMC__ = VVRP + 1100 */ +# define COMPILER_VERSION_MAJOR DEC((__WATCOMC__ - 1100) / 100) +# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10) +# if (__WATCOMC__ % 10) > 0 +# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10) +# endif + +#elif defined(__SUNPRO_C) +# define COMPILER_ID "SunPro" +# if __SUNPRO_C >= 0x5100 + /* __SUNPRO_C = 0xVRRP */ +# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_C>>12) +# define COMPILER_VERSION_MINOR HEX(__SUNPRO_C>>4 & 0xFF) +# define COMPILER_VERSION_PATCH HEX(__SUNPRO_C & 0xF) +# else + /* __SUNPRO_CC = 0xVRP */ +# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_C>>8) +# define COMPILER_VERSION_MINOR HEX(__SUNPRO_C>>4 & 0xF) +# define COMPILER_VERSION_PATCH HEX(__SUNPRO_C & 0xF) +# endif + +#elif defined(__HP_cc) +# define COMPILER_ID "HP" + /* __HP_cc = VVRRPP */ +# define COMPILER_VERSION_MAJOR DEC(__HP_cc/10000) +# define COMPILER_VERSION_MINOR DEC(__HP_cc/100 % 100) +# define COMPILER_VERSION_PATCH DEC(__HP_cc % 100) + +#elif defined(__DECC) +# define COMPILER_ID "Compaq" + /* __DECC_VER = VVRRTPPPP */ +# define COMPILER_VERSION_MAJOR DEC(__DECC_VER/10000000) +# define COMPILER_VERSION_MINOR DEC(__DECC_VER/100000 % 100) +# define COMPILER_VERSION_PATCH DEC(__DECC_VER % 10000) + +#elif defined(__IBMC__) && defined(__COMPILER_VER__) +# define COMPILER_ID "zOS" + /* __IBMC__ = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__IBMC__/100) +# define COMPILER_VERSION_MINOR DEC(__IBMC__/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__IBMC__ % 10) + +#elif defined(__open_xl__) && defined(__clang__) +# define COMPILER_ID "IBMClang" +# define COMPILER_VERSION_MAJOR DEC(__open_xl_version__) +# define COMPILER_VERSION_MINOR DEC(__open_xl_release__) +# define COMPILER_VERSION_PATCH DEC(__open_xl_modification__) +# define COMPILER_VERSION_TWEAK DEC(__open_xl_ptf_fix_level__) + + +#elif defined(__ibmxl__) && defined(__clang__) +# define COMPILER_ID "XLClang" +# define COMPILER_VERSION_MAJOR DEC(__ibmxl_version__) +# define COMPILER_VERSION_MINOR DEC(__ibmxl_release__) +# define COMPILER_VERSION_PATCH DEC(__ibmxl_modification__) +# define COMPILER_VERSION_TWEAK DEC(__ibmxl_ptf_fix_level__) + + +#elif defined(__IBMC__) && !defined(__COMPILER_VER__) && __IBMC__ >= 800 +# define COMPILER_ID "XL" + /* __IBMC__ = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__IBMC__/100) +# define COMPILER_VERSION_MINOR DEC(__IBMC__/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__IBMC__ % 10) + +#elif defined(__IBMC__) && !defined(__COMPILER_VER__) && __IBMC__ < 800 +# define COMPILER_ID "VisualAge" + /* __IBMC__ = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__IBMC__/100) +# define COMPILER_VERSION_MINOR DEC(__IBMC__/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__IBMC__ % 10) + +#elif defined(__NVCOMPILER) +# define COMPILER_ID "NVHPC" +# define COMPILER_VERSION_MAJOR DEC(__NVCOMPILER_MAJOR__) +# define COMPILER_VERSION_MINOR DEC(__NVCOMPILER_MINOR__) +# if defined(__NVCOMPILER_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__NVCOMPILER_PATCHLEVEL__) +# endif + +#elif defined(__PGI) +# define COMPILER_ID "PGI" +# define COMPILER_VERSION_MAJOR DEC(__PGIC__) +# define COMPILER_VERSION_MINOR DEC(__PGIC_MINOR__) +# if defined(__PGIC_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__PGIC_PATCHLEVEL__) +# endif + +#elif defined(_CRAYC) +# define COMPILER_ID "Cray" +# define COMPILER_VERSION_MAJOR DEC(_RELEASE_MAJOR) +# define COMPILER_VERSION_MINOR DEC(_RELEASE_MINOR) + +#elif defined(__TI_COMPILER_VERSION__) +# define COMPILER_ID "TI" + /* __TI_COMPILER_VERSION__ = VVVRRRPPP */ +# define COMPILER_VERSION_MAJOR DEC(__TI_COMPILER_VERSION__/1000000) +# define COMPILER_VERSION_MINOR DEC(__TI_COMPILER_VERSION__/1000 % 1000) +# define COMPILER_VERSION_PATCH DEC(__TI_COMPILER_VERSION__ % 1000) + +#elif defined(__CLANG_FUJITSU) +# define COMPILER_ID "FujitsuClang" +# define COMPILER_VERSION_MAJOR DEC(__FCC_major__) +# define COMPILER_VERSION_MINOR DEC(__FCC_minor__) +# define COMPILER_VERSION_PATCH DEC(__FCC_patchlevel__) +# define COMPILER_VERSION_INTERNAL_STR __clang_version__ + + +#elif defined(__FUJITSU) +# define COMPILER_ID "Fujitsu" +# if defined(__FCC_version__) +# define COMPILER_VERSION __FCC_version__ +# elif defined(__FCC_major__) +# define COMPILER_VERSION_MAJOR DEC(__FCC_major__) +# define COMPILER_VERSION_MINOR DEC(__FCC_minor__) +# define COMPILER_VERSION_PATCH DEC(__FCC_patchlevel__) +# endif +# if defined(__fcc_version) +# define COMPILER_VERSION_INTERNAL DEC(__fcc_version) +# elif defined(__FCC_VERSION) +# define COMPILER_VERSION_INTERNAL DEC(__FCC_VERSION) +# endif + + +#elif defined(__ghs__) +# define COMPILER_ID "GHS" +/* __GHS_VERSION_NUMBER = VVVVRP */ +# ifdef __GHS_VERSION_NUMBER +# define COMPILER_VERSION_MAJOR DEC(__GHS_VERSION_NUMBER / 100) +# define COMPILER_VERSION_MINOR DEC(__GHS_VERSION_NUMBER / 10 % 10) +# define COMPILER_VERSION_PATCH DEC(__GHS_VERSION_NUMBER % 10) +# endif + +#elif defined(__TASKING__) +# define COMPILER_ID "Tasking" + # define COMPILER_VERSION_MAJOR DEC(__VERSION__/1000) + # define COMPILER_VERSION_MINOR DEC(__VERSION__ % 100) +# define COMPILER_VERSION_INTERNAL DEC(__VERSION__) + +#elif defined(__TINYC__) +# define COMPILER_ID "TinyCC" + +#elif defined(__BCC__) +# define COMPILER_ID "Bruce" + +#elif defined(__SCO_VERSION__) +# define COMPILER_ID "SCO" + +#elif defined(__ARMCC_VERSION) && !defined(__clang__) +# define COMPILER_ID "ARMCC" +#if __ARMCC_VERSION >= 1000000 + /* __ARMCC_VERSION = VRRPPPP */ + # define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/1000000) + # define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 100) + # define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION % 10000) +#else + /* __ARMCC_VERSION = VRPPPP */ + # define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/100000) + # define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 10) + # define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION % 10000) +#endif + + +#elif defined(__clang__) && defined(__apple_build_version__) +# define COMPILER_ID "AppleClang" +# if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +# endif +# define COMPILER_VERSION_MAJOR DEC(__clang_major__) +# define COMPILER_VERSION_MINOR DEC(__clang_minor__) +# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__) +# if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +# endif +# define COMPILER_VERSION_TWEAK DEC(__apple_build_version__) + +#elif defined(__clang__) && defined(__ARMCOMPILER_VERSION) +# define COMPILER_ID "ARMClang" + # define COMPILER_VERSION_MAJOR DEC(__ARMCOMPILER_VERSION/1000000) + # define COMPILER_VERSION_MINOR DEC(__ARMCOMPILER_VERSION/10000 % 100) + # define COMPILER_VERSION_PATCH DEC(__ARMCOMPILER_VERSION/100 % 100) +# define COMPILER_VERSION_INTERNAL DEC(__ARMCOMPILER_VERSION) + +#elif defined(__clang__) +# define COMPILER_ID "Clang" +# if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +# endif +# define COMPILER_VERSION_MAJOR DEC(__clang_major__) +# define COMPILER_VERSION_MINOR DEC(__clang_minor__) +# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__) +# if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +# endif + +#elif defined(__LCC__) && (defined(__GNUC__) || defined(__GNUG__) || defined(__MCST__)) +# define COMPILER_ID "LCC" +# define COMPILER_VERSION_MAJOR DEC(__LCC__ / 100) +# define COMPILER_VERSION_MINOR DEC(__LCC__ % 100) +# if defined(__LCC_MINOR__) +# define COMPILER_VERSION_PATCH DEC(__LCC_MINOR__) +# endif +# if defined(__GNUC__) && defined(__GNUC_MINOR__) +# define SIMULATE_ID "GNU" +# define SIMULATE_VERSION_MAJOR DEC(__GNUC__) +# define SIMULATE_VERSION_MINOR DEC(__GNUC_MINOR__) +# if defined(__GNUC_PATCHLEVEL__) +# define SIMULATE_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__) +# endif +# endif + +#elif defined(__GNUC__) +# define COMPILER_ID "GNU" +# define COMPILER_VERSION_MAJOR DEC(__GNUC__) +# if defined(__GNUC_MINOR__) +# define COMPILER_VERSION_MINOR DEC(__GNUC_MINOR__) +# endif +# if defined(__GNUC_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__) +# endif + +#elif defined(_MSC_VER) +# define COMPILER_ID "MSVC" + /* _MSC_VER = VVRR */ +# define COMPILER_VERSION_MAJOR DEC(_MSC_VER / 100) +# define COMPILER_VERSION_MINOR DEC(_MSC_VER % 100) +# if defined(_MSC_FULL_VER) +# if _MSC_VER >= 1400 + /* _MSC_FULL_VER = VVRRPPPPP */ +# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 100000) +# else + /* _MSC_FULL_VER = VVRRPPPP */ +# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 10000) +# endif +# endif +# if defined(_MSC_BUILD) +# define COMPILER_VERSION_TWEAK DEC(_MSC_BUILD) +# endif + +#elif defined(_ADI_COMPILER) +# define COMPILER_ID "ADSP" +#if defined(__VERSIONNUM__) + /* __VERSIONNUM__ = 0xVVRRPPTT */ +# define COMPILER_VERSION_MAJOR DEC(__VERSIONNUM__ >> 24 & 0xFF) +# define COMPILER_VERSION_MINOR DEC(__VERSIONNUM__ >> 16 & 0xFF) +# define COMPILER_VERSION_PATCH DEC(__VERSIONNUM__ >> 8 & 0xFF) +# define COMPILER_VERSION_TWEAK DEC(__VERSIONNUM__ & 0xFF) +#endif + +#elif defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC) +# define COMPILER_ID "IAR" +# if defined(__VER__) && defined(__ICCARM__) +# define COMPILER_VERSION_MAJOR DEC((__VER__) / 1000000) +# define COMPILER_VERSION_MINOR DEC(((__VER__) / 1000) % 1000) +# define COMPILER_VERSION_PATCH DEC((__VER__) % 1000) +# define COMPILER_VERSION_INTERNAL DEC(__IAR_SYSTEMS_ICC__) +# elif defined(__VER__) && (defined(__ICCAVR__) || defined(__ICCRX__) || defined(__ICCRH850__) || defined(__ICCRL78__) || defined(__ICC430__) || defined(__ICCRISCV__) || defined(__ICCV850__) || defined(__ICC8051__) || defined(__ICCSTM8__)) +# define COMPILER_VERSION_MAJOR DEC((__VER__) / 100) +# define COMPILER_VERSION_MINOR DEC((__VER__) - (((__VER__) / 100)*100)) +# define COMPILER_VERSION_PATCH DEC(__SUBVERSION__) +# define COMPILER_VERSION_INTERNAL DEC(__IAR_SYSTEMS_ICC__) +# endif + +#elif defined(__SDCC_VERSION_MAJOR) || defined(SDCC) +# define COMPILER_ID "SDCC" +# if defined(__SDCC_VERSION_MAJOR) +# define COMPILER_VERSION_MAJOR DEC(__SDCC_VERSION_MAJOR) +# define COMPILER_VERSION_MINOR DEC(__SDCC_VERSION_MINOR) +# define COMPILER_VERSION_PATCH DEC(__SDCC_VERSION_PATCH) +# else + /* SDCC = VRP */ +# define COMPILER_VERSION_MAJOR DEC(SDCC/100) +# define COMPILER_VERSION_MINOR DEC(SDCC/10 % 10) +# define COMPILER_VERSION_PATCH DEC(SDCC % 10) +# endif + + +/* These compilers are either not known or too old to define an + identification macro. Try to identify the platform and guess that + it is the native compiler. */ +#elif defined(__hpux) || defined(__hpua) +# define COMPILER_ID "HP" + +#else /* unknown compiler */ +# define COMPILER_ID "" +#endif + +/* Construct the string literal in pieces to prevent the source from + getting matched. Store it in a pointer rather than an array + because some compilers will just produce instructions to fill the + array rather than assigning a pointer to a static array. */ +char const* info_compiler = "INFO" ":" "compiler[" COMPILER_ID "]"; +#ifdef SIMULATE_ID +char const* info_simulate = "INFO" ":" "simulate[" SIMULATE_ID "]"; +#endif + +#ifdef __QNXNTO__ +char const* qnxnto = "INFO" ":" "qnxnto[]"; +#endif + +#if defined(__CRAYXT_COMPUTE_LINUX_TARGET) +char const *info_cray = "INFO" ":" "compiler_wrapper[CrayPrgEnv]"; +#endif + +#define STRINGIFY_HELPER(X) #X +#define STRINGIFY(X) STRINGIFY_HELPER(X) + +/* Identify known platforms by name. */ +#if defined(__linux) || defined(__linux__) || defined(linux) +# define PLATFORM_ID "Linux" + +#elif defined(__MSYS__) +# define PLATFORM_ID "MSYS" + +#elif defined(__CYGWIN__) +# define PLATFORM_ID "Cygwin" + +#elif defined(__MINGW32__) +# define PLATFORM_ID "MinGW" + +#elif defined(__APPLE__) +# define PLATFORM_ID "Darwin" + +#elif defined(_WIN32) || defined(__WIN32__) || defined(WIN32) +# define PLATFORM_ID "Windows" + +#elif defined(__FreeBSD__) || defined(__FreeBSD) +# define PLATFORM_ID "FreeBSD" + +#elif defined(__NetBSD__) || defined(__NetBSD) +# define PLATFORM_ID "NetBSD" + +#elif defined(__OpenBSD__) || defined(__OPENBSD) +# define PLATFORM_ID "OpenBSD" + +#elif defined(__sun) || defined(sun) +# define PLATFORM_ID "SunOS" + +#elif defined(_AIX) || defined(__AIX) || defined(__AIX__) || defined(__aix) || defined(__aix__) +# define PLATFORM_ID "AIX" + +#elif defined(__hpux) || defined(__hpux__) +# define PLATFORM_ID "HP-UX" + +#elif defined(__HAIKU__) +# define PLATFORM_ID "Haiku" + +#elif defined(__BeOS) || defined(__BEOS__) || defined(_BEOS) +# define PLATFORM_ID "BeOS" + +#elif defined(__QNX__) || defined(__QNXNTO__) +# define PLATFORM_ID "QNX" + +#elif defined(__tru64) || defined(_tru64) || defined(__TRU64__) +# define PLATFORM_ID "Tru64" + +#elif defined(__riscos) || defined(__riscos__) +# define PLATFORM_ID "RISCos" + +#elif defined(__sinix) || defined(__sinix__) || defined(__SINIX__) +# define PLATFORM_ID "SINIX" + +#elif defined(__UNIX_SV__) +# define PLATFORM_ID "UNIX_SV" + +#elif defined(__bsdos__) +# define PLATFORM_ID "BSDOS" + +#elif defined(_MPRAS) || defined(MPRAS) +# define PLATFORM_ID "MP-RAS" + +#elif defined(__osf) || defined(__osf__) +# define PLATFORM_ID "OSF1" + +#elif defined(_SCO_SV) || defined(SCO_SV) || defined(sco_sv) +# define PLATFORM_ID "SCO_SV" + +#elif defined(__ultrix) || defined(__ultrix__) || defined(_ULTRIX) +# define PLATFORM_ID "ULTRIX" + +#elif defined(__XENIX__) || defined(_XENIX) || defined(XENIX) +# define PLATFORM_ID "Xenix" + +#elif defined(__WATCOMC__) +# if defined(__LINUX__) +# define PLATFORM_ID "Linux" + +# elif defined(__DOS__) +# define PLATFORM_ID "DOS" + +# elif defined(__OS2__) +# define PLATFORM_ID "OS2" + +# elif defined(__WINDOWS__) +# define PLATFORM_ID "Windows3x" + +# elif defined(__VXWORKS__) +# define PLATFORM_ID "VxWorks" + +# else /* unknown platform */ +# define PLATFORM_ID +# endif + +#elif defined(__INTEGRITY) +# if defined(INT_178B) +# define PLATFORM_ID "Integrity178" + +# else /* regular Integrity */ +# define PLATFORM_ID "Integrity" +# endif + +# elif defined(_ADI_COMPILER) +# define PLATFORM_ID "ADSP" + +#else /* unknown platform */ +# define PLATFORM_ID + +#endif + +/* For windows compilers MSVC and Intel we can determine + the architecture of the compiler being used. This is because + the compilers do not have flags that can change the architecture, + but rather depend on which compiler is being used +*/ +#if defined(_WIN32) && defined(_MSC_VER) +# if defined(_M_IA64) +# define ARCHITECTURE_ID "IA64" + +# elif defined(_M_ARM64EC) +# define ARCHITECTURE_ID "ARM64EC" + +# elif defined(_M_X64) || defined(_M_AMD64) +# define ARCHITECTURE_ID "x64" + +# elif defined(_M_IX86) +# define ARCHITECTURE_ID "X86" + +# elif defined(_M_ARM64) +# define ARCHITECTURE_ID "ARM64" + +# elif defined(_M_ARM) +# if _M_ARM == 4 +# define ARCHITECTURE_ID "ARMV4I" +# elif _M_ARM == 5 +# define ARCHITECTURE_ID "ARMV5I" +# else +# define ARCHITECTURE_ID "ARMV" STRINGIFY(_M_ARM) +# endif + +# elif defined(_M_MIPS) +# define ARCHITECTURE_ID "MIPS" + +# elif defined(_M_SH) +# define ARCHITECTURE_ID "SHx" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__WATCOMC__) +# if defined(_M_I86) +# define ARCHITECTURE_ID "I86" + +# elif defined(_M_IX86) +# define ARCHITECTURE_ID "X86" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC) +# if defined(__ICCARM__) +# define ARCHITECTURE_ID "ARM" + +# elif defined(__ICCRX__) +# define ARCHITECTURE_ID "RX" + +# elif defined(__ICCRH850__) +# define ARCHITECTURE_ID "RH850" + +# elif defined(__ICCRL78__) +# define ARCHITECTURE_ID "RL78" + +# elif defined(__ICCRISCV__) +# define ARCHITECTURE_ID "RISCV" + +# elif defined(__ICCAVR__) +# define ARCHITECTURE_ID "AVR" + +# elif defined(__ICC430__) +# define ARCHITECTURE_ID "MSP430" + +# elif defined(__ICCV850__) +# define ARCHITECTURE_ID "V850" + +# elif defined(__ICC8051__) +# define ARCHITECTURE_ID "8051" + +# elif defined(__ICCSTM8__) +# define ARCHITECTURE_ID "STM8" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__ghs__) +# if defined(__PPC64__) +# define ARCHITECTURE_ID "PPC64" + +# elif defined(__ppc__) +# define ARCHITECTURE_ID "PPC" + +# elif defined(__ARM__) +# define ARCHITECTURE_ID "ARM" + +# elif defined(__x86_64__) +# define ARCHITECTURE_ID "x64" + +# elif defined(__i386__) +# define ARCHITECTURE_ID "X86" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__TI_COMPILER_VERSION__) +# if defined(__TI_ARM__) +# define ARCHITECTURE_ID "ARM" + +# elif defined(__MSP430__) +# define ARCHITECTURE_ID "MSP430" + +# elif defined(__TMS320C28XX__) +# define ARCHITECTURE_ID "TMS320C28x" + +# elif defined(__TMS320C6X__) || defined(_TMS320C6X) +# define ARCHITECTURE_ID "TMS320C6x" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +# elif defined(__ADSPSHARC__) +# define ARCHITECTURE_ID "SHARC" + +# elif defined(__ADSPBLACKFIN__) +# define ARCHITECTURE_ID "Blackfin" + +#elif defined(__TASKING__) + +# if defined(__CTC__) || defined(__CPTC__) +# define ARCHITECTURE_ID "TriCore" + +# elif defined(__CMCS__) +# define ARCHITECTURE_ID "MCS" + +# elif defined(__CARM__) +# define ARCHITECTURE_ID "ARM" + +# elif defined(__CARC__) +# define ARCHITECTURE_ID "ARC" + +# elif defined(__C51__) +# define ARCHITECTURE_ID "8051" + +# elif defined(__CPCP__) +# define ARCHITECTURE_ID "PCP" + +# else +# define ARCHITECTURE_ID "" +# endif + +#else +# define ARCHITECTURE_ID +#endif + +/* Convert integer to decimal digit literals. */ +#define DEC(n) \ + ('0' + (((n) / 10000000)%10)), \ + ('0' + (((n) / 1000000)%10)), \ + ('0' + (((n) / 100000)%10)), \ + ('0' + (((n) / 10000)%10)), \ + ('0' + (((n) / 1000)%10)), \ + ('0' + (((n) / 100)%10)), \ + ('0' + (((n) / 10)%10)), \ + ('0' + ((n) % 10)) + +/* Convert integer to hex digit literals. */ +#define HEX(n) \ + ('0' + ((n)>>28 & 0xF)), \ + ('0' + ((n)>>24 & 0xF)), \ + ('0' + ((n)>>20 & 0xF)), \ + ('0' + ((n)>>16 & 0xF)), \ + ('0' + ((n)>>12 & 0xF)), \ + ('0' + ((n)>>8 & 0xF)), \ + ('0' + ((n)>>4 & 0xF)), \ + ('0' + ((n) & 0xF)) + +/* Construct a string literal encoding the version number. */ +#ifdef COMPILER_VERSION +char const* info_version = "INFO" ":" "compiler_version[" COMPILER_VERSION "]"; + +/* Construct a string literal encoding the version number components. */ +#elif defined(COMPILER_VERSION_MAJOR) +char const info_version[] = { + 'I', 'N', 'F', 'O', ':', + 'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','[', + COMPILER_VERSION_MAJOR, +# ifdef COMPILER_VERSION_MINOR + '.', COMPILER_VERSION_MINOR, +# ifdef COMPILER_VERSION_PATCH + '.', COMPILER_VERSION_PATCH, +# ifdef COMPILER_VERSION_TWEAK + '.', COMPILER_VERSION_TWEAK, +# endif +# endif +# endif + ']','\0'}; +#endif + +/* Construct a string literal encoding the internal version number. */ +#ifdef COMPILER_VERSION_INTERNAL +char const info_version_internal[] = { + 'I', 'N', 'F', 'O', ':', + 'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','_', + 'i','n','t','e','r','n','a','l','[', + COMPILER_VERSION_INTERNAL,']','\0'}; +#elif defined(COMPILER_VERSION_INTERNAL_STR) +char const* info_version_internal = "INFO" ":" "compiler_version_internal[" COMPILER_VERSION_INTERNAL_STR "]"; +#endif + +/* Construct a string literal encoding the version number components. */ +#ifdef SIMULATE_VERSION_MAJOR +char const info_simulate_version[] = { + 'I', 'N', 'F', 'O', ':', + 's','i','m','u','l','a','t','e','_','v','e','r','s','i','o','n','[', + SIMULATE_VERSION_MAJOR, +# ifdef SIMULATE_VERSION_MINOR + '.', SIMULATE_VERSION_MINOR, +# ifdef SIMULATE_VERSION_PATCH + '.', SIMULATE_VERSION_PATCH, +# ifdef SIMULATE_VERSION_TWEAK + '.', SIMULATE_VERSION_TWEAK, +# endif +# endif +# endif + ']','\0'}; +#endif + +/* Construct the string literal in pieces to prevent the source from + getting matched. Store it in a pointer rather than an array + because some compilers will just produce instructions to fill the + array rather than assigning a pointer to a static array. */ +char const* info_platform = "INFO" ":" "platform[" PLATFORM_ID "]"; +char const* info_arch = "INFO" ":" "arch[" ARCHITECTURE_ID "]"; + + + +#if !defined(__STDC__) && !defined(__clang__) +# if defined(_MSC_VER) || defined(__ibmxl__) || defined(__IBMC__) +# define C_VERSION "90" +# else +# define C_VERSION +# endif +#elif __STDC_VERSION__ > 201710L +# define C_VERSION "23" +#elif __STDC_VERSION__ >= 201710L +# define C_VERSION "17" +#elif __STDC_VERSION__ >= 201000L +# define C_VERSION "11" +#elif __STDC_VERSION__ >= 199901L +# define C_VERSION "99" +#else +# define C_VERSION "90" +#endif +const char* info_language_standard_default = + "INFO" ":" "standard_default[" C_VERSION "]"; + +const char* info_language_extensions_default = "INFO" ":" "extensions_default[" +#if (defined(__clang__) || defined(__GNUC__) || defined(__xlC__) || \ + defined(__TI_COMPILER_VERSION__)) && \ + !defined(__STRICT_ANSI__) + "ON" +#else + "OFF" +#endif +"]"; + +/*--------------------------------------------------------------------------*/ + +#ifdef ID_VOID_MAIN +void main() {} +#else +# if defined(__CLASSIC_C__) +int main(argc, argv) int argc; char *argv[]; +# else +int main(int argc, char* argv[]) +# endif +{ + int require = 0; + require += info_compiler[argc]; + require += info_platform[argc]; + require += info_arch[argc]; +#ifdef COMPILER_VERSION_MAJOR + require += info_version[argc]; +#endif +#ifdef COMPILER_VERSION_INTERNAL + require += info_version_internal[argc]; +#endif +#ifdef SIMULATE_ID + require += info_simulate[argc]; +#endif +#ifdef SIMULATE_VERSION_MAJOR + require += info_simulate_version[argc]; +#endif +#if defined(__CRAYXT_COMPUTE_LINUX_TARGET) + require += info_cray[argc]; +#endif + require += info_language_standard_default[argc]; + require += info_language_extensions_default[argc]; + (void)argv; + return require; +} +#endif diff --git a/CMakeFiles/3.27.4/CompilerIdC/a.out b/CMakeFiles/3.27.4/CompilerIdC/a.out new file mode 100755 index 0000000000000000000000000000000000000000..c7890f1f4522a5194c18c940585f630f294212c2 GIT binary patch literal 15536 zcmeHOYit}>6+XL;6Q{)8jj3HXDR|VPD3$PJZ70SQ+^)S|XDs;nM4$VEg7D6~O^%7w_wIdjjM zjBnR1>YoZ}uI2si`R@7dy>sr&?%kQQk7P%OX@L8HEF-CyG&lV85LXb=&bJ7^=t&2}!qAS)>VJ5d=OC(lt^8 z+d96$0|-icFrGnTEQbFY;73^}7}n8LlBV)c-nSX|b6ir4q9c=Z2I~yg37+Ti1SOsn z6Z-GtcdB9z0OUbr$l)rRC1$zTVE>gJz{shX&wgIyYOP;D z)jwy=M8}tWf8<}Le$F+%MDXEtuNAv~kh|VlTT67DB*#@o^ncp-KlEdQdp4|<>(+%= z?zb+iH(0TY*5wWFHte92J7}t{%_cgAZt7`%C;Jz$8J2pES*QAMp{liV#cQ_C_U}WZ z*1C@0rLWG^YPE}vLrBDquil*R>g>&Wq9YB|-(Tm@_ZarE^6)ilWohj<*&8%v>ul?v zu&1-xYu1xi>{8+xNIYAOWp5z=`z`oq>+!0CbFCL{1xP%zEgAIkWIb=}{Y*XnZ1%=+ zT%ut8f)%5wMkR_s6oDuLQ3Rq0L=lK05Je!0Koo%}0#O8_2yBi3J@Dd+G(->kD#@TR&x#4YZ!=N4&{O3*ej?$0W=x8Wo0I6XR|$yaN&gNS3- zYqe2Cde%xM_Rvv?Ehl4pckO6;3?FBC<0Lgq6kD0h$8U+9RbN>l)OdB4ZMpFYnL1z=QTF7 zUFH18JJ^=|$h~aKSEfB|OP-|U`AYl0HfkkusdAE`98C;YnU+v_~vH^iU& zeYZgJ$F~|^@=*;#c}Tvg{;BZ8SZNU>gfmz-Lbg=D=JRa; zX<-yTf{=tZ=+pSq$hX9sL9PSk4e(X=*ZX-2c|)8+_(QDkj<bwaY1Ix`HY*%@Exy_oH+yb(5J=+#zr!jU5+Qbowe-YqXT1E z+Zs9w_TkZq!GTeGVtDw0?4&(8FgTjUymLLPJuSKHZ_BUm= z+qp`~p2wSHl=VI`fnK?M(O#;!Imj1hOSar$Q&zz#&Mi4}uKnh_XJETU*2sN69BjH$ z;eq|6eA~t}dpkQmWZPPY`i;7`$hqH~`X7XZ()(>ZUQhMR_Yjpqw*&#q%83QfnMU-= z3g@MkFXB%C7Qrl*JlC8nE}4tv(xO}TPK2oGr9A$QBcEexU~r_5)R}*qyVGpTU7k*cZN-iv_Hx&TuKf#HCqqiyoi7?;Pm!7*GA+u5UYkjta`>v5Y{z z;c_<`^cfmwvXAwGY32oj>xzk9#ISyu^@1M|A)~y{2|c3ezs-6}v$iU|YE8@&7C~(w;-~ zvd<8d{h7>P`~<&*V*2=Xw3;{G%c|S;xO2M=qk5-!WAWkT<}71;MN6 z1z*LMuwM3wS6MIDsdOMZLD~<6^^j)Il)^qX1w<$I23ClZ`OAK&kM+7ghePDhfCO>u z9`K^quOHEeQO>2I$$TU(JCT#QV>Kwr9##F848$#(iF>j7`tQ@j MHY~d|fo8&g0U#vJdH?_b literal 0 HcmV?d00001 diff --git a/CMakeFiles/3.27.4/CompilerIdCXX/CMakeCXXCompilerId.cpp b/CMakeFiles/3.27.4/CompilerIdCXX/CMakeCXXCompilerId.cpp new file mode 100644 index 0000000..52d56e2 --- /dev/null +++ b/CMakeFiles/3.27.4/CompilerIdCXX/CMakeCXXCompilerId.cpp @@ -0,0 +1,855 @@ +/* This source file must have a .cpp extension so that all C++ compilers + recognize the extension without flags. Borland does not know .cxx for + example. */ +#ifndef __cplusplus +# error "A C compiler has been selected for C++." +#endif + +#if !defined(__has_include) +/* If the compiler does not have __has_include, pretend the answer is + always no. */ +# define __has_include(x) 0 +#endif + + +/* Version number components: V=Version, R=Revision, P=Patch + Version date components: YYYY=Year, MM=Month, DD=Day */ + +#if defined(__COMO__) +# define COMPILER_ID "Comeau" + /* __COMO_VERSION__ = VRR */ +# define COMPILER_VERSION_MAJOR DEC(__COMO_VERSION__ / 100) +# define COMPILER_VERSION_MINOR DEC(__COMO_VERSION__ % 100) + +#elif defined(__INTEL_COMPILER) || defined(__ICC) +# define COMPILER_ID "Intel" +# if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +# endif +# if defined(__GNUC__) +# define SIMULATE_ID "GNU" +# endif + /* __INTEL_COMPILER = VRP prior to 2021, and then VVVV for 2021 and later, + except that a few beta releases use the old format with V=2021. */ +# if __INTEL_COMPILER < 2021 || __INTEL_COMPILER == 202110 || __INTEL_COMPILER == 202111 +# define COMPILER_VERSION_MAJOR DEC(__INTEL_COMPILER/100) +# define COMPILER_VERSION_MINOR DEC(__INTEL_COMPILER/10 % 10) +# if defined(__INTEL_COMPILER_UPDATE) +# define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER_UPDATE) +# else +# define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER % 10) +# endif +# else +# define COMPILER_VERSION_MAJOR DEC(__INTEL_COMPILER) +# define COMPILER_VERSION_MINOR DEC(__INTEL_COMPILER_UPDATE) + /* The third version component from --version is an update index, + but no macro is provided for it. */ +# define COMPILER_VERSION_PATCH DEC(0) +# endif +# if defined(__INTEL_COMPILER_BUILD_DATE) + /* __INTEL_COMPILER_BUILD_DATE = YYYYMMDD */ +# define COMPILER_VERSION_TWEAK DEC(__INTEL_COMPILER_BUILD_DATE) +# endif +# if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +# endif +# if defined(__GNUC__) +# define SIMULATE_VERSION_MAJOR DEC(__GNUC__) +# elif defined(__GNUG__) +# define SIMULATE_VERSION_MAJOR DEC(__GNUG__) +# endif +# if defined(__GNUC_MINOR__) +# define SIMULATE_VERSION_MINOR DEC(__GNUC_MINOR__) +# endif +# if defined(__GNUC_PATCHLEVEL__) +# define SIMULATE_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__) +# endif + +#elif (defined(__clang__) && defined(__INTEL_CLANG_COMPILER)) || defined(__INTEL_LLVM_COMPILER) +# define COMPILER_ID "IntelLLVM" +#if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +#endif +#if defined(__GNUC__) +# define SIMULATE_ID "GNU" +#endif +/* __INTEL_LLVM_COMPILER = VVVVRP prior to 2021.2.0, VVVVRRPP for 2021.2.0 and + * later. Look for 6 digit vs. 8 digit version number to decide encoding. + * VVVV is no smaller than the current year when a version is released. + */ +#if __INTEL_LLVM_COMPILER < 1000000L +# define COMPILER_VERSION_MAJOR DEC(__INTEL_LLVM_COMPILER/100) +# define COMPILER_VERSION_MINOR DEC(__INTEL_LLVM_COMPILER/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__INTEL_LLVM_COMPILER % 10) +#else +# define COMPILER_VERSION_MAJOR DEC(__INTEL_LLVM_COMPILER/10000) +# define COMPILER_VERSION_MINOR DEC(__INTEL_LLVM_COMPILER/100 % 100) +# define COMPILER_VERSION_PATCH DEC(__INTEL_LLVM_COMPILER % 100) +#endif +#if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +#endif +#if defined(__GNUC__) +# define SIMULATE_VERSION_MAJOR DEC(__GNUC__) +#elif defined(__GNUG__) +# define SIMULATE_VERSION_MAJOR DEC(__GNUG__) +#endif +#if defined(__GNUC_MINOR__) +# define SIMULATE_VERSION_MINOR DEC(__GNUC_MINOR__) +#endif +#if defined(__GNUC_PATCHLEVEL__) +# define SIMULATE_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__) +#endif + +#elif defined(__PATHCC__) +# define COMPILER_ID "PathScale" +# define COMPILER_VERSION_MAJOR DEC(__PATHCC__) +# define COMPILER_VERSION_MINOR DEC(__PATHCC_MINOR__) +# if defined(__PATHCC_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__PATHCC_PATCHLEVEL__) +# endif + +#elif defined(__BORLANDC__) && defined(__CODEGEARC_VERSION__) +# define COMPILER_ID "Embarcadero" +# define COMPILER_VERSION_MAJOR HEX(__CODEGEARC_VERSION__>>24 & 0x00FF) +# define COMPILER_VERSION_MINOR HEX(__CODEGEARC_VERSION__>>16 & 0x00FF) +# define COMPILER_VERSION_PATCH DEC(__CODEGEARC_VERSION__ & 0xFFFF) + +#elif defined(__BORLANDC__) +# define COMPILER_ID "Borland" + /* __BORLANDC__ = 0xVRR */ +# define COMPILER_VERSION_MAJOR HEX(__BORLANDC__>>8) +# define COMPILER_VERSION_MINOR HEX(__BORLANDC__ & 0xFF) + +#elif defined(__WATCOMC__) && __WATCOMC__ < 1200 +# define COMPILER_ID "Watcom" + /* __WATCOMC__ = VVRR */ +# define COMPILER_VERSION_MAJOR DEC(__WATCOMC__ / 100) +# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10) +# if (__WATCOMC__ % 10) > 0 +# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10) +# endif + +#elif defined(__WATCOMC__) +# define COMPILER_ID "OpenWatcom" + /* __WATCOMC__ = VVRP + 1100 */ +# define COMPILER_VERSION_MAJOR DEC((__WATCOMC__ - 1100) / 100) +# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10) +# if (__WATCOMC__ % 10) > 0 +# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10) +# endif + +#elif defined(__SUNPRO_CC) +# define COMPILER_ID "SunPro" +# if __SUNPRO_CC >= 0x5100 + /* __SUNPRO_CC = 0xVRRP */ +# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_CC>>12) +# define COMPILER_VERSION_MINOR HEX(__SUNPRO_CC>>4 & 0xFF) +# define COMPILER_VERSION_PATCH HEX(__SUNPRO_CC & 0xF) +# else + /* __SUNPRO_CC = 0xVRP */ +# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_CC>>8) +# define COMPILER_VERSION_MINOR HEX(__SUNPRO_CC>>4 & 0xF) +# define COMPILER_VERSION_PATCH HEX(__SUNPRO_CC & 0xF) +# endif + +#elif defined(__HP_aCC) +# define COMPILER_ID "HP" + /* __HP_aCC = VVRRPP */ +# define COMPILER_VERSION_MAJOR DEC(__HP_aCC/10000) +# define COMPILER_VERSION_MINOR DEC(__HP_aCC/100 % 100) +# define COMPILER_VERSION_PATCH DEC(__HP_aCC % 100) + +#elif defined(__DECCXX) +# define COMPILER_ID "Compaq" + /* __DECCXX_VER = VVRRTPPPP */ +# define COMPILER_VERSION_MAJOR DEC(__DECCXX_VER/10000000) +# define COMPILER_VERSION_MINOR DEC(__DECCXX_VER/100000 % 100) +# define COMPILER_VERSION_PATCH DEC(__DECCXX_VER % 10000) + +#elif defined(__IBMCPP__) && defined(__COMPILER_VER__) +# define COMPILER_ID "zOS" + /* __IBMCPP__ = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__IBMCPP__/100) +# define COMPILER_VERSION_MINOR DEC(__IBMCPP__/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__IBMCPP__ % 10) + +#elif defined(__open_xl__) && defined(__clang__) +# define COMPILER_ID "IBMClang" +# define COMPILER_VERSION_MAJOR DEC(__open_xl_version__) +# define COMPILER_VERSION_MINOR DEC(__open_xl_release__) +# define COMPILER_VERSION_PATCH DEC(__open_xl_modification__) +# define COMPILER_VERSION_TWEAK DEC(__open_xl_ptf_fix_level__) + + +#elif defined(__ibmxl__) && defined(__clang__) +# define COMPILER_ID "XLClang" +# define COMPILER_VERSION_MAJOR DEC(__ibmxl_version__) +# define COMPILER_VERSION_MINOR DEC(__ibmxl_release__) +# define COMPILER_VERSION_PATCH DEC(__ibmxl_modification__) +# define COMPILER_VERSION_TWEAK DEC(__ibmxl_ptf_fix_level__) + + +#elif defined(__IBMCPP__) && !defined(__COMPILER_VER__) && __IBMCPP__ >= 800 +# define COMPILER_ID "XL" + /* __IBMCPP__ = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__IBMCPP__/100) +# define COMPILER_VERSION_MINOR DEC(__IBMCPP__/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__IBMCPP__ % 10) + +#elif defined(__IBMCPP__) && !defined(__COMPILER_VER__) && __IBMCPP__ < 800 +# define COMPILER_ID "VisualAge" + /* __IBMCPP__ = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__IBMCPP__/100) +# define COMPILER_VERSION_MINOR DEC(__IBMCPP__/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__IBMCPP__ % 10) + +#elif defined(__NVCOMPILER) +# define COMPILER_ID "NVHPC" +# define COMPILER_VERSION_MAJOR DEC(__NVCOMPILER_MAJOR__) +# define COMPILER_VERSION_MINOR DEC(__NVCOMPILER_MINOR__) +# if defined(__NVCOMPILER_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__NVCOMPILER_PATCHLEVEL__) +# endif + +#elif defined(__PGI) +# define COMPILER_ID "PGI" +# define COMPILER_VERSION_MAJOR DEC(__PGIC__) +# define COMPILER_VERSION_MINOR DEC(__PGIC_MINOR__) +# if defined(__PGIC_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__PGIC_PATCHLEVEL__) +# endif + +#elif defined(_CRAYC) +# define COMPILER_ID "Cray" +# define COMPILER_VERSION_MAJOR DEC(_RELEASE_MAJOR) +# define COMPILER_VERSION_MINOR DEC(_RELEASE_MINOR) + +#elif defined(__TI_COMPILER_VERSION__) +# define COMPILER_ID "TI" + /* __TI_COMPILER_VERSION__ = VVVRRRPPP */ +# define COMPILER_VERSION_MAJOR DEC(__TI_COMPILER_VERSION__/1000000) +# define COMPILER_VERSION_MINOR DEC(__TI_COMPILER_VERSION__/1000 % 1000) +# define COMPILER_VERSION_PATCH DEC(__TI_COMPILER_VERSION__ % 1000) + +#elif defined(__CLANG_FUJITSU) +# define COMPILER_ID "FujitsuClang" +# define COMPILER_VERSION_MAJOR DEC(__FCC_major__) +# define COMPILER_VERSION_MINOR DEC(__FCC_minor__) +# define COMPILER_VERSION_PATCH DEC(__FCC_patchlevel__) +# define COMPILER_VERSION_INTERNAL_STR __clang_version__ + + +#elif defined(__FUJITSU) +# define COMPILER_ID "Fujitsu" +# if defined(__FCC_version__) +# define COMPILER_VERSION __FCC_version__ +# elif defined(__FCC_major__) +# define COMPILER_VERSION_MAJOR DEC(__FCC_major__) +# define COMPILER_VERSION_MINOR DEC(__FCC_minor__) +# define COMPILER_VERSION_PATCH DEC(__FCC_patchlevel__) +# endif +# if defined(__fcc_version) +# define COMPILER_VERSION_INTERNAL DEC(__fcc_version) +# elif defined(__FCC_VERSION) +# define COMPILER_VERSION_INTERNAL DEC(__FCC_VERSION) +# endif + + +#elif defined(__ghs__) +# define COMPILER_ID "GHS" +/* __GHS_VERSION_NUMBER = VVVVRP */ +# ifdef __GHS_VERSION_NUMBER +# define COMPILER_VERSION_MAJOR DEC(__GHS_VERSION_NUMBER / 100) +# define COMPILER_VERSION_MINOR DEC(__GHS_VERSION_NUMBER / 10 % 10) +# define COMPILER_VERSION_PATCH DEC(__GHS_VERSION_NUMBER % 10) +# endif + +#elif defined(__TASKING__) +# define COMPILER_ID "Tasking" + # define COMPILER_VERSION_MAJOR DEC(__VERSION__/1000) + # define COMPILER_VERSION_MINOR DEC(__VERSION__ % 100) +# define COMPILER_VERSION_INTERNAL DEC(__VERSION__) + +#elif defined(__SCO_VERSION__) +# define COMPILER_ID "SCO" + +#elif defined(__ARMCC_VERSION) && !defined(__clang__) +# define COMPILER_ID "ARMCC" +#if __ARMCC_VERSION >= 1000000 + /* __ARMCC_VERSION = VRRPPPP */ + # define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/1000000) + # define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 100) + # define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION % 10000) +#else + /* __ARMCC_VERSION = VRPPPP */ + # define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/100000) + # define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 10) + # define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION % 10000) +#endif + + +#elif defined(__clang__) && defined(__apple_build_version__) +# define COMPILER_ID "AppleClang" +# if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +# endif +# define COMPILER_VERSION_MAJOR DEC(__clang_major__) +# define COMPILER_VERSION_MINOR DEC(__clang_minor__) +# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__) +# if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +# endif +# define COMPILER_VERSION_TWEAK DEC(__apple_build_version__) + +#elif defined(__clang__) && defined(__ARMCOMPILER_VERSION) +# define COMPILER_ID "ARMClang" + # define COMPILER_VERSION_MAJOR DEC(__ARMCOMPILER_VERSION/1000000) + # define COMPILER_VERSION_MINOR DEC(__ARMCOMPILER_VERSION/10000 % 100) + # define COMPILER_VERSION_PATCH DEC(__ARMCOMPILER_VERSION/100 % 100) +# define COMPILER_VERSION_INTERNAL DEC(__ARMCOMPILER_VERSION) + +#elif defined(__clang__) +# define COMPILER_ID "Clang" +# if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +# endif +# define COMPILER_VERSION_MAJOR DEC(__clang_major__) +# define COMPILER_VERSION_MINOR DEC(__clang_minor__) +# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__) +# if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +# endif + +#elif defined(__LCC__) && (defined(__GNUC__) || defined(__GNUG__) || defined(__MCST__)) +# define COMPILER_ID "LCC" +# define COMPILER_VERSION_MAJOR DEC(__LCC__ / 100) +# define COMPILER_VERSION_MINOR DEC(__LCC__ % 100) +# if defined(__LCC_MINOR__) +# define COMPILER_VERSION_PATCH DEC(__LCC_MINOR__) +# endif +# if defined(__GNUC__) && defined(__GNUC_MINOR__) +# define SIMULATE_ID "GNU" +# define SIMULATE_VERSION_MAJOR DEC(__GNUC__) +# define SIMULATE_VERSION_MINOR DEC(__GNUC_MINOR__) +# if defined(__GNUC_PATCHLEVEL__) +# define SIMULATE_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__) +# endif +# endif + +#elif defined(__GNUC__) || defined(__GNUG__) +# define COMPILER_ID "GNU" +# if defined(__GNUC__) +# define COMPILER_VERSION_MAJOR DEC(__GNUC__) +# else +# define COMPILER_VERSION_MAJOR DEC(__GNUG__) +# endif +# if defined(__GNUC_MINOR__) +# define COMPILER_VERSION_MINOR DEC(__GNUC_MINOR__) +# endif +# if defined(__GNUC_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__) +# endif + +#elif defined(_MSC_VER) +# define COMPILER_ID "MSVC" + /* _MSC_VER = VVRR */ +# define COMPILER_VERSION_MAJOR DEC(_MSC_VER / 100) +# define COMPILER_VERSION_MINOR DEC(_MSC_VER % 100) +# if defined(_MSC_FULL_VER) +# if _MSC_VER >= 1400 + /* _MSC_FULL_VER = VVRRPPPPP */ +# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 100000) +# else + /* _MSC_FULL_VER = VVRRPPPP */ +# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 10000) +# endif +# endif +# if defined(_MSC_BUILD) +# define COMPILER_VERSION_TWEAK DEC(_MSC_BUILD) +# endif + +#elif defined(_ADI_COMPILER) +# define COMPILER_ID "ADSP" +#if defined(__VERSIONNUM__) + /* __VERSIONNUM__ = 0xVVRRPPTT */ +# define COMPILER_VERSION_MAJOR DEC(__VERSIONNUM__ >> 24 & 0xFF) +# define COMPILER_VERSION_MINOR DEC(__VERSIONNUM__ >> 16 & 0xFF) +# define COMPILER_VERSION_PATCH DEC(__VERSIONNUM__ >> 8 & 0xFF) +# define COMPILER_VERSION_TWEAK DEC(__VERSIONNUM__ & 0xFF) +#endif + +#elif defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC) +# define COMPILER_ID "IAR" +# if defined(__VER__) && defined(__ICCARM__) +# define COMPILER_VERSION_MAJOR DEC((__VER__) / 1000000) +# define COMPILER_VERSION_MINOR DEC(((__VER__) / 1000) % 1000) +# define COMPILER_VERSION_PATCH DEC((__VER__) % 1000) +# define COMPILER_VERSION_INTERNAL DEC(__IAR_SYSTEMS_ICC__) +# elif defined(__VER__) && (defined(__ICCAVR__) || defined(__ICCRX__) || defined(__ICCRH850__) || defined(__ICCRL78__) || defined(__ICC430__) || defined(__ICCRISCV__) || defined(__ICCV850__) || defined(__ICC8051__) || defined(__ICCSTM8__)) +# define COMPILER_VERSION_MAJOR DEC((__VER__) / 100) +# define COMPILER_VERSION_MINOR DEC((__VER__) - (((__VER__) / 100)*100)) +# define COMPILER_VERSION_PATCH DEC(__SUBVERSION__) +# define COMPILER_VERSION_INTERNAL DEC(__IAR_SYSTEMS_ICC__) +# endif + + +/* These compilers are either not known or too old to define an + identification macro. Try to identify the platform and guess that + it is the native compiler. */ +#elif defined(__hpux) || defined(__hpua) +# define COMPILER_ID "HP" + +#else /* unknown compiler */ +# define COMPILER_ID "" +#endif + +/* Construct the string literal in pieces to prevent the source from + getting matched. Store it in a pointer rather than an array + because some compilers will just produce instructions to fill the + array rather than assigning a pointer to a static array. */ +char const* info_compiler = "INFO" ":" "compiler[" COMPILER_ID "]"; +#ifdef SIMULATE_ID +char const* info_simulate = "INFO" ":" "simulate[" SIMULATE_ID "]"; +#endif + +#ifdef __QNXNTO__ +char const* qnxnto = "INFO" ":" "qnxnto[]"; +#endif + +#if defined(__CRAYXT_COMPUTE_LINUX_TARGET) +char const *info_cray = "INFO" ":" "compiler_wrapper[CrayPrgEnv]"; +#endif + +#define STRINGIFY_HELPER(X) #X +#define STRINGIFY(X) STRINGIFY_HELPER(X) + +/* Identify known platforms by name. */ +#if defined(__linux) || defined(__linux__) || defined(linux) +# define PLATFORM_ID "Linux" + +#elif defined(__MSYS__) +# define PLATFORM_ID "MSYS" + +#elif defined(__CYGWIN__) +# define PLATFORM_ID "Cygwin" + +#elif defined(__MINGW32__) +# define PLATFORM_ID "MinGW" + +#elif defined(__APPLE__) +# define PLATFORM_ID "Darwin" + +#elif defined(_WIN32) || defined(__WIN32__) || defined(WIN32) +# define PLATFORM_ID "Windows" + +#elif defined(__FreeBSD__) || defined(__FreeBSD) +# define PLATFORM_ID "FreeBSD" + +#elif defined(__NetBSD__) || defined(__NetBSD) +# define PLATFORM_ID "NetBSD" + +#elif defined(__OpenBSD__) || defined(__OPENBSD) +# define PLATFORM_ID "OpenBSD" + +#elif defined(__sun) || defined(sun) +# define PLATFORM_ID "SunOS" + +#elif defined(_AIX) || defined(__AIX) || defined(__AIX__) || defined(__aix) || defined(__aix__) +# define PLATFORM_ID "AIX" + +#elif defined(__hpux) || defined(__hpux__) +# define PLATFORM_ID "HP-UX" + +#elif defined(__HAIKU__) +# define PLATFORM_ID "Haiku" + +#elif defined(__BeOS) || defined(__BEOS__) || defined(_BEOS) +# define PLATFORM_ID "BeOS" + +#elif defined(__QNX__) || defined(__QNXNTO__) +# define PLATFORM_ID "QNX" + +#elif defined(__tru64) || defined(_tru64) || defined(__TRU64__) +# define PLATFORM_ID "Tru64" + +#elif defined(__riscos) || defined(__riscos__) +# define PLATFORM_ID "RISCos" + +#elif defined(__sinix) || defined(__sinix__) || defined(__SINIX__) +# define PLATFORM_ID "SINIX" + +#elif defined(__UNIX_SV__) +# define PLATFORM_ID "UNIX_SV" + +#elif defined(__bsdos__) +# define PLATFORM_ID "BSDOS" + +#elif defined(_MPRAS) || defined(MPRAS) +# define PLATFORM_ID "MP-RAS" + +#elif defined(__osf) || defined(__osf__) +# define PLATFORM_ID "OSF1" + +#elif defined(_SCO_SV) || defined(SCO_SV) || defined(sco_sv) +# define PLATFORM_ID "SCO_SV" + +#elif defined(__ultrix) || defined(__ultrix__) || defined(_ULTRIX) +# define PLATFORM_ID "ULTRIX" + +#elif defined(__XENIX__) || defined(_XENIX) || defined(XENIX) +# define PLATFORM_ID "Xenix" + +#elif defined(__WATCOMC__) +# if defined(__LINUX__) +# define PLATFORM_ID "Linux" + +# elif defined(__DOS__) +# define PLATFORM_ID "DOS" + +# elif defined(__OS2__) +# define PLATFORM_ID "OS2" + +# elif defined(__WINDOWS__) +# define PLATFORM_ID "Windows3x" + +# elif defined(__VXWORKS__) +# define PLATFORM_ID "VxWorks" + +# else /* unknown platform */ +# define PLATFORM_ID +# endif + +#elif defined(__INTEGRITY) +# if defined(INT_178B) +# define PLATFORM_ID "Integrity178" + +# else /* regular Integrity */ +# define PLATFORM_ID "Integrity" +# endif + +# elif defined(_ADI_COMPILER) +# define PLATFORM_ID "ADSP" + +#else /* unknown platform */ +# define PLATFORM_ID + +#endif + +/* For windows compilers MSVC and Intel we can determine + the architecture of the compiler being used. This is because + the compilers do not have flags that can change the architecture, + but rather depend on which compiler is being used +*/ +#if defined(_WIN32) && defined(_MSC_VER) +# if defined(_M_IA64) +# define ARCHITECTURE_ID "IA64" + +# elif defined(_M_ARM64EC) +# define ARCHITECTURE_ID "ARM64EC" + +# elif defined(_M_X64) || defined(_M_AMD64) +# define ARCHITECTURE_ID "x64" + +# elif defined(_M_IX86) +# define ARCHITECTURE_ID "X86" + +# elif defined(_M_ARM64) +# define ARCHITECTURE_ID "ARM64" + +# elif defined(_M_ARM) +# if _M_ARM == 4 +# define ARCHITECTURE_ID "ARMV4I" +# elif _M_ARM == 5 +# define ARCHITECTURE_ID "ARMV5I" +# else +# define ARCHITECTURE_ID "ARMV" STRINGIFY(_M_ARM) +# endif + +# elif defined(_M_MIPS) +# define ARCHITECTURE_ID "MIPS" + +# elif defined(_M_SH) +# define ARCHITECTURE_ID "SHx" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__WATCOMC__) +# if defined(_M_I86) +# define ARCHITECTURE_ID "I86" + +# elif defined(_M_IX86) +# define ARCHITECTURE_ID "X86" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC) +# if defined(__ICCARM__) +# define ARCHITECTURE_ID "ARM" + +# elif defined(__ICCRX__) +# define ARCHITECTURE_ID "RX" + +# elif defined(__ICCRH850__) +# define ARCHITECTURE_ID "RH850" + +# elif defined(__ICCRL78__) +# define ARCHITECTURE_ID "RL78" + +# elif defined(__ICCRISCV__) +# define ARCHITECTURE_ID "RISCV" + +# elif defined(__ICCAVR__) +# define ARCHITECTURE_ID "AVR" + +# elif defined(__ICC430__) +# define ARCHITECTURE_ID "MSP430" + +# elif defined(__ICCV850__) +# define ARCHITECTURE_ID "V850" + +# elif defined(__ICC8051__) +# define ARCHITECTURE_ID "8051" + +# elif defined(__ICCSTM8__) +# define ARCHITECTURE_ID "STM8" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__ghs__) +# if defined(__PPC64__) +# define ARCHITECTURE_ID "PPC64" + +# elif defined(__ppc__) +# define ARCHITECTURE_ID "PPC" + +# elif defined(__ARM__) +# define ARCHITECTURE_ID "ARM" + +# elif defined(__x86_64__) +# define ARCHITECTURE_ID "x64" + +# elif defined(__i386__) +# define ARCHITECTURE_ID "X86" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__TI_COMPILER_VERSION__) +# if defined(__TI_ARM__) +# define ARCHITECTURE_ID "ARM" + +# elif defined(__MSP430__) +# define ARCHITECTURE_ID "MSP430" + +# elif defined(__TMS320C28XX__) +# define ARCHITECTURE_ID "TMS320C28x" + +# elif defined(__TMS320C6X__) || defined(_TMS320C6X) +# define ARCHITECTURE_ID "TMS320C6x" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +# elif defined(__ADSPSHARC__) +# define ARCHITECTURE_ID "SHARC" + +# elif defined(__ADSPBLACKFIN__) +# define ARCHITECTURE_ID "Blackfin" + +#elif defined(__TASKING__) + +# if defined(__CTC__) || defined(__CPTC__) +# define ARCHITECTURE_ID "TriCore" + +# elif defined(__CMCS__) +# define ARCHITECTURE_ID "MCS" + +# elif defined(__CARM__) +# define ARCHITECTURE_ID "ARM" + +# elif defined(__CARC__) +# define ARCHITECTURE_ID "ARC" + +# elif defined(__C51__) +# define ARCHITECTURE_ID "8051" + +# elif defined(__CPCP__) +# define ARCHITECTURE_ID "PCP" + +# else +# define ARCHITECTURE_ID "" +# endif + +#else +# define ARCHITECTURE_ID +#endif + +/* Convert integer to decimal digit literals. */ +#define DEC(n) \ + ('0' + (((n) / 10000000)%10)), \ + ('0' + (((n) / 1000000)%10)), \ + ('0' + (((n) / 100000)%10)), \ + ('0' + (((n) / 10000)%10)), \ + ('0' + (((n) / 1000)%10)), \ + ('0' + (((n) / 100)%10)), \ + ('0' + (((n) / 10)%10)), \ + ('0' + ((n) % 10)) + +/* Convert integer to hex digit literals. */ +#define HEX(n) \ + ('0' + ((n)>>28 & 0xF)), \ + ('0' + ((n)>>24 & 0xF)), \ + ('0' + ((n)>>20 & 0xF)), \ + ('0' + ((n)>>16 & 0xF)), \ + ('0' + ((n)>>12 & 0xF)), \ + ('0' + ((n)>>8 & 0xF)), \ + ('0' + ((n)>>4 & 0xF)), \ + ('0' + ((n) & 0xF)) + +/* Construct a string literal encoding the version number. */ +#ifdef COMPILER_VERSION +char const* info_version = "INFO" ":" "compiler_version[" COMPILER_VERSION "]"; + +/* Construct a string literal encoding the version number components. */ +#elif defined(COMPILER_VERSION_MAJOR) +char const info_version[] = { + 'I', 'N', 'F', 'O', ':', + 'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','[', + COMPILER_VERSION_MAJOR, +# ifdef COMPILER_VERSION_MINOR + '.', COMPILER_VERSION_MINOR, +# ifdef COMPILER_VERSION_PATCH + '.', COMPILER_VERSION_PATCH, +# ifdef COMPILER_VERSION_TWEAK + '.', COMPILER_VERSION_TWEAK, +# endif +# endif +# endif + ']','\0'}; +#endif + +/* Construct a string literal encoding the internal version number. */ +#ifdef COMPILER_VERSION_INTERNAL +char const info_version_internal[] = { + 'I', 'N', 'F', 'O', ':', + 'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','_', + 'i','n','t','e','r','n','a','l','[', + COMPILER_VERSION_INTERNAL,']','\0'}; +#elif defined(COMPILER_VERSION_INTERNAL_STR) +char const* info_version_internal = "INFO" ":" "compiler_version_internal[" COMPILER_VERSION_INTERNAL_STR "]"; +#endif + +/* Construct a string literal encoding the version number components. */ +#ifdef SIMULATE_VERSION_MAJOR +char const info_simulate_version[] = { + 'I', 'N', 'F', 'O', ':', + 's','i','m','u','l','a','t','e','_','v','e','r','s','i','o','n','[', + SIMULATE_VERSION_MAJOR, +# ifdef SIMULATE_VERSION_MINOR + '.', SIMULATE_VERSION_MINOR, +# ifdef SIMULATE_VERSION_PATCH + '.', SIMULATE_VERSION_PATCH, +# ifdef SIMULATE_VERSION_TWEAK + '.', SIMULATE_VERSION_TWEAK, +# endif +# endif +# endif + ']','\0'}; +#endif + +/* Construct the string literal in pieces to prevent the source from + getting matched. Store it in a pointer rather than an array + because some compilers will just produce instructions to fill the + array rather than assigning a pointer to a static array. */ +char const* info_platform = "INFO" ":" "platform[" PLATFORM_ID "]"; +char const* info_arch = "INFO" ":" "arch[" ARCHITECTURE_ID "]"; + + + +#if defined(__INTEL_COMPILER) && defined(_MSVC_LANG) && _MSVC_LANG < 201403L +# if defined(__INTEL_CXX11_MODE__) +# if defined(__cpp_aggregate_nsdmi) +# define CXX_STD 201402L +# else +# define CXX_STD 201103L +# endif +# else +# define CXX_STD 199711L +# endif +#elif defined(_MSC_VER) && defined(_MSVC_LANG) +# define CXX_STD _MSVC_LANG +#else +# define CXX_STD __cplusplus +#endif + +const char* info_language_standard_default = "INFO" ":" "standard_default[" +#if CXX_STD > 202002L + "23" +#elif CXX_STD > 201703L + "20" +#elif CXX_STD >= 201703L + "17" +#elif CXX_STD >= 201402L + "14" +#elif CXX_STD >= 201103L + "11" +#else + "98" +#endif +"]"; + +const char* info_language_extensions_default = "INFO" ":" "extensions_default[" +#if (defined(__clang__) || defined(__GNUC__) || defined(__xlC__) || \ + defined(__TI_COMPILER_VERSION__)) && \ + !defined(__STRICT_ANSI__) + "ON" +#else + "OFF" +#endif +"]"; + +/*--------------------------------------------------------------------------*/ + +int main(int argc, char* argv[]) +{ + int require = 0; + require += info_compiler[argc]; + require += info_platform[argc]; + require += info_arch[argc]; +#ifdef COMPILER_VERSION_MAJOR + require += info_version[argc]; +#endif +#ifdef COMPILER_VERSION_INTERNAL + require += info_version_internal[argc]; +#endif +#ifdef SIMULATE_ID + require += info_simulate[argc]; +#endif +#ifdef SIMULATE_VERSION_MAJOR + require += info_simulate_version[argc]; +#endif +#if defined(__CRAYXT_COMPUTE_LINUX_TARGET) + require += info_cray[argc]; +#endif + require += info_language_standard_default[argc]; + require += info_language_extensions_default[argc]; + (void)argv; + return require; +} diff --git a/CMakeFiles/3.27.4/CompilerIdCXX/a.out b/CMakeFiles/3.27.4/CompilerIdCXX/a.out new file mode 100755 index 0000000000000000000000000000000000000000..9ad6cd21454ff8973e79e73f324e82fbe17ff949 GIT binary patch literal 15552 zcmeHOU2Ggz6~4Pp8VBO66YAo|RWoX#N-3V~+KDj%({=2%$C7_a>Ij1glkx7@Ua>!B zc3e4?D3MG7%Ssfe1bJu+66ym;5vo9imzIr!N+T7NJ|IPXKrW(^DS;aCqm)Ko&bjxT z@$BuoAP|U$xvQOX&v(yv?wxaIcJ9uc`BG+dC?1OmE=}SS0yU#mA!%x;9;FJ1wCEKr zu)Rxkh}%HlAu-jSRsvd8xgM{V&4f3BL|!{q8pyj841K7=BSeY3?aDheKKGRQ79q^>T{ha+)ObP(|Jb@ivIZ@*4HW zlH-Xn!EZ0cQd@=0Ef9XQ^$n!recptp?{OP;<&-}jp_!Ezz z4ekf}L>nxK;g<`x@t3iGMGk?{Jq--8m;DWJ9EZ^W$G#ikAKnHRwmnxYm+Xq~c)o25 zdt`FV&bgjDm#_G)H#s&?D3{zxXQtq)w#F@XcFD14^ChQ{e-sRDn5``NEIRp;0KMYp zvJX6fGuDG@F{sUD!4$O=;#q|ckB%H4u)ECeBZ8}4ru@x|!yLhE!Us!C#Kn1#e0=@r z>)(XKvPoPdZ1F&Tw*Z^(qA?Uc@A-Ud-KX$%I~Ne#b5c=bUc3+yCCKT-N?^+0#zt75jw2dMV zMIeem6oDuLQ3Rq0L=pHeMc~hgyZ>%2-)Od0cV0a#g!OpUkJqkQ%Rg(rB74O4)E`Dx zUiqB0@*8XUw;K;lW>VGERqI^et6)%TTL#u&X3fOGFH3vCUqe6VcD{<@qc{CFa6L<| zch}Yu2hXD66_Q~8th7J+eH8a^S}PmY?4b8T%lad2>p zkK;SrSA=G<*nQGk?t8<8sBC<0Lg zq6kD0h$0Y0Ac{bJ1n_y*yOojgp^0PJa&aMFaJ^}G3VEvDx~|=R#Purqa%nm#ORC#c zm1GxJQm2GuEEF7nw(J$BNAc+@fsU7*pQbuIA1vh@F9**CXPw1@Kb`srwYW>ZTf$x{ zLEFT*9968N>0|9MJlvznH*2*cAjdXpwNa4xtQAY_(Gw!J)Eev9v#a?6JkmoPpEb9G z{e5UKxJy2XLk#(E0sai){d-%#5+7)}E&d%~A`q1*0#O8_2t*NxA`nF&ia->BC<0Lg zq6qwdMS$}SIloY4F$yt9!({ytO+TyY=Skl~k`o|XNUu^}74(_ zdA{8K*UefPO{$bU$T@)vlr)HWh*;LB{XI$*KOp&DlK4LmOPdnGb{Ex7lVk3;mjVIF zo3b$f?V1`7fYNl6^d#}&NwFL+#}WQ+O5LFLw@BxH$o>CZaQ^sq9dn+kVJHjEBjvnN z&J*Rl(BXlBW5yx4A8@|`fAhP{l+l&!>Q441Q`_~RaE#Lq@u!+@h4GGwy&`R>madRN zBl{1@_C%0B&gPg_8x!vn`u+|{yiKfAzA4*(7Amdc4$+%tL`lr&HvktJo`vRpFivQc zg>zXw(C$%C-S!-4`^6q{C!HV9Q0q59?u*|cIPOgPHsa8)p4WSca3ifO`FQ#upsQujHbHsrP(sy%`G}}uKmutXv%>6HPDt~4r!p_h+?f(|p``Dr7P_ffr`XWu zxdjIa!jz#heTboc4R!Cl~Xx~{V1>oa$Pw&8LwD0oec6WB|9mTAIS z@b3-lJx~ermx#~u18hi=e{UHc(fCgipQXWuBz69$0RJ0Yqj~(i?qJFL&+86-{0{JO z&B1(Lm$1A*{o+1i?3mB%i#%XBWajfahb6CTz(f{3{$BtT*C5R2bq7mcukrZVj^$&( z$2AS>ysinP>Q>HCc>DwlyuM*fna}Ggmb|Xw{`LL;7I4uow+Gh~x~}m05lm#!=kF;% z!+gF@v3yz!n0C36@9Bj3d>v)U>s#u+?%gZIzDND@{tE+9D2CjMt4ai0f&=|osA2!i zf0+ze^6|$6egA)|@z;sZa*~N8IsOde_+T|7k3qzE-OlgJ>GrI%{1tE#AwI9`*E`YM z*72^iEuHzVK?BY`owmWcjo*Ld_Z)fM&ODySH-L-rV?MvHR6PtJltW4cTjsNT6I#N2 zULUR#pU+cvz&w^WHNHrbWm3srQduyM^-ZWC#^dL8O)v3vdmL-HGy#AZnFmeG*Uum3 zhb13-0U0V& search starts here: + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include + /usr/local/include + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include-fixed + /usr/include + End of search list. + Compiler executable checksum: 865c2688a4f1e3f13d6bf2cc8fd98762 + COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_e0997.dir/CMakeCCompilerABI.c.o' '-c' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_e0997.dir/' + as -v --64 -o CMakeFiles/cmTC_e0997.dir/CMakeCCompilerABI.c.o /tmp/ccxqLqYq.s + GNU assembler version 2.41.0 (x86_64-pc-linux-gnu) using BFD version (GNU Binutils) 2.41.0 + COMPILER_PATH=/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/:/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/:/usr/lib/gcc/x86_64-pc-linux-gnu/:/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/:/usr/lib/gcc/x86_64-pc-linux-gnu/ + LIBRARY_PATH=/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/:/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/../../../../lib/:/lib/../lib/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/../../../:/lib/:/usr/lib/ + COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_e0997.dir/CMakeCCompilerABI.c.o' '-c' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_e0997.dir/CMakeCCompilerABI.c.' + Linking C executable cmTC_e0997 + /usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_e0997.dir/link.txt --verbose=1 + /usr/bin/cc -v CMakeFiles/cmTC_e0997.dir/CMakeCCompilerABI.c.o -o cmTC_e0997 + Using built-in specs. + COLLECT_GCC=/usr/bin/cc + COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/lto-wrapper + Target: x86_64-pc-linux-gnu + Configured with: /build/gcc/src/gcc/configure --enable-languages=ada,c,c++,d,fortran,go,lto,objc,obj-c++ --enable-bootstrap --prefix=/usr --libdir=/usr/lib --libexecdir=/usr/lib --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=https://bugs.archlinux.org/ --with-build-config=bootstrap-lto --with-linker-hash-style=gnu --with-system-zlib --enable-__cxa_atexit --enable-cet=auto --enable-checking=release --enable-clocale=gnu --enable-default-pie --enable-default-ssp --enable-gnu-indirect-function --enable-gnu-unique-object --enable-libstdcxx-backtrace --enable-link-serialization=1 --enable-linker-build-id --enable-lto --enable-multilib --enable-plugin --enable-shared --enable-threads=posix --disable-libssp --disable-libstdcxx-pch --disable-werror + Thread model: posix + Supported LTO compression algorithms: zlib zstd + gcc version 13.2.1 20230801 (GCC) + COMPILER_PATH=/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/:/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/:/usr/lib/gcc/x86_64-pc-linux-gnu/:/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/:/usr/lib/gcc/x86_64-pc-linux-gnu/ + LIBRARY_PATH=/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/:/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/../../../../lib/:/lib/../lib/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/../../../:/lib/:/usr/lib/ + COLLECT_GCC_OPTIONS='-v' '-o' 'cmTC_e0997' '-mtune=generic' '-march=x86-64' '-dumpdir' 'cmTC_e0997.' + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/collect2 -plugin /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/liblto_plugin.so -plugin-opt=/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/lto-wrapper -plugin-opt=-fresolution=/tmp/ccwHqRac.res -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s --build-id --eh-frame-hdr --hash-style=gnu -m elf_x86_64 -dynamic-linker /lib64/ld-linux-x86-64.so.2 -pie -o cmTC_e0997 /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/../../../../lib/Scrt1.o /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/../../../../lib/crti.o /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/crtbeginS.o -L/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1 -L/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/../../../../lib -L/lib/../lib -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/../../.. CMakeFiles/cmTC_e0997.dir/CMakeCCompilerABI.c.o -lgcc --push-state --as-needed -lgcc_s --pop-state -lc -lgcc --push-state --as-needed -lgcc_s --pop-state /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/crtendS.o /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/../../../../lib/crtn.o + COLLECT_GCC_OPTIONS='-v' '-o' 'cmTC_e0997' '-mtune=generic' '-march=x86-64' '-dumpdir' 'cmTC_e0997.' + make[1]: Leaving directory '/home/death/Desktop/linux backup/sdsLabs/gbemu/CMakeFiles/CMakeScratch/TryCompile-CZrYct' + + exitCode: 0 + - + kind: "message-v1" + backtrace: + - "/usr/share/cmake/Modules/CMakeDetermineCompilerABI.cmake:127 (message)" + - "/usr/share/cmake/Modules/CMakeTestCCompiler.cmake:26 (CMAKE_DETERMINE_COMPILER_ABI)" + - "CMakeLists.txt:4 (project)" + message: | + Parsed C implicit include dir info: rv=done + found start of include info + found start of implicit include info + add: [/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include] + add: [/usr/local/include] + add: [/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include-fixed] + add: [/usr/include] + end of search list found + collapse include dir [/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include] ==> [/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include] + collapse include dir [/usr/local/include] ==> [/usr/local/include] + collapse include dir [/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include-fixed] ==> [/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include-fixed] + collapse include dir [/usr/include] ==> [/usr/include] + implicit include dirs: [/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include;/usr/local/include;/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include-fixed;/usr/include] + + + - + kind: "message-v1" + backtrace: + - "/usr/share/cmake/Modules/CMakeDetermineCompilerABI.cmake:152 (message)" + - "/usr/share/cmake/Modules/CMakeTestCCompiler.cmake:26 (CMAKE_DETERMINE_COMPILER_ABI)" + - "CMakeLists.txt:4 (project)" + message: | + Parsed C implicit link information: + link line regex: [^( *|.*[/\\])(ld|CMAKE_LINK_STARTFILE-NOTFOUND|([^/\\]+-)?ld|collect2)[^/\\]*( |$)] + ignore line: [Change Dir: '/home/death/Desktop/linux backup/sdsLabs/gbemu/CMakeFiles/CMakeScratch/TryCompile-CZrYct'] + ignore line: [] + ignore line: [Run Build Command(s): /usr/bin/cmake -E env VERBOSE=1 /usr/bin/make -f Makefile cmTC_e0997/fast] + ignore line: [/usr/bin/make -f CMakeFiles/cmTC_e0997.dir/build.make CMakeFiles/cmTC_e0997.dir/build] + ignore line: [make[1]: Entering directory '/home/death/Desktop/linux backup/sdsLabs/gbemu/CMakeFiles/CMakeScratch/TryCompile-CZrYct'] + ignore line: [Building C object CMakeFiles/cmTC_e0997.dir/CMakeCCompilerABI.c.o] + ignore line: [/usr/bin/cc -v -o CMakeFiles/cmTC_e0997.dir/CMakeCCompilerABI.c.o -c /usr/share/cmake/Modules/CMakeCCompilerABI.c] + ignore line: [Using built-in specs.] + ignore line: [COLLECT_GCC=/usr/bin/cc] + ignore line: [Target: x86_64-pc-linux-gnu] + ignore line: [Configured with: /build/gcc/src/gcc/configure --enable-languages=ada c c++ d fortran go lto objc obj-c++ --enable-bootstrap --prefix=/usr --libdir=/usr/lib --libexecdir=/usr/lib --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=https://bugs.archlinux.org/ --with-build-config=bootstrap-lto --with-linker-hash-style=gnu --with-system-zlib --enable-__cxa_atexit --enable-cet=auto --enable-checking=release --enable-clocale=gnu --enable-default-pie --enable-default-ssp --enable-gnu-indirect-function --enable-gnu-unique-object --enable-libstdcxx-backtrace --enable-link-serialization=1 --enable-linker-build-id --enable-lto --enable-multilib --enable-plugin --enable-shared --enable-threads=posix --disable-libssp --disable-libstdcxx-pch --disable-werror] + ignore line: [Thread model: posix] + ignore line: [Supported LTO compression algorithms: zlib zstd] + ignore line: [gcc version 13.2.1 20230801 (GCC) ] + ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_e0997.dir/CMakeCCompilerABI.c.o' '-c' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_e0997.dir/'] + ignore line: [ /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/cc1 -quiet -v /usr/share/cmake/Modules/CMakeCCompilerABI.c -quiet -dumpdir CMakeFiles/cmTC_e0997.dir/ -dumpbase CMakeCCompilerABI.c.c -dumpbase-ext .c -mtune=generic -march=x86-64 -version -o /tmp/ccxqLqYq.s] + ignore line: [GNU C17 (GCC) version 13.2.1 20230801 (x86_64-pc-linux-gnu)] + ignore line: [ compiled by GNU C version 13.2.1 20230801 GMP version 6.3.0 MPFR version 4.2.0-p12 MPC version 1.3.1 isl version isl-0.26-GMP] + ignore line: [] + ignore line: [warning: MPFR header version 4.2.0-p12 differs from library version 4.2.1.] + ignore line: [GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072] + ignore line: [ignoring nonexistent directory "/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/../../../../x86_64-pc-linux-gnu/include"] + ignore line: [#include "..." search starts here:] + ignore line: [#include <...> search starts here:] + ignore line: [ /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include] + ignore line: [ /usr/local/include] + ignore line: [ /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include-fixed] + ignore line: [ /usr/include] + ignore line: [End of search list.] + ignore line: [Compiler executable checksum: 865c2688a4f1e3f13d6bf2cc8fd98762] + ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_e0997.dir/CMakeCCompilerABI.c.o' '-c' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_e0997.dir/'] + ignore line: [ as -v --64 -o CMakeFiles/cmTC_e0997.dir/CMakeCCompilerABI.c.o /tmp/ccxqLqYq.s] + ignore line: [GNU assembler version 2.41.0 (x86_64-pc-linux-gnu) using BFD version (GNU Binutils) 2.41.0] + ignore line: [COMPILER_PATH=/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/:/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/:/usr/lib/gcc/x86_64-pc-linux-gnu/:/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/:/usr/lib/gcc/x86_64-pc-linux-gnu/] + ignore line: [LIBRARY_PATH=/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/:/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/../../../../lib/:/lib/../lib/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/../../../:/lib/:/usr/lib/] + ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_e0997.dir/CMakeCCompilerABI.c.o' '-c' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_e0997.dir/CMakeCCompilerABI.c.'] + ignore line: [Linking C executable cmTC_e0997] + ignore line: [/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_e0997.dir/link.txt --verbose=1] + ignore line: [/usr/bin/cc -v CMakeFiles/cmTC_e0997.dir/CMakeCCompilerABI.c.o -o cmTC_e0997 ] + ignore line: [Using built-in specs.] + ignore line: [COLLECT_GCC=/usr/bin/cc] + ignore line: [COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/lto-wrapper] + ignore line: [Target: x86_64-pc-linux-gnu] + ignore line: [Configured with: /build/gcc/src/gcc/configure --enable-languages=ada c c++ d fortran go lto objc obj-c++ --enable-bootstrap --prefix=/usr --libdir=/usr/lib --libexecdir=/usr/lib --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=https://bugs.archlinux.org/ --with-build-config=bootstrap-lto --with-linker-hash-style=gnu --with-system-zlib --enable-__cxa_atexit --enable-cet=auto --enable-checking=release --enable-clocale=gnu --enable-default-pie --enable-default-ssp --enable-gnu-indirect-function --enable-gnu-unique-object --enable-libstdcxx-backtrace --enable-link-serialization=1 --enable-linker-build-id --enable-lto --enable-multilib --enable-plugin --enable-shared --enable-threads=posix --disable-libssp --disable-libstdcxx-pch --disable-werror] + ignore line: [Thread model: posix] + ignore line: [Supported LTO compression algorithms: zlib zstd] + ignore line: [gcc version 13.2.1 20230801 (GCC) ] + ignore line: [COMPILER_PATH=/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/:/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/:/usr/lib/gcc/x86_64-pc-linux-gnu/:/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/:/usr/lib/gcc/x86_64-pc-linux-gnu/] + ignore line: [LIBRARY_PATH=/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/:/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/../../../../lib/:/lib/../lib/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/../../../:/lib/:/usr/lib/] + ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'cmTC_e0997' '-mtune=generic' '-march=x86-64' '-dumpdir' 'cmTC_e0997.'] + link line: [ /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/collect2 -plugin /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/liblto_plugin.so -plugin-opt=/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/lto-wrapper -plugin-opt=-fresolution=/tmp/ccwHqRac.res -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s --build-id --eh-frame-hdr --hash-style=gnu -m elf_x86_64 -dynamic-linker /lib64/ld-linux-x86-64.so.2 -pie -o cmTC_e0997 /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/../../../../lib/Scrt1.o /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/../../../../lib/crti.o /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/crtbeginS.o -L/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1 -L/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/../../../../lib -L/lib/../lib -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/../../.. CMakeFiles/cmTC_e0997.dir/CMakeCCompilerABI.c.o -lgcc --push-state --as-needed -lgcc_s --pop-state -lc -lgcc --push-state --as-needed -lgcc_s --pop-state /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/crtendS.o /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/../../../../lib/crtn.o] + arg [/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/collect2] ==> ignore + arg [-plugin] ==> ignore + arg [/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/liblto_plugin.so] ==> ignore + arg [-plugin-opt=/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/lto-wrapper] ==> ignore + arg [-plugin-opt=-fresolution=/tmp/ccwHqRac.res] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc_s] ==> ignore + arg [-plugin-opt=-pass-through=-lc] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc_s] ==> ignore + arg [--build-id] ==> ignore + arg [--eh-frame-hdr] ==> ignore + arg [--hash-style=gnu] ==> ignore + arg [-m] ==> ignore + arg [elf_x86_64] ==> ignore + arg [-dynamic-linker] ==> ignore + arg [/lib64/ld-linux-x86-64.so.2] ==> ignore + arg [-pie] ==> ignore + arg [-o] ==> ignore + arg [cmTC_e0997] ==> ignore + arg [/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/../../../../lib/Scrt1.o] ==> obj [/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/../../../../lib/Scrt1.o] + arg [/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/../../../../lib/crti.o] ==> obj [/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/../../../../lib/crti.o] + arg [/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/crtbeginS.o] ==> obj [/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/crtbeginS.o] + arg [-L/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1] ==> dir [/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1] + arg [-L/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/../../../../lib] ==> dir [/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/../../../../lib] + arg [-L/lib/../lib] ==> dir [/lib/../lib] + arg [-L/usr/lib/../lib] ==> dir [/usr/lib/../lib] + arg [-L/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/../../..] ==> dir [/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/../../..] + arg [CMakeFiles/cmTC_e0997.dir/CMakeCCompilerABI.c.o] ==> ignore + arg [-lgcc] ==> lib [gcc] + arg [--push-state] ==> ignore + arg [--as-needed] ==> ignore + arg [-lgcc_s] ==> lib [gcc_s] + arg [--pop-state] ==> ignore + arg [-lc] ==> lib [c] + arg [-lgcc] ==> lib [gcc] + arg [--push-state] ==> ignore + arg [--as-needed] ==> ignore + arg [-lgcc_s] ==> lib [gcc_s] + arg [--pop-state] ==> ignore + arg [/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/crtendS.o] ==> obj [/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/crtendS.o] + arg [/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/../../../../lib/crtn.o] ==> obj [/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/../../../../lib/crtn.o] + collapse obj [/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/../../../../lib/Scrt1.o] ==> [/usr/lib/Scrt1.o] + collapse obj [/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/../../../../lib/crti.o] ==> [/usr/lib/crti.o] + collapse obj [/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/../../../../lib/crtn.o] ==> [/usr/lib/crtn.o] + collapse library dir [/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1] ==> [/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1] + collapse library dir [/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/../../../../lib] ==> [/usr/lib] + collapse library dir [/lib/../lib] ==> [/lib] + collapse library dir [/usr/lib/../lib] ==> [/usr/lib] + collapse library dir [/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/../../..] ==> [/usr/lib] + implicit libs: [gcc;gcc_s;c;gcc;gcc_s] + implicit objs: [/usr/lib/Scrt1.o;/usr/lib/crti.o;/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/crtbeginS.o;/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/crtendS.o;/usr/lib/crtn.o] + implicit dirs: [/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1;/usr/lib;/lib] + implicit fwks: [] + + + - + kind: "try_compile-v1" + backtrace: + - "/usr/share/cmake/Modules/CMakeDetermineCompilerABI.cmake:57 (try_compile)" + - "/usr/share/cmake/Modules/CMakeTestCXXCompiler.cmake:26 (CMAKE_DETERMINE_COMPILER_ABI)" + - "CMakeLists.txt:4 (project)" + checks: + - "Detecting CXX compiler ABI info" + directories: + source: "/home/death/Desktop/linux backup/sdsLabs/gbemu/CMakeFiles/CMakeScratch/TryCompile-bpV03u" + binary: "/home/death/Desktop/linux backup/sdsLabs/gbemu/CMakeFiles/CMakeScratch/TryCompile-bpV03u" + cmakeVariables: + CMAKE_CXX_FLAGS: "" + CMAKE_CXX_FLAGS_DEBUG: "-g" + CMAKE_EXE_LINKER_FLAGS: "" + buildResult: + variable: "CMAKE_CXX_ABI_COMPILED" + cached: true + stdout: | + Change Dir: '/home/death/Desktop/linux backup/sdsLabs/gbemu/CMakeFiles/CMakeScratch/TryCompile-bpV03u' + + Run Build Command(s): /usr/bin/cmake -E env VERBOSE=1 /usr/bin/make -f Makefile cmTC_e4e8f/fast + /usr/bin/make -f CMakeFiles/cmTC_e4e8f.dir/build.make CMakeFiles/cmTC_e4e8f.dir/build + make[1]: Entering directory '/home/death/Desktop/linux backup/sdsLabs/gbemu/CMakeFiles/CMakeScratch/TryCompile-bpV03u' + Building CXX object CMakeFiles/cmTC_e4e8f.dir/CMakeCXXCompilerABI.cpp.o + /usr/bin/c++ -v -o CMakeFiles/cmTC_e4e8f.dir/CMakeCXXCompilerABI.cpp.o -c /usr/share/cmake/Modules/CMakeCXXCompilerABI.cpp + Using built-in specs. + COLLECT_GCC=/usr/bin/c++ + Target: x86_64-pc-linux-gnu + Configured with: /build/gcc/src/gcc/configure --enable-languages=ada,c,c++,d,fortran,go,lto,objc,obj-c++ --enable-bootstrap --prefix=/usr --libdir=/usr/lib --libexecdir=/usr/lib --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=https://bugs.archlinux.org/ --with-build-config=bootstrap-lto --with-linker-hash-style=gnu --with-system-zlib --enable-__cxa_atexit --enable-cet=auto --enable-checking=release --enable-clocale=gnu --enable-default-pie --enable-default-ssp --enable-gnu-indirect-function --enable-gnu-unique-object --enable-libstdcxx-backtrace --enable-link-serialization=1 --enable-linker-build-id --enable-lto --enable-multilib --enable-plugin --enable-shared --enable-threads=posix --disable-libssp --disable-libstdcxx-pch --disable-werror + Thread model: posix + Supported LTO compression algorithms: zlib zstd + gcc version 13.2.1 20230801 (GCC) + COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_e4e8f.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_e4e8f.dir/' + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/cc1plus -quiet -v -D_GNU_SOURCE /usr/share/cmake/Modules/CMakeCXXCompilerABI.cpp -quiet -dumpdir CMakeFiles/cmTC_e4e8f.dir/ -dumpbase CMakeCXXCompilerABI.cpp.cpp -dumpbase-ext .cpp -mtune=generic -march=x86-64 -version -o /tmp/ccukTnHJ.s + GNU C++17 (GCC) version 13.2.1 20230801 (x86_64-pc-linux-gnu) + compiled by GNU C version 13.2.1 20230801, GMP version 6.3.0, MPFR version 4.2.0-p12, MPC version 1.3.1, isl version isl-0.26-GMP + + warning: MPFR header version 4.2.0-p12 differs from library version 4.2.1. + GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 + ignoring nonexistent directory "/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/../../../../x86_64-pc-linux-gnu/include" + #include "..." search starts here: + #include <...> search starts here: + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/../../../../include/c++/13.2.1 + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/../../../../include/c++/13.2.1/x86_64-pc-linux-gnu + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/../../../../include/c++/13.2.1/backward + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include + /usr/local/include + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include-fixed + /usr/include + End of search list. + Compiler executable checksum: 5a490a353c29b926850bca65a518c219 + COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_e4e8f.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_e4e8f.dir/' + as -v --64 -o CMakeFiles/cmTC_e4e8f.dir/CMakeCXXCompilerABI.cpp.o /tmp/ccukTnHJ.s + GNU assembler version 2.41.0 (x86_64-pc-linux-gnu) using BFD version (GNU Binutils) 2.41.0 + COMPILER_PATH=/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/:/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/:/usr/lib/gcc/x86_64-pc-linux-gnu/:/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/:/usr/lib/gcc/x86_64-pc-linux-gnu/ + LIBRARY_PATH=/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/:/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/../../../../lib/:/lib/../lib/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/../../../:/lib/:/usr/lib/ + COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_e4e8f.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_e4e8f.dir/CMakeCXXCompilerABI.cpp.' + Linking CXX executable cmTC_e4e8f + /usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_e4e8f.dir/link.txt --verbose=1 + /usr/bin/c++ -v CMakeFiles/cmTC_e4e8f.dir/CMakeCXXCompilerABI.cpp.o -o cmTC_e4e8f + Using built-in specs. + COLLECT_GCC=/usr/bin/c++ + COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/lto-wrapper + Target: x86_64-pc-linux-gnu + Configured with: /build/gcc/src/gcc/configure --enable-languages=ada,c,c++,d,fortran,go,lto,objc,obj-c++ --enable-bootstrap --prefix=/usr --libdir=/usr/lib --libexecdir=/usr/lib --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=https://bugs.archlinux.org/ --with-build-config=bootstrap-lto --with-linker-hash-style=gnu --with-system-zlib --enable-__cxa_atexit --enable-cet=auto --enable-checking=release --enable-clocale=gnu --enable-default-pie --enable-default-ssp --enable-gnu-indirect-function --enable-gnu-unique-object --enable-libstdcxx-backtrace --enable-link-serialization=1 --enable-linker-build-id --enable-lto --enable-multilib --enable-plugin --enable-shared --enable-threads=posix --disable-libssp --disable-libstdcxx-pch --disable-werror + Thread model: posix + Supported LTO compression algorithms: zlib zstd + gcc version 13.2.1 20230801 (GCC) + COMPILER_PATH=/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/:/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/:/usr/lib/gcc/x86_64-pc-linux-gnu/:/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/:/usr/lib/gcc/x86_64-pc-linux-gnu/ + LIBRARY_PATH=/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/:/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/../../../../lib/:/lib/../lib/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/../../../:/lib/:/usr/lib/ + COLLECT_GCC_OPTIONS='-v' '-o' 'cmTC_e4e8f' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'cmTC_e4e8f.' + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/collect2 -plugin /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/liblto_plugin.so -plugin-opt=/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/lto-wrapper -plugin-opt=-fresolution=/tmp/cc15MycA.res -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc --build-id --eh-frame-hdr --hash-style=gnu -m elf_x86_64 -dynamic-linker /lib64/ld-linux-x86-64.so.2 -pie -o cmTC_e4e8f /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/../../../../lib/Scrt1.o /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/../../../../lib/crti.o /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/crtbeginS.o -L/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1 -L/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/../../../../lib -L/lib/../lib -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/../../.. CMakeFiles/cmTC_e4e8f.dir/CMakeCXXCompilerABI.cpp.o -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/crtendS.o /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/../../../../lib/crtn.o + COLLECT_GCC_OPTIONS='-v' '-o' 'cmTC_e4e8f' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'cmTC_e4e8f.' + make[1]: Leaving directory '/home/death/Desktop/linux backup/sdsLabs/gbemu/CMakeFiles/CMakeScratch/TryCompile-bpV03u' + + exitCode: 0 + - + kind: "message-v1" + backtrace: + - "/usr/share/cmake/Modules/CMakeDetermineCompilerABI.cmake:127 (message)" + - "/usr/share/cmake/Modules/CMakeTestCXXCompiler.cmake:26 (CMAKE_DETERMINE_COMPILER_ABI)" + - "CMakeLists.txt:4 (project)" + message: | + Parsed CXX implicit include dir info: rv=done + found start of include info + found start of implicit include info + add: [/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/../../../../include/c++/13.2.1] + add: [/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/../../../../include/c++/13.2.1/x86_64-pc-linux-gnu] + add: [/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/../../../../include/c++/13.2.1/backward] + add: [/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include] + add: [/usr/local/include] + add: [/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include-fixed] + add: [/usr/include] + end of search list found + collapse include dir [/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/../../../../include/c++/13.2.1] ==> [/usr/include/c++/13.2.1] + collapse include dir [/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/../../../../include/c++/13.2.1/x86_64-pc-linux-gnu] ==> [/usr/include/c++/13.2.1/x86_64-pc-linux-gnu] + collapse include dir [/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/../../../../include/c++/13.2.1/backward] ==> [/usr/include/c++/13.2.1/backward] + collapse include dir [/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include] ==> [/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include] + collapse include dir [/usr/local/include] ==> [/usr/local/include] + collapse include dir [/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include-fixed] ==> [/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include-fixed] + collapse include dir [/usr/include] ==> [/usr/include] + implicit include dirs: [/usr/include/c++/13.2.1;/usr/include/c++/13.2.1/x86_64-pc-linux-gnu;/usr/include/c++/13.2.1/backward;/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include;/usr/local/include;/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include-fixed;/usr/include] + + + - + kind: "message-v1" + backtrace: + - "/usr/share/cmake/Modules/CMakeDetermineCompilerABI.cmake:152 (message)" + - "/usr/share/cmake/Modules/CMakeTestCXXCompiler.cmake:26 (CMAKE_DETERMINE_COMPILER_ABI)" + - "CMakeLists.txt:4 (project)" + message: | + Parsed CXX implicit link information: + link line regex: [^( *|.*[/\\])(ld|CMAKE_LINK_STARTFILE-NOTFOUND|([^/\\]+-)?ld|collect2)[^/\\]*( |$)] + ignore line: [Change Dir: '/home/death/Desktop/linux backup/sdsLabs/gbemu/CMakeFiles/CMakeScratch/TryCompile-bpV03u'] + ignore line: [] + ignore line: [Run Build Command(s): /usr/bin/cmake -E env VERBOSE=1 /usr/bin/make -f Makefile cmTC_e4e8f/fast] + ignore line: [/usr/bin/make -f CMakeFiles/cmTC_e4e8f.dir/build.make CMakeFiles/cmTC_e4e8f.dir/build] + ignore line: [make[1]: Entering directory '/home/death/Desktop/linux backup/sdsLabs/gbemu/CMakeFiles/CMakeScratch/TryCompile-bpV03u'] + ignore line: [Building CXX object CMakeFiles/cmTC_e4e8f.dir/CMakeCXXCompilerABI.cpp.o] + ignore line: [/usr/bin/c++ -v -o CMakeFiles/cmTC_e4e8f.dir/CMakeCXXCompilerABI.cpp.o -c /usr/share/cmake/Modules/CMakeCXXCompilerABI.cpp] + ignore line: [Using built-in specs.] + ignore line: [COLLECT_GCC=/usr/bin/c++] + ignore line: [Target: x86_64-pc-linux-gnu] + ignore line: [Configured with: /build/gcc/src/gcc/configure --enable-languages=ada c c++ d fortran go lto objc obj-c++ --enable-bootstrap --prefix=/usr --libdir=/usr/lib --libexecdir=/usr/lib --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=https://bugs.archlinux.org/ --with-build-config=bootstrap-lto --with-linker-hash-style=gnu --with-system-zlib --enable-__cxa_atexit --enable-cet=auto --enable-checking=release --enable-clocale=gnu --enable-default-pie --enable-default-ssp --enable-gnu-indirect-function --enable-gnu-unique-object --enable-libstdcxx-backtrace --enable-link-serialization=1 --enable-linker-build-id --enable-lto --enable-multilib --enable-plugin --enable-shared --enable-threads=posix --disable-libssp --disable-libstdcxx-pch --disable-werror] + ignore line: [Thread model: posix] + ignore line: [Supported LTO compression algorithms: zlib zstd] + ignore line: [gcc version 13.2.1 20230801 (GCC) ] + ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_e4e8f.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_e4e8f.dir/'] + ignore line: [ /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/cc1plus -quiet -v -D_GNU_SOURCE /usr/share/cmake/Modules/CMakeCXXCompilerABI.cpp -quiet -dumpdir CMakeFiles/cmTC_e4e8f.dir/ -dumpbase CMakeCXXCompilerABI.cpp.cpp -dumpbase-ext .cpp -mtune=generic -march=x86-64 -version -o /tmp/ccukTnHJ.s] + ignore line: [GNU C++17 (GCC) version 13.2.1 20230801 (x86_64-pc-linux-gnu)] + ignore line: [ compiled by GNU C version 13.2.1 20230801 GMP version 6.3.0 MPFR version 4.2.0-p12 MPC version 1.3.1 isl version isl-0.26-GMP] + ignore line: [] + ignore line: [warning: MPFR header version 4.2.0-p12 differs from library version 4.2.1.] + ignore line: [GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072] + ignore line: [ignoring nonexistent directory "/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/../../../../x86_64-pc-linux-gnu/include"] + ignore line: [#include "..." search starts here:] + ignore line: [#include <...> search starts here:] + ignore line: [ /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/../../../../include/c++/13.2.1] + ignore line: [ /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/../../../../include/c++/13.2.1/x86_64-pc-linux-gnu] + ignore line: [ /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/../../../../include/c++/13.2.1/backward] + ignore line: [ /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include] + ignore line: [ /usr/local/include] + ignore line: [ /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include-fixed] + ignore line: [ /usr/include] + ignore line: [End of search list.] + ignore line: [Compiler executable checksum: 5a490a353c29b926850bca65a518c219] + ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_e4e8f.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_e4e8f.dir/'] + ignore line: [ as -v --64 -o CMakeFiles/cmTC_e4e8f.dir/CMakeCXXCompilerABI.cpp.o /tmp/ccukTnHJ.s] + ignore line: [GNU assembler version 2.41.0 (x86_64-pc-linux-gnu) using BFD version (GNU Binutils) 2.41.0] + ignore line: [COMPILER_PATH=/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/:/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/:/usr/lib/gcc/x86_64-pc-linux-gnu/:/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/:/usr/lib/gcc/x86_64-pc-linux-gnu/] + ignore line: [LIBRARY_PATH=/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/:/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/../../../../lib/:/lib/../lib/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/../../../:/lib/:/usr/lib/] + ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_e4e8f.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_e4e8f.dir/CMakeCXXCompilerABI.cpp.'] + ignore line: [Linking CXX executable cmTC_e4e8f] + ignore line: [/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_e4e8f.dir/link.txt --verbose=1] + ignore line: [/usr/bin/c++ -v CMakeFiles/cmTC_e4e8f.dir/CMakeCXXCompilerABI.cpp.o -o cmTC_e4e8f ] + ignore line: [Using built-in specs.] + ignore line: [COLLECT_GCC=/usr/bin/c++] + ignore line: [COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/lto-wrapper] + ignore line: [Target: x86_64-pc-linux-gnu] + ignore line: [Configured with: /build/gcc/src/gcc/configure --enable-languages=ada c c++ d fortran go lto objc obj-c++ --enable-bootstrap --prefix=/usr --libdir=/usr/lib --libexecdir=/usr/lib --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=https://bugs.archlinux.org/ --with-build-config=bootstrap-lto --with-linker-hash-style=gnu --with-system-zlib --enable-__cxa_atexit --enable-cet=auto --enable-checking=release --enable-clocale=gnu --enable-default-pie --enable-default-ssp --enable-gnu-indirect-function --enable-gnu-unique-object --enable-libstdcxx-backtrace --enable-link-serialization=1 --enable-linker-build-id --enable-lto --enable-multilib --enable-plugin --enable-shared --enable-threads=posix --disable-libssp --disable-libstdcxx-pch --disable-werror] + ignore line: [Thread model: posix] + ignore line: [Supported LTO compression algorithms: zlib zstd] + ignore line: [gcc version 13.2.1 20230801 (GCC) ] + ignore line: [COMPILER_PATH=/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/:/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/:/usr/lib/gcc/x86_64-pc-linux-gnu/:/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/:/usr/lib/gcc/x86_64-pc-linux-gnu/] + ignore line: [LIBRARY_PATH=/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/:/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/../../../../lib/:/lib/../lib/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/../../../:/lib/:/usr/lib/] + ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'cmTC_e4e8f' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'cmTC_e4e8f.'] + link line: [ /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/collect2 -plugin /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/liblto_plugin.so -plugin-opt=/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/lto-wrapper -plugin-opt=-fresolution=/tmp/cc15MycA.res -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc --build-id --eh-frame-hdr --hash-style=gnu -m elf_x86_64 -dynamic-linker /lib64/ld-linux-x86-64.so.2 -pie -o cmTC_e4e8f /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/../../../../lib/Scrt1.o /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/../../../../lib/crti.o /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/crtbeginS.o -L/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1 -L/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/../../../../lib -L/lib/../lib -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/../../.. CMakeFiles/cmTC_e4e8f.dir/CMakeCXXCompilerABI.cpp.o -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/crtendS.o /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/../../../../lib/crtn.o] + arg [/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/collect2] ==> ignore + arg [-plugin] ==> ignore + arg [/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/liblto_plugin.so] ==> ignore + arg [-plugin-opt=/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/lto-wrapper] ==> ignore + arg [-plugin-opt=-fresolution=/tmp/cc15MycA.res] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc_s] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc] ==> ignore + arg [-plugin-opt=-pass-through=-lc] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc_s] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc] ==> ignore + arg [--build-id] ==> ignore + arg [--eh-frame-hdr] ==> ignore + arg [--hash-style=gnu] ==> ignore + arg [-m] ==> ignore + arg [elf_x86_64] ==> ignore + arg [-dynamic-linker] ==> ignore + arg [/lib64/ld-linux-x86-64.so.2] ==> ignore + arg [-pie] ==> ignore + arg [-o] ==> ignore + arg [cmTC_e4e8f] ==> ignore + arg [/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/../../../../lib/Scrt1.o] ==> obj [/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/../../../../lib/Scrt1.o] + arg [/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/../../../../lib/crti.o] ==> obj [/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/../../../../lib/crti.o] + arg [/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/crtbeginS.o] ==> obj [/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/crtbeginS.o] + arg [-L/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1] ==> dir [/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1] + arg [-L/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/../../../../lib] ==> dir [/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/../../../../lib] + arg [-L/lib/../lib] ==> dir [/lib/../lib] + arg [-L/usr/lib/../lib] ==> dir [/usr/lib/../lib] + arg [-L/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/../../..] ==> dir [/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/../../..] + arg [CMakeFiles/cmTC_e4e8f.dir/CMakeCXXCompilerABI.cpp.o] ==> ignore + arg [-lstdc++] ==> lib [stdc++] + arg [-lm] ==> lib [m] + arg [-lgcc_s] ==> lib [gcc_s] + arg [-lgcc] ==> lib [gcc] + arg [-lc] ==> lib [c] + arg [-lgcc_s] ==> lib [gcc_s] + arg [-lgcc] ==> lib [gcc] + arg [/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/crtendS.o] ==> obj [/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/crtendS.o] + arg [/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/../../../../lib/crtn.o] ==> obj [/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/../../../../lib/crtn.o] + collapse obj [/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/../../../../lib/Scrt1.o] ==> [/usr/lib/Scrt1.o] + collapse obj [/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/../../../../lib/crti.o] ==> [/usr/lib/crti.o] + collapse obj [/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/../../../../lib/crtn.o] ==> [/usr/lib/crtn.o] + collapse library dir [/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1] ==> [/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1] + collapse library dir [/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/../../../../lib] ==> [/usr/lib] + collapse library dir [/lib/../lib] ==> [/lib] + collapse library dir [/usr/lib/../lib] ==> [/usr/lib] + collapse library dir [/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/../../..] ==> [/usr/lib] + implicit libs: [stdc++;m;gcc_s;gcc;c;gcc_s;gcc] + implicit objs: [/usr/lib/Scrt1.o;/usr/lib/crti.o;/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/crtbeginS.o;/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/crtendS.o;/usr/lib/crtn.o] + implicit dirs: [/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1;/usr/lib;/lib] + implicit fwks: [] + + +... diff --git a/CMakeFiles/Makefile2 b/CMakeFiles/Makefile2 new file mode 100644 index 0000000..7a8cdba --- /dev/null +++ b/CMakeFiles/Makefile2 @@ -0,0 +1,129 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.27 + +# Default target executed when no arguments are given to make. +default_target: all +.PHONY : default_target + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + +# Disable VCS-based implicit rules. +% : %,v + +# Disable VCS-based implicit rules. +% : RCS/% + +# Disable VCS-based implicit rules. +% : RCS/%,v + +# Disable VCS-based implicit rules. +% : SCCS/s.% + +# Disable VCS-based implicit rules. +% : s.% + +.SUFFIXES: .hpux_make_needs_suffix_list + +# Command-line flag to silence nested $(MAKE). +$(VERBOSE)MAKESILENT = -s + +#Suppress display of executed commands. +$(VERBOSE).SILENT: + +# A target that is always out of date. +cmake_force: +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E rm -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = "/home/death/Desktop/linux backup/sdsLabs/gbemu" + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = "/home/death/Desktop/linux backup/sdsLabs/gbemu" + +#============================================================================= +# Directory level rules for the build root directory + +# The main recursive "all" target. +all: CMakeFiles/gbemu.dir/all +all: src/all +.PHONY : all + +# The main recursive "preinstall" target. +preinstall: src/preinstall +.PHONY : preinstall + +# The main recursive "clean" target. +clean: CMakeFiles/gbemu.dir/clean +clean: src/clean +.PHONY : clean + +#============================================================================= +# Directory level rules for directory src + +# Recursive "all" directory target. +src/all: +.PHONY : src/all + +# Recursive "preinstall" directory target. +src/preinstall: +.PHONY : src/preinstall + +# Recursive "clean" directory target. +src/clean: +.PHONY : src/clean + +#============================================================================= +# Target rules for target CMakeFiles/gbemu.dir + +# All Build rule for target. +CMakeFiles/gbemu.dir/all: + $(MAKE) $(MAKESILENT) -f CMakeFiles/gbemu.dir/build.make CMakeFiles/gbemu.dir/depend + $(MAKE) $(MAKESILENT) -f CMakeFiles/gbemu.dir/build.make CMakeFiles/gbemu.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --progress-dir="/home/death/Desktop/linux backup/sdsLabs/gbemu/CMakeFiles" --progress-num=1,2,3,4,5,6 "Built target gbemu" +.PHONY : CMakeFiles/gbemu.dir/all + +# Build rule for subdir invocation for target. +CMakeFiles/gbemu.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start "/home/death/Desktop/linux backup/sdsLabs/gbemu/CMakeFiles" 6 + $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 CMakeFiles/gbemu.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start "/home/death/Desktop/linux backup/sdsLabs/gbemu/CMakeFiles" 0 +.PHONY : CMakeFiles/gbemu.dir/rule + +# Convenience name for target. +gbemu: CMakeFiles/gbemu.dir/rule +.PHONY : gbemu + +# clean rule for target. +CMakeFiles/gbemu.dir/clean: + $(MAKE) $(MAKESILENT) -f CMakeFiles/gbemu.dir/build.make CMakeFiles/gbemu.dir/clean +.PHONY : CMakeFiles/gbemu.dir/clean + +#============================================================================= +# Special targets to cleanup operation of make. + +# Special rule to run CMake to check the build system integrity. +# No rule that depends on this can have commands that come from listfiles +# because they might be regenerated. +cmake_check_build_system: + $(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 0 +.PHONY : cmake_check_build_system + diff --git a/CMakeFiles/TargetDirectories.txt b/CMakeFiles/TargetDirectories.txt new file mode 100644 index 0000000..d80efff --- /dev/null +++ b/CMakeFiles/TargetDirectories.txt @@ -0,0 +1,5 @@ +/home/death/Desktop/linux backup/sdsLabs/gbemu/CMakeFiles/gbemu.dir +/home/death/Desktop/linux backup/sdsLabs/gbemu/CMakeFiles/edit_cache.dir +/home/death/Desktop/linux backup/sdsLabs/gbemu/CMakeFiles/rebuild_cache.dir +/home/death/Desktop/linux backup/sdsLabs/gbemu/src/CMakeFiles/edit_cache.dir +/home/death/Desktop/linux backup/sdsLabs/gbemu/src/CMakeFiles/rebuild_cache.dir diff --git a/CMakeFiles/cmake.check_cache b/CMakeFiles/cmake.check_cache new file mode 100644 index 0000000..3dccd73 --- /dev/null +++ b/CMakeFiles/cmake.check_cache @@ -0,0 +1 @@ +# This file is generated by cmake for dependency checking of the CMakeCache.txt file diff --git a/CMakeFiles/gbemu.dir/DependInfo.cmake b/CMakeFiles/gbemu.dir/DependInfo.cmake new file mode 100644 index 0000000..9758399 --- /dev/null +++ b/CMakeFiles/gbemu.dir/DependInfo.cmake @@ -0,0 +1,23 @@ + +# Consider dependencies only in project. +set(CMAKE_DEPENDS_IN_PROJECT_ONLY OFF) + +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + ) + +# The set of dependency files which are needed: +set(CMAKE_DEPENDS_DEPENDENCY_FILES + "/home/death/Desktop/linux backup/sdsLabs/gbemu/src/cpu.cpp" "CMakeFiles/gbemu.dir/src/cpu.cpp.o" "gcc" "CMakeFiles/gbemu.dir/src/cpu.cpp.o.d" + "/home/death/Desktop/linux backup/sdsLabs/gbemu/src/gameBoy.cpp" "CMakeFiles/gbemu.dir/src/gameBoy.cpp.o" "gcc" "CMakeFiles/gbemu.dir/src/gameBoy.cpp.o.d" + "/home/death/Desktop/linux backup/sdsLabs/gbemu/src/graphics.cpp" "CMakeFiles/gbemu.dir/src/graphics.cpp.o" "gcc" "CMakeFiles/gbemu.dir/src/graphics.cpp.o.d" + "/home/death/Desktop/linux backup/sdsLabs/gbemu/src/main.cpp" "CMakeFiles/gbemu.dir/src/main.cpp.o" "gcc" "CMakeFiles/gbemu.dir/src/main.cpp.o.d" + "/home/death/Desktop/linux backup/sdsLabs/gbemu/src/mmap.cpp" "CMakeFiles/gbemu.dir/src/mmap.cpp.o" "gcc" "CMakeFiles/gbemu.dir/src/mmap.cpp.o.d" + ) + +# Targets to which this target links which contain Fortran sources. +set(CMAKE_Fortran_TARGET_LINKED_INFO_FILES + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/CMakeFiles/gbemu.dir/build.make b/CMakeFiles/gbemu.dir/build.make new file mode 100644 index 0000000..a5609ce --- /dev/null +++ b/CMakeFiles/gbemu.dir/build.make @@ -0,0 +1,176 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.27 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + +# Disable VCS-based implicit rules. +% : %,v + +# Disable VCS-based implicit rules. +% : RCS/% + +# Disable VCS-based implicit rules. +% : RCS/%,v + +# Disable VCS-based implicit rules. +% : SCCS/s.% + +# Disable VCS-based implicit rules. +% : s.% + +.SUFFIXES: .hpux_make_needs_suffix_list + +# Command-line flag to silence nested $(MAKE). +$(VERBOSE)MAKESILENT = -s + +#Suppress display of executed commands. +$(VERBOSE).SILENT: + +# A target that is always out of date. +cmake_force: +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E rm -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = "/home/death/Desktop/linux backup/sdsLabs/gbemu" + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = "/home/death/Desktop/linux backup/sdsLabs/gbemu" + +# Include any dependencies generated for this target. +include CMakeFiles/gbemu.dir/depend.make +# Include any dependencies generated by the compiler for this target. +include CMakeFiles/gbemu.dir/compiler_depend.make + +# Include the progress variables for this target. +include CMakeFiles/gbemu.dir/progress.make + +# Include the compile flags for this target's objects. +include CMakeFiles/gbemu.dir/flags.make + +CMakeFiles/gbemu.dir/src/main.cpp.o: CMakeFiles/gbemu.dir/flags.make +CMakeFiles/gbemu.dir/src/main.cpp.o: src/main.cpp +CMakeFiles/gbemu.dir/src/main.cpp.o: CMakeFiles/gbemu.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/death/Desktop/linux backup/sdsLabs/gbemu/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_1) "Building CXX object CMakeFiles/gbemu.dir/src/main.cpp.o" + /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT CMakeFiles/gbemu.dir/src/main.cpp.o -MF CMakeFiles/gbemu.dir/src/main.cpp.o.d -o CMakeFiles/gbemu.dir/src/main.cpp.o -c "/home/death/Desktop/linux backup/sdsLabs/gbemu/src/main.cpp" + +CMakeFiles/gbemu.dir/src/main.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing CXX source to CMakeFiles/gbemu.dir/src/main.cpp.i" + /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E "/home/death/Desktop/linux backup/sdsLabs/gbemu/src/main.cpp" > CMakeFiles/gbemu.dir/src/main.cpp.i + +CMakeFiles/gbemu.dir/src/main.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling CXX source to assembly CMakeFiles/gbemu.dir/src/main.cpp.s" + /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S "/home/death/Desktop/linux backup/sdsLabs/gbemu/src/main.cpp" -o CMakeFiles/gbemu.dir/src/main.cpp.s + +CMakeFiles/gbemu.dir/src/cpu.cpp.o: CMakeFiles/gbemu.dir/flags.make +CMakeFiles/gbemu.dir/src/cpu.cpp.o: src/cpu.cpp +CMakeFiles/gbemu.dir/src/cpu.cpp.o: CMakeFiles/gbemu.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/death/Desktop/linux backup/sdsLabs/gbemu/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_2) "Building CXX object CMakeFiles/gbemu.dir/src/cpu.cpp.o" + /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT CMakeFiles/gbemu.dir/src/cpu.cpp.o -MF CMakeFiles/gbemu.dir/src/cpu.cpp.o.d -o CMakeFiles/gbemu.dir/src/cpu.cpp.o -c "/home/death/Desktop/linux backup/sdsLabs/gbemu/src/cpu.cpp" + +CMakeFiles/gbemu.dir/src/cpu.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing CXX source to CMakeFiles/gbemu.dir/src/cpu.cpp.i" + /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E "/home/death/Desktop/linux backup/sdsLabs/gbemu/src/cpu.cpp" > CMakeFiles/gbemu.dir/src/cpu.cpp.i + +CMakeFiles/gbemu.dir/src/cpu.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling CXX source to assembly CMakeFiles/gbemu.dir/src/cpu.cpp.s" + /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S "/home/death/Desktop/linux backup/sdsLabs/gbemu/src/cpu.cpp" -o CMakeFiles/gbemu.dir/src/cpu.cpp.s + +CMakeFiles/gbemu.dir/src/gameBoy.cpp.o: CMakeFiles/gbemu.dir/flags.make +CMakeFiles/gbemu.dir/src/gameBoy.cpp.o: src/gameBoy.cpp +CMakeFiles/gbemu.dir/src/gameBoy.cpp.o: CMakeFiles/gbemu.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/death/Desktop/linux backup/sdsLabs/gbemu/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_3) "Building CXX object CMakeFiles/gbemu.dir/src/gameBoy.cpp.o" + /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT CMakeFiles/gbemu.dir/src/gameBoy.cpp.o -MF CMakeFiles/gbemu.dir/src/gameBoy.cpp.o.d -o CMakeFiles/gbemu.dir/src/gameBoy.cpp.o -c "/home/death/Desktop/linux backup/sdsLabs/gbemu/src/gameBoy.cpp" + +CMakeFiles/gbemu.dir/src/gameBoy.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing CXX source to CMakeFiles/gbemu.dir/src/gameBoy.cpp.i" + /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E "/home/death/Desktop/linux backup/sdsLabs/gbemu/src/gameBoy.cpp" > CMakeFiles/gbemu.dir/src/gameBoy.cpp.i + +CMakeFiles/gbemu.dir/src/gameBoy.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling CXX source to assembly CMakeFiles/gbemu.dir/src/gameBoy.cpp.s" + /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S "/home/death/Desktop/linux backup/sdsLabs/gbemu/src/gameBoy.cpp" -o CMakeFiles/gbemu.dir/src/gameBoy.cpp.s + +CMakeFiles/gbemu.dir/src/mmap.cpp.o: CMakeFiles/gbemu.dir/flags.make +CMakeFiles/gbemu.dir/src/mmap.cpp.o: src/mmap.cpp +CMakeFiles/gbemu.dir/src/mmap.cpp.o: CMakeFiles/gbemu.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/death/Desktop/linux backup/sdsLabs/gbemu/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_4) "Building CXX object CMakeFiles/gbemu.dir/src/mmap.cpp.o" + /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT CMakeFiles/gbemu.dir/src/mmap.cpp.o -MF CMakeFiles/gbemu.dir/src/mmap.cpp.o.d -o CMakeFiles/gbemu.dir/src/mmap.cpp.o -c "/home/death/Desktop/linux backup/sdsLabs/gbemu/src/mmap.cpp" + +CMakeFiles/gbemu.dir/src/mmap.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing CXX source to CMakeFiles/gbemu.dir/src/mmap.cpp.i" + /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E "/home/death/Desktop/linux backup/sdsLabs/gbemu/src/mmap.cpp" > CMakeFiles/gbemu.dir/src/mmap.cpp.i + +CMakeFiles/gbemu.dir/src/mmap.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling CXX source to assembly CMakeFiles/gbemu.dir/src/mmap.cpp.s" + /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S "/home/death/Desktop/linux backup/sdsLabs/gbemu/src/mmap.cpp" -o CMakeFiles/gbemu.dir/src/mmap.cpp.s + +CMakeFiles/gbemu.dir/src/graphics.cpp.o: CMakeFiles/gbemu.dir/flags.make +CMakeFiles/gbemu.dir/src/graphics.cpp.o: src/graphics.cpp +CMakeFiles/gbemu.dir/src/graphics.cpp.o: CMakeFiles/gbemu.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/death/Desktop/linux backup/sdsLabs/gbemu/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_5) "Building CXX object CMakeFiles/gbemu.dir/src/graphics.cpp.o" + /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT CMakeFiles/gbemu.dir/src/graphics.cpp.o -MF CMakeFiles/gbemu.dir/src/graphics.cpp.o.d -o CMakeFiles/gbemu.dir/src/graphics.cpp.o -c "/home/death/Desktop/linux backup/sdsLabs/gbemu/src/graphics.cpp" + +CMakeFiles/gbemu.dir/src/graphics.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing CXX source to CMakeFiles/gbemu.dir/src/graphics.cpp.i" + /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E "/home/death/Desktop/linux backup/sdsLabs/gbemu/src/graphics.cpp" > CMakeFiles/gbemu.dir/src/graphics.cpp.i + +CMakeFiles/gbemu.dir/src/graphics.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling CXX source to assembly CMakeFiles/gbemu.dir/src/graphics.cpp.s" + /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S "/home/death/Desktop/linux backup/sdsLabs/gbemu/src/graphics.cpp" -o CMakeFiles/gbemu.dir/src/graphics.cpp.s + +# Object files for target gbemu +gbemu_OBJECTS = \ +"CMakeFiles/gbemu.dir/src/main.cpp.o" \ +"CMakeFiles/gbemu.dir/src/cpu.cpp.o" \ +"CMakeFiles/gbemu.dir/src/gameBoy.cpp.o" \ +"CMakeFiles/gbemu.dir/src/mmap.cpp.o" \ +"CMakeFiles/gbemu.dir/src/graphics.cpp.o" + +# External object files for target gbemu +gbemu_EXTERNAL_OBJECTS = + +gbemu: CMakeFiles/gbemu.dir/src/main.cpp.o +gbemu: CMakeFiles/gbemu.dir/src/cpu.cpp.o +gbemu: CMakeFiles/gbemu.dir/src/gameBoy.cpp.o +gbemu: CMakeFiles/gbemu.dir/src/mmap.cpp.o +gbemu: CMakeFiles/gbemu.dir/src/graphics.cpp.o +gbemu: CMakeFiles/gbemu.dir/build.make +gbemu: /usr/lib/libSDL2main.a +gbemu: /usr/lib/libSDL2-2.0.so.0.2800.2 +gbemu: CMakeFiles/gbemu.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --bold --progress-dir="/home/death/Desktop/linux backup/sdsLabs/gbemu/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_6) "Linking CXX executable gbemu" + $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/gbemu.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +CMakeFiles/gbemu.dir/build: gbemu +.PHONY : CMakeFiles/gbemu.dir/build + +CMakeFiles/gbemu.dir/clean: + $(CMAKE_COMMAND) -P CMakeFiles/gbemu.dir/cmake_clean.cmake +.PHONY : CMakeFiles/gbemu.dir/clean + +CMakeFiles/gbemu.dir/depend: + cd "/home/death/Desktop/linux backup/sdsLabs/gbemu" && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" "/home/death/Desktop/linux backup/sdsLabs/gbemu" "/home/death/Desktop/linux backup/sdsLabs/gbemu" "/home/death/Desktop/linux backup/sdsLabs/gbemu" "/home/death/Desktop/linux backup/sdsLabs/gbemu" "/home/death/Desktop/linux backup/sdsLabs/gbemu/CMakeFiles/gbemu.dir/DependInfo.cmake" "--color=$(COLOR)" +.PHONY : CMakeFiles/gbemu.dir/depend + diff --git a/CMakeFiles/gbemu.dir/cmake_clean.cmake b/CMakeFiles/gbemu.dir/cmake_clean.cmake new file mode 100644 index 0000000..2649169 --- /dev/null +++ b/CMakeFiles/gbemu.dir/cmake_clean.cmake @@ -0,0 +1,19 @@ +file(REMOVE_RECURSE + "CMakeFiles/gbemu.dir/src/cpu.cpp.o" + "CMakeFiles/gbemu.dir/src/cpu.cpp.o.d" + "CMakeFiles/gbemu.dir/src/gameBoy.cpp.o" + "CMakeFiles/gbemu.dir/src/gameBoy.cpp.o.d" + "CMakeFiles/gbemu.dir/src/graphics.cpp.o" + "CMakeFiles/gbemu.dir/src/graphics.cpp.o.d" + "CMakeFiles/gbemu.dir/src/main.cpp.o" + "CMakeFiles/gbemu.dir/src/main.cpp.o.d" + "CMakeFiles/gbemu.dir/src/mmap.cpp.o" + "CMakeFiles/gbemu.dir/src/mmap.cpp.o.d" + "gbemu" + "gbemu.pdb" +) + +# Per-language clean rules from dependency scanning. +foreach(lang CXX) + include(CMakeFiles/gbemu.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/CMakeFiles/gbemu.dir/compiler_depend.make b/CMakeFiles/gbemu.dir/compiler_depend.make new file mode 100644 index 0000000..afcfd7d --- /dev/null +++ b/CMakeFiles/gbemu.dir/compiler_depend.make @@ -0,0 +1,2 @@ +# Empty compiler generated dependencies file for gbemu. +# This may be replaced when dependencies are built. diff --git a/CMakeFiles/gbemu.dir/compiler_depend.ts b/CMakeFiles/gbemu.dir/compiler_depend.ts new file mode 100644 index 0000000..c535beb --- /dev/null +++ b/CMakeFiles/gbemu.dir/compiler_depend.ts @@ -0,0 +1,2 @@ +# CMAKE generated file: DO NOT EDIT! +# Timestamp file for compiler generated dependencies management for gbemu. diff --git a/CMakeFiles/gbemu.dir/depend.make b/CMakeFiles/gbemu.dir/depend.make new file mode 100644 index 0000000..da6d2c5 --- /dev/null +++ b/CMakeFiles/gbemu.dir/depend.make @@ -0,0 +1,2 @@ +# Empty dependencies file for gbemu. +# This may be replaced when dependencies are built. diff --git a/CMakeFiles/gbemu.dir/flags.make b/CMakeFiles/gbemu.dir/flags.make new file mode 100644 index 0000000..b8e027f --- /dev/null +++ b/CMakeFiles/gbemu.dir/flags.make @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.27 + +# compile CXX with /usr/bin/c++ +CXX_DEFINES = + +CXX_INCLUDES = -isystem /usr/include/SDL2 + +CXX_FLAGS = -std=c++20 + diff --git a/CMakeFiles/gbemu.dir/link.txt b/CMakeFiles/gbemu.dir/link.txt new file mode 100644 index 0000000..d527b13 --- /dev/null +++ b/CMakeFiles/gbemu.dir/link.txt @@ -0,0 +1 @@ +/usr/bin/c++ CMakeFiles/gbemu.dir/src/main.cpp.o CMakeFiles/gbemu.dir/src/cpu.cpp.o CMakeFiles/gbemu.dir/src/gameBoy.cpp.o CMakeFiles/gbemu.dir/src/mmap.cpp.o CMakeFiles/gbemu.dir/src/graphics.cpp.o -o gbemu /usr/lib/libSDL2main.a /usr/lib/libSDL2-2.0.so.0.2800.2 diff --git a/CMakeFiles/gbemu.dir/progress.make b/CMakeFiles/gbemu.dir/progress.make new file mode 100644 index 0000000..daba7fa --- /dev/null +++ b/CMakeFiles/gbemu.dir/progress.make @@ -0,0 +1,7 @@ +CMAKE_PROGRESS_1 = 1 +CMAKE_PROGRESS_2 = 2 +CMAKE_PROGRESS_3 = 3 +CMAKE_PROGRESS_4 = 4 +CMAKE_PROGRESS_5 = 5 +CMAKE_PROGRESS_6 = 6 + diff --git a/CMakeFiles/gbemu.dir/src/cpu.cpp.o b/CMakeFiles/gbemu.dir/src/cpu.cpp.o new file mode 100644 index 0000000000000000000000000000000000000000..1e550b17653257bb62e2c2b57e1dd5a1f11c2076 GIT binary patch literal 153184 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 Y($yWg_PAW6?hQ5Y@IMz!bKQ#n086~g!~g&Q literal 0 HcmV?d00001 diff --git a/CMakeFiles/gbemu.dir/src/gameBoy.cpp.o.d b/CMakeFiles/gbemu.dir/src/gameBoy.cpp.o.d new file mode 100644 index 0000000..c4a28e6 --- /dev/null +++ b/CMakeFiles/gbemu.dir/src/gameBoy.cpp.o.d @@ -0,0 +1,251 @@ +CMakeFiles/gbemu.dir/src/gameBoy.cpp.o: \ + /home/death/Desktop/linux\ backup/sdsLabs/gbemu/src/gameBoy.cpp \ + /usr/include/stdc-predef.h \ + /home/death/Desktop/linux\ backup/sdsLabs/gbemu/src/types.h \ + /home/death/Desktop/linux\ backup/sdsLabs/gbemu/src/cpu.h \ + /home/death/Desktop/linux\ backup/sdsLabs/gbemu/src/mmap.h \ + /usr/include/stdio.h /usr/include/bits/libc-header-start.h \ + /usr/include/features.h /usr/include/features-time64.h \ + /usr/include/bits/wordsize.h /usr/include/bits/timesize.h \ + /usr/include/sys/cdefs.h /usr/include/bits/long-double.h \ + /usr/include/gnu/stubs.h /usr/include/gnu/stubs-64.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/stddef.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/stdarg.h \ + /usr/include/bits/types.h /usr/include/bits/typesizes.h \ + /usr/include/bits/time64.h /usr/include/bits/types/__fpos_t.h \ + /usr/include/bits/types/__mbstate_t.h \ + /usr/include/bits/types/__fpos64_t.h /usr/include/bits/types/__FILE.h \ + /usr/include/bits/types/FILE.h /usr/include/bits/types/struct_FILE.h \ + /usr/include/bits/types/cookie_io_functions_t.h \ + /usr/include/bits/stdio_lim.h /usr/include/bits/floatn.h \ + /usr/include/bits/floatn-common.h \ + /home/death/Desktop/linux\ backup/sdsLabs/gbemu/src/graphics.h \ + /usr/include/c++/13.2.1/algorithm \ + /usr/include/c++/13.2.1/bits/stl_algobase.h \ + /usr/include/c++/13.2.1/x86_64-pc-linux-gnu/bits/c++config.h \ + /usr/include/c++/13.2.1/x86_64-pc-linux-gnu/bits/os_defines.h \ + /usr/include/c++/13.2.1/x86_64-pc-linux-gnu/bits/cpu_defines.h \ + /usr/include/c++/13.2.1/pstl/pstl_config.h \ + /usr/include/c++/13.2.1/bits/functexcept.h \ + /usr/include/c++/13.2.1/bits/exception_defines.h \ + /usr/include/c++/13.2.1/bits/cpp_type_traits.h \ + /usr/include/c++/13.2.1/ext/type_traits.h \ + /usr/include/c++/13.2.1/ext/numeric_traits.h \ + /usr/include/c++/13.2.1/bits/stl_pair.h \ + /usr/include/c++/13.2.1/type_traits /usr/include/c++/13.2.1/bits/move.h \ + /usr/include/c++/13.2.1/bits/utility.h /usr/include/c++/13.2.1/compare \ + /usr/include/c++/13.2.1/concepts \ + /usr/include/c++/13.2.1/bits/stl_iterator_base_types.h \ + /usr/include/c++/13.2.1/bits/iterator_concepts.h \ + /usr/include/c++/13.2.1/bits/ptr_traits.h \ + /usr/include/c++/13.2.1/bits/ranges_cmp.h \ + /usr/include/c++/13.2.1/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/13.2.1/bits/concept_check.h \ + /usr/include/c++/13.2.1/debug/assertions.h \ + /usr/include/c++/13.2.1/bits/stl_iterator.h /usr/include/c++/13.2.1/new \ + /usr/include/c++/13.2.1/bits/exception.h \ + /usr/include/c++/13.2.1/bits/stl_construct.h \ + /usr/include/c++/13.2.1/debug/debug.h \ + /usr/include/c++/13.2.1/bits/predefined_ops.h \ + /usr/include/c++/13.2.1/bit /usr/include/c++/13.2.1/bits/stl_algo.h \ + /usr/include/c++/13.2.1/bits/algorithmfwd.h \ + /usr/include/c++/13.2.1/initializer_list \ + /usr/include/c++/13.2.1/bits/stl_heap.h \ + /usr/include/c++/13.2.1/bits/uniform_int_dist.h \ + /usr/include/c++/13.2.1/bits/stl_tempbuf.h \ + /usr/include/c++/13.2.1/cstdlib /usr/include/stdlib.h \ + /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h \ + /usr/include/bits/types/locale_t.h /usr/include/bits/types/__locale_t.h \ + /usr/include/sys/types.h /usr/include/bits/types/clock_t.h \ + /usr/include/bits/types/clockid_t.h /usr/include/bits/types/time_t.h \ + /usr/include/bits/types/timer_t.h /usr/include/bits/stdint-intn.h \ + /usr/include/endian.h /usr/include/bits/endian.h \ + /usr/include/bits/endianness.h /usr/include/bits/byteswap.h \ + /usr/include/bits/uintn-identity.h /usr/include/sys/select.h \ + /usr/include/bits/select.h /usr/include/bits/types/sigset_t.h \ + /usr/include/bits/types/__sigset_t.h \ + /usr/include/bits/types/struct_timeval.h \ + /usr/include/bits/types/struct_timespec.h \ + /usr/include/bits/pthreadtypes.h /usr/include/bits/thread-shared-types.h \ + /usr/include/bits/pthreadtypes-arch.h \ + /usr/include/bits/atomic_wide_counter.h /usr/include/bits/struct_mutex.h \ + /usr/include/bits/struct_rwlock.h /usr/include/alloca.h \ + /usr/include/bits/stdlib-float.h /usr/include/c++/13.2.1/bits/std_abs.h \ + /usr/include/c++/13.2.1/bits/ranges_algo.h \ + /usr/include/c++/13.2.1/bits/ranges_algobase.h \ + /usr/include/c++/13.2.1/bits/ranges_base.h \ + /usr/include/c++/13.2.1/bits/max_size_type.h \ + /usr/include/c++/13.2.1/numbers /usr/include/c++/13.2.1/bits/invoke.h \ + /usr/include/c++/13.2.1/bits/ranges_util.h \ + /usr/include/c++/13.2.1/pstl/glue_algorithm_defs.h \ + /usr/include/c++/13.2.1/pstl/execution_defs.h \ + /usr/include/c++/13.2.1/vector \ + /usr/include/c++/13.2.1/bits/requires_hosted.h \ + /usr/include/c++/13.2.1/bits/allocator.h \ + /usr/include/c++/13.2.1/x86_64-pc-linux-gnu/bits/c++allocator.h \ + /usr/include/c++/13.2.1/bits/new_allocator.h \ + /usr/include/c++/13.2.1/bits/memoryfwd.h \ + /usr/include/c++/13.2.1/bits/stl_uninitialized.h \ + /usr/include/c++/13.2.1/ext/alloc_traits.h \ + /usr/include/c++/13.2.1/bits/alloc_traits.h \ + /usr/include/c++/13.2.1/bits/stl_vector.h \ + /usr/include/c++/13.2.1/bits/stl_bvector.h \ + /usr/include/c++/13.2.1/bits/functional_hash.h \ + /usr/include/c++/13.2.1/bits/hash_bytes.h \ + /usr/include/c++/13.2.1/bits/refwrap.h \ + /usr/include/c++/13.2.1/bits/stl_function.h \ + /usr/include/c++/13.2.1/backward/binders.h \ + /usr/include/c++/13.2.1/bits/range_access.h \ + /usr/include/c++/13.2.1/bits/vector.tcc \ + /usr/include/c++/13.2.1/bits/memory_resource.h \ + /usr/include/c++/13.2.1/cstddef \ + /usr/include/c++/13.2.1/bits/uses_allocator.h \ + /usr/include/c++/13.2.1/bits/uses_allocator_args.h \ + /usr/include/c++/13.2.1/tuple /usr/include/SDL2/SDL.h \ + /usr/include/SDL2/SDL_main.h /usr/include/SDL2/SDL_stdinc.h \ + /usr/include/SDL2/SDL_config.h /usr/include/SDL2/SDL_platform.h \ + /usr/include/SDL2/begin_code.h /usr/include/SDL2/close_code.h \ + /usr/include/c++/13.2.1/stdlib.h /usr/include/string.h \ + /usr/include/strings.h /usr/include/wchar.h /usr/include/bits/wchar.h \ + /usr/include/bits/types/wint_t.h /usr/include/bits/types/mbstate_t.h \ + /usr/include/inttypes.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/stdint.h \ + /usr/include/stdint.h /usr/include/bits/stdint-uintn.h \ + /usr/include/ctype.h /usr/include/c++/13.2.1/math.h \ + /usr/include/c++/13.2.1/cmath /usr/include/math.h \ + /usr/include/bits/math-vector.h /usr/include/bits/libm-simd-decl-stubs.h \ + /usr/include/bits/flt-eval-method.h /usr/include/bits/fp-logb.h \ + /usr/include/bits/fp-fast.h \ + /usr/include/bits/mathcalls-helper-functions.h \ + /usr/include/bits/mathcalls.h /usr/include/bits/mathcalls-narrow.h \ + /usr/include/bits/iscanonical.h /usr/include/c++/13.2.1/bits/specfun.h \ + /usr/include/c++/13.2.1/limits /usr/include/c++/13.2.1/tr1/gamma.tcc \ + /usr/include/c++/13.2.1/tr1/special_function_util.h \ + /usr/include/c++/13.2.1/tr1/bessel_function.tcc \ + /usr/include/c++/13.2.1/tr1/beta_function.tcc \ + /usr/include/c++/13.2.1/tr1/ell_integral.tcc \ + /usr/include/c++/13.2.1/tr1/exp_integral.tcc \ + /usr/include/c++/13.2.1/tr1/hypergeometric.tcc \ + /usr/include/c++/13.2.1/tr1/legendre_function.tcc \ + /usr/include/c++/13.2.1/tr1/modified_bessel_func.tcc \ + /usr/include/c++/13.2.1/tr1/poly_hermite.tcc \ + /usr/include/c++/13.2.1/tr1/poly_laguerre.tcc \ + /usr/include/c++/13.2.1/tr1/riemann_zeta.tcc \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/float.h \ + /usr/include/SDL2/SDL_assert.h /usr/include/SDL2/SDL_atomic.h \ + /usr/include/SDL2/SDL_audio.h /usr/include/SDL2/SDL_error.h \ + /usr/include/SDL2/SDL_endian.h /usr/include/SDL2/SDL_mutex.h \ + /usr/include/SDL2/SDL_thread.h /usr/include/SDL2/SDL_rwops.h \ + /usr/include/SDL2/SDL_clipboard.h /usr/include/SDL2/SDL_cpuinfo.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/immintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/x86gprintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/ia32intrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/adxintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/bmiintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/bmi2intrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/cetintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/cldemoteintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/clflushoptintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/clwbintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/clzerointrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/cmpccxaddintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/enqcmdintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/fxsrintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/lzcntintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/lwpintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/movdirintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/mwaitintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/mwaitxintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/pconfigintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/popcntintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/pkuintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/prfchiintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/raointintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/rdseedintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/rtmintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/serializeintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/sgxintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/tbmintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/tsxldtrkintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/uintrintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/waitpkgintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/wbnoinvdintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/xsaveintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/xsavecintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/xsaveoptintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/xsavesintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/xtestintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/hresetintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/mmintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/xmmintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/mm_malloc.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/emmintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/pmmintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/tmmintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/smmintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/wmmintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/avxintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/avxvnniintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/avxifmaintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/avxvnniint8intrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/avx2intrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/avx512fintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/avx512erintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/avx512pfintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/avx512cdintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/avx512vlintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/avx512bwintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/avx512dqintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/avx512vlbwintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/avx512vldqintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/avx512ifmaintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/avx512ifmavlintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/avx512vbmiintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/avx512vbmivlintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/avx5124fmapsintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/avx5124vnniwintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/avx512vpopcntdqintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/avx512vbmi2intrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/avx512vbmi2vlintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/avx512vnniintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/avx512vnnivlintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/avx512vpopcntdqvlintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/avx512bitalgintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/avx512vp2intersectintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/avx512vp2intersectvlintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/avx512fp16intrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/avx512fp16vlintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/shaintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/fmaintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/f16cintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/gfniintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/vaesintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/vpclmulqdqintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/avx512bf16vlintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/avx512bf16intrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/avxneconvertintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/amxtileintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/amxint8intrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/amxbf16intrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/amxcomplexintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/prfchwintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/keylockerintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/amxfp16intrin.h \ + /usr/include/SDL2/SDL_events.h /usr/include/SDL2/SDL_video.h \ + /usr/include/SDL2/SDL_pixels.h /usr/include/SDL2/SDL_rect.h \ + /usr/include/SDL2/SDL_surface.h /usr/include/SDL2/SDL_blendmode.h \ + /usr/include/SDL2/SDL_keyboard.h /usr/include/SDL2/SDL_keycode.h \ + /usr/include/SDL2/SDL_scancode.h /usr/include/SDL2/SDL_mouse.h \ + /usr/include/SDL2/SDL_joystick.h /usr/include/SDL2/SDL_guid.h \ + /usr/include/SDL2/SDL_gamecontroller.h /usr/include/SDL2/SDL_sensor.h \ + /usr/include/SDL2/SDL_quit.h /usr/include/SDL2/SDL_gesture.h \ + /usr/include/SDL2/SDL_touch.h /usr/include/SDL2/SDL_filesystem.h \ + /usr/include/SDL2/SDL_haptic.h /usr/include/SDL2/SDL_hidapi.h \ + /usr/include/SDL2/SDL_hints.h /usr/include/SDL2/SDL_loadso.h \ + /usr/include/SDL2/SDL_log.h /usr/include/SDL2/SDL_messagebox.h \ + /usr/include/SDL2/SDL_metal.h /usr/include/SDL2/SDL_power.h \ + /usr/include/SDL2/SDL_render.h /usr/include/SDL2/SDL_shape.h \ + /usr/include/SDL2/SDL_system.h /usr/include/SDL2/SDL_timer.h \ + /usr/include/SDL2/SDL_version.h /usr/include/SDL2/SDL_locale.h \ + /usr/include/SDL2/SDL_misc.h \ + /home/death/Desktop/linux\ backup/sdsLabs/gbemu/src/gameBoy.h diff --git a/CMakeFiles/gbemu.dir/src/graphics.cpp.o b/CMakeFiles/gbemu.dir/src/graphics.cpp.o new file mode 100644 index 0000000000000000000000000000000000000000..d989389b63f0dc77dda607e54716fc319bfd5c84 GIT binary patch literal 76568 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 f_kTxB-yZLKfb{#1=I0>(6 zMAbvus+K_F!ij&N7mzr?g&!42aNxj^8@(VQHI>S(hf3+p?o6_Iu@Qoio@eHJ^Ub_B z@9pzXrSWf4h9OuCaZ;>$j0$nHd(|F^%n`9&Y>Q$yg1-qyrQCX3s1&}PEH5q%w0?Y9 zZZ)1f9=;&NJ0z4_PYVw*b-DG1fT`CHaOSV?X4QH%pR%2n8s`88GS z+c0(`eZ6b3J9Qp{DW;RcdR^lEa=ZC7tg@Y?#fEk8WjvRmf$_V9 zrzsQTOWH}gXidg%zqXWLD1HQil{x76$mtWMZsweFr5axxm zlWN#BXB=f!-TV=>>MCs5sygjDW0NXBWS*)jv#OlXQhrz}>6Bw@DQ2}6xF5r7Q|ee$ z%J#kbrxfhK#;uCe=VjdBJ(CDdBF<+Vod&ZrZ z2dv^?7SPmxeFB15f1m2s#zf0hK37p{Q-Ppno=pAI^ zJ;b+!Wq=IC`HmtKf6Xz*cQgu>^@Wf&0aL-N)}S>c7Shs4({#`;T1a zGky&)te=CClvm{N{~^!u{#pM56Krz~>ZPQUu=UtmFo*wM+VaIe#L?Hq>*thrz`&e3 zKTCxsIFPi?{~hqCe_Gsc)W0&}*gt&Nn9u!dR~sn-)t@7sA+FBHZ&JUz$bU^6I!b)R VP&7CC_S^Aa(fS|7w3T0-|33(jECK)k literal 0 HcmV?d00001 diff --git a/CMakeFiles/gbemu.dir/src/main.cpp.o.d b/CMakeFiles/gbemu.dir/src/main.cpp.o.d new file mode 100644 index 0000000..7796f49 --- /dev/null +++ b/CMakeFiles/gbemu.dir/src/main.cpp.o.d @@ -0,0 +1,251 @@ +CMakeFiles/gbemu.dir/src/main.cpp.o: \ + /home/death/Desktop/linux\ backup/sdsLabs/gbemu/src/main.cpp \ + /usr/include/stdc-predef.h \ + /home/death/Desktop/linux\ backup/sdsLabs/gbemu/src/gameBoy.h \ + /home/death/Desktop/linux\ backup/sdsLabs/gbemu/src/types.h \ + /home/death/Desktop/linux\ backup/sdsLabs/gbemu/src/cpu.h \ + /home/death/Desktop/linux\ backup/sdsLabs/gbemu/src/mmap.h \ + /usr/include/stdio.h /usr/include/bits/libc-header-start.h \ + /usr/include/features.h /usr/include/features-time64.h \ + /usr/include/bits/wordsize.h /usr/include/bits/timesize.h \ + /usr/include/sys/cdefs.h /usr/include/bits/long-double.h \ + /usr/include/gnu/stubs.h /usr/include/gnu/stubs-64.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/stddef.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/stdarg.h \ + /usr/include/bits/types.h /usr/include/bits/typesizes.h \ + /usr/include/bits/time64.h /usr/include/bits/types/__fpos_t.h \ + /usr/include/bits/types/__mbstate_t.h \ + /usr/include/bits/types/__fpos64_t.h /usr/include/bits/types/__FILE.h \ + /usr/include/bits/types/FILE.h /usr/include/bits/types/struct_FILE.h \ + /usr/include/bits/types/cookie_io_functions_t.h \ + /usr/include/bits/stdio_lim.h /usr/include/bits/floatn.h \ + /usr/include/bits/floatn-common.h \ + /home/death/Desktop/linux\ backup/sdsLabs/gbemu/src/graphics.h \ + /usr/include/c++/13.2.1/algorithm \ + /usr/include/c++/13.2.1/bits/stl_algobase.h \ + /usr/include/c++/13.2.1/x86_64-pc-linux-gnu/bits/c++config.h \ + /usr/include/c++/13.2.1/x86_64-pc-linux-gnu/bits/os_defines.h \ + /usr/include/c++/13.2.1/x86_64-pc-linux-gnu/bits/cpu_defines.h \ + /usr/include/c++/13.2.1/pstl/pstl_config.h \ + /usr/include/c++/13.2.1/bits/functexcept.h \ + /usr/include/c++/13.2.1/bits/exception_defines.h \ + /usr/include/c++/13.2.1/bits/cpp_type_traits.h \ + /usr/include/c++/13.2.1/ext/type_traits.h \ + /usr/include/c++/13.2.1/ext/numeric_traits.h \ + /usr/include/c++/13.2.1/bits/stl_pair.h \ + /usr/include/c++/13.2.1/type_traits /usr/include/c++/13.2.1/bits/move.h \ + /usr/include/c++/13.2.1/bits/utility.h /usr/include/c++/13.2.1/compare \ + /usr/include/c++/13.2.1/concepts \ + /usr/include/c++/13.2.1/bits/stl_iterator_base_types.h \ + /usr/include/c++/13.2.1/bits/iterator_concepts.h \ + /usr/include/c++/13.2.1/bits/ptr_traits.h \ + /usr/include/c++/13.2.1/bits/ranges_cmp.h \ + /usr/include/c++/13.2.1/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/13.2.1/bits/concept_check.h \ + /usr/include/c++/13.2.1/debug/assertions.h \ + /usr/include/c++/13.2.1/bits/stl_iterator.h /usr/include/c++/13.2.1/new \ + /usr/include/c++/13.2.1/bits/exception.h \ + /usr/include/c++/13.2.1/bits/stl_construct.h \ + /usr/include/c++/13.2.1/debug/debug.h \ + /usr/include/c++/13.2.1/bits/predefined_ops.h \ + /usr/include/c++/13.2.1/bit /usr/include/c++/13.2.1/bits/stl_algo.h \ + /usr/include/c++/13.2.1/bits/algorithmfwd.h \ + /usr/include/c++/13.2.1/initializer_list \ + /usr/include/c++/13.2.1/bits/stl_heap.h \ + /usr/include/c++/13.2.1/bits/uniform_int_dist.h \ + /usr/include/c++/13.2.1/bits/stl_tempbuf.h \ + /usr/include/c++/13.2.1/cstdlib /usr/include/stdlib.h \ + /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h \ + /usr/include/bits/types/locale_t.h /usr/include/bits/types/__locale_t.h \ + /usr/include/sys/types.h /usr/include/bits/types/clock_t.h \ + /usr/include/bits/types/clockid_t.h /usr/include/bits/types/time_t.h \ + /usr/include/bits/types/timer_t.h /usr/include/bits/stdint-intn.h \ + /usr/include/endian.h /usr/include/bits/endian.h \ + /usr/include/bits/endianness.h /usr/include/bits/byteswap.h \ + /usr/include/bits/uintn-identity.h /usr/include/sys/select.h \ + /usr/include/bits/select.h /usr/include/bits/types/sigset_t.h \ + /usr/include/bits/types/__sigset_t.h \ + /usr/include/bits/types/struct_timeval.h \ + /usr/include/bits/types/struct_timespec.h \ + /usr/include/bits/pthreadtypes.h /usr/include/bits/thread-shared-types.h \ + /usr/include/bits/pthreadtypes-arch.h \ + /usr/include/bits/atomic_wide_counter.h /usr/include/bits/struct_mutex.h \ + /usr/include/bits/struct_rwlock.h /usr/include/alloca.h \ + /usr/include/bits/stdlib-float.h /usr/include/c++/13.2.1/bits/std_abs.h \ + /usr/include/c++/13.2.1/bits/ranges_algo.h \ + /usr/include/c++/13.2.1/bits/ranges_algobase.h \ + /usr/include/c++/13.2.1/bits/ranges_base.h \ + /usr/include/c++/13.2.1/bits/max_size_type.h \ + /usr/include/c++/13.2.1/numbers /usr/include/c++/13.2.1/bits/invoke.h \ + /usr/include/c++/13.2.1/bits/ranges_util.h \ + /usr/include/c++/13.2.1/pstl/glue_algorithm_defs.h \ + /usr/include/c++/13.2.1/pstl/execution_defs.h \ + /usr/include/c++/13.2.1/vector \ + /usr/include/c++/13.2.1/bits/requires_hosted.h \ + /usr/include/c++/13.2.1/bits/allocator.h \ + /usr/include/c++/13.2.1/x86_64-pc-linux-gnu/bits/c++allocator.h \ + /usr/include/c++/13.2.1/bits/new_allocator.h \ + /usr/include/c++/13.2.1/bits/memoryfwd.h \ + /usr/include/c++/13.2.1/bits/stl_uninitialized.h \ + /usr/include/c++/13.2.1/ext/alloc_traits.h \ + /usr/include/c++/13.2.1/bits/alloc_traits.h \ + /usr/include/c++/13.2.1/bits/stl_vector.h \ + /usr/include/c++/13.2.1/bits/stl_bvector.h \ + /usr/include/c++/13.2.1/bits/functional_hash.h \ + /usr/include/c++/13.2.1/bits/hash_bytes.h \ + /usr/include/c++/13.2.1/bits/refwrap.h \ + /usr/include/c++/13.2.1/bits/stl_function.h \ + /usr/include/c++/13.2.1/backward/binders.h \ + /usr/include/c++/13.2.1/bits/range_access.h \ + /usr/include/c++/13.2.1/bits/vector.tcc \ + /usr/include/c++/13.2.1/bits/memory_resource.h \ + /usr/include/c++/13.2.1/cstddef \ + /usr/include/c++/13.2.1/bits/uses_allocator.h \ + /usr/include/c++/13.2.1/bits/uses_allocator_args.h \ + /usr/include/c++/13.2.1/tuple /usr/include/SDL2/SDL.h \ + /usr/include/SDL2/SDL_main.h /usr/include/SDL2/SDL_stdinc.h \ + /usr/include/SDL2/SDL_config.h /usr/include/SDL2/SDL_platform.h \ + /usr/include/SDL2/begin_code.h /usr/include/SDL2/close_code.h \ + /usr/include/c++/13.2.1/stdlib.h /usr/include/string.h \ + /usr/include/strings.h /usr/include/wchar.h /usr/include/bits/wchar.h \ + /usr/include/bits/types/wint_t.h /usr/include/bits/types/mbstate_t.h \ + /usr/include/inttypes.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/stdint.h \ + /usr/include/stdint.h /usr/include/bits/stdint-uintn.h \ + /usr/include/ctype.h /usr/include/c++/13.2.1/math.h \ + /usr/include/c++/13.2.1/cmath /usr/include/math.h \ + /usr/include/bits/math-vector.h /usr/include/bits/libm-simd-decl-stubs.h \ + /usr/include/bits/flt-eval-method.h /usr/include/bits/fp-logb.h \ + /usr/include/bits/fp-fast.h \ + /usr/include/bits/mathcalls-helper-functions.h \ + /usr/include/bits/mathcalls.h /usr/include/bits/mathcalls-narrow.h \ + /usr/include/bits/iscanonical.h /usr/include/c++/13.2.1/bits/specfun.h \ + /usr/include/c++/13.2.1/limits /usr/include/c++/13.2.1/tr1/gamma.tcc \ + /usr/include/c++/13.2.1/tr1/special_function_util.h \ + /usr/include/c++/13.2.1/tr1/bessel_function.tcc \ + /usr/include/c++/13.2.1/tr1/beta_function.tcc \ + /usr/include/c++/13.2.1/tr1/ell_integral.tcc \ + /usr/include/c++/13.2.1/tr1/exp_integral.tcc \ + /usr/include/c++/13.2.1/tr1/hypergeometric.tcc \ + /usr/include/c++/13.2.1/tr1/legendre_function.tcc \ + /usr/include/c++/13.2.1/tr1/modified_bessel_func.tcc \ + /usr/include/c++/13.2.1/tr1/poly_hermite.tcc \ + /usr/include/c++/13.2.1/tr1/poly_laguerre.tcc \ + /usr/include/c++/13.2.1/tr1/riemann_zeta.tcc \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/float.h \ + /usr/include/SDL2/SDL_assert.h /usr/include/SDL2/SDL_atomic.h \ + /usr/include/SDL2/SDL_audio.h /usr/include/SDL2/SDL_error.h \ + /usr/include/SDL2/SDL_endian.h /usr/include/SDL2/SDL_mutex.h \ + /usr/include/SDL2/SDL_thread.h /usr/include/SDL2/SDL_rwops.h \ + /usr/include/SDL2/SDL_clipboard.h /usr/include/SDL2/SDL_cpuinfo.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/immintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/x86gprintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/ia32intrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/adxintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/bmiintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/bmi2intrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/cetintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/cldemoteintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/clflushoptintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/clwbintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/clzerointrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/cmpccxaddintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/enqcmdintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/fxsrintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/lzcntintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/lwpintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/movdirintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/mwaitintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/mwaitxintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/pconfigintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/popcntintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/pkuintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/prfchiintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/raointintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/rdseedintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/rtmintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/serializeintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/sgxintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/tbmintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/tsxldtrkintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/uintrintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/waitpkgintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/wbnoinvdintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/xsaveintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/xsavecintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/xsaveoptintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/xsavesintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/xtestintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/hresetintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/mmintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/xmmintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/mm_malloc.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/emmintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/pmmintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/tmmintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/smmintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/wmmintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/avxintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/avxvnniintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/avxifmaintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/avxvnniint8intrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/avx2intrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/avx512fintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/avx512erintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/avx512pfintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/avx512cdintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/avx512vlintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/avx512bwintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/avx512dqintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/avx512vlbwintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/avx512vldqintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/avx512ifmaintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/avx512ifmavlintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/avx512vbmiintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/avx512vbmivlintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/avx5124fmapsintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/avx5124vnniwintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/avx512vpopcntdqintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/avx512vbmi2intrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/avx512vbmi2vlintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/avx512vnniintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/avx512vnnivlintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/avx512vpopcntdqvlintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/avx512bitalgintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/avx512vp2intersectintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/avx512vp2intersectvlintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/avx512fp16intrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/avx512fp16vlintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/shaintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/fmaintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/f16cintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/gfniintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/vaesintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/vpclmulqdqintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/avx512bf16vlintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/avx512bf16intrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/avxneconvertintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/amxtileintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/amxint8intrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/amxbf16intrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/amxcomplexintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/prfchwintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/keylockerintrin.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/amxfp16intrin.h \ + /usr/include/SDL2/SDL_events.h /usr/include/SDL2/SDL_video.h \ + /usr/include/SDL2/SDL_pixels.h /usr/include/SDL2/SDL_rect.h \ + /usr/include/SDL2/SDL_surface.h /usr/include/SDL2/SDL_blendmode.h \ + /usr/include/SDL2/SDL_keyboard.h /usr/include/SDL2/SDL_keycode.h \ + /usr/include/SDL2/SDL_scancode.h /usr/include/SDL2/SDL_mouse.h \ + /usr/include/SDL2/SDL_joystick.h /usr/include/SDL2/SDL_guid.h \ + /usr/include/SDL2/SDL_gamecontroller.h /usr/include/SDL2/SDL_sensor.h \ + /usr/include/SDL2/SDL_quit.h /usr/include/SDL2/SDL_gesture.h \ + /usr/include/SDL2/SDL_touch.h /usr/include/SDL2/SDL_filesystem.h \ + /usr/include/SDL2/SDL_haptic.h /usr/include/SDL2/SDL_hidapi.h \ + /usr/include/SDL2/SDL_hints.h /usr/include/SDL2/SDL_loadso.h \ + /usr/include/SDL2/SDL_log.h /usr/include/SDL2/SDL_messagebox.h \ + /usr/include/SDL2/SDL_metal.h /usr/include/SDL2/SDL_power.h \ + /usr/include/SDL2/SDL_render.h /usr/include/SDL2/SDL_shape.h \ + /usr/include/SDL2/SDL_system.h /usr/include/SDL2/SDL_timer.h \ + /usr/include/SDL2/SDL_version.h /usr/include/SDL2/SDL_locale.h \ + /usr/include/SDL2/SDL_misc.h diff --git a/CMakeFiles/gbemu.dir/src/mmap.cpp.o b/CMakeFiles/gbemu.dir/src/mmap.cpp.o new file mode 100644 index 0000000000000000000000000000000000000000..90c0489121b227a74312799b6461b1d09a385203 GIT binary patch literal 5848 zcmbtWZ)hCH6`#||mfS|ZOC0D0n{?fzK@RoxP7bME()w&=?NwVlhk}SG4fff$XQ|fx z;k0MT1*3DXX>ThGSK5GEQmhXN%?Cr$FG>(4IwwJL3~A+Jiar!_A6$@nLRF}s`p|g$ z-t3#z?C4ZNJFq)5zxR88X5O3GozTB`qAd_$q6OHu+2%~3j1BJD94GiN!FIDQHelF) zGb$@#!@jaH%RsV(Lc@OFnAA56I~n2qWFj(y!uMR^JSVlHYed&t(X}nsyNTXC!$7E5 z-%5`WJ@)zNhlzf8E8UeOU51@Z%ucZ_!5O4(%%IR8TzM-!N%Z6l3jOqnt@J^n56+;_ zPsao*c{ocEyI$<%knm<)OSbc|oh(S$4#LJIY^RIW%3xlCI|#1&;Sj+!Kb#==x*zT( zc*+kSC-_Z2e3Ia|{jj^^cI{n1+(+!XAAX+T+kRLlc)<@JBY4pde}~|PAO0@En1$J` z>8P!F^fC_Tn8Ow36P++~H+Mb}7UMa_Y9D=2!?X4x9JX#aY>W1%_JVyUV-MV`>If=x1z@9U%?cl2RJnn>B3VgJDqK&c4)hqX$8)N&y56OVXU5bH8=P7puyhzUV#$i&|g@x}v>Xb9p1 znP>@%55^wfe#tKqYr+ZrtjXM9+nrLFmS2F)U4EK4C!EqH+<=U&uV!wUtDTv7eTA_m zu4onZb|nB?z2IsZ5R|@RT-z7Gx&0TzcCWQ+5b;Vq07h0|XI5^oOLcOV6zg#0b=;(= zo_9)nTw)n(5(E1MiI`J*G&DWHU2nQ-mj0XF=1Z9hWZHV1NQ30OEIV)ZaFVwjXVFVF z+}ykEhBkM+3%dn1`tk`Q)?h0rux&VU=VfQ5}~0Fwy~*07Gnn!pX@w4-kB)}f>Y3rm`_${y=6!J740 zSkIg_<+1(=3*!-e;;}IGoK^Q&9}CuJ9t$g(vl<@jcf^7+7I9%2a~3aS9{p8e>%mwD zKcdYd1~B1_?WHAS&2S~2HdJc906ANCEWyCUBEwBAXB^~=QWx2Ptg_}~+on|Hk-p<@ zX1Gz<_04ko=mY+>x34VOYgPR|*j|E^B*Av2@hAHh9Gv@=MvQ;@xnS3wDxR`U5@(kCi*HHVXLFEp;`Ny-&-)jE_DY?f0km3!?G8;-RD4#s6PBYKaH?UoQo%5mbEn%UB8Gi; z27i*?g9mhj_mgPt zClZ>jokSeO|r)|AmJA;`ZP`HohxRkM9!Z*;9>y=>8ZbJ&!KTDj0 z*b5s&T+HQVlK&b567t}$0?0uBQzU;1dm&G4>eorWEX&*Od;S|F|GiIslgl;4Xd_Ph z2i~PrqF`h5L@W8ijbyy&OI50!Ew`BeINK5w~H z+!e@?+whLSJLBJu+rA;;m_mVL-C$Gs85icb%r8i|Z2wgWm-#m&T;_i$;WGb^5-#)c z4+R^>Df7GNysPo|NVv>@PQqpTDG8VP7bRTgc5^8q@S$d~c!gyWTq zL&1MT;^Unn@JTcPP4J&_r|df6*vb6e7&J7*zX*@8b6LV4lJLJ0F6{pRWZ0G^zHI+3 zI`=C74}`1nEJ?T=&kj1@$jAFZ#Q9|je^|l|377fVZSb2CF59^);j$eKd||_N;Uijt z1_BrNZCb&3kplJ;1sC`2>k2OJ&kq$`+{5=3T->YeRBs|4aZj@7=;f@HItRT~bo(JO zDw-pysAY~@ESgSPDHc5kKO)g$-kqG!XR~GwWbor-M&Y01;HZ^4f05=Fa;0dYm@k+` z>oVw|C3EOZrkKi_6yg8ZX`qfv!ZRqh1WgtxUqUA52C=>Hw8N8tM{bL|-I+n>3TqGj z(C3Loi2M}cL?e{32o`;dM%(X6z6K+-`M>JNK^JYR>k|IO{RYFujkKP3OE{vzpXN^q(^R$;6BYxH5P zgB%;?A4^H-i~OT`)i*$F0~Mg%CjWS6q90WsZK}Bkh}FCB&Db6#er3w=Zfd39p!h9r JW%H%#{|CM2?qC1_ literal 0 HcmV?d00001 diff --git a/CMakeFiles/gbemu.dir/src/mmap.cpp.o.d b/CMakeFiles/gbemu.dir/src/mmap.cpp.o.d new file mode 100644 index 0000000..83fae03 --- /dev/null +++ b/CMakeFiles/gbemu.dir/src/mmap.cpp.o.d @@ -0,0 +1,26 @@ +CMakeFiles/gbemu.dir/src/mmap.cpp.o: \ + /home/death/Desktop/linux\ backup/sdsLabs/gbemu/src/mmap.cpp \ + /usr/include/stdc-predef.h \ + /home/death/Desktop/linux\ backup/sdsLabs/gbemu/src/mmap.h \ + /home/death/Desktop/linux\ backup/sdsLabs/gbemu/src/types.h \ + /usr/include/stdio.h /usr/include/bits/libc-header-start.h \ + /usr/include/features.h /usr/include/features-time64.h \ + /usr/include/bits/wordsize.h /usr/include/bits/timesize.h \ + /usr/include/sys/cdefs.h /usr/include/bits/long-double.h \ + /usr/include/gnu/stubs.h /usr/include/gnu/stubs-64.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/stddef.h \ + /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/stdarg.h \ + /usr/include/bits/types.h /usr/include/bits/typesizes.h \ + /usr/include/bits/time64.h /usr/include/bits/types/__fpos_t.h \ + /usr/include/bits/types/__mbstate_t.h \ + /usr/include/bits/types/__fpos64_t.h /usr/include/bits/types/__FILE.h \ + /usr/include/bits/types/FILE.h /usr/include/bits/types/struct_FILE.h \ + /usr/include/bits/types/cookie_io_functions_t.h \ + /usr/include/bits/stdio_lim.h /usr/include/bits/floatn.h \ + /usr/include/bits/floatn-common.h /usr/include/c++/13.2.1/cstring \ + /usr/include/c++/13.2.1/x86_64-pc-linux-gnu/bits/c++config.h \ + /usr/include/c++/13.2.1/x86_64-pc-linux-gnu/bits/os_defines.h \ + /usr/include/c++/13.2.1/x86_64-pc-linux-gnu/bits/cpu_defines.h \ + /usr/include/c++/13.2.1/pstl/pstl_config.h /usr/include/string.h \ + /usr/include/bits/types/locale_t.h /usr/include/bits/types/__locale_t.h \ + /usr/include/strings.h diff --git a/CMakeFiles/progress.marks b/CMakeFiles/progress.marks new file mode 100644 index 0000000..1e8b314 --- /dev/null +++ b/CMakeFiles/progress.marks @@ -0,0 +1 @@ +6 diff --git a/src/CMakeFiles/CMakeDirectoryInformation.cmake b/src/CMakeFiles/CMakeDirectoryInformation.cmake new file mode 100644 index 0000000..42b592b --- /dev/null +++ b/src/CMakeFiles/CMakeDirectoryInformation.cmake @@ -0,0 +1,16 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.27 + +# Relative path conversion top directories. +set(CMAKE_RELATIVE_PATH_TOP_SOURCE "/home/death/Desktop/linux backup/sdsLabs/gbemu") +set(CMAKE_RELATIVE_PATH_TOP_BINARY "/home/death/Desktop/linux backup/sdsLabs/gbemu") + +# Force unix paths in dependencies. +set(CMAKE_FORCE_UNIX_PATHS 1) + + +# The C and CXX include file regular expressions for this directory. +set(CMAKE_C_INCLUDE_REGEX_SCAN "^.*$") +set(CMAKE_C_INCLUDE_REGEX_COMPLAIN "^$") +set(CMAKE_CXX_INCLUDE_REGEX_SCAN ${CMAKE_C_INCLUDE_REGEX_SCAN}) +set(CMAKE_CXX_INCLUDE_REGEX_COMPLAIN ${CMAKE_C_INCLUDE_REGEX_COMPLAIN}) diff --git a/src/CMakeFiles/progress.marks b/src/CMakeFiles/progress.marks new file mode 100644 index 0000000..573541a --- /dev/null +++ b/src/CMakeFiles/progress.marks @@ -0,0 +1 @@ +0 diff --git a/src/Makefile b/src/Makefile new file mode 100644 index 0000000..5f9ccf9 --- /dev/null +++ b/src/Makefile @@ -0,0 +1,140 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.27 + +# Default target executed when no arguments are given to make. +default_target: all +.PHONY : default_target + +# Allow only one "make -f Makefile2" at a time, but pass parallelism. +.NOTPARALLEL: + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + +# Disable VCS-based implicit rules. +% : %,v + +# Disable VCS-based implicit rules. +% : RCS/% + +# Disable VCS-based implicit rules. +% : RCS/%,v + +# Disable VCS-based implicit rules. +% : SCCS/s.% + +# Disable VCS-based implicit rules. +% : s.% + +.SUFFIXES: .hpux_make_needs_suffix_list + +# Command-line flag to silence nested $(MAKE). +$(VERBOSE)MAKESILENT = -s + +#Suppress display of executed commands. +$(VERBOSE).SILENT: + +# A target that is always out of date. +cmake_force: +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E rm -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = "/home/death/Desktop/linux backup/sdsLabs/gbemu" + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = "/home/death/Desktop/linux backup/sdsLabs/gbemu" + +#============================================================================= +# Targets provided globally by CMake. + +# Special rule for the target edit_cache +edit_cache: + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Running CMake cache editor..." + /usr/bin/ccmake -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) +.PHONY : edit_cache + +# Special rule for the target edit_cache +edit_cache/fast: edit_cache +.PHONY : edit_cache/fast + +# Special rule for the target rebuild_cache +rebuild_cache: + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Running CMake to regenerate build system..." + /usr/bin/cmake --regenerate-during-build -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) +.PHONY : rebuild_cache + +# Special rule for the target rebuild_cache +rebuild_cache/fast: rebuild_cache +.PHONY : rebuild_cache/fast + +# The main all target +all: cmake_check_build_system + cd "/home/death/Desktop/linux backup/sdsLabs/gbemu" && $(CMAKE_COMMAND) -E cmake_progress_start "/home/death/Desktop/linux backup/sdsLabs/gbemu/CMakeFiles" "/home/death/Desktop/linux backup/sdsLabs/gbemu/src//CMakeFiles/progress.marks" + cd "/home/death/Desktop/linux backup/sdsLabs/gbemu" && $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 src/all + $(CMAKE_COMMAND) -E cmake_progress_start "/home/death/Desktop/linux backup/sdsLabs/gbemu/CMakeFiles" 0 +.PHONY : all + +# The main clean target +clean: + cd "/home/death/Desktop/linux backup/sdsLabs/gbemu" && $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 src/clean +.PHONY : clean + +# The main clean target +clean/fast: clean +.PHONY : clean/fast + +# Prepare targets for installation. +preinstall: all + cd "/home/death/Desktop/linux backup/sdsLabs/gbemu" && $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 src/preinstall +.PHONY : preinstall + +# Prepare targets for installation. +preinstall/fast: + cd "/home/death/Desktop/linux backup/sdsLabs/gbemu" && $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 src/preinstall +.PHONY : preinstall/fast + +# clear depends +depend: + cd "/home/death/Desktop/linux backup/sdsLabs/gbemu" && $(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 1 +.PHONY : depend + +# Help Target +help: + @echo "The following are some of the valid targets for this Makefile:" + @echo "... all (the default if no target is provided)" + @echo "... clean" + @echo "... depend" + @echo "... edit_cache" + @echo "... rebuild_cache" +.PHONY : help + + + +#============================================================================= +# Special targets to cleanup operation of make. + +# Special rule to run CMake to check the build system integrity. +# No rule that depends on this can have commands that come from listfiles +# because they might be regenerated. +cmake_check_build_system: + cd "/home/death/Desktop/linux backup/sdsLabs/gbemu" && $(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 0 +.PHONY : cmake_check_build_system + diff --git a/src/cmake_install.cmake b/src/cmake_install.cmake new file mode 100644 index 0000000..0e2e517 --- /dev/null +++ b/src/cmake_install.cmake @@ -0,0 +1,44 @@ +# Install script for directory: /home/death/Desktop/linux backup/sdsLabs/gbemu/src + +# Set the install prefix +if(NOT DEFINED CMAKE_INSTALL_PREFIX) + set(CMAKE_INSTALL_PREFIX "/usr/local") +endif() +string(REGEX REPLACE "/$" "" CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}") + +# Set the install configuration name. +if(NOT DEFINED CMAKE_INSTALL_CONFIG_NAME) + if(BUILD_TYPE) + string(REGEX REPLACE "^[^A-Za-z0-9_]+" "" + CMAKE_INSTALL_CONFIG_NAME "${BUILD_TYPE}") + else() + set(CMAKE_INSTALL_CONFIG_NAME "") + endif() + message(STATUS "Install configuration: \"${CMAKE_INSTALL_CONFIG_NAME}\"") +endif() + +# Set the component getting installed. +if(NOT CMAKE_INSTALL_COMPONENT) + if(COMPONENT) + message(STATUS "Install component: \"${COMPONENT}\"") + set(CMAKE_INSTALL_COMPONENT "${COMPONENT}") + else() + set(CMAKE_INSTALL_COMPONENT) + endif() +endif() + +# Install shared libraries without execute permission? +if(NOT DEFINED CMAKE_INSTALL_SO_NO_EXE) + set(CMAKE_INSTALL_SO_NO_EXE "0") +endif() + +# Is this installation the result of a crosscompile? +if(NOT DEFINED CMAKE_CROSSCOMPILING) + set(CMAKE_CROSSCOMPILING "FALSE") +endif() + +# Set default install directory permissions. +if(NOT DEFINED CMAKE_OBJDUMP) + set(CMAKE_OBJDUMP "/usr/bin/objdump") +endif() + diff --git a/src/cpu.h b/src/cpu.h index b7f3e48..3147576 100644 --- a/src/cpu.h +++ b/src/cpu.h @@ -1153,8 +1153,33 @@ class CPU // get the Program Counter Word get_reg_PC() { return reg_PC.dat; } - // get the HL register - Word get_reg_HL() { return reg_HL.dat; } + // // Accumulator and Flags + // Register reg_AF; + + // // General Purpose Registers + // Register reg_BC; + // Register reg_DE; + + // get value of A + Byte get_reg_A(){ return reg_AF.hi; } + + // get register B + Byte get_reg_B() { return reg_BC.hi; } + + // get register C + Byte get_reg_C() { return reg_BC.lo; } + + // get register D + Byte get_reg_D() { return reg_DE.hi; } + + // get register E + Byte get_reg_E() { return reg_DE.lo; } + + // get register H + Byte get_reg_H() { return reg_HL.hi; } + + // get register L + Byte get_reg_L() { return reg_HL.lo; } // execute an arbitrary instruction int executeInstruction(Byte opcode); diff --git a/src/gameBoy.cpp b/src/gameBoy.cpp index 9f565db..ab4517d 100644 --- a/src/gameBoy.cpp +++ b/src/gameBoy.cpp @@ -15,6 +15,12 @@ GBE::GBE() // Initialize the Graphics gbe_graphics = new PPU(); + // debug mode = false + debug_mode = false; + + // Init event + event = new SDL_Event(); + // Unify the CPU and MemoryMap gbe_cpu->setMemory(gbe_mMap); @@ -40,7 +46,7 @@ GBE::GBE() // Set the Game ROM gbe_mMap->setRomFile(gameROM); - // Map to ROMs to mMap + // Map to ROMs to gbe_mMap gbe_mMap->mapRom(); s_Cycles = 0; @@ -117,7 +123,135 @@ void GBE::update() gbe_graphics->executePPU(s_Cycles); s_Cycles = 0; s_Cycles += gbe_cpu->performInterrupt(); - gbe_graphics->pollEvents(); + pollEvents(); + if (debug_mode) + { + debug_int(); + } + } +} + +void GBE::getValueOfRegister(char registerName) +{ + printf("Register: %c\n", registerName); + Word value; + + switch (registerName) + { + case 'A': + value = gbe_cpu->get_reg_A(); + break; + case 'B': + value = gbe_cpu->get_reg_B(); + break; + case 'C': + value = gbe_cpu->get_reg_C(); + break; + case 'D': + value = gbe_cpu->get_reg_D(); + break; + case 'E': + value = gbe_cpu->get_reg_E(); + break; + case 'H': + value = gbe_cpu->get_reg_H(); + break; + case 'L': + value = gbe_cpu->get_reg_L(); + break; + default: + break; + } + // printf(value); + printf("%hu\n", value); +} + +void GBE::debug_int() +{ + printf("\nEntered debug mode\n"); + bool shouldAdv = false; + bool infoMode; + while (!shouldAdv) + { + while (SDL_PollEvent(event)) + { + if (event->key.type == SDL_KEYUP) + { + switch (event->key.keysym.sym) + { + case SDLK_s: + printf("s pressed\n"); + shouldAdv = true; + break; + case SDLK_u: + debug_mode = !debug_mode; + printf("pressed d\n"); + shouldAdv = true; + break; + case SDLK_i: + printf("Info Mode:- "); + infoMode = true; + shouldAdv = true; + // Press r to print all registers + // enter a for rax + // enter d for rdx + // enter c for rcx + // enter b for rbx + // enter E for E + // enter e to exit info mode + while (infoMode) + { + while (SDL_PollEvent(event)) + { + if (event->key.type == SDL_KEYUP) + { + switch (event->key.keysym.sym) + { + case SDLK_r: + getValueOfRegister('A'); + getValueOfRegister('B'); + getValueOfRegister('C'); + getValueOfRegister('D'); + getValueOfRegister('E'); + getValueOfRegister('H'); + getValueOfRegister('L'); + break; + case SDLK_a: + getValueOfRegister('A'); + break; + case SDLK_b: + getValueOfRegister('B'); + break; + case SDLK_c: + getValueOfRegister('C'); + break; + case SDLK_d: + getValueOfRegister('D'); + break; + case SDLK_e: + getValueOfRegister('E'); + break; + case SDLK_h: + getValueOfRegister('H'); + break; + case SDLK_l: + getValueOfRegister('L'); + break; + case SDLK_x: + infoMode = false; + break; + default: + break; + } + } + } + } + break; + default: + break; + } + } + } } } @@ -133,4 +267,83 @@ void GBE::executeBootROM() } gbe_mMap->unloadBootRom(); +} + +// Poll Events to check for inputs +// And process them +bool GBE::pollEvents() +{ + while (SDL_PollEvent(event)) + { + if (event->key.type == SDL_KEYDOWN) + { + switch (event->key.keysym.sym) + { + case SDLK_LEFT: + *(gbe_mMap->joyPadState) &= 0xFD; + break; + case SDLK_RIGHT: + *(gbe_mMap->joyPadState) &= 0xFE; + break; + case SDLK_UP: + *(gbe_mMap->joyPadState) &= 0xFB; + break; + case SDLK_DOWN: + *(gbe_mMap->joyPadState) &= 0xF7; + break; + case SDLK_a: + *(gbe_mMap->joyPadState) &= 0xEF; + break; + case SDLK_s: + *(gbe_mMap->joyPadState) &= 0xDF; + break; + case SDLK_LSHIFT: + *(gbe_mMap->joyPadState) &= 0xBF; + break; + case SDLK_SPACE: + *(gbe_mMap->joyPadState) &= 0x7F; + break; + case SDLK_d: + debug_mode = !debug_mode; + break; + case SDLK_ESCAPE: + exit(0); + default: + break; + } + } + else if (event->key.type == SDL_KEYUP) + { + switch (event->key.keysym.sym) + { + case SDLK_LEFT: + *(gbe_mMap->joyPadState) |= 0x02; + break; + case SDLK_RIGHT: + *(gbe_mMap->joyPadState) |= 0x01; + break; + case SDLK_UP: + *(gbe_mMap->joyPadState) |= 0x04; + break; + case SDLK_DOWN: + *(gbe_mMap->joyPadState) |= 0x08; + break; + case SDLK_a: + *(gbe_mMap->joyPadState) |= 0x10; + break; + case SDLK_s: + *(gbe_mMap->joyPadState) |= 0x20; + break; + case SDLK_LSHIFT: + *(gbe_mMap->joyPadState) |= 0x40; + break; + case SDLK_SPACE: + *(gbe_mMap->joyPadState) |= 0x80; + break; + default: + break; + } + } + } + return false; } \ No newline at end of file diff --git a/src/gameBoy.h b/src/gameBoy.h index 35c22f8..05a1a59 100644 --- a/src/gameBoy.h +++ b/src/gameBoy.h @@ -17,6 +17,7 @@ class GBE // Will upgrade it later for RGB colors of GBC and GBA // Using Byte for now + bool debug_mode; Byte screenData[160][144]; // Pointer to CPU @@ -34,6 +35,9 @@ class GBE // File pointer for game ROM FILE* gameROM; + // Placeholder event for input handling + SDL_Event* event; + // Update function of the GBE // Will be called every frame // GB has 59.73 frames per second @@ -47,11 +51,20 @@ class GBE // execute it and then remove it void executeBootROM(); + // Debug intterupt handler + void debug_int(); + + // Poll Inputs + bool pollEvents(); + + // Get Value of Registers + void getValueOfRegister(char registerName); + public: // Constructor // Initializes the CPU GBE(); // Returns the CPU - CPU* getCPU() { return gbe_cpu; }; + CPU* getCPU() { return gbe_cpu; } }; \ No newline at end of file diff --git a/src/graphics.cpp b/src/graphics.cpp index e1030bb..f8a6b9b 100644 --- a/src/graphics.cpp +++ b/src/graphics.cpp @@ -21,7 +21,6 @@ PPU::PPU() currentLine = 0x00; hiddenWindowLineCounter = 0x00; ppuMode = 0x02; - event = new SDL_Event(); ppuMode = 0; currentClock = modeClocks[ppuMode]; @@ -97,82 +96,6 @@ bool PPU::init() return true; } -// Poll Events to check for inputs -// And process them -bool PPU::pollEvents() -{ - while (SDL_PollEvent(event)) - { - if (event->key.type == SDL_KEYDOWN) - { - switch (event->key.keysym.sym) - { - case SDLK_LEFT: - *(mMap->joyPadState) &= 0xFD; - break; - case SDLK_RIGHT: - *(mMap->joyPadState) &= 0xFE; - break; - case SDLK_UP: - *(mMap->joyPadState) &= 0xFB; - break; - case SDLK_DOWN: - *(mMap->joyPadState) &= 0xF7; - break; - case SDLK_a: - *(mMap->joyPadState) &= 0xEF; - break; - case SDLK_s: - *(mMap->joyPadState) &= 0xDF; - break; - case SDLK_LSHIFT: - *(mMap->joyPadState) &= 0xBF; - break; - case SDLK_SPACE: - *(mMap->joyPadState) &= 0x7F; - break; - case SDLK_ESCAPE: - exit(0); - default: - break; - } - } - else if (event->key.type == SDL_KEYUP) - { - switch (event->key.keysym.sym) - { - case SDLK_LEFT: - *(mMap->joyPadState) |= 0x02; - break; - case SDLK_RIGHT: - *(mMap->joyPadState) |= 0x01; - break; - case SDLK_UP: - *(mMap->joyPadState) |= 0x04; - break; - case SDLK_DOWN: - *(mMap->joyPadState) |= 0x08; - break; - case SDLK_a: - *(mMap->joyPadState) |= 0x10; - break; - case SDLK_s: - *(mMap->joyPadState) |= 0x20; - break; - case SDLK_LSHIFT: - *(mMap->joyPadState) |= 0x40; - break; - case SDLK_SPACE: - *(mMap->joyPadState) |= 0x80; - break; - default: - break; - } - } - } - return false; -} - void PPU::renderScanline(Byte line) { // Evaluate LCDC register diff --git a/src/graphics.h b/src/graphics.h index 79446e3..f7a7741 100644 --- a/src/graphics.h +++ b/src/graphics.h @@ -26,7 +26,6 @@ class PPU SDL_Window* window; SDL_Renderer* renderer; SDL_Texture* texture; - SDL_Event* event; // renderArray to be converted to texture // stores 4 copies of texture for wrapping of screen diff --git a/src/mmap.h b/src/mmap.h index aee176a..9acb487 100644 --- a/src/mmap.h +++ b/src/mmap.h @@ -10,6 +10,7 @@ class MemoryMap private: Byte mbcMode; + FILE* exit; FILE* bootRomFile; FILE* romFile; diff --git a/tests/Tetris.gb b/tests/Tetris.gb new file mode 100644 index 0000000000000000000000000000000000000000..fbcef426f62d80d4c33774aad70653c5ada1d7b6 GIT binary patch literal 32768 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 literal 0 HcmV?d00001 From a312262c7370d0d56ba8b7a6708aef64f879f00e Mon Sep 17 00:00:00 2001 From: sukhman-sukh Date: Thu, 2 Nov 2023 11:24:25 +0530 Subject: [PATCH 02/16] Add stack to debugger Signed-off-by: sukhman-sukh --- .gitignore | 3 ++- src/cpu.cpp | 33 +++++++++++++++++++++++++++++++-- src/cpu.h | 11 +++++++++++ src/gameBoy.cpp | 8 ++++++-- 4 files changed, 50 insertions(+), 5 deletions(-) diff --git a/.gitignore b/.gitignore index 478cd55..f848592 100644 --- a/.gitignore +++ b/.gitignore @@ -4,4 +4,5 @@ build/ cmake-build-debug/ .idea/ src/.vscode/ -src/dmg_boot.gb \ No newline at end of file +src/dmg_boot.gb +tests/Tetris.gb \ No newline at end of file diff --git a/src/cpu.cpp b/src/cpu.cpp index d2a6872..414ed99 100644 --- a/src/cpu.cpp +++ b/src/cpu.cpp @@ -3244,7 +3244,8 @@ int CPU::JP_u16() // CALL NZ, u16 // Call subroutine at address u16 if zero flag is not set. int CPU::CALL_NZ_u16() -{ +{ + pushAddress(reg_PC.dat); if (!GET_ZERO_FLAG) { mMap->writeMemory(--reg_SP.dat, (reg_PC.dat + 3) >> 8); @@ -3298,6 +3299,7 @@ int CPU::ADD_A_u8() // Call subroutine at address 0x0000. int CPU::RST_00H() { + pushAddress(reg_PC.dat); mMap->writeMemory(--reg_SP.dat, (reg_PC.dat + 1) >> 8); mMap->writeMemory(--reg_SP.dat, (reg_PC.dat + 1) & 0xFF); reg_PC.dat = 0x0000; @@ -3366,6 +3368,7 @@ int CPU::PREFIX_CB() // Call subroutine at address u16 if zero flag is set. int CPU::CALL_Z_u16() { + pushAddress(reg_PC.dat); if (GET_ZERO_FLAG) { mMap->writeMemory(--reg_SP.dat, (reg_PC.dat + 3) >> 8); @@ -3385,7 +3388,8 @@ int CPU::CALL_Z_u16() // CALL u16 // Call subroutine at address u16. int CPU::CALL_u16() -{ +{ + pushAddress(reg_PC.dat); mMap->writeMemory(--reg_SP.dat, (reg_PC.dat + 3) >> 8); mMap->writeMemory(--reg_SP.dat, (reg_PC.dat + 3) & 0xFF); reg_PC.dat = (*mMap)[reg_PC.dat + 1] | ((*mMap)[reg_PC.dat + 2] << 8); @@ -3420,6 +3424,7 @@ int CPU::ADC_A_u8() // Call subroutine at address 0x0008. int CPU::RST_08H() { + pushAddress(reg_PC.dat); mMap->writeMemory(--reg_SP.dat, (reg_PC.dat + 1) >> 8); mMap->writeMemory(--reg_SP.dat, (reg_PC.dat + 1) & 0xFF); reg_PC.dat = 0x0008; @@ -3486,6 +3491,7 @@ int CPU::UNKNOWN() // Call subroutine at address u16 if carry flag is not set. int CPU::NC_u16() { + pushAddress(reg_PC.dat); if (!GET_CARRY_FLAG) { mMap->writeMemory(--reg_SP.dat, (reg_PC.dat + 3) >> 8); @@ -3540,6 +3546,7 @@ int CPU::SUB_u8() // Call subroutine at address 0x0010. int CPU::RST_10H() { + pushAddress(reg_PC.dat); mMap->writeMemory(--reg_SP.dat, (reg_PC.dat + 1) >> 8); mMap->writeMemory(--reg_SP.dat, (reg_PC.dat + 1) & 0xFF); reg_PC.dat = 0x0010; @@ -3604,6 +3611,7 @@ int CPU::JP_C_u16() // Call subroutine at address u16 if carry flag is set. int CPU::CALL_C_u16() { + pushAddress(reg_PC.dat); if (GET_CARRY_FLAG) { mMap->writeMemory(--reg_SP.dat, (reg_PC.dat + 3) >> 8); @@ -3649,6 +3657,7 @@ int CPU::SBC_A_u8() // Call subroutine at address 0x0018. int CPU::RST_18H() { + pushAddress(reg_PC.dat); mMap->writeMemory(--reg_SP.dat, (reg_PC.dat + 1) >> 8); mMap->writeMemory(--reg_SP.dat, (reg_PC.dat + 1) & 0xFF); reg_PC.dat = 0x0018; @@ -3715,6 +3724,7 @@ int CPU::AND_A_u8() // Call subroutine at address 0x0020. int CPU::RST_20H() { + pushAddress(reg_PC.dat); mMap->writeMemory(--reg_SP.dat, (reg_PC.dat + 1) >> 8); mMap->writeMemory(--reg_SP.dat, (reg_PC.dat + 1) & 0xFF); reg_PC.dat = 0x0020; @@ -3787,6 +3797,7 @@ int CPU::XOR_A_u8() // Call subroutine at address 0x0028. int CPU::RST_28H() { + pushAddress(reg_PC.dat); mMap->writeMemory(--reg_SP.dat, (reg_PC.dat + 1) >> 8); mMap->writeMemory(--reg_SP.dat, (reg_PC.dat + 1) & 0xFF); reg_PC.dat = 0x0028; @@ -3873,6 +3884,7 @@ int CPU::OR_A_u8() // Call subroutine at address 0x0030. int CPU::RST_30H() { + pushAddress(reg_PC.dat); mMap->writeMemory(--reg_SP.dat, (reg_PC.dat + 1) >> 8); mMap->writeMemory(--reg_SP.dat, (reg_PC.dat + 1) & 0xFF); reg_PC.dat = 0x0030; @@ -3954,6 +3966,7 @@ int CPU::CP_u8() // Call subroutine at address 0x0038. int CPU::RST_38H() { + pushAddress(reg_PC.dat); mMap->writeMemory(--reg_SP.dat, (reg_PC.dat + 1) >> 8); mMap->writeMemory(--reg_SP.dat, (reg_PC.dat + 1) & 0xFF); reg_PC.dat = 0x0038; @@ -7879,4 +7892,20 @@ void CPU::updateTimers(int cycles) // Write reg_TIMA value by calculting from our counter mMap->setRegTIMA(timer_counter.tima / freq); } +} + +void CPU::pushAddress(Word address) { + callerAddresses.push((int)address); +} + +// print elements of calleraddresses stack +void CPU::printStack() { + // Create a copy of the original stack + std::stack tempStack = callerAddresses; + + // Print elements of the stack without emptying it + while (!tempStack.empty()) { + printf("%d\n", tempStack.top()); + tempStack.pop(); + } } \ No newline at end of file diff --git a/src/cpu.h b/src/cpu.h index 3147576..70f97de 100644 --- a/src/cpu.h +++ b/src/cpu.h @@ -2,6 +2,7 @@ #include "types.h" #include "mmap.h" #include "graphics.h" +#include // CPU Register // Pulled from https://gbdev.io/pandocs/CPU_Registers_and_Flags.html @@ -25,6 +26,10 @@ class CPU { private: + + // Create a stack of caller addresses + std::stack callerAddresses; + // Accumulator and Flags Register reg_AF; @@ -1195,4 +1200,10 @@ class CPU // update the timers void updateTimers(int cycles); + + // add elements to calleraddresses stack + void pushAddress(Word address); + + // print elements of calleraddresses stack + void printStack(); }; diff --git a/src/gameBoy.cpp b/src/gameBoy.cpp index ab4517d..07d965d 100644 --- a/src/gameBoy.cpp +++ b/src/gameBoy.cpp @@ -197,7 +197,8 @@ void GBE::debug_int() // enter d for rdx // enter c for rcx // enter b for rbx - // enter E for E + // enter e for E + // enter p to print the stack // enter e to exit info mode while (infoMode) { @@ -236,7 +237,10 @@ void GBE::debug_int() break; case SDLK_l: getValueOfRegister('L'); - break; + break; + case SDLK_p: + gbe_cpu->printStack(); + break; case SDLK_x: infoMode = false; break; From c258d053bd54ba26ea3442971c936b72a6a4c2b1 Mon Sep 17 00:00:00 2001 From: sukhman-sukh Date: Sun, 5 Nov 2023 10:30:33 +0530 Subject: [PATCH 03/16] Print stack functionality Signed-off-by: sukhman-sukh --- src/cpu.cpp | 31 ++++--------------------------- src/cpu.h | 7 ------- 2 files changed, 4 insertions(+), 34 deletions(-) diff --git a/src/cpu.cpp b/src/cpu.cpp index 414ed99..b47efd3 100644 --- a/src/cpu.cpp +++ b/src/cpu.cpp @@ -3245,7 +3245,6 @@ int CPU::JP_u16() // Call subroutine at address u16 if zero flag is not set. int CPU::CALL_NZ_u16() { - pushAddress(reg_PC.dat); if (!GET_ZERO_FLAG) { mMap->writeMemory(--reg_SP.dat, (reg_PC.dat + 3) >> 8); @@ -3299,7 +3298,6 @@ int CPU::ADD_A_u8() // Call subroutine at address 0x0000. int CPU::RST_00H() { - pushAddress(reg_PC.dat); mMap->writeMemory(--reg_SP.dat, (reg_PC.dat + 1) >> 8); mMap->writeMemory(--reg_SP.dat, (reg_PC.dat + 1) & 0xFF); reg_PC.dat = 0x0000; @@ -3368,7 +3366,6 @@ int CPU::PREFIX_CB() // Call subroutine at address u16 if zero flag is set. int CPU::CALL_Z_u16() { - pushAddress(reg_PC.dat); if (GET_ZERO_FLAG) { mMap->writeMemory(--reg_SP.dat, (reg_PC.dat + 3) >> 8); @@ -3389,7 +3386,6 @@ int CPU::CALL_Z_u16() // Call subroutine at address u16. int CPU::CALL_u16() { - pushAddress(reg_PC.dat); mMap->writeMemory(--reg_SP.dat, (reg_PC.dat + 3) >> 8); mMap->writeMemory(--reg_SP.dat, (reg_PC.dat + 3) & 0xFF); reg_PC.dat = (*mMap)[reg_PC.dat + 1] | ((*mMap)[reg_PC.dat + 2] << 8); @@ -3424,7 +3420,6 @@ int CPU::ADC_A_u8() // Call subroutine at address 0x0008. int CPU::RST_08H() { - pushAddress(reg_PC.dat); mMap->writeMemory(--reg_SP.dat, (reg_PC.dat + 1) >> 8); mMap->writeMemory(--reg_SP.dat, (reg_PC.dat + 1) & 0xFF); reg_PC.dat = 0x0008; @@ -3491,7 +3486,6 @@ int CPU::UNKNOWN() // Call subroutine at address u16 if carry flag is not set. int CPU::NC_u16() { - pushAddress(reg_PC.dat); if (!GET_CARRY_FLAG) { mMap->writeMemory(--reg_SP.dat, (reg_PC.dat + 3) >> 8); @@ -3546,7 +3540,6 @@ int CPU::SUB_u8() // Call subroutine at address 0x0010. int CPU::RST_10H() { - pushAddress(reg_PC.dat); mMap->writeMemory(--reg_SP.dat, (reg_PC.dat + 1) >> 8); mMap->writeMemory(--reg_SP.dat, (reg_PC.dat + 1) & 0xFF); reg_PC.dat = 0x0010; @@ -3611,7 +3604,6 @@ int CPU::JP_C_u16() // Call subroutine at address u16 if carry flag is set. int CPU::CALL_C_u16() { - pushAddress(reg_PC.dat); if (GET_CARRY_FLAG) { mMap->writeMemory(--reg_SP.dat, (reg_PC.dat + 3) >> 8); @@ -3657,7 +3649,6 @@ int CPU::SBC_A_u8() // Call subroutine at address 0x0018. int CPU::RST_18H() { - pushAddress(reg_PC.dat); mMap->writeMemory(--reg_SP.dat, (reg_PC.dat + 1) >> 8); mMap->writeMemory(--reg_SP.dat, (reg_PC.dat + 1) & 0xFF); reg_PC.dat = 0x0018; @@ -3723,8 +3714,7 @@ int CPU::AND_A_u8() // RST 20H // Call subroutine at address 0x0020. int CPU::RST_20H() -{ - pushAddress(reg_PC.dat); +{ mMap->writeMemory(--reg_SP.dat, (reg_PC.dat + 1) >> 8); mMap->writeMemory(--reg_SP.dat, (reg_PC.dat + 1) & 0xFF); reg_PC.dat = 0x0020; @@ -3797,7 +3787,6 @@ int CPU::XOR_A_u8() // Call subroutine at address 0x0028. int CPU::RST_28H() { - pushAddress(reg_PC.dat); mMap->writeMemory(--reg_SP.dat, (reg_PC.dat + 1) >> 8); mMap->writeMemory(--reg_SP.dat, (reg_PC.dat + 1) & 0xFF); reg_PC.dat = 0x0028; @@ -3884,7 +3873,6 @@ int CPU::OR_A_u8() // Call subroutine at address 0x0030. int CPU::RST_30H() { - pushAddress(reg_PC.dat); mMap->writeMemory(--reg_SP.dat, (reg_PC.dat + 1) >> 8); mMap->writeMemory(--reg_SP.dat, (reg_PC.dat + 1) & 0xFF); reg_PC.dat = 0x0030; @@ -3965,8 +3953,7 @@ int CPU::CP_u8() // RST 38H // Call subroutine at address 0x0038. int CPU::RST_38H() -{ - pushAddress(reg_PC.dat); +{ mMap->writeMemory(--reg_SP.dat, (reg_PC.dat + 1) >> 8); mMap->writeMemory(--reg_SP.dat, (reg_PC.dat + 1) & 0xFF); reg_PC.dat = 0x0038; @@ -7894,18 +7881,8 @@ void CPU::updateTimers(int cycles) } } -void CPU::pushAddress(Word address) { - callerAddresses.push((int)address); -} - // print elements of calleraddresses stack void CPU::printStack() { - // Create a copy of the original stack - std::stack tempStack = callerAddresses; - - // Print elements of the stack without emptying it - while (!tempStack.empty()) { - printf("%d\n", tempStack.top()); - tempStack.pop(); - } + for(Word i = reg_SP.dat ; i < 0xCFFF ; i++) + printf("%hu",(*mMap)[i]); } \ No newline at end of file diff --git a/src/cpu.h b/src/cpu.h index 70f97de..f341942 100644 --- a/src/cpu.h +++ b/src/cpu.h @@ -27,9 +27,6 @@ class CPU private: - // Create a stack of caller addresses - std::stack callerAddresses; - // Accumulator and Flags Register reg_AF; @@ -1201,9 +1198,5 @@ class CPU // update the timers void updateTimers(int cycles); - // add elements to calleraddresses stack - void pushAddress(Word address); - - // print elements of calleraddresses stack void printStack(); }; From 623f3082d4891cc7ccf0be6e17361f6147991855 Mon Sep 17 00:00:00 2001 From: sukhman-sukh Date: Mon, 6 Nov 2023 13:15:27 +0530 Subject: [PATCH 04/16] Print stack functionality Signed-off-by: sukhman-sukh --- src/cpu.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/cpu.cpp b/src/cpu.cpp index b47efd3..e3981b4 100644 --- a/src/cpu.cpp +++ b/src/cpu.cpp @@ -7883,6 +7883,7 @@ void CPU::updateTimers(int cycles) // print elements of calleraddresses stack void CPU::printStack() { - for(Word i = reg_SP.dat ; i < 0xCFFF ; i++) - printf("%hu",(*mMap)[i]); + printf("Printing Stack...."); + for(Word i = reg_SP.dat ; i <= 0xCFFF ; i++) + printf("Address at stack_pointer %hu is %hu ", i, (*mMap)[i]); } \ No newline at end of file From c9bb618c4bf796dfbfd13c9dde3de46ae1fe7bf9 Mon Sep 17 00:00:00 2001 From: sukhman-sukh Date: Mon, 6 Nov 2023 14:32:03 +0530 Subject: [PATCH 05/16] Print stack functionality Signed-off-by: sukhman-sukh --- src/cpu.cpp | 2 +- src/gameBoy.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/cpu.cpp b/src/cpu.cpp index e3981b4..5888b46 100644 --- a/src/cpu.cpp +++ b/src/cpu.cpp @@ -7885,5 +7885,5 @@ void CPU::updateTimers(int cycles) void CPU::printStack() { printf("Printing Stack...."); for(Word i = reg_SP.dat ; i <= 0xCFFF ; i++) - printf("Address at stack_pointer %hu is %hu ", i, (*mMap)[i]); + printf("Address at stack_pointer %hu is %hu \n", i, (*mMap)[i]); } \ No newline at end of file diff --git a/src/gameBoy.cpp b/src/gameBoy.cpp index 07d965d..68759ef 100644 --- a/src/gameBoy.cpp +++ b/src/gameBoy.cpp @@ -189,7 +189,7 @@ void GBE::debug_int() shouldAdv = true; break; case SDLK_i: - printf("Info Mode:- "); + printf("Info Mode:- \n"); infoMode = true; shouldAdv = true; // Press r to print all registers From c7e93c2986d379651c9035a0c64542c01b28faac Mon Sep 17 00:00:00 2001 From: sukhman-sukh Date: Thu, 30 Nov 2023 04:19:53 +0530 Subject: [PATCH 06/16] Add BGMap, OAM table, Tiles table for debugger Signed-off-by: sukhman-sukh --- .vscode/settings.json | 9 ++- src/cpu.cpp | 21 +++++- src/gameBoy.cpp | 50 +++++++++++-- src/gameBoy.h | 2 +- src/graphics.cpp | 167 ++++++++++++++++++++++++++++++++++++++---- src/graphics.h | 13 +++- 6 files changed, 239 insertions(+), 23 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index bedc2f7..f9e58cf 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -11,6 +11,13 @@ "functional": "cpp", "tuple": "cpp", "type_traits": "cpp", - "utility": "cpp" + "utility": "cpp", + "any": "cpp", + "mutex": "cpp", + "new": "cpp", + "streambuf": "cpp", + "typeinfo": "cpp", + "variant": "cpp", + "*.inc": "cpp" } } \ No newline at end of file diff --git a/src/cpu.cpp b/src/cpu.cpp index 5888b46..20b85e9 100644 --- a/src/cpu.cpp +++ b/src/cpu.cpp @@ -7883,7 +7883,24 @@ void CPU::updateTimers(int cycles) // print elements of calleraddresses stack void CPU::printStack() { + int count = 0; printf("Printing Stack...."); - for(Word i = reg_SP.dat ; i <= 0xCFFF ; i++) - printf("Address at stack_pointer %hu is %hu \n", i, (*mMap)[i]); + for(Word i = reg_SP.dat ; i <= 0xFFFE ; i++) + { printf("Address at stack_pointer %hu is %hu \n", i, (*mMap)[i]); + count++; + if(count == 100){ + char choice; + printf("Hit q to show next 100 addresses and x to exit\n"); + scanf("%c", &choice); + printf("%c",choice); + if(choice == 'q'){ + count = 0; + continue; + } + else { + printf("Exiting Stack\n"); + break; + } + } + } } \ No newline at end of file diff --git a/src/gameBoy.cpp b/src/gameBoy.cpp index 68759ef..f67b402 100644 --- a/src/gameBoy.cpp +++ b/src/gameBoy.cpp @@ -171,6 +171,7 @@ void GBE::debug_int() printf("\nEntered debug mode\n"); bool shouldAdv = false; bool infoMode; + bool debuggerMode = false; while (!shouldAdv) { while (SDL_PollEvent(event)) @@ -188,16 +189,54 @@ void GBE::debug_int() printf("pressed d\n"); shouldAdv = true; break; + // Left control to open Debugger window + // b for bgMap + // t to show current tiles on screen + // s to show sprites on screen + case SDLK_LCTRL: + gbe_graphics->debuggerInit(); + debuggerMode = true; + while (debuggerMode) + { + while (SDL_PollEvent(event)) + { + if (event->key.type == SDL_KEYUP) + { + switch (event->key.keysym.sym) + { + case SDLK_b: + gbe_graphics->listBgMap(); + break; + case SDLK_s: + gbe_graphics->listSprites(); + break; + case SDLK_t: + gbe_graphics->listTiles(); + break; + case SDLK_ESCAPE: + gbe_graphics->close(true); + debuggerMode = false; + break; + default: + break; + } + } + } + } + break; case SDLK_i: printf("Info Mode:- \n"); infoMode = true; shouldAdv = true; // Press r to print all registers - // enter a for rax - // enter d for rdx - // enter c for rcx - // enter b for rbx + // enter a for A + // enter d for D + // enter c for C + // enter b for B // enter e for E + // enter h for H + // enter l for L + // press left ctrl to open V-Ram debugger window // enter p to print the stack // enter e to exit info mode while (infoMode) @@ -243,7 +282,7 @@ void GBE::debug_int() break; case SDLK_x: infoMode = false; - break; + break; default: break; } @@ -311,6 +350,7 @@ bool GBE::pollEvents() debug_mode = !debug_mode; break; case SDLK_ESCAPE: + gbe_graphics->close(false); exit(0); default: break; diff --git a/src/gameBoy.h b/src/gameBoy.h index 05a1a59..eb15c83 100644 --- a/src/gameBoy.h +++ b/src/gameBoy.h @@ -15,7 +15,7 @@ class GBE // Pulled from https://gbdev.io/pandocs/Specifications.html // We might use an enum for the colors // Will upgrade it later for RGB colors of GBC and GBA - // Using Byte for now + // Using Byte gbe_graphicsfor now bool debug_mode; Byte screenData[160][144]; diff --git a/src/graphics.cpp b/src/graphics.cpp index f8a6b9b..a5b99e5 100644 --- a/src/graphics.cpp +++ b/src/graphics.cpp @@ -10,7 +10,7 @@ PPU::PPU() isEnabled = false; showBGWin = false; showWindow = false; - //renderWindow = false; + // renderWindow = false; mMap = nullptr; bgTileDataAddr = 0x0000; bgTileMapAddr = 0x0000; @@ -21,6 +21,10 @@ PPU::PPU() currentLine = 0x00; hiddenWindowLineCounter = 0x00; ppuMode = 0x02; + // Initialize debugger members + debugWindow = nullptr; + debugRenderer = nullptr; + debugTexture = nullptr; ppuMode = 0; currentClock = modeClocks[ppuMode]; @@ -28,6 +32,8 @@ PPU::PPU() frameRendered = false; // Fill renderArray initially with white (lightest color in palette) + std::fill(renderSprites, renderSprites + (160 * 144), bg_colors[0]); + std::fill(renderTiles, renderTiles + (160 * 144), bg_colors[0]); std::fill(renderArray, renderArray + (160 * 144), bg_colors[0]); } @@ -96,11 +102,105 @@ bool PPU::init() return true; } +bool PPU::debuggerInit() +{ + // Initialize SDL + if (SDL_Init(SDL_INIT_VIDEO) < 0) + { + printf("SDL could not initialize! SDL_Error: %s\n", SDL_GetError()); + return false; + } + + // Set hint to use hardware acceleration + if (!SDL_SetHint(SDL_HINT_RENDER_SCALE_QUALITY, "1")) + { + printf("Hardware Acceleration not enabled! SDL_Error: %s\n", SDL_GetError()); + return false; + } + + // Set hint for VSync + if (!SDL_SetHint(SDL_HINT_RENDER_VSYNC, "1")) + { + printf("VSync not enabled! SDL_Error: %s\n", SDL_GetError()); + return false; + } + + // Create window and renderer + if (!(debugWindow = SDL_CreateWindow("GameBoy Debugger", 0, 0, SCREEN_WIDTH * 2, SCREEN_HEIGHT * 2, SDL_WINDOW_SHOWN))) + { + printf("Debugger Window could not be created! SDL_Error: %s\n", SDL_GetError()); + return false; + } + + if (!(debugRenderer = SDL_CreateRenderer(debugWindow, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC))) + { + printf("Renderer could not be created! SDL_Error: %s\n", SDL_GetError()); + return false; + } + // Create a placeholder debugTexture + // 512x512 to have 4 copies of tilemap + debugTexture = SDL_CreateTexture(debugRenderer, SDL_PIXELFORMAT_RGBA8888, SDL_TEXTUREACCESS_STATIC, 160, 144); + + listTiles(); + // Render the debugTexture + SDL_UpdateTexture(debugTexture, NULL, renderTiles, 160 * 4); + SDL_RenderClear(debugRenderer); + SDL_RenderCopy(debugRenderer, debugTexture, NULL, NULL); + SDL_RenderPresent(debugRenderer); + return true; +} + +void PPU::listBgMap() +{ + SDL_UpdateTexture(debugTexture, NULL, renderBGMap, 160 * 4); + SDL_RenderClear(debugRenderer); + SDL_RenderCopy(debugRenderer, debugTexture, NULL, NULL); + SDL_RenderPresent(debugRenderer); +} + +void PPU::listSprites() +{ + if (!scanlineRendered) + { + renderScanline(mMap->getRegLY()); + scanlineRendered = true; + } + SDL_UpdateTexture(debugTexture, NULL, renderSprites, 160 * 4); + SDL_RenderClear(debugRenderer); + SDL_RenderCopy(debugRenderer, debugTexture, NULL, NULL); + SDL_RenderPresent(debugRenderer); +} + +// We are reading values from 0x8000 to 0x8fff +// Outer loop increments for every new tile to be rendered +// Middle loop increments for every line of tile +// Inner loop increments for every pixel of line of tile. +// We are printing 14 tiles in a row with gap of 2 between each tile { (tileNumber % 14) * 10) + j + 8) } +void PPU::listTiles() +{ + int tileNumber = 0; + Byte pixel_col; + for (Word tileAddr = 0x8000; tileAddr < 0x8FFF; tileAddr += 0x10) + { + if ((*mMap)[tileAddr] == 0) + continue; + for (int i = 0; i < 8; i++) + { + for (int j = 0; j < 8; j++) + { + pixel_col = ((*mMap)[(tileAddr + 0x2 * (Word)i)] >> (7 - j) & 0x1) + (((*mMap)[(tileAddr + 0x2 * (Word)i) + 1] >> (7 - j) & 0x1) * 2); + renderTiles[((static_cast(tileNumber / 14) * 10) + i) * 160 + (((tileNumber % 14) * 10) + j + 8)] = bg_colors[(bgPalette >> (pixel_col * 2)) & 0x3]; + } + } + tileNumber += 1; + } +} + void PPU::renderScanline(Byte line) { // Evaluate LCDC register Byte LCDC = mMap->getRegLCDC(); - + int spriteCount = 0; isEnabled = (LCDC & 0x80); showBGWin = (LCDC & 0x1); showWindow = (LCDC & 0x20); @@ -169,9 +269,17 @@ void PPU::renderScanline(Byte line) } if (showBGWin) + { renderArray[(line * 160) + j] = bg_colors[(bgPalette >> (bg_pixel_col * 2)) & 0x3]; + renderSprites[(line * 160) + j] = bg_colors[0]; + renderBGMap[(line * 160) + j] = bg_colors[(bgPalette >> (bg_pixel_col * 2)) & 0x3]; + } else + { renderArray[(line * 160) + j] = bg_colors[0]; + renderSprites[(line * 160) + j] = bg_colors[0]; + renderBGMap[(line * 160) + j] = bg_colors[0]; + } // Window rendering if (showBGWin && showWindow && ((win_y <= line) && (win_y < 144)) && (win_x < 160) && (hiddenWindowLineCounter < 144) && (j >= win_x)) @@ -199,6 +307,7 @@ void PPU::renderScanline(Byte line) // Sprite rendering if (showSprites) { + sprites.clear(); for (Word i = 0xFE00; i < 0xFEA0; i += 4) { @@ -218,10 +327,12 @@ void PPU::renderScanline(Byte line) } if (sprites.size()) - std::sort(sprites.begin(), sprites.end(), [](Sprite& a, Sprite& b) { return (((a.x == b.x) && (a.address > b.address)) || (a.x > b.x)); }); - + std::sort(sprites.begin(), sprites.end(), [](Sprite& a, Sprite& b) + { return (((a.x == b.x) && (a.address > b.address)) || (a.x > b.x)); }); + spriteCount = 0; for (auto it = sprites.begin(); it != sprites.end(); ++it) { + sprite_palette = (it->flags & 0x10) ? objPalette1 : objPalette0; for (int i = 0; i < 8; i++) { @@ -248,9 +359,15 @@ void PPU::renderScanline(Byte line) if (sprite_pixel_col != 0) { if (((it->x + i - 8) < 160) && (!(it->flags & 0x80) || (renderArray[(line * 160) + (it->x + i - 8)] == bg_colors[0]))) + { renderArray[(line * 160) + (it->x + i - 8)] = bg_colors[(sprite_palette >> (sprite_pixel_col * 2)) & 0x3]; + renderSprites[(line * 160) + ((spriteCount * 10) + i + 8)] = bg_colors[(sprite_palette >> (sprite_pixel_col * 2)) & 0x3]; + // renderSprites[((120+(static_cast(spriteCount/20)*2)) * 160) + ((spriteCount%20)*2 + i - 8)] = bg_colors[(sprite_palette >> (sprite_pixel_col * 2)) & 0x3]; + // renderSprites[(80+((static_cast(spriteCount/20))) * 160) + (it->x + i - 8)] = bg_colors[(sprite_palette >> (sprite_pixel_col * 2)) & 0x3]; + } } } + spriteCount++; } } } @@ -392,17 +509,41 @@ void PPU::executePPU(int cycles) } } -void PPU::close() +// void PPU::debuggerRender() +// { +// if (!scanlineRendered) +// { +// renderScanline(mMap->getRegLY()); +// scanlineRendered = true; +// } +// } +// if debug == true; it will vanish "Gameboy Debugger" screen. +// if debug == false; it will vanish "Gameboy Emulator" screen. +void PPU::close(bool debug) { - // Destroy texture - SDL_DestroyTexture(texture); + if (debug) + { + // Destroy texture + SDL_DestroyTexture(debugTexture); + + // Destroy renderer + SDL_DestroyRenderer(debugRenderer); - // Destroy renderer - SDL_DestroyRenderer(renderer); + // Destroy window + SDL_DestroyWindow(debugWindow); + } + else + { + // Destroy texture + SDL_DestroyTexture(texture); - // Destroy window - SDL_DestroyWindow(window); + // Destroy renderer + SDL_DestroyRenderer(renderer); - // Quit SDL subsystems - SDL_Quit(); + // Destroy window + SDL_DestroyWindow(window); + + // Quit SDL subsystems + SDL_Quit(); + } } \ No newline at end of file diff --git a/src/graphics.h b/src/graphics.h index f7a7741..60a1361 100644 --- a/src/graphics.h +++ b/src/graphics.h @@ -27,9 +27,16 @@ class PPU SDL_Renderer* renderer; SDL_Texture* texture; + SDL_Window* debugWindow; + SDL_Renderer* debugRenderer; + SDL_Texture* debugTexture; + // renderArray to be converted to texture // stores 4 copies of texture for wrapping of screen color renderArray[160 * 144]; + color renderBGMap[160 * 144]; + color renderTiles[160 * 144]; + color renderSprites[160 * 144]; MemoryMap* mMap; @@ -115,9 +122,13 @@ class PPU public: PPU(); bool init(); + bool debuggerInit(); + void listBgMap(); + void listTiles(); + void listSprites(); bool pollEvents(); void renderScanline(Byte line); - void close(); + void close(bool debug); void setMemoryMap(MemoryMap* m) { mMap = m; } void executePPU(int cycles); Byte getPPUMode() { return ppuMode; } From c41ef3fad666486b446061bd2b2864faf60b701d Mon Sep 17 00:00:00 2001 From: sukhman-sukh Date: Fri, 8 Dec 2023 01:48:31 +0530 Subject: [PATCH 07/16] WIP Signed-off-by: sukhman-sukh --- .gitignore | 4 ++++ src/CMakeLists.txt | 3 ++- src/gameBoy.cpp | 2 +- src/graphics.cpp | 53 +++++++++++++++++++++++++++++++++++++++------ src/graphics.h | 3 +++ src/lazy.ttf | Bin 0 -> 103160 bytes 6 files changed, 56 insertions(+), 9 deletions(-) create mode 100644 src/lazy.ttf diff --git a/.gitignore b/.gitignore index f848592..9502763 100644 --- a/.gitignore +++ b/.gitignore @@ -1,8 +1,12 @@ .vs/ +.vscode/ +CMakeFiles/ build/ *.DS_Store cmake-build-debug/ .idea/ src/.vscode/ +src/CMakeFiles/ +src/Makefile src/dmg_boot.gb tests/Tetris.gb \ No newline at end of file diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 2177555..3a7885d 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -17,6 +17,7 @@ set(SOURCES target_sources(${PROJECT_NAME} PRIVATE ${SOURCES}) set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules) find_package(SDL2 REQUIRED) +find_package(SDL2_ttf REQUIRED) include_directories(${SDL2_INCLUDE_DIRS}) if (MSVC) @@ -27,4 +28,4 @@ endif () target_link_libraries(${PROJECT_NAME} ${SDL2_LIBRARIES}) -set(SDL2_INCLUDE_DIRS "${CMAKE_CURRENT_LIST_DIR}/include") +set(SDL2_INCLUDE_DIRS "${CMAKE_CURRENT_LIST_DIR}/include") \ No newline at end of file diff --git a/src/gameBoy.cpp b/src/gameBoy.cpp index f67b402..60d6143 100644 --- a/src/gameBoy.cpp +++ b/src/gameBoy.cpp @@ -208,7 +208,7 @@ void GBE::debug_int() gbe_graphics->listBgMap(); break; case SDLK_s: - gbe_graphics->listSprites(); + gbe_graphics->init_ttl(); break; case SDLK_t: gbe_graphics->listTiles(); diff --git a/src/graphics.cpp b/src/graphics.cpp index a5b99e5..6c26e8c 100644 --- a/src/graphics.cpp +++ b/src/graphics.cpp @@ -160,15 +160,56 @@ void PPU::listBgMap() void PPU::listSprites() { + // init_ttl(debugRenderer); if (!scanlineRendered) { renderScanline(mMap->getRegLY()); scanlineRendered = true; } - SDL_UpdateTexture(debugTexture, NULL, renderSprites, 160 * 4); - SDL_RenderClear(debugRenderer); - SDL_RenderCopy(debugRenderer, debugTexture, NULL, NULL); - SDL_RenderPresent(debugRenderer); + // SDL_UpdateTexture(debugTexture, NULL, renderSprites, 160 * 4); + // SDL_RenderClear(debugRenderer); + // SDL_RenderCopy(debugRenderer, debugTexture, NULL, NULL); + // SDL_RenderPresent(debugRenderer); +} + +void PPU::init_ttl() +{ + SDL_Init( SDL_INIT_EVERYTHING ); + if ( TTF_Init() < 0) + { + printf("Error intializing SDL_ttf: %s\n", TTF_GetError()); + } + // char* font_path; + // font_path = "lazy.ttf"; + TTF_Font* font = TTF_OpenFont("lazy.ttf", 24); + if (!font) + { + printf("Error loading font: %s\n", TTF_GetError()); + } + int text_width; + int text_height; + SDL_Rect dest; + SDL_Color textColor = { 255, 255, 255 }; + // char* input; + // input = "Hey sexyyy"; + + SDL_Surface* text_surf = TTF_RenderText_Solid(font, "Hey sexyyy", textColor); + SDL_Texture *text = SDL_CreateTextureFromSurface(debugRenderer, text_surf); + + dest.x = 160 - (text_surf->w / 2.0f); + dest.y = 140; + dest.w = text_surf->w; + dest.h = text_surf->h; + SDL_RenderCopy(debugRenderer, text, NULL, &dest); + + SDL_DestroyTexture(text); + SDL_FreeSurface(text_surf); + + SDL_RenderPresent( debugRenderer ); + // SDL_RenderClear(debugRenderer); + // SDL_RenderCopy(debugRenderer, debugTexture, NULL, NULL); + // SDL_RenderPresent(debugRenderer); + // surface = TTF_RenderText_Solid(font, text, textColor); } // We are reading values from 0x8000 to 0x8fff @@ -361,9 +402,7 @@ void PPU::renderScanline(Byte line) if (((it->x + i - 8) < 160) && (!(it->flags & 0x80) || (renderArray[(line * 160) + (it->x + i - 8)] == bg_colors[0]))) { renderArray[(line * 160) + (it->x + i - 8)] = bg_colors[(sprite_palette >> (sprite_pixel_col * 2)) & 0x3]; - renderSprites[(line * 160) + ((spriteCount * 10) + i + 8)] = bg_colors[(sprite_palette >> (sprite_pixel_col * 2)) & 0x3]; - // renderSprites[((120+(static_cast(spriteCount/20)*2)) * 160) + ((spriteCount%20)*2 + i - 8)] = bg_colors[(sprite_palette >> (sprite_pixel_col * 2)) & 0x3]; - // renderSprites[(80+((static_cast(spriteCount/20))) * 160) + (it->x + i - 8)] = bg_colors[(sprite_palette >> (sprite_pixel_col * 2)) & 0x3]; + renderSprites[(line * 160) + ((spriteCount * 40) + i + 8)] = bg_colors[(sprite_palette >> (sprite_pixel_col * 2)) & 0x3]; } } } diff --git a/src/graphics.h b/src/graphics.h index 60a1361..f731ef7 100644 --- a/src/graphics.h +++ b/src/graphics.h @@ -7,8 +7,10 @@ #ifdef __linux__ #include +#include #else #include +#include #endif struct Sprite @@ -123,6 +125,7 @@ class PPU PPU(); bool init(); bool debuggerInit(); + void init_ttl(); void listBgMap(); void listTiles(); void listSprites(); diff --git a/src/lazy.ttf b/src/lazy.ttf new file mode 100644 index 0000000000000000000000000000000000000000..eb1000bcad0d83e1d1561bbcf191b2173ede705c GIT binary patch literal 103160 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�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 a`x4{NwZ~TeMEiyI=ZsHkUuIm9@&5wKjBWw| literal 0 HcmV?d00001 From 079e829b6d77a4328c0e10b55dca9ecd98362e9e Mon Sep 17 00:00:00 2001 From: Pragyansh Chaturvedi Date: Sun, 17 Dec 2023 11:46:39 +0530 Subject: [PATCH 08/16] Fix CMakeLists.txt for SDL2 extensions --- src/CMakeLists.txt | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 3a7885d..78d7d85 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -16,8 +16,10 @@ set(SOURCES target_sources(${PROJECT_NAME} PRIVATE ${SOURCES}) set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules) -find_package(SDL2 REQUIRED) -find_package(SDL2_ttf REQUIRED) + +find_package(PkgConfig) +pkg_check_modules(SDL2 REQUIRED sdl2 SDL2_ttf) + include_directories(${SDL2_INCLUDE_DIRS}) if (MSVC) @@ -28,4 +30,4 @@ endif () target_link_libraries(${PROJECT_NAME} ${SDL2_LIBRARIES}) -set(SDL2_INCLUDE_DIRS "${CMAKE_CURRENT_LIST_DIR}/include") \ No newline at end of file +set(SDL2_INCLUDE_DIRS "${CMAKE_CURRENT_LIST_DIR}/include") From 98dc9f55235882b851d958bbc194a055201812cc Mon Sep 17 00:00:00 2001 From: Sukhman Singh <63765293+sukhman-sukh@users.noreply.github.com> Date: Thu, 21 Dec 2023 20:41:00 +0530 Subject: [PATCH 09/16] Delete src/Makefile --- src/Makefile | 140 --------------------------------------------------- 1 file changed, 140 deletions(-) delete mode 100644 src/Makefile diff --git a/src/Makefile b/src/Makefile deleted file mode 100644 index 5f9ccf9..0000000 --- a/src/Makefile +++ /dev/null @@ -1,140 +0,0 @@ -# CMAKE generated file: DO NOT EDIT! -# Generated by "Unix Makefiles" Generator, CMake Version 3.27 - -# Default target executed when no arguments are given to make. -default_target: all -.PHONY : default_target - -# Allow only one "make -f Makefile2" at a time, but pass parallelism. -.NOTPARALLEL: - -#============================================================================= -# Special targets provided by cmake. - -# Disable implicit rules so canonical targets will work. -.SUFFIXES: - -# Disable VCS-based implicit rules. -% : %,v - -# Disable VCS-based implicit rules. -% : RCS/% - -# Disable VCS-based implicit rules. -% : RCS/%,v - -# Disable VCS-based implicit rules. -% : SCCS/s.% - -# Disable VCS-based implicit rules. -% : s.% - -.SUFFIXES: .hpux_make_needs_suffix_list - -# Command-line flag to silence nested $(MAKE). -$(VERBOSE)MAKESILENT = -s - -#Suppress display of executed commands. -$(VERBOSE).SILENT: - -# A target that is always out of date. -cmake_force: -.PHONY : cmake_force - -#============================================================================= -# Set environment variables for the build. - -# The shell in which to execute make rules. -SHELL = /bin/sh - -# The CMake executable. -CMAKE_COMMAND = /usr/bin/cmake - -# The command to remove a file. -RM = /usr/bin/cmake -E rm -f - -# Escaping for special characters. -EQUALS = = - -# The top-level source directory on which CMake was run. -CMAKE_SOURCE_DIR = "/home/death/Desktop/linux backup/sdsLabs/gbemu" - -# The top-level build directory on which CMake was run. -CMAKE_BINARY_DIR = "/home/death/Desktop/linux backup/sdsLabs/gbemu" - -#============================================================================= -# Targets provided globally by CMake. - -# Special rule for the target edit_cache -edit_cache: - @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Running CMake cache editor..." - /usr/bin/ccmake -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) -.PHONY : edit_cache - -# Special rule for the target edit_cache -edit_cache/fast: edit_cache -.PHONY : edit_cache/fast - -# Special rule for the target rebuild_cache -rebuild_cache: - @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Running CMake to regenerate build system..." - /usr/bin/cmake --regenerate-during-build -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) -.PHONY : rebuild_cache - -# Special rule for the target rebuild_cache -rebuild_cache/fast: rebuild_cache -.PHONY : rebuild_cache/fast - -# The main all target -all: cmake_check_build_system - cd "/home/death/Desktop/linux backup/sdsLabs/gbemu" && $(CMAKE_COMMAND) -E cmake_progress_start "/home/death/Desktop/linux backup/sdsLabs/gbemu/CMakeFiles" "/home/death/Desktop/linux backup/sdsLabs/gbemu/src//CMakeFiles/progress.marks" - cd "/home/death/Desktop/linux backup/sdsLabs/gbemu" && $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 src/all - $(CMAKE_COMMAND) -E cmake_progress_start "/home/death/Desktop/linux backup/sdsLabs/gbemu/CMakeFiles" 0 -.PHONY : all - -# The main clean target -clean: - cd "/home/death/Desktop/linux backup/sdsLabs/gbemu" && $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 src/clean -.PHONY : clean - -# The main clean target -clean/fast: clean -.PHONY : clean/fast - -# Prepare targets for installation. -preinstall: all - cd "/home/death/Desktop/linux backup/sdsLabs/gbemu" && $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 src/preinstall -.PHONY : preinstall - -# Prepare targets for installation. -preinstall/fast: - cd "/home/death/Desktop/linux backup/sdsLabs/gbemu" && $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 src/preinstall -.PHONY : preinstall/fast - -# clear depends -depend: - cd "/home/death/Desktop/linux backup/sdsLabs/gbemu" && $(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 1 -.PHONY : depend - -# Help Target -help: - @echo "The following are some of the valid targets for this Makefile:" - @echo "... all (the default if no target is provided)" - @echo "... clean" - @echo "... depend" - @echo "... edit_cache" - @echo "... rebuild_cache" -.PHONY : help - - - -#============================================================================= -# Special targets to cleanup operation of make. - -# Special rule to run CMake to check the build system integrity. -# No rule that depends on this can have commands that come from listfiles -# because they might be regenerated. -cmake_check_build_system: - cd "/home/death/Desktop/linux backup/sdsLabs/gbemu" && $(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 0 -.PHONY : cmake_check_build_system - From 3e2705d49b7b8c9a7c4d0496120d931b8a0e07b0 Mon Sep 17 00:00:00 2001 From: Sukhman Singh <63765293+sukhman-sukh@users.noreply.github.com> Date: Thu, 21 Dec 2023 20:41:14 +0530 Subject: [PATCH 10/16] Delete src/cmake_install.cmake --- src/cmake_install.cmake | 44 ----------------------------------------- 1 file changed, 44 deletions(-) delete mode 100644 src/cmake_install.cmake diff --git a/src/cmake_install.cmake b/src/cmake_install.cmake deleted file mode 100644 index 0e2e517..0000000 --- a/src/cmake_install.cmake +++ /dev/null @@ -1,44 +0,0 @@ -# Install script for directory: /home/death/Desktop/linux backup/sdsLabs/gbemu/src - -# Set the install prefix -if(NOT DEFINED CMAKE_INSTALL_PREFIX) - set(CMAKE_INSTALL_PREFIX "/usr/local") -endif() -string(REGEX REPLACE "/$" "" CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}") - -# Set the install configuration name. -if(NOT DEFINED CMAKE_INSTALL_CONFIG_NAME) - if(BUILD_TYPE) - string(REGEX REPLACE "^[^A-Za-z0-9_]+" "" - CMAKE_INSTALL_CONFIG_NAME "${BUILD_TYPE}") - else() - set(CMAKE_INSTALL_CONFIG_NAME "") - endif() - message(STATUS "Install configuration: \"${CMAKE_INSTALL_CONFIG_NAME}\"") -endif() - -# Set the component getting installed. -if(NOT CMAKE_INSTALL_COMPONENT) - if(COMPONENT) - message(STATUS "Install component: \"${COMPONENT}\"") - set(CMAKE_INSTALL_COMPONENT "${COMPONENT}") - else() - set(CMAKE_INSTALL_COMPONENT) - endif() -endif() - -# Install shared libraries without execute permission? -if(NOT DEFINED CMAKE_INSTALL_SO_NO_EXE) - set(CMAKE_INSTALL_SO_NO_EXE "0") -endif() - -# Is this installation the result of a crosscompile? -if(NOT DEFINED CMAKE_CROSSCOMPILING) - set(CMAKE_CROSSCOMPILING "FALSE") -endif() - -# Set default install directory permissions. -if(NOT DEFINED CMAKE_OBJDUMP) - set(CMAKE_OBJDUMP "/usr/bin/objdump") -endif() - From a5e469c39f5562f01d3e1ac0ad9e3ea1ce903420 Mon Sep 17 00:00:00 2001 From: sukhman-sukh Date: Thu, 21 Dec 2023 20:51:43 +0530 Subject: [PATCH 11/16] WIP:2 Render Oam Table Signed-off-by: sukhman-sukh --- src/gameBoy.cpp | 3 +- src/graphics.cpp | 135 ++++++++++++++++++++++++++++++++++++++--------- src/graphics.h | 3 +- src/lazy.ttf | Bin 103160 -> 0 bytes 4 files changed, 114 insertions(+), 27 deletions(-) delete mode 100644 src/lazy.ttf diff --git a/src/gameBoy.cpp b/src/gameBoy.cpp index 60d6143..04ef466 100644 --- a/src/gameBoy.cpp +++ b/src/gameBoy.cpp @@ -195,6 +195,7 @@ void GBE::debug_int() // s to show sprites on screen case SDLK_LCTRL: gbe_graphics->debuggerInit(); + // gbe_graphics->render_ttl(); debuggerMode = true; while (debuggerMode) { @@ -208,7 +209,7 @@ void GBE::debug_int() gbe_graphics->listBgMap(); break; case SDLK_s: - gbe_graphics->init_ttl(); + gbe_graphics->listSprites(); break; case SDLK_t: gbe_graphics->listTiles(); diff --git a/src/graphics.cpp b/src/graphics.cpp index 6c26e8c..cfc528d 100644 --- a/src/graphics.cpp +++ b/src/graphics.cpp @@ -160,28 +160,103 @@ void PPU::listBgMap() void PPU::listSprites() { - // init_ttl(debugRenderer); + if (!scanlineRendered) { renderScanline(mMap->getRegLY()); scanlineRendered = true; } + renderOAM(); + // SDL_UpdateTexture(debugTexture, NULL, renderSprites, 160 * 4); // SDL_RenderClear(debugRenderer); // SDL_RenderCopy(debugRenderer, debugTexture, NULL, NULL); // SDL_RenderPresent(debugRenderer); + + // render_ttl(); +} + +// We are reading values from 0xFE00-0xFE9F +// Outer loop increments for every new tile to be rendered +// Middle loop increments for every line of tile +// Inner loop increments for every pixel of line of tile. +// We are printing 4 tiles in a row with gap of 2 between each tile { (tileNumber % 4) * 10) + j + 8) } +void PPU::renderOAM() +{ + if (!scanlineRendered) + { + renderScanline(mMap->getRegLY()); + scanlineRendered = true; + } + Byte sprite_y, sprite_pixel_col, sprite_palette; + + // sprites.clear(); + Byte sprite_height = 8; + for (Word i = 0xFE00; i < 0xFEA0; i += 4) + { + if (sprites.size() >= 40) + break; + sprite_y = (*mMap)[i]; + // if ((line < (sprite_y - 16) || line > (sprite_y - 16 + sprite_height - 1))) + if (sprite_y < 16 || sprite_y > 152) + continue; + + Sprite* sprite = new Sprite(); + sprite->address = i; + sprite->y = sprite_y; + sprite->x = (*mMap)[i + 1]; + sprite->tile = (*mMap)[i + 2]; + sprite->flags = (*mMap)[i + 3]; + sprites.push_back(*sprite); + + // printf("sprite_y = ",sprite_y); + } + + // printf("\n%d\n", sprites.size()); + + // if (sprites.size()) + // std::sort(sprites.begin(), sprites.end(), [](Sprite& a, Sprite& b) + // { return (((a.x == b.x) && (a.address > b.address)) || (a.x > b.x)); }); + int sprite_count = 0; + for (auto it = sprites.begin(); it != sprites.end(); ++it) + { + + sprite_palette = (it->flags & 0x10) ? objPalette1 : objPalette0; + for (int i = 0; i < 8; i++) + { + for (int j = 0; j < 8; j++) + { + sprite_pixel_col = ((*mMap)[0x8000 + (it->tile * 0x10) + ((i - (it->y - 16)) * 2)] >> (7 - j) & 0x1) + (((*mMap)[0x8000 + (it->tile * 0x10) + ((i - (it->y - 16)) * 2) + 1] >> (7 - j) & 0x1) * 2); + if (sprite_pixel_col != 0) + { + renderSprites[((static_cast(sprite_count / 4) * 20) + i + 20) * 160 + (((sprite_count % 4) * 20) + j + 8)] = bg_colors[(bgPalette >> (sprite_pixel_col * 2)) & 0x3]; + } + } + } + sprite_count++; + } + SDL_UpdateTexture(debugTexture, NULL, renderSprites, 160 * 4); + SDL_RenderClear(debugRenderer); + SDL_RenderCopy(debugRenderer, debugTexture, NULL, NULL); + SDL_RenderPresent(debugRenderer); } -void PPU::init_ttl() -{ - SDL_Init( SDL_INIT_EVERYTHING ); - if ( TTF_Init() < 0) +void PPU::render_ttl() +{ + // Initialize SDL + if (SDL_Init(SDL_INIT_VIDEO) < 0) + { + printf("SDL could not initialize! SDL_Error: %s\n", SDL_GetError()); + return; + } + + if (TTF_Init() < 0) { printf("Error intializing SDL_ttf: %s\n", TTF_GetError()); + return; } - // char* font_path; - // font_path = "lazy.ttf"; - TTF_Font* font = TTF_OpenFont("lazy.ttf", 24); + + TTF_Font* font = TTF_OpenFont("../lazy.ttf", 24); if (!font) { printf("Error loading font: %s\n", TTF_GetError()); @@ -189,23 +264,21 @@ void PPU::init_ttl() int text_width; int text_height; SDL_Rect dest; - SDL_Color textColor = { 255, 255, 255 }; - // char* input; - // input = "Hey sexyyy"; + SDL_Color textColor = { 0, 0, 0 }; - SDL_Surface* text_surf = TTF_RenderText_Solid(font, "Hey sexyyy", textColor); - SDL_Texture *text = SDL_CreateTextureFromSurface(debugRenderer, text_surf); + SDL_Surface* text_surf = TTF_RenderText_Solid_Wrapped(font, "Hey\nWorld", textColor, 150); + SDL_Texture* text = SDL_CreateTextureFromSurface(debugRenderer, text_surf); - dest.x = 160 - (text_surf->w / 2.0f); - dest.y = 140; - dest.w = text_surf->w; - dest.h = text_surf->h; - SDL_RenderCopy(debugRenderer, text, NULL, &dest); + dest.x = 160 - (text_surf->w / 9.0f); + dest.y = 140; + dest.w = text_surf->w; + dest.h = text_surf->h; + SDL_RenderCopy(debugRenderer, text, NULL, &dest); - SDL_DestroyTexture(text); - SDL_FreeSurface(text_surf); + SDL_DestroyTexture(text); + SDL_FreeSurface(text_surf); - SDL_RenderPresent( debugRenderer ); + SDL_RenderPresent(debugRenderer); // SDL_RenderClear(debugRenderer); // SDL_RenderCopy(debugRenderer, debugTexture, NULL, NULL); // SDL_RenderPresent(debugRenderer); @@ -235,13 +308,18 @@ void PPU::listTiles() } tileNumber += 1; } + + SDL_UpdateTexture(debugTexture, NULL, renderTiles, 160 * 4); + SDL_RenderClear(debugRenderer); + SDL_RenderCopy(debugRenderer, debugTexture, NULL, NULL); + SDL_RenderPresent(debugRenderer); } void PPU::renderScanline(Byte line) { // Evaluate LCDC register Byte LCDC = mMap->getRegLCDC(); - int spriteCount = 0; + int sprite_count = 0; isEnabled = (LCDC & 0x80); showBGWin = (LCDC & 0x1); showWindow = (LCDC & 0x20); @@ -370,13 +448,14 @@ void PPU::renderScanline(Byte line) if (sprites.size()) std::sort(sprites.begin(), sprites.end(), [](Sprite& a, Sprite& b) { return (((a.x == b.x) && (a.address > b.address)) || (a.x > b.x)); }); - spriteCount = 0; + sprite_count = 0; for (auto it = sprites.begin(); it != sprites.end(); ++it) { sprite_palette = (it->flags & 0x10) ? objPalette1 : objPalette0; for (int i = 0; i < 8; i++) { + if (sprite_height == 16) it->tile &= 0xFE; switch (it->flags & 0x60) @@ -399,20 +478,26 @@ void PPU::renderScanline(Byte line) if (sprite_pixel_col != 0) { + // printf("%hu , %hu\n", it->y, line); if (((it->x + i - 8) < 160) && (!(it->flags & 0x80) || (renderArray[(line * 160) + (it->x + i - 8)] == bg_colors[0]))) { + int newLine = (it->y - line) + 80; renderArray[(line * 160) + (it->x + i - 8)] = bg_colors[(sprite_palette >> (sprite_pixel_col * 2)) & 0x3]; - renderSprites[(line * 160) + ((spriteCount * 40) + i + 8)] = bg_colors[(sprite_palette >> (sprite_pixel_col * 2)) & 0x3]; + // renderSprites[(newLine * 160) + ((sprite_count * 40) + i + 8)] = bg_colors[(sprite_palette >> (sprite_pixel_col * 2)) & 0x3]; } } } - spriteCount++; + sprite_count++; } } } void PPU::executePPU(int cycles) { + // ================= + sprites.clear(); + // printf("Sprites\n"); + // ================= currentClock -= cycles; switch (ppuMode) { diff --git a/src/graphics.h b/src/graphics.h index f731ef7..04e3482 100644 --- a/src/graphics.h +++ b/src/graphics.h @@ -125,10 +125,11 @@ class PPU PPU(); bool init(); bool debuggerInit(); - void init_ttl(); + void render_ttl(); void listBgMap(); void listTiles(); void listSprites(); + void renderOAM(); bool pollEvents(); void renderScanline(Byte line); void close(bool debug); diff --git a/src/lazy.ttf b/src/lazy.ttf deleted file mode 100644 index eb1000bcad0d83e1d1561bbcf191b2173ede705c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 103160 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�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 a`x4{NwZ~TeMEiyI=ZsHkUuIm9@&5wKjBWw| From 6ff8e7d4a86d897ddd1038bb7aa31f5289cae791 Mon Sep 17 00:00:00 2001 From: Pragyansh Chaturvedi Date: Fri, 5 Jan 2024 00:27:42 +0530 Subject: [PATCH 12/16] Fix Sprite Screen in Debugger --- src/gameBoy.cpp | 68 ++++++++++++++++++++++++------------------------ src/graphics.cpp | 40 ++-------------------------- src/graphics.h | 1 - 3 files changed, 36 insertions(+), 73 deletions(-) diff --git a/src/gameBoy.cpp b/src/gameBoy.cpp index 04ef466..ab3c139 100644 --- a/src/gameBoy.cpp +++ b/src/gameBoy.cpp @@ -138,29 +138,29 @@ void GBE::getValueOfRegister(char registerName) switch (registerName) { - case 'A': - value = gbe_cpu->get_reg_A(); - break; - case 'B': - value = gbe_cpu->get_reg_B(); - break; - case 'C': - value = gbe_cpu->get_reg_C(); - break; - case 'D': - value = gbe_cpu->get_reg_D(); - break; - case 'E': - value = gbe_cpu->get_reg_E(); - break; - case 'H': - value = gbe_cpu->get_reg_H(); - break; - case 'L': - value = gbe_cpu->get_reg_L(); - break; - default: - break; + case 'A': + value = gbe_cpu->get_reg_A(); + break; + case 'B': + value = gbe_cpu->get_reg_B(); + break; + case 'C': + value = gbe_cpu->get_reg_C(); + break; + case 'D': + value = gbe_cpu->get_reg_D(); + break; + case 'E': + value = gbe_cpu->get_reg_E(); + break; + case 'H': + value = gbe_cpu->get_reg_H(); + break; + case 'L': + value = gbe_cpu->get_reg_L(); + break; + default: + break; } // printf(value); printf("%hu\n", value); @@ -191,7 +191,7 @@ void GBE::debug_int() break; // Left control to open Debugger window // b for bgMap - // t to show current tiles on screen + // t to show current tiles on screen // s to show sprites on screen case SDLK_LCTRL: gbe_graphics->debuggerInit(); @@ -200,31 +200,31 @@ void GBE::debug_int() while (debuggerMode) { while (SDL_PollEvent(event)) - { + { if (event->key.type == SDL_KEYUP) - { + { switch (event->key.keysym.sym) { case SDLK_b: gbe_graphics->listBgMap(); break; case SDLK_s: - gbe_graphics->listSprites(); + gbe_graphics->renderOAM(); break; case SDLK_t: gbe_graphics->listTiles(); - break; + break; case SDLK_ESCAPE: gbe_graphics->close(true); debuggerMode = false; - break; + break; default: break; } } } } - break; + break; case SDLK_i: printf("Info Mode:- \n"); infoMode = true; @@ -243,9 +243,9 @@ void GBE::debug_int() while (infoMode) { while (SDL_PollEvent(event)) - { + { if (event->key.type == SDL_KEYUP) - { + { switch (event->key.keysym.sym) { case SDLK_r: @@ -280,10 +280,10 @@ void GBE::debug_int() break; case SDLK_p: gbe_cpu->printStack(); - break; + break; case SDLK_x: infoMode = false; - break; + break; default: break; } diff --git a/src/graphics.cpp b/src/graphics.cpp index cfc528d..ffe60cd 100644 --- a/src/graphics.cpp +++ b/src/graphics.cpp @@ -158,24 +158,6 @@ void PPU::listBgMap() SDL_RenderPresent(debugRenderer); } -void PPU::listSprites() -{ - - if (!scanlineRendered) - { - renderScanline(mMap->getRegLY()); - scanlineRendered = true; - } - renderOAM(); - - // SDL_UpdateTexture(debugTexture, NULL, renderSprites, 160 * 4); - // SDL_RenderClear(debugRenderer); - // SDL_RenderCopy(debugRenderer, debugTexture, NULL, NULL); - // SDL_RenderPresent(debugRenderer); - - // render_ttl(); -} - // We are reading values from 0xFE00-0xFE9F // Outer loop increments for every new tile to be rendered // Middle loop increments for every line of tile @@ -183,21 +165,14 @@ void PPU::listSprites() // We are printing 4 tiles in a row with gap of 2 between each tile { (tileNumber % 4) * 10) + j + 8) } void PPU::renderOAM() { - if (!scanlineRendered) - { - renderScanline(mMap->getRegLY()); - scanlineRendered = true; - } Byte sprite_y, sprite_pixel_col, sprite_palette; - // sprites.clear(); Byte sprite_height = 8; for (Word i = 0xFE00; i < 0xFEA0; i += 4) { if (sprites.size() >= 40) break; sprite_y = (*mMap)[i]; - // if ((line < (sprite_y - 16) || line > (sprite_y - 16 + sprite_height - 1))) if (sprite_y < 16 || sprite_y > 152) continue; @@ -208,25 +183,17 @@ void PPU::renderOAM() sprite->tile = (*mMap)[i + 2]; sprite->flags = (*mMap)[i + 3]; sprites.push_back(*sprite); - - // printf("sprite_y = ",sprite_y); } - // printf("\n%d\n", sprites.size()); - - // if (sprites.size()) - // std::sort(sprites.begin(), sprites.end(), [](Sprite& a, Sprite& b) - // { return (((a.x == b.x) && (a.address > b.address)) || (a.x > b.x)); }); int sprite_count = 0; for (auto it = sprites.begin(); it != sprites.end(); ++it) { - sprite_palette = (it->flags & 0x10) ? objPalette1 : objPalette0; for (int i = 0; i < 8; i++) { for (int j = 0; j < 8; j++) { - sprite_pixel_col = ((*mMap)[0x8000 + (it->tile * 0x10) + ((i - (it->y - 16)) * 2)] >> (7 - j) & 0x1) + (((*mMap)[0x8000 + (it->tile * 0x10) + ((i - (it->y - 16)) * 2) + 1] >> (7 - j) & 0x1) * 2); + sprite_pixel_col = (((*mMap)[0x8000 + (it->tile * 0x10) + (i * 2)] >> (7 - j)) & 0x1) + ((((*mMap)[0x8000 + (it->tile * 0x10) + (i * 2) + 1] >> (7 - j)) & 0x1) * 2); if (sprite_pixel_col != 0) { renderSprites[((static_cast(sprite_count / 4) * 20) + i + 20) * 160 + (((sprite_count % 4) * 20) + j + 8)] = bg_colors[(bgPalette >> (sprite_pixel_col * 2)) & 0x3]; @@ -446,8 +413,7 @@ void PPU::renderScanline(Byte line) } if (sprites.size()) - std::sort(sprites.begin(), sprites.end(), [](Sprite& a, Sprite& b) - { return (((a.x == b.x) && (a.address > b.address)) || (a.x > b.x)); }); + std::sort(sprites.begin(), sprites.end(), [](Sprite& a, Sprite& b) { return (((a.x == b.x) && (a.address > b.address)) || (a.x > b.x)); }); sprite_count = 0; for (auto it = sprites.begin(); it != sprites.end(); ++it) { @@ -481,9 +447,7 @@ void PPU::renderScanline(Byte line) // printf("%hu , %hu\n", it->y, line); if (((it->x + i - 8) < 160) && (!(it->flags & 0x80) || (renderArray[(line * 160) + (it->x + i - 8)] == bg_colors[0]))) { - int newLine = (it->y - line) + 80; renderArray[(line * 160) + (it->x + i - 8)] = bg_colors[(sprite_palette >> (sprite_pixel_col * 2)) & 0x3]; - // renderSprites[(newLine * 160) + ((sprite_count * 40) + i + 8)] = bg_colors[(sprite_palette >> (sprite_pixel_col * 2)) & 0x3]; } } } diff --git a/src/graphics.h b/src/graphics.h index 04e3482..8e1de13 100644 --- a/src/graphics.h +++ b/src/graphics.h @@ -128,7 +128,6 @@ class PPU void render_ttl(); void listBgMap(); void listTiles(); - void listSprites(); void renderOAM(); bool pollEvents(); void renderScanline(Byte line); From 6aa03206413637fd143b6d1d23cd02d6024a505e Mon Sep 17 00:00:00 2001 From: sukhman-sukh Date: Tue, 9 Jan 2024 01:47:11 +0530 Subject: [PATCH 13/16] Add OAM Screen Signed-off-by: sukhman-sukh --- .vscode/settings.json | 58 +++++++++++++++++++++++++++++++++- Algerian Regular.ttf | Bin 0 -> 69496 bytes src/graphics.cpp | 70 ++++++++++++++++++++++++++++-------------- src/graphics.h | 8 +++++ timesRoman.ttf | Bin 0 -> 216656 bytes 5 files changed, 112 insertions(+), 24 deletions(-) create mode 100755 Algerian Regular.ttf create mode 100644 timesRoman.ttf diff --git a/.vscode/settings.json b/.vscode/settings.json index f9e58cf..c0594f3 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,5 +1,6 @@ { "files.associations": { + "*.cairo": "csharp", "cstddef": "cpp", "charconv": "cpp", "chrono": "cpp", @@ -18,6 +19,61 @@ "streambuf": "cpp", "typeinfo": "cpp", "variant": "cpp", - "*.inc": "cpp" + "*.inc": "cpp", + "atomic": "cpp", + "bit": "cpp", + "*.tcc": "cpp", + "bitset": "cpp", + "cctype": "cpp", + "clocale": "cpp", + "cmath": "cpp", + "compare": "cpp", + "complex": "cpp", + "concepts": "cpp", + "condition_variable": "cpp", + "cstdarg": "cpp", + "cstdint": "cpp", + "cstdio": "cpp", + "cstdlib": "cpp", + "cstring": "cpp", + "ctime": "cpp", + "cwchar": "cpp", + "cwctype": "cpp", + "deque": "cpp", + "forward_list": "cpp", + "list": "cpp", + "map": "cpp", + "set": "cpp", + "string": "cpp", + "unordered_map": "cpp", + "unordered_set": "cpp", + "vector": "cpp", + "exception": "cpp", + "algorithm": "cpp", + "iterator": "cpp", + "memory": "cpp", + "memory_resource": "cpp", + "numeric": "cpp", + "random": "cpp", + "string_view": "cpp", + "fstream": "cpp", + "future": "cpp", + "initializer_list": "cpp", + "iomanip": "cpp", + "iosfwd": "cpp", + "iostream": "cpp", + "istream": "cpp", + "limits": "cpp", + "numbers": "cpp", + "ostream": "cpp", + "semaphore": "cpp", + "span": "cpp", + "sstream": "cpp", + "stdexcept": "cpp", + "stop_token": "cpp", + "thread": "cpp", + "cfenv": "cpp", + "cinttypes": "cpp", + "valarray": "cpp" } } \ No newline at end of file diff --git a/Algerian Regular.ttf b/Algerian Regular.ttf new file mode 100755 index 0000000000000000000000000000000000000000..ebb574dccefa8ecafdff5442892c76cd233414c8 GIT binary patch literal 69496 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 CFp!i0 literal 0 HcmV?d00001 diff --git a/src/graphics.cpp b/src/graphics.cpp index ffe60cd..721f428 100644 --- a/src/graphics.cpp +++ b/src/graphics.cpp @@ -32,8 +32,6 @@ PPU::PPU() frameRendered = false; // Fill renderArray initially with white (lightest color in palette) - std::fill(renderSprites, renderSprites + (160 * 144), bg_colors[0]); - std::fill(renderTiles, renderTiles + (160 * 144), bg_colors[0]); std::fill(renderArray, renderArray + (160 * 144), bg_colors[0]); } @@ -162,11 +160,12 @@ void PPU::listBgMap() // Outer loop increments for every new tile to be rendered // Middle loop increments for every line of tile // Inner loop increments for every pixel of line of tile. -// We are printing 4 tiles in a row with gap of 2 between each tile { (tileNumber % 4) * 10) + j + 8) } +// We are printing 2 tiles in a row with gap of 2 between each tile { (tileNumber % 2) * 10) + j + 8) } void PPU::renderOAM() { Byte sprite_y, sprite_pixel_col, sprite_palette; - + std::fill(renderSprites, renderSprites + (160 * 144), bg_colors[0]); + sprites.clear(); Byte sprite_height = 8; for (Word i = 0xFE00; i < 0xFEA0; i += 4) { @@ -186,6 +185,7 @@ void PPU::renderOAM() } int sprite_count = 0; + metadatas.clear(); for (auto it = sprites.begin(); it != sprites.end(); ++it) { sprite_palette = (it->flags & 0x10) ? objPalette1 : objPalette0; @@ -196,21 +196,47 @@ void PPU::renderOAM() sprite_pixel_col = (((*mMap)[0x8000 + (it->tile * 0x10) + (i * 2)] >> (7 - j)) & 0x1) + ((((*mMap)[0x8000 + (it->tile * 0x10) + (i * 2) + 1] >> (7 - j)) & 0x1) * 2); if (sprite_pixel_col != 0) { - renderSprites[((static_cast(sprite_count / 4) * 20) + i + 20) * 160 + (((sprite_count % 4) * 20) + j + 8)] = bg_colors[(bgPalette >> (sprite_pixel_col * 2)) & 0x3]; + renderSprites[((static_cast(sprite_count / 2) * 30) + i + 20) * 160 + (((sprite_count % 2) * 60) + j + 8)] = bg_colors[(bgPalette >> (sprite_pixel_col * 2)) & 0x3]; } } } + char *data = new char[100]; + char const *flipFlag; + SpriteMetaData* spriteData = new SpriteMetaData(); + spriteData->xCord = (((sprite_count % 2) * 120) + 40); // X coord of box containing metadata + spriteData->yCord = ((static_cast(sprite_count / 2) * 65) + 30); // Y coord of box containing metadata + + switch (it->flags & 0x60) + { + case 0x00: // Normal + flipFlag = "NO FLIP"; + break; + case 0x20: // Flip X + flipFlag = "X FLIP"; + break; + case 0x40: // Flip Y + flipFlag = "Y FLIP"; + break; + case 0x60: // Flip X and Y + flipFlag = "X AND Y \nFLIP"; + break; + default: + break; + } + sprintf(data, "X: %hu \n\n Y: %hu \n\n %hu\n\n %s", it->x, it->y, it->tile, flipFlag); + spriteData->data = data; + metadatas.push_back(spriteData); sprite_count++; } SDL_UpdateTexture(debugTexture, NULL, renderSprites, 160 * 4); - SDL_RenderClear(debugRenderer); SDL_RenderCopy(debugRenderer, debugTexture, NULL, NULL); SDL_RenderPresent(debugRenderer); + + render_ttl(); } void PPU::render_ttl() { - // Initialize SDL if (SDL_Init(SDL_INIT_VIDEO) < 0) { printf("SDL could not initialize! SDL_Error: %s\n", SDL_GetError()); @@ -223,7 +249,7 @@ void PPU::render_ttl() return; } - TTF_Font* font = TTF_OpenFont("../lazy.ttf", 24); + TTF_Font* font = TTF_OpenFont("../timesRoman.ttf", 18u); if (!font) { printf("Error loading font: %s\n", TTF_GetError()); @@ -233,23 +259,20 @@ void PPU::render_ttl() SDL_Rect dest; SDL_Color textColor = { 0, 0, 0 }; - SDL_Surface* text_surf = TTF_RenderText_Solid_Wrapped(font, "Hey\nWorld", textColor, 150); - SDL_Texture* text = SDL_CreateTextureFromSurface(debugRenderer, text_surf); - - dest.x = 160 - (text_surf->w / 9.0f); - dest.y = 140; - dest.w = text_surf->w; - dest.h = text_surf->h; - SDL_RenderCopy(debugRenderer, text, NULL, &dest); + for (auto spriteData : metadatas) + { + char const *data = spriteData->data; + SDL_Surface* text_surf = TTF_RenderText_Solid_Wrapped(font, data, textColor, 100); + SDL_Texture* text = SDL_CreateTextureFromSurface(debugRenderer, text_surf); - SDL_DestroyTexture(text); - SDL_FreeSurface(text_surf); + dest.x = spriteData->xCord; + dest.y = spriteData->yCord; + dest.w = text_surf->w*3/5; + dest.h = text_surf->h*4/5; + SDL_RenderCopy(debugRenderer, text, NULL, &dest); - SDL_RenderPresent(debugRenderer); - // SDL_RenderClear(debugRenderer); - // SDL_RenderCopy(debugRenderer, debugTexture, NULL, NULL); - // SDL_RenderPresent(debugRenderer); - // surface = TTF_RenderText_Solid(font, text, textColor); + SDL_RenderPresent(debugRenderer); + } } // We are reading values from 0x8000 to 0x8fff @@ -259,6 +282,7 @@ void PPU::render_ttl() // We are printing 14 tiles in a row with gap of 2 between each tile { (tileNumber % 14) * 10) + j + 8) } void PPU::listTiles() { + std::fill(renderTiles, renderTiles + (160 * 144), bg_colors[0]); int tileNumber = 0; Byte pixel_col; for (Word tileAddr = 0x8000; tileAddr < 0x8FFF; tileAddr += 0x10) diff --git a/src/graphics.h b/src/graphics.h index 8e1de13..02b1a12 100644 --- a/src/graphics.h +++ b/src/graphics.h @@ -22,6 +22,13 @@ struct Sprite Byte flags; }; +struct SpriteMetaData +{ + char const *data; + int xCord; + int yCord; +}; + class PPU { private: @@ -120,6 +127,7 @@ class PPU }; std::vector sprites; + std::vector metadatas; public: PPU(); diff --git a/timesRoman.ttf b/timesRoman.ttf new file mode 100644 index 0000000000000000000000000000000000000000..babd1081682bfab142a40a066d08de8a9e8b52f7 GIT binary patch literal 216656 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
AATcAsjCYLDuD746DdBP#eRN6O_=BI0srRqDDX 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≠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 literal 0 HcmV?d00001 From 9e57d946437b1ad9c05c8de84f6def0ee6e5f507 Mon Sep 17 00:00:00 2001 From: sukhman-sukh Date: Mon, 15 Jan 2024 14:23:04 +0530 Subject: [PATCH 14/16] fix printstack --- Algerian Regular.ttf | Bin 69496 -> 0 bytes src/cpu.cpp | 39 +++++++++++++++++++++++---------------- 2 files changed, 23 insertions(+), 16 deletions(-) delete mode 100755 Algerian Regular.ttf diff --git a/Algerian Regular.ttf b/Algerian Regular.ttf deleted file mode 100755 index ebb574dccefa8ecafdff5442892c76cd233414c8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 69496 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 CFp!i0 diff --git a/src/cpu.cpp b/src/cpu.cpp index 20b85e9..1d2f2ff 100644 --- a/src/cpu.cpp +++ b/src/cpu.cpp @@ -3244,7 +3244,7 @@ int CPU::JP_u16() // CALL NZ, u16 // Call subroutine at address u16 if zero flag is not set. int CPU::CALL_NZ_u16() -{ +{ if (!GET_ZERO_FLAG) { mMap->writeMemory(--reg_SP.dat, (reg_PC.dat + 3) >> 8); @@ -3385,7 +3385,7 @@ int CPU::CALL_Z_u16() // CALL u16 // Call subroutine at address u16. int CPU::CALL_u16() -{ +{ mMap->writeMemory(--reg_SP.dat, (reg_PC.dat + 3) >> 8); mMap->writeMemory(--reg_SP.dat, (reg_PC.dat + 3) & 0xFF); reg_PC.dat = (*mMap)[reg_PC.dat + 1] | ((*mMap)[reg_PC.dat + 2] << 8); @@ -3714,7 +3714,7 @@ int CPU::AND_A_u8() // RST 20H // Call subroutine at address 0x0020. int CPU::RST_20H() -{ +{ mMap->writeMemory(--reg_SP.dat, (reg_PC.dat + 1) >> 8); mMap->writeMemory(--reg_SP.dat, (reg_PC.dat + 1) & 0xFF); reg_PC.dat = 0x0020; @@ -3953,7 +3953,7 @@ int CPU::CP_u8() // RST 38H // Call subroutine at address 0x0038. int CPU::RST_38H() -{ +{ mMap->writeMemory(--reg_SP.dat, (reg_PC.dat + 1) >> 8); mMap->writeMemory(--reg_SP.dat, (reg_PC.dat + 1) & 0xFF); reg_PC.dat = 0x0038; @@ -7882,24 +7882,31 @@ void CPU::updateTimers(int cycles) } // print elements of calleraddresses stack -void CPU::printStack() { +void CPU::printStack() +{ int count = 0; printf("Printing Stack...."); - for(Word i = reg_SP.dat ; i <= 0xFFFE ; i++) - { printf("Address at stack_pointer %hu is %hu \n", i, (*mMap)[i]); + for (Word i = reg_SP.dat; i <= 0xFFFE; i++) + { + printf("Address at stack_pointer 0x%hx is %hu \n", i, (*mMap)[i]); count++; - if(count == 100){ + if (count == 100) + { char choice; - printf("Hit q to show next 100 addresses and x to exit\n"); - scanf("%c", &choice); - printf("%c",choice); - if(choice == 'q'){ - count = 0; - continue; - } - else { + do + { + printf("Hit q to show next 100 addresses and x to exit\n"); + scanf("%c", &choice); + } while (choice != 'q' && choice != 'x'); + + + if (choice == 'x') + { printf("Exiting Stack\n"); break; + } else{ + count = 0; + continue; } } } From 3989ee5b9410024471bb0328bec3927f2eda2473 Mon Sep 17 00:00:00 2001 From: sukhman-sukh Date: Mon, 15 Jan 2024 18:07:19 +0530 Subject: [PATCH 15/16] Add Write To Stack Functionality --- src/cpu.cpp | 27 +++++++++++++++++++++++---- src/cpu.h | 7 +++++-- src/gameBoy.cpp | 6 +++++- 3 files changed, 33 insertions(+), 7 deletions(-) diff --git a/src/cpu.cpp b/src/cpu.cpp index 1d2f2ff..85a7830 100644 --- a/src/cpu.cpp +++ b/src/cpu.cpp @@ -7899,15 +7899,34 @@ void CPU::printStack() scanf("%c", &choice); } while (choice != 'q' && choice != 'x'); - if (choice == 'x') - { + { printf("Exiting Stack\n"); break; - } else{ - count = 0; + } + else + { + count = 0; continue; } } } +} + +// Write to memory specified in debugger +void CPU::writeToMemory() +{ + Word address; + Byte value; + printf("Address: "); + scanf("%hx", &address); + if (address >= 0x8000) + { + printf("Value: "); + scanf("%hhx", &value); + mMap->writeMemory(address, value); + } else { + printf("Can't Write to Addresses less than 0x8000\n"); + } + } \ No newline at end of file diff --git a/src/cpu.h b/src/cpu.h index f341942..55368de 100644 --- a/src/cpu.h +++ b/src/cpu.h @@ -26,7 +26,6 @@ class CPU { private: - // Accumulator and Flags Register reg_AF; @@ -1163,7 +1162,7 @@ class CPU // Register reg_DE; // get value of A - Byte get_reg_A(){ return reg_AF.hi; } + Byte get_reg_A() { return reg_AF.hi; } // get register B Byte get_reg_B() { return reg_BC.hi; } @@ -1198,5 +1197,9 @@ class CPU // update the timers void updateTimers(int cycles); + // Read memory void printStack(); + + // Write to memory + void writeToMemory(); }; diff --git a/src/gameBoy.cpp b/src/gameBoy.cpp index ab3c139..b8af189 100644 --- a/src/gameBoy.cpp +++ b/src/gameBoy.cpp @@ -239,7 +239,8 @@ void GBE::debug_int() // enter l for L // press left ctrl to open V-Ram debugger window // enter p to print the stack - // enter e to exit info mode + // enter w to write to memory + // enter x to exit info mode while (infoMode) { while (SDL_PollEvent(event)) @@ -281,6 +282,9 @@ void GBE::debug_int() case SDLK_p: gbe_cpu->printStack(); break; + case SDLK_w: + gbe_cpu->writeToMemory(); + break; case SDLK_x: infoMode = false; break; From 581fb2fde8327a9fe3c38e9d4d9ac928217c59de Mon Sep 17 00:00:00 2001 From: sukhman-sukh Date: Tue, 16 Jan 2024 02:38:18 +0530 Subject: [PATCH 16/16] Add Write To Stack Functionality --- src/cpu.cpp | 21 +++++++++++++++------ src/mmap.cpp | 5 +++++ src/mmap.h | 4 ++++ 3 files changed, 24 insertions(+), 6 deletions(-) diff --git a/src/cpu.cpp b/src/cpu.cpp index 85a7830..262c698 100644 --- a/src/cpu.cpp +++ b/src/cpu.cpp @@ -7920,13 +7920,22 @@ void CPU::writeToMemory() Byte value; printf("Address: "); scanf("%hx", &address); - if (address >= 0x8000) + printf("Value: "); + scanf("%hhx", &value); + if (address >= 0x0000 && address <= 0x3FFF) + { + mMap->debugWriteMemory(address, value); + } + else if (address >= 0x4000 && address <= 0x7FFF) + { + mMap->writeRomBank1(address, value); + } + else if (address >= 0x8000) { - printf("Value: "); - scanf("%hhx", &value); mMap->writeMemory(address, value); - } else { - printf("Can't Write to Addresses less than 0x8000\n"); } - + else + { + printf("Can't Write to specified addresses \n"); + } } \ No newline at end of file diff --git a/src/mmap.cpp b/src/mmap.cpp index 25a4315..d50f93b 100644 --- a/src/mmap.cpp +++ b/src/mmap.cpp @@ -201,6 +201,11 @@ void MemoryMap::debugWriteMemory(Word address, Byte value) romBank0[address] = value; } +void MemoryMap::writeRomBank1(Word address, Byte value) +{ + romBank1[address] = value; +} + Byte MemoryMap::readMemory(Word address) { if (address < 0x4000) diff --git a/src/mmap.h b/src/mmap.h index 9acb487..60beb0f 100644 --- a/src/mmap.h +++ b/src/mmap.h @@ -181,8 +181,12 @@ class MemoryMap // Writes a byte to the memory address bool writeMemory(Word address, Byte value); + void debugWriteMemory(Word address, Byte value); + // write to RomBank1 + void writeRomBank1(Word address, Byte value); + // Reads a byte from the memory address Byte readMemory(Word address);