示例#1
0
 def __init__(self, testname):
     HexTestCase.__init__(self, testname)
     f = open('fixtures/movingsprite/movingsprite.asm')
     code = f.read()
     f.close()
     tokens = lexical(code)
     self.ast = syntax(tokens)
示例#2
0
    def test_compile_list(self):
        code = '''
            palette:
              .db $0F,$01,$02,$03,$04,$05,$06,$07,$08,$09,$0A,$0B,$0C,$0D,$0E,$0F
              .db $0F,$30,$31,$32,$33,$35,$36,$37,$38,$39,$3A,$3B,$3C,$3D,$3E,$0F
        '''
        tokens = lexical(code)
        ast = syntax(tokens)
        self.assertEquals(2, len(ast))

        self.assertEquals('S_DIRECTIVE', ast[0]['type'])
        self.assertEquals('.db', ast[0]['children'][0]['value'])
        self.assertEquals( 32, len(ast[0]['children']))
        palette1 = [0x0f, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09,
            0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f]
        for i in range(len(palette1)):
            h = '$%02X' % palette1[i]
            self.assertEquals(h, ast[0]['children'][i * 2 + 1]['value'])
            self.assertEquals('S_DIRECTIVE', ast[1]['type'])

        self.assertEquals('S_DIRECTIVE', ast[1]['type'])
        self.assertEquals('.db', ast[0]['children'][0]['value'])
        self.assertEquals( 32, len(ast[1]['children']))
        palette2 = [0x0f, 0x30, 0x31, 0x32, 0x33, 0x35, 0x36, 0x37, 0x38, 0x39,
            0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x0f]
        for i in range(len(palette2)):
            h = '$%02X' % palette2[i]
            self.assertEquals(h, ast[1]['children'][i * 2 + 1]['value'])
示例#3
0
    def test_several_lists_with_labels(self):
        code = '''
            .org $E000

            palette:
              .db $0F,$01,$02,$03,$04,$05,$06,$07,$08,$09,$0A,$0B,$0C,$0D,$0E,$0F
              .db $0F,$30,$31,$32,$33,$35,$36,$37,$38,$39,$3A,$3B,$3C,$3D,$3E,$0F

            sprites:
              .db $80, $00, $03, $80; Y pos, tile id, attributes, X pos
              '''

        tokens = lexical(code)
        ast = syntax(tokens)
        self.assertEquals(4, len(ast))
        self.assertEquals('S_DIRECTIVE', ast[0]['type'])
        self.assertEquals('.org', ast[0]['children'][0]['value'])
        self.assertEquals('S_DIRECTIVE', ast[1]['type'])
        self.assertEquals('.db', ast[1]['children'][0]['value'])
        self.assertEquals(['palette'], ast[1]['labels'])

        self.assertEquals('S_DIRECTIVE', ast[2]['type'])
        self.assertEquals('.db', ast[2]['children'][0]['value'])

        self.assertEquals('S_DIRECTIVE', ast[3]['type'])
        self.assertEquals('.db', ast[3]['children'][0]['value'])
        self.assertEquals(['sprites'], ast[3]['labels'])

        labels = get_labels(ast)
        expected = {'palette': 0xE000, 'sprites': 0xE000 + 32}

        self.assertEquals(expected, labels)
示例#4
0
 def test_org_fffa(self):
     tokens = list(lexical('.org $FFFA'))
     self.assertEquals(2, len(tokens))
     self.assertEquals('T_DIRECTIVE', tokens[0]['type'])
     self.assertEquals('T_ADDRESS', tokens[1]['type'])
     ast = syntax(tokens)
     self.assertEquals(1, len(ast))
     self.assertEquals('S_DIRECTIVE', ast[0]['type'])
示例#5
0
 def test_org_fffa(self):
     tokens = list(lexical('.org $FFFA'))
     self.assertEquals(2, len(tokens))
     self.assertEquals('T_DIRECTIVE', tokens[0]['type'])
     self.assertEquals('T_ADDRESS', tokens[1]['type'])
     ast = syntax(tokens)
     self.assertEquals(1, len(ast))
     self.assertEquals('S_DIRECTIVE', ast[0]['type'])
示例#6
0
 def test_bank_0(self):
     tokens = list(lexical('.bank 0'))
     self.assertEquals(2, len(tokens))
     self.assertEquals('T_DIRECTIVE', tokens[0]['type'])
     self.assertEquals('T_DECIMAL_ARGUMENT', tokens[1]['type'])
     ast = syntax(tokens)
     self.assertEquals(1, len(ast))
     self.assertEquals('S_DIRECTIVE', ast[0]['type'])
示例#7
0
 def test_bank_0(self):
     tokens = list(lexical('.bank 0'))
     self.assertEquals(2, len(tokens))
     self.assertEquals('T_DIRECTIVE', tokens[0]['type'])
     self.assertEquals('T_DECIMAL_ARGUMENT', tokens[1]['type'])
     ast = syntax(tokens)
     self.assertEquals(1, len(ast))
     self.assertEquals('S_DIRECTIVE', ast[0]['type'])
示例#8
0
 def test_asm_compiler_scrolling_5(self):
     cart = Cartridge()
     cart.path = "fixtures/nesasm/scrolling/"
     f = open("fixtures/nesasm/scrolling/scrolling5.asm")
     code = f.read()
     f.close()
     tokens = lexical(code)
     ast = syntax(tokens)
     opcodes = semantic(ast, cart=cart)
示例#9
0
 def test_rts_sngl(self):
     tokens = lexical("RTS")
     self.assertEquals(1, len(tokens))
     self.assertEquals("T_INSTRUCTION", tokens[0]["type"])
     ast = syntax(tokens)
     self.assertEquals(1, len(ast))
     self.assertEquals("S_IMPLIED", ast[0]["type"])
     code = semantic(ast)
     self.assertEquals(code, [0x60])
示例#10
0
 def test_sei_sngl(self):
     tokens = list(lexical("SEI"))
     self.assertEquals(1, len(tokens))
     self.assertEquals("T_INSTRUCTION", tokens[0]["type"])
     ast = syntax(tokens)
     self.assertEquals(1, len(ast))
     self.assertEquals("S_IMPLIED", ast[0]["type"])
     code = semantic(ast)
     self.assertEquals(code, [0x78])
示例#11
0
 def test_sed_sngl(self):
     tokens = list(lexical('SED'))
     self.assertEquals(1, len(tokens))
     self.assertEquals('T_INSTRUCTION', tokens[0]['type'])
     ast = syntax(tokens)
     self.assertEquals(1, len(ast))
     self.assertEquals('S_IMPLIED', ast[0]['type'])
     code = semantic(ast)
     self.assertEquals(code, [0xf8])
示例#12
0
 def test_org_c000(self):
     tokens = lexical('.org $C000')
     self.assertEquals(2 , len(tokens))
     self.assertEquals('T_DIRECTIVE', tokens[0]['type'])
     self.assertEquals('T_ADDRESS', tokens[1]['type'])
     ast = syntax(tokens)
     self.assertEquals(1 , len(ast))
     self.assertEquals('S_DIRECTIVE', ast[0]['type'])
     code = semantic(ast)
示例#13
0
 def test_org_c000(self):
     tokens = lexical('.org $C000')
     self.assertEquals(2, len(tokens))
     self.assertEquals('T_DIRECTIVE', tokens[0]['type'])
     self.assertEquals('T_ADDRESS', tokens[1]['type'])
     ast = syntax(tokens)
     self.assertEquals(1, len(ast))
     self.assertEquals('S_DIRECTIVE', ast[0]['type'])
     code = semantic(ast)
示例#14
0
 def test_bne_rel(self):
     tokens = lexical("BNE $10")
     self.assertEquals(2, len(tokens))
     self.assertEquals("T_INSTRUCTION", tokens[0]["type"])
     self.assertEquals("T_ADDRESS", tokens[1]["type"])
     ast = syntax(tokens)
     self.assertEquals(1, len(ast))
     self.assertEquals("S_RELATIVE", ast[0]["type"])
     code = semantic(ast)
     self.assertEquals(code, [0xD0, 0x0E])
示例#15
0
 def test_lsr_imm_with_binary(self):
     tokens = lexical("LSR #%00000100")
     self.assertEquals(2, len(tokens))
     self.assertEquals("T_INSTRUCTION", tokens[0]["type"])
     self.assertEquals("T_BINARY_NUMBER", tokens[1]["type"])
     ast = syntax(tokens)
     self.assertEquals(1, len(ast))
     self.assertEquals("S_IMMEDIATE", ast[0]["type"])
     code = semantic(ast)
     self.assertEquals(code, [0x4A, 0x04])
示例#16
0
 def test_lsr_imm_with_decimal(self):
     tokens = lexical("LSR #10")
     self.assertEquals(2, len(tokens))
     self.assertEquals("T_INSTRUCTION", tokens[0]["type"])
     self.assertEquals("T_DECIMAL_NUMBER", tokens[1]["type"])
     ast = syntax(tokens)
     self.assertEquals(1, len(ast))
     self.assertEquals("S_IMMEDIATE", ast[0]["type"])
     code = semantic(ast)
     self.assertEquals(code, [0x4A, 0x0A])
示例#17
0
文件: bpl_test.py 项目: acs022/pyNES
 def test_bpl_rel(self):
     tokens = lexical('BPL $10')
     self.assertEquals(2 , len(tokens))
     self.assertEquals('T_INSTRUCTION', tokens[0]['type'])
     self.assertEquals('T_ADDRESS', tokens[1]['type'])
     ast = syntax(tokens)
     self.assertEquals(1 , len(ast))
     self.assertEquals('S_RELATIVE', ast[0]['type'])
     code = semantic(ast)
     self.assertEquals(code, [0x10, 0x0e])
示例#18
0
 def test_bit_zp(self):
     tokens = lexical("BIT $00")
     self.assertEquals(2, len(tokens))
     self.assertEquals("T_INSTRUCTION", tokens[0]["type"])
     self.assertEquals("T_ADDRESS", tokens[1]["type"])
     ast = syntax(tokens)
     self.assertEquals(1, len(ast))
     self.assertEquals("S_ZEROPAGE", ast[0]["type"])
     code = semantic(ast)
     self.assertEquals(code, [0x24, 0x00])
示例#19
0
 def test_sbc_imm(self):
     tokens = lexical("SBC #$10")
     self.assertEquals(2, len(tokens))
     self.assertEquals("T_INSTRUCTION", tokens[0]["type"])
     self.assertEquals("T_HEX_NUMBER", tokens[1]["type"])
     ast = syntax(tokens)
     self.assertEquals(1, len(ast))
     self.assertEquals("S_IMMEDIATE", ast[0]["type"])
     code = semantic(ast)
     self.assertEquals(code, [0xE9, 0x10])
示例#20
0
 def test_ldy_imm_with_decimal(self):
     tokens = list(lexical('LDY #10'))
     self.assertEquals(2 , len(tokens))
     self.assertEquals('T_INSTRUCTION', tokens[0]['type'])
     self.assertEquals('T_DECIMAL_NUMBER', tokens[1]['type'])
     ast = syntax(tokens)
     self.assertEquals(1 , len(ast))
     self.assertEquals('S_IMMEDIATE', ast[0]['type'])
     code = semantic(ast)
     self.assertEquals(code, [0xa0, 0x0a])
示例#21
0
 def test_lsr_acc(self):
     tokens = lexical("LSR A")
     self.assertEquals(2, len(tokens))
     self.assertEquals("T_INSTRUCTION", tokens[0]["type"])
     self.assertEquals("T_ACCUMULATOR", tokens[1]["type"])
     ast = syntax(tokens)
     self.assertEquals(1, len(ast))
     self.assertEquals("S_ACCUMULATOR", ast[0]["type"])
     code = semantic(ast)
     self.assertEquals(code, [0x4A])
示例#22
0
 def test_lsr_acc(self):
     tokens = list(lexical('LSR A'))
     self.assertEquals(2, len(tokens))
     self.assertEquals('T_INSTRUCTION', tokens[0]['type'])
     self.assertEquals('T_ACCUMULATOR', tokens[1]['type'])
     ast = syntax(tokens)
     self.assertEquals(1, len(ast))
     self.assertEquals('S_ACCUMULATOR', ast[0]['type'])
     code = semantic(ast)
     self.assertEquals(code, [0x4a])
示例#23
0
 def test_ldy_imm_with_binary(self):
     tokens = list(lexical('LDY #%00000100'))
     self.assertEquals(2 , len(tokens))
     self.assertEquals('T_INSTRUCTION', tokens[0]['type'])
     self.assertEquals('T_BINARY_NUMBER', tokens[1]['type'])
     ast = syntax(tokens)
     self.assertEquals(1 , len(ast))
     self.assertEquals('S_IMMEDIATE', ast[0]['type'])
     code = semantic(ast)
     self.assertEquals(code, [0xa0, 0x04])
示例#24
0
 def test_ldy_abs(self):
     tokens = list(lexical('LDY $1234'))
     self.assertEquals(2 , len(tokens))
     self.assertEquals('T_INSTRUCTION', tokens[0]['type'])
     self.assertEquals('T_ADDRESS', tokens[1]['type'])
     ast = syntax(tokens)
     self.assertEquals(1 , len(ast))
     self.assertEquals('S_ABSOLUTE', ast[0]['type'])
     code = semantic(ast)
     self.assertEquals(code, [0xac, 0x34, 0x12])
示例#25
0
 def test_ldy_abs(self):
     tokens = lexical('LDY $1234')
     self.assertEquals(2, len(tokens))
     self.assertEquals('T_INSTRUCTION', tokens[0]['type'])
     self.assertEquals('T_ADDRESS', tokens[1]['type'])
     ast = syntax(tokens)
     self.assertEquals(1, len(ast))
     self.assertEquals('S_ABSOLUTE', ast[0]['type'])
     code = semantic(ast)
     self.assertEquals(code, [0xac, 0x34, 0x12])
示例#26
0
 def test_sty_zp(self):
     tokens = list(lexical('STY $00'))
     self.assertEquals(2 , len(tokens))
     self.assertEquals('T_INSTRUCTION', tokens[0]['type'])
     self.assertEquals('T_ADDRESS', tokens[1]['type'])
     ast = syntax(tokens)
     self.assertEquals(1 , len(ast))
     self.assertEquals('S_ZEROPAGE', ast[0]['type'])
     code = semantic(ast)
     self.assertEquals(code, [0x84, 0x00])
示例#27
0
 def test_cmp_imm(self):
     tokens = list(lexical('CMP #$10'))
     self.assertEquals(2, len(tokens))
     self.assertEquals('T_INSTRUCTION', tokens[0]['type'])
     self.assertEquals('T_HEX_NUMBER', tokens[1]['type'])
     ast = syntax(tokens)
     self.assertEquals(1, len(ast))
     self.assertEquals('S_IMMEDIATE', ast[0]['type'])
     code = semantic(ast)
     self.assertEquals(code, [0xc9, 0x10])
示例#28
0
 def test_bit_abs(self):
     tokens = lexical("BIT $1234")
     self.assertEquals(2, len(tokens))
     self.assertEquals("T_INSTRUCTION", tokens[0]["type"])
     self.assertEquals("T_ADDRESS", tokens[1]["type"])
     self.assertEquals("$1234", tokens[1]["value"])
     ast = syntax(tokens)
     self.assertEquals(1, len(ast))
     self.assertEquals("S_ABSOLUTE", ast[0]["type"])
     code = semantic(ast)
     self.assertEquals(code, [0x2C, 0x34, 0x12])
示例#29
0
 def test_inesmir(self):
     tokens = lexical('.inesmir 1')
     self.assertEquals(2, len(tokens))
     self.assertEquals('T_DIRECTIVE', tokens[0]['type'])
     self.assertEquals('T_DECIMAL_ARGUMENT', tokens[1]['type'])
     ast = syntax(tokens)
     self.assertEquals(1, len(ast))
     self.assertEquals('S_DIRECTIVE', ast[0]['type'])
     code = semantic(ast, True)
     #self.assertEquals(1, get_var('inesmir'))
     self.assertEquals(code[7], 1)
示例#30
0
 def test_inesmir(self):
     tokens = list(lexical('.inesmir 1'))
     self.assertEquals(2, len(tokens))
     self.assertEquals('T_DIRECTIVE', tokens[0]['type'])
     self.assertEquals('T_DECIMAL_ARGUMENT', tokens[1]['type'])
     ast = syntax(tokens)
     self.assertEquals(1, len(ast))
     self.assertEquals('S_DIRECTIVE', ast[0]['type'])
     code = semantic(ast, True)
     # self.assertEquals(1, get_var('inesmir'))
     self.assertEquals(code[7], 1)
示例#31
0
文件: jmp_test.py 项目: acs022/pyNES
 def test_jmp_abs(self):
     tokens = lexical('JMP $1234')
     self.assertEquals(2 , len(tokens))
     self.assertEquals('T_INSTRUCTION', tokens[0]['type'])
     self.assertEquals('T_ADDRESS', tokens[1]['type'])
     self.assertEquals('$1234', tokens[1]['value'])
     ast = syntax(tokens)
     self.assertEquals(1 , len(ast))
     self.assertEquals('S_ABSOLUTE', ast[0]['type'])
     code = semantic(ast)
     self.assertEquals(code, [0x4c, 0x34, 0x12])
示例#32
0
 def test_and_absy(self):
     tokens = list(lexical('AND $1234,Y'))
     self.assertEquals(4 , len(tokens))
     self.assertEquals('T_INSTRUCTION', tokens[0]['type'])
     self.assertEquals('T_ADDRESS', tokens[1]['type'])
     self.assertEquals('T_SEPARATOR', tokens[2]['type'])
     self.assertEquals('T_REGISTER', tokens[3]['type'])
     ast = syntax(tokens)
     self.assertEquals(1 , len(ast))
     self.assertEquals('S_ABSOLUTE_Y', ast[0]['type'])
     code = semantic(ast)
     self.assertEquals(code, [0x39, 0x34, 0x12])
示例#33
0
 def test_db_3(self):
     tokens = lexical('.db $80, $00, $03, $80')
     self.assertEquals(8, len(tokens))
     self.assertEquals('T_DIRECTIVE', tokens[0]['type'])
     #self.assertEquals('T_HEX_NUMBER', tokens[1]['type'])
     ast = syntax(tokens)
     self.assertEquals(1, len(ast))
     self.assertEquals('S_DIRECTIVE', ast[0]['type'])
     code = semantic(ast)
     self.assertIsNotNone(code)
     expected = [0x80, 0x0, 0x03, 0x80]
     self.assertEquals(expected, code)
示例#34
0
 def test_inc_zpx(self):
     tokens = list(lexical("INC $10,X"))
     self.assertEquals(4, len(tokens))
     self.assertEquals("T_INSTRUCTION", tokens[0]["type"])
     self.assertEquals("T_ADDRESS", tokens[1]["type"])
     self.assertEquals("T_SEPARATOR", tokens[2]["type"])
     self.assertEquals("T_REGISTER", tokens[3]["type"])
     ast = syntax(tokens)
     self.assertEquals(1, len(ast))
     self.assertEquals("S_ZEROPAGE_X", ast[0]["type"])
     code = semantic(ast)
     self.assertEquals(code, [0xF6, 0x10])
示例#35
0
 def test_ldy_zpx(self):
     tokens = list(lexical('LDY $10,X'))
     self.assertEquals(4 , len(tokens))
     self.assertEquals('T_INSTRUCTION', tokens[0]['type'])
     self.assertEquals('T_ADDRESS', tokens[1]['type'])
     self.assertEquals('T_SEPARATOR', tokens[2]['type'])
     self.assertEquals('T_REGISTER', tokens[3]['type'])
     ast = syntax(tokens)
     self.assertEquals(1 , len(ast))
     self.assertEquals('S_ZEROPAGE_X', ast[0]['type'])
     code = semantic(ast)
     self.assertEquals(code, [0xb4, 0x10])
示例#36
0
文件: stx_test.py 项目: yxda/pyNES
 def test_stx_zpy(self):
     tokens = list(lexical('STX $10,Y'))
     self.assertEquals(4, len(tokens))
     self.assertEquals('T_INSTRUCTION', tokens[0]['type'])
     self.assertEquals('T_ADDRESS', tokens[1]['type'])
     self.assertEquals('T_SEPARATOR', tokens[2]['type'])
     self.assertEquals('T_REGISTER', tokens[3]['type'])
     ast = syntax(tokens)
     self.assertEquals(1, len(ast))
     self.assertEquals('S_ZEROPAGE_Y', ast[0]['type'])
     code = semantic(ast)
     self.assertEquals(code, [0x96, 0x10])
示例#37
0
文件: ldy_test.py 项目: yxda/pyNES
 def test_ldy_absx(self):
     tokens = list(lexical('LDY $1234,X'))
     self.assertEquals(4, len(tokens))
     self.assertEquals('T_INSTRUCTION', tokens[0]['type'])
     self.assertEquals('T_ADDRESS', tokens[1]['type'])
     self.assertEquals('T_SEPARATOR', tokens[2]['type'])
     self.assertEquals('T_REGISTER', tokens[3]['type'])
     ast = syntax(tokens)
     self.assertEquals(1, len(ast))
     self.assertEquals('S_ABSOLUTE_X', ast[0]['type'])
     code = semantic(ast)
     self.assertEquals(code, [0xbc, 0x34, 0x12])
示例#38
0
 def test_db_3(self):
     tokens = list(lexical('.db $80, $00, $03, $80'))
     self.assertEquals(8, len(tokens))
     self.assertEquals('T_DIRECTIVE', tokens[0]['type'])
     # self.assertEquals('T_HEX_NUMBER', tokens[1]['type'])
     ast = syntax(tokens)
     self.assertEquals(1, len(ast))
     self.assertEquals('S_DIRECTIVE', ast[0]['type'])
     code = semantic(ast)
     self.assertIsNotNone(code)
     expected = [0x80, 0x0, 0x03, 0x80]
     self.assertEquals(expected, code)
示例#39
0
文件: and_test.py 项目: joskid/pyNES
 def test_and_zp(self):
     '''
     Test the logical operation AND between the content of
     accumulator and the content of zero page address $00
     '''
     tokens = lexical('AND $00')
     self.assertEquals(2, len(tokens))
     self.assertEquals('T_INSTRUCTION', tokens[0]['type'])
     self.assertEquals('T_ADDRESS', tokens[1]['type'])
     ast = syntax(tokens)
     self.assertEquals(1, len(ast))
     self.assertEquals('S_ZEROPAGE', ast[0]['type'])
     code = semantic(ast)
     self.assertEquals(code, [0x25, 0x00])
示例#40
0
 def test_example_16_bit_subtraction_routine(self):
     ex_2 = '''
         SEC         ;clear the carry
         LDA $20     ;get the low byte of the first number
         SBC $22     ;add to it the low byte of the second
         STA $24     ;store in the low byte of the result
         LDA $21     ;get the high byte of the first number
         SBC $23     ;add to it the high byte of the second, plus carry
         STA $25     ;store in high byte of the result
         '''
     tokens = list(lexical(ex_2))
     self.assertEquals(21, len(tokens))
     ast = syntax(tokens)
     self.assertEquals(7, len(ast))
示例#41
0
    def test_jsr_abs(self):
        tokens = lexical('JSR $1234')
        self.assertEquals(2, len(tokens))
        self.assertEquals('T_INSTRUCTION', tokens[0]['type'])
        self.assertEquals('T_ADDRESS', tokens[1]['type'])
        self.assertEquals('$1234', tokens[1]['value'])
        ast = syntax(tokens)
        self.assertEquals(1, len(ast))
        self.assertEquals('S_ABSOLUTE', ast[0]['type'])
        code = semantic(ast)
        self.assertEquals(code, [0x20, 0x34, 0x12])


#TODO: http://www.6502.buss.hk/6502-instruction-set/jmp says that there is a indirect