mirror of
https://github.com/catseye/SixtyPical.git
synced 2025-04-13 18:37:03 +00:00
Make all serialize() methods take addr() as an arg, not kwarg.
This commit is contained in:
parent
0a91d6bbc0
commit
24f093b1db
@ -111,7 +111,7 @@ def process_input_files(filenames, options):
|
||||
# If we are outputting a .PRG, we output the load address first.
|
||||
# We don't use the Emitter for this b/c not part of addr space.
|
||||
if options.output_format in ('prg', 'c64-basic-prg', 'vic20-basic-prg'):
|
||||
fh.write(bytearray(Word(start_addr).serialize()))
|
||||
fh.write(bytearray(Word(start_addr).serialize(0)))
|
||||
|
||||
emitter = Emitter(start_addr)
|
||||
for byte in prelude:
|
||||
|
@ -8,7 +8,9 @@ class Emittable(object):
|
||||
raise NotImplementedError
|
||||
|
||||
def serialize(self, addr):
|
||||
"""Should return an array of unsigned bytes (integers from 0 to 255.)"""
|
||||
"""Should return an array of unsigned bytes (integers from 0 to 255.)
|
||||
`addr` is the address the value is being serialized at; for most objects
|
||||
it makes no difference, but some objects (like relative branches) do care."""
|
||||
raise NotImplementedError
|
||||
|
||||
|
||||
@ -25,7 +27,7 @@ class Byte(Emittable):
|
||||
def size(self):
|
||||
return 1
|
||||
|
||||
def serialize(self, addr=None):
|
||||
def serialize(self, addr):
|
||||
return [self.value]
|
||||
|
||||
def __repr__(self):
|
||||
@ -40,7 +42,7 @@ class Word(Emittable):
|
||||
def size(self):
|
||||
return 2
|
||||
|
||||
def serialize(self, addr=None):
|
||||
def serialize(self, addr):
|
||||
word = self.value
|
||||
low = word & 255
|
||||
high = (word >> 8) & 255
|
||||
@ -60,10 +62,10 @@ class Table(Emittable):
|
||||
def size(self):
|
||||
return self._size
|
||||
|
||||
def serialize(self, addr=None):
|
||||
def serialize(self, addr):
|
||||
buf = []
|
||||
for emittable in self.value:
|
||||
buf.extend(emittable.serialize())
|
||||
buf.extend(emittable.serialize(addr)) # FIXME: addr + offset
|
||||
while len(buf) < self.size():
|
||||
buf.append(0)
|
||||
return buf
|
||||
@ -87,17 +89,17 @@ class Label(Emittable):
|
||||
def size(self):
|
||||
return 2
|
||||
|
||||
def serialize(self, addr=None, offset=0):
|
||||
def serialize(self, addr, offset=0):
|
||||
assert self.addr is not None, "unresolved label: %s" % self.name
|
||||
return Word(self.addr + offset).serialize()
|
||||
return Word(self.addr + offset).serialize(addr)
|
||||
|
||||
def serialize_relative_to(self, addr):
|
||||
assert self.addr is not None, "unresolved label: %s" % self.name
|
||||
return Byte(self.addr - (addr + 2)).serialize()
|
||||
return Byte(self.addr - (addr + 2)).serialize(addr)
|
||||
|
||||
def serialize_as_zero_page(self, offset=0):
|
||||
def serialize_as_zero_page(self, addr, offset=0):
|
||||
assert self.addr is not None, "unresolved label: %s" % self.name
|
||||
return Byte(self.addr + offset).serialize()
|
||||
return Byte(self.addr + offset).serialize(addr)
|
||||
|
||||
def __repr__(self):
|
||||
addr_s = ', addr=%r' % self.addr if self.addr is not None else ''
|
||||
@ -114,11 +116,11 @@ class Offset(Emittable):
|
||||
def size(self):
|
||||
self.label.size()
|
||||
|
||||
def serialize(self, addr=None):
|
||||
return self.label.serialize(offset=self.offset)
|
||||
def serialize(self, addr):
|
||||
return self.label.serialize(addr, offset=self.offset)
|
||||
|
||||
def serialize_as_zero_page(self, offset=0):
|
||||
return self.label.serialize_as_zero_page(offset=self.offset)
|
||||
def serialize_as_zero_page(self, addr, offset=0):
|
||||
return self.label.serialize_as_zero_page(addr, offset=self.offset)
|
||||
|
||||
def __repr__(self):
|
||||
return "%s(%r, %r)" % (self.__class__.__name__, self.label, self.offset)
|
||||
@ -132,8 +134,8 @@ class HighAddressByte(Emittable):
|
||||
def size(self):
|
||||
return 1
|
||||
|
||||
def serialize(self, addr=None):
|
||||
return [self.label.serialize()[0]]
|
||||
def serialize(self, addr):
|
||||
return [self.label.serialize(addr)[0]]
|
||||
|
||||
def __repr__(self):
|
||||
return "%s(%r)" % (self.__class__.__name__, self.label)
|
||||
@ -147,8 +149,8 @@ class LowAddressByte(Emittable):
|
||||
def size(self):
|
||||
return 1
|
||||
|
||||
def serialize(self, addr=None):
|
||||
return [self.label.serialize()[1]]
|
||||
def serialize(self, addr):
|
||||
return [self.label.serialize(addr)[1]]
|
||||
|
||||
def __repr__(self):
|
||||
return "%s(%r)" % (self.__class__.__name__, self.label)
|
||||
|
@ -8,7 +8,7 @@ class AddressingMode(Emittable):
|
||||
"""Size of the operand for the mode (not including the opcode)"""
|
||||
raise NotImplementedError
|
||||
|
||||
def serialize(self, addr=None):
|
||||
def serialize(self, addr):
|
||||
raise NotImplementedError
|
||||
|
||||
def __repr__(self):
|
||||
@ -19,7 +19,7 @@ class Implied(AddressingMode):
|
||||
def size(self):
|
||||
return 0
|
||||
|
||||
def serialize(self, addr=None):
|
||||
def serialize(self, addr):
|
||||
return []
|
||||
|
||||
def __repr__(self):
|
||||
@ -34,8 +34,8 @@ class Immediate(AddressingMode):
|
||||
def size(self):
|
||||
return 1
|
||||
|
||||
def serialize(self, addr=None):
|
||||
return self.value.serialize()
|
||||
def serialize(self, addr):
|
||||
return self.value.serialize(addr)
|
||||
|
||||
|
||||
class Absolute(AddressingMode):
|
||||
@ -46,8 +46,8 @@ class Absolute(AddressingMode):
|
||||
def size(self):
|
||||
return 2
|
||||
|
||||
def serialize(self, addr=None):
|
||||
return self.value.serialize()
|
||||
def serialize(self, addr):
|
||||
return self.value.serialize(addr)
|
||||
|
||||
|
||||
class AbsoluteX(Absolute):
|
||||
@ -66,8 +66,8 @@ class ZeroPage(AddressingMode):
|
||||
def size(self):
|
||||
return 1
|
||||
|
||||
def serialize(self, addr=None):
|
||||
return self.value.serialize_as_zero_page()
|
||||
def serialize(self, addr):
|
||||
return self.value.serialize_as_zero_page(addr)
|
||||
|
||||
|
||||
class Indirect(AddressingMode):
|
||||
@ -78,8 +78,8 @@ class Indirect(AddressingMode):
|
||||
def size(self):
|
||||
return 2
|
||||
|
||||
def serialize(self, addr=None):
|
||||
return self.value.serialize()
|
||||
def serialize(self, addr):
|
||||
return self.value.serialize(addr)
|
||||
|
||||
|
||||
class IndirectY(ZeroPage):
|
||||
@ -94,7 +94,7 @@ class Relative(AddressingMode):
|
||||
def size(self):
|
||||
return 1
|
||||
|
||||
def serialize(self, addr=None):
|
||||
def serialize(self, addr):
|
||||
return self.value.serialize_relative_to(addr)
|
||||
|
||||
|
||||
@ -108,10 +108,8 @@ class Instruction(Emittable):
|
||||
def size(self):
|
||||
return 1 + self.operand.size() if self.operand else 0
|
||||
|
||||
def serialize(self, addr=None):
|
||||
serialized_operand = self.operand.serialize(addr)
|
||||
assert isinstance(serialized_operand, list), self.operand.__class__
|
||||
return [self.opcodes[self.operand.__class__]] + serialized_operand
|
||||
def serialize(self, addr):
|
||||
return [self.opcodes[self.operand.__class__]] + self.operand.serialize(addr)
|
||||
|
||||
def __repr__(self):
|
||||
return "%s(%r)" % (self.__class__.__name__, self.operand)
|
||||
|
Loading…
x
Reference in New Issue
Block a user