L'ADP Basic (4)
P come printer
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.
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:
ADPbasic parte 1
ADPbasic parte 2
ADPbasic parte 3
ADPbasic parte 5