# Boytacean SDL ## Build ### Build SDL using [vcpkg](https://vcpkg.io/) To be able to run the `cargo build` one must first install a local version of `vcpkg` using: ```bash cargo install cargo-vcpkg cargo vcpkg build cargo build ``` ### Build SDL in Linux For Linux you may need to install additional dependencies, they should be installed before running the `cargo vcpkg build` command. Here's a listing with the bash command for Ubuntu: ```bash sudo apt install libsdl2-dev libasound2-dev libpulse-dev ``` #### Build SDL in Windows For windows the vcpkg based SDL building is simpler: ```bash cargo install cargo-vcpkg cargo build ``` Make sure that the current Rust in use is MSVC based using: ```bash rustup default stable-msvc ``` For more information check [GitHub - Rust-SDL2/rust-sdl2](https://github.com/Rust-SDL2/rust-sdl2). ### Build binaries Then you can use the following command to build and run Boytacean SDL: ```bash cargo build cargo run ``` To reload the code continuously use the cargo watch tool: ```bash cargo install cargo-watch cargo watch -x run ``` There are some feature flags that control the verbosity of the emulator to run in debug mode use: ```bash cargo build --features debug ``` To obtain more information about the issues. ### Troubleshooting #### I'm facing issues with the vcpkg binaries If there're issues with the `cargo vcpkg build` build process you may need to remove the `~/.vcpkg-root` and re-run the process to re-build the whole set of packages. It's also important to completely delete the `target` directory. ### I'm having difficulties building SDL for arm64 in Mac OS Try the above strategy and also try to remove `~/.cache/vcpkg`. If that does not work try to remove the `Cargo.lock` file to flush dependencies. A quick shortcut to the complete set of operations would be: ```bash rm -rf ~/.vcpkg-root rm -rf ~/.cache/vcpkg cargo vcpkg -v build ``` If you're still facing issues try to remove the `installed` directory in the `vcpkg` directory: ```bash rm -rf ~/vcpkg/installed ``` ## Execution ### Headless It's possible to run the emulator in headless mode using the `--headless` parameter: ```bash cargo run -- --rom-path ../../res/roms/test/blargg/cpu/cpu_instrs.gb --cycles 100000000 --headless --device stdout --unlimited ``` ## Features | Provider | Description | | ---------- | ------------------------------------------------------------------------------------------------------------------------------------------ | | `debug` | Activates the base `debug` feature from Boytacean. | | `pedantic` | Additional safety instructions are executed to make sure the machine does no run "out of tracks", making sure to run many `panic()` calls. | | `slow` | Runs the emulator at a very slow page 60x slower to allow visual debugging. | | `cpulog` | Prints a log of the CPU instruction executed. |