MakarafaC
- FUUUCK!! I HATE IT!!
![](/w/images/5/52/MakarafaC.png)
MakarafaC is an esolang designed by User:Dtp09. It is a non-textual, 8-bit language invented as an inside joke between a discord server about Vocaloid Lost Media.
MakarafaC reads programs as various images that come from different songs in what is known as "The Heart Series", a set of 13 songs made by a producer known as MakarafaP. Every song within the heart series is accompanied with a video, and each video contains a single heart that persists throughout the whole song. In the context of MakarafaC, only 11 of these hearts are used, excluding the 2 remasters (those being the ones with the black heart and white background.)
The name MakarafaC is a combination of MakarafaP (producer of the heart series) and C, as in the programming language C.
Specifications
- 2^16 hearts of ROM (this is the program)
- 64kb addressable RAM initialized to 0
- $0000-$DEFF: work RAM
- $DF00-$DFFF: 256 byte stack
- $E000-$EFFF: 4096 bytes user input in ASCII
- $F000-$FFFF: 4096 bytes output in ASCII
- ALL 64kb is usable!
- Stack pointer initialized to 0 and ascends
- 16 bit address register to access RAM. Writing a byte to this register will write to either the higher byte (if "The Bit" is 0) or the lower byte (if "The Bit" is 1), and then flip "The Bit".
- "The Bit" is used as a compare flag for conditional jumping, as well as determines to write to the high or low byte of address register, and also determines which operation the math instruction will preform. "The Bit" is is flipped on every write to address register, and initialized to 0 (first write to address register is to the high byte).
- 8 bit Accumulator register
Instructions
Load immediate to accumulator
Immediate values are written as a three heart wide operand, with each heart treated as three bits, totaling a nine bit operand.
Heart 1 | Heart 2 | Heart 3 | |||||||
---|---|---|---|---|---|---|---|---|---|
![]() |
8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
Heart | Binary |
---|---|
![]() |
000 |
![]() |
001 |
![]() |
010 |
![]() |
011 |
![]() |
100 |
![]() |
101 |
![]() |
110 |
![]() |
111 |
The lower of the 8 bits represent the value being loaded. The eighth bit (in red) will determine where the value will be loaded.
- 8th bit clear: load to accumulator
- 8th bit set: terminate the programe lol
"The Bit"
"The Bit" is the greatest obstacle one can face while programming for MakarafaC. As such, it must be spelled with double quotes and capital letters, and cannot be used in the third person too often. "The Bit" is used for writing to the address register, jumping, and arithmetic, and may only be flipped (writing to the address register) and set/clear (with a comparison) which both rely on the accumulator to be in the right state, or the program may fail.
Depending on the context in which you would need to set/clear "The Bit", there may be a shorter method possible (such as overwriting a known byte of address register), but both of these should work in basically any case, if need be.
Setting "The Bit"
Push the accumulator to the stack
Top of stack == accumulator (always true)
Pull from the stack (accumulator left unchanged, stack position restored)