Tutorials: AMOS Tutorial I
by ®eljko DRA©ČIĆ a.k.a. Furesti drascic@etfos.hr


AMOS.... A sto je to?

Pa.. Amos je ukratko jos jedna verzija sveprisutnog Basica a njih je u Amiginoj povijesti bilo mnogo pocevsi od orginalnog Microsoftovog ( da, da i nekad je i Microsoft programirao za Amigu i ako je sudeci prema ovom uratku hvala Bogu pa je prestao) preko svojevremeno popularnog GFA Basica pa do najnovijeg Blitz Basica II (ciju ucionicu mozete takode pratiti na stranicama Amiga STORMa). No da neduzim, tamo negdje pred kraj osamdesetih po uzoru na STOS programski jezik s Atarija nastao je prvi Amos Basic. Dolazio je na tri diskete (jedna programska i dvije s primjerima), imao grozan editor (koji se rusi na svemu sto se nezove A500) i omogucavao programiranje igara ljudima kojima to do pojave Amos-a nije padalo na pamet posto su bili C i Asm. nepismeni a u to vrijeme to je znacili da se bili osudeni na igranje, crtanje i pisanje modula... o programiranju igara nije bilo ni rijeci...

I tada se pojavio Amos... u osnovi Basic kojeg su znali svi prosiren sa skupom naredbi za baratanje slikama (.IFF), kreiranjem i iscrtavanjem i animaciju Spriteova i BOBova( Bliter OBjects), te za glazbu (koristio je vlastiti .ABK format ali je bio i prilozen program za konverziju .MOD datoteka u .ABK) i samplove (takoder je koristio .ABK i da, bio je prilozen program koji bi standardne samplove prebacivao u Amos BAnk fileove). I nakraju kao najvaznije (za igre) omogucavao je uzasno jednostavan Double Buffering koji je iskljucivao ono blesavo titranje kad micete neki 2D objekt po ekranu...

U osnovi imao je dobru ideju, programi su bili pristojne brzine (za jedan Basic... probajte napisati program u QuickBasic na Pc-u i isti program u Amos u da se tice 2D grafike pa cete vidjeti o cemu pricam), i prilicno se brzo rasirio te postao defacto najlaksi programski jezik za pisanje igara..

Da.. to igara mu je ujedno bila i mana... posto se Amos klao sa AmigaOS-om gdje god je stigao te je pisanje OS friendly programa prava patnja. Dalje, nije Os jedina stvar s cime se Amos (govorim o orginalnom Amosu) klao, tu su jos u pitanju ubrzivacke kartice a o grafickim karticama da i ne pricam. Nazalost rijetko cete naci kompajlirani Amos Basic program koji ce reditit na A1200 s ubrzivackom (mada ih dosta steka cak i na obicnoj Amiga 1200). Ah, da imao je Amos i kompajler koji se morao posebno kupovati, a i on je imao svojih bubica koje bih najradije preskocio. Sve u svemu kad izuzmemo bugove, na AMOS mozemo gledati kao na pravi program nastao u Amiga duhu; naime za AMOS je zasluzan jedan covjek: Francois Lionet koji je sam samcat iskodirao AMOS... u Assembleru...naravno sto ste ocekivali

Sve te mane pisac programskog jezika je uvazio te je pocetkom 92 dovrsio danas najrasireniju verziju Amosa: Amos Professional. Tom verzijom cemo se i mi baviti u ovom tutorijalu. Postoji jos i EasyAmos ali to je po mome misljenju obogaljeni Amos Basic napravljen za totalne tudume... bolje ga je izbjegavati u sirokom luku...

Nedavno je tvrtka koja je posjedovala copyright na Amos (EuroPress) pustila njegov source u slobodni opticaj, te je time Amos defacto postao besplatan.

BTW: Ako me sjecanje nevara EuroPress Software je presao na PC i tamo proizvodi trkace igre tipa Rally Championship i sl. :(


 

Amos Proffesional... a jel' to jestivo?

Hmm...Koliko god sam puno ocekivao od Amos Basica pa ostao razocaran toliko sam od pocetne sumnjicavosti presao u delirij kad sam prvi put radio s AmosProfessional-om. Editor je izvan svakog AmigaOS standarda (kao nazalost i cijeli programski jezika lai nemosh imat i ovce i novce) ali to nadoknaduje svojom stabilnoscu i lakocom upotrebe te mnostvom opcija ( Pitanje: Jel' itko od vas u bilo kojem programskom editoru nasao opciju Undo i to visestruku? Nisam ni ja...) i ugradjenim Help-om( koji se dodushe nalazi na posebnoj disketi ali bolje i to nego HELP u Amos Basic-u koji ga zapravo i nije imao.)

Definitivno je najbolji dio editora DIRECT mode (klikni ESC u editoru pa cete vidjeti). Njegova se korisnost najbolje vidi nakon izvrsavanja programa... Mozete pregledati sto vam je program brljao po varijablama, Memorijskim Bankama (.ABK) i slicne stvari... Da, znam, postoji tako nesto i u QuickBasicu ali ovo je godinama ispred...

Programeri su ubacili i Program Monitor koji omogucava pokretanje programa red po red da mozete naci gdje steka.. Ne koristim se time cesto ali volim znati da postoji...

Dodano je jos naredbi a najvaznije od svega su: mogucnost direktnog ucitavanja modula .MOD i .MED te animacija .Anim fileova

I pored svega poradili su na stabilnosti programa kao i kompajliranih programa ali to je vec neka druga prica...

U svemu ovome zaboravio sam spomenuti AMAL koji je zapravo programski jezik unutar programskog jezika a u osnovi vas rjesava bakcanja s intruptima i slicnim kerefekama od kojih boli glava. Koristi se za animaciju Spriteova ali moguce je uz pomoc njega manipulirati ekranom (skroliranje) te ocitavanje joysticka i misha.. ali o tom potom...


 

Dosta gluposti, predji na nesto korisno.

 

NAREDBE:

Screen Open NR,XWIDE,YWIDE,COLOURS,RESOLUTION

- AMOS naredba

- Otvara se ekran s naznacenom velicinom,brojem boja i rezolucijom

NR: Index otvorenog ekrana, prima vrijednosti (0-7)

XWIDE,YWIDE: Sirina i visina ekrana max.(1024x1024)

COLOURS:Broj boja (2,4,8,16,32,64,4096) Amos podrzava EHB i HAM

RESOLUTION: Hires ili Lowres

Standardni primjeri:

Screen Open 0,320,256,32,Lowres

Screen Open 0,320,256,32,Hires

Screen Open 0,640,256,32,Hires

Screen Open 0,640,480,8, Hires

Ako bi naprimjer otvorili

Screen Open 0,640,480,32,Lowres

ekran bi se trebao skrlolirati ali objasnjenje toga vas ceka sljedeci put (moram ljude nekako nagovoriti da se vrate i citaju ovo...)

 

Screen Close NR

-AMOS naredba

-Zatvara broj s indexom NR

 

Screen NR

-AMOS naredba

-odreduje ekran u koji ce program pisati

NR: index ekrana

 

Screen To Front NR

-AMOS naredba

-odreduje koji ce ekran biti prvi

NR: index ekrana

 

Cls [NR, X1,Y1,X2,Y2]

-BASIC naredba

-Brise ekran

NR: opciono mozemo odrediti kojom bojom obrisati ekran

X1,Y1,X2,Y2: Opciono mozemo odrediti dio ekrana koji ce se obrisati

 

Curs [On/Off]

-AMOS naredba

-Ukljucuje i iskljucuje prikaz kursora (on jos postoji i moze se koristiti ali je nevidljiv)

 

Flash [On/Off]

-AMOS naredba

-Ukljucuje i iskljucuje rotaciju palete na boji s indexom 3 ( ovo je postavljeno po defaultu... prilicno iritirajuce)

 

Paper COL

-AMOS naredba

-Boja podloge za naredbu Print

COL: Index Boje

 

Pen COL

-AMOS naredba

-Boja znakova za naredbu Print

COL: Index Boje

 

Ink COL

-AMOS naredba

- Odreduje boju koja se koristi pri crtanju (tu spada i naredba Text$)

COL: Index Boje

 

Text X,Y,ZNAK$

-AMOS naredba

-Graficka verzija naredbe PRINT

X,Y: Koordinate (graficke) gdje ce se se ispisati Tekst

ZNAK$: String koji treba ispisati

Objasnjenje:

Text$ 100,100,"Hello World" ce na koordinatama 100,100 ispisati Hello World

Napomena: Graficke koordinate su koordinate pixela dok postoje i znakovne koordinate koje se koriste u naredbi LOCATE... Nadam se da svi shvacate koliko je naredba TEXT$ fleksibilnija pogotovo ako imamo u vidu da se znakovima koje ispisuje ta naredba moze odrediti pripadajuci font ali o tome i dodatnim opcijama ubuduce...

Za pocetak to je dosta sto se naredbi tice... ja sam podrazumijevao da svi znate osnove Basic-a a ako neznate pisite mi na mail pa cu ubuduce misliti i na vas...

Koriste se jos i standardne Basic naredbe:

Locate X,Y

Print

Input

Rem

Inkey$

For...Next

Do...Loop

Goto

Rnd [NR]

-BASIC naredba

-Generira slucajan broj

NR: maximalna vrijednost do koje ce se generirati slucajan broj


 

Prakticno programiranje

Sad kad smo nabrojali sve naredbe za poceatak mozemo poceti s prakticnim dijelom:

Najprije cemo napisati program koji ce otvoriti ekran velicine 320x256(PAL) s 32 boje i u niskoj rezoluciji te prebrisati ekran

 

Screen Open 0,320,256,32,Lowres

Curs Off: Flash Off :Cls 0

Paper 0:Pen 2

Ovo zapravo i nije program vec bi tako trebao pocinjati svaki program koji pisete...

Malo prosirenije bi to izgledalo ovako:

Screen Open 0,320,256,32,Lowres

Screen 0: Screen To Front 0

Curs Off: Flash Off: Cls 0

Paper 0:Pen 2

Eto...

Ajmo Dalje...

Napraviti Program Koji ce ucitati neki string i ispisati ga pomocu naredbe PRINT i naredbe TEXT s tim da su koordinate generiranje naredbom RND

 

Screen Open 0,320,256,32,Lowres

Curs Off: Flash Off :Cls 0

Input A$

For i=1 to100< /EM> < /STRONG> < /EM> < /EM>

X=Rnd(80) <- znakovne koordinate redova i stupaca

Y=Rnd(30)

Locate XX,YY:Print A$

X=Rnd(320) <- Graficke koordinate redova i stupaca

Y=Rnd(256)

Text X,Y,A$

 

Eto... za kraj i malkice kompliciranija verzija koja ukljucuje i mijenjanje boja

 

Screen Open 0,320,256,32,Lowres

Curs Off: Flash Off :Cls 0

Paper 0:Pen 2

Input A$

X=Rnd(80) <- znakovne koordinate redova i stupaca

Y=Rnd(30)

PODLOGA=Rnd(31) <-- Rnd ide do broja 31 posto imamo u vidu i 0 kao boju

OLOVKA=RND(31)

Paper PODLOGA :Pen OLOVKA

Locate X,Y:Print A$

X=Rnd(320) <- Graficke koordinate redova i stupaca

Y=Rnd(256)

COL=RND(31)

Ink COL

Text X,Y,A$

Next i

 

Za kraj malo cemo upotrijebiti naredbu Screen To Front

Screen Open 0,320,256,32,Lowres

Curs Off:Flash Off:Cls 0

Paper 0: Pen 2

Locate 12,31: Print "Otvorili ste Screen 0"

Screen Open 1,640,256,8,Hires

Curs Off: Flash On: Cls 0

Paper 0: Pen 3

Locate 12,10:Print "Otvorili ste Screen 1 i ostavili Flash ukljucen"

Screen 0: Screen To Front 0

Locate 10,10:Print "Stisnite tastaturu..."

Do

A$=Inkey$

If A$<>"" Goto skok <--- Program ceka ulaz s tastature

Loop

skok:

Screen To Front 1:

Rem ---------- sada program ispisuje tekst ali se to nevidi na ekranu zato sto smo postavili Screen 1 naprijed a kao aktivni ekran jos uvijek je Screen 0

Print "Pisem ali me nevidish!!!!"

Rem ---------- prebacujemo se na screen 0

Screen 1:

Locate 0,0: Print "Fino... a sada me fino ugasi!! Tastaurom ne na POWER... Boze moram li bash sve kucati..."

Do

A$=Inkey$

If A$<>"" Goto skok2

Loop

skok2:

Screen Close 1 <--- zatvaramo Screen 1

Screen 0: Screen To Front 0 <--- nije potrebno posto je to jedini ekran ali zlu netrebalo pogotovo ako imamo vise otvorenih ekrana

Rem i sada zavrsnica.....

Locate 1,1: Print Pritisni tastauru za kraj...."

Do

A$=Inkey$

If A$<>"" Goto skok3

Loop

skok3:

 

 

Za svako pitanje i komentar obratite se na:

drascic@etfos.hr

Web stranicu moram poceti pisati od pocetka posto je bivsa zahvaljujuci Winblowsima u uredu otisla u digitalni raj :(

Ah da... skontali ste da fale dijakriticki znakovi... sorry... sljedeci put ce biti bolje....

Pozdrav...

BTW: Ako nekom treba AMos Pro neka mi se javi pa cemo se dogovoriti....