MakarafaC

:FUUUCK!! I HATE IT!!
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 ==
Heart	Instruction
 	Load immediate to accumulator/
 	Load value at address to accumulator
 	Pull from stack to accumulator
 	Push from accumulator to stack
 	Write accumulator to address register
 	Write accumulator to stack pointer
 	Set "The Bit" if accumulator == top stack value
 	NAND accumulator with top stack value
 	Pull from stack, if "The Bit" is set, add to accumulator. else, subtract.
 	Jump to address in ROM if "The Bit" is set
 	Set "The Bit" if accumulator > top stack value (unsigned)
==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.
 Load Instruction
	Heart 1	Heart 1	Heart 1	Heart 2	Heart 2	Heart 2	Heart 3	Heart 3	Heart 3
	8 	7 	6 	5 	4 	3 	2 	1 	0
 Heart Values
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)
===Clearing "The Bit"===
* Push the accumulator to the stack
* Push 0 to the stack
* Load 1 to accumulator
* Top of stack == accumulator (0 != 1, bit is cleared)
* Pull twice, restoring original accumulator.
Category:Languages
Category:2024
Category:Stack-based
Category:Turing complete
Category:Unimplemented
Category:Non-textual
Category:Low-level