This commit is contained in:
optixx 2009-04-17 08:53:46 +02:00
parent cafe5b8efd
commit 70984ebd00
2 changed files with 344 additions and 160 deletions

View File

@ -3,7 +3,7 @@
<plist version="1.0">
<dict>
<key>currentDocument</key>
<string>zsnes/docs/srcinfo.txt</string>
<string>scripts/rom_analyse.sql</string>
<key>documents</key>
<array>
<dict>
@ -21,6 +21,122 @@
<integer>200</integer>
<key>metaData</key>
<dict>
<key>scripts/rom.py</key>
<dict>
<key>caret</key>
<dict>
<key>column</key>
<integer>25</integer>
<key>line</key>
<integer>144</integer>
</dict>
<key>firstVisibleColumn</key>
<integer>0</integer>
<key>firstVisibleLine</key>
<integer>140</integer>
</dict>
<key>scripts/rom_analyse.sql</key>
<dict>
<key>caret</key>
<dict>
<key>column</key>
<integer>0</integer>
<key>line</key>
<integer>36</integer>
</dict>
<key>firstVisibleColumn</key>
<integer>0</integer>
<key>firstVisibleLine</key>
<integer>0</integer>
</dict>
<key>snes/ascii/backcolors.s</key>
<dict>
<key>caret</key>
<dict>
<key>column</key>
<integer>0</integer>
<key>line</key>
<integer>0</integer>
</dict>
<key>firstVisibleColumn</key>
<integer>0</integer>
<key>firstVisibleLine</key>
<integer>0</integer>
</dict>
<key>snes/ascii/header.inc</key>
<dict>
<key>caret</key>
<dict>
<key>column</key>
<integer>13</integer>
<key>line</key>
<integer>55</integer>
</dict>
<key>columnSelection</key>
<false/>
<key>firstVisibleColumn</key>
<integer>0</integer>
<key>firstVisibleLine</key>
<integer>14</integer>
<key>selectFrom</key>
<dict>
<key>column</key>
<integer>12</integer>
<key>line</key>
<integer>55</integer>
</dict>
<key>selectTo</key>
<dict>
<key>column</key>
<integer>13</integer>
<key>line</key>
<integer>55</integer>
</dict>
</dict>
<key>snes/ascii/main.asm</key>
<dict>
<key>caret</key>
<dict>
<key>column</key>
<integer>0</integer>
<key>line</key>
<integer>8</integer>
</dict>
<key>firstVisibleColumn</key>
<integer>0</integer>
<key>firstVisibleLine</key>
<integer>0</integer>
</dict>
<key>snes/simpletest/sprite.asm</key>
<dict>
<key>caret</key>
<dict>
<key>column</key>
<integer>0</integer>
<key>line</key>
<integer>166</integer>
</dict>
<key>columnSelection</key>
<false/>
<key>firstVisibleColumn</key>
<integer>0</integer>
<key>firstVisibleLine</key>
<integer>158</integer>
<key>selectFrom</key>
<dict>
<key>column</key>
<integer>0</integer>
<key>line</key>
<integer>162</integer>
</dict>
<key>selectTo</key>
<dict>
<key>column</key>
<integer>0</integer>
<key>line</key>
<integer>166</integer>
</dict>
</dict>
<key>zsnes/docs/README.LINUX</key>
<dict>
<key>caret</key>
@ -105,20 +221,6 @@
<key>firstVisibleLine</key>
<integer>0</integer>
</dict>
<key>zsnes/docs/srcinfo.txt</key>
<dict>
<key>caret</key>
<dict>
<key>column</key>
<integer>0</integer>
<key>line</key>
<integer>0</integer>
</dict>
<key>firstVisibleColumn</key>
<integer>0</integer>
<key>firstVisibleLine</key>
<integer>13</integer>
</dict>
<key>zsnes/src/chips/dsp4emu.c</key>
<dict>
<key>caret</key>
@ -133,20 +235,6 @@
<key>firstVisibleLine</key>
<integer>113</integer>
</dict>
<key>zsnes/src/chips/fxtable.asm</key>
<dict>
<key>caret</key>
<dict>
<key>column</key>
<integer>0</integer>
<key>line</key>
<integer>0</integer>
</dict>
<key>firstVisibleColumn</key>
<integer>0</integer>
<key>firstVisibleLine</key>
<integer>0</integer>
</dict>
<key>zsnes/src/chips/seta10.c</key>
<dict>
<key>caret</key>
@ -161,79 +249,15 @@
<key>firstVisibleLine</key>
<integer>453</integer>
</dict>
<key>zsnes/src/cpu/dsp.asm</key>
<dict>
<key>caret</key>
<dict>
<key>column</key>
<integer>0</integer>
<key>line</key>
<integer>0</integer>
</dict>
<key>firstVisibleColumn</key>
<integer>0</integer>
<key>firstVisibleLine</key>
<integer>32</integer>
</dict>
<key>zsnes/src/cpu/execute.asm</key>
<dict>
<key>caret</key>
<dict>
<key>column</key>
<integer>0</integer>
<key>line</key>
<integer>0</integer>
</dict>
<key>firstVisibleColumn</key>
<integer>0</integer>
<key>firstVisibleLine</key>
<integer>246</integer>
</dict>
<key>zsnes/src/macros.mac</key>
<dict>
<key>caret</key>
<dict>
<key>column</key>
<integer>0</integer>
<key>line</key>
<integer>0</integer>
</dict>
<key>firstVisibleColumn</key>
<integer>0</integer>
<key>firstVisibleLine</key>
<integer>0</integer>
</dict>
<key>zsnes/src/mmlib/osx.c</key>
<dict>
<key>caret</key>
<dict>
<key>column</key>
<integer>0</integer>
<key>line</key>
<integer>0</integer>
</dict>
<key>firstVisibleColumn</key>
<integer>0</integer>
<key>firstVisibleLine</key>
<integer>1639</integer>
</dict>
</dict>
<key>openDocuments</key>
<array>
<string>zsnes/src/macros.mac</string>
<string>zsnes/src/cpu/dsp.asm</string>
<string>zsnes/src/cpu/execute.asm</string>
<string>zsnes/src/mmlib/osx.c</string>
<string>zsnes/src/chips/fxtable.asm</string>
<string>zsnes/src/chips/seta10.c</string>
<string>zsnes/src/chips/dsp4emu.c</string>
<string>zsnes/docs/authors.txt</string>
<string>zsnes/docs/install.txt</string>
<string>zsnes/docs/license.txt</string>
<string>zsnes/docs/opengl.txt</string>
<string>zsnes/docs/README.LINUX</string>
<string>zsnes/docs/README.SVN</string>
<string>zsnes/docs/srcinfo.txt</string>
<string>snes/simpletest/sprite.asm</string>
<string>snes/ascii/main.asm</string>
<string>snes/ascii/header.inc</string>
<string>scripts/rom.py</string>
<string>snes/ascii/backcolors.s</string>
<string>scripts/rom_analyse.sql</string>
</array>
<key>showFileHierarchyDrawer</key>
<false/>
@ -247,7 +271,14 @@
<true/>
<key>subItems</key>
<dict>
<key>pyusb</key>
<key>scripts</key>
<dict>
<key>isExpanded</key>
<true/>
<key>subItems</key>
<dict/>
</dict>
<key>ucon64</key>
<dict>
<key>isExpanded</key>
<true/>

View File

@ -1,4 +1,12 @@
import sqlite3
import os
import re
import string
import stat
import popen2
import glob
import sys
import pprint
# Detect Mirrord Roms
# Rom Type Mapping
@ -14,26 +22,37 @@ import sqlite3
#246 ROM and DSP2 chip
snes_header_tpl='''
Super Nintendo Entertainment System/SNES/Super Famicom
SNES Tile Demo
Demo or Beta ROM?
Europe, Oceania and Asia
262144 Bytes (2.0000 Mb)
#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
Padded: Maybe, 227296 Bytes (1.7341 Mb)
Interleaved/Swapped: No
Backup unit/emulator header: Yes, 512 Bytes
HiROM: No
Internal size: 2 Mb
ROM type: (0) ROM
ROM speed: 200 ns (SlowROM)
SRAM: No
Version: 1.0
Checksum: Ok, 0x6629 (calculated) == 0x6629 (internal)
Inverse checksum: Ok, 0x99d6 (calculated) == 0x99d6 (internal)
Checksum (CRC32): 0x8e16de1e
'''
swc_header_tpl='''
Backup unit header info (SWC)
@ -53,56 +72,34 @@ Backup unit header info (SWC)
'''
snes_header_regex='''(?P<line01>.*)
(?P<titel>.*)
(?P<line03>.*)
(?P<region>.*)
'''
a = '''
(?P<titel>[\w]+)
(?P<line03>[\w]+)
(?P<region>[\w]+)
(?P<rom_size>\d+) Bytes ((?P<rom_mb>[\d.]+) Mb)
Padded: Maybe, 227296 Bytes (1.7341 Mb)
Interleaved/Swapped: No
Backup unit/emulator header: Yes, 512 Bytes
HiROM: No
Internal size: 2 Mb
ROM type: (0) ROM
ROM speed: 200 ns (SlowROM)
SRAM: No
Version: 1.0
Checksum: Ok, 0x6629 (calculated) == 0x6629 (internal)
Inverse checksum: Ok, 0x99d6 (calculated) == 0x99d6 (internal)
Checksum (CRC32): 0x8e16de1e
'''
import os
import re
import string
os.unlink("roms.sqlite3")
conn = sqlite3.connect('roms.sqlite3')
c = conn.cursor()
c.execute('''create table roms
def createdb():
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,
file_size integer,
rom_size integer,
rom_mb real,
rom_name text,
rom_padded integer,
rom_trainer integer,
rom_backup integer,
rom_name text,
rom_vendor text,
rom_region text,
rom_hirom integer,
rom_internalsize integer,
rom_type, integer,
rom_type integer,
rom_speed integer,
rom_sram integer,
rom_version integer,
rom_version real,
rom_chk integer,
swc_size integer,
swc_mode integer,
@ -112,15 +109,171 @@ c.execute('''create table roms
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 = ''
#c.execute("""insert into stocks
# values ('2006-01-05','BUY','RHAT',100,35.14)""")
conn.commit
print "-" * 60
print "Process %s" % file_name
try:
rom_name = out[13]
rom_vendor = out[14]
rom_region = out[15]
c.close()
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()
print re.compile(snes_header_regex,re.M).search(snes_header_tpl).groups()
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
def clean(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()
if __name__ == "__main__":
main()