Introduzione
    Il "Quarto" fuso ] The 4th Time Zone ]   


 

Introduzione
Note tecniche


                                   

[ Indietro ][ Avanti ]

La versione di Forth implementata funziona solo con la "ZX Interface 1" installata, in quanto fa uso delle chiamate alla ROM fantasma tramite gli hook-code. Inoltre sono stati usati alcuni trucchi per trasformare il normale accesso sequenziale tipico del Microdrive in accesso "quasi-casuale".

Ecco un breve video in formato avi

Il programma viene caricato da cassetta. Al termine del caricamento il caricamento viene aperto il canale # 3 verso la porta seriale RS-232 e il canale # 4 verso il Microdrive per aprire il file sequenziale !Blocks e quindi si entra in stato comandi del Forth con il caratteristico prompt "Ok" e il cursore lampeggiante alla riga successiva.

Per tornare al Basic è necessario dare al prompt del Forth il comando

BASIC [enter]

oppure, in accordo con lo standard, il comando 

BYE [enter]

Putroppo, questo forth è sensibile alla differenza tra maiuscole e minuscole, per cui è necessario fare attenzione che tutto sia digitato in lettere maiuscole.

Se durante l'accesso al microdrive viene premuto il tasto Break si può provocare una brusca uscita al Basic con messaggio di errore L BREAK into program, 11:2. Questo effetto indesiderato è dovuto al fatto che il canale verso il Microdrive è stato aperto dal programma BASIC. In ogni caso non vi è alcuna perdita di dati, tranne i blochi dei quali non è stato fatto FLUSH; per tornare al Forth è sufficiente  dare al prompt del Basic

RUN [enter]

Questo invoca un Warm start del Forth che richiama, prima di restituire il controllo all'operatore, un EMPTY-BUFFERS.

Per verificare l'effettivo funzionamento dell'accesso al microdrive si può provare con

 4 LIST [enter]

che visualizza lo screen # 4 che contiene il testo dei messaggi di errore da 1 a 15.

Screen# 4 
0 ( MESSAGES 1/2 )
1 Stack is empty. (1)
2 Dictionary is full. (2)
3 No such line. (3)
4 has already been defined. (4)
5 Invalid stream. (5)
6 No such block. (6)
7 Old dictionary is full. (8)
8 MSG # 8
9 Tape error. (9)
10 Wrong array index. (10)
11 Ivalid floating point. (11)
12 MSG # 12
13 MSG # 13
14 MSG # 14
15 MSG # 15

In questa implementazion i blocchi sono di 512 bytes ciascuno anziché 1024 come vorrebbe lo standard; ogni blocco corrisponde ad uno schermo; ogni schermo è composto da 16 linee di 32 caratteri ciascuna.

L'accesso ai blocchi avviene tramite BUFFER: è possibile esaminarne la definizione digitando 

SEE BUFFER [enter]

La cui definizione si può leggere faticosamente dalle schermate 

 

: (RD) ( -- )
  CHANNEL @ >R R 0= 5 ?ERROR
  3 R 12 + C! 
  0 R 67 + C! 
  254 R> 24 + C! 
  STREAM @ SELECT INKEY DROP 
  DEVICE @ SELECT ;

: (READ) ( n -- )
  CHANNEL @ >R 
  DUP  R 13 +  C@ - 
  IF 
     1 -  R 13 +  C!  (RD) 
  ELSE 
     DROP 
  THEN 
  R> DROP ;

: B-READ ( addr n -- ) 
  (READ) CHANNEL @ 82 + SWAP B/BUF CMOVE ;

: B-WRITE ( addr n -- )
  (READ) CHANNEL @ >R 
  R 82 + B/BUF CMOVE 
  SECTOR 
  255 R 25 + C! 
  511 R 11 + ! 
  STREAM @ SELECT 
  R 593 + C@ EMITC 
  DEVICE @ SELECT 
  255 R> 13 + C! ;

: R/W ( addr n f -- )
  >R 1 - DUP 0< 6 ?ERROR DUP #SEC > 6 ?ERROR R>
  IF B-READ ELSE B-WRITE THEN ;

: BUFFER ( n -- addr )
  USE @ DUP >R  BEGIN +BUF UNTIL
  USE ! R@ @  0< IF R@ 2+ 32767 AND 0 B-R/W THEN
  R@ ! R@ PREV ! R> 2+ ;

Questo significa che si può accedere ad un solo Microdrive alla volta; con alcuni trucchi è possibile scambiare l'accesso da uno all'altro: si veda lo Screen # 70 per alcune definizioni utili.

 

 

[ Indietro ][ Avanti ]


Ultimo aggiornamento: 29-11-2002. Copyright (c) 2000-2002 Matteo Vitturi. 
Per problemi o domande relativamente a questo sito contattare il webmaster
Last update: 11.29.2002. Copyright (c) 2000-2002 Matteo Vitturi.
For problems or questions related to this web please contact the webmaster.