def test_wmp_scenario1(rambank, chip):
    """Test WMP instruction functionality."""
    import random

    chip_test = Processor()
    chip_base = Processor()

    value = random.randint(0, 15)  # Select a random value

    # Perform the instruction under test:
    chip_test.PROGRAM_COUNTER = 0
    chip_test.CURRENT_RAM_BANK = rambank
    chip_test.set_accumulator(value)
    chip_test.COMMAND_REGISTER = \
        encode_command_register(chip, 0, 0, 'RAM_PORT')
    Processor.wmp(chip_test)

    # Simulate conditions at end of instruction in base chip
    chip_base.PROGRAM_COUNTER = 0
    chip_base.set_accumulator(value)
    chip_base.COMMAND_REGISTER = \
        encode_command_register(chip, 0, 0, 'RAM_PORT')
    chip_base.increment_pc(1)
    chip_base.CURRENT_RAM_BANK = rambank
    chip_base.RAM_PORT[rambank][chip] = chip_base.ACCUMULATOR

    # Make assertions that the base chip is now at the same state as
    # the test chip which has been operated on by the instruction under test.

    assert chip_test.read_program_counter() == chip_base.read_program_counter()
    assert chip_test.read_accumulator() == chip_base.read_accumulator()

    # Pickling each chip and comparing will show equality or not.
    assert pickle.dumps(chip_test) == pickle.dumps(chip_base)
def test_rdr_scenario1(values):
    """Test RDM instruction functionality."""
    chip_test = Processor()
    chip_base = Processor()

    # Perform the instruction under test:

    chip_test.set_accumulator(0)
    chip_test.COMMAND_REGISTER = \
        encode_command_register(values[0], 0, 0, 'ROM_PORT')
    chip_test.ROM_PORT[values[0]] = values[1]
    Processor.rdr(chip_test)

    # Simulate conditions at end of instruction in base chip
    chip_base.COMMAND_REGISTER = \
        encode_command_register(values[0], 0, 0, 'ROM_PORT')
    chip_base.ROM_PORT[values[0]] = values[1]
    chip_base.set_accumulator(values[1])
    chip_base.increment_pc(1)

    # Make assertions that the base chip is now at the same state as
    # the test chip which has been operated on by the instruction under test.

    assert chip_test.read_program_counter() == chip_base.read_program_counter()
    assert chip_test.read_accumulator() == chip_base.read_accumulator()

    # Pickling each chip and comparing will show equality or not.
    assert pickle.dumps(chip_test) == pickle.dumps(chip_base)
示例#3
0
def test_wrm_scenario1(rambank, chip, register, address):
    """Test WRM instruction functionality."""
    import random

    chip_test = Processor()
    chip_base = Processor()

    value = random.randint(0, 15)  # Select a random value

    # Perform the instruction under test:
    chip_test.PROGRAM_COUNTER = 0
    chip_test.CURRENT_RAM_BANK = rambank
    absolute_address = convert_to_absolute_address(chip_test, rambank, chip,
                                                   register, address)
    chip_test.set_accumulator(value)
    chip_test.COMMAND_REGISTER = \
        encode_command_register(chip, register, address, 'DATA_RAM_CHAR')
    Processor.wrm(chip_test)

    # Simulate conditions at end of instruction in base chip
    chip_base.PROGRAM_COUNTER = 0
    chip_base.RAM[absolute_address] = value
    chip_base.set_accumulator(value)
    chip_base.COMMAND_REGISTER = \
        encode_command_register(chip, register, address, 'DATA_RAM_CHAR')
    chip_base.increment_pc(1)
    chip_base.CURRENT_RAM_BANK = rambank

    # Make assertions that the base chip is now at the same state as
    # the test chip which has been operated on by the instruction under test.
    assert chip_test.read_program_counter() == chip_base.read_program_counter()
    assert chip_test.read_accumulator() == chip_base.read_accumulator()

    # Pickling each chip and comparing will show equality or not.
    assert pickle.dumps(chip_test) == pickle.dumps(chip_base)
示例#4
0
def common_wpm_code_1(desired_chip: Processor, chip: Processor,
                      rambank: int, register: int, address: int,
                      reg_pair_first: int,
                      reg_pair_second: int) -> Tuple[str, str]:
    """Common code applicable to all tests to reduce duplication."""
    # Line a
    desired_chip.COMMAND_REGISTER = \
        encode_command_register(chip, register, address, 'DATA_RAM_CHAR')

    address_to_write_to = convert_to_absolute_address(
        desired_chip, rambank, chip, register, address)
    chunks = c2n(12, 4, address_to_write_to, 'b')

    # Lines b - d    # Store middle bits in register "reg_pair_first"
    desired_chip.STATUS_CHARACTERS[rambank][0][0][1] = \
        binary_to_decimal(str(chunks[1]))
    desired_chip.REGISTERS[reg_pair_first] = \
        desired_chip.STATUS_CHARACTERS[rambank][0][0][1]

    # Lines e - g   # Store lower bits in register "reg_pair_second"
    desired_chip.STATUS_CHARACTERS[rambank][0][0][2] = \
        binary_to_decimal(str(chunks[2]))
    desired_chip.REGISTERS[reg_pair_second] = \
        desired_chip.STATUS_CHARACTERS[rambank][0][0][2]

    # Lines h - j    # Store higher bits in ROM PORT 15
    desired_chip.STATUS_CHARACTERS[rambank][0][0][0] = \
        binary_to_decimal(str(chunks[0]))
    desired_chip.ROM_PORT[15] = \
        desired_chip.STATUS_CHARACTERS[rambank][0][0][0]
    return chunks, address_to_write_to
def test_adm_scenario1(values):
    """Test ADM instruction functionality."""
    chip_test = Processor()
    chip_base = Processor()

    rambank = values[0]
    chip = values[1]
    register = values[2]
    address = values[3]
    value = values[4]
    accumulator = 2

    cr = encode_command_register(chip, register, address, 'DATA_RAM_CHAR')

    chip_test.CARRY = 0
    chip_test.COMMAND_REGISTER = cr

    chip_test.CURRENT_RAM_BANK = rambank
    absolute_address = convert_to_absolute_address(
        chip_test, rambank, chip, register, address)
    chip_test.RAM[absolute_address] = value
    chip_test.set_accumulator(accumulator)

    Processor.adm(chip_test)

    # Simulate conditions at end of instruction in base chip
    chip_base.CARRY = 0
    chip_base.COMMAND_REGISTER = cr
    absolute_address = convert_to_absolute_address(
        chip_base, rambank, chip, register, address)
    chip_base.RAM[absolute_address] = value
    chip_base.increment_pc(1)
    chip_base.CURRENT_RAM_BANK = rambank
    chip_base.set_accumulator(value + accumulator)

    # Make assertions that the base chip is now at the same state as
    # the test chip which has been operated on by the instruction under test.

    assert chip_test.read_program_counter() == chip_base.read_program_counter()
    assert chip_test.read_accumulator() == chip_base.read_accumulator()

    # Pickling each chip and comparing will show equality or not.
    assert pickle.dumps(chip_test) == pickle.dumps(chip_base)
def test_adm_scenario1(rambank, chip, register, address, value,
                       accumulator, carry):
    """Test ADM instruction functionality."""
    chip_test = Processor()
    chip_base = Processor()

    cr = encode_command_register(chip, register, address, 'DATA_RAM_CHAR')

    chip_test.CARRY = carry
    chip_test.COMMAND_REGISTER = cr

    chip_test.CURRENT_RAM_BANK = rambank
    absolute_address = convert_to_absolute_address(
        chip_test, rambank, chip, register, address)
    chip_test.RAM[absolute_address] = value
    chip_test.set_accumulator(accumulator)

    Processor.sbm(chip_test)

    # Simulate conditions at end of instruction in base chip

    chip_base.CARRY = carry
    chip_base.COMMAND_REGISTER = cr
    absolute_address = convert_to_absolute_address(
        chip_base, rambank, chip, register, address)
    chip_base.RAM[absolute_address] = value
    chip_base.increment_pc(1)
    chip_base.CURRENT_RAM_BANK = rambank
    chip_base.set_accumulator(accumulator)
    value_complement = int(ones_complement(value, 4), 2)
    carry_complement = chip_base.read_complement_carry()
    chip_base.ACCUMULATOR = (chip_base.ACCUMULATOR + value_complement +
                             carry_complement)
    Processor.check_overflow(chip_base)
    # Make assertions that the base chip is now at the same state as
    # the test chip which has been operated on by the instruction under test.

    assert chip_test.read_program_counter() == chip_base.read_program_counter()
    assert chip_test.read_accumulator() == chip_base.read_accumulator()

    # Pickling each chip and comparing will show equality or not.
    assert pickle.dumps(chip_test) == pickle.dumps(chip_base)
def test_wrn_scenario1(rambank, chip, register, char):
    """Test instruction WRn"""
    from random import randint

    chip_test = Processor()
    chip_base = Processor()

    value = randint(0, 15)

    address = encode_command_register(chip, register, 0,
                                      'DATA_RAM_STATUS_CHAR')
    chip_test.CURRENT_RAM_BANK = rambank
    chip_test.COMMAND_REGISTER = address
    chip_test.set_accumulator(value)

    # Perform the instruction under test:
    if char == 0:
        Processor.wr0(chip_test)
    if char == 1:
        Processor.wr1(chip_test)
    if char == 2:
        Processor.wr2(chip_test)
    if char == 3:
        Processor.wr3(chip_test)

    # Simulate conditions at end of instruction in base chip
    chip_base.COMMAND_REGISTER = address
    chip_base.CURRENT_RAM_BANK = rambank
    chip_base.increment_pc(1)
    chip_base.set_accumulator(value)
    chip_base.STATUS_CHARACTERS[rambank][chip][register][char] = value

    # Make assertions that the base chip is now at the same state as
    # the test chip which has been operated on by the instruction under test.

    assert chip_test.read_program_counter() == chip_base.read_program_counter()
    assert chip_test.read_accumulator() == chip_base.read_accumulator()

    # Pickling each chip and comparing will show equality or not.
    assert pickle.dumps(chip_test) == pickle.dumps(chip_base)