Install Appy then create an `appy.yaml` project definition file.
Run Appy to assemble, build, and run your source. Or do all 3 with:
```
appy brun
```
### What this solves
We often need to assemble projects locally, but that is only part of the equation for people writing project to run under emulation.
The second step is taking our assembled binaries, and combining them with any other assets, data files, operating system files, et cetera, into a single disk image for use with an emulator.
Often this is handled by a set of scripts the author has locally in the projects. However this leads to problems when collaborating with other people or building pipelines.
Problem 1: You need to not only provide the scripts, but also the build tools they use, at the correct version.
Problem 2: The scripts often contain bespoke logic for things like handling filetypes or where to place files on the disk image.
Appy abstracts the tools away from a script mindset, and into a project mindset. Currently the tool paths are hardcoded but next versions will include dynamic tool providers, including vendoring from internet sources!
What if your copy of Merlin32 (assembler) is in a different location than your teammate's? You can set up local binary overrides with an `appy.user.yaml` file in the same directory. It allows the following 3 program settings:
Appy uses the [MerlinGo](https://github.com/digarok/merlingo) formatter to indent source code. You can override the default indentation with the various options documented here.
-`mc`: mnemonic column, where instructions start
-`oc`: opcode column
-`cc`: comment column
-`ms`: min space, the minimum amount of space it will allow between two columns
You can define these in your `appy.yaml` project file like so:
```
formatflags: "mc:10 oc:14 cc:30 ms:1"
```
You can also set it in files directly by adding it as a comment marked `ed:` on any line of the file like:
Again either comment style works on any line of the file, but don't add more than one modeline per file.
Also, if you set format options at the project AND file level, then Appy will use the project defaults except when a file specifies its own settings, then it will respect the file settings instead.