[zxspectrum] SpecLISP bugfixed !

  • From: Stefano Bodrato <stefano_bodrato@xxxxxxxxxxx>
  • To: "zxspectrum@xxxxxxxxxxxxx" <zxspectrum@xxxxxxxxxxxxx>
  • Date: Fri, 8 May 2015 10:49:13 +0200

Ho trovato il modo di sistemare SpecLisp.



Studiando il disassemblato mi ero accorto che si trattava di un linguaggio
molto ben fatto, ma trasportato sullo Spectrum da NewBrain molto malamente.

La maggioranza dei problemi risiede nella scansione della tastiera, che
permette di passare caratteri sporchi, che minano l'interprete che nel
migliore dei casi risponde con errori incoerenti ma presto o tardi va in crash.



Ho aggiunto un filtro che mi sembra risolvere la maggioranza dei problemi.

La patch si carica nello spazio delle UDG, intercetta la scansione della
tastiera e filtra l'output in modo da evitare del tutto le condizione anomale.
Ho anche recuperato la maggioranza dei simboli "critici" rimappandoli in
grafica, l'eccezione più significativa è '-', che è riservato per il formato
numerico (la sottrazione può però essere definita con underscore e restare
leggibile).

Ora, aggiungendo le opportune definizioni direttamente in LISP, è possibile
creare le classiche funzioni algebriche che permettono espressioni del tipo:

(* 3 4 11 8)



..mentre prima la moltiplicazione si faceva così:

(times 3 4)



Ho trovato anche il modo di ridefinire il set di funzioni interno, creando ad
esempio "defun" come alias di "de" e creando "prog" e "progn" con i
comportamenti simili a quelli degli standard attuali.



Ora sto tentando di usare lo stesso canale che ho usato per il "filtro" come
ponte per trasferire file di testo nel LISP. Potrebbe essere una funzione che
interfacci una subroutine in BASIC (generica) oppure un semplice INKEY$# su un
canale fisso (ad esempio #4).






Other related posts: