浏览代码

Merge branch 'master' of git@github.com:optixx/snesram

David Voswinkel 15 年之前
父节点
当前提交
ed16c23002
共有 2 个文件被更改,包括 71 次插入0 次删除
  1. 71 0
      scripts/rom_inject.py
  2. 0 0
      scripts/rom_pattern_fill.py

+ 71 - 0
scripts/rom_inject.py

@@ -0,0 +1,71 @@
+# -*- coding: utf-8 -*-
+import os
+import sys
+import struct
+
+def usage():
+    print "%s <rom> <code> <addr>" % sys.argv[0]
+    sys.exit(0)
+
+
+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()
+    out_filename = sys.argv[1].split(".")[0] + ".inject"
+    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)
+    except:
+        error("Expect %s in hex" % sys.argv[3])
+
+    addr_patch = struct.pack(">H",addr)
+
+
+    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
+
+
+    out.write(rom[:addr])
+    out.write(code)
+    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.close()
+    print "Apply checksum fix"
+    cmd = "ucon64 -snes -chk %s 2>&1 > /dev/null" % out_filename
+    os.system(cmd)
+
+
+if __name__ == '__main__':
+    main()
+

+ 0 - 0
scripts/pad.py → scripts/rom_pattern_fill.py