python3 fixes for vgabios and csm builds.

Avoid using chr() as this produces unicode strings on python3.  Make
sure to only use ord() on slices as the python3 bytearray type returns
an integer on a non-slice array access.

Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
This commit is contained in:
Kevin O'Connor
2014-05-22 16:59:16 -04:00
parent 7eac0c4e9d
commit e51488c5f8
2 changed files with 19 additions and 19 deletions

View File

@ -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 @@ def alignpos(pos, alignbytes):
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 @@ def main():
# 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')

View File

@ -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 @@ def subst(data, offset, new):
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 @@ def main():
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