diff --git a/scripts/buildrom.py b/scripts/buildrom.py
index 8ff60e2..0499049 100755
--- a/scripts/buildrom.py
+++ b/scripts/buildrom.py
@@ -5,7 +5,7 @@
 #
 # This file may be distributed under the terms of the GNU GPLv3 license.
 
-import sys
+import sys, struct
 
 from python23compat import as_bytes
 
@@ -14,8 +14,11 @@
     return (pos + mask) & ~mask
 
 def checksum(data):
-    ords = map(ord, data)
-    return sum(ords)
+    if (sys.version_info > (3, 0)):
+        cksum = sum(data)
+    else:
+        cksum = sum(map(ord, data))
+    return struct.pack('<B', (0x100 - cksum) & 0xff)
 
 def main():
     inname = sys.argv[1]
@@ -34,14 +37,15 @@
     # Check if a pci header is present
     pcidata = ord(data[24:25]) + (ord(data[25:26]) << 8)
     if pcidata != 0:
-        data = data[:pcidata + 16] + chr(int(count/512)) + chr(0) + data[pcidata + 18:]
+        blocks = struct.pack('<H', int(count/512))
+        data = data[:pcidata + 16] + blocks + data[pcidata + 18:]
 
     # Fill in size field; clear checksum field
-    data = data[:2] + chr(int(count/512)) + data[3:6] + as_bytes("\0") + data[7:]
+    blocks = struct.pack('<B', int(count/512))
+    data = data[:2] + blocks + data[3:6] + as_bytes("\0") + data[7:]
 
     # Checksum rom
-    newsum = (256 - checksum(data)) & 0xff
-    data = data[:6] + chr(newsum) + data[7:]
+    data = data[:6] + checksum(data) + data[7:]
 
     # Write new rom
     f = open(outname, 'wb')
diff --git a/scripts/checkrom.py b/scripts/checkrom.py
index 83d4671..377277d 100755
--- a/scripts/checkrom.py
+++ b/scripts/checkrom.py
@@ -5,8 +5,8 @@
 #
 # This file may be distributed under the terms of the GNU GPLv3 license.
 
-import sys
-import layoutrom
+import sys, struct
+import layoutrom, buildrom
 
 from python23compat import as_bytes
 
@@ -14,12 +14,8 @@
     return data[:offset] + new + data[offset + len(new):]
 
 def checksum(data, start, size, csum):
-    sumbyte = 0
-    while size:
-        sumbyte = sumbyte + ord(data[start + size - 1])
-        size = size - 1
-    sumbyte = (0x100 - sumbyte) & 0xff
-    return subst(data, start+csum, chr(sumbyte))
+    sumbyte = buildrom.checksum(data[start:start+size])
+    return subst(data, start+csum, sumbyte)
 
 def main():
     # Get args
@@ -76,11 +72,11 @@
 
         tableofs = symbols['csm_compat_table'].offset - symbols['code32flat_start'].offset
         entry_addr = symbols['entry_csm'].offset - layoutrom.BUILD_BIOS_ADDR
-        byte1 = chr(entry_addr & 0xff)
-        byte2 = chr(entry_addr >> 8)
-        rawdata = subst(rawdata, tableofs+ENTRY_FIELD_OFS, byte1+byte2)
+        entry_addr = struct.pack('<H', entry_addr)
+        rawdata = subst(rawdata, tableofs+ENTRY_FIELD_OFS, entry_addr)
 
-        tablesize = ord(rawdata[tableofs+SIZE_FIELD_OFS])
+        tsfield = tableofs+SIZE_FIELD_OFS
+        tablesize = ord(rawdata[tsfield:tsfield+1])
         rawdata = checksum(rawdata, tableofs, tablesize, CSUM_FIELD_OFS)
 
     # Print statistics
