MATRIXPET - hsh.info · microprocessore (AIM 65). Pur non possedendo un vasto set di...

4
Non si può certo negare che per molte appli- cazioni specialistiche, dall'ingegneria civile all'elettronica, dalla matematica teorica al- la statistica, un personal computer sia vera- mente un ottimo aiuto. Praticamente tutte le macchine sono ormai dotate di interpreti Basic sufficientemente potenti per svolgere tutte le operazioni necessarie. La gestione e il trattamento di matrici non rientra, però, nelle prestazioni "standard" neppure degli interpreti più evoluti: quando si deve inverti- re una matrice o calcolame il determinante (p.es. risoluzione di sistemi di equazioni) è perciò necessario realizzare routine in Basic di complessità spesso notevole, che impe- gnano non poco sia il programmatore, sia successivamente la macchina che deve ese- guire le numerose operazioni che i calcoli matriciali richiedono. Per alcune macchine, molto poche per la verità, sono disponibili ROM opzionali che, una volta installate, aggiungono la possibilità di trattare le ma- trici. Una di queste macchine è il Commodo- re 8032, per il quale la HSH di Padova ha realizzato una ROM matrici. La HSH è uno dei più qualificati produttori di software per Commodore, in tutti i campi e in particolare 36 HSH MATRIXPET ROM MATRICI PER COMMODORE 8032 di Pierluigi Panunzi MCmicrocomputer 7

Transcript of MATRIXPET - hsh.info · microprocessore (AIM 65). Pur non possedendo un vasto set di...

Non si può certo negare che per molte appli-cazioni specialistiche, dall'ingegneria civileall'elettronica, dalla matematica teorica al-la statistica, un personal computer sia vera-mente un ottimo aiuto. Praticamente tutte lemacchine sono ormai dotate di interpretiBasic sufficientemente potenti per svolgeretutte le operazioni necessarie. La gestione eil trattamento di matrici non rientra, però,nelle prestazioni "standard" neppure degliinterpreti più evoluti: quando si deve inverti-re una matrice o calcolame il determinante(p.es. risoluzione di sistemi di equazioni) èperciò necessario realizzare routine in Basicdi complessità spesso notevole, che impe-gnano non poco sia il programmatore, siasuccessivamente la macchina che deve ese-guire le numerose operazioni che i calcolimatriciali richiedono. Per alcune macchine,molto poche per la verità, sono disponibiliROM opzionali che, una volta installate,aggiungono la possibilità di trattare le ma-trici. Una di queste macchine è il Commodo-re 8032, per il quale la HSH di Padova harealizzato una ROM matrici. La HSH è unodei più qualificati produttori di software perCommodore, in tutti i campi e in particolare

36

HSHMATRIXPET

ROM MATRICI PER COMMODORE 8032

di Pierluigi Panunzi

MCmicrocomputer 7

in quello dell'ingegneria edile, in cui ha svi-luppato numerosi package anche con l'usodel ploller Digiplot della Watanabe.1 calco-li matriciali sono molto frequenti nell'inge-gneria civile eforse questo ha spinto la HSHalla realizzazione della RO M. Non è questo,tra l'altro, tullo l'hardware di produzioneHSH: c'è una ROM con il Basic Plus, unaper la gestione dell'espansione a 96K (vediriquadro nel testo), oltre ad alcune interfac-ce per collegamenti vari.In queste pagine presentiamo il "Matrix-pet", ossia la ROM che contiene un insiemedi routine che permellono di effelluare unconsiderevole numero di operazioni matri-ciali, dalla semplice inizializzazione al "nonplus ultra", l'inversione.Prima però di parlare della ROM, diamouno sguardo al computer che può ospitarlacon particolare riguardo per le sue caralleri-stiche hardware.

Il PET Commodore CBM 8032

Ormai da parecchio tempo sul mercato,il CBM 8032 è il risultato dell'affermatatendenza dei costruttori a migliorare i pro-pri modelli nel corso degli anni. All'inizioapparve sul mercato il PET (appellativoinglese per un animaletto domestico) 200 l,con la sua strana tastiera rettangolare sulladestra ed il registratore a cassette incorpo-rato sulla sinistra, con lo schermo video da1000 caratteri. Era per l'appunto un "cuc-ciolo" di una famiglia in crescita.

Poi venne il PET 3032 con una tastiera didimensioni "regolamentari", ma ancoracon i simboli grafici sui tasti, senza il regi-stratore a cassette, ma con possibilità dicollegamento ad un floppy disk driver e aduna stampante.

Infine è arrivato il PET 8032 (sopranno-minato "il PET grande"), con il suo scher-mo da 2000 caratteri (25 linee da 80 carat-teri), con un esteso set comprendente sia leminuscole (all'accensione) che le maiusco-le, con una tastiera ASCII di caratteristi-che standard e con una memoria da 32Kespandibili. È inoltre dotato di una serie diconnettori per il collegamento con altreapparecchiature: uno slot (non standard)per la connessione secondo il protocolloIEEE-488 (HPIB), una porta di ingresso -uscita e due porte di collegamento con al-trettan ti registra-tori a cassette.

L'hardware

Il "cuore" dell'8032, come pure dei pre-decessori, è il microprocessore 6502, cherisulterà ben noto ai lettori in quanto pre-sente in altri personal computer (Apple,Atari per citarne un paio) e in piastre amicroprocessore (AIM 65).

Pur non possedendo un vasto set di

MCmlcrocomputer 7

Realizzazione e distribuzione:HSH Hardware Software HouseVia FaI/oppio 39, 35100 Padova

Prezzi:ROM Matrixpet: L. 400.0oo+/VAROM Motrixpet+softlVare di base per lagestione del/'espa1lSione a 96K: L.600.()()()+IVA

istruzioni (a paragone, ad esempio, con loZ80), il 6502 presenta notevoli caratteristi-che di praticità d'uso dovuta alla semplicearchitettura del microprocessore e dei cir-cuiti ad esso collegati: per quanto riguardala programmazione in linguaggio assem-blativo si hanno svariate possibilità di indi-rizzamento, tra le quali ad esempio quella"in Pagina Zero", che si riferisce a locazio-ni di memoria aventi indirizzo compresotra $0000 e $OOFF.

Passando alla gestione della memorianel "grande PET", si hanno a disposizione32K di memoria RAM (Random AccessMemory), compresi tra gli indirizzi $0000 e$7FFF, così suddivisi:- da $0000 a $OOFF, come visto, la "Pagi-na Zero" (Zero Page)- da $0100 a $0278 la zona comprendentelo stack, il buffer per il BASIC e per latastiera- da $027 A a $0339 il buffer per il primoregistra tore a cassette- da $033A a $03F9 il buffer per il secondoregistra tore.

Con la ROM. la HSH fornisce una piastrina adesiva daapplicare sul (rontale del Peto

Invece da $0400 a $7FFF è presente laRAM riservata ai programmi redatti inBASIC dall'utente e comprende vari setto-ri contigui di ampiezza variabile dinamica-mente, rispettivamente per le istruzioni co-stituenti il programma, le variabili, le ma-trici ed i vettori, e le stringhe.

Normalmente questa parte di memoriaviene gestita automaticamente dal SistemaOperativo, soprattutto per quanto riguar-da gli indirizzi "di frontiera" tra le varie

zone: istruzioni - variabili - matrici - strin-ghe.

Variando però opportunamente i conte-nuti di alcune locazioni di memoria in pa-gina zero (riempite dal Sistema Operativoall'accensione della macchina), si può adesempio fissare un limite per la memoriadedicata al programma lasciando tutta larimanente per altri scopi.

Proseguendo verso indirizzi più alti, tro-viamo, a partire da $8000, 4K di RAM perla gestione del video, delle quali le prime2000 locazioni contengono istante peristante i codici dei caratteri visualizzati sul-lo schermo.

Quindi dall'indirizzo $9000 a $BFFF viè un "buco" di l2K, previsto come area perle ROM con cui si espandono le caratteri-stiche del sistema (è appunto il caso dellaEPROM che stiamo presentando).

Infine lo spazio di 16K compreso tra gliindirizzi $COOOe $FFFF contiene l'inter-prete BASIC, il Sistema Operativo, la ge-stione della tastiera e del video, il controllodegli interrupt e dell'I/O.

La EPROM "Matrixpet"

Eccoci dunque alla EPROM, realizzatadalla HSH di Padova, che, come vedremo,presenta delle caratteristiche decisamenteinteressanti.

Si tratta di una EPROM da 4K da inseri-re nello zoccolo UD Il del circuito delPET, cioè nel primo dei due zoccoli liberipresenti nella piastra del computer; in al-ternativa si può inserire la EPROM in unabasetta che va collegata allo zoccolo di cuisopra tramite un cavetto piatto: questo dàla possibilità a chi possiede più di unaROM (Basic Plus, ad esempio) di eseguirnela sostituzione senza aprire ogni volta lamacchina.

Perché la ROM possa funzionare, è ne-cessario connettere un piccolo "scatolino"allo slot posto sul lato destro del PET,riservato al secondo registratore. Questo"scatolino", serve per evitare copiaturedella ROM ed è, in pratica, una "chiave diaccesso", senza la quale ad ogni imposta-zione di "nuove" funzioni la macchina ri-sponde con "?syntax error". Per inciso, an-che se di dimensioni ridotte, la chiave spor-ge di qualche centimetro dal "profilo" delcomputer e perciò è richiesta una certaattenzione per non urtarla inavvertitamen-te specie quando il computer è acceso.

Insieme a questi due componenti vienefornito un esauriente manuale d'uso (initaliano, il che di certo non guasta!) che cirende prontamente edotti sulle caratteristi-che dell'estensione BASIC, fornendo perogni nuovo operatore informazioni detta-gliate sulla sintassi (corretta impostazionedella funzione e degli operandi) e sulla se-mantica (la spiegazione di ciò che viene

37

La funzione "do < stringa> "

Questa funzione consente, da BASIC, dieffettuare una qualsiasi istruzione o serie diistruzioni contenute in "stringa": cioè.supponendo di aver eseguito l'istruzionea$ = "goto 500"con "do a$" viene appunto eseguita l'istru-zione "goto 500".

È notevole il fatto che a$ può esseremanipolata come si vuole da programma

HSH Malrixpel

< espr. > tutti gli elementi di A- ini A: azzera la matrice A- e = max A: la variabile e assume il valoremassimo degli elementi di A- e .= min A: come sopra, per il valoreminimo- mrea A: lettura di A per colonne da istru-zioni "data"- mrea~n,A: lettura di A per colonne daldisco (canalelin)- msalin,A: memorizzazione di A per co-lonne su disco (canale~n)- mstd A = B: gli elementi del vettore B(n)vengono posti sulla diagonale principale diA(n,n)- rmvd B =A: gli elementi della diagonaleprincipale di A(n,n) vengono posti nel vet-tore B(n)- rdm A: ridimensiona A, però nello stessospazio di memoria precedentemente occu-pato da A- msca A * < espr. >: moltiplica ogni ele-mento di A per il risultato di <espr. >- msum A * < espr. >: somma ad ogni ele-mento di A il valore di < espr. >

Inoltre vi è una serie di istruzioni cheopera nel seguente modo: ogni elementoai j della matrice A viene sostituito da f(a; .)dòve le possibili funzioni f(x) sono: .Jistruzione f(x)

invl A l/xmab A Ixlmco A cos(x)mcs A - xmex A eXmIo A ln(x)mnt A Int(x)msg A sign(x)mSI A sin(x)msq A xmta A tg(x)mtn A arctg(x)

Il secondo set di operatori invece si rife-risce a matrici a due dimensioni e compren-de le istruzioni:- idn A: pone la matrice quadrata A c,omematrice unità (cioè pone la diagonale prin-cipale ad l)- d = inv A: calcola l'inversa della matricequadrata A ed il suo determinante; su que-sta istruzione ritorneremo più oltre.- mat A =B*C: effettua il ben noto pro-dotto "righe per colonne" tra le due matri-ci B e C, ponendo il risultato in A, previaverifica di correttezza delle dimensioni del-le tre matrici- trn A =B: calcola la matrice A come tra-sposta della matrice B.

m 631 593 5l! 31 613 m 887

Il! 668 68 852 l" 166 813 '"7<2 'H 93< lrt 122 m 'l66 88'569 m 515 558 6t6 5<2 <85 181

81& 881 15< 885 181 '" •• "l161 83 558 28 112 358 681 828

m 581 .88 252 91 3<2 ••• 183

aH 68' 683 'l'l 28' 981 19 591

r.idy.I

Un esempio del calcolo del determinante di UIlO matrice8x8.

matrice A per colonne- ara A = B*C: calcolo degli elementi di Acome prodotto degli elementi corrispon-denti di B e di C- ara A = B+C: calcolo degli elementi diA come somma degli elementi corrispon-denti di B e di C- erase A: cancella la matrice A- do < stringa>: per questa istruzione ve-dere il paragrafo seguente- dup A =B: pone la matrice A uguale allamatrice B- ina A = < espr. >: inizializza al valore di- aprt A: stampa o visualizzazione della

Gli operatori

Sono in tutto 33 e si possono utilizzarecome normali istruzioni BASIC espanden-done così il set originario. Data la relativanovità e la ricchezza di possibilità, andia-mo ad analizzarli singolarmente.

In pratica queste nuove istruzioni sonosuddivise in due blocchi logici: istruzioniper matrici multidimensionali e per matricibidimensionali.

Occupiamoci d unq ue degli operatori delprimo tipo ed indichiamo con lettere maiu-scole le matrici, le cui dimensioni dovran-no essere impostate con un'istruzioneHdim".

eseguito), il tutto completato da alcune no-te ed esempi d'uso.

Prima di passare alla descrizione dei varioperatori disponibili, segnaliamo che perinizializzare i calcoli matriciali (cioè perselezionare la EPROM) si deve impostareil comando BASIC "sys (40960)", da pro-gramma oppure direttamente: infattisys(n) è un comando che permette di ese-guire, dal BASI C, una routine in linguag-gio macchina posta in memoria a partiredall'indirizzo decimale "n".

La E'PRO)\If può essere inserita direl/(lmellle nd/o :OCl'O/O U D J I: per chi possiede pili di UlIlI RO M (p.('.\. Basic P/usIlo HSH fornisce lilla baseuo con Wl ('{n'O piallO, in modo clw si possa sostituire lo ROM sell::a aprire la macchina.No/are. ne/lafolo. lo "chiare di accesso" inserita l1ello slol del secondo ref!iSlralore ti casselle, sul/mn destro delcomputC'r,

38 MCmlcrocomputer 7

Espansione a 96K per il PET Commodore CBM 8032

HSH Malri""",

(con funzioni del tipo "Ieft$", "right$",ecc.) ed è proprio il suo "contenuto" cheviene eseguito dalla "do".

Altra possibilità è di crearsi una matricedi stringhe, ad esempio a$(9,9), contenentein ogni elemento una o più istruzioni BA-SIC, eseguibili poi in seguito da program-ma, con "do a$(i,j).

Inutile dire che in questo modo si posso-no realizzare programmi autogenerantisi.fatto che, normalmente, richiede la cono-scenza di come il sistema operativo delPET gestisca le istruzioni BASIC.

L'istruzione d = inv A

Abbiamo lasciato per ultimo, ma noncerto per importanza, il "fiore all'occhiel-lo" della EPROM: la possibilità di calcola-re la matrice inversa di A(n,n).

È ben noto che la determinazione del-l'inversa di una matrice è il problema digran lunga più complicato tra quelli ri-scontrabili in matematica e soprattuttonelle sue applicazioni in campo scientifico.

È anche ben noto che su questo proble-ma sono stati scritti fiumi di trattati, inven-tati metodi più o meno disparati, che co-stringono il povero programmatore a di-stricarsi tra indici, pivot, scambi di righe odi colonne ecc.

Come riporta il manuale d'uso, una vol-ta calcolati o impostati gli elementi dellamatrice A, la routine chiamata dall'istru-zione "inv" effettua l'inversione impiegan-do il "metodo di Gauss-Jordan con pivo-

Oltre alla EPROM per calcoli matriciali.la HSH ne fornisce un'altra dedicata allagestione della scheda di espansione, a96K di RAM del CBM 8032, distribuitadalla Harden. Tale gestione avviene con-siderando l'espansione di memoria comeun vettore, chiamato "vrc", avente unnumero di componenti variabile a secon-da del "tipo" di dati introdotti: caratteri.numeri interi o numeri reali.

L'elcmcnto n-esimo di tale vettore po-tI"Ùessere identificato semplicemente convre(n), con n variabile tra O ed un valoremassimo secondo il seguente criterio:sc il tipo è "carattere" ogni elemento oc-cuperà un solo byte del vettore e si avrànm"x = 65532: se il tipo è "intero" ogninumero impostato occuperà due byte(valore compreso tra -32768 e 32767) ednm", = 32705: se il tipo è invece "reale"ogni numero occupa 5 byte e si avI"Ùnm",= 13105. In tutti c trc i casi la codificaavviene secondo le regole del CBM 8032c quindi non si hanno problemi eli com-patibilitù.

Per selezionare la EPROM si deve in-trodurre all'inizio del programma BA-SIC l'istruzione sys (40960): successiva-

MCmlcrocompuler 7

Lo NO,W è correda/a da 1m l'olumùwsu ed l'.\tIur;l'I1Il'

manuale, COSlilllito da Wl raccogli/ore ad anelli COli co-perlina di plastica rossa.

ting totale modificato, con algoritmo sta-bile in senso forte".

Una volta eseguita 1'0)Jerazione (in tem-pi di cui parleremo più avanti), la matriceinversa occuperà la zona di memoria occu-pata originariamente dalla matrice A.Inoltre viene effettuato il calcolo del deter-minante di A, valore che viene posto, se sidesidera, nella variabile d.

Ora se la matrice A è singolare oppure sedurante i calcoli con l'operazione di pivo-ting si arriva (per la propagazione deglierrori a causa di successive approssimazio-ni) ad un valore nullo del determinante,fatto che può capitare se A è di tipo parti-colare e che senza dubbio è uno "spaurac-chio" per i matematici, allora il calcoloviene interrotto e la matrice A viene di-strutta: infatti in parte conterrà elementi"vecchi" ed in parte elementi "nuovi".Buona strategia è di duplicare la matrice Ain un'altra matrice prima di effettuarnel'inversione.

mente con l'istruLione "eleclare n" si sta-bilisce il conte,iuto del vettore vrc, a se-conda del valore di n: n = I per il tipo"carattere", n = 2 per i numeri interi, edn = 5 per i reali. Altri valori di n compor-teranno la segnalazione di un errore.

Per q uanto riguarda infine le compo-nenti del vettore, queste possono essereindirizza te, come detto, con "vrc«expr.»", dove <espr.> può essereun'espressione qualsiasi, ma il cui valorenumerico deve cadere nei campi permes-si, altrimenti si avrà segnalazione di erro-re (Insuffìcient Memory").

Infine, per disabilitare la EPROM bi-sognerà impostare il comando "exit".

Inoltre c'è da dire che la matrice A(n,n),contenente in realtà (n + l )x(n + I) elemen-ti in quanto per il BASIC gli indici varianotra Oed n, viene considerata invece senza lariga "O" e la colonna "O", riducendola per-ciò ad una matrice nxn. Questa riga e que-sta colonna vengono utilizzate per conte-nere via via i valori successivi del determi-nante e gli indici di scambio di righe o dicolonne, propri dell'algoritmo usato.

Infine vengono usati i due buffer per iregistratori a cassette per la memorizzazio-ne dei dati intermedi.

Veniamo ora al problema dei tempi dielaborazione, fortemente dipendenti dalledimensioni della matrice A: abbiamo effet-tuato alcune prove con un piccolo pro-gramma che, dimensionata la matrice adun valore n impostato, ne generava casual-mente tutti gli elementi e poi effettuava ilcalcolo dell'inversa.

Grazie all'orologio interno, accessibilecon la variabile ti$, abbiamo misurato itempi di calcolo.

Per n fino a 6-7 la risposta è q uasi istan-tanea, mentre successivamente si ha: pern = IO, 5 secondi; per n = 20, 47 secondi;per n = 30, 3 minuti; per n =40, 8 minuti;per n = SO, 17 minuti e 24 secondi.

Abbiamo infine "girato" il programma(che non a caso era stato denominato "tor-tura"!) con il valore massimo possibile pern: 78, valore oltre il quale il computer se-gnala "Out of memory error".

Ebbene per calcolare il determinante el'inversa di una matrice 77 x 77 (e cioè for-mata da ben 5929 elementi generati casual-mente e compresi tra O ed I), il PET haimpiegati> qualcosa come I ora 24 minuti e46 secondi.

È alquanto insolito dover affrontareproblemi con matrici di tali proporzioni,ma ricordiamo che l'inversione di matricianche di dimensioni più consuete richiede,in Basic, tempi di elaborazione enorme-mente più elevati oltre naturalmente, allanecessità di realizzare il programma ade-guato.

Conclusioni

Le possibilità offerte da questa EPROMsono senza dubbio molto interessanti: unavolta inserita nello zoccolo ci si può dimen-ticare di lei, ma certo non ci dimentichere-mo che possediamo un computer con "unamarcia in più", da innestare ogni volta checi si presenteranno complicati calcoli ma-triciali, i cui risultati ci verranno forniti inbreve tempo, a partire da istruzioni parti-colarmente semplici.

Tanto, se sbagliamo qualcosa o ci di-mentichiamo il nome di una funzione, cisarà di grande aiuto il manuale "made inItaly".1\ prezzo non può essere considerato con·tenutissimo ma, obiettivamente, neppuretroppo elevato tenendo presenti le presta·zioni della ROM.

39