Пример #1
0
 def execute(self, event):
     source = self.ui.editor.GetText()
     start_addr = 0xC000
     cart = Cartridge()
     if start_addr != 0:
         cart.set_org(start_addr)
         opcodes = semantic(syntax(lexical(source)), False, cart)
         self.ui.display.active_scene.input_opcodes(opcodes, 0xC000)
Пример #2
0
 def test_ror_imm_with_binary(self):
     tokens = list(lexical('ROR #%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, [0x6a, 0x04])
Пример #3
0
 def test_ror_imm_with_decimal(self):
     tokens = list(lexical('ROR #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, [0x6a, 0x0a])
Пример #4
0
 def test_dec_zp(self):
     tokens = list(lexical('DEC $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, [0xc6, 0x00])
Пример #5
0
 def test_rol_imm(self):
     tokens = list(lexical('ROL #$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, [0x2a, 0x10])
Пример #6
0
 def test_lda_abs(self):
     tokens = list(lexical('LDA $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, [0xad, 0x34, 0x12])
Пример #7
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])
Пример #8
0
 def test_eor(self):
     'Test logical EOR operation with lowercase'
     tokens = list(lexical('eor #$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, [0x49, 0x10])
Пример #9
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)
Пример #10
0
 def test_eor_zp(self):
     '''Test logical EOR operation between the content of the
     Accumulator and the content of zero page $00'''
     tokens = list(lexical('EOR $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, [0x45, 0x00])
Пример #11
0
 def test_eor_imm_with_binary(self):
     '''Test logical EOR operation between binary %00000100
     (Decimal 4) and the content of the Accumulator'''
     tokens = list(lexical('EOR #%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, [0x49, 0x04])
Пример #12
0
 def test_eor_imm(self):
     '''Test logical EOR operation between $10 (Decimal 16) and the
     content of the Accumulator'''
     tokens = list(lexical('EOR #$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, [0x49, 0x10])
Пример #13
0
 def test_eor_absy(self):
     tokens = list(lexical('EOR $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, [0x59, 0x34, 0x12])
Пример #14
0
    def test_asm_compiler(self):
        cart = Cartridge()
        cart.path = 'fixtures/movingsprite/'

        opcodes = semantic(self.ast, True, cart=cart)

        self.assertIsNotNone(opcodes)
        _bin = bytearray(opcodes)
        f = open('fixtures/movingsprite/movingsprite.nes', 'rb')
        content = f.read()
        f.close()
        self.assertHexEquals(content, _bin)
Пример #15
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)
Пример #16
0
 def test_dec_zpx(self):
     tokens = list(lexical('DEC $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, [0xd6, 0x10])
Пример #17
0
 def test_dec_absx(self):
     tokens = list(lexical('DEC $1234,X'))
     self.assertEquals(4, len(tokens))
     self.assertEquals('T_INSTRUCTION', tokens[0]['type'])
     self.assertEquals('T_ADDRESS', tokens[1]['type'])
     self.assertEquals('$1234', tokens[1]['value'])
     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, [0xde, 0x34, 0x12])
Пример #18
0
 def test_eor_indy(self):
     tokens = list(lexical('EOR ($20),Y'))
     self.assertEquals(6, len(tokens))
     self.assertEquals('T_INSTRUCTION', tokens[0]['type'])
     self.assertEquals('T_OPEN', tokens[1]['type'])
     self.assertEquals('T_ADDRESS', tokens[2]['type'])
     self.assertEquals('T_CLOSE', tokens[3]['type'])
     self.assertEquals('T_SEPARATOR', tokens[4]['type'])
     self.assertEquals('T_REGISTER', tokens[5]['type'])
     ast = syntax(tokens)
     self.assertEquals(1, len(ast))
     self.assertEquals('S_INDIRECT_Y', ast[0]['type'])
     code = semantic(ast)
     self.assertEquals(code, [0x51, 0x20])
Пример #19
0
 def test_db_5_with_binary(self):
     code = ('.db %00000000, %00010000, %01010000, '
             '%00010000, %00000000, %00000000, '
             '%00000000, %00110000')
     tokens = list(lexical(code))
     self.assertEquals(16, len(tokens))
     self.assertEquals('T_DIRECTIVE', tokens[0]['type'])
     self.assertEquals('T_BINARY_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 = [0x00, 0x10, 0x50, 0x10, 0x00, 0x00, 0x00, 0x30]
     self.assertEquals(expected, code)
Пример #20
0
 def test_db_4(self):
     code = '''.db $80, $00, $03, $80
     .db $01, $02, $03, $04
     '''
     tokens = list(lexical(code))
     self.assertEquals(18, len(tokens))
     self.assertEquals('T_DIRECTIVE', tokens[0]['type'])
     # self.assertEquals('T_HEX_NUMBER', tokens[1]['type'])
     ast = syntax(tokens)
     self.assertEquals(2, len(ast))
     self.assertEquals('S_DIRECTIVE', ast[0]['type'])
     code = semantic(ast)
     self.assertIsNotNone(code)
     expected = [0x80, 0x0, 0x03, 0x80, 1, 2, 3, 4]
     self.assertEquals(expected, code)
Пример #21
0
 def test_sta_indx(self):
     tokens = list(lexical('STA ($20,X)'))
     self.assertEquals(6, len(tokens))
     self.assertEquals('T_INSTRUCTION', tokens[0]['type'])
     self.assertEquals('T_OPEN', tokens[1]['type'])
     self.assertEquals('T_ADDRESS', tokens[2]['type'])
     self.assertEquals('$20', tokens[2]['value'])
     self.assertEquals('T_SEPARATOR', tokens[3]['type'])
     self.assertEquals('T_REGISTER', tokens[4]['type'])
     self.assertEquals('T_CLOSE', tokens[5]['type'])
     ast = syntax(tokens)
     self.assertEquals(1, len(ast))
     self.assertEquals('S_INDIRECT_X', ast[0]['type'])
     code = semantic(ast)
     self.assertEquals(code, [0x81, 0x20])
Пример #22
0
            def test(self):
                ast = []

                token_counter = 0
                for i, a in enumerate(self.syn):
                    tokens = []
                    for j, l in enumerate(self.lex[token_counter:]):
                        if l[0] == 'T_ENDLINE':
                            token_counter = j + 1
                            break
                        tokens.append({'type': l[0], 'value': l[1]})

                    ast.append({'type': self.syn[i], 'children': tokens})

                # print ast
                compiled = semantic(ast)
                self.assertEquals(compiled, self.code)
Пример #23
0
 def test_db_2(self):
     code = (
         '.db $0F,$30,$31,$32,$33,$35,$36,$37,'  # One-liner string
         '    $38,$39,$3A,$3B,$3C,$3D,$3E,$0F')
     tokens = list(lexical(code))
     self.assertEquals(32, 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 = [
         0x0f, 0x30, 0x31, 0x32, 0x33, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A,
         0x3B, 0x3C, 0x3D, 0x3E, 0x0F
     ]
     self.assertEquals(expected, code)
Пример #24
0
 def test_db_1(self):
     code = (
         '.db $0F,$01,$02,$03,$04,$05,$06,$07,'  # One-liner string
         '    $08,$09,$0A,$0B,$0C,$0D,$0E,$0F')
     tokens = list(lexical(code))
     self.assertEquals(32, 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 = [
         0x0f, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A,
         0x0B, 0x0C, 0x0D, 0x0E, 0x0F
     ]
     self.assertEquals(expected, code)
Пример #25
0
    def assertAsmResults(self, source_file, bin_file):
        path = 'fixtures/nerdynights/background/'
        f = open(path + source_file)
        code = f.read()
        f.close()
        tokens = lexical(code)
        ast = syntax(tokens)

        cart = Cartridge()
        cart.path = 'fixtures/nerdynights/background/'

        opcodes = semantic(ast, True, cart=cart)

        self.assertIsNotNone(opcodes)
        _bin = bytearray(opcodes)

        with open(path + bin_file, 'rb') as f:
            content = f.read()

        self.assertHexEquals(content, _bin)
Пример #26
0
 def assembly(self, source, start_addr=0):
     cart = Cartridge()
     if start_addr != 0:
       cart.set_org(start_addr)
     return semantic(syntax(lexical(source)), False, cart)