Add Damn Simple Code
@@ -0,0 +1,69 @@
|
||||
|
||||
# DSC: Damn Simple Code
|
||||
|
||||
- This is a concept doc for the DSC programming language
|
||||
- None of this is final and may change at any time, this is just a concept to figure out how a simple programming language could be implemented at a level that is just above assembly
|
||||
|
||||
## Type System
|
||||
|
||||
- as this is a very basic langauge, all variables will be of type int for now.
|
||||
- statics have a constant size decided at compile time and are stored in a static memory region at the start of the compiled
|
||||
binary
|
||||
- constants will be stored in the same way as statics, however consts are immutable.
|
||||
|
||||
## Variables
|
||||
|
||||
- variables will use the general purpose registers within the CPU to store data.
|
||||
- this means up to 8 variables can be declared in a given method with the current architecture.
|
||||
- it may be worth changing this to 16 later on.
|
||||
|
||||
## Syntax
|
||||
|
||||
```dsc
|
||||
// Function calls
|
||||
|
||||
Proc main(param1, param2, param3): // does something random
|
||||
|
||||
// you can invoke assembly methods.
|
||||
// this is useful for operations where writing code at the lowest level is preferable
|
||||
// !!! Warning !!! - this is equivalent to embedding assembly within the current function
|
||||
// this may mess with registers so ensure you know what the ASM is doing.
|
||||
Call @init;
|
||||
|
||||
var0 = param1 + param2;
|
||||
push(var0);
|
||||
var1 = pop();
|
||||
|
||||
If (var0 == var1):
|
||||
Return;
|
||||
|
||||
Else:
|
||||
var3 = var2 | var3;
|
||||
Return;
|
||||
|
||||
EndIf
|
||||
EndProc
|
||||
|
||||
// declare a constant. this can be an int, string, bool etc and is immutable.
|
||||
// the type is inferred from the value
|
||||
|
||||
Const message = "Hello World!"
|
||||
|
||||
// statics are declared similarly however they are mutable
|
||||
|
||||
Static err_flag = False;
|
||||
|
||||
// Assembly blocks can be used when it's inconvenient to write higher level code
|
||||
|
||||
Asm:
|
||||
// set up the stack
|
||||
@stack 0x10000
|
||||
@init
|
||||
LDA @stack
|
||||
MOV MDR, BPR
|
||||
MOV MDR, SPR
|
||||
RET
|
||||
EndAsm
|
||||
|
||||
|
||||
```
|
||||
Reference in New Issue
Block a user