def test_dump_shf1(): SREC1 = b"""S113B000576F77212044696420796F7520726561D8 S113B0106C6C7920676F207468726F756768206143 S113B0206C20746861742074726F75626C6520742E S10FB0306F207265616420746869733FCE S9030000FC""" sr = loads("srec", SREC1) img = Image([sr[0]]) shf = dumps("shf", img) assert shf == """<?xml version="1.0" encoding="UTF-8"?>
def test_load_shf1(): DUMP = """<?xml version="1.0" encoding="UTF-8"?> <dump name="Simple SHF example" blocks="01"> <block name="Important message in hex format" address="0400" word_size="01" length="1f" checksum="5601b6acad7da5c7b92036786250b053f05852c3"> 41 6c 6c 20 79 6f 75 72 20 62 61 73 65 20 61 72 65 20 62 65 6c 6f 6e 67 20 74 6f 20 75 73 0a </block> </dump> """ img = loads("shf", DUMP) assert len(img) == 31 sec = img[0] assert sec.start_address == 0X00000400 assert sec.length == 31 assert sec.data == b'All your base are belong to us\n'
def test_load_shf3(): DUMP = """<?xml version="1.0" encoding="UTF-8"?> <dump name="Example of an SHF dump with wide data words" blocks="00001"> <block name="SMIL memory dump" address="000" word_size="5" length="1A" checksum="ff2033489aff0e4e4f0cd7901afc985f7a213c97"> 00100 00200 00000 00090 00000 00036 00300 00400 00852 00250 00230 00858 00500 00600 014DC 00058 002A8 000B8 00700 00800 000B0 00192 00100 00000 00900 00A00 00000 0000A 40000 00000 00B00 00C00 00000 00000 00000 00001 00D00 00E00 00000 00100 0CCCC CCCCD 00F00 01000 00000 00010 80000 00000 00100 00790 00000 00234 </block> </dump> """ img = loads("shf", DUMP) assert len(img) == 130 sec = img[0] assert sec.start_address == 0X00000000 assert sec.length == 130 assert sec.data == b'\x00\x10\x00\x02\x00\x00\x00\x00\x00\x90\x00\x00\x00\x006\x000\x00\x04\x00\x00\x85 \x02P\x00#\x00\x08X\x00P\x00\x06\x00\x01M\xc0\x00X\x00*\x80\x00\xb8\x00p\x00\x08\x00\x00\x0b\x00\x01\x92\x00\x10\x00\x00\x00\x00\x90\x00\n\x00\x00\x00\x00\x00\n@\x00\x00\x00\x00\x00\xb0\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\xd0\x00\x0e\x00\x00\x00\x00\x01\x00\x0c\xcc\xcc\xcc\xcd\x00\xf0\x00\x10\x00\x00\x00\x00\x00\x10\x80\x00\x00\x00\x00\x00\x10\x00\x07\x90\x00\x00\x00\x024'
def test_load_shf2(): DUMP = """<?xml version="1.0" encoding="UTF-8"?> <dump name="6502 Fibonacci" blocks="02"> <block name="Code" address="1000" word_size="01" length="2a" checksum="5cab5bf8ee299af1ad17e8093d941914eb5930c7"> a9 01 85 20 85 21 20 1e 10 20 1e 10 18 a5 21 aa 65 20 86 20 85 21 20 1e 10 c9 c8 90 ef 60 ae 00 11 a5 21 9d 00 11 ee 00 11 60 </block> <block name="Mem" address="1100" word_size="01" length="e" checksum="c8c2001c42b0226a5d9f7c2f24bd47393166487a"> 01 00 00 00 00 00 00 00 00 00 00 00 00 00 </block> </dump> """ img = loads("shf", DUMP) assert len(img) == 56 sec0, sec1 = img assert sec0.start_address == 0X00001000 assert sec0.length == 42 assert sec0.data == b'\xa9\x01\x85 \x85! \x1e\x10 \x1e\x10\x18\xa5!\xaae \x86 \x85! \x1e\x10\xc9\xc8\x90\xef`\xae\x00\x11\xa5!\x9d\x00\x11\xee\x00\x11`' assert sec1.start_address == 0X00001100 assert sec1.length == 14 assert sec1.data == b'\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
def testDumpsWorks(self): data = loads("srec", S19) self.assertEqual(dumps("mostec", data), MOSTEC)
def testLoadsWorks(self): data = loads("mostec", MOSTEC) #data.hexdump() #print(dumps("srec", data)) self.assertEqual(dumps("srec", data, s5record=True), S19)
def testDumpsWorks(self): data = loads("srec", S19) self.assertEqual(dumps("tek", data), TEK)
def testRoundtripFromString(self): dataIn = loads("ihex", TEST2) dataOut = dumps("ihex", dataIn) self.assertEqual(dataOut, TEST2)
def testAddressGapFromString(self): data = loads("ihex", TEST2) self.assertEqual(data.sections[0].data, b'Example with an address gap') self.assertEqual(data.sections[1].data, b'Here is a gap in the memory allocation')
#for key, value in sorted(registry.registry().items()): # print("{0:10} {1}".format(key, value.description)) SREC = b"""S123B000576F77212044696420796F75207265616C6C7920676F207468726F7567682061DF S120B0206C6C20746861742074726F75626C6520746F207265616420746869733F73 S5030002FA""" FPC = b"""$kL&@h%%,:,B.\?00EPuX0K3rO0JI)) $;UPR'%%,:<Hn&FCG:at<GVF(;G9wIw $7FD1p%%,:LHmy:>GTV%/KJ7@GE[kYz $B[6\;%%,:\KIn?GFWY/qKI1G5:;-_e $%%%%%""" fromSrec = loads('srec', SREC) dataFromSRec = dumps('fpc', fromSrec) # Fixme: Does _NOT_ return 'bytes'! fromFPC = loads('fpc', FPC) dataFromFPC = dumps('srec', fromFPC, row_length = 32, s5record = True) class TestRoundTrip(unittest.TestCase): def testFromSrec(self): self.assertEqual(dataFromSRec, FPC) #pass def testFromFPC(self): self.assertEqual(dataFromFPC, SREC)
def test_meta_data2(): img = loads("srec", SREC4) assert img.meta == { 1: [MetaRecord(format_type=1, address=0, chunk=bytearray(b'sample.s19'))] }
def test_meta_data1(): img = loads("srec", SREC1) assert img.meta == {8: [MetaRecord(format_type=8, address=0, chunk=None)]}
def testDumpsWorks(self): data = loads("srec", S19) self.assertEqual(dumps("emon52", data), EMON52)
def testLoadsWorks(self): data = loads("emon52", EMON52) self.assertEqual(dumps("srec", data, s5record=True), S19)
def _runTest(self, format): data = loads("ash", format) self.assertTrue(dumps("srec", data, s5record=True) == SREC)
def testWriteHexSpace(self): data = loads("srec", SREC)
S113014003080409020A0BCED4C707D4C707D4C7CF S113015007D4C707D4C707D4C707D4C707D4C7076A S1130160D5D700D5D700D6D708B602A43C2642B6C8 S1130170D8CD0C9D02503AB6D6A4E0A100263B0788 S1130180D338B6D6AAE097A407B7D9B6D400D722F5 S113019003D70B4F05D7014AAD3610D720E40AD751 S11301A0061AD7E6FFB7D404D70427054A4A4C26D3 S11301B01F815ACD0C383FD93FD23FD3A6E006D297 S11301C0050FD2EDAB1001D502AB08BBD997E6FF02 S11301D0B7D4B6D93CD9A10824DCB7D8CC0DB9FF23 S11301E0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1B S11301F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000A S5030010EC """ data = loads("srec", S19) from cStringIO import StringIO class ROMDisassembler(object): def __init__(self, image): self.memory = ReadWriteMemory(StringIO(image)) self.getByte = self.memory.createGetter(1, self.memory.BIG_ENDIAN) self.getWord = self.memory.createGetter(2, self.memory.BIG_ENDIAN) rd = ROMDisassembler(data.segments[0].data) print rd if __name__ == '__main__':
4D F4 18 52 F5 CB 47 2D 66 31 A0 A3 74 FD 56 C3 1C FD 86 16 30 8D 24 07 F3 8C 7C 5A 94 48 FD E2 q""" SREC = b"""S123DEAD99F2B9CB79D3EEF88FC6A940ABCD71A6F0525E0C139D0A2C261F622553F03DED78 S123DECDE2F6B85BCAA653596CFD9917CA0BBEBB5D1CC770B9D29CDFF1FF0545EF4232D19F S123DEED39EA2D0391805CFD7DF5154800D3035EEFCACEA89C6B888E6A8DD359CF052A08DC S123DF0DEF570B80D8677E555D939D5D66A0BB556B8AFD07F585955F1268B8E26DE2EA5DFC S123DF2D3AF6DD125D5B67BAEE051854A5D3A9105DA718522CADB13F166921834C0BE08631 S123DF4D01BE985F19FF190804315CAA0506BA62ADD2B5D980661896D039191C45FAA24659 S123DF6DB83AA5D139BFD93EF036E8F53CA258E9750DC2F573DB8B4314A45F599E01A0569D S123DF8D3B4528750401B3F5379BEA733D425CB24F1FA7C3FA32060ED76668756708CCA3DA S123DFAD4DF41852F5CB472D6631A0A374FD56C31CFD8616308D2407F38C7C5A9448FDE260 S5030009F3""" fromSrec = loads('srec', SREC) dataFromSRec = dumps('titxt', fromSrec) fromTiTxt = loads('titxt', TITEXT) dataFromTiTxt = dumps('srec', fromTiTxt, row_length=32, s5record=True) class TestRoundTrip(unittest.TestCase): def testFromSrec(self): self.assertEqual(dataFromSRec, TITEXT) def testFromTiTxt(self): self.assertEqual(dataFromTiTxt, SREC) if __name__ == '__main__': unittest.main()
def test32Bit(self): dataIn = loads("srec", S19_32) dataOut = dumps("ihex", dataIn) self.assertEqual(dataOut, IHEX_32)