From d5560260b326d36aa65f1a441a050c519c80e19e Mon Sep 17 00:00:00 2001 From: optixx Date: Sat, 16 Jul 2016 17:15:16 +0200 Subject: [PATCH] Cleanup --- scripts/b.py | 34 ++-- scripts/check_rle.py | 26 ++- scripts/crc_xmodem.py | 46 ++--- scripts/dev_server.py | 40 ---- scripts/link_webpy.sh | 2 - scripts/query_romsize.py | 91 ++++----- scripts/rom.py | 389 ++++++++++++++++++------------------ scripts/rom_inject.py | 44 ++-- scripts/rom_pattern_fill.py | 20 +- scripts/sinegen.py | 28 +-- scripts/webpy | 1 - 11 files changed, 325 insertions(+), 396 deletions(-) delete mode 100644 scripts/dev_server.py delete mode 100644 scripts/link_webpy.sh delete mode 160000 scripts/webpy diff --git a/scripts/b.py b/scripts/b.py index f02ed2a..720606f 100755 --- a/scripts/b.py +++ b/scripts/b.py @@ -1,28 +1,26 @@ #!/usr/bin/python import sys -try: - if 'x' in sys.argv[1] or 'X' in sys.argv[1]: - v = int(sys.argv[1],16) - else: - v = int(sys.argv[1]) -except: - print "%s NUM" % sys.argv[0] - sys.exit(-1) - bits = 32 + +try: + if 'x' in sys.argv[1] or 'X' in sys.argv[1]: + v = int(sys.argv[1], 16) + else: + v = int(sys.argv[1]) +except: + print "%s NUM" % sys.argv[0] + sys.exit(-1) + sys.stdout.write("0b") -for i in range(bits-1,-1,-1): - s = 1< -
- -
- -
-""" - - def POST(self): - obj = web.input(myfile={}) - filedir = '/Users/david/Devel/arch/avr/code/quickdev16/roms' # change this to the directory you want to store the file in. - if 'myfile' in obj: - web.debug("Upload file %s" % obj['myfile'].filename) - filepath = obj.myfile.filename.replace('\\','/') - filename = filepath.split('/')[-1] - foutname = filedir +'/'+ filename - web.debug("Write to %s" % foutname) - fout = open(foutname,'w') - fout.write( obj.myfile.file.read()) - fout.close() - - cmd = "ucon64 --port=usb --xsnesram %s " % foutname - web.debug("Execute: %s" % cmd) - p = Popen(cmd, shell=True, bufsize=128, - stdin=PIPE, stdout=PIPE, stderr=PIPE, close_fds=True) - stdout,stderr = p.communicate() - return '''Out: %s
Err: %s''' % ( - stdout.replace("\n","
").replace("\r","
"), - stderr.replace("\n","
")) - raise web.seeother('/upload') - -if __name__ == "__main__": - app = web.application(urls, globals()) - app.run() diff --git a/scripts/link_webpy.sh b/scripts/link_webpy.sh deleted file mode 100644 index 4283ceb..0000000 --- a/scripts/link_webpy.sh +++ /dev/null @@ -1,2 +0,0 @@ -ln -s `pwd`/webpy/web . - diff --git a/scripts/query_romsize.py b/scripts/query_romsize.py index 4573292..4654dd0 100644 --- a/scripts/query_romsize.py +++ b/scripts/query_romsize.py @@ -1,46 +1,32 @@ - - import sqlite3 import os -import re -import string -import stat -import popen2 -import glob import sys -import os -import pprint -import base64 import getpass -import os import socket -import sys import traceback import paramiko -import socket - -from subprocess import Popen -def distance(a,b): +def distance(a, b): c = {} - n = len(a); m = len(b) + n = len(a) + m = len(b) - for i in range(0,n+1): - c[i,0] = i - for j in range(0,m+1): - c[0,j] = j + for i in range(0, n + 1): + c[i, 0] = i + for j in range(0, m + 1): + c[0, j] = j - for i in range(1,n+1): - for j in range(1,m+1): - x = c[i-1,j]+1 - y = c[i,j-1]+1 - if a[i-1] == b[j-1]: - z = c[i-1,j-1] + for i in range(1, n + 1): + for j in range(1, m + 1): + x = c[i - 1, j] + 1 + y = c[i, j - 1] + 1 + if a[i - 1] == b[j - 1]: + z = c[i - 1, j - 1] else: - z = c[i-1,j-1]+1 - c[i,j] = min(x,y,z) - return c[n,m] + z = c[i - 1, j - 1] + 1 + c[i, j] = min(x, y, z) + return c[n, m] paramiko.util.log_to_file('rom_sftp.log') @@ -53,17 +39,21 @@ elif socket.gethostname() == 'box': username = "david" hostname = "burst" else: - sys.exit() + sys.exit() + + def shellquote(s): return "'" + s.replace("'", "'\\''") + "'" + def main(): port = 22 password = getpass.getpass('Password for %s@%s: ' % (username, hostname)) hostkeytype = None hostkey = None - host_keys = paramiko.util.load_host_keys(os.path.expanduser('~/.ssh/known_hosts')) + host_keys = paramiko.util.load_host_keys( + os.path.expanduser('~/.ssh/known_hosts')) if host_keys.has_key(hostname): hostkeytype = host_keys[hostname].keys()[0] hostkey = host_keys[hostname][hostkeytype] @@ -78,11 +68,10 @@ def main(): dirlist = sftp.listdir('.') print "Dirlist:", dirlist - conn = sqlite3.connect('roms_cleanup.sqlite3') c = conn.cursor() - for i in [(1,),(2,),(4,),(8,),(16,)]: - dirname = os.path.join(path,"%02i" % i) + for i in [(1,), (2,), (4,), (8,), (16,)]: + dirname = os.path.join(path, "%02i" % i) if not os.path.isdir(dirname): os.mkdir(dirname) print "#" * 60 @@ -105,21 +94,22 @@ def main(): AND rom_region like "Europe%" ORDER BY file_name - ''',i) - - - last_name = str() + ''', i) + + last_name = str() for row in c: - name,size,filename = row - d = distance(os.path.basename(filename),os.path.basename(last_name)) - if d < 7: - print "Skip ",filename + name, size, filename = row + d = distance( + os.path.basename(filename), os.path.basename(last_name)) + if d < 7: + print "Skip ", filename continue - filename_dst = os.path.join(dirname,os.path.basename(filename)) - print "Remote: %s -> %s" % ( filename,filename_dst) + filename_dst = os.path.join( + dirname, os.path.basename(filename)) + print "Remote: %s -> %s" % (filename, filename_dst) last_name = filename try: - sftp.get(filename,filename_dst) + sftp.get(filename, filename_dst) except Exception, e: print '*** Caught exception: %s: %s' % (e.__class__, e) traceback.print_exc() @@ -137,11 +127,4 @@ def main(): if __name__ == '__main__': - main() - - - - - - - + main() diff --git a/scripts/rom.py b/scripts/rom.py index a041912..9ae0469 100644 --- a/scripts/rom.py +++ b/scripts/rom.py @@ -18,43 +18,40 @@ import pprint # 4 ROM, RAM and DSP1 chip # 5 ROM, Save RAM and DSP1 chip # 19 ROM and Super FX chip -#227 ROM, RAM and GameBoy data -#246 ROM and DSP2 chip +# 227 ROM, RAM and GameBoy data +# 246 ROM and DSP2 chip -#Process /Users/david/Devel/arch/snes/roms/Teenage Mutant Ninja Turtles IV - Turtles in Time (U) [!].smc -#0 uCON64 2.0.0 Apple (PPC) 1999-2005 -#1 Uses code from various people. See 'developers.html' for more! -#2 This may be freely redistributed under the terms of the GNU Public License -#4 /Users/david/Devel/arch/snes/roms/Teenage Mutant Ninja Turtles IV - Turtles in Time (U) [!].smc -#6 Multi Game Doctor (2)/Multi Game Hunter/MGH -#8 00007fb0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ................ -#9 00007fc0 54 2e 4d 2e 4e 2e 54 2e 20 34 20 20 20 20 20 20 T.M.N.T. 4 -#10 00007fd0 20 20 20 20 20 20 00 0a 00 01 a4 00 7c e9 83 16 ......|... -#12 Super Nintendo Entertainment System/SNES/Super Famicom -#13 T.M.N.T. 4 -#14 Konami -#15 U.S.A. -#16 1048576 Bytes (8.0000 Mb) -#18 Padded: Maybe, 105 Bytes (0.0008 Mb) -#19 Interleaved/Swapped: No -#20 Backup unit/emulator header: No -#21 HiROM: No -#22 Internal size: 8 Mb -#23 ROM type: (0) ROM -#24 ROM speed: 200 ns (SlowROM) -#25 SRAM: No -#26 Version: 1.0 -#27 Checksum: Ok, 0x1683 (calculated) == 0x1683 (internal) -#28 Inverse checksum: Ok, 0xe97c (calculated) == 0xe97c (internal) -#29 Checksum (CRC32): 0x5940bd99 -#31 This ROM has no backup unit header +# Process /Users/david/Devel/arch/snes/roms/Teenage Mutant Ninja Turtles IV - Turtles in Time (U) [!].smc +# 0 uCON64 2.0.0 Apple (PPC) 1999-2005 +# 1 Uses code from various people. See 'developers.html' for more! +# 2 This may be freely redistributed under the terms of the GNU Public License +# 4 /Users/david/Devel/arch/snes/roms/Teenage Mutant Ninja Turtles IV - Turtles in Time (U) [!].smc +# 6 Multi Game Doctor (2)/Multi Game Hunter/MGH +# 8 00007fb0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ........ +# 9 00007fc0 54 2e 4d 2e 4e 2e 54 2e 20 34 20 20 20 20 20 20 T.M.N.T. 4 +# 10 00007fd0 20 20 20 20 20 20 00 0a 00 01 a4 00 7c e9 83 16 ......|... +# 12 Super Nintendo Entertainment System/SNES/Super Famicom +# 13 T.M.N.T. 4 +# 14 Konami +# 15 U.S.A. +# 16 1048576 Bytes (8.0000 Mb) +# 18 Padded: Maybe, 105 Bytes (0.0008 Mb) +# 19 Interleaved/Swapped: No +# 20 Backup unit/emulator header: No +# 21 HiROM: No +# 22 Internal size: 8 Mb +# 23 ROM type: (0) ROM +# 24 ROM speed: 200 ns (SlowROM) +# 25 SRAM: No +# 26 Version: 1.0 +# 27 Checksum: Ok, 0x1683 (calculated) == 0x1683 (internal) +# 28 Inverse checksum: Ok, 0xe97c (calculated) == 0xe97c (internal) +# 29 Checksum (CRC32): 0x5940bd99 +# 31 This ROM has no backup unit header - - - -swc_header_tpl=''' +swc_header_tpl = ''' Backup unit header info (SWC) 00000000 20 00 0c 00 00 00 00 00 aa bb 04 00 00 00 00 00 ............... @@ -72,16 +69,14 @@ Backup unit header info (SWC) ''' - - def createdb(): - try: - os.unlink("roms.sqlite3") - except: - pass - conn = sqlite3.connect('roms.sqlite3') - c = conn.cursor() - c.execute('''create table roms + try: + os.unlink("roms.sqlite3") + except: + pass + conn = sqlite3.connect('roms.sqlite3') + c = conn.cursor() + c.execute('''create table roms ( file_name text, file_ext text, @@ -109,171 +104,179 @@ def createdb(): swc_sram_size text )''') - return conn,c - -def process(conn,c,file_name,out): - file_ext = os.path.splitext(file_name)[1].replace(".",'') - file_size = os.stat(file_name)[stat.ST_SIZE] - rom_size = 0 - rom_mb = 0 - rom_padded = 0 - rom_trainer = 0 - rom_backup = 0 - rom_name = '' - rom_vendor = '' - rom_region = '' - rom_hirom = 0 - rom_internalsize = 0 - rom_type = 0 - rom_speed = 0 - rom_sram = 0 - rom_version = 0 - rom_chk = 0 - swc_size = 0 - swc_mode = 0 - swc_split = '' - swc_sram_mode = '' - swc_dram_mode = '' - swc_sram_size = '' + return conn, c - print "-" * 60 - print "Process %s" % file_name - - try: - rom_name = out[13] - rom_vendor = out[14] - rom_region = out[15] - try: - rom_size = int(out[16].split(" ")[0]) - rom_mb = float(re.compile("([\d.]+) Mb").search(out[16]).groups()[0]) - except: - print "Broken..." - return - if not "No" in out[18]: - rom_padded = int(re.compile("([\d.]+) Bytes").search(out[18]).groups()[0]) - - for idx,line in enumerate(out): - if line is None: - continue - - if "Backup unit/emulator header: Yes" in line: - rom_backup = int(re.compile("([\d.]+) Bytes").search(line).groups()[0]) - - if "Intro/Trainer:" in line: - rom_trainer = int(re.compile("([\d.]+) Bytes").search(line).groups()[0]) - - if "HiROM: Yes" in line: - rom_hirom = 1 - - if "Internal size:" in line: - rom_internalsize = int(re.compile("([\d.]+) Mb").search(line).groups()[0]) - - if "ROM type:" in line: - try: - rom_type = int(re.compile("([\d]+)").search(line).groups()[0]) - except: - pass - if "ROM speed:" in line: - rom_speed = int(re.compile("([\d]+) ns").search(line).groups()[0]) - - if "SRAM: Yes" in line: - rom_sram = int(re.compile("([\d]+) kBytes").search(line).groups()[0]) - - if "Version:" in line: - rom_version = float(re.compile("([\d.]+)").search(line).groups()[0]) - if "Checksum: Ok" in line: - rom_chk = 1 - except: - for idx,line in enumerate(out): - if line is None: - continue - print idx,line - sys.exit() +def process(conn, c, file_name, out): + file_ext = os.path.splitext(file_name)[1].replace(".", '') + file_size = os.stat(file_name)[stat.ST_SIZE] + rom_size = 0 + rom_mb = 0 + rom_padded = 0 + rom_trainer = 0 + rom_backup = 0 + rom_name = '' + rom_vendor = '' + rom_region = '' + rom_hirom = 0 + rom_internalsize = 0 + rom_type = 0 + rom_speed = 0 + rom_sram = 0 + rom_version = 0 + rom_chk = 0 + swc_size = 0 + swc_mode = 0 + swc_split = '' + swc_sram_mode = '' + swc_dram_mode = '' + swc_sram_size = '' - query = """INSERT INTO roms + print "-" * 60 + print "Process %s" % file_name + + try: + rom_name = out[13] + rom_vendor = out[14] + rom_region = out[15] + + try: + rom_size = int(out[16].split(" ")[0]) + rom_mb = float( + re.compile("([\d.]+) Mb").search(out[16]).groups()[0]) + except: + print "Broken..." + return + if not "No" in out[18]: + rom_padded = int( + re.compile("([\d.]+) Bytes").search(out[18]).groups()[0]) + + for idx, line in enumerate(out): + if line is None: + continue + + if "Backup unit/emulator header: Yes" in line: + rom_backup = int( + re.compile("([\d.]+) Bytes").search(line).groups()[0]) + + if "Intro/Trainer:" in line: + rom_trainer = int( + re.compile("([\d.]+) Bytes").search(line).groups()[0]) + + if "HiROM: Yes" in line: + rom_hirom = 1 + + if "Internal size:" in line: + rom_internalsize = int( + re.compile("([\d.]+) Mb").search(line).groups()[0]) + + if "ROM type:" in line: + try: + rom_type = int( + re.compile("([\d]+)").search(line).groups()[0]) + except: + pass + if "ROM speed:" in line: + rom_speed = int( + re.compile("([\d]+) ns").search(line).groups()[0]) + + if "SRAM: Yes" in line: + rom_sram = int( + re.compile("([\d]+) kBytes").search(line).groups()[0]) + + if "Version:" in line: + rom_version = float( + re.compile("([\d.]+)").search(line).groups()[0]) + if "Checksum: Ok" in line: + rom_chk = 1 + except: + for idx, line in enumerate(out): + if line is None: + continue + print idx, line + sys.exit() + + query = """INSERT INTO roms VALUES ( ?,?,?,?,?, ?,?,?,?,?, ?,?,?,?,?, ?,?,?,?,?, - ?,?,?,?) """ - - data = (file_name, - file_ext, - file_size, - rom_size, - rom_mb, - rom_padded, - rom_trainer, - rom_backup, - rom_name, - rom_vendor, - rom_region, - rom_hirom, - rom_internalsize, - rom_type, - rom_speed, - rom_sram, - rom_version, - rom_chk, - swc_size, - swc_mode, - swc_split, - swc_sram_mode, - swc_dram_mode, - swc_sram_size) - - c.execute(query,data) - conn.commit() + ?,?,?,?) """ + + data = (file_name, + file_ext, + file_size, + rom_size, + rom_mb, + rom_padded, + rom_trainer, + rom_backup, + rom_name, + rom_vendor, + rom_region, + rom_hirom, + rom_internalsize, + rom_type, + rom_speed, + rom_sram, + rom_version, + rom_chk, + swc_size, + swc_mode, + swc_split, + swc_sram_mode, + swc_dram_mode, + swc_sram_size) + + c.execute(query, data) + conn.commit() def ucon64_info(filename): - cmd = "ucon64 --dbuh -snes \"%s\"" % filename - r, w, e = popen2.popen3(cmd) - err = e.readlines() - out = r.readlines() - r.close() - e.close() - w.close() - if len(err): - return False,err - return out,err + cmd = "ucon64 --dbuh -snes \"%s\"" % filename + r, w, e = popen2.popen3(cmd) + err = e.readlines() + out = r.readlines() + r.close() + e.close() + w.close() + if len(err): + return False, err + return out, err + def clean(s): - s = s.replace("\n","") - if not len(s): - return None - return s - + s = s.replace("\n", "") + if not len(s): + return None + return s + + def main(): - - conn,c = createdb() - - path = sys.argv[1] - files = glob.glob(path + "/*") - for filename in files: - try: - r,err = ucon64_info(filename) - if not r: - print err - continue - r = map(clean,r) - process(conn,c,filename,r) - except (KeyboardInterrupt, SystemExit): - print "Saving DB..." - c.close() - conn.commit() - conn.close() - sys.exit(-1) - c.close() - conn.commit() - conn.close() + + conn, c = createdb() + + path = sys.argv[1] + files = glob.glob(path + "/*") + for filename in files: + try: + r, err = ucon64_info(filename) + if not r: + print err + continue + r = map(clean, r) + process(conn, c, filename, r) + except (KeyboardInterrupt, SystemExit): + print "Saving DB..." + c.close() + conn.commit() + conn.close() + sys.exit(-1) + c.close() + conn.commit() + conn.close() if __name__ == "__main__": - main() - - - - + main() diff --git a/scripts/rom_inject.py b/scripts/rom_inject.py index 413f475..40f3fc7 100644 --- a/scripts/rom_inject.py +++ b/scripts/rom_inject.py @@ -3,6 +3,7 @@ import os import sys import struct + def usage(): print "%s " % sys.argv[0] sys.exit(0) @@ -12,54 +13,52 @@ def error(msg): print "ERROR: %s" % msg sys.exit(-1) + def main(): - - if len(sys.argv) != 4: usage() if not os.path.isfile(sys.argv[1]): error("Can't open %s file" % sys.argv[1]) if not os.path.isfile(sys.argv[2]): error("Can't open %s file" % sys.argv[2]) - - rom = open(sys.argv[1],"r").read() - code = open(sys.argv[2],"r").read() + + rom = open(sys.argv[1], "r").read() + code = open(sys.argv[2], "r").read() out_filename = sys.argv[1].split(".")[0] + ".inject" - out = open(out_filename,"w") - + out = open(out_filename, "w") + irq_vector = 0x7FE0 bank_size = 1 << 15 code_len = len(code) rom_len = len(rom) bank_cnt = rom_len / bank_size try: - addr = int(sys.argv[3],16) + addr = int(sys.argv[3], 16) except: error("Expect %s in hex" % sys.argv[3]) - addr_patch = struct.pack(">H",addr) + addr_patch = struct.pack(">H", addr) - - if addr > bank_size: + if addr > bank_size: error("Addr 0x%04x is not within first bank" % addr) - if addr + code_len > ( bank_size - 256 ): - error("Code is %s bytes, and so too big to fit from 0x%04x into first bank" % (code_len,addr)) - - print "Rom size: 0x%08x (%i)" % (rom_len,rom_len) - print "Code size: 0x%04x (%i)" % (code_len,code_len) - print "Banks: 0x%04x (%i)" % (bank_cnt,bank_cnt) - print "Patch addr: 0x%08x" % addr - print "IRQ addr: 0x%08x" % irq_vector + if addr + code_len > (bank_size - 256): + error("Code is %s bytes, and so too big to fit from 0x%04x into first bank" % ( + code_len, addr)) + print "Rom size: 0x%08x (%i)" % (rom_len, rom_len) + print "Code size: 0x%04x (%i)" % (code_len, code_len) + print "Banks: 0x%04x (%i)" % (bank_cnt, bank_cnt) + print "Patch addr: 0x%08x" % addr + print "IRQ addr: 0x%08x" % irq_vector out.write(rom[:addr]) out.write(code) - out.write(rom[addr+code_len:irq_vector]) + out.write(rom[addr + code_len:irq_vector]) out.write(addr_patch) - out.write(rom[irq_vector+2:]) - print "%i Bytes written to %s" % (out.tell(),out_filename) + out.write(rom[irq_vector + 2:]) + print "%i Bytes written to %s" % (out.tell(), out_filename) out.close() print "Apply checksum fix" cmd = "ucon64 -snes -chk %s 2>&1 > /dev/null" % out_filename @@ -68,4 +67,3 @@ def main(): if __name__ == '__main__': main() - diff --git a/scripts/rom_pattern_fill.py b/scripts/rom_pattern_fill.py index 23cffdb..cbf4479 100644 --- a/scripts/rom_pattern_fill.py +++ b/scripts/rom_pattern_fill.py @@ -1,29 +1,27 @@ -import os import sys + def main(): bank_size = 2 ** 15 bank_skip = 2 - + bank_final = 32 - + offset_skip = bank_skip * bank_size - rom = open(sys.argv[1],"r").read() + rom = open(sys.argv[1], "r").read() - out = open(sys.argv[1].replace(".smc",".pad"),"w") + out = open(sys.argv[1].replace(".smc", ".pad"), "w") - out.write(rom[:( bank_skip * bank_size)]) + out.write(rom[:(bank_skip * bank_size)]) - for bank in range(bank_skip,bank_final): - pattern = 55 + bank + for bank in range(bank_skip, bank_final): + pattern = 55 + bank print "Pad %i Bank with %02x" % (bank, pattern) - for i in range(0,bank_size): + for i in range(0, bank_size): out.write(chr(pattern)) out.close() - if __name__ == '__main__': main() - diff --git a/scripts/sinegen.py b/scripts/sinegen.py index a1df00e..dcb9aab 100644 --- a/scripts/sinegen.py +++ b/scripts/sinegen.py @@ -1,14 +1,11 @@ -import string import math -import sys M_PI = 3.14159265358979323846 - -def sine(val,r,scale,stepping): - global M_PI,flip - re = int(math.sin(val*(M_PI*scale)/r)*r) + r +def sine(val, r, scale, stepping): + global M_PI, flip + re = int(math.sin(val * (M_PI * scale) / r) * r) + r re = re & 0xff re = re * stepping return re @@ -20,19 +17,12 @@ def main(): upper = 0xff s = "#define PWM_SINE_MAX %i\nuint8_t pwm_sine_table[] = {\n" % cnt - for i in range(0,cnt): - if i > 0 and i%16==0: - s+="\n" - s +="0x%02x," % sine(i,upper/2,(float(upper)/cnt),stepping) - s=s[:-1] - s+="\n};\n" + for i in range(0, cnt): + if i > 0 and i % 16 == 0: + s += "\n" + s += "0x%02x," % sine(i, upper / 2, (float(upper) / cnt), stepping) + s = s[:-1] + s += "\n};\n" print s main() - - - - - - - diff --git a/scripts/webpy b/scripts/webpy deleted file mode 160000 index 2a5acf5..0000000 --- a/scripts/webpy +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 2a5acf5a834f9c2fd98d5c2be563429821feab3b