Ejemplo n.º 1
0
def test1():
    AxePU = x16vm.AxePU
    code = cases[0][1] + [255]
    memory = code + [0] * (65536 - len(code))
    cpu = AxePU(memory)
    x16vm._run(cpu)
    output = cpu.data['a1']
    expected = 1
    assert expected == output, output
Ejemplo n.º 2
0
def test2():
    AxePU = x16vm.AxePU
    case = cases[1]
    code = case[1] + [255]
    memory = code + [0] * (65536 - len(code))
    memory[100] = 23
    cpu = AxePU(memory)
    x16vm._run(cpu)
    output = cpu.data['a1']
    expected = 23
    assert expected == output, output
Ejemplo n.º 3
0
def test3():
    asm = """
    set a1 1
    set a2 2
    add a1 a2 a1
    halt
    """
    AxePU = x16vm.AxePU
    # case = cases[2]
    memory = x16asm.machine_code(asm)
    # memory = code
    cpu = AxePU(memory)
    x16vm._run(cpu)
    output = cpu.data['a1']
    expected = 3
    assert expected == output, output
Ejemplo n.º 4
0
def test4():
    asm = """
    set a1 1
    set a2 2
    add a1 a2 a1
    save a1 @100
    halt
    """
    AxePU = x16vm.AxePU
    # case = cases[2]
    memory = x16asm.machine_code(asm)
    # memory = code
    cpu = AxePU(memory)
    x16vm._run(cpu)
    output = memory[100]
    expected = 3
    assert expected == output, output
Ejemplo n.º 5
0
def test_and():
    asm = """
    set a1 15
    set a2 1
    and a1 a2 a3
    halt
    """
    AxePU = x16vm.AxePU
    # case = cases[2]
    memory = x16asm.machine_code(asm)
    # memory = code
    cpu = AxePU(memory)
    x16vm._run(cpu)
    # output = memory[100]
    output = cpu.data['a3']
    expected = 1
    assert expected == output, output
Ejemplo n.º 6
0
def test_shift_right():

    asm = """
    set a1 20
    shift_right a1
    halt
    """
    AxePU = x16vm.AxePU
    # case = cases[2]
    memory = x16asm.machine_code(asm)
    # memory = code
    cpu = AxePU(memory)
    x16vm._run(cpu)
    # output = memory[100]
    output = cpu.data['a1']
    expected = 10
    assert expected == output, output
Ejemplo n.º 7
0
def test_add2():
    asm = """
    set2 a1 2000
    set2 a2 1000
    add2 a1 a2 a1
    halt
    """
    AxePU = x16vm.AxePU
    # case = cases[2]
    memory = x16asm.machine_code(asm)
    # memory = code
    cpu = AxePU(memory)
    x16vm._run(cpu)
    # output = memory[100]
    output = cpu.data['a1']
    expected = 3000
    assert expected == output, output
Ejemplo n.º 8
0
def test_save_from_register():
    asm = """
    set a1 4
    set a2 100
    save_from_register a1 a2
    halt
    """
    AxePU = x16vm.AxePU
    # case = cases[2]
    memory = x16asm.machine_code(asm)
    # memory = code
    cpu = AxePU(memory)
    x16vm._run(cpu)
    output = memory[100]
    # output = memory[100]
    expected = 4
    assert expected == output, output
Ejemplo n.º 9
0
def test_load_from_register2():
    asm = """
    set2 a1 65535
    set2 a2 100
    save_from_register2 a1 a2
    load_from_register2 a2 a3
    halt
    """
    AxePU = x16vm.AxePU
    # case = cases[2]
    memory = x16asm.machine_code(asm)
    # memory = code
    cpu = AxePU(memory)
    x16vm._run(cpu)
    # output = memory[100]
    output = cpu.data['a3']
    expected = 65535
    assert expected == output, output
Ejemplo n.º 10
0
def test_save_from_register2():
    asm = """
    set2 a1 65535
    set2 a2 100
    save_from_register2 a1 a2
    halt
    """
    AxePU = x16vm.AxePU
    # case = cases[2]
    memory = x16asm.machine_code(asm)
    # memory = code
    cpu = AxePU(memory)
    x16vm._run(cpu)
    output = memory[100]
    print(output)
    print(memory[101])
    assert memory[100] == 255
    assert memory[101] == 255
Ejemplo n.º 11
0
def test_compare():
    asm = """
    set a1 1
    set a2 2
    add a1 a2 a1
    save a1 @100
    compare a1 a2
    halt
    """
    AxePU = x16vm.AxePU
    # case = cases[2]
    memory = x16asm.machine_code(asm)
    # memory = code
    cpu = AxePU(memory)
    x16vm._run(cpu)
    output = cpu.data['c1']
    # output = memory[100]
    expected = 2
    assert expected == output, output
Ejemplo n.º 12
0
def test_draw_column():

    with open('hello.a16') as f:
        func_asm = f.read()
    asm = """
    set2 a3 6
    add2 f1 a3 f1
    set2 a1 16
    set2 a3 6                  ; 保存「变量 1」column
    subtract2 f1 a3 a3          ;
    save_from_register2 a1 a3   ;

    set2 a1 4
    set2 a3 4                   ; 保存「变量 2」x
    subtract2 f1 a3 a3          ;
    save_from_register2 a1 a3   ;

    set2 a1 0
    set2 a3 2                  ; 保存「变量 3」y
    subtract2 f1 a3 a3          ;
    save_from_register2 a1 a3   ;
    .call @function_draw_column
    set2 a3 6
    subtract2 f1 a3 a3

    halt

    .memory 64512
    .data
    92 214 116 0 238 16 238 0 132 254 128 0 254 146 242 0
    """
    asm = func_asm + asm
    AxePU = x16vm.AxePU
    memory = x16asm.machine_code(asm)
    cpu = AxePU(memory)
    x16vm._run(cpu)
    output1 = memory[65089]
    output2 = memory[65153]
    expected = 195
    canvas = x16vm.Canvas(20)
    canvas.draw(memory[65024:])
Ejemplo n.º 13
0
def test_draw_point():

    with open('hello.a16') as f:
        func_asm = f.read()
    asm = """
    set2 a3 4
    add2 f1 a3 f1

    set2 a1 3
    set2 a3 4                   ; 保存「变量 1」x
    subtract2 f1 a3 a3          ;
    save_from_register2 a1 a3   ;

    set a1 2
    set2 a3 2                  ; 保存「变量 2」y
    subtract2 f1 a3 a3          ;
    save_from_register2 a1 a3   ;

    .call @function_draw_point
    set2 a3 4
    subtract2 f1 a3 a3

    halt

    .memory 64512
    .data
    92 214 116 0 238 16 238 0 132 254 128 0 254 146 242 0
    """
    asm = func_asm + asm
    AxePU = x16vm.AxePU
    memory = x16asm.machine_code(asm)
    cpu = AxePU(memory)
    x16vm._run(cpu)
    output = memory[65091]
    expected = 195
    canvas = x16vm.Canvas(20)
    canvas.draw(memory[65024:])
    assert expected == output, output
Ejemplo n.º 14
0
def test_factorial_a16():

    func_asm = """

    jump @1024
    .memory 1024
    set2 f1 3
    jump @function_end

    ; a1, a2 用来存参数
    @multiply
    ; 局部变量空间
    ;
    set2 a3 8                ; f1 += 8 对应 .return 8
    add2 f1 a3 f1               ;

    set2 a3 2                   ; 保存「变量 1」
    subtract2 f1 a3 a3          ;
    save_from_register2 a1 a3   ;

    set2 a3 4                   ; 保存「变量 2」
    subtract2 f1 a3 a3          ;
    save_from_register2 a2 a3   ;

    set2 a1 1                   ; 用于 while 判断
    set2 a3 6                   ; 保存「变量 3」
    subtract2 f1 a3 a3          ;
    save_from_register2 a1 a3   ;

    set2 a1 0                   ; 作为累加的 result
    set2 a3 8                   ; 保存「变量 4」
    subtract2 f1 a3 a3          ;
    save_from_register2 a1 a3   ;

    @while_start
    ; 判断循环条件
    ;
    set2 a3 4                   ; 读取「变量 2」
    subtract2 f1 a3 a3          ;
    load_from_register2 a3 a1   ;

    set2 a3 6                   ; 读取「变量 3」
    subtract2 f1 a3 a3          ;
    load_from_register2 a3 a2   ;

    compare a1 a2
    jump_if_less @while_end

    ;「变量 3」 += 1
    ;
    set2 a3 6                   ; 读取「变量 3」
    subtract2 f1 a3 a3          ;
    load_from_register2 a3 a1   ;

    set2 a3 1
    add2 a1 a3 a1

    set2 a3 6                   ; 保存「变量 3」
    subtract2 f1 a3 a3          ;
    save_from_register2 a1 a3   ;

    ;「变量 4」 += 「变量 1」
    ;
    set2 a3 8                   ; 读取「变量 4」
    subtract2 f1 a3 a3          ;
    load_from_register2 a3 a1   ;

    set2 a3 2                   ; 读取「变量 1」
    subtract2 f1 a3 a3          ;
    load_from_register2 a3 a2   ;

    add2 a1 a2 a1

    set2 a3 8                   ; 保存「变量 4」
    subtract2 f1 a3 a3          ;
    save_from_register2 a1 a3   ;

    jump @while_start
    @while_end

    ; 「变量 4」作为函数返回值,放入 a1
    ;
    set2 a3 8                   ; 读取「变量 4」
    subtract2 f1 a3 a3          ;
    load_from_register2 a3 a1   ;

    .return 8


    @factorial

    set2 a3 4
    add2 f1 a3 f1 ;申请了4个内存

    set2 a3 2                   ; 保存「变量 1」
    subtract2 f1 a3 a3          ;
    save_from_register2 a1 a3   ;

    set2 a2 2

    set2 a3 4                   ; 保存「变量 2」
    subtract2 f1 a3 a3          ;
    save_from_register2 a2 a3   ;


    set2 a3 2                   ; 读取「变量 1」
    subtract2 f1 a3 a3          ;
    load_from_register2 a3 a1   ;

    set2 a3 4                   ; 读取「变量 2」
    subtract2 f1 a3 a3          ;
    load_from_register2 a3 a2   ;


    compare a1 a2
    jump_if_less @label1


    set2 a3 1                   ; a1 = a1 -1
    subtract2 a1 a3 a1          ;

    .call @factorial

    set2 a3 0
    add2 a3 a1 a2

    set2 a3 2                   ; 读取「变量 1」
    subtract2 f1 a3 a3          ;
    load_from_register2 a3 a1   ;

    .call @multiply

    @label1
    .return 4
    @function_end


    ;set a1 3
    ;.call @factorial

    ;halt
    """

    AxePU = x16vm.AxePU
    call_asm = """
    ; 调用函数
    set2 a1 5
    .call @factorial

    ; 校验测试结果
    save2 a1 @65530
    halt
    """
    asm = func_asm + call_asm
    memory = x16asm.machine_code(asm)
    cpu = AxePU(memory)
    x16vm._run(cpu)
    assert memory[65530] == 24 * 5
Ejemplo n.º 15
0
def test_call_and_return():
    asm = """
    jump @1024
    .memory 1024
    set2 f1 3

    ; 我们要在接下来的的内存存放函数定义,所以直接跳转到 @function_end 避免执行函数
    jump @function_end

    ; a1, a2 用来存参数
    @function_multiply
    ; 局部变量空间
    ;
    set2 a3 8                  ; f1 += 8 对应 .return 8
    add2 f1 a3 f1               ;

    set2 a3 2                   ; 保存「变量 1」
    subtract2 f1 a3 a3          ;
    save_from_register2 a1 a3   ;

    set2 a3 4                   ; 保存「变量 2」
    subtract2 f1 a3 a3          ;
    save_from_register2 a2 a3   ;

    set2 a1 1                   ; 用于 while 判断
    set2 a3 6                   ; 保存「变量 3」
    subtract2 f1 a3 a3          ;
    save_from_register2 a1 a3   ;

    set2 a1 0                   ; 作为累加的 result
    set2 a3 8                   ; 保存「变量 4」
    subtract2 f1 a3 a3          ;
    save_from_register2 a1 a3   ;

    @while_start
    ; 判断循环条件
    ;
    set2 a3 4                   ; 读取「变量 2」
    subtract2 f1 a3 a3          ;
    load_from_register2 a3 a1   ;

    set2 a3 6                   ; 读取「变量 3」
    subtract2 f1 a3 a3          ;
    load_from_register2 a3 a2   ;

    compare a1 a2
    jump_if_less @while_end

    ;「变量 3」 += 1
    ;
    set2 a3 6                   ; 读取「变量 3」
    subtract2 f1 a3 a3          ;
    load_from_register2 a3 a1   ;

    set2 a3 1
    add a1 a3 a1

    set2 a3 6                   ; 保存「变量 3」
    subtract2 f1 a3 a3          ;
    save_from_register2 a1 a3   ;

    ;「变量 4」 += 「变量 1」
    ;
    set2 a3 8                   ; 读取「变量 4」
    subtract2 f1 a3 a3          ;
    load_from_register2 a3 a1   ;

    set2 a3 2                   ; 读取「变量 1」
    subtract2 f1 a3 a3          ;
    load_from_register2 a3 a2   ;

    add2 a1 a2 a1

    set2 a3 8                   ; 保存「变量 4」
    subtract2 f1 a3 a3          ;
    save_from_register2 a1 a3   ;

    jump @while_start
    @while_end

    ; 「变量 4」作为函数返回值,放入 a1
    ;
    set2 a3 8                   ; 读取「变量 4」
    subtract2 f1 a3 a3          ;
    load_from_register2 a3 a1   ;

    .return 8


    ; 所有函数定义结束的标记(但我们这个例子中,只有一个函数定义)
    @function_end

    ; 调用函数
    set2 a1 300
    set2 a2 10

    .call @function_multiply


    save2 a1 @65530 ; 用于校验测试结果

    halt
    """
    AxePU = x16vm.AxePU
    # case = cases[2]
    memory = x16asm.machine_code(asm)
    # memory = code
    cpu = AxePU(memory)
    x16vm._run(cpu)
    # output = memory[100]
    output = cpu.data['a1']
    expected = 3000
    assert expected == output, output