optixx 15 vuotta sitten
vanhempi
commit
70984ebd00
2 muutettua tiedostoa jossa 292 lisäystä ja 108 poistoa
  1. 78 47
      project.tmproj
  2. 214 61
      scripts/rom.py

+ 78 - 47
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,35 +21,35 @@
 	<integer>200</integer>
 	<key>metaData</key>
 	<dict>
-		<key>zsnes/docs/README.LINUX</key>
+		<key>scripts/rom.py</key>
 		<dict>
 			<key>caret</key>
 			<dict>
 				<key>column</key>
-				<integer>0</integer>
+				<integer>25</integer>
 				<key>line</key>
-				<integer>0</integer>
+				<integer>144</integer>
 			</dict>
 			<key>firstVisibleColumn</key>
 			<integer>0</integer>
 			<key>firstVisibleLine</key>
-			<integer>0</integer>
+			<integer>140</integer>
 		</dict>
-		<key>zsnes/docs/README.SVN</key>
+		<key>scripts/rom_analyse.sql</key>
 		<dict>
 			<key>caret</key>
 			<dict>
 				<key>column</key>
 				<integer>0</integer>
 				<key>line</key>
-				<integer>0</integer>
+				<integer>36</integer>
 			</dict>
 			<key>firstVisibleColumn</key>
 			<integer>0</integer>
 			<key>firstVisibleLine</key>
 			<integer>0</integer>
 		</dict>
-		<key>zsnes/docs/authors.txt</key>
+		<key>snes/ascii/backcolors.s</key>
 		<dict>
 			<key>caret</key>
 			<dict>
@@ -63,49 +63,81 @@
 			<key>firstVisibleLine</key>
 			<integer>0</integer>
 		</dict>
-		<key>zsnes/docs/install.txt</key>
+		<key>snes/ascii/header.inc</key>
 		<dict>
 			<key>caret</key>
 			<dict>
 				<key>column</key>
-				<integer>0</integer>
+				<integer>13</integer>
 				<key>line</key>
-				<integer>0</integer>
+				<integer>55</integer>
 			</dict>
+			<key>columnSelection</key>
+			<false/>
 			<key>firstVisibleColumn</key>
 			<integer>0</integer>
 			<key>firstVisibleLine</key>
-			<integer>132</integer>
+			<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>zsnes/docs/license.txt</key>
+		<key>snes/ascii/main.asm</key>
 		<dict>
 			<key>caret</key>
 			<dict>
 				<key>column</key>
 				<integer>0</integer>
 				<key>line</key>
-				<integer>0</integer>
+				<integer>8</integer>
 			</dict>
 			<key>firstVisibleColumn</key>
 			<integer>0</integer>
 			<key>firstVisibleLine</key>
 			<integer>0</integer>
 		</dict>
-		<key>zsnes/docs/opengl.txt</key>
+		<key>snes/simpletest/sprite.asm</key>
 		<dict>
 			<key>caret</key>
 			<dict>
 				<key>column</key>
 				<integer>0</integer>
 				<key>line</key>
-				<integer>0</integer>
+				<integer>166</integer>
 			</dict>
+			<key>columnSelection</key>
+			<false/>
 			<key>firstVisibleColumn</key>
 			<integer>0</integer>
 			<key>firstVisibleLine</key>
-			<integer>0</integer>
+			<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/srcinfo.txt</key>
+		<key>zsnes/docs/README.LINUX</key>
 		<dict>
 			<key>caret</key>
 			<dict>
@@ -117,9 +149,9 @@
 			<key>firstVisibleColumn</key>
 			<integer>0</integer>
 			<key>firstVisibleLine</key>
-			<integer>13</integer>
+			<integer>0</integer>
 		</dict>
-		<key>zsnes/src/chips/dsp4emu.c</key>
+		<key>zsnes/docs/README.SVN</key>
 		<dict>
 			<key>caret</key>
 			<dict>
@@ -131,9 +163,9 @@
 			<key>firstVisibleColumn</key>
 			<integer>0</integer>
 			<key>firstVisibleLine</key>
-			<integer>113</integer>
+			<integer>0</integer>
 		</dict>
-		<key>zsnes/src/chips/fxtable.asm</key>
+		<key>zsnes/docs/authors.txt</key>
 		<dict>
 			<key>caret</key>
 			<dict>
@@ -147,7 +179,7 @@
 			<key>firstVisibleLine</key>
 			<integer>0</integer>
 		</dict>
-		<key>zsnes/src/chips/seta10.c</key>
+		<key>zsnes/docs/install.txt</key>
 		<dict>
 			<key>caret</key>
 			<dict>
@@ -159,9 +191,9 @@
 			<key>firstVisibleColumn</key>
 			<integer>0</integer>
 			<key>firstVisibleLine</key>
-			<integer>453</integer>
+			<integer>132</integer>
 		</dict>
-		<key>zsnes/src/cpu/dsp.asm</key>
+		<key>zsnes/docs/license.txt</key>
 		<dict>
 			<key>caret</key>
 			<dict>
@@ -173,9 +205,9 @@
 			<key>firstVisibleColumn</key>
 			<integer>0</integer>
 			<key>firstVisibleLine</key>
-			<integer>32</integer>
+			<integer>0</integer>
 		</dict>
-		<key>zsnes/src/cpu/execute.asm</key>
+		<key>zsnes/docs/opengl.txt</key>
 		<dict>
 			<key>caret</key>
 			<dict>
@@ -187,9 +219,9 @@
 			<key>firstVisibleColumn</key>
 			<integer>0</integer>
 			<key>firstVisibleLine</key>
-			<integer>246</integer>
+			<integer>0</integer>
 		</dict>
-		<key>zsnes/src/macros.mac</key>
+		<key>zsnes/src/chips/dsp4emu.c</key>
 		<dict>
 			<key>caret</key>
 			<dict>
@@ -201,9 +233,9 @@
 			<key>firstVisibleColumn</key>
 			<integer>0</integer>
 			<key>firstVisibleLine</key>
-			<integer>0</integer>
+			<integer>113</integer>
 		</dict>
-		<key>zsnes/src/mmlib/osx.c</key>
+		<key>zsnes/src/chips/seta10.c</key>
 		<dict>
 			<key>caret</key>
 			<dict>
@@ -215,25 +247,17 @@
 			<key>firstVisibleColumn</key>
 			<integer>0</integer>
 			<key>firstVisibleLine</key>
-			<integer>1639</integer>
+			<integer>453</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/>

+ 214 - 61
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)
-
-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
-'''
+#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='''
 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 = ''
+
+	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()
+
 
-#c.execute("""insert into stocks
-#          values ('2006-01-05','BUY','RHAT',100,35.14)""")
-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
 
-c.close()
+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()
 
-print re.compile(snes_header_regex,re.M).search(snes_header_tpl).groups()