BoolSpool
Created by User:DocHerrings on July 10th, 2011, BoolSpool is an attempt by the author to create a language in which reduction to brainfuck is non-trivial, if not difficult. It is currently unknown if BoolSpool is Turing Complete, as the specifications are not yet finished.
Data Structures
BoolSpool has two major data structures - the track and the drum, which is composed of 8 spools.
The Track
The track is an right-infinite array in which every cell contains 0 bits. A visualization is below:
Cell 1 00000000 Cell 2 00000000 Cell 3 00000000 ....
The Drum
The drum is composed of 8 spools, each of which is made up of 8 bits. The spools can rotate freely, and the order of the spools on the drum can be rotated as well. The head spool is the one that is first on the drum (the leftmost spool in the visual), and the first row of the drum is known as the write head (in square brackets). A visualization is below:
0[| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |] 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 2 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 3 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 4 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 5 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 6 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 7 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Instruction Set
All instructions are composed of 8 bits. All non-binary characters are ignored. All instructions have three parts, the operator code, the data trit, and the memory trit. The memory trit determines what portion of memory is being accessed. The mapping is as follows:
000 and 100 Spool pointer 001 and 101 Drum 010 and 110 Track pointer 011 and 111 Track
The following maps the
(OP)(DAT)(MEM) 00-> Spool pointer -> Increment pointer by data amount Drum -> NXORS the head spool with the data trit (which is padded to 0 bits by 0's on the right) Track pointer -> Increment pointer by data amount Track -> NANDs the track with the data'th spool 01-> Spool pointer -> Decrement pointer by data amount Drum -> Rotate current spool data spaces Track pointer -> Decrement pointer by data amount Track -> Zero the data'th bit and zero data'th spool 10-> Spool pointer -> Output head spool as char (after a bit shift of data) Drum -> Remove a character from the stndin and place it's binary representation (padded to 8 bits) in the data'th tumbler Track pointer -> Output track data as char (after a bit shift of data) Track -> Remove a character from the stndin and place it's binary representation (padded to 8 bits) on the track (after a bit shift of data) 11-> Unfinished
Examples
Hello World
In progress. Currently prints "HELLO". A commented version will be added when the program is complete.
00100001 01100001 00010001 10000000 01000111 00101001 01011001 00010001 10000000 01000111 00110001 01100001 00010001 10000000 10000000 01000111 00100001 01101001 00111001 01001001 00000001 01011001 00010001 10000000
Without optional linebreaks:
001000010110000100010001100000000100011100101001010110010001000110000000010001110011000101100001 000100011000000010000000010001110010000101101001001110010100100100000001010110010001000110000000