VM::Dreamer::Instructions - The heavy lifting
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);
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( $machine, '72' );
Prompts the user for input and, if valid, stores their input in memory at address '72'.
output_from_mb( $machine, '72' );
Outputs the value stored in memory at address '72' to the user.
store( $machine, '1011101' );
Stores the value on the accumulator at address '1011101' in memory.
load( $machine, '271104523210' );
Loads the value stored in memory at address '271104523210' onto the accumulator.
add( $machine, '10011100101001' );
Adds the value stored in memory at address '10011100101001' to the current value on the accumulator.
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( $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( $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( $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( $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($machine);
Sets the halt flag to 1. This means that the machine should cease operation.
VM::Dreamer::execute_next_instruction VM::Dreamer::Languages::Grasshopper
William Stevenson <william at coders dot coop>
This software is Copyright (c) 2013 by William Stevenson.
This is free software, licensed under:
The Artistic License 2.0 (GPL Compatible)
To install VM::Dreamer, copy and paste the appropriate command in to your terminal.
cpanm
cpanm VM::Dreamer
CPAN shell
perl -MCPAN -e shell install VM::Dreamer
For more information on module installation, please visit the detailed CPAN module installation guide.