#
# This file may be distributed under the terms of the GNU GPLv3 license.
-import sys
+import sys, struct
from python23compat import as_bytes
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]
# 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')
#
# 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
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
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