diff --git a/README.md b/README.md index c070505..9257975 100644 --- a/README.md +++ b/README.md @@ -1,22 +1,64 @@ # chalk -TODO: Write a description here +Chalk is a basic compiler from a toy language into CHIP-8 bytecode. +It supports some higher-level constructs like looks and if-statements, +and has some higher-level functions for drawing numbers and sprites. ## Installation -TODO: Write installation instructions here +To compile chalk, simply run +```Bash +crystal build --release src/chalk.cr +``` ## Usage +### Syntax +Chalk has minimal syntax. All code goes into functions, which are declared as follows: +``` +fun function(param, another_param): return_type { -TODO: Write usage instructions here +} +``` +All parameters are assumed to be of type `u8`, an unsigned byte. +The return type can be either `u8` or `u0`, the latter being the same as `void` in C. +Users can declare variables using the `var` keyword: +``` +var name = 5; +``` +Assigning to existing variables is performed as such: +``` +name = 6; +``` +It's possible to call another function, which uses the CHIP-8 stack. This stack +is used exclusively for function calls, and may not exceed 12, as per the specifications +of the CHIP-8 virtual machine. +``` +var result = double(name); +``` +Additionally, to ensure that user-defined variables stored +in registers are not modified, chalk uses its own custom stack, placed at the end of the program. +This stack is accessed by modifying a stack pointer register, which holds the offset from the beginning of the stack. Because CHIP-8 registers can only hold up 8-bit unsinged numbers, the stack is therefore limited to 254 items. -## Development +If statements take "truthy" values to be those that have a nonzero value. As such, +`if (0) {}` will never run, while `while(5) {}` will never terminate. Input can be awaited +using the `get_key` function, which returns the number of the next key pressed. -TODO: Write development instructions here +Sprites can be declared using a quasi-visual syntax: +``` +sprite dum [ +` x x ` +` x x ` +` x x ` +` ` +`x x` +` xxxxxx ` +] +``` +These sprites can then be used in calls to `draw_sprite(sprite, x, y)`. ## Contributing -1. Fork it () +1. Fork it () 2. Create your feature branch (`git checkout -b my-new-feature`) 3. Commit your changes (`git commit -am 'Add some feature'`) 4. Push to the branch (`git push origin my-new-feature`) @@ -24,4 +66,4 @@ TODO: Write development instructions here ## Contributors -- [your-github-user](https://github.com/your-github-user) Danila Fedorin - creator, maintainer +- [DanilaFe](https://github.com/DanilaFe) Danila Fedorin - creator, maintainer