Articolo pubblicato sul n. 38 di MCmicrocomputer (Edizioni Technimedia Srl - Roma) nel febbraio 1985

MCmicrocomputer


Commodore 64
L'ADP Basic:
P come Printer

(quarta parte)

di Andrea de Prisco

Penultimo appuntamento con l'ADP Basic: questo mese è la volta delle stampanti Commodore MPS 801 e MPS 802. Come per il Plotter potremo dirottare su carta i normali output video, nonché sfruttare facilmente le varie funzioni svolte da queste due periferiche. Sempre senza OPEN, CMD e cancelletti (#) vari.Copertina del numero di MCmicrocomputer contenente l'articolo

Avvertenza

I listati Basic presentati negli ultimi tre numeri, riguardanti le periferiche Driver 1541 e Plotter 1520, devono essere caricati in memoria e eseguiti tutti per poter implementare le istruzioni di questo mese e del prossimo. Queste, infatti, fanno riferimento a porzioni di programma LM già presenti per risparmiare spazio. Detto in altre parole, chi non ha il plotter, ma solo disco e stampante, non potrà non battere anche le linee data del mese scorso.

   La cosa è diversa per questo mese: dato che le due stampanti (la 801 e la 802) hanno pochissimo in comune, e si suppone che ben pochi utenti le posseggano entrambe, l'ADP Basic si sdoppia. Gli utenti della 802 copieranno un listato, gli utenti della 801 un altro. è comunque necessario copiarne uno, se si vuole aggiungere i comandi del prossimo mese, riguardanti la definizione dei tasti F1-F8 e ...dulcis in fundo... una gestione super semplificata dei file relativi.

L'MPS 802

Inizieremo con la stampante "intelligente-bidirezionale- veloce-gioiello" MPS 802. I fortunati possessori sanno quanto sia (ci sarebbe da usare un altro termine per una maggiore resa) stressante sfruttare tutte le possibilità offerte dalla macchina in merito al controllo del formato, alla selezione dell'interlinea, alla paginazione automatica e altro. Se a ciò aggiungiamo l'angoscia dei list su carta o, peggio, dell'HardCopy di una schermata, la soluzione è una sola: ADP Basic.

   Il primo comando di questo mese, gemello del plotteriano PL, è PR: anche questo, a seconda di cosa precede, ha 5 diversi significati.

1) PR ON: predispone la stampante come periferica di output. Dopo questo comando, ogni normale PRINT sarà dirottata su carta.

2) PR OFF: disabilita lo stato di PR ON riattivando il video quale normale periferica di output.

3) PR RESET: invia alla stampante un comando di Reset. Serve per riportare in un sol colpo ai valori default tutti parametri di stampa precedentemente variati.

4) PR SMALL: Predispone il set di stampa maiuscolo/minuscolo.

5) PR CAP: Predispone il set di stampa maiuscolo/grafico.

Valgono le stesse considerazioni fatte per il comando PL del Plotter: PR SMALL o PR CAP deve essere selezionato prima del PR ON e mai dopo (un PR OFF è automaticamente forzato).

Sempre fratello del comando WRITE del Plotter, il comando LPRINT permette un output diretto su stamante senza cambiare normale periferica di output. La sua sintassi è identica a quella del comando PRINT del basic standard: dopo LPRINT può esserci una qualsiasi combinazione di stringhe e/o numeri separati da virgola o punto e virgola. Ad esempio scriveremo:

LPRINT "Età=";X

Per gli output formattati si usano i comandi USING e OUT: il primo per specificare il formato di stampa, il secondo per inviare i dati da stampare. Ad esempio potremmo scrivere:

   10 USING "AAA       AAA AAA"

   20 OUT"CBM"CHR$(29)"CBM"CHR$(29)"CBM"

La sintassi è la stessa adoperata normalmente (senza l'ADP) ossia dialogando in termini di OPEN e PRINT#. Ricordiamo che CHR$(29) è il carattere di SKIP adoperato per effettuare il formattamento. A pagina 19 del manuale di istruzioni dell' 802 è mostrato una tabella di esempi di formattamento. Listate in queste pagine due programmi che eseguono il test del manuale, uno con il basic standard, l'altro con l'ADP Basic.

Per attivare la paginazione automatica esiste il comando PAGE, seguito da ON, OFF o SIZE rispettivamente per l'attivazione, la disattivazione o per dichiarare il numero di linee di stampa per pagina, prima di saltare la perforazione. PAGESIZE, implicitamente attiva la paginazione. Facciamo un esempio: all'accensione la stampante è tarata per stampare 66 linee per foglio. Per attivare l'autopaging su tale valore digiteremo:

   PAGE ON

   per disattivare:

   PAGE OFF

   se vogliamo variare la dimensione della pagina, ad esempio la metà, 33 linee digiteremo:

   PAGE SIZE 33

non sarà necessario un PAGE ON essendo implicitamente attiva l'autopaginazione col comando PAGE€£SIZE. Da questo momento in poi, fino a un prossimo PAGE€£SIZE o a un PAGE€£OFF o a PR RESET, la nostra MPS 802 ogni 33 linee di stampa lascierà 6 linee vuote per separare le pagine.

   Se vogliamo cambiare l'interlinea (lo spazio tra le righe di stampa) è disponibile il comando FEED seguito da un numero minore di 127. Ad esempio:

   FEED 18

   produrrà 8 linee per pollice.

   FEED 36

   è il passo standard (6 linee per pollice)

   FEED 21

   farà combaciare le matrici dei caratteri, come avviene sul video del 64

Per quanto riguarda i messaggi di errore della stampante esiste un apposito comando per attivarli o disattivarli:

   MESSAGE ON

   e

   MESSAGE OFF

   non crediamo nell'opportunità di ulteriori commenti.

Ultime due istruzioni LLIST e HCOPY permettono rispettivamente un list diretto su carta del programma basic contenuto in memoria e la copia su carta del contenuto dello schermo. La sintassi del primo è identica a quella del LIST. Potremo ad esempio scrivere:

   LLIST -50

   per avere il listing delle linee minori di 50 o

   LLIST 100-200

   per quella comprese tra 100 e 200. Inutile sottolineare che LLIST e basta esegue il list su carta di tutto il programma.

   HCOPY non necessita di alcun parametro ed esegue l'HardCopy perfetto di tutto il contenuto del video, facendo combaciare le linee di stampa. Se non si desidera ciò è sufficiente digitare prima di HCOPY:

   POKE 52779,36

   per ritornare alla normalità:

   POKE 52779,21

per interrompere la stampa prima del termine, è sufficiente tenere premuta la barra spaziatrice. In tutti i casi, alla fine un comando di RESET sarà forzato alla stampante per ripristinare i valori standard di stampa.

Ah! un'ultima precisazione: il PR RESET non ha effetto sul set di caratteri prescelto: se abbiamo selezionato le minuscole, continueremo ad avere queste (solo PR CAP fa tornare al modo maiuscolo/grafico).

L'MPS 801

I comandi descritti, disponibili anche per la 801 sono:

   PR ON

   PR OFF

   PR SMALL

   PR CAP

   LPRINT

   LLIST

   HCOPY

e hanno esattamente la stessa sintassi, svolgendo le medesime funzioni. Un'unica precisazione da fare riguarda HCOPY ed eventuali apici (") presenti sullo schermo: al momento della stampa vengono automaticamente trasformati in apostrofo (') dato che, come noto, gli apici rendono visibili i caratteri di controllo (cuoricini, Q o altro) e ciò non sempre è desiderabile. Per evitare che le linee di stampa siano attaccate è sufficiente digitare prima di HCOPY:

   POKE 52267,15

   se si ridesidera un HCOPY tutto di fila:

   POKE 52267,8

   come sempre, per arrestare la stampa prima del termine, si tiene premuta qualche attimo la barra spaziatrice.

   Specifici per l'801 abbiamo due nuovi comandi: DOUBLE e GRAPHIC, ambedue seguiti da ON o OFF. Si usano per abilitare o disabilitare il modo caratteri espansi o il modo grafico. Riassumendo:

   DOUBLE  ON  == caratteri doppi

   DOUBLE  OFF == caratteri standard

   GRAPHIC ON  == modo Hi-Res

   GRAPHIC OFF == caratteri standard

 

General Remarks

Lo spazio è tiranno e (nessuna allusione) Marco Marinacci urla sempre che un articolo fitto-fitto di 5 pagine allargandosi al massimo entra in 4, senza alcuno sforzo in 3. Chiaramente senza togliere una sola riga e, tanto meno, una figura o una foto.

Bando alle chiacchiere (e agli sprechi di spazio) il succo del discorso è che non commenteremo tutti listati LM, ma solo i più interessanti. Chi ci ha seguito nei numeri scorsi, non troverà difficoltà a ben capire anche questo mese.

Subroutine 1,2 e 3 servono per stabilire comunicazioni con le stampanti. Più precisamente, la prima (usata sia dalla 802 che dalla 801) serve per aprire un file di stampa. La seconda e la terza (usate solo dalla 802) si utilizzano per comunicazioni con indirizzo secondario (specificato nell'accumulatore prima della chiamata) diversi da 0. La prima apre la comunicazione, la seconda la chiude.

Il listato 8 implementa l'istruzione HCOPY. Le prime 9 linee, aprendo un file di indirizzo secondario 6, cambiano l'interlinea di stampa per ottenere un HCOPY con le righe tra loro adiacenti. Il valore inviato è $15, 21 in decimale. Segue l'apertura del file di stampa (JSR$C023) e la specifica output di quest'ultimo. Nei byte $FB e $FC si pone il puntatore al corrente carattere di stampa. Come noto, i codici di schermo sono diversi dai rispettivi codici di stampa: le linee comprese tra $CC7B e $ CC8A eseguono la dovuta trasformazione, sfruttando anche una piccola tabella (4 byte) locata a $CCFC.

Un carattere $12 (RVS ON) o $92 (RVS OFF) è inviato prima del carattere vero e proprio a seconda che questo sia o no reverse.

Se il carattere da stampare è apici ($22) per non visualizzare i successivi caratteri di controllo RVS ON e OFF, si ricorre a un piccolo trucco: si invia uno SHIFT RETURN (che manda la testina a capo ma non fa avanzare il foglio) e si riporta la testina di scrittura alla giusta posizione "stampando" il necessario numero di blank.

Il JSR$FFE4 di $CC5A serve per controllare la pressione di qualsiasi tasto per interrompere anzitempo l'HardCopy.

La versione per l'MPS 801, non listata per motivi di spazio, realizza il combaciamento delle linee inviando un CHR$(8) prima di passare a nuova linea, e un CHR$(15) prima di iniziare la stampa di questa. Il trucchetto è ben spiegato nel manuale di istruzioni della 801.

Il listato 9, valido sia per l'801 che la 802, implementa l'istruzione LLIST. Le operazioni compiute sono molto semplici dato che, tanto per cambiare, sfrutta l'esistenza dell'istruzione LIST del Basic standard. Per prima cosa apre un file di stampa. Prima di cedere il controllo al normale LIST, riempe il buffer di tastiera con la stringa PROFF+[RETURN] per disabilitare la stampante al termine del LIST. La cosa è direttamente visibile sul video, dato che appare subito sotto il nostro LLIST non appena terminata l'operazione. Il salto all'implementazione del LIST e il JMP visibile all'ultima linea.

Il listato 11 (...e poi basta) implementa l'istruzione DOUBLE propria della stampante MPS 801. Il JSR$0079 di $CB74 preleva, depositandolo in A, il codice token che segue DOUBLE. Tre i casi: o c'è ON ($91) o c'è OFF ($E0) o stampa SYNTAX ERROR (JMP$C62B). Nel primo caso invia alla stampante il codice $0E (14) abilitando la scrittura espansa; nel secondo caso invia $0F (15) che seleziona il modo caratteri standard. Tutto qui.


Vedi anche:


Impaginato originale...


Clicca per ingrandire... Clicca per ingrandire...
Clicca per ingrandire... Clicca per ingrandire...

Articolo pubblicato su www.digiTANTO.it - per ulteriori informazioni clicca qui