h1. Intcode (dis-)assembler p. This is an assembler and disassembler pair for the intcode vm. h2. Assembler p. Each instruction, directive, or label should appear on a line by itself. h3. Usage bc. $ ./as source.code h3. Instruction codes - add 1 2 3 := Add - mul 1 2 3 := Multiply - inp 1 := Input - out 1 := Output - jnz 1 2 := Jump if not zero - jez 1 2 := Jump if equal to zero - tlt 1 2 3 := Test if less than - teq 1 2 3 := Test if equal to - arb 1 := Adjust relative base - hlt := Halt p. Optionally, commas may be used to separate arguments. h3. Labels p. Specify a label with @label:@, then use it in the assembly. Sigilising it is valid, immediate @label@, positional @label, or relative @&label@. The merits of doing so in some cases are... Hmm. h3. Directives - @org location := Organise the code to this location - @dat 1 2 3 4 ... := Insert this data literally into the bytecode h3. Sigils - @ := Positional argument - @&@ := Relative argument h3. Comments p. @;@ to end of line is a comment, and is ignored by the assembler. h2. Disassembler p. Prints the location of the start of each instruction and the instruction itself using the syntax detailed above. h3. Usage bc. $ ./das byte.code