def _pstoref(ins): ''' Stores 2nd parameter at stack pointer (SP) + X, being X 1st parameter. 1st operand must be a SIGNED integer. ''' value = ins.quad[2] offset = ins.quad[1] indirect = offset[0] == '*' if indirect: offset = offset[1:] I = int(offset) if I >= 0: I += 4 # Return Address + "push IX" output = _float_oper(value) if indirect: output.append('ld hl, %i' % I) output.append('call __PISTOREF') REQUIRES.add('storef.asm') return output # direct store output.append('ld hl, %i' % I) output.append('call __PSTOREF') REQUIRES.add('pstoref.asm') return output
def _astoref(ins): ''' Stores a floating point value into a memory address. ''' output = _addr(ins.quad[1]) value = ins.quad[2] if value[0] == '*': value = value[1:] indirect = True else: indirect = False if indirect: output.append('push hl') output.extend(_float_oper(ins.quad[2])) output.append('pop hl') else: output.extend(_float_oper(ins.quad[2])) output.append('call __STOREF') REQUIRES.add('storef.asm') return output