Autore Topic: Cos'è Il Token?  (Letto 5099 volte)

6526_CIA

  • Neo-iscritto
  • *
  • Post: 25
  • Gioco Preferito: KATAKIS;ENFORCER
Cos'è Il Token?
« il: 18 Maggio 2007, 07:52:09 »
 Buongiorno a tutti, è una vita che non scrivo piu qua per motivi di lavoro sono sempre all'estero,ma quando trovo in qua e in la una connessione internet seguo  il forum,che è interessante anche se spesso molto tecnico per il mio sapere....comunque.....

Ragazzie cos'è il Token del 64?
Ho letto sul forum che si puo usare per aggiungere comandi al basic?
e Detokenizzare che significa?

 :mah: Sono proprio una schiappa a non saperlo??

Ah non ho abbandonato l'assembler anche se vado al rallentatore piano piano inizio non a muovere i primi passi...ma a gattonare.....
 

fab

  • Utente
  • **
  • Post: 493
    • http://wav-prg.sourceforge.net/
  • Gioco Preferito: Tetris, Turrican, Impossible Mission
Cos'è Il Token?
« Risposta #1 il: 18 Maggio 2007, 12:12:11 »
 Quando un programma Basic viene salvato in memoria, la maggior parte viene salvata in ASCII. Fanno eccezione i comandi: questi vengono salvati in un solo byte, detto "token".

Esempio: tu scrivi

10 PRINT"CIAO":GOTO10

Quando premi RETURN, il 64 "tokenizza" quello che hai scritto. In pratica, in memoria vengono scritti una serie di byte (l'indirizzo di memoria dove questa riga finisce, e il numero di riga, in questo caso 10, in 2 byte, mi pare di ricordare, ma vado a memoria). I comandi PRINT e GOTO vengono trasformati nei relativi token, il resto e' salvato in ASCII. Alla fine della riga, viene introdotto un byte 0 che demarca la fine.

Se scrivi LIST, viene effettuata la "detokenizzazione": la memoria viene letta e il listato BASIC originale viene ricostituito.

Un effetto di cio' e' che, se scrivi la forma abbreviata di un comando, ad esempio pR per PRINT, e poi scrivi LIST per rivederlo, leggerai PRINT. Questo perche' pR e PRINT corrispondono allo stesso token, e con la tokenizzazione la differenza tra i due si perde.

Esistono programmi per PC che tokenizzano (in pratica, trasformano un listato Basic in un .PRG, che rappresenta il contenuto della memoria) e detokenizzano.
Un giapponese sa recitare a memoria tutti i numeri di pi greco fino all'83431º decimale. Sa a memoria anche l'unico numero telefonico che è nella sua agendina - Daniele Luttazzi

6526_CIA

  • Neo-iscritto
  • *
  • Post: 25
  • Gioco Preferito: KATAKIS;ENFORCER
Cos'è Il Token?
« Risposta #2 il: 18 Maggio 2007, 12:37:31 »
 Mmh....già più chiaro...traduco i comandi in codici giusto?
Quindi se io velessi implementare un comando come "SCRIVI" che abbia le stesse funzioni di "PRINT" basterebbe(si......a saperlo fare) legarlo al token di Print?

Ti ringrazio per la segnalazione ma i programmi che ho visto su internet sono tutti o quasi,tranne VICE dedica a windows,io invece uso linux che mi sembra un pò povero di utility per il c64.

Envil

  • Neo-iscritto
  • *
  • Post: 11
  • Gioco Preferito: Turrican II
Cos'è Il Token?
« Risposta #3 il: 18 Maggio 2007, 15:16:06 »
 a quanto so, quando scrivi e poi premi enter cio' che hai scritto viene tokenizzato in $200. quando invece per esempio non usi i comandi diretti ma li listi, in memoria trovi una cosa del genere:

scrivi
1 PRINT "HELLO"


locazione di memoria : valore

$800 (inizio mem basic): $0 che rappresenta l'inizo del programma (null byte).
$801 : $0f queste due locazioni sono l'address della prossima riga basic,
$802 : $08 in formato byte basso, byte alto.
$803 : $01 ossia il numero della linea corrente, anch'esso in formato
$804 : $00 byte basso, byte alto.
$805 : $99 token dell'istruzione PRINT, io lo definisco "opcode basic" per chiarire..
$806 : $20 carattere ascii della spacebar
$807 : carattere ascii delle virgolette (non lo ricordo ma fai prima a provarlo tu)
$808 : caratteri ascii della parola HELLO
$809 :
$80a :
$80b :
$80c :
$80d : carattere ascii virgolette
$80e : $0 null byte di fine linea
$80f : $0 null byte di fine programma (dato che nell'esempio c'e' una sola riga basic), quello puntato in $801-$802

ps, non conosco programmi specifici per linux, ma prova a usare wine che spesso fa miracoli ;)  
                          ...Defending Metal Faith...

Roberto

  • Administrator
  • Utente
  • *****
  • Post: 2431
    • https://ready64.org
  • Gioco Preferito: Impossible Mission
Cos'è Il Token?
« Risposta #4 il: 18 Maggio 2007, 15:25:04 »
Citazione da: "6526_CIA"
Ti ringrazio per la segnalazione ma i programmi che ho visto su internet sono tutti o quasi,tranne VICE dedica a windows,io invece uso linux che mi sembra un pò povero di utility per il c64.
Di Bastext viene distribuito anche il sorgente quindi puoi eventualmente scaricarlo e compilarlo.
http://www.softwolves.pp.se/cbm/skapelser/verktyg

Per ulteriori approfondimenti su Bastext ti raccomanderei una ricerca sul forum, ne abbiamo parlato in diverse circostanze e dovresti trovare ulteriori utili approfondimenti.
Per collaborare, segnalare un errore (o qualsiasi altra comunicazione importante) utilizzare la pagina dei contatti:
https://ready64.org/informazioni/contatti.php

6526_CIA

  • Neo-iscritto
  • *
  • Post: 25
  • Gioco Preferito: KATAKIS;ENFORCER
Cos'è Il Token?
« Risposta #5 il: 18 Maggio 2007, 20:05:00 »
 Ok...ma come posso usare il token per creare nuovi comandi?Tipo un estensione del basic 2.0?
Progetto ambizioso?
Ma iniziai cu un c16,poi un c 128 e sul grande C64 mi sentii un po perso,lo so che ci sono molte estensioni gia come si dice bellè che fatte,ma avrei in mente un qualcosa di mai visto...
 

Roberto

  • Administrator
  • Utente
  • *****
  • Post: 2431
    • https://ready64.org
  • Gioco Preferito: Impossible Mission
Cos'è Il Token?
« Risposta #6 il: 18 Maggio 2007, 20:20:32 »
 Si, hai ragione, scusa ma la mia risposta precedente era fuori contesto.
Per collaborare, segnalare un errore (o qualsiasi altra comunicazione importante) utilizzare la pagina dei contatti:
https://ready64.org/informazioni/contatti.php

eregil

  • Administrator
  • Utente
  • *****
  • Post: 710
  • Gioco Preferito: Impossible Mission
Cos'è Il Token?
« Risposta #7 il: 18 Maggio 2007, 22:05:05 »
 
Citazione da: "6526_CIA"
Ok...ma come posso usare il token per creare nuovi comandi?Tipo un estensione del basic 2.0?
Progetto ambizioso?
Ok allora vediamo di chiarire alcune cose.

Il token altro non è che la codifica in un singolo byte (il BASIC 7.0 del C128 aveva anche token di due byte, ma qui divaghiamo) di un'intera parola-chiave del BASIC: codificando PRINT con il token 153 in luogo della sequenza di 5 caratteri P, R, I, N, T si ottenevano come vantaggi:

1) una maggiore compattezza del programma in memoria, e quindi la possibilità di ospitare ed eseguire programmi più lunghi
2) una (relativa) maggiore velocità di esecuzione dell'interprete BASIC, dal momento che è più rapido ricavare l'indirizzo della routine di PRINT ricavandolo dall'associazione nella tabella degli indirizzi del suo token 153, che non ripetere ad ogni esecuzione il riconoscimento della sequenza P, R, I, N, T.

A pagina 62 di CCC n. 35 (presente sul sito) puoi trovare la lista di tutti i token dei BASIC 2.0, 3.5 e 7.0 (se possibile ti consiglio di leggere l'intero articolo di cui la tabella fa parte).

Come usare i token per espandere il BASIC, ti chiedi. Ebbene, la domanda è mal posta. I token preesistenti nell'interprete BASIC 2.0 non sono uno strumento per espandere il BASIC, caso mai nell'atto di espandere il BASIC puoi definire i tuoi token.

Mi spiego meglio. Nella ROM dell'interprete BASIC sono presenti due liste: una associa le stringhe (PRINT, POKE, LIST, SAVE, ecc.) ai token, l'altra associa i token agli indirizzi di memoria ai quali iniziano le relative routine che l'interprete chiama per eseguire i comandi e le funzioni. Un approccio che puoi utilizzare per espandere il BASIC è, quindi, quello di fare ricorso allo stesso espediente: crearti una tua coppia di tabelle che associno la stringa PIPPO al token x e il token x alla routine che inizia all'indirizzo 50987 (routine scritta in linguaggio macchina, da te o da altri), la stringa PLUTO al token y e il token y alla routine che inizia all'indirizzo 51234, ecc. In questo senso utilizzi i token per espandere il BASIC: è a tuo carico scrivere il nuovo interprete BASIC in linguaggio macchina, magari prevedendo in qualche modo una retrocompatibilità; ad esempio i "tuoi" token possono essere gestiti dal "tuo" interprete, il quale incontrando un token del BASIC 2.0 li dà in pasto all'interprete su ROM.

È un progetto ambizioso espandere il BASIC 2.0? Be', soprattutto se intendi farlo "da zero", indubbiamente sì. Ma c'è un'altra domanda da porsi: è realmente utile? IMHO se il tuo intento è quello di imparare a conoscere il funzionamento del C64 e a programmarlo in assembly, applicandoti in un progetto, la cosa ci può stare, altrimenti scrivere oggi un'estensione del BASIC 2.0 è quantomeno anacronistico: tutti coloro che sono interessati alla programmazione del C64 (per giochi, demo, ecc.) hanno imparato o imparano l'assembly... difficilmente qualcuno userà una nuova estensione del BASIC per fare alcunché, il massimo che possa capitare è che qualche nostalgico programmi qualcosa con un'estensione esistente all'epoca d'oro del C64 (il Simons' BASIC sarebbe l'esempio principe), per pura nostalgia appunto. Non si può avere nostalgia di qualcosa che ai vecchi tempi non c'era...

Poi ripeto, se il tuo intento è imparare l'assembly fai pure, non sarò io a biasimarti se farai una scelta di questo genere, magari dettata dal fatto che non ti senti di programmare un gioco (con il quale otterresti probabilmente maggiore interesse da parte di altri utenti) per mancanza di creatività o che so io.
 
Non rispondo a richieste private, di qualunque genere esse siano.
Per domande tecniche leggete le FAQ e usate l'apposito forum.
Per questioni amministrative contattate lo staff tramite il form Contatti sul sito.

6526_CIA

  • Neo-iscritto
  • *
  • Post: 25
  • Gioco Preferito: KATAKIS;ENFORCER
Cos'è Il Token?
« Risposta #8 il: 18 Maggio 2007, 23:22:13 »
 
Citazione
Mi spiego meglio. Nella ROM dell'interprete BASIC sono presenti due liste: una associa le stringhe (PRINT, POKE, LIST, SAVE, ecc.) ai token, l'altra associa i token agli indirizzi di memoria ai quali iniziano le relative routine che l'interprete chiama per eseguire i comandi e le funzioni. Un approccio che puoi utilizzare per espandere il BASIC è, quindi, quello di fare ricorso allo stesso espediente: crearti una tua coppia di tabelle che associno la stringa PIPPO al token x e il token x alla routine che inizia all'indirizzo 50987 (routine scritta in linguaggio macchina, da te o da altri), la stringa PLUTO al token y e il token y alla routine che inizia all'indirizzo 51234, ecc. In questo senso utilizzi i token per espandere il BASIC:


Quindi se ho capito bene pongo un esempio:

Il comando VOX (la voce).
Il Programmatore ha creato (in rom??)una stringa "VOX" e poi la associata ad una tabella dove si prevedeva un salto alla routine del caso ogni volta che il C64 riconosceva la stringa VOX??
Mi sembra strano in ROM perchè che sappia non ci si puo scrivere ,inoltre la voce succhiava memoria al c64 e io non  vorrei,ma probabilmente sto delirando.........no?
 

eregil

  • Administrator
  • Utente
  • *****
  • Post: 710
  • Gioco Preferito: Impossible Mission
Cos'è Il Token?
« Risposta #9 il: 18 Maggio 2007, 23:52:49 »
 Su due piedi non so se "La Voce" utilizzi dei token per codificare i propri comandi, perché non ho mai analizzato tale software. Eventualmente qualcuno che l'ha fatto interverrà in proposito.

Il principio di base dell'estensione del BASIC cmq non è la definizione di token in sé (per quanto ci siano evidenti vantaggi nel farlo), ma la sostituzione dell'interprete BASIC. In pratica si tratta di fare in modo che sia il "tuo" interprete a leggere i comandi BASIC, passando la palla all'interprete standard per i comandi che non fanno parte dell'estensione.

Ovviamente non si può scrivere sulla ROM, come hai detto (non è per sfizio che si chiama Read-Only Memory). Se l'estensione del BASIC dovrà essere caricata da disco o cassetta naturalmente il tuo interprete risiederà in RAM. E se il tuo interprete usa dei token propri, parimenti la tabella dei "tuoi" token risiederà in RAM.

Un articolo illuminante al proposito è comparso su CCC n. 56 nell'inserto, a pag. XIV e seguenti (pag. 056 secondo la numerazione presente su questo sito).

Da leggere tutto se vuoi chiarirti le idee sulle possibilità di estensione del BASIC, anche senza definizione di token.

Aggiungo che in linea teorica si potrebbe anche copiare l'intero contenuto della ROM nella RAM che si trova agli stessi indirizzi, quindi disabilitare la ROM e modificare l'interprete copiato in RAM, ma il gioco non vale la candela e infatti non è un approccio molto seguito; ci sono tecniche più efficaci e che richiedono meno lavoro.
 
Non rispondo a richieste private, di qualunque genere esse siano.
Per domande tecniche leggete le FAQ e usate l'apposito forum.
Per questioni amministrative contattate lo staff tramite il form Contatti sul sito.