No puede seleccionar más de 25 temas Los temas deben comenzar con una letra o número, pueden incluir guiones ('-') y pueden tener hasta 35 caracteres de largo.

37 líneas
1.7KB

  1. import sys, os, random
  2. sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
  3. from helpertest import *
  4. from objfmt import Obj
  5. orig = Obj.parse(open('lib/c0047.obj','rb').read()); new = Obj.parse(open('optlib/c0047.obj','rb').read())
  6. ho = Helper(orig, 0x6000, {}); hn = Helper(new, 0x6000, {})
  7. rnd = random.Random(5)
  8. vals = [0,1,2,3,7,9,10,100,255,256,257,1000,12345,32767,32768,40000,65535]
  9. cases = [(a,b) for a in vals for b in vals if b != 0]
  10. cases += [(rnd.randrange(65536), rnd.randrange(1,65536)) for _ in range(500)]
  11. cases += [(rnd.randrange(65536), rnd.randrange(1,256)) for _ in range(500)]
  12. entries = ['C$0047','C$0049','C$0051','C$0053']
  13. tot = {e:[0,0] for e in entries}; bad = 0
  14. for e in entries:
  15. for a,b in cases:
  16. res = []
  17. for h in (ho, hn):
  18. cpu = CPU(); h.install(cpu)
  19. for i,v in enumerate((a&255,a>>8,b&255,b>>8)): cpu.m[0x33C+i]=v
  20. cpu.m[0x14]=0; cpu.m[0x15]=0x80
  21. cpu.a = 4; cpu.x=0; cpu.y=0
  22. c = cpu.call(h.addr(e), maxsteps=400000)
  23. res.append((c, bytes(cpu.m[0x33C:0x350]), cpu))
  24. tot[e][0]+=res[0][0]; tot[e][1]+=res[1][0]
  25. if res[0][1] != res[1][1]:
  26. bad += 1
  27. if bad < 6: print('MISMATCH', e, a, b, res[0][1][:4].hex(), res[1][1][:4].hex())
  28. print('cases per entry', len(cases), 'bad', bad)
  29. for e in entries: print(e, 'avg cycles orig %.0f new %.0f' % (tot[e][0]/len(cases), tot[e][1]/len(cases)))
  30. for a,b in ((1000,7),(300*7,1000),(99,10),(30000,3)):
  31. out=[]
  32. for h in (ho,hn):
  33. cpu=CPU(); h.install(cpu)
  34. for i,v in enumerate((a&255,a>>8,b&255,b>>8)): cpu.m[0x33C+i]=v
  35. cpu.a=4; out.append(cpu.call(h.addr('C$0051')))
  36. print(a,b,out)

Powered by TurnKey Linux.