Example #1
0
def if_zero_add1(ram, target_address, source_address):
    source_value = ram_fetch(ram, source_address)
    if source_value == 0:
        target_value = ram_fetch(ram, target_address)
        new_ram = ram_store(ram, target_address, target_value + 1)
        return new_ram
    else:
        return ram
Example #2
0
def div(ram, target_address, source_address_1, source_address_2):
    source_value_1 = ram_fetch(ram, source_address_1)
    source_value_2 = ram_fetch(ram, source_address_2)
    if source_value_2 == 0:
        return "DIVISION BY 0"
    division = source_value_1 // source_value_2
    new_ram = ram_store(ram, target_address, division)
    return new_ram
Example #3
0
def if_greater_add1(ram, target_address, source_address_1, source_address_2):
    source_value_1 = ram_fetch(ram, source_address_1)
    source_value_2 = ram_fetch(ram, source_address_2)
    if source_value_1 > source_value_2:
        target_value = ram_fetch(ram, target_address)
        new_ram = ram_store(ram, target_address, target_value + 1)
        return new_ram
    else:
        return ram
Example #4
0
def sub(ram, target_address, source_address_1, source_address_2):
    source_value_1 = ram_fetch(ram, source_address_1)
    source_value_2 = ram_fetch(ram, source_address_2)
    subtraction = source_value_1 - source_value_2
    if subtraction < 0:
        new_ram = ram_store(ram, target_address, 0)
        return new_ram
    else:
        new_ram = ram_store(ram, target_address, subtraction)
        return new_ram
Example #5
0
def sub1(ram, target_address):
    target_value = ram_fetch(ram, target_address)
    subtraction = target_value - 1
    if subtraction < 0:
        new_ram = ram_store(ram, target_address, 0)
        return new_ram
    else:
        new_ram = ram_store(ram, target_address, subtraction)
        return new_ram
Example #6
0
def store(ram, target_pointer_address, source_address):
    target_address = ram_fetch(ram, target_pointer_address)
    return copy(ram, target_address, source_address)
Example #7
0
def fetch(ram, target_address, source_pointer_address):
    source_address = ram_fetch(ram, source_pointer_address)
    return copy(ram, target_address, source_address)
Example #8
0
def copy(ram, target_address, source_address):
    source_value = ram_fetch(ram, source_address)
    new_ram = ram_store(ram, target_address, source_value)
    return new_ram
Example #9
0
def mult(ram, target_address, source_address_1, source_address_2):
    source_value_1 = ram_fetch(ram, source_address_1)
    source_value_2 = ram_fetch(ram, source_address_2)
    new_ram = ram_store(ram, target_address, source_value_1 * source_value_2)
    return new_ram
Example #10
0
def add1(ram, target_address):
    target_value = ram_fetch(ram, target_address)
    new_ram = ram_store(ram, target_address, target_value + 1)
    return new_ram
Example #11
0
    def cycle(ram):
        instruction_pointer = ram_fetch(ram, IPA)
        instruction = ram_fetch(ram, instruction_pointer)
        extracted_instructions = extract_instructions(instruction)

        # XXtttuuuvvv
        # XX
        operation_code = extracted_instructions[0]
        # ttt
        target_address = extracted_instructions[1]
        # uuu
        source_address_1 = extracted_instructions[2]
        # vvv
        source_address_2 = extracted_instructions[3]

        next_ram = add1(ram, IPA)

        # 0  : halt ================| end program
        if operation_code == 0:
            return next_ram
        # 1  : read ================| [ttt] <- read
        elif operation_code == 1:
            return cycle(read(next_ram, target_address))
        # 2  : display =============| display <- [uuu]
        elif operation_code == 2:
            return cycle(display(next_ram, source_address_1))
        # 3  : copy ================| [ttt] <- [uuu]
        elif operation_code == 3:
            return cycle(copy(next_ram, target_address, source_address_1))
        # 4  : fetch ===============| [ttt] <- [[uuu]]
        elif operation_code == 4:
            return cycle(fetch(next_ram, target_address, source_address_1))
        # 5  : store ===============| [[ttt]] <- [uuu]
        elif operation_code == 5:
            return cycle(store(next_ram, target_address, source_address_1))
        # 6  : add1 ================| [ttt] <- [ttt] + 1
        elif operation_code == 6:
            return cycle(add1(next_ram, target_address))
        # 7  : add =================| [ttt] <- [uuu] + [vvv]
        elif operation_code == 7:
            return cycle(
                add(next_ram, target_address, source_address_1,
                    source_address_2))
        # 8  : subtract1 ===========| [ttt] <- max([ttt] - 1, 0)
        elif operation_code == 8:
            return cycle(sub1(next_ram, target_address))
        # 9  : subtract ============| [ttt] <- max([uuu] - [vvv], 0)
        elif operation_code == 9:
            return cycle(
                sub(next_ram, target_address, source_address_1,
                    source_address_2))
        # 10 : multiply ============| [ttt] <- [uuu] * [vvv]
        elif operation_code == 10:
            return cycle(
                mult(next_ram, target_address, source_address_1,
                     source_address_2))
        # 11 : divide ==============| [ttt] <- floor([uuu] / [vvv]) if [vvv] != 0
        elif operation_code == 11:
            return cycle(
                div(next_ram, target_address, source_address_1,
                    source_address_2))
        # 12 : if zero add1 ========| [ttt] <- [ttt] + 1 if [uuu] === 0
        elif operation_code == 12:
            return cycle(
                if_zero_add1(next_ram, target_address, source_address_1))
        # 13 : if equal add1 =======| [ttt] <- [ttt] + 1 if [uuu] === [vvv]
        elif operation_code == 13:
            return cycle(
                if_equal_add1(next_ram, target_address, source_address_1,
                              source_address_2))
        # 14 : if greater add1 =====| [ttt] <- [ttt] + 1 if [uuu] > [vvv]
        elif operation_code == 14:
            return cycle(
                if_greater_add1(next_ram, target_address, source_address_1,
                                source_address_2))
Example #12
0
def display(ram, source_address):
    source_value = ram_fetch(ram, source_address)
    print("< " + str(source_value))
    return ram