o
This commit is contained in:
parent
cafe5b8efd
commit
70984ebd00
231
project.tmproj
231
project.tmproj
@ -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/>
|
||||
|
||||
273
scripts/rom.py
273
scripts/rom.py
@ -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()
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user