X-Git-Url: http://git.subgeniuskitty.com/vvhitespace/.git/blobdiff_plain/e3dfa9e4d24186cdb143ca6e05d54448049a564f..07331ceeb01f6045ddf02e0aba05752ef1ea8838:/examples/wump/wump_game.pvvs diff --git a/examples/wump/wump_game.pvvs b/examples/wump/wump_game.pvvs deleted file mode 100644 index 7d85f8d..0000000 --- a/examples/wump/wump_game.pvvs +++ /dev/null @@ -1,337 +0,0 @@ -#ifndef WUMP_GAME -#define WUMP_GAME - -@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -@ (c) 2019 Aaron Taylor -@ See LICENSE.txt file for copyright and license details. -@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - -@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -@ Name: -@ get_tunnel_destination -@ Description: -@ Returns the room number corresponding to the destination of a tunnel -@ specified by room and slot. -@ Call Stack: -@ slot -@ room_number <-- TOS -@ Return Stack: -@ dst_room_number <-- TOS -@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -NSSVTSSSTSSSN | MARK: 10001000 (get_tunnel_destination) -@ The pointer we seek is: -@ (room_number * room_struct_size) + 2 + slot + ROOM_DATA_BASE -@ Where the '+2' accounts for the pit and bat booleans. -NSTTSSSTSTTN | JSR > 10001011 (get_room_struct_size) -TSSN | MULTIPLY -SSSTSN | PUSH +2 -TSSS | ADD -TSSS | ADD -SSSTSSSSSSSSSSSSSN | PUSH 0x2000 (ROOM_DATA_BASE address) -TSSS | ADD -TTT | LOAD -NTN | RTS - -@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -@ Name: -@ get_room_struct_size -@ Description: -@ Returns the size in words of the data structure for a single room. -@ For example, with 3 links plus bat and pit booleans, the size is 5 words. -@ Call Stack: -@ -@ Return Stack: -@ size <-- TOS -@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -NSSVTSSSTSTTN | MARK: 10001011 (get_room_struct_size) -SSSTSSSSSSSSSSTTN | PUSH 0x1003 (GAME_DATA_BASE+3 = links_per_room address) -TTT | LOAD -SSSTSN | PUSH +2 -TSSS | ADD -NTN | RTS - -@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -@ Name: -@ room_has_bats -@ Description: -@ Check if room_number contains bats. -@ Returns 1 or 0 representing true or false. -@ Call Stack: -@ room_number <-- TOS -@ Return Stack: -@ 1 or 0 <-- TOS -@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -NSSVTSSSTTSSN | MARK: 10001100 (room_has_bats) -@ We seek the pointer: -@ (room_number * room_struct_size) + 1 + ROOM_DATA_BASE -@ where '+1' accounts for the offset of the bat boolean in the desired room. -NSTTSSSTSTTN | JSR > 10001011 (get_room_struct_size) -TSSN | MULTIPLY -SSSTN | PUSH +1 -TSSS | ADD -SSSTSSSSSSSSSSSSSN | PUSH 0x2000 (GAME_DATA_BASE address) -TSSS | ADD -TTT | LOAD -NTN | RTS - -@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -@ Name: -@ room_has_pits -@ Description: -@ Check if room_number contains pits. -@ Returns 1 or 0 representing true or false. -@ Call Stack: -@ room_number <-- TOS -@ Return Stack: -@ 1 or 0 <-- TOS -@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -NSSVTSSSTTSTN | MARK: 10001101 (room_has_pits) -@ We seek the pointer: -@ (room_number * room_struct_size) + 0 + ROOM_DATA_BASE -@ where '+0' accounts for the offset of the pit boolean in the desired room. -NSTTSSSTSTTN | JSR > 10001011 (get_room_struct_size) -TSSN | MULTIPLY -SSSTSSSSSSSSSSSSSN | PUSH 0x2000 (GAME_DATA_BASE address) -TSSS | ADD -TTT | LOAD -NTN | RTS - -@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -@ Name: -@ room_has_wumpus -@ Description: -@ Check if room contains wumpus. -@ Returns 1 or 0 representing true or false. -@ Call Stack: -@ room_number <-- TOS -@ Return Stack: -@ 1 or 0 <-- TOS -@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -NSSVTSTSSSSSN | MARK: 10100000 (room_has_wumpus) -SSSTSSSSSSSSSTTTN | PUSH 0x1007 (wumpus_location address) -TTT | LOAD -TSST | SUBTRACT -NTSTSTSSSSSSSSSSSSSN | BRZ > 10100000 00000000 (room_has_wumpus:true) -SSSSN | PUSH 0 (false) -NTN | RTS -NSSVTSTSSSSSSSSSSSSSN | MARK: 10100000 00000000 (room_has_wumpus:true) -SSSTN | PUSH 1 (true) -NTN | RTS - -@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -@ Name: -@ are_bats_near -@ Description: -@ Given a room number, checks rooms within one hop for bats. -@ Returns 1 if bats are present or 0 if no bats. -@ Call Stack: -@ room_number <-- TOS -@ Return Stack: -@ 1 or 0 <-- TOS -@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -#include -NSSVTSSTTTSSN | MARK: 10011100 (are_bats_near) - -@ Prepare the stack by loading the number of links per room and decrementing. -@ We will loop until this reaches 0 or we find bats. -SSSTSSSSSSSSSSTTN | PUSH 0x1003 (number_of_links_per_room address) -TTT | LOAD -SSSTN | PUSH 1 -TSST | SUBTRACT - -@ Check one nearby room on each pass through this loop. -@ TOS> tunnel_index, room_number -NSSVTSSTTTSSSSSSSSSSN | MARK: 10011100 00000000 (are_bats_near:loop) -SNS | DUP -SSSTTN | PUSH 3 -NSTTTSSN | JSR > 1100 (deepdup) -NSTTSSSTSSSN | JSR > 10001000 (get_tunnel_destination) -NSTTSSSTTSSN | JSR > 10001100 (room_has_bats) -NTSTSSTTTSSSSSSSSSTN | BRZ > 10011100 00000001 (no_bats_in_this_room) -@ Found bats. Clean up and return. -SNN | DROP -SNN | DROP -SSSTN | PUSH 1 -NTN | RTS -NSSVTSSTTTSSSSSSSSSTN | MARK: 10011100 00000001 (no_bats_in_this_room) -@ Test for end of loop. -SNS | DUP -NTSTSSTTTSSSSSSSSTSN | BRZ > 10011100 00000010 (are_bats_near:loop_end) -@ No bats found yet, but still need to check some rooms. -@ Decrement tunnel index and loop again. -SSSTN | PUSH 1 -TSST | SUBTRACT -NSNTSSTTTSSSSSSSSSSN | JMP > 10011100 00000000 (are_bats_near:loop) -@ No bats found in nearby rooms. Clean up and return. -NSSVTSSTTTSSSSSSSSTSN | MARK: 10011100 00000010 (are_bats_near:loop_end) -SNN | DROP -SNN | DROP -SSSSN | PUSH 0 -NTN | RTS - -@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -@ Name: -@ are_pits_near -@ Description: -@ Given a room number, checks rooms within one hop for pits. -@ Returns 1 if pits are present or 0 if no pits. -@ Call Stack: -@ room_number <-- TOS -@ Return Stack: -@ 1 or 0 <-- TOS -@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -#include -NSSVTSSTTTSTN | MARK: 10011101 (are_pits_near) - -@ Prepare the stack by loading the number of links per room and decrementing. -@ We will loop until this reaches 0 or we find pits. -SSSTSSSSSSSSSSTTN | PUSH 0x1003 (number_of_links_per_room address) -TTT | LOAD -SSSTN | PUSH 1 -TSST | SUBTRACT - -@ Check one nearby room on each pass through this loop. -@ TOS> tunnel_index, room_number -NSSVTSSTTTSTSSSSSSSSN | MARK: 10011101 00000000 (are_pits_near:loop) -SNS | DUP -SSSTTN | PUSH 3 -NSTTTSSN | JSR > 1100 (deepdup) -NSTTSSSTSSSN | JSR > 10001000 (get_tunnel_destination) -NSTTSSSTTSTN | JSR > 10001101 (room_has_pits) -NTSTSSTTTSTSSSSSSSTN | BRZ > 10011101 00000001 (no_pits_in_this_room) -@ Found pits. Clean up and return. -SNN | DROP -SNN | DROP -SSSTN | PUSH 1 -NTN | RTS -NSSVTSSTTTSTSSSSSSSTN | MARK: 10011101 00000001 (no_pits_in_this_room) -@ Test for end of loop. -SNS | DUP -NTSTSSTTTSTSSSSSSTSN | BRZ > 10011101 00000010 (are_pits_near:loop_end) -@ No pits found yet, but still need to check some rooms. -@ Decrement tunnel index and loop again. -SSSTN | PUSH 1 -TSST | SUBTRACT -NSNTSSTTTSTSSSSSSSSN | JMP > 10011101 00000000 (are_pits_near:loop) -@ No pits found in nearby rooms. Clean up and return. -NSSVTSSTTTSTSSSSSSTSN | MARK: 10011101 00000010 (are_pits_near:loop_end) -SNN | DROP -SNN | DROP -SSSSN | PUSH 0 -NTN | RTS - -@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -@ Name: -@ is_wumpus_very_near -@ Description: -@ Given a room number, checks rooms within one hop for the wumpus. -@ Returns 1 if wumpus is present, otherwise 0. -@ Call Stack: -@ room_number <-- TOS -@ Return Stack: -@ 1 or 0 <-- TOS -@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -#include -NSSVTSSTTTTTN | MARK: 10011111 (is_wumpus_very_near) - -@ Prepare the stack by loading the number of links per room and decrementing. -@ We will loop until this reaches 0 or we find the wumpus. -SSSTSSSSSSSSSSTTN | PUSH 0x1003 (number_of_links_per_room address) -TTT | LOAD -SSSTN | PUSH 1 -TSST | SUBTRACT - -@ Check one nearby room on each pass through this loop. -@ TOS> tunnel_index, room_number -NSSVTSSTTTTTSSSSSSSSN | MARK: 10011111 00000000 (is_wumpus_very_near:loop) -SNS | DUP -SSSTTN | PUSH 3 -NSTTTSSN | JSR > 1100 (deepdup) -NSTTSSSTSSSN | JSR > 10001000 (get_tunnel_destination) -NSTTSTSSSSSN | JSR > 10100000 (room_has_wumpus) -NTSTSSTTTTTSSSSSSSTN | BRZ > 10011111 00000001 (no_wumpus_in_this_room) -@ Found wumpus. Clean up and return. -SNN | DROP -SNN | DROP -SSSTN | PUSH 1 -NTN | RTS -NSSVTSSTTTTTSSSSSSSTN | MARK: 10011111 00000001 (no_wumpus_in_this_room) -@ Test for end of loop. -SNS | DUP -NTSTSSTTTTTSSSSSSTSN | BRZ > 10011111 00000010 (is_wumpus_very_near:loop_end) -@ No wumpus found yet, but still need to check some rooms. -@ Decrement tunnel index and loop again. -SSSTN | PUSH 1 -TSST | SUBTRACT -NSNTSSTTTTTSSSSSSSSN | JMP > 10011111 00000000 (is_wumpus_very_near:loop) -@ No wumpus found in nearby rooms. Clean up and return. -NSSVTSSTTTTTSSSSSSTSN | MARK: 10011111 00000010 (is_wumpus_very_near:loop_end) -SNN | DROP -SNN | DROP -SSSSN | PUSH 0 -NTN | RTS - -@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -@ Name: -@ is_wumpus_near -@ Description: -@ Given a room number, checks rooms within two hops for the wumpus. -@ Returns 1 if wumpus is present, otherwise 0. -@ Call Stack: -@ room_number <-- TOS -@ Return Stack: -@ 1 or 0 <-- TOS -@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -#include -NSSVTSSTTTTSN | MARK: 10011110 (is_wumpus_near) - -@ Prepare the stack by loading the number of links per room and decrementing. -@ We will loop until this reaches 0 or we find the wumpus. -SSSTSSSSSSSSSSTTN | PUSH 0x1003 (number_of_links_per_room address) -TTT | LOAD -SSSTN | PUSH 1 -TSST | SUBTRACT - -@ Check one nearby room and its connecting rooms on each pass through this loop. -@ TOS> tunnel_index, room_number -NSSVTSSTTTTSSSSSSSSSN | MARK: 10011110 00000000 (is_wumpus_near:loop) -SNS | DUP -SSSTTN | PUSH 3 -NSTTTSSN | JSR > 1100 (deepdup) -NSTTSSSTSSSN | JSR > 10001000 (get_tunnel_destination) -@ TOS> tunnel_endpoint, tunnel_index, room_number -SNS | DUP -NSTTSTSSSSSN | JSR > 10100000 (room_has_wumpus) -SSSTN | PUSH 1 -TSST | SUBTRACT -NTSTSSTTTTSSSSSSSTTN | BRZ > 10011110 00000011 (found_wumpus_one_hop) -NSTTSSTTTTTN | JSR > 10011111 (is_wumpus_very_near) -SSSTN | PUSH 1 -TSST | SUBTRACT -NTSTSSTTTTSSSSSSTSSN | BRZ > 10011110 00000100 (found_wumpus_two_hops) -@ Test for end of loop. -SNS | DUP -NTSTSSTTTTSSSSSSSTSN | BRZ > 10011110 00000010 (is_wumpus_near:loop_end) -@ No wumpus found yet, but still need to check some rooms. -@ Decrement tunnel index and loop again. -SSSTN | PUSH 1 -TSST | SUBTRACT -NSNTSSTTTTSSSSSSSSSN | JMP > 10011110 00000000 (is_wumpus_near:loop) - -@ No wumpus found in nearby rooms. Clean up and return. -NSSVTSSTTTTSSSSSSSTSN | MARK: 10011110 00000010 (is_wumpus_near:loop_end) -SNN | DROP -SNN | DROP -SSSSN | PUSH 0 -NTN | RTS - -@ Found wumpus. Clean up and return. -NSSVTSSTTTTSSSSSSSTTN | MARK: 10011110 00000011 (found_wumpus_one_hop) -SNN | DROP -NSSVTSSTTTTSSSSSSTSSN | MARK: 10011110 00000100 (found_wumpus_two_hops) -SNN | DROP -SNN | DROP -SSSTN | PUSH 1 -NTN | RTS - -#endif