Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // NOTES:
- // WHEN PUSHING CONSTANTS ON THE STACK YOU CAN SPECIFY THE SIZE IN BITS
- // ALSO, WHEN PUSHING/POPPING OFF THE STACK, YOU CAN SPECIFY THE REGISTERS SIZE
- //
- // !TODO!: MAKE SURE EVERYTHING IS 1 BIT AND 0 TICKS (ALSO DIGITAL)
- //
- // === STACKS ===
- // MAIN_STACK_OFFSET = 0
- // TRANSFER_STACK_OFFSET = 1
- // RETURN_STACK_OFFSET = 2
- // ==============
- MAKE_STACK_OFFSET(STACK_OFFSET)
- {
- PUSH STACK_REGISTER
- EXECUTE ADD, 2
- POP STACK_REGISTER
- }
- UNMAKE_STACK_OFFSET(STACK_OFFSET)
- {
- PUSH STACK_REGISTER
- EXECUTE SUBTRACT_REVERSE, 2
- POP STACK_REGISTER
- }
- _MOVE_TO_FRONT_OF_STACK(N)
- {
- if N == 0
- {
- PUSH RETURN_STACK_OFFSET
- EXECUTE MAKE_STACK_OFFSET, 1
- POP XOR_REGISTER
- PUSH RETURN_STACK_OFFSET
- EXECUTE UNMAKE_STACK_OFFSET, 1
- PUSH XOR_REGISTER
- }
- else
- {
- PUSH 1
- EXECUTE SUBRACTION, 1
- POP XOR_REGISTER
- PUSH TRANSFER_STACK_OFFSET
- EXECUTE MAKE_STACK_OFFSET, 1
- PUSH XOR_REGISTER
- PUSH TRANSFER_STACK_OFFSET
- EXECUTE UNMAKE_STACK_OFFSET, 1
- //!DIGITAL RECURSION!
- EXECUTE _MOVE_TO_FRONT_OF_STACK, 1
- PUSH TRANSFER_STACK_OFFSET
- EXECUTE MAKE_STACK_OFFSET, 1
- POP XOR_REGISTER
- PUSH TRANSFER_STACK_OFFSET
- EXECUTE UNMAKE_STACK_OFFSET, 1
- PUSH XOR_REGISTER
- }
- }
- // MOVES STACK ELEMENT N, STARTING FRONT TO BACK WHERE 0 IS THE FRONT MOST ELEMENT, TO THE FRONT OF THE STACK
- MOVE_TO_FRONT_OF_STACK(N)
- {
- PUSH RETURN_STACK_OFFSET
- EXECUTE MAKE_STACK_OFFSET, 1
- PUSH XOR_REGISTER
- PUSH RETURN_STACK_OFFSET
- EXECUTE UNMAKE_STACK_OFFSET, 1
- //!DIGITAL RECURSION!
- EXECUTE _MOVE_TO_FRONT_OF_STACK, 1
- PUSH RETURN_STACK_OFFSET
- EXECUTE MAKE_STACK_OFFSET, 1
- POP XOR_REGISTER
- PUSH RETURN_STACK_OFFSET
- EXECUTE UNMAKE_STACK_OFFSET, 1
- PUSH XOR_REGISTER
- PUSH RETURN_STACK_OFFSET
- EXECUTE MAKE_STACK_OFFSET, 1
- POP XOR_REGISTER
- PUSH RETURN_STACK_OFFSET
- EXECUTE UNMAKE_STACK_OFFSET, 1
- }
- _DUPLICATE_STACK(N)
- {
- IF N == 0
- {
- }
- ELSE
- {
- PUSH 1
- EXECUTE SUBTRACTION, 1
- PUSH 1
- EXECUTE MOVE_TO_FRONT_OF_STACK, 1
- POP XOR_REGISTER
- PUSH XOR_REGISTER
- PUSH XOR_REGISTER
- PUSH 2
- EXECUTE MOVE_TO_FRONT_OF_STACK, 2
- // !DIGITAL RECURSION!
- EXECUTE _DUPLICATE_STACK, 1
- }
- }
- DUPLICATE_STACK(N)
- {
- PUSH 1
- EXECUTE MAKE_STACK_OFFSET, 1
- PUSH XOR_REGISTER
- PUSH 1
- EXECUTE UNMAKE_STACK_OFFSET, 1
- // !DIGITAL RECURSION!
- EXECUTE _DUPLICATE_STACK, 1
- PUSH 1
- EXECUTE MAKE_STACK_OFFSET, 1
- POP XOR_REGISTER
- PUSH 1
- EXECUTE UNMAKE_STACK_OFFSET, 1
- }
- DUPLICATE_STACK
- {
- PUSH 1
- EXECUTE MAKE_STACK_OFFSET, 1
- PUSH XOR_REGISTER
- PUSH 1
- EXECUTE UNMAKE_STACK_OFFSET, 1
- POP XOR_REGISTER
- PUSH XOR_REGISTER
- PUSH XOR_REGISTER
- PUSH 1
- EXECUTE MAKE_STACK_OFFSET, 1
- POP XOR_REGISTER
- PUSH 1
- EXECUTE UNMAKE_STACK_OFFSET, 1
- }
Advertisement
Comments
-
- _MOVE_FROM_OFFSET_TO_POS(OFFSET, POS)
- {
- if POS == 0
- {
- EXECUTE MOVE_TO_FRONT_OF_STACK, 1
- }
- else
- {
- PUSH 1
- EXECUTE SUBRACTION, 1
- POP XOR_REGISTER
- PUSH 3
- EXECUTE MAKE_STACK_OFFSET, 1
- PUSH XOR_REGISTER
- PUSH 3
- EXECUTE UNMAKE_STACK_OFFSET, 1
- //!DIGITAL RECURSION!
- EXECUTE _MOVE_FROM_OFFSET_TO_POS, 1
- PUSH 3
- EXECUTE MAKE_STACK_OFFSET, 1
- POP XOR_REGISTER
- PUSH 3
- EXECUTE UNMAKE_STACK_OFFSET, 1
- PUSH XOR_REGISTER
- }
- }
- MOVE_FROM_OFFSET_TO_POS(POS,OFFSET)
- {
- PUSH 1
- EXECUTE MOVE_TO_FRONT_OF_STACK, 1
- PUSH 3
- EXECUTE MAKE_STACK_OFFSET, 1
- PUSH XOR_REGISTER
- PUSH 3
- EXECUTE UNMAKE_STACK_OFFSET, 1
- PUSH 3
- EXECUTE MAKE_STACK_OFFSET, 1
- POP XOR_REGISTER
- PUSH 3
- EXECUTE UNMAKE_STACK_OFFSET, 1
- }
Add Comment
Please, Sign In to add comment