Articolo pubblicato sul n. 62 di MCmicrocomputer (Edizioni Technimedia Srl - Roma) nell'aprile 1987
Commodore 128: L'articolo di questo mese di 128 da zero si divide in tre parti. Nella prima parte concluderemo il nostro discorso sull'integrato video 8563 mostrandovi come tale processore video manipola i byte della sua video ram. La seconda parte ospitera' un tool grafico inviatoci da un lettore che, a dispetto delle routine presentate nei due numeri scorsi, permettere di compiere molte operazioni prima non disponibili, infine con altri contributi pervenutici proprio grazie al nostro annuncio di collaborazione, inizieremo un discorso nuovo sul sistema operativo del 128.
24,30,32 e 33
L'ultima scoperta circa l'8563 riguarda la possibilita' che ha questo di spostare blocchi di byte all'interno della sua memoria privata. Ed era proprio auspicabile che cio' fosse stato possibile, non per altro, per permettere una qualsiasi applicazione a 80 colonne (specie word processing) senza far innervosire troppo l'utente davanti a lentissimi scroll a causa dell'indirizzamento bi-indiretto di questi benedetti 16 K. Ovvero noi diciamo all'integrato cosa spostare e "lui" tra le righe ci accontenta velocissimamente. Specialmente considerato il tempo che impiegheremmo noi a farlo dall'esterno. Per definire quale blocco di byte della video ram desideriamo trasferire in un'altra qualsiasi posizione sempre nella video ram, utilizzaremo i registri indicati a capo di questo paragrafo. Per comunicare al processore video la destinazione di questo blocco, sara' sufficiente usare i registri 18 e 19, gia' utilizzati nelle puntate precedenti essendo questi il puntatore ufficiale al byte interessato. Indicheremo nei registri 32 e 33 rispettivamente la parte alta e la parte bassa dell'indirizzo del byte iniziale del nostro blocco, nel registro 30 il numero di byte da trasferire, dopo aver opportunamente settato il bit 7 del registro 24 detto appunto bit copy. Si noti che la massima quantita' di byte che riusciremo a far trasferire in un colpo solo e' limitata a 256. Cio' si ottiene indicando nel registro 30 il valore 0, successore di 255 nell'aritmetica a 8 bit. Ovviamente per tutte la altre quantita' comprese tra 1 e 255 bastera' inserire tale valore per essere accontentati. Facciamo un esempio: immaginiamo di dover trasferire 200 (decimale) byte a partire dall'indirizzo $100 all'indirizzo $400. Abbiamo scelto questi valori in modo da osservare sul video cio' che accade. Scriveremo un piccolo programmino basic per settare i vari registri. Per prima cosa definiamo la destinazione, mettendo $400, suddiviso in parte alta e parte bassa nei registri 18 e 19:
10 POKE DEC("D600"),18:POKE DEC("D601"),4 20 POKE DEC("D600"),19:POKE DEC("D601"),0
Attenzione, ogni coppia di poke su un'unica linea. Successivamente definiamo il primo byte del blocco da trasferire indicando $100 nei registri 32 e 33:
30 POKE DEC("D600"),32:POKE DEC("D601"),1 40 POKE DEC("D600"),33:POKE DEC("D601"),0
Segue il settaggio del bit copy:
50 POKE DEC("D600"),24: A = PEEK(DEC("D601")) 60 POKE DEC("D600"),24:POKE DEC("D601"),A OR 128
Infine indichiamo nel registro 30 il numero di byte da copiare:
70 POKE DEC("D600"),30:POKE DEC("D601"),200
Detto fatto: basta solo dare RUN. Ovviamente riempite prima il video di caratteri (non tutti uguali) in modo da notarne lo spostamento.
Ultime curiosita'
Oltre alla possibilita' di spostare blocchi di video ram, il chip 8563 permette di gestire la penna ottica, di visualizzare piu' di 25 righe di testo, caratteri piu' larghi o piu' stretti di 8 pixel ed altre feature simili. Ad esempio pare che il bit 5 di $D600 indichi se il pennello elettronico del video sta componendo la schermata o sia in fase di ritorno per un nuovo quadro. In questo modo si potrebbero realizzare routine sincronizzate col quadro, a mo' di come si faceva per il 64, per costruire utility interessanti. Ancora aperto resta, per citarne uno, il problema dello scrolling fine sulle 80 colonne. Dal momento che e' mia profonda convinzione che l'utente medio del Commodore 128, e la qualita' del software dei lettori che arriva in redazione lo testimonia abbondantemente, e' smanettomane con tanto di pedigree, se qualcuno fosse interessato ad approfondire questi studi e perviene a risultati interessanti, non manchi di comunicarceli. Non tanto per noi, inutile dirlo, ma per tutti gli altri 128-isti sicuramente assetati di notizie di questo genere.
Master Graphic 128 di Luigi Magni - Perugia
Il tool grafico inviatoci dal lettore di Perugia, come detto nell'apertura, oltre a implementare la grafica 640x200 con la possibilita' di disegnare punti e linee, permette alcune operazioni in piu' come l'HardCopy su stampante 803 (il tool del sottoscritto, molto vigliaccamente, stampava solo su STAR NL-10), la possibilita' di salvare e caricare immagini da disco, nonche' permette di passare indistintamente da pagina grafica a testo e viceversa, salvando momentaneamente la pagina grafica nel banco 1 della normale ram del 128. Esso e' listato in esadecimale a pagina ___ e puo' essere facilmente ricopiato in memoria utilizzando il monitor di linguaggio macchina resindente nel 128. Anche questa volta i vari comandi sono impartiti tramite normali SYS e se bisogna passare dei parametri si utilizza il formato:
SYS indirizzo, A, X, Y
dove A, X, Y sono i valori da introdurre negli anonimi registri. Il tool grafico Master Graphic 128 mette a disposizione in tutto 9 comandi suddivisi, per comodita' in 4 gruppi. Cominciamo: Utility: Il primo gruppo di comandi si compone di tre routine atte ad attivare la grafica ad alta risoluzione. Abbiamo la possibilita' di passare al modo grafico mostrando una pagina ripulita, passare dalla grafica al modo testo e, molto interessante, passare dal testo ad un grafico precedentemente tracciato. Come gia' spiegato nei numeri scorsi, per fare questo e' necessario trasferire la pagina grafica in una zona di memoria ram estranea ai 16 k dell'8563 dato che in questi si dovra' ricopiare il set di caratteri e saranno utilizzati 4 k per il video e la ram attributi. Per la precisione non vengono trasferiti tutti i 16 k ma solo 12, i primi 4 e gli ultimi 8, dato che i 4 k lasciati non vengono toccati quando si e' in modo testo. Il rovescio della medaglia e' che rubiamo 12 k al basic, nella fattispecie allo spazio per le variabili. Restano comunque disponibili circa 40 k che, come e' facile riconoscere, sono piu' che sufficienti nella maggioranza dei casi. Le SYS da chiamare sono: per passare in pagina grafica cancellando: SYS 5218
Per tornare al modo testo:
SYS 5282
per tornare in HI-RES visualizzando la pagina grafica precedente:
SYS 5330 plot & draw:
Come lo stesso lettore dichiara, riguardo al plot c'e' poco da dire essendo praticamente la stessa routine pubblicata nel numero di aprile 86 di MC microcomputer. L'uniche modifiche riguardano la possibilita' di cancellare un punto precedentemente tracciato. Per quanto riguarda il draw pare che il lettore abbia fatto i salti mortali per implementarlo non disponendo degli indirizzi delle routine per le divisioni presenti nel basic del 128. Salti cosi' mortati che, parole sempre dell'autore, il disassemblato risulta poco comprensibile per il fatto che il programma (orrore!) si automodifica nel corso dell'elaborazione a seconda di determinate condizioni. Leggi: un programma siffatto non potra' mai essere messo su rom, scusate se e' molto.Passando agli indirizzi, per plottare un punto di coordinate (X1,Y1) scriveremo: SYS 5855, X1/256, X1 AND 255, Y1 dove, come noto, X1/256 e' la parte alta (gli 8 bit piu' significativi) di X1 e X1 AND 255 e' la parte bassa. Per tracciare una linea dal punto (X1,Y1) al punto (X2,Y2) sciveremo la sequenza POKE 255, X1/256 POKE 254, X1 AND 255 POKE 250, Y1 SYS 5484, X2/256, X2 AND 255, Y2
Infine per cancellare punti invece che disegnarli basta introdurre il valore 255 nella cella di memoria 12 (POKE12,255) mentre qualsiasi altro valore introdotto nella stessa locazione ripristinera' il modo scrittura.
Stampa: Per le due routine di stampa diremo solo che questa avviene in senso verticale ed e' disponibile la stampa signola o doppia, nel primo caso stamperemo un punto per ogni pixel ma avremo un'immagine compressa, nel secondo caso le proporzioni saranno ristabilite ma per ogni pixel acceso stamperemo due punti affiancati sulla carta. Considerato inoltre che i pixel del 128 sono manifestamente oblunghi (640x200 parla da solo) la seconda soluzione appare la migliore. Le SYS:
per la stampa singola (immagine compressa):
SYS 4864
per la stampa doppia (immagine proporzionata):
SYS 5194
Hi-Res Compander:
Il tool di routine grafiche Master Graphic 128 si chiude con due utility per salvare e caricare schermate in alta risoluzione. Esse utilizzano una non meglio specificata tecnica a nibble (semi-byte) con la quale se salviamo immagini con grosse aree vuote o piene risparmiamo spazio su disco oltre che guadagnare in velocita' di tasferimento. Per salvare o caricare una pagina grafica e' necessario inserire (a colpi di POKE) nelle locazioni a partire dalla numero 6318 i codici ascii dei caratteri che compongono il nome del file suffissati dalla stringa ",P,W" se si tratta di un salvataggio. Fatto cio' si esegue per il save:
SYS 6033,L,P,C
per il load:
SYS 6096,L,P,C
dove, in tutt'e due i casi, L e' la lunghezza del nome (comprese l'eventuale suffisso) P e' la periferica (8 per il disco 1 per il nastro), C il canale di I/O utilizzato (per il disco qualsiasi numero compreso tra 2 e 14).
Le routine del Kernal di Adriano Asnaghi - Mestre (VE)
Il primo "vero" contributo a 128 da zero arrivato da un lettore riguarda alcune routine del Kernal del 128. Come e' noto tali routine si usano nella programmazione in linguaggio macchina per sfruttare da quel livello tutte le risorse del computer quali video, stampante, disco, tastiera, porte ecc. Suddivideremo il materiale pervenutoci in alcune sezioni che pubblicheremo una alla volta, per qualche numero, come appendice alle varie puntate. Se intanto arriva in redazione dell'altro sempre in merito al Kernal, prolungheremo ad oltranza tali appuntamenti. Prima di passare la parola, e' necessaria una leggera tiratina d'orecchie all'autore che in alcuni punti e' stato impreciso (mi sono permesso di aggiungere alcune cose) e proprio nella prima routine ha preso un piccolo abbaglio (dovevo intervenire). Questo agli altri lettori non interessa, l'Asnaghi potra' controllare col suo testo alla mano dove sono state effettuate le modifiche. In bocca al lupo !
Impaginato originale... Articolo pubblicato su www.digiTANTO.it - per ulteriori informazioni clicca qui |