def number(self, number): ''' Returns a floating point (or integer) number for a BASIC program. That is: It's ASCII representation followed by 5 bytes in floating point or integer format (if number in (-65535 + 65535) ''' s = [ord(x) for x in str(number)] + [14] # Bytes of string representation in bytes if number == int(number) and abs(number) < 65536: # integer form? sign = 0xFF if number < 0 else 0 b = [0, sign] + self.numberLH(number) + [0] else: # Float form (C, ED, LH) = fp.immediate_float(number) C = C[:2] # Remove 'h' ED = ED[:4] # Remove 'h' LH = LH[:4] # Remove 'h' b = [int(C, 16)] # Convert to BASE 10 b += [int(ED[:2], 16), int(ED[2:], 16)] b += [int(LH[:2], 16), int(LH[2:], 16)] return s + b
def number(self, number): ''' Returns a floating point (or integer) number for a BASIC program. That is: It's ASCII representation followed by 5 bytes in floating point or integer format (if number in (-65535 + 65535) ''' s = [ord(x) for x in str(number) ] + [14] # Bytes of string representation in bytes if number == int(number) and abs(number) < 65536: # integer form? sign = 0xFF if number < 0 else 0 b = [0, sign] + self.numberLH(number) + [0] else: # Float form (C, ED, LH) = fp.immediate_float(number) C = C[:2] # Remove 'h' ED = ED[:4] # Remove 'h' LH = LH[:4] # Remove 'h' b = [int(C, 16)] # Convert to BASE 10 b += [int(ED[:2], 16), int(ED[2:], 16)] b += [int(LH[:2], 16), int(LH[2:], 16)] return s + b
def _float(op): ''' Returns a floating point operand converted to 5 byte (40 bits) unsigned int. The result is returned in a tuple (C, DE, HL) => Exp, mantissa =>High16 (Int part), Low16 (Decimal part) ''' return fp.immediate_float(float(op))