Blacktime

Blacktime is a Whitespace derivative designed and originally implemented in 2014 by Three If By Whiskey. It was inspired by the realization that Whitespace's 24 distinct operations would map very well into a system of encoding instructions as times.
== Syntax ==
 _ _ _ _ 
 |_||_||_||_|
 |_||_||_||_|
Blacktime programs are composed entirely of spaces (' '), underscores ('_'), vertical pipes ('|'), and line breaks. Instructions are written as contiguous groups of four seven-segment displays, representing either a complete 24-hour time or a "time delta", explained below. There are no syntax errors; if the character in a given position is not the underscore or pipe expected for that position, it is simply ignored.
== Evaluation ==
The initial instruction in a Blacktime program (the "seed") must be a complete, zero-padded, 24-hour time. Each subsequent instruction is a "time delta" whose segments are XOR'd with the previous time's to produce the current time. It is a runtime error, and program execution terminates, if at any point an invalid time is generated by this process.
The previous hour is subtracted from the current, and this value (modulo 24, with the result taking the sign of the divisor) indicates which operation to perform. This same calculation is applied to the minutes (modulo 60) to produce the argument supplied to the operation, if applicable.
== Operations ==
The first eight operations are the ones which take an argument, denoted as n in their descriptions.
Opcode	Name 	Description
0 	push 	Place n at the top of the stack.
1 	copy 	Place at the top of the stack the value n levels deep, such that copy 0 is a synonym for dup.
2 	slide	Remove the n values beneath the top of the stack.
3 	label	Create a label called n, to be used as a jump target.
4 	call 	Call the "subroutine" starting at label n; a subsequent ret will resume execution from the point of this call.
5 	jump 	Jump to label n.
6 	jz 	Remove the value at the top of the stack and jump to label n if it was 0.
7 	jn 	″ if it was negative.
8 	pop 	Remove the value at the top of the stack.
9 	dup 	Duplicate the value at the top of the stack.
10 	swap 	Swap the two values at the top of the stack.
11 	add 	Remove the two values at the top of the stack and push back their sum.
12 	sub 	″ difference.
13 	mul 	″ product.
14 	div 	″ quotient.
15 	mod 	″ remainder.
16 	store	Remove the two values at the top of the stack and store the first in the heap at the address indicated by the second.
17 	load 	Replace the value at the top of the stack with the value at the indicated heap address.
18 	ret 	Return from a call operation.
19 	ichr 	Place at the top of the stack the value of a user-supplied character.
20 	inum 	″ number.
21 	ochr 	Remove the value at the top of the stack and output its value as a character.
22 	onum 	″ number.
23 	exit 	Terminate program execution, perhaps prematurely.
== Example programs ==
=== Hello, world! ===
 _ _ _ _ _ _ _ _ _ _ 
 _|| ||_||_| | | ||_ |_ _| | _ |_|| |_| 
 |_ |_| ||_| _ |_ | | || |_ | |_| _ |_ |_ 
 _ _ _ _ _ _ _ _ _ 
 | _ | | _ _ |_ |_ | _ _ | _| | 
 |_ |_| | ||_||_| ||_ |_ |_| _ |_ | | |_ _ 
 _ _ _ _ _ _ _ _ _ 
 | | |_| | | | |_ | | | _ | | | 
 |_ _ _ | ||_ | | |_| |_||_ | |_| |_ | | 
 _ _ _ _ _ _ _ _ _ 
 _ |_ | | | _|| | | | | _ | | | |_ 
 |_|| | || | |_ | |_ | _ |_ | |_ |_ _ |_ 
 _ _ _ _ 
 |_ | | |_ _ |_ _ | | 
 |_ _ | |_| | |_ | 
=== Cat ===
 _ _ _ `push 0` operations _ 
 _| | | _||_ | are good places to _ |_ |_ 
 |_ | | _| ||_ store commentary. | _ | 
 _ _ _ _ 
 |_ |_| | | | | |_ _| | | |_ 
 ||_ |_ | _ | | | _ |_
== Computational class ==
Because it is possible to interpret brainfuck in Whitespace, Blacktime is trivially Turing-complete.
Category:Languages
Category:2014