From 90f07a8896b9ab52f6ae578da4172100b6ab1745 Mon Sep 17 00:00:00 2001 From: Ivan Movchan Date: Wed, 28 May 2025 16:24:55 +0300 Subject: [PATCH 01/10] Rename CONTRIBUTION.md to CONTRIBUTING.md, as recommended by GitHub Docs Signed-off-by: Ivan Movchan --- CONTRIBUTION.md => CONTRIBUTING.md | 0 README.md | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) rename CONTRIBUTION.md => CONTRIBUTING.md (100%) diff --git a/CONTRIBUTION.md b/CONTRIBUTING.md similarity index 100% rename from CONTRIBUTION.md rename to CONTRIBUTING.md diff --git a/README.md b/README.md index 53d92bed..4eb09ea0 100644 --- a/README.md +++ b/README.md @@ -111,7 +111,7 @@ $ ./hcemul [-h] [--help] [--version] [-v VAR] [-m VAR] [--memory VAR] binary We will be happy to hear any feedback from you. Do not hesitate to report bugs or suggest any ideas using "Issues" page. -Want to contribute to the project? Read [CONTRIBUTION.md](CONTRIBUTION.md) firstly. +Want to contribute to the project? Read [CONTRIBUTING.md](CONTRIBUTING.md) firstly. Thank you for your interest in HyperCPU. From 460bfffa818c7e0c433b610198efe1a5c2aa7850 Mon Sep 17 00:00:00 2001 From: Ivan Movchan Date: Wed, 28 May 2025 19:00:15 +0300 Subject: [PATCH 02/10] New code examples! 1. Uploaded new programs: * hello-world.s - an updated "Hello World" program using string literals; * escape-sequences.s - a program demonstrating escape sequences processing by HyperCPU; * compare.s - a program demonstrating compare and conditional jump commands. 2. Renamed hello-world.s to hello-world-legacy.s. Signed-off-by: Ivan Movchan --- examples/compare.s | 49 +++++++++++++++++++++++++++++++++++ examples/escape-sequences.s | 42 ++++++++++++++++++++++++++++++ examples/hello-world-legacy.s | 25 ++++++++++++++++++ examples/hello-world.s | 26 +++++++++++++++++++ examples/hello_world.s | 25 ------------------ 5 files changed, 142 insertions(+), 25 deletions(-) create mode 100644 examples/compare.s create mode 100644 examples/escape-sequences.s create mode 100644 examples/hello-world-legacy.s create mode 100644 examples/hello-world.s delete mode 100644 examples/hello_world.s diff --git a/examples/compare.s b/examples/compare.s new file mode 100644 index 00000000..6d9c2909 --- /dev/null +++ b/examples/compare.s @@ -0,0 +1,49 @@ +/* + * This program compares 2 values in x0 and x1 registers and displays a message depending on the result of comparison. + * + * Written by Ivan Movchan in 2025. + */ + +str_equal: + .b8 "x0 = x1\n"; + .b8 0u0; + +str_greater: + .b8 "x0 > x1\n"; + .b8 0u0; + +str_less: + .b8 "x0 < x1\n"; + .b8 0u0; + +.attr(entry) main: + mov x0, 0u42; + mov x1, 0x13; + cmp x0, x1; + jme is_equal; + jmgr is_greater; + jml is_less; + +is_equal: + mov x3, str_equal; + jmp print; + +is_greater: + mov x3, str_greater; + jmp print; + +is_less: + mov x3, str_less; + jmp print; + +print: + mov xlll0, 0u0; + mov xlll2, [x3]; + cmp xlll2, 0u0; + jme print_end; + write xlll0, xlll2; + inc x3; + jmp print; + +print_end: + halt; diff --git a/examples/escape-sequences.s b/examples/escape-sequences.s new file mode 100644 index 00000000..25d1a646 --- /dev/null +++ b/examples/escape-sequences.s @@ -0,0 +1,42 @@ +/* + * This program demonstrates how HyperCPU can handle ANSI escape sequences [1]. + * They can be used for displaying a colorful text or moving a cursor. + * String literals are used — see hello-world.s for details. + * + * Written by Ivan Movchan in 2025. + * + * [1] https://en.wikipedia.org/wiki/ANSI_escape_code + */ + +data: + .b8 "\e[1;37m"; + .b8 "# # ####### ######## # #\n"; + .b8 "# # # # # # # #\n"; + .b8 "# # # # ######## ####### # ###### # # # # #\n"; + .b8 "# # # # # # # # ## # # # # # #\n"; + .b8 "######### # # # # # # # # ######## # #\n"; + .b8 "# # # # # # ######## # # # # #\n"; + .b8 "# # # # # # # # # # # #\n"; + .b8 "# # # # # # # # # # # # # #\n"; + .b8 "# # ######## ######## ####### # ####### # ####### \n"; + .b8 " # #\n"; + .b8 " # #\n"; + .b8 " # # #\n"; + .b8 " ####### #\n\n"; + .b8 " https://hypercpu-project.github.io/ \n"; + .b8 "\e[0m"; + .b8 0u0; + +.attr(entry) main: + mov x1, data; + +loop: + mov xlll2, [x1]; + cmp xlll2, 0u0; + jme end; + write xlll0, xlll2; + inc x1; + jmp loop; + +end: + halt; diff --git a/examples/hello-world-legacy.s b/examples/hello-world-legacy.s new file mode 100644 index 00000000..b44e9698 --- /dev/null +++ b/examples/hello-world-legacy.s @@ -0,0 +1,25 @@ +/* + * This is a simple "Hello World" program written in HyperCPU assembly (hASM). + * It writes a string to the console char by char, then writes a newline byte (0x10) and halts CPU. + * + * If you are interested in more modern (and simple?) way of displaying text in console, see hello-world.s. + * + * Written by Ivan Movchan in 2025. + */ + +main: + write xlll0, 'H'; + write xlll0, 'e'; + write xlll0, 'l'; + write xlll0, 'l'; + write xlll0, 'o'; + write xlll0, ','; + write xlll0, ' '; + write xlll0, 'w'; + write xlll0, 'o'; + write xlll0, 'r'; + write xlll0, 'l'; + write xlll0, 'd'; + write xlll0, '!'; + write xlll0, 0u10; + halt; diff --git a/examples/hello-world.s b/examples/hello-world.s new file mode 100644 index 00000000..3781acb6 --- /dev/null +++ b/examples/hello-world.s @@ -0,0 +1,26 @@ +/* + * This is another simple "Hello World" program written in HyperCPU assembly (hASM). + * It writes a null-terminated string to the console using string literals and a little loop, then halts CPU. + * + * Before 0.4.5 version you could have to write a string char by char — see hello-world-legacy.s for details. + * + * Written by Ivan Movchan in 2025. + */ + +data: + .b8 "Hello, world!\n"; + .b8 0u0; + +.attr(entry) main: // Program entry point. + mov x1, data; + +loop: + mov xlll2, [x1]; + cmp xlll2, 0u0; // Is NULL (0u0)? + jme end; // Yes — go to finish. + write xlll0, xlll2; // No — write data to console. + inc x1; + jmp loop; + +end: + halt; diff --git a/examples/hello_world.s b/examples/hello_world.s deleted file mode 100644 index 85d119e2..00000000 --- a/examples/hello_world.s +++ /dev/null @@ -1,25 +0,0 @@ -/* - -This is a simple "Hello World" program written in HyperCPU assembly (hASM). -It writes a string to the console char by char, then writes a newline byte (0x10) and does CPU halt. - -Copyrignt (c) 2025 Ivan Movchan - -*/ - -main: - write xlll0, 'H'; - write xlll0, 'e'; - write xlll0, 'l'; - write xlll0, 'l'; - write xlll0, 'o'; - write xlll0, ','; - write xlll0, ' '; - write xlll0, 'w'; - write xlll0, 'o'; - write xlll0, 'r'; - write xlll0, 'l'; - write xlll0, 'd'; - write xlll0, '!'; - write xlll0, 0u10; - halt; From c55299db32398ba774f0a011617350f2167dbd1d Mon Sep 17 00:00:00 2001 From: Ivan Movchan Date: Wed, 28 May 2025 19:01:09 +0300 Subject: [PATCH 03/10] Update project logo Signed-off-by: Ivan Movchan --- images/logo.png | Bin 12317 -> 7248 bytes images/logo_dark.png | Bin 12314 -> 0 bytes 2 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 images/logo_dark.png diff --git a/images/logo.png b/images/logo.png index fe58e40314283dc07039fe29c7cf1e1a60b06bff..5538e4c46ba3a2b73847f3c5de2d091a6fd924b7 100644 GIT binary patch literal 7248 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 literal 12317 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 diff --git a/images/logo_dark.png b/images/logo_dark.png deleted file mode 100644 index deecfc0262f619ca8230053080a1d02649c8cccd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12314 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 From 49fbb767a5e28f16a8db9e37c59c5a55d343cca3 Mon Sep 17 00:00:00 2001 From: Ivan Movchan Date: Wed, 28 May 2025 19:04:04 +0300 Subject: [PATCH 04/10] Rewrite contributing guidelines Signed-off-by: Ivan Movchan --- CONTRIBUTING.md | 64 ++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 56 insertions(+), 8 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 1f1a5119..f063625a 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,12 +1,60 @@ -# How to contribute to HyperCPU project +# HyperCPU Contributing Guidelines -## For collaborators: +This file describes the contributing guidelines of the project. -1. Clone repository locally -2. Create new branch from the branch `master`. Think about the name - what feature are you going to add? Or are you going to fix something? -3. Work on that branch, DO NOT touching others. Every push in a non-master branch runs a CI workflow with minimal tests. -4. When the feature is ready - make a pull request to the master branch. When the PR gets created, you have to track following checks: `CodeQL`, `Codacy`, main CI workflow, that runs extended tests, and the job that builds the project on multiple distributions. Wait for the project owner to review changes and approve. In case, if MentatBot will tell you what you can improve - you better improve it:) When all CI jobs will finish successfully, wait for repository owner to merge your PR. Voila - your feature has been merged! Well done! +If you are going to work with code, we strongly recommend reading [Coding style](#coding-style) section at the end of file. -## For other contributors +## Project collaborators -1. Almost the same thing as for collaborators, BUT - you have to fork the repository, and work there. Notice, that you probably have to disable GitHub Actions, or connect the self-hosted runner (no guarantee that HyperCPU workflows will execute successfully on custom runner). When you are ready to send your changes - make a PR - and there goes the same cycle, until the PR gets merged:) \ No newline at end of file +Clone repository locally and create a new branch from `master` with some senseful name. + +> [!TIP] +> Ask yourself: what are you going to do? What feature are you going to implement (or what bug are you going to fix)? +> +> **Examples of BAD branch names:** `r0ego03rg750yt3w4p37w8ypt98bo4wy49wyeuys9o49suebs9o84y3p47304p34bt3tb5o94ba0843twp`, `vasyapupkinwashere`. +> +> **Examples of GOOD branch names:** `fix-zero-division-error`, `implement-windows-support`. + +Do your work on that branch, but **do not** touch others. Every push to any branch except `master` starts a CI workflow with minimal tests. + +When you are ready, make a pull request (PR) to `master` branch. When the PR gets created, you have to track following checks: `CodeQL`, `Codacy`, main CI workflow that runs extended tests, and the job that builds the project on multiple platforms. + +If MentatBot tells you what can be improved, it is better that you improve it :) + +When all CI jobs finish successfully, just wait for project owner to review and approve your work and, finally, merge your PR. + +Voila! Your changes have been merged and accepted to the project. + +## Contributors + +The same stuff as for project collaborators, except that you also have to fork the repository and work there. You will probably have to disable GitHub Actions or connect the self-hosted runner (no guarantee that HyperCPU workflows will execute successfully on custom runner). + +## Coding style + +### Identifiers + +Use *PascalCase* for namespaces, class names and functions; *snake_case* for local variables and class fields. + +### Tabs + +2 spaces long. + +### Whitespaces + +A single space should be between operators, and no spaces should be between parenthesis and arguments. + +```cpp +namespace HyperCPU { + ... +} + +class CPU { + private: + bool is_hypercpu_cool = true; +} + +void HyperCPU::CPU::CPU() { + int magic_number = 0xDEADBEEF; + std::exit(1337 * 42); +} +``` From dce4e3bf03709b6d06bb0809a155025a06fe3562 Mon Sep 17 00:00:00 2001 From: Ivan Movchan Date: Wed, 28 May 2025 19:05:46 +0300 Subject: [PATCH 05/10] Update building instructions and other stuff Signed-off-by: Ivan Movchan --- README.md | 110 +++++++++++++++++++++++++++--------------------------- 1 file changed, 54 insertions(+), 56 deletions(-) diff --git a/README.md b/README.md index 4eb09ea0..21d5aade 100644 --- a/README.md +++ b/README.md @@ -1,36 +1,16 @@
- - - - HyperCPU - + HyperCPU +

HyperCPU

+

+ GitHub opened issues + Version + CI status + Status + License + Stars +

-

HyperCPU — the hyper toolkit for custom hyper ISA

- -

- - GitHub opened issues - Version - CI status - Status - License - Stars -

- ->[!IMPORTANT] -> HyperCPU is almost ready for use! Wait for 1.0 release to try it out or build the project yourself, test it and report issues. - -HyperCPU screenshot - -### What is this - HyperCPU is a set of programs created to work with my own simple ISA (instruction set architecture). The project was created for fun, but it took a lot of time (and nerves), and I learned a lot while working on it. HyperCPU project includes: @@ -40,10 +20,15 @@ HyperCPU project includes: See [ROADMAP.md](ROADMAP.md) for project ideas and tasks. +>[!IMPORTANT] +> HyperCPU is almost ready for use! Wait for 1.0 release to try it out or build the project yourself, test it and report issues. + +HyperCPU screenshot + ### Installation >[!WARNING] -> HyperCPU supports 64-bit GNU/Linux systems only. It is known to be successfully built and running on `amd64` and `aarch64` architectures. +> HyperCPU supports GNU/Linux systems only. It is known to be successfully built on `i386`, `amd64`, `armv8l` and `aarch64` architectures. > > HyperCPU fails to build and/or work properly under \*BSD systems ­— please do not ask us for support of these systems. Windows support is also not planned. @@ -55,33 +40,52 @@ Pre-compiled binaries are currently not available. Sorry. Building HyperCPU requires these dependencies to be installed: -* **C++20 compilers:** GCC 12+, Clang 14+. -* **Build system:** Bazel. - -Generating the documentation in HTML format requires Python 3 and a few modules (`python3-sphinx`, `python3-sphinx-rtd-theme`) to be installed. +* GCC `>=12` or Clang `>=14`; +* GNU make, CMake `>=3.25`; +* Bazel `>=8.2.1` (recommended using Bazelisk for installation). +* Python `>=3.6` with additional modules: + * `conan` (should be installed with `--break-system-packages` flag); + * `sphinx` and `sphinx-rtd-theme`. -After installing dependencies run these commands in the terminal: +After installing dependencies clone the repository: ```bash git clone --recursive https://github.com/HyperCPU-Project/HyperCPU cd HyperCPU +``` + +Download and build all dependencies: + +```bash +conan profile detect && conan install . --build=cmake --build=missing +``` + +Finally, build HyperCPU: + +```bash bazel build //src/... --config=linux-opt -cd docs -make html ``` -The compiled binaries should be located in `bazel-out` directory, and the generated documentation should be located in `docs/_build/html` directory. After building the project open `index.html` file and start reading the documentation. +...and make symlinks to compiled executable files: -To run the resulting binaries without searching for them in `bazel-out`, use `bazel run`. +```bash +ln -s bazel-bin/src/Assembler/hcasm hcasm +ln -s bazel-bin/src/Emulator hcemul ``` -bazel run //src/Assembler:hcasm -- -bazel run //src/Emulator:hcemul -- + +Building documentation should not be hard too: + +``` +cd docs +make html ``` -Check out [examples](examples) folder for interesting code examples that will help you better understand the syntax of hASM and the power of HyperCPU. +After building documentation open `docs/_build/html/index.html` and start reading. ### Usage +Check out [examples](examples) folder for interesting code examples that will help you better understand the syntax of hASM and the power of HyperCPU. + #### `hcasm` (hASM assembler) ```bash @@ -109,22 +113,16 @@ $ ./hcemul [-h] [--help] [--version] [-v VAR] [-m VAR] [--memory VAR] binary ### Contributing -We will be happy to hear any feedback from you. Do not hesitate to report bugs or suggest any ideas using "Issues" page. - -Want to contribute to the project? Read [CONTRIBUTING.md](CONTRIBUTING.md) firstly. - -Thank you for your interest in HyperCPU. +See [CONTRIBUTING.md](CONTRIBUTING.md) for contributing guidelines. ### Authors -* **[HyperWin](https://github.com/HyperWinX) (2024 - present time)** — HyperCPU Project founder, lead developer and documentation author. -* **[Ivan Movchan](https://github.com/ivan-movchan) (2025 - present time)** — beta tester, artist and just a contributor. -* **[AshFungor](https://github.com/AshFungor) (2025 - present time)** — good contributor:) - -### License +HyperCPU is brought to you by these wonderful people: -HyperCPU is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. +* **[HyperWin](https://github.com/HyperWinX)** — project founder, lead developer and documentation author. +* **[Ivan Movchan](https://github.com/ivan-movchan)** — project artist, tester, code examples author and just a contributor. +* **[AshFungor](https://github.com/AshFungor)** — just a good contributor :) -This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +### License -You should have received a copy of the GNU General Public License along with this program. If not, see . +HyperCPU is free software released under the terms of the [GNU General Public License v3.0](LICENSE). From 4003cbf8d5a001b1c4109d75c0faf579ccae223e Mon Sep 17 00:00:00 2001 From: Ivan Movchan Date: Wed, 28 May 2025 19:06:14 +0300 Subject: [PATCH 06/10] Minor changes in ROADMAP Signed-off-by: Ivan Movchan --- ROADMAP.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ROADMAP.md b/ROADMAP.md index d5b70027..8e12cf88 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -1,6 +1,6 @@ # HyperCPU Roadmap -This document describes the roadmap of the project (some kind of TODO-list). +This file describes the roadmap of the project (some kind of TODO-list). ### *Release 1.0* From 6924f96ddcf9b16c9fd90b3f0a4518dc4e257e76 Mon Sep 17 00:00:00 2001 From: Ivan Movchan Date: Wed, 28 May 2025 19:16:49 +0300 Subject: [PATCH 07/10] Hotfix: 2 spaces tabulation according to coding style guidelines Signed-off-by: Ivan Movchan --- examples/escape-sequences.s | 8 ++++---- examples/hello-world-legacy.s | 30 +++++++++++++++--------------- examples/hello-world.s | 24 ++++++++++++------------ 3 files changed, 31 insertions(+), 31 deletions(-) diff --git a/examples/escape-sequences.s b/examples/escape-sequences.s index 25d1a646..a4a20640 100644 --- a/examples/escape-sequences.s +++ b/examples/escape-sequences.s @@ -30,13 +30,13 @@ data: .attr(entry) main: mov x1, data; -loop: +print: mov xlll2, [x1]; cmp xlll2, 0u0; - jme end; + jme print_end; write xlll0, xlll2; inc x1; - jmp loop; + jmp print; -end: +print_end: halt; diff --git a/examples/hello-world-legacy.s b/examples/hello-world-legacy.s index b44e9698..a6d49c31 100644 --- a/examples/hello-world-legacy.s +++ b/examples/hello-world-legacy.s @@ -8,18 +8,18 @@ */ main: - write xlll0, 'H'; - write xlll0, 'e'; - write xlll0, 'l'; - write xlll0, 'l'; - write xlll0, 'o'; - write xlll0, ','; - write xlll0, ' '; - write xlll0, 'w'; - write xlll0, 'o'; - write xlll0, 'r'; - write xlll0, 'l'; - write xlll0, 'd'; - write xlll0, '!'; - write xlll0, 0u10; - halt; + write xlll0, 'H'; + write xlll0, 'e'; + write xlll0, 'l'; + write xlll0, 'l'; + write xlll0, 'o'; + write xlll0, ','; + write xlll0, ' '; + write xlll0, 'w'; + write xlll0, 'o'; + write xlll0, 'r'; + write xlll0, 'l'; + write xlll0, 'd'; + write xlll0, '!'; + write xlll0, 0u10; + halt; diff --git a/examples/hello-world.s b/examples/hello-world.s index 3781acb6..67ba2a44 100644 --- a/examples/hello-world.s +++ b/examples/hello-world.s @@ -8,19 +8,19 @@ */ data: - .b8 "Hello, world!\n"; - .b8 0u0; + .b8 "Hello, world!\n"; + .b8 0u0; .attr(entry) main: // Program entry point. - mov x1, data; + mov x1, data; -loop: - mov xlll2, [x1]; - cmp xlll2, 0u0; // Is NULL (0u0)? - jme end; // Yes — go to finish. - write xlll0, xlll2; // No — write data to console. - inc x1; - jmp loop; +print: + mov xlll2, [x1]; + cmp xlll2, 0u0; // Is NULL (0u0)? + jme print_end; // Yes — go to finish. + write xlll0, xlll2; // No — write data to console. + inc x1; + jmp print; -end: - halt; +print_end: + halt; From 1bb86e102257acea4d0ee601476ab034dca780fa Mon Sep 17 00:00:00 2001 From: Ivan Movchan Date: Wed, 28 May 2025 20:40:00 +0300 Subject: [PATCH 08/10] README minor fixes Signed-off-by: Ivan Movchan --- README.md | 38 ++++++++++++-------------------------- 1 file changed, 12 insertions(+), 26 deletions(-) diff --git a/README.md b/README.md index 21d5aade..ed471ce0 100644 --- a/README.md +++ b/README.md @@ -41,36 +41,22 @@ Pre-compiled binaries are currently not available. Sorry. Building HyperCPU requires these dependencies to be installed: * GCC `>=12` or Clang `>=14`; -* GNU make, CMake `>=3.25`; +* CMake `>=3.25`; +* GNU make (required for documentation). * Bazel `>=8.2.1` (recommended using Bazelisk for installation). * Python `>=3.6` with additional modules: * `conan` (should be installed with `--break-system-packages` flag); - * `sphinx` and `sphinx-rtd-theme`. + * `sphinx` and `sphinx-rtd-theme` (required for documentation). -After installing dependencies clone the repository: +After installing dependencies build the project by executing these commands: ```bash -git clone --recursive https://github.com/HyperCPU-Project/HyperCPU +git clone --recursive https://github.com/HyperCPU-Project/HyperCPU # Clone the repository. cd HyperCPU -``` - -Download and build all dependencies: - -```bash -conan profile detect && conan install . --build=cmake --build=missing -``` - -Finally, build HyperCPU: - -```bash -bazel build //src/... --config=linux-opt -``` - -...and make symlinks to compiled executable files: - -```bash -ln -s bazel-bin/src/Assembler/hcasm hcasm -ln -s bazel-bin/src/Emulator hcemul +conan profile detect && conan install . --build=cmake --build=missing # Download and compile dependencies. +bazel build //src/... --config=linux-opt # Build the project. +ln -s bazel-bin/src/Assembler/hcasm hcasm # Make symlink to hcasm. +ln -s bazel-bin/src/Emulator hcemul # Make symlink to hcemul. ``` Building documentation should not be hard too: @@ -89,7 +75,7 @@ Check out [examples](examples) folder for interesting code examples that will he #### `hcasm` (hASM assembler) ```bash -$ ./hcasm [-h] [--help] [--version] [-o VAR] [-c] [-V VAR] source +$ ./hcasm [-h | --help] [--version] [-o VAR] [-c] [-V VAR] source ``` * `source` — source code file to be compiled. @@ -102,14 +88,14 @@ $ ./hcasm [-h] [--help] [--version] [-o VAR] [-c] [-V VAR] source #### `hcemul` (hCPU emulator) ```bash -$ ./hcemul [-h] [--help] [--version] [-v VAR] [-m VAR] [--memory VAR] binary +$ ./hcemul [-h | --help] [--version] [-v VAR] [-m | --memory VAR] binary ``` * `binary` — binary file to be executed. * `-h`, `--help` — display help message and exit. * `--version` — display program version and exit. * `-v VAR` — specify verbosity level (`debug`, `info`, `warning`, `error`). Default value is `warning`. -* `-m`, `--memory` — specify max. memory amount to be used. Postfixes are supported. Default value is `8K`. +* `-m` (`--memory`) `VAR` — specify max. memory amount to be used. Postfixes are supported. Default value is `8K`. ### Contributing From a81c3405e3f61a1745282f751d362570e62aa959 Mon Sep 17 00:00:00 2001 From: Ivan Movchan Date: Wed, 28 May 2025 20:46:02 +0300 Subject: [PATCH 09/10] Hotfix: remove CMake from dependencies Signed-off-by: Ivan Movchan --- README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README.md b/README.md index ed471ce0..a62387b8 100644 --- a/README.md +++ b/README.md @@ -41,7 +41,6 @@ Pre-compiled binaries are currently not available. Sorry. Building HyperCPU requires these dependencies to be installed: * GCC `>=12` or Clang `>=14`; -* CMake `>=3.25`; * GNU make (required for documentation). * Bazel `>=8.2.1` (recommended using Bazelisk for installation). * Python `>=3.6` with additional modules: From d0f0ed4c9a038452ad6d9bc58ee19213b138f0ad Mon Sep 17 00:00:00 2001 From: Ivan Movchan Date: Wed, 28 May 2025 21:08:13 +0300 Subject: [PATCH 10/10] Hotfix: update architecture names Signed-off-by: Ivan Movchan --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index a62387b8..0250ffc2 100644 --- a/README.md +++ b/README.md @@ -28,7 +28,7 @@ See [ROADMAP.md](ROADMAP.md) for project ideas and tasks. ### Installation >[!WARNING] -> HyperCPU supports GNU/Linux systems only. It is known to be successfully built on `i386`, `amd64`, `armv8l` and `aarch64` architectures. +> HyperCPU supports GNU/Linux systems only. It is known to be successfully built on `x86_32`, `x86_64` and `ARMv8` architectures. > > HyperCPU fails to build and/or work properly under \*BSD systems ­— please do not ask us for support of these systems. Windows support is also not planned.