123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- import string
- import math
- import sys
- M_PI = 3.14159265358979323846
- def writefile(fp,val):
- global out,el
- if not len(out):
- out = " .db "
- el+=1
- out += "$%02x," % val
- if el == cnt/8 :
- out=out[:-1]
- out+="\n"
- fp.write(out)
- out =""
- el=0
- def sine(val,r,scale,stepping):
- global M_PI,flip
- re = int(math.sin(val*(M_PI*scale)/r)*r) + r
- re = re & 0xff
- if flip and val%2:
- re = (r*2) - re
- re = re * stepping
- #print "sine %s -> %s " % (val,re)
- return re
- def main():
- global cnt,flip
- asmfile = sys.argv[1]
- basename = string.replace(asmfile,".s","")
- cnt = int(sys.argv[2])
- upper = int(sys.argv[3])
-
- if len(sys.argv) >= 5:
- stepping = int(sys.argv[4])
- else:
- stepping = 1
- if len(sys.argv) >= 6 and sys.argv[5]=='flip':
- flip = 1
- else:
- flip = 0
- half = int(cnt) / 2
- if cnt%8:
- print "ctn should be modulo 8"
- sys.exit(1)
- fp = open(asmfile,'w')
- out = "\n\n\n%s:\n\n" % (basename)
- fp.write(out)
- out = ""
- for i in range(0,cnt):
- writefile(fp,sine(i,upper/2,(float(upper)/cnt),stepping))
-
- out = str()
- el = 0
- if __name__ == '__main__':
- if len(sys.argv) >= 4:
- main()
- else:
- print "usage: %s filename cnt(int) upper(int) [stepping (int)] ['flip']" % sys.argv[0]
|