diff --git a/.gitignore b/.gitignore index cf662f7..8011ed1 100644 --- a/.gitignore +++ b/.gitignore @@ -19,3 +19,6 @@ target/ # and can be added to the global gitignore or merged into this file. For a more nuclear # option (not recommended) you can uncomment the following to ignore the entire idea folder. #.idea/ + +# So we do not commit the compiled specifications for every small change +*.pdf diff --git a/specification/specification.typst b/specification/specification.typst new file mode 100644 index 0000000..a2f9c4d --- /dev/null +++ b/specification/specification.typst @@ -0,0 +1,41 @@ +#set page( +paper:"a4", +background: rotate(24deg, + text(48pt, fill: rgb("FFCBC4"))[ + *WORK IN PROGRESS* + ] +)) + += SVC16: A Simple Virtual Computer + +== Motivation and Goals + +We want to fully specify a very simple virtual computer that can be emulated. +The goal is to recreate the feeling of writing games for a system with very tight hardware constraints without having to deal with the complicated reality of real retro systems. +It should be simple to understand every instruction, to write machine code that runs on it, and to write a compiler for it. +The instruction set and the design in general are in no way meant to resemble something that would make sense in real hardware. +It is also not intended to be as simple and elegant as it could possibly be. This might make it easier to explain but harder to develop for. +Since learning about assemblers and compilers is the point, we provide no guidelines on how to build the programs. + +=== Reproducibility + +The biggest secondary goal is to design a system that behaves the same everywhere. +The question of how the emulation is run should never matter for the person writing the program or game. +This means there can be no features that might only available in one implementation. +It also means, that the performance characteristics must be the same. +An emulator can either run the system at the intended speed, or it can not. + + + +== General Principles + +== The Simulated System +=== Screen and Colors +=== Input +=== Synchronization + + +== Instruction Set + + +