PleasingFungus / Silicon-Zeroes

Issue repository for Silicon Zeroes. (Contains no actual code.)
12 stars 0 forks source link

Opcode list missing from custom puzzle "How To" #130

Open mikeweilgart opened 4 years ago

mikeweilgart commented 4 years ago

The "How To" document for making custom puzzles should list the opcodes that can be set into initial memory (and into goal memory).

All that the documentation says currently is:

9: MSET 1 - 10 Instructions, specified as the opcode, the source, the target, and the destination, in that order. '-'s are optional and ignored (the parser only looks for the values used by a specific instruction), but make tests more readable.)

PleasingFungus commented 4 years ago

Agreed that'd be a good feature! I believe the list is:

    { "NOOP", "No Operation", "Take no action." },
    { "SETR", "Set Register", "Store the source value into the destination register." },
    { "0MEM", "Zero Memory", "Set the destination memory slot's value to '0'." },
    { "MSET", "Memory Set", "Store the source value into the destination memory slot." },
    { "ADDR", "Add Register", "Sum the values from the source & target registers, and "
                              "store them in the destination register." },
    { "ADDM", "Add Memory", "Sum the values from the source & target memory slots , and "
                            "store them in the destination memory slot." },
    { "LOAD", "Load", "Store the value from the target memory slot into the destination register." },
    { "SAVE", "Save", "Store the value from the source register into the target memory slot." },
    { "JUMP", "Jump", "Go to the destination slot and continue executing instructions from there." },
    { "BREQ", "Branch if Registers Equal",
              "If the source & target registers' values are equal, go to the destination slot & continue execution." },
    { "MULT", "Multiply", "Multiply the values from the source & target registers, and store them in the destination register.", },
    { "LDAC", "Load Accumulator", "Store the value from the target memory slot into the accumulator." },
    { "ADAC", "Add Accumulator", "Sum the source value with the accumulator, and store it back into the accumulator." },
    { "SVAC", "Save Accumulator", "Save the accumulator's value into the destination memory slot." },
    { "BAKP", "Backup", "Save the accumulator's value into the backup register." },
    { "RSTR", "Restore", "Store the value from the backup register into the accumulator." },
    { "BMEM", "Branch if Memory Equal",
        "If the contents of the source & target memory slots are equal, go to the destination slot & continue execution." },
    { "DIVI", "Divide", "Divide the source by the target; store the quotient in the destination slot, and the remainder in the next slot. If the target is 0, instead store 0 in the destination slot and the source in the remainder." },
    { "GRTR", "Greater Than", "If the source is greater than the target, store 1 in the destination. Otherwise, store 0." },

Hopefully that helps!

a-n-d-r-e-w-l commented 3 years ago

Is there any way to add custom [arbitrary] opcodes?

PleasingFungus commented 3 years ago

Sorry, no. That'd be really cool, but it'd require a significant amount of work that I never had the bandwidth for.

a-n-d-r-e-w-l commented 3 years ago

Aw. I've played through every level now and was thinking of using it to interpret AQA machine code as a challenge.