![]() | LEZIONE 7: | La Memoria |
Con Amos è possibile conoscere la quantità di memoria che si ha a disposizione, usando tre semplici comandi.
=Chip Free
Ritorna la memoria chip libera in bytes.
=Fast Free
Ritorna la memoria fast libera in bytes.
=Free
Ritorna la memoria libera per le variabili.
Es.:
If (Fast Free+Chip Free)<512 Then Close Editor
Se la memoria disponibile è inferiore a 512 bytes allora chiude l'editor in modo da guadagnare qualche bytes in più.
-BANCHI DI MEMORIA-
Amos mette a disposizione del programmatore delle zone di memoria
facilmente allocabili e riconoscibili chiamate Banchi di Memoria.
I banchi di memoria vengono inseriti nel programma e per vedere quelli
presenti basta andare nel modo diretto e digitare il comando
List Bank; in questo modo verranno visualizzati i banchi che sono
presenti in memoria. Possono essere addirittura salvati assieme al listato,
oppure separatamente in normali files che per convenzione usano come
estensione '.ABK'. Amos prevede 15 banchi messi a disposizione per
sprites, musica, icone, samples, schermate grafiche, assembler etc.
Vediamo insieme la gestione di questi banchi che sono indispensabili per
la buona riuscita di un programma che fa largo utilizzo di grafica e
sonoro.
Bank Swap b,b1
Scambia il contenuto del banco b con quello del banco b1.
E' utile per esempio quando si fa utilizzo di due o più musiche,
infatti i banchi musicali vengono sistemati nel banco 3, per cambiare musica
sarà quindi sufficiente scambiare il banco 3 col banco contenente
un'altro brano.
Bload file$ [n]
Carica tutti i banchi di memoria presenti nel file file$ o solo il
banco n (utile per copiare file: apro il file, ne calcolo la lunghezza,
riservo un banco di memoria adeguato, carico il file con Bload e lo
salvo).
Bsave file$ s to e
Salva nel file$ il banco di memoria che inizia all'indirizzo s e
finisce all'indirizzo e. E' utile usare per s Start(n)
e per Start(n)+ Lenght(n).
Erase n
Cancella dalla List Bank il banco di memoria n. Nella versione 2.0 di
Amos esiste anche il comando Erase All, il quale cancella
tutti i banchi presenti in memoria.
Get Sprite Palette
Preleva la palette (i colori con rispettive posizioni) degli sprite, dal
banco 1.
=Lenght(n)
Ritorna in decimale la lunghezza in bytes del banco di memoria n (o il
numero di sprite).
List Bank
Mostra i banchi di memoria presente. Si usa comunemente nel modo diretto
e la descrizione è fornita nel modo seguente:
N. - Descrizione - Start - Lunghezza - N. Sprite o Icone. |
Load file$ [n]
Carica i banchi di memoria contenuti in file$ oppure solamente il
banco da sistemare nella posizione n.
Reserve As type n,lenght
Rieserva in memoria lo spazio adatto per il banco di memoria n del tipo
type e di lunghezza lenght (il tipo può essere:
Save File$ [n]
Salva il banco di memoria n oppure, omettendo n, tutti i banchi
presenti in memoria in un file chiamato file$.
=Start(n)
Ritorna in decimale l'indirizzo iniziale del banco di memoria n.
Unpack b to s
Riservato ai banchi contenenti delle immagini, decompatta l'immagine
contenuta nel banco b, e la fa apparire nello schermo s.
LISTA DEI BANCHI DI MEMORIA
-IL TESTO IN AMOS-
Rispetto agli altri Basic, Amos offre all'utente moltissimi comandi
davvero potenti: si può variare il tipo di scrittura, posizionare il
testo ad un qualsiasi pixel sullo schermo, può cambiare il colore del
cursore, cambiare addirittura la forma del cursore, memorizzare una specifica
posizione del testo (come i più moderni Word Processors) e così
via.
Si deve notare che alcuni dei seguenti comandi presentano doppia versione,
in formato comando e in formato codice di controllo. Un'istruzione in
formato comando è una normale istruzione; un'istruzione in formato
codice di controllo è particolare perchè rappresenta una
stringa.
I vantaggi sono facilmente deducibili: se si vuole stampare una determinata
stringa in un colore diverso da quello scelto con Pen, non
bisognerà ricorrere per ogni sua visualizzazione al suddetto comando,
ma basterà inserire una sola volta all'interno della stringa il
corrispondente codice di controllo, che diventerà parte integrante
della stringa.
Per esempio se voglio stampare la stringa a$ nel colore 2, mentre il
colore di default è 5, non devo ogni volta immettere la riga:
Pen 2 : Print A$ : Pen 5
ma basterà immettere la prima volta:
A$=Pen$(2)+"TESTO"+Pen$(5)
e poi semplicemente stampare la stringa con Print A$. Il risparmio è notevole!!!
Curs On/Off
Attiva e disattiva il cursore. Da usare prima di cancellare lo schermo col
comando Cls.
Cdown$
Codice di controllo corrispondente al comando Cdown (si inserisce
in una stringa).
CDown
Sposta il cursore in basso di una riga.
Cleft$
Codice di controllo corrispondente a Cleft.
Cleft
Sposta il cursore a sinistra di una colonna.
N.B.: Puoi inserirlo nei cicli di For...Next per spostare il
cursore di molte posizioni.
Cline [n]
Cancella la linea corrispondente senza modificare la posizione del cursore;
se viene inserito il parametro n verranno cancellati n caratteri
dalla linea attuale della posizione del cursore in poi.
Cmove x,y
Muove il cursore di tanti pixel in orizzontale e in verticale come indicato
(se x e/o y sono negative i movimenti saranno rispettivamente
verso sinistra e verso l'alto).
Cright$
Codice di controllo di Cright.
Cright
Sposta il cursore a destra di una colonna.
N.B. Puoi inserirlo nei cicli di For...Next per spostare il
cursore di molte posizioni.
Cup$
Codice di controllo per il comado Cup.
Cup
Sposta il cursore in alto di una riga.
Curs Pen n
Cambia il colore del cursore con quello indicato in n.
Gr Writing n
Questo comando (da non usare con Print ne Circle, ecc., ma
con Text e con Bar, ecc.) permette di scegliere il modo di
visualizzazione della grafica e del testo; di default n=1 (modo JAM2),
cioè il testo (N.B. da stampare con Text e non con
Print) o la grafica appaiono nel colore di primo piano e sullo sfondo
del colore selezionati con INK; se n=0 (modo JAM1), il testo o
la grafica appaiono nel colore di primo piano prescelto con Ink senza
lo sfondo; se n=4 (modo INVERSEVID) lo sfondo del testo o della grafica
sarà del colore di primo piano scelto con INK e coprirà
il resto, mentre il testo o la grafica vera e propria saranno invisibili (N.B.
per creare l'ombra si può preparare uno sfondo con del testo, tracciare
un rettangolo in modo Xor e poi tracciarne un altro sfasato di poco in modo
JAM1).
Es.:
Ink2,5 : Text 140,180,"TESTO NORMALE"
Gr Writing 4+1 : Text 140,100,"Inversevid+Jam2"
Home
Posiziona il cursore alla riga 0 ed alla colonna 0. Equivale al codice di
controllo AT(0,0).
Inverse On/Off
Attiva e disattiva il modo Inversevid per il testo. Da usare con
Print e Locate.
Memorize x/y
Memorizza la coordinata x o y del cursore di testo. Utile se
devi effettuare molte operazioni e non vuoi sprecare molta memoria con
ulteriori variabili.
Paper$(n)
Codice di controllo che appartiene ad una stringa e che determina il
colore di backgound del testo.
Paper n
Rende lo sfondo del testo del colore specificato in n.
Pen$(n)
Codice di controllo di Pen
Pen n
Rende il colore primario del testo con la palette n.
Remember
Ritorna la coordinata x o y del cursore di testo mamorizzata.
Repeat$(a$,n)
Codice di controllo che ripete la stringa a$ per n volte dalla
posizione del cursore in poi.
Set Curs L1,L2,...L8
Permette di definire la forma del cursore mediante un pattern di 8 righe
(decimale,esadecimale o binario); per avere un cursore quadrato impostare
le 8 righe a %11111111 o a $FF.
Set Tab n
Imposta ad n il numero di spazi che vengono lasciati quando viene
premuto il tasto Tab o quando viene usato il codice di controllo
Tab$.
Shade On/Off
Attiva e disattiva il modo di retinato per la scrittura del testo (N.B.:
da usare con Print e Locate).
Tab$
Codice di controllo che stampa un numero di spazi pari a quelli impostati
con Set Tab; è consigliabile usarlo con il ; in unione con
stringhe.
Underline On/Off
Attiva e disattiva il modo sottolineato per il testo (N.B.: da usare con
Print e Locate).
Writing w1 [,w2]
Cambia il modo di scrittura; w1 può variare da 0 a 4, compreso,
e ritorna rispettivamente i seguenti modi: REPLACE(default), OR, XOR, AND,
IGNORE; w2 fa scegliere quale parte del testo deve essere
interessata: 0 è di default, 1 disegna sullo schermo solo il
background, 2 ignora il testo su una sfondo di colore 0.
=Xcurs
Ritorna la coordinata x del cursore di testo.
=Xgraphic(colonna)
Indica la coordinata orizzontale, in pixel, della colonna indicata.
=Xtext
Indica in quale colonna si trova il pixel indicato.
=Ycurs
Ritorna la coordinata y del cursore di testo.
=Ygraphic(pixel)
Indica la coordinata verticale, in pixel, della riga specificata.
=Ytext(pixel)
Indica su quale riga si trova il pixel indicato.
Hscroll n
Comando per lo scroll in orizzontale (si intende scroll di un carattere);
n può variare da 1 a 4 e rispettivamente comporta:
Vscroll n
Comando per lo scroll verticale (si intende scroll di un carattere); n
può variare da 1 a 4 e rispettivamente comporta:
Text x,y,tx$
Posiziona la stringa tx$ al pixel (x,y);
N.B. da usare con Gr Writing, utilizza di default il font di
sistema; per posizionare correttamente il testo, controllare la linea di
base del font.
-GESTIONE DEI FONTS-
Per conoscere meglio quali fonts sono disponibili nel cassetto FONTS: di sistema, per poterli settare, per conoscere l'altezza, Amos Basic offre all'utente dei comandi tanto semplici quanto veloci. Puoi anche impostare tutti gli attributi che desideri: grassetto, corsivo outline ecc.
Get Rom Fonts
Produce una lista di fonts presenti nella Rom e le dispone nell'array di
sistema FONT$(); se non è disponibile il file LIBS/FONTS.library,
Amos Basic va in Crash!
=Font$(n)
Ritorna una stringa di 38 caratteri del font numero n; usa questa funzione
coi comandi Get Font. Il contenuto caratteri è nel
seguente formato:
1...29 | nome font |
30...33 | altezza del font |
34...37 | identificatore del font (rom o disc). |
Get Disc Font
Produce una lista dei fonts presenti su disco e le dipone nell'array
FONT$(n).
Set Font n
Setta il font numero n; da usare preferibilmente con Text e
solo dopo un comando Get Fonts.
Set Text style
Selezione lo stile di scrittura del testo; per style=1 si ha
l'UNDERLINE, con 2 si ha il BOLD, con 4 si ha l'ITALIC. Sono possibili
tutte le combinazioni (per es. per style=1+2+4 si hanno tutti gli stili).
=Text Lenght(t$)
Ritorna la lunghezza in pixel della stringa t$.
N.B.: non va usato in operazioni algebriche; da ricordare che i fonts a
passo fisso misurano 8x8 pixels.
=Text Base
Ritorna in pixels la base del font corrente; è utile per posizionare
con esattezza il testo all'inizio o alla fine dello schermo con
Text; il numero di pixel ritornato indica la distanza fra
l'estremità superiore del testo e la linea di base, esclusi i
discendenti.
N.B.: se con Text ti posizioni al pixel (0,0) verranno stampati
solo i discendenti del font. Dunque per stampare un testo nell'estremità superiore sinistra dello schermo ci si deve posizionare al pixel (0,8).
=Text Style
Ritorna lo stile del testo fissato in precedenza con il comando
Set Text; il risultato è un bit-map nello stesso formato
di quello usato in Set Text.
-CURISARIO-
Prima di concludere volevo aggiungere alcune importanti considerazioni
sull'ultimo argomento trattato e cioè i fonts, e sulle estensioni.
I comandi per i fonts sopra elencati sono eccellenti, non danno problemi e
quindi si possono usare con tutta tranquillità, ma sono comunque
diventati obsoleti. Usando questi comandi per assegnare un font, si costringe
Amos a perlustrare l'intera directory Fonts del nostro sistema,
chiaramente più essa è piena e più è il tempo che
serve per settare un font; è comprensibile che anche se questa cosa
capita solamente al primo settaggio, risulta sempre fastidiosa. Il problema
si supera solo utilizzando i comandi più moderni e funzionali messi a
disposizione da altre estensioni.
Ma cosa sono queste estensioni di cui si sente spesso parlare? Tutti i comandi che stiamo spiegando, sono contenuti dentro dei file chiamati estensioni; controllando con DOpus oppure dal semplice WB la directory principale di Amos, si noterà sicuramente una sotto-directory chiamata APSystem dentro la quale sono presenti dei file con indirizzo finale '.lib'. Questi files sono le nostre estensioni; Amos per default contiene solo quelle indispensabili, ma ne esistono molte altre che aggiunte alla APSystem e correttamente configurate, permettono di ampliare sensibilmente il parco comandi già di per se vasto di Amos aggiungendo moltissime altre funzioni che semplificano tantissimo la vita dell'utente, ad esempio, come sopra citato, una gestione più rapida e funzionale dei fonts, oppure comandi per effetti grafici, gestione della data e dell'orologio e tante altre novità ancora.
Molte estensioni si trovano in Aminet, alcune delle quali sono gratuite
mentre altre richiedono la registrazione, senza la quale il programma
non può essere compilato ma funziona solo da editor. Per usufruire di
queste nuove estensioni basta copiare il file principale (quello con
indirizzo finale '.lib') nella directory 'APSystem', poi successivamente
bisogna caricare Amos, scegliere l'ultima voce del menù 'Config'
e cioè 'Set Interpreter'. Fatto cio apparirà una gui nella
quale dovrete premere in successione su 'Load Default Configuration' e
'Set Loaded Extensions'. Vi apparirà così una prospetto delle
estensioni che Amos usa attualmente.
Ogni estensione ha una sua posizione esatta che viene sempre indicata
nei suoi files doc, ed esempio l'estensione 3D va solo nella posizione 4,
quindi se si dovesse configurare tale estensione sarebbe sufficiente fare
un click sulla posizione 4 e all'apparire del cursore scrivere il nome
esatto del file '.lib' copiato nell'APSystem; fatto ciò salvate la
configurazione, uscite da Amos, ricaricatelo e si avvierà con
i comandi della nuova estensione attivi. E' possibile vedere quali estensioni
sono attive anche selezionando la seconda voce del menù 'Amos'.
Bene! La settima lezione termina qui; la prossima lezione tratterà la gestione delle FINESTRE, le FUNZIONI MATEMATICHE, ultimo baluardo prima di entrare nel momento direi più interessante del corso e cioè l'uso degli schermi, il caricamento delle vostre immagini IFF, la gesione dei colori per giungere finalmente agli spites e alla musica.
In attaccato vi mettiamo due piccoli esempi.
Alla prossima lezione.
|