NAME
VM::Dreamer::Instructions - The heavy lifting
SYNOPSIS
input_to_mb( $machine, '72' ); output_from_my( $machine, $operand ); store( $machine, $operand ); load( $machine, $operand ); add( $machine, $operand ); subtract( $machine, $operand ); branch_always( $machine, $operand ); branch_if_zero( $machine, $operand ); branch_if_negative( $machine, $operand ); branch_if_positive( $machine, $operand ); halt($machine);
DESCRIPTION
These functions will be used in a dispatch table in VM::Dreamer::Languages::YourMachine where you map your operation codes to these functions.
A base 10 machine with an op code width of 1 might map op code 7 to branch_always. A base 2 machine with an opcode width of 4 might map 0101 to subtract.
For an example, see VM::Dreamer::Languages::Grasshopper
If you'd like to add more instructions, you can do so here in VM::Dreamer::Instructions and send me a pull request. You can also use VM::Dreamer::Local for your own code.
input_to_mb
input_to_mb( $machine, '72' );
Prompts the user for input and, if valid, stores their input in memory at address '72'.
output_from_mb
output_from_mb( $machine, '72' );
Outputs the value stored in memory at address '72' to the user.
store
store( $machine, '1011101' );
Stores the value on the accumulator at address '1011101' in memory.
load
load( $machine, '271104523210' );
Loads the value stored in memory at address '271104523210' onto the accumulator.
add
add( $machine, '10011100101001' );
Adds the value stored in memory at address '10011100101001' to the current value on the accumulator.
subtract( $machine, '9744321229' );
Subtracts the value stored in memory at address '9744321229' from the current value on the accumulator.
If the resulting value is negative, the negative flag is set and the remaining value on the accumulator is undefined.
branch_always
branch_always( $machine, '432' );
Sets the value of the counter to 432, always.
This means that the next instruction executed will be fetched from address 432 in memory.
branch_if_zero
branch_if_zero( $machine, '34221023' );
Sets the value of the counter to 34221023 if the value on the accumulator is zero.
In other words, if the accumulator is zero, fetch the next instruction from address 34221023 in memory.
branch_if_negative
branch_if_negative( $machine, '1521532' );
Sets the value of the counter to 1521532 if the negative flag is set.
In other words, if the negative flag is set, fetch the next instruction from address 1521532 in memory.
branch_if_positive
branch_if_positive( $machine, '92345' );
Sets the value of the counter to 92345 if the value on the accumulator is greater than zero and the negative flag is not set.
In other words, if the negative flag is unset and the accumulator is greater than 0, fetch the next instruction from address 92345 in memory.
halt
halt($machine);
Sets the halt flag to 1. This means that the machine should cease operation.
SEE ALSO
VM::Dreamer::execute_next_instruction VM::Dreamer::Languages::Grasshopper
AUTHOR
William Stevenson <william at coders dot coop>
COPYRIGHT AND LICENSE
This software is Copyright (c) 2013 by William Stevenson.
This is free software, licensed under:
The Artistic License 2.0 (GPL Compatible)