[zxspectrum] Re: Funzioni definite dall' utente

  • From: Paolo Ferraris <pieffe8@xxxxxxxxx>
  • To: zxspectrum@xxxxxxxxxxxxx
  • Date: Mon, 29 Oct 2012 23:37:28 -0700

Credo di aver capito come si puo` far ritornare una stringa a USR N.

Ho dato un'occhiata a come funziona la funzione STR$, e vedo che chiama la routine STK-STO-$ invece che STK-STORE. E' molto simile a STK-STORE tranne che inoltre resetta il flag 6 di FLAGS, indicando che il valore ritornato e` di tipo stringa. Sempre dando un'occhiata alla routine di STR$ sembrerebbe che STK-STO-$ si aspetti che DE contenga l'indirizzo di partenza della stringa e BC la sua lunghezza.

A questo punto credo che basti che la routine in LM sostitusca l'indirizzo di ritorno dello stack con uno specifico che chiami SCK-STO-$.


Paolo


On 10/29/2012 1:41 PM, Andrea Vavassori wrote:
Ciao Stefano,

in data lunedì 29 ottobre 2012, alle ore 14.17, hai scritto:

Il modo per restituire valori diversi dall'intero su BC non è banale da spiegare ma 
c'è.
Opus Discovery risponde con un valore in Floating Point al comando
'PRINT USR 8' (ovvero il numero di versione '.' subversion).
Questo   e'   tutto   sommato  abbastanza  semplice: all' inizio della
routine  chiamata  dalla  funzione  USR  bisogna  fare  un  POP HL per
scartare  la  chiamata alla subroutine STACK-BC che la funzione stessa
aveva  predisposto.  A questo punto si carica sullo stack un qualsiasi
valore  floating,  per  es.  chiamando  la STK-STORE a $2AB6 dopo aver
predisposto i registri A, BC e DE in modo opportuno.

Ciao!

Andrea



.



Other related posts: