code: def _pstorestr(ins):
      
      output = []
      temporal = False
  
      # 2nd operand first, because must go into the stack
      value = ins.quad[2]
  
      if value[0] == '*':
          value = value[1:]
          indirect = True
      else:
          indirect = False
  
      if value[0] == '_':
          output.append('ld de, (%s)' % value)
  
          if indirect:
              output.append('call __LOAD_DE_DE')
              REQUIRES.add('lddede.asm')
  
      elif value[0] == '#':
          output.append('ld de, %s' % value[1:])
      else:
          output.append('pop de')
          temporal = value[0] != '$'
          if indirect:
              output.append('call __LOAD_DE_DE')
              REQUIRES.add('lddede.asm')
  
      # Now 1st operand
      value = ins.quad[1]
      if value[0] == '*':
          value = value[1:]
          indirect = True
      else:
          indirect = False
  
      I = int(value)
      if I >= 0:
          I += 4  # Return Address + "push IX"
  
      output.append('ld bc, %i' % I)
  
      if not temporal:
          if indirect:
              output.append('call __PISTORE_STR')
              REQUIRES.add('storestr.asm')
          else:
              output.append('call __PSTORE_STR')
              REQUIRES.add('pstorestr.asm')
      else:
          if indirect:
              output.append('call __PISTORE_STR2')
              REQUIRES.add('storestr2.asm')
          else:
              output.append('call __PSTORE_STR2')
              REQUIRES.add('pstorestr2.asm')
  
      return output
docs: Stores 2nd parameter at stack pointer (SP) + X, being
      X 1st parameter.
  
      1st operand must be a SIGNED integer.
  
      Note: This procedure proceeds as _pstore16, since STRINGS are 16bit pointers.