1 2 Autori: PONGRAČIĆ IVAN — ZEBEC BRANKO MIKRORAČUNALO ORAO 102 PRIRUČNIK SADRŽAJ UVOD ......................................................................................................................................................................6 POGLAVLJE 1.........................................................................................................................................................7 1.1 PRIKLJUČIVANJE MIKRORAČUNALA "ORAO" ..........................................................................................7 1.2 SLOVIŠTE (tastatura) ....................................................................................................................................9 1.3 PRIMJER BASIC PROGRAMA ...................................................................................................................10 1.4 RAD S KAZETOFONOM .............................................................................................................................11 1.4.1 Snimanje programa na traku (SAVE)....................................................................................................11 1.4.2 Učitavanje programa s trake (LOAD) ....................................................................................................11 1.4.3 Katalogiziranje trake (LOADC)..............................................................................................................12 1.5 POVEZIVANJE MIKRORAČUNALA SA ŠTAMPAČEM..............................................................................12 1.6 NAČIN KORIŠTENJA ŠTAMPAČA .............................................................................................................12 1.7 PRIMJER PROGRAMIRANJA U STROJNOM JEZIKU ..............................................................................12 POGLAVLJE 2.......................................................................................................................................................13 2.1 OPĆE KARAKTERISTIKE ...........................................................................................................................13 2.1.1. Računanje u BASIC-u ..........................................................................................................................14 2.1.2 Varijable.................................................................................................................................................15 2.1.3 Planiranje programa: .............................................................................................................................16 2.1.4 Pisanje izvornog programa u BASIC-u .................................................................................................17 2.1.5 Mijenjanje izvornog programa ...............................................................................................................18 2.2 ULAZNO/IZLAZNE naredbe ........................................................................................................................19 2.2.1 INPUT naredba .....................................................................................................................................19 2.2.2 DATA i READ naredbe..........................................................................................................................20 2.2.3 RESTORE naredba...............................................................................................................................20 2.2.4 PRINT naredba .....................................................................................................................................20 2.3 PETLJE I POTPROGRAMI..........................................................................................................................21 2.3.1 FOR...NEXT naredbe ............................................................................................................................21 2.3.2 GOTO naredba......................................................................................................................................22 2.3.3 GOSUB i RETURN naredbe .................................................................................................................23 2.3.4 REM naredba ........................................................................................................................................23 2.3.5 ON naredba...........................................................................................................................................24 2.3.6 IF...THEN naredba ................................................................................................................................24 2.4 POLJA PODATAKA .....................................................................................................................................25 2.4.1 DIM naredba..........................................................................................................................................26 2.4.2 Pisanje podataka u polje .......................................................................................................................27 2.4.3 Čitanje podataka iz polja .......................................................................................................................27 2.5 STRINGOVI .................................................................................................................................................32 2.5.1 ASC funkcija..........................................................................................................................................33 2.5.2 CHR$ funkcija........................................................................................................................................33 2.5.3 LBFT$ funkcija ......................................................................................................................................33 2.5.4 RIGHT$ funkcija ....................................................................................................................................33 2.5.5 MID$ funkcija.........................................................................................................................................34 2.5.6 LEN funkcija ..........................................................................................................................................34 2.5.7 STR$ funkcija ........................................................................................................................................34 2.5.8 VAL funkcija...........................................................................................................................................34 2.5.9 Primjeri programa sa STRING funkcijama ............................................................................................34 2.6 ARITMETIČKO/LOGIČKE OPERACIJE......................................................................................................39 2.6.1 Aritmetičke operacije: ............................................................................................................................40 2.6.2 Logičke operacije ..................................................................................................................................41 2.7 FUNKCIJE....................................................................................................................................................43 2.7.1 Numeričke funkcije ................................................................................................................................45 2.7.1.1 ABS(X) funkcija...............................................................................................................................45 2.7.1.2 INT(X) funkcija ................................................................................................................................45 2.7.1.3 RND(X) funkcija ..............................................................................................................................45 2.7.1.4 SGN(X) funkcija ..............................................................................................................................45 2.7.1.5 SQR(X) funkcija ..............................................................................................................................45 2.7.1.6 EXP(X) funkcija...............................................................................................................................46 2.7.1.7 LOG(X) funkcija ..............................................................................................................................46 2.7.1.8 SIN(X) funkcija................................................................................................................................46 2.7.1.9 COS(X) funkcija ..............................................................................................................................46 2.7.1.10 TAN(X) funkcija.............................................................................................................................46 2.7.1.11 ATN(X) funkcija.............................................................................................................................46 2.7.2 Posebne funkcije ...................................................................................................................................46 2.7.2.1 POS(X) funkcija ..............................................................................................................................46 4 2.7.2.2 SPC(X) funkcija ..............................................................................................................................47 2.7.2.3 TAB(X) funkcija...............................................................................................................................47 2.7.3 Korisnički definirane funkcije.................................................................................................................47 2.8 RAD S MEMORIJOM...................................................................................................................................48 2.8.1 Upisivanje podatka u memorijsku lokaciju ............................................................................................48 2.8.2 Ispisivanje sadržaja memorijske lokacije ..............................................................................................49 2.8.3 Ekran .....................................................................................................................................................50 2.8.3.1 Ograničavanje i pozicioniranje aktivnog djela prikaza....................................................................51 2.8.3.2 Definiranje korisničkog seta znakova .............................................................................................52 2.8.4 Pozivanje strojnih programa iz BASIC-a ...............................................................................................53 2.9 SISTEMSKE KOMANDE .............................................................................................................................56 2.9.1 LOAD I LOADC komande .....................................................................................................................56 2.9.2 SAVE komanda .....................................................................................................................................57 2.9.3 LIST komanda .......................................................................................................................................58 2.10 KONTROLNE KOMANDE/NAREDBE.......................................................................................................58 2.10.1 RUN komanda.....................................................................................................................................58 2.10.2 STOP naredba ....................................................................................................................................58 2.10.3 CONT komanda ..................................................................................................................................58 2.10.4 END naredba.......................................................................................................................................59 2.10.5 NEW komanda ....................................................................................................................................59 2.11 GRAFIKA ...................................................................................................................................................59 2.11.1 MOV naredba ......................................................................................................................................59 2.11.2 DRAW naredba ...................................................................................................................................59 2.11.3 PLOT naredba.....................................................................................................................................60 2.11.4 Animirana grafika ................................................................................................................................60 2.12 GREŠKE PRILIKOM PROGRAMIRANJA .................................................................................................70 POGLAVLJE 3.......................................................................................................................................................70 3.1 ORGANIZACIJA MEMORIJSKIH LOKACIJA (memorijska mapa)..............................................................70 3.2 MONITORSKE NAREDBE ..........................................................................................................................71 3.2.1 Heksadecimalna notacija ......................................................................................................................71 3.3 MINIASSEMBLER [A] ..................................................................................................................................72 3.3.1 Zbrajanje sa prijenosom ........................................................................................................................73 3.3.2 Ispisivanje teksta ...................................................................................................................................74 3.4 DISASSEMBLER [X]....................................................................................................................................75 3.5 ČITANJE MEMORIJSKOG BLOKA [E] .......................................................................................................76 3.6 ČITANJE I MIJENJANJE MEMORIJSKE LOKACIJE [M]............................................................................76 3.7 PROVJERA SUME [C].................................................................................................................................77 3.8 PUNJENJE MEMORIJSKOG BLOKA [F] ....................................................................................................77 3.9 IZVRŠENJE STROJNOG PROGRAMA [U] ................................................................................................77 3.10 KOPIRANJE DIJELA MEMORIJE [Q]........................................................................................................77 3.11 OPIS VAŽNIJIH POTPROGRAMA U MIKRORAČUNALU "ORAO" .........................................................78 3.11.1 Potprogram za unos znaka s tastature (INCH) ...................................................................................78 3.11.2 Unos znaka s prikazom na ekranu (INCHE) .......................................................................................79 3.11.3 Ispis znaka na ekran (OUTCH) ...........................................................................................................79 3.11.4 Skok u MONITOR bez RESET sekvencije..........................................................................................79 3.11.5 Ispisivanje stringa na ekran (STROUT) ..............................................................................................79 3.11.6 Ulazak u BASIC iz MONITOR-a..........................................................................................................79 3.11.7 Generiranje zvuka ...............................................................................................................................79 3.11.8 Crtanje točke iz MONITOR-a (PLOT) .................................................................................................80 3.11.9 Izvlačenje linije (DRAW)......................................................................................................................80 3.11.10 Crtanje kružnice ................................................................................................................................81 3.11.11 Adrese važnijih potprograma u mikroračunalu "ORAO" ...................................................................81 3.12 RAD S KAZETOFONOM U MONITOR-u ..................................................................................................81 3.12.1 Pospremanje strojnih programa SAVE ...............................................................................................81 3.12.2 Pozivanje strojnih programa LOAD.....................................................................................................81 3.12.3 Katalogiranje strojnih programa LOADC.............................................................................................82 POGLAVLJE 4.......................................................................................................................................................82 4.1 OPIS MNEMONIKA ZA MIKROPROCESOR 6502.....................................................................................82 4.2 NAČINI ADRESIRANJA ZA 6502................................................................................................................82 4.2.1 Izravno adresiranje (Immediate Addressing) ........................................................................................82 4.2.2 Akumulatorsko adresiranje (Accumulator Addressing) .........................................................................82 4.2.3 Relativno adresiranje (Relative Addressing)....................................................................................83 4.2.4 Apsolutno adresiranje (Absolute Addressing).......................................................................................83 4.2.5 Apsolutno indeksno adresiranje (Absolute Indexed Addressing)..........................................................83 4.2.6 Adresiranje nulte stranice (Zero Page Addressing) ..............................................................................83 5 4.2.7 Uključujuće adresiranje (Implied Addressing).......................................................................................84 4.2.8 Indirektno apsolutno adresiranje (Indirect Absolute Addressing)..........................................................84 4.2.9 Indeksno adresiranje nulte stranice (Zero Page Indexed Addressing) .................................................84 4.2.10 Preindeksno adresiranje (Indexed Indirect Addressing) .....................................................................84 4.2.11 Postindeksno adresiranje (Indirect Indexed Addressing)....................................................................85 5 NAPOMENA .......................................................................................................................................................86 6 UVOD U ovom priručniku je opisan postupak povezivanja mikrora čunala "ORAO" s pripadajućim perifernim jedinicama (štampač, kazetofon...), te na čin programiranja u BASIC-u i miniassembleru. Priru čnik je organiziran u pet dijelova: ƒ na čin početnog korištenja ƒ programiranje u BASIC-u ƒ opis i korištenje MONITOR-a ƒ opis na čina adresiranja mikroprocesora 6502 ƒ prikaz mnemoni čkih instrukcija 6502 Za sve korisnike koji još nisu imali priliku raditi na ra čunalima, preporu ča se pažljivo pra ćenje uvodnog dijela ovog priručnika, kako bi se izbjegle nepotrebne neugodnosti, koje su posljedica nepravilnog rukovanja. Mikroračunalo "ORAO" uglavnom je namijenjeno za korištenje u BASIC-u, pa će stoga ve ći dio priru čnika biti usmjeren na objašnjenje BASIC naredbi, uklju čujući i na čine njihovog korištenja. Za one koje će zanimati detaljniji rad mikrora čunala i mikroprocesora 6502 predvi đen je rad u MONITOR-u s mogu ćnošću korištenja programiranja u strojnom jeziku. Zaključno žele autori napomenuti, da ovaj priru čnik nije zamišljen kao udžbenik BASIC-a ili ASSEMBLERA, ve ć samo kao pomagalo prilikom savladavanja osnovne problematike rada na mikrora čunalu "ORAO". Za sve one kojima je sadržaj priručnika suviše skroman, preporučujemo nabavku specijaliziranih knjiga za učenje BASIC-a i ASSEMBLERA. 7 POGLAVLJE 1 1.1 PRIKLJUČIVANJE MIKRORAČUNALA "ORAO" Za vizualno pra ćenje rada na mikrora čunalu "ORAO" predvi đeno je korištenje ku ćnog TV-prijemnika ili video monitora. Ukoliko koristimo TV-prijemnik, potrebno ga je podesiti na podru čje oko devetog kanala, a zatim ga priloženim TV-kablom vezati na antenski izlaz mikrora čunala (Slika 1.1-2). Korisnici sa ve ćim zahtjevima mogu koristiti video monitor, koji se spaja na video izlaz,pri je spomenutim kablom (Slika 1.1-1). 1.priključak za video monitor 2.priključak za TV-prijemnik 3.priključak za kazetofon 4.priključak za štampač (printer) 5.konektor za proširenje 6.RESET tipka 7.prekidač mrežnog napona 8.kabel mrežnog napona Slika 1.1 Za uključenje računala potrebno je potisnuti prekida č mrežnog napona (Slika 1.1-7) prema gore. Pritiskom na RESET tipku (Slika 1.1-6) pokre će se mikrora čunalo. Na TV-prijemniku (ako je upaljen) pojavit će se na vrhu ekrana poruka: * * * ORAO * * * *_ Razlog mogu ćeg izostanka slike može biti u nepodešenosti TV-prijemnika. Zbog toga je obi čno potrebno naknadno podešavanje slike, dok se ne dobije najpovoljnija oštrina prikazanih znakova. Zvjezdica (*) ispod poruke i zmigaju ća crtica (kursor) ozna čuju da se ra čunalo nalazi u MONITOR-u. Kursor pokazuje mjesto na ekranu, gdje će se upisati slijedeći znak unesen s tastature. Mikroračunalo "ORAO" je uglavnom predviđeno za korištenje u BASIC-u, pa će zbog toga biti potrebno kontrolu računala prebaciti u BASIC. Upišemo li *BC i pritisnemo tipku [CR], na ekranu će se pojaviti: MEMORIJA ? pritisnimo [CR] DULJINA LINIJE ? pritisnimo [CR] 7167 LOKACIJA > _ Dodatna objašnjenja u vezi s ispisanim porukama bit će naknadno opisana. Žmigajući kursor ispod "prompta" (]) označuje da je ra čunalo u BASIC-u. Pritiskom na neku tipku dobit ćemo ispis odgovarajućeg znaka na ekranu. Pritisnemo li tipku A > A A pojavit ce se znak A na ekranu. Pritiskom na [CR] računalo ispiše: ? SN GREŠKA 8 Naime, ra čunalo ne prepoznaje A,niti kao naredbu, niti kao komandu, što rezultira ispisom greške. Unesimo slijedeći program: PRINT"SVAKI POČETAK JE TEŽAK" [CR] Računalo će ispisati SVAKI POČETAK JE TEŽAK Primjećujemo da je svaki znak unutar navodnika pravilno izveden i ispisan bez poruke o grešci. Želimo li da računalo izvede neku računsku operaciju u izravnom izvođenju, upišimo: PRINT 23*124 [CR] 2852 Dobiveni broj 2852 predstavlja umnožak izme đu brojeva 23 i 124. Za višekratno ispisivanje istog teksta poslužit ćemo se slijedećim programom; FOR 1=0 TO 10:PRINT"JA SAM U PETLJI":NEXT I pritisnimo [CR] Slijedi ispis na ekranu: JA SAM U PETLJI JA SAM U PETLJI JA SAM U PETLJI JA SAM u PETLJI JA SAM u PETLJI JA SAM u PETLJI JA SAM u PETLJI JA SAM u PETLJI JA SAM u PETLJI JA SAM u PETLJI JA SAM u PETLJI U ovom programu možemo uo čiti mogu ćnost pisanja više naredaba u s time da su naredbe odvojene dvotočkom (:). Beskonačno ispisivanje teksta možemo postići vrlo lako 10 PRINT"BBSKONAČMA PETLJA":GOTO 10 Ovaj program je upisan u instrukcijskoj liniji 10. Za izvođenje programa takvog oblika moramo poslije pritiska na [CR] unijeti naredbu RUN RUN Ispisivanje poruke " BESKONAČNA PETLJA " ispunit će ekran. Zaustavljanje izvo đenja omogu ćuje [CTL]C ili tipka RESET koja vraća kontrolu u MONITOR. Ponovni ulazak u BASIC postižemo s *BW To je takozvani vrući start, koji ne uništava postojeći BASIC program prethodno unesen. Mikroračunalo "ORAO" daje korisniku mogu ćnost rada u grafici 256x256 (mogu ćih) to čaka na ekranu. U tu svrhu postoje naredbe u BASIC-u, Koje na jednostavan na čin omogućavaju crtanje željene slike. Jednostavnim programom možemo nacrtati dijagonalu na ekranu, MOV 0,0:DRAW 255,255 [CR] Želimo li nacrtati samo jednu točku u donjem desnom kutu, dovoljno je upisati PLOT 255,0 [CR] 9 1.2 SLOVIŠTE (tastatura) Slovište na mikroračunalu "ORAO" ima standardni raspored tipki uključivši i znakove ć,č,š,ž,đ. Osim uobičajenih znakova, Slovište sačinjava i nekoliko specijalnih tipki koje su uočljive na slici 1.2. Slika 1.2 Primjećujemo da se radi o slijedećim tipkama: [CR] Return tipka [CTL] Kontrol tipka [ ] Šift tipka Tipku [CR] smo već upoznali prilikom izvođenja prethodnih programa. Prilikom jednostavnog programiranja (bez brojeva linije BASIC programa), pomoću tipke [CR] izravno izvodimo napisani program. [CTL] tipka služi za izvo đenje nekih specijalnih operacija. Na primje r, istovremeno pritisnimo [CTL] i tipku L. Rezultat će biti brisanje ekrana. Slijede ća tabela daje popis svih [CTL] postoje ćih operacija na mikrora čunalu "ORAO": [CTL] L briše ekran [CTL] G zvu čni signal "beep" [CTL] F briše tekst od kursora do kraja ekrana [CTL] H pomi če kursor za jedno mjesto u lijevo [CTL] K pomi če kursor za jedan redak prema gore [CTL] I pomi če kursor za jedno mjesto u desno [CTL] J pomi če kursor za jedan redak prema dolje [CTL] V zvu čni signal "beep" prilikom pritiska na neku tipku [CTL] E briše tekst od kursora do kraja linije [CTL] B uklju čuje štampač (printer) [CTL] U isklju čuje štampač [CTL] D vra ća kursor na početak ekrana [CTL] M vra ća kursor na početak reda (carriage return) [CTL] C prekid izvo đenja programa (escape) Poneke tipke imaju dva znaka. Donji z nak ispisuje se izravnim pritiskom na tipku, dok ispis gornjega znaka dobijemo koristeći tipku šift [ ], 1 ili ! 2 ili " 3 ili # 4 ili $ 5 ili % 6 ili & 7 ili ' 8 ili ( 9 ili ) - ili = : ili * i tako dalje. Pomicanje kursora možemo izvoditi izravno, bez korištenja [CTL] kodova. U tu svrhu služe četiri tipke smještene u gornjem desnom kutu slovišta 10 kursor lijevo [ s][u] kursor gore kursor dolje [ v][t] kursor desno Preostale četiri tipke su tzv. funkcijske tipke. [PF1] [PF2] [PF3] [PF4] Pritiskom na [PF1] ra čunalo ispisuje mala slova. Povratak is pisivanja velikih slova postižemo ponovnim pritiskom na [PF1]. [PF2] služi za startanje štampača (printera) [PF3] prebacuje ispis znakova u invertiranom obliku [PF4] je kopi (COPY) tipka Ukoliko držimo neku tipku pritisnutu dulje vrijeme, ispis znakova će se ponavljati samostalno (autorepeat). 1.3 PRIMJER BASIC PROGRAMA Pokušajmo napisati program, koji će na ekranu nacrtati funkciju sinus. Za razliku od prethodnih programa, kod ovoga ćemo svaku instrukcijsku liniju označiti odgovarajućim brojem. 10 FOR 1=0 TO 255 20 Y=100*SIN(I/40)+128 30 PLOT I,Y 40 NEXT Program ćemo pokrenuti naredbom RUN > _ RUN [CR] Na ekranu će se iscrtati funkcija sinus. Detaljniji opis korišt enih BASIC naredbi slijedi kasnije. Dobivenu sliku i program možemo izbrisati pomo ću [CTL]L, me đutim, naš program se i dalje nalazi u memoriji ra čunala. U to ćemo se uvjeriti koristeći komandu LIST. LIST [CR] Prije uneseni program (bez slike) bit će ispisan na ekranu. Za one koji žele imati nacrtanu sinusnu funkciju više frekvencije, upišimo LIST 20 pojavit će se 20 Y=100*SIN(I/40)+128 Tipkom [u] dovedemo kursor u liniju 20 i pritisnemo [PF4] (kopi tipku), što će rezultirati pomicanjem kursora u desno s istim učinkom, kao da smo posebno pritisnuli tipku slovišta. Pomoću kopi tipke pomičemo kursor dok ne dođemo do broja 40, koji zamijenimo sa 10, a ostatak linije iskopiramo sa [PF4]. Poslije LIST 20 na ekranu se mora pojaviti: 20 Y=100*SIN(I/10)+128 Poslije RUN dobit ćemo sliku sinusne funkcije više frekvencije. Prilikom pisanja programa, moguće je unijeti neki pogrešan znak,npr.: PRINT"ORAOR" Vidimo da je jedno slovo R suvišno. Problem rješ avamo tipkom za pomicanje kursora u lijevo [ s] ili tzv. delit (DELETE) tipkom. Ispod svakog suvišnog znaka dovedemo kursor (u našem slučaju ispod suvišnog R), i znak u BASIC instrukciji više ne postoji. PRINT"ORAOR" _ Na mjestu bivšeg "R" upišemo navodnik i ispravka je gotova. 11 Dakle, koristeći tipke delit (DELETE), kopi (COPY=[PF4]), te tipke za pomicanje kursora, mogu će je popravljati tekst na ekranu,, dok ne dobijemo željeni oblik. Opisana mogu ćnost popravljanja (editiranja) teksta na ekranu od izuzetne je važnosti, jer omogu ćava korisniku da uz jednostavne zahv ate popravlja ili mijenja sadržaj bilo koje instrukcijske linije. Pr ilikom korištenja grafi čkih mogu ćnosti na mikrora čunalu "ORAO", može se dogoditi slučaj miješanja teksta i grafike. Tako dobivenu "mješavinu" kopi tipka ne prepoznaje, pa na tome mjestu ispiše "space" (prazno mjesto). 1.4 RAD S KAZETOFONOM Za trajno pohranjivanje nekog programa koristit ćemo kazetofon (vanjska memorija ), naravno uz pretpostavku, da je povezanost kazetofona sa ra čunalom pravilno izvedena. Korištenjem kazetofona riješit ćemo problem "skladištenja" velikog broja razli čitih programa koje ćemo kasnije lako pozvati i ponovno koristiti. Potrebno je naglasiti, da korištene trake moraju bez bilo kakvih ošte ćenja, jer će svaka greška na traci biti uzrokom kasnijih teškoća u radu s pozivanjem prije pospremljenih programa. Na slici 1.3 je prikazano kako se kazetofon priključuje na mikroračunalo ORAO". 1. na ulaz kazetofona (MIC) 2. masa 3. na izlaz kazetofona (PHONO ili EAR Slika 1.3 1.4.1 Snimanje programa na traku (SAVE) Poslije pravilnog povezivanja ra čunala sa kazetofonom, možemo po četi sa probnim prijenosom podataka iz računala na traku. Ukoliko se program za crtanje sinusa još uvijek nalazi u ra čunalu, iskoristit ćemo ga za "probni rad", prilikom kojega ćemo provjeriti pravilnost spajanja i veli činu nivoa koji je potreban za korektno snimanje i reprodukciju. Unesimo: SAVE"SINUS" [CR] SNIMANJE ?_ [CR] Poslije prvog pritiska na [CR] pojavit će se poruka SNIMANJE ?, koja obavještava korisnika neka uklju či kazetofon na SNIMANJE (RECORD TAPE). Slijede ći [CR] prouzrokuje zvuk iz mikrora čunala koji označava da je unos podataka iz ra čunala na traku u toku. Istovremeno se kursor privremeno gubi i pojavljuje se tek kada je prijenos podataka završen. Sada smo naš program trajno pohranili i mo ći ćemo ga pozvati s trake kada to zaželimo u potpuno pravilnom obliku. 1.4.2 Učitavanje programa s trake (LOAD) Proces pozivanja programa s kazete izvodi se na slijedeći način: LOAD"SINUS" [CR] REPRODUKCIJA ? [CR] , Naredba LOAD omogu ćava čitanje programa iz kazetofona u memoriju ra čunala. Poslije te naredbe moramo upisati ime programa pod navodnim znakovima. To je vrlo važno, jer će tijekom vremena biti na traku snimljeno mnogo razli čitih programa pod razli čitim imenima. Dakle, upisano ime programa kojega želimo u čitati, omogućava ra čunalu da na đe upravo onaj program koji želimo. Poslije prvog [CR] pojavit će se poruka REPRODUKCIJA ? (PLAY TAPE), koja nam govori da moramo pokrenuti kaze tofon. Prilikom traženja željenog programa računalo će nailaziti na imena nekih drugih programa i njihova imena ispisivati na ekranu, ali ih ne će učitavati. Drugim pritiskom na [CR] gubi se kursor i ra čunalo počinje tražiti zadani program. Pojava prompta i kursora ozna čava, da je program u čitan i spreman za korištenje. Dovoljno je upisati LIST i program će biti ispisan na ekranu, spreman za izvođenje. Zaustavljanje procesa "loadanja" moguće je postići pritiskom na tipku [CTL]. 12 1.4.3 Katalogiziranje trake (LOADC) Tijekom vremena na traku ćemo pospremiti mnogo programa s razli čitim imenima. Da bi imali pregled o kojim programima se radi, koristimo naredbu LOADC: LOADC [CR] REPRODUKCIJA ? [CR] TEST 0400 07FE 03FE SLIKA 6000 7FFH 1FFF FUNKCIJA SINUS 0400 082A 042A PETLJA. ASS 1000 102A 002A POTPROGRAM.ASS 1100 1234 0134 POKUS.BAS 0400 148A 108A SLIKA.DAT 6000 8000 2000 [CTL] > _ Ovdje se vidi primjer kataloga trake. U slu čaju da želimo zaustaviti daljnje katalogiziranje, dovoljno je pritisnuti tipku [CTL] koja nas vraća u početno stanje računala. Upotrebljavajući opisane mogu ćnosti rada s kazetofonom, korisnici mogu vrlo lako i brzo rukovati sa mnogo različitih programa. Dodatne mogućnosti korištenja trake bit će naknadno opisane. 1.5 POVEZIVANJE MIKRORAČUNALA SA ŠTAMPAČEM Na mikroračunalu "ORAO" predvi đen je rad sa štampa čem (printerom). Na slici 1.4 prikazan je na čin spajanja štampača s mikroračunalom. 1.usklađivanje (handshake) 2.ne spaja se 3.masa 4.ne spaja se 5.vrući kraj printera (linija podataka) Slika 1.4 1.6 NAČIN KORIŠTENJA ŠTAMPAČA Mikroračunalo "ORAO" je oblikovano tako, da može raditi sa štampačem serijskog prijenosa podataka (riječ je o serijskom standardu tzv, RS 232 ili V24). Zbog toga je va žno poznavati na koju je brzinu prijenosa podešen priključeni štampač. Uobičajene brzine nogu biti: 300 [bauda] (data frame 8 + 2) 600 [bauda] 1200 [bauda] 2400 [bauda] 4800 [bauda] itd. Mikroračunalo "ORAO" može raditi s brzinama od 300 do 2400 [bauda]. Odre đena brzina odabire se programski, P0 300 [bauda] P1 600 [bauda] P2 1200 [bauda] P2 2400 [bauda] Nepravilno unesen podatak o brzini, npr. P6, generirat će: *NEPRAVILAN UNOS 1.7 PRIMJER PROGRAMIRANJA U STROJNOM JEZIKU Programiranje a strojnom jeziku izvodivo je pomo ću miniassemblera, koji se nalazi u dijelu programske podrške (SOFTWARE) pod imenom MONITOR. Mogu ćnost rada u MONITORU dobivamo odmah poslije uklju čivanja 13 mikroračunala. Ponekad se može dogoditi, da se poslije uklju čenja računala ne nalazimo u MONITORU. U tom slučaju dovoljno je pritisnuti tipku RESET (Slika 1.1-6) i računalo će ispisati: * * * O R A O * * * *_ uključujući i žmigajući kursor. Sada je sve spremno za unos našeg jednostavnog programa u strojnom kodu, koji će ispisati 16 uzastopnih znakova A. Unesimo *A1000 [CR] 1000 LDA #0A 1002 JSR FFF1 1005 LDX #10 1007 LDA #41 1009 JSR FFF1 100C DEX 100D BNE 1007 100F RTS 1010Q [CR] Unošenjem znaka Q izlazimo iz miniassemblera ponovo u MONITOR. Međutim, naš strojni program se nalazi u memoriji računala. Da bi se uvjerili u to čnost unosa koristimo se monitorskom naredbom X (disassembler), koja strojni kod pretvara u lakše razumljiv mnemonički oblik. *X 1000 100F [CR] 1000 A9 CA LDA #0A 1002 20 F1 FF JSR FFF1 1005 A2 10 LDX #10 1007 A9 41 LDA #41 1009 20 F1 FF JSR FFF1 100C CA DEX 100F 60 RTS Lijeva strana disassemblerskog listinga prikazuje strojni kod, kojeg ustvar i mikroprocesor 6502 jedino razumije. Ostaje nam još samo da prijašnji strojni program izvršimo: *U1000 [CR] AAAAAAAAAAAAAAAA *_ Poslije ovog uvodnog dijela, koji je prije svega namij enjen lakšem savladavanju osnovnih problema rada na računalu, preći ćemo na rješavanje kompleksnijih problema,, koristeći pri tom dvije izuzetne prednosti računala: - brzinu - točnost Možda će prvi koraci u radu s mikrora čunalom "ORAO" (ili nekim drugim) biti malo teži, me đutim, svakog dana naučit ćemo nešto novo, ulazeći tako u jedan izuzetan svijet, svijet računala. POGLAVLJE 2 2.1 OPĆE KARAKTERISTIKE Mikroračunalo ORAO, osim strojnog koda za mikroprocesor 6502, razumije i program napisan u BASIC-u. BASIC spada u grupu viših programskih jezika, tj. za nj egovo razumijevanje nije potrebno detaljno poznavanje hardware-ske strukture računala, kao ni znanje programiranja u strojnom jeziku. Karakteristike: - aritmetika kliznog zareza - to čnost na 6 znamenki - opseg izme đu 10E-38 i 10E38 - 72 znaka u jednoj liniji - Dužina stringova maksimalno 255 znakova - Pohranjivanje korisni čkih programa na audio kazetu - Mogu ćnost pozivanja strojnih programa iz BASIC-a - Grafika 256*256 - Broj programske linije izme đu 1 i/ili 63999 14 2.1.1. Računanje u BASIC-u Vrlo često je potrebno saznati rezultat neke ra čunske operacije, a da pri tom ne pišemo program u BASIC-u nego direktno unesemo željenu računsku operaciju ili izraz. Primjer 1: Želimo izračunati vrijednost izraza (7+11)*3.5 Upotrebom naredbe PRINT direktno u liniji napišemo: PRINT (7+11)*3.5 Nakon pritiska na tipku [CR] na ekranu imamo: 63 > Primjer 2: Želimo u jednoj liniji izračunati više izraza odjednom PRINT 3*3,3.14159/2,7*7.2+4/5,SQR(2) U liniji imamo četiri razli čita izraza odvojena zarezom. Nakon pritiska na tipku [CR], na ekranu će se pojaviti četiri rezultata: 9 1.5708 51.2 1.41421 > Zbog neformatiranog ispisa rezultati nisu pregledn o smješteni na ekranu. O formatiranju ispisa bit će govora u odjeljku 2.7.2. 3*3=9 ;množenje 3.14159/2=1 ;dijeljenje 7*7.2+4/5=51.2 ;aritmeti čki izraz SQR(2)=1.41421 ;korjenovanje Primjer 3: Ispisivanje rezultata i teksta PRINT"REZULTAT=",3ˆ2 [CR] REZULTAT= 9 > što je rezultat operacije kvadriranja broja 3. U primjeru 3 smo pokazali da je moguće naredbom PRINT ispisati uz rezultat željene operacije i popratni tekst. Tekst koji u BASIC-u napišemo pod navodnicima ima posebno ime STRING. Primjer 4:Želimo na ekranu imati ispisan izraz i rezultat tog izraza 22*3=66 PRINT"22*3=",22*3 [CR] 22*3= 66 > U ovom primjeru pod navodnicima imamo isključivo tekst, a iza zareza tek dolazi izraz čiji rezultat tražimo. Kao zaključak ovog odjeljka upamtimo slijedeće: - naredbu PRINT direktno koristimo za ispis rezultata ra čunske operacije - ukoliko imamo više izraza čije rezultate tražimo, izrazi moraju biti odvojeni zarezom - sve što se u naredbi PRINT nalazi pod navodnicima ispiše se u nepromijenjenom obliku i zove se STRING - na kraju unosa komande o bavezno pritisnuti [CR] 15 2.1.2 Varijable Numeričke varijable mogu biti tipa XY X - prvi znak obavezno iz ASCII seta (isklju čena mala slova te velika Č,C,Đ,Š,Ž) Y - slovo ili broj ASCII seta Za STRING varijable važe ista ograničenja uz dodatak znaka $ (dolar) na kraju. Primjer 1:Unesite u liniji X=7 i pritisnite tipku [CR] X=7 [CR] > Sada smo simboličkoj varijabli X priredili numeričku vrijednost 7. Da se u to uvjerimo Unesimo ponovo u liniji: PRINT X [CR] 7 > čime smo ispisali numerički iznos simboličke varijable X. Operacija "=" nema u potpunosti isto zna čenje kao i znak jednakosti u algebarskim izrazima, ve ć ona ovdje isključivo služi za to da varijabli na lijevoj strani priredi vrijednost varijable ili izraza desne strane. Pokušajmo sada X=X+1 [CR] te nakon toga PRINT X [CR] 8 što znači,da smo numeričku vrijednost simboličke varijable X uvećali za jedan i ponovo je priredili varijabli X . Primjer 2: unesite PRINT "X" [CR] X > Na ekranu se pojavilo X !? ZAKLJUČAK: "X" je STRING varijabla, a X je numerička varijabla, kao što smo već rekli u odjeljku 2.1.1 Primjer 3: Unesite X$="X=" te nakon toga PRINT X$,X Na ekranu sada imamo: X= 8 jer je posljednja vrijednost varijable X ostala 8. Istim postupkom, za vježbu, izvedimo primjer 4 iz prethodnog odjeljka: X$="22*3=" [CR] X=22*3 [CR] PRINT X$,X [CR] 16 22*3= 66 2.1.3 Planiranje programa: Prvi korak prilikom pisanja programa, koji će eventualno biti kodiran u BASIC-u ili ASSEMBLBR-u, je apstrakcija problema koji želimo riješiti. Drugim riječima, problem treba tako pripremiti da ga računalo može obraditi nizom svojih osnovnih naredbi. Apstrakcija problema obično se izvodi na dva načina: - opisno - dijagramom toka (flow chart) Primjer 1: Načinite apstrakciju problema koju ćemo koristiti za ispis prvih 100 brojeva od 0-99. OPISNO KORAK1: postavi varijablu N na nulu KORAK2: ispiši N KORAK3: uvećaj varijablu N za jedan KORAK4: da li je varijabla N veća od 99? ƒ ako nije, idi na KORAK2: ƒ ako je, idi na KORAK5: KORAK5: kraj (prekid izvođenja) DIJAGRAM TOKA Dijagram toka nam omogu ćava grafičku apstrakciju željenog problema,a pri tom se koriste standardni simboli koji odgovaraju pojedinoj operaciji sl.1.2 Simbole povezujemo strelicama, čiji smjer označava tok pojedinih informacija iz bloka u blok. - definiranje po četka i kraja problema (dolazi na početku i na kraju) - ulazno / izlazne operacije - definiranje procesa u problemu - simbol odluke - veznik - bušena traka - bušena kartica 17 Slika 1.2 Grafički simboli za crtanje blok dijagrama Nacrtajmo sada dijagram toka za problem ispisa 100 brojeva Slika 2.2 Dijagram toka za ispis 100 brojeva 2.1.4 Pisanje izvornog programa u BASIC-u Pisanje programa u jeziku koje ra čunalo razumije naj češće se u literaturi naziva PROGRAMIRANJE, što nije pravilno, jer se pojam PROGRAMIRANJE odnosi isklju čivo na apstrakciju problema koji želimo riješiti računalom. Problem svodimo na kreiranje AL GORITMA, tj. postupka ili klju ča koji će nas najkra ćim putem dovesti do željenog rješenja. Stoga pisanje programa u BASIC-u i/ili nekom drugom programskom jeziku nije programiranje već KODIRANJE programa koji je izražen u hipotetičkom obliku (opisno, dijagram toka itd.) . Primjer 1: Kodirajmo u BASIC-u program iz prethodnog odjeljka za ispis 100 brojeva. Program kodiran u BASIC-u sastoji se od programskih linija koje sadrže osnovne naredbe. Svaka programska linija mora obavezno biti numerirana brojem izme đu 1 i 63999, dok svaka slijede ća programska linija mora imati redni broj ve ći od prethodne. Program kodiran u BASIC-u MIKRORA ČUNALO "ORAO" interpretira sekvencijalno od linije s manjim rednim brojem prema liniji s ve ćim rednim brojem, ukoliko programska linija ne sadržava instrukcije grananja koje skreću izvođenje programa. Prvo unesimo direktno u liniji (bez rednog broja): LIST [CR] Ukoliko se na ekranu pojavi znak > u slijede ćoj liniji, zna či da u tekstualnom prostoru ra čunala nema nikakvog programa. Ukoliko do đe do ispisivanja (listanja) teksta na ekran, pa te k nakon toga znak > tada ponovo direktno u liniji unesite NEW [CR] Čime ćete obrisati tekstualni prostor predvi đen za BASIC programe i na taj na čin omogu ćiti pisanje novog programa. Vratimo se konačno na naš primjer: N=0 ISPIŠI N N=N+1 N>99 STOP START NE DA 18 10 N=0 20 PRINT N 30 N=N+1 40 IF N>99 THEN END 50 GOTO 20 Napisani program će računalo početi izvoditi kad direktno u liniji napišemo: RUN [CR] što znači IZVRŠI, Rješenje našeg problema je na ekranu, tj. imat ćemo slijedeći ispis: 0 1 2 3 . . . 98 99 2.1.5 Mijenjanje izvornog programa Izvorni program je potrebno često mijenjati bilo zato, jer smo prilik om pisanja napravili grešku, tj. pogrešno unesli neku od naredbi, ili želimo isti program koristit i za rješenje još nekog srodnog problema, ali prethodno moramo dodati neke izmjene. Kako ne bismo zbog toga ponovo pisali novi program, koriste ći neke od tipki sa tastature, modificirat ćemo postojeći program.Takav postupak naziva se uređivanje programa na ekranu ("screen editing"). Koristimo tipke za pomak kursora: [ s], [u], [v], [t] i tipku [PF4]. Smjer strelice na tipki ozna čuje smjer pomaka kursora. Tipka [PF4] ima funkciju kopiranja teksta is pod kursora, Potpuni opis navedenih tipki je dan u odjeljku koji opisuje tastaturu. Navedimo na kraju primjer korištenja "editorskih" tipki. Primjer 1: Unesimo prvo program za crtanje sinusoide 10 PI=3.14 159 20 K=2*PI/256 30 FOR X=0 TO 255 40 Y=127+l 00* SIN(K*X) 50 PLOTX,Y 60 NBXT X 70 END > Program ponovo izvršimo tako da direktno u liniji unesemo RUN [CR] Na ekranu če se pojaviti jedna perioda sinusoide amplitude 100, a ujedno će se na ekranu nalaziti još i tekstualni dio programa. Sada bismo željeli da na ekranu bude ista sinusoida, ali da nema tekstualnog djela, odnosno našeg programa. Drugim riječima, moramo u programu navesti prethodno brisanje ekrana, a tek onda crtanje. To postižemo tako da između 20 i 30 programske linije umetnemo (insertiramo) naredbu za brisanje ekrana. Unesimo: 25 PRINT CHR$(12) [CR] na kraju i sada ponovo izvršimo program. Na ekranu sada imamo samo graf funkcije. Sljedeća promjena koju želimo je da nam se nacrta ista funkcija, ali dvije periode, te amplitudom 50. Unesimo prvo direktno (bez programa), u liniji [CTL] i [L] istovremeno čim obrišemo ekran te nakon toga LIST [CR] 19 Za dvije periode moramo mijenjati sadržaj linije 20 tj. umjesto 20 K=2*PI/256 mora biti 20 K=2*PI/128 Postupak izmjena je slijedeći : ƒ tipkom [ u] pomaknemo kursor do linije 20 ƒ tipkom [PF4] iskopiramo kompletan sadržaj linije do 256 ƒ sada se kursor nalazi ispod brojke 2 ƒ unesemo umjesto 256, 128 i pritisnemo na tipku [CR] ƒ za promjenu amplitude moramo u liniji 40 faktor 100 promijeniti u 50 ƒ tipkom [ v] pomaknemo kursor do linije 40 ƒ iskopirajmo kompletan sadržaj linije do 100 ƒ kursor se sada nalazi ispod brojke 1 ƒ umjesto 1 Unesimo [SP] (razmaknica) ƒ umjesto 0 Unesimo 5 ƒ tipkom [PF4] iskopiramo sve do kr aja linije i pritisnemo tipku [CR] Sada ponovo obrišemo ekran [CTL] i [L] istovremeno, te nakon toga LIST [CR] Opažamo da naš program sadrži sve izmjene. Nakon izvršenja programa na ekranu imamo novi graf funkcije sa traženim izmjenama. 2.2 ULAZNO/IZLAZNE naredbe ULAZNO/IZLAZNE naredbe služe za kontrolu toka podataka izme đu mikrora čunala ORAO i ulazno/izlaznih jedinica. U osnovnom obliku mikroračunalo ORAO ima za ulaznu jedinicu tastaturu, a kao izlaznu jedinicu prikaz na TV ekranu ili TV monitoru. 2.2.1 INPUT naredba INPUT naredba omogućava unos podataka sa tastature pod programskom kontrolom. Primjer 1: 10 INPUT X znači unesi jednu numeričku varijablu i priredi je simboličkoj varijabli X 20 INPUT X$ znači unesi jednu string varijablu i priredi je simboličkoj varijabli X$ Nakon što je ra čunalo interpretiralo naredbu INPUT, na ekranu se pojavi znak ? što zna či da korisnik može unijeti podatak (na kraju obavezno pritisnuti tipku [CR]). Ukoliko se prilikom upisa pojavila greška mikroračunalo odgovara sljedećim ispisom na ekranu: ? PONOVI UPIS te u novu liniju postavlja znak ?. Primjer 2 pokazuje istovremeni unos numeričkih i string varijabli. Svaka varijabla u INPUT naredbi mora biti od druge odvojena zarezom. Primjer 2: 10 INPUT X,X,Z,A$ višestruki unos podataka 20 20 INPUT"UNESI VRJEDNOST";X ispis poruke prije unosa 2.2.2 DATA i READ naredbe Naredbe DATA i READ se koriste uvijek zajedno, da bi se izvršilo prire đivanje vrijednosti pojedinim varijablama (znak "=" služi za istu svrhu). Naredba READ prire đuje sekvencijalno varijablama iz polja argumenta vrijednosti specificirane u polju argumenta DATA naredbe. Podaci u polju argumenta DATA naredbe moraju biti odvojeni zarezom. Primjer 1: 10 DATA 1,2,3,4,5 20 READ A,B,C,D,E ekvivalentan niz operacija je 10 A=1 20 B=2 30 C=3 40 D=4 50 E=5 Primjer 2: 10 DATA 1,2,ORAO,MIKRORAČUNALO,7 20 READ A,B,C$,D$,C ekvivalentan niz operacija je 10 A=1 20 S=2 30 C$="ORAO" 40 D$="MIKRORAĆUNALO" 50 C=7 2.2.3 RESTORE naredba Vraća podatkovnu kazaljku na prvi argument DATA naredbe Primjer 1: 10 DATA 1,2,3,4,5,6 20 READ A,B,C 30 RESTORE 40 READ D,E,F 50 RESTORE 60 READ G,H Ekvivalentan niz operacija je 10 A=1 20 B=2 30 C=3 40 D=1 50 E=2 60 F=3 70 G=1 80 H=2 2.2.4 PRINT naredba PRINT naredba omogu ćava korisniku da pod kontrolom BASIC program a i/ili direktno u liniji ispiše vrijednost željene varijable na ekran. O naredbi PRINT je već bilo govora u odjeljcima 2.1.1 i 2.1.2, pa sada više nećemo navoditi primjere. Kao specifičnost ovog BASIC-a navedimo da umjesto naredbe PRINT možemo koristiti znak ?. Primjer 1: 10?"UPiTNIK ZAMJENJUJE PRINT NAREDBU" 21 > RUN [CR] UPITNIK ZAMJENJUJE NAREDBU PRINT > LIST [CR] 10 PRINT"UPITNIK ZAMJENJUJE NAREDBU PRINT" Primjer 2: Razmotrimo još slijedeća dva programa 10?"MIKRORAĆUNALO"; 20?"ORAO" odnosno 10?"MIKRORAĆUNALO" 20?"ORAO" Nakon izvođenja prvog primjera imamo na ekranu ispis: MIKRORAČUNALO ORAO a nakon drugog MIKRORAČUNALO ORAO Znak ";" na kraju PRINT naredbe nam nastavlja slijedeći ispis u istoj liniji, dok PRINT bez ";" na kraju automatski generira ispis u novom retku. 2.3 PETLJE I POTPROGRAMI Primjer petlje smo upoznali več u odjeljku 2.1.3, tj. 100 puta smo ponavljali operaciju /ISPIŠI N/, /UVE ĆAJ N ZA JEDAN/, te testirali konačni uvjet /DA LI JE N>99/. U primjeru 1 iz odjeljka 2.1.4 problem iste petlje kodirali smo u BASIC-u. BASIC mikroračunala ORAO omogućava kodiranje petlje uz automatsko ispitivanje konačnog uvjeta. 2.3.1 FOR...NEXT naredbe Naredbe FOR i NEXT koriste se zajedno da oi se osnovala programska petlja. Petlja omogućava izvršenje jedne ili više naredbi određeni broj puta. FOR naredba sastoji se iz tri dijela: FOR,TO i STEP - FOR dio inicijalno postavlja po četni iznos varijable s kojim će se petlja početi izvoditi - TO dio specificira kona čni iznos varijable s kojim će petlja biti završena - STEP dio definira korak pove ćavanja varijable prilikom opetovanja (iteracije) Sve naredbe koje se nalaze unutar petlje izvršavaju se toliko puta kolike i petlja. Ako ne definiramo vrijednost za STEP, korak iteracije će biti automatski jedan. NEXT naredba dolazi na kraj petlje i njome se petlja zatvara. Dozvoljena je upotreba petlje unutar petlje, ali se one ne smiju preklapati (Primjer 1). Petlje koje završavaju na istom mjestu mogu biti zatvorene jednom NEXT naredbom npr. NEXT I,J Primjer 1: Ispis brojeva od 0 do 99 10 FOR N=0 TO 99 20 PRINT N 30 NEXT N Primjer 2: Nedozvoljena upotreba FOR...NEXT petlje: 22 100 FOR X=7 TO 20 200 PRINT X 210 FOR Y=0.25 TO 2.5 220 NEXT X 230 PRINT Y 240 NEXT Y Primjer 3: Petlje koje završavaju na istom mjestu: 10 FOR I=0 TO 10 STEP 2 20 FOR J=0 TO 20 STEP 4 30 PRINT I,J 40 NEXT J,I liniju 40 možemo još napisati: 40 NEXT J:NEXT I ili samo 40 NEXT:NEXT Primjer 4: Po četni iznos varijable, kona čni iznos varijable i korak mogu, tako đer, biti varijable čiji će iznos biti izračunat unutar programa ili definiran naredbom INPUT: 10 INPUT X, Y,Z 20 FOR I=X TO Y STEP Z 30 PRINT 1, 1ˆ2 40 NEXT RUN ?10,100,2 10 100 12 144 . . . . . . 100 10000 Primjer 5: Izračunavanje faktorijela 10 INPUT"N=";N 15 FA=1 20 IF N=0 THEN 60 30 FOR X=N TO 1 STEP -1 40 FA=FA*X 50 NEXT X 60 PRINT"N!=";FA 70 END RUN N = ? 3 [CR] N!= 6 > 2.3.2 GOTO naredba Naredba kojom se izvođenje programa bezuvjetno skreće na specificiranu liniju . Nakon toga program se dalje ponovo izvodi sekvencijalno od linije na koju je skrenut GOTO naredbom. Primjer 1: 100?"mikroračunalo"; 200 GOTO 300 250 A=2:B=3:C=A+B 300?"ORAO" 310?"PEL VARAŽDIN" 320?"LINIJA 250 NEĆE BITI IZVRŠENA" RUN 23 mikroračunalo ORAO PEL VARAŽDIN LINIJA 250 NEĆE BITI IZVRŠENA 2.3.3 GOSUB i RETURN naredbe Unutar programa često se pojavljuje zahtjev za izvršenje istog zadatka u različitim dijelovima programa. Svaki takav zadatak tada definiramo kao neovisnu cjelinu programa koja može biti testirana i izvođena odvojeno od tzv. GLAVNOG DJELA, a nazivamo je SUBRUTINA ili POTPROGRAM. Svaki POTPROGRAM mora biti zaklju čen naredbom RETURN, kako bi se kontrola izvo đenja ponovo vratila GLAVNOM DIJELU. Primjer korištenja GOSUB...RETURN naredbi je opisan u odjeljku 2.3.4 2.3.4 REM naredba REM naredba omogu ćava pisanje korisnikovog komentara u program. Preporu čuje se što češće korištenje naredbe REM unutar programa, zbog veće preglednosti i razumljivosti programa. Primjer 1: Korištenje potprograma Želimo nacrtati tri sinus funkcije: 1. amplituda 100 bez faznog pomaka s obzirom na ishodište 2. amplituta 50 i fazni pomak pi/4 radijana 3. amplituda 80 i fazni pomak pi/3 radijana 10 REM* 20 REM* GLAVNO TJELO PROGRAMA 30 REM* 35 REM 40 PI=3.141593 50 K=2*PI/256 60 FOR X=0 TO 255 65 REM 66 REM prva funkcija 67 REM 80 A=100:FI=0:GOSUB 1000 90 REM 92 REM druga funkcija 95 REM 100 A=50:FI=PI/4:GOSUB 1000 130 REM 135 REM treča funkcija 138 REM 140 A=80:FI=PI/3:GOSUB 1000 150 NEXT X 160 END:REM* KRAJ GLAVNOG TJELA 1000 REM * 1100 REM * potprogram za računanje 1200 REM * i crtanje točke 1300 REM * 1400 Y=128+A*SIN(K*X+FI) 1500 PLOTX,Y 1600 RETURN:REM* kraj potprograma RUN 24 Slika 3.2 Kao zaključak navedimo dvije važne značajke SUBRUTINA: 1. Dijeljenje programa u module koji mogu biti testirani i izvo đeni odvojeno od glavnog dijela, čime se povećava razumljivost i preglednost programa 2. Omogu ćavaju da se isti dio programa koristi za slične i/ili srodne probleme, a da se za svaki problem ne piše poseban program 2.3.5 ON naredba Koristi se u kombinaciji sa naredbama GOTO i GOSUB, čime se omogućava razgranjivanje programa iz jednog mjesta na više. Sintaksa ON naredbe je: ON I GOTO 100,200,300 ako je 1=1 izvodi se GOTO100 ako je 1=2 izvodi se GOTO200 ako je 1=3 izvodi se GOTO300 Primjer 1: Upotreba ON naredbe 10 INPUT L 20 ON I GOTO 50,60,70 30 END 50 PRINT"PRVI SKOK":END 60 PRINT"DRUGI SKOK":END 70 PRINT"TREĆI SKOK":END Ako je I veći od broja navedenih skokova, izvršava se prva slijedeća linija nakon ON...GOTO/GOSUB naredbe. Ako I ima negativnu vrijednost, korisnik će primiti od računala poruku da se pojavila greška. 2.3.6 IF...THEN naredba Naredba IF se koristi da bi se kontrola izvršavanja programa prebacila na drugi dio iz glavnog toka, ako je ispunjen određeni uvjet. 25 Naredba IF se koristi u kombinaciji sa slijedećim operatorima: 1. = ; jednako 2. <> ; razli čito 3. < ; manje 4. > ; ve će 5. <= ; manje ili jednako 6. >= ; ve će ili jednako Navedene operatore nazivamo operatori relacije ili odnosa. Sintaksa naredba IF je slijedeća: IF xxx THEN yyy Ukoliko je operacija ili izraz xxx istinit, tada se izvršava naredba yyy, a ukoliko je neistinit, tada se izvršava naredba u prvoj slijedećoj liniji nakon linije s IF naredbom. Primjer 1: Upotreba IF naredbe 10 INPUT A,B 20 IF A>B+4 THEN 50 30 IF A=3 THEN PRINT"TROJKA":END 40 IF A>B THEN PRINTA,B:END 50 PRINT(B-4) Primjer 2: Pogađanje brojeva 10 PRINT CHR$(12) 20 PRINT" POGAĐANJE BROJEVA " 40 Y=INT(100*RND(7)) 50 FOR 1=1 TO 10 60 INPUT X 70 IF XY THEN PRINT"PREVELIKI JE":GOTO100 83 PRINT 85 PRINT"BRAVO POGODILI STE U";I;"-om POKUŠAJU":GOTO190 100 NEXT I 120 PRINT:PRINT"NAŽALOST OVAJ PUT NISTE USPJELI" 190 PRINT 200 INPUT"ŽELITE LI JOŠ (DA/NE)";A$ 220 IF A$="DA" THEN 10 230 END 2.4 POLJA PODATAKA Polje podataka u BASIC-u za mikroračunalo ORAO definiramo na slijedeći način: X(I) ; jednodimenzionalno polje X(I,J) ; dvodimenzionalno polje X(I,J,K) ; trodimenzionalno polje gdje su I,J,K indeksi polja, koji terminiraju određeni element polja za I,J,K=0,l ... (n-1), npr.: X(3) predstavlja 4-ti element polja X(l,2) predstavlja element dvodimenzionalnog polja koji je smješten u prvom retku odn. drugom stupcu (vidi Primjer 1 ovog odjeljka) Opažamo da svako polje ima svoju dimenziju, kojom je ujedno i definiran broj elemenata u polju. Npr. X(3,4,2) je polje dimenzije 3 koje ima ukupno: (3+1)x(4+1)x(2+1)=60 elemenata. POLJE DAKLE PREDSTAVLJA SKUP INDEKSIRANIH VARIJABLI KOJE NAZIVAMO ELEMENTI POLJA. ELEMENT polja je predstavljen imenom polja i jednim ili više indeksa u zagradi. Elementi polja mogu biti numeričke i/ili string varijable, što specificiramo za potonje znakom $ u imenu npr.: X(i) ; i-ti element polja numeri čkih varijabli X$(i) ; i-ti element polja string varijabli Primjer 1: a. Formiranje jednodimenzionalnog polja 26 x(i) za i=0,1...9 x(0) x(1) x(2) . . . x(8) x(9) b. Formiranje dvodimenzionalnog polja x(i,j) za i=0,1,2 te j=0,1,2,3 Vidimo da dvodimenzionalno polje formiramo prema "brže" rastućem indeksu "i" i "sporije" rastućem indeksu "j". c. Formiranje trodimenzionalnog polja x(i,j,k) za i=0,1,2 ; j=0,1,2 ; k=0,1,2 x(0,0,0) x(0,1,0) x(0,2,0) x(1,0,0) x(1,1,0) x(1,2,0) x(2,0,0) x(2,1,0) x(2,2,0) x(0,0,1) x(0,1,1) x(0,2,1) x(1,0,1) x(1,1,1) x(1,2,1) x(2,0,1) x(2,1,1) x(2,2,1) x(0,0,2) x(0,1,2) x(0,2,2) x(1,0,2) x(1,1,2) x(1,2,2) x(2,0,2) x(2,1,2) x(2,2,2) 2.4.1 DIM naredba DIM naredbom deklariramo dimenziju polja,odnosno u memoriji rezerviramo prostor za željeno polje, te ujedno sve elemente polja postavimo na nulu. Primjer 1: 10 DIM X(10),X2(23,12),X4$(5) rezerviramo (10+1) elemenata za polje X,(23+1)x(12+1) za polje X2 i (5+1) elemenata za polje X4$ Vratimo se sada na primjer 1 iz odjeljka 2.2.2 Primjer 2: 10 DATA 1,2,3,4,5 20 READ A,B,C,D,E umjesto da koristimo pet numeri čkih varijabli, formirajmo jednodimenzionalno polje od 5 elemenata i priredimo elementima polja vrijednosti iz polja argumenta DATA naredbe: 10 DIM X(4):REM rezerviramo mjesto za 5 elemenata 20 FOR 1=0 TO 4:REM formiramo indeks pomoću petlje 30 READ X(I):REM upisivanje podataka u polje 40 NEXT I 50 DATA 1,2,3,4,5 Da bi provjerili pravilnost priređivanja vrijednosti pojedinim elementima, izvedimo slijedeće: direktno u liniji napišimo PRINT X(0),X(1),X(2),X(3),X(4) [CR] dobivamo slijedeći ispis 1 2 3 4 5 x(0,0) x(0,1) x(0,2) x(0,3) x(1,0) x(0,2) x(1,2) x(1,3) x(2,0) x(0,3) x(2,2) x(2,3) 27 što je potvrda pravilnosti priređivanja. 2.4.2 Pisanje podataka u polje Na prijašnjem primjeru smo nare dbama READ i DATA pokazali mogu ćnost upisivanja podataka u polje. Pokažimo još slijede ćim primjerom upisivanje podataka u polja pomo ću naraedbe INPUT, te matemati čkom funkcijom sinus. Primjer 1: 10 DIM X(5),Y(255),Z(5) 20 PI=3.141593:K=2*PI/256 30 FOR 1=0 TO 255 40 IF I]=6 THEN 90 50 READ X(I):INPUT Z(I) 90 Y(I)=100*SIN(K*I)+128 100 NEXT I 110 DATA 0,1,2,3,4,5 Navedenim primjerima smo pokazali kako pojedinom elementu polja priredimo numeričku vrijednost. Potreba za formiranjem polja pojavljuje se čim imamo skup srodnih vrijednosti koje želimo preparirati za daljnju obradu. 2.4.3 Čitanje podataka iz polja Poljem formiran skup srodnih podataka možemo sada koristiti pri daljnjoj obradi: - numeri čkih analiza - statisti čkih obrada itd. - Vidimo da se pojavljuje zahtjev, da elementima ulaznog po lja priredimo elemente novog polja (izlazno polje),ili da na temelju podataka ulaznog polja odredimo zna čajke polja (srednja vrijednost elemenata, standardna devijacija, maksimalna vrijednost elemenata itd.) ili, što je često slučaj, odredimo sortiranje elemenata po nekom ključu. Već smo rekli da je element polja jednoznačno definiran: - imenom polja - indeksom Drugim rije čima, podatak iz polja pro čitamo tako, da formiramo varijablu koja nosi ime polja, a indeksom specificiramo željeni element. Primjer 1: Suma dvaju elemenata polja: 100X1=X(4)+X(7) 110PRINT X1 Primjer 2: Srednja vrijednost elemenata polja Polazimo od matematičke definicije srednje vrijednosti () () ).....(*)/1(.....1/1 110110 1 0 −− − = ++=++== ∑ nn n i XXXnXXXnXinXsr U memoriji računala već imamo polje X(I) koje sadrži 100 elemenata. Program koji izračunava srednju vrijednost je: 90 N=100 100 S=0:REM početna parcijalna suma 110 FOR 1=0 TO 99 120 S=S+X(I):REM nova parcijalna suma 130 NEXT I 140 SV=S/N :REM srednja vrijednost 150 PRINT"SREDNJA VRIJEDNOST=";SV Primjer 3: Generiranje histograma Program formira ulazno polje "X" koje sadrži 185 slu čajnih brojeva izme đu 0 i 36. Prakti čno simuliramo 185 "bacanja" na ruletu. Na temelju elemenata ulaznog polja, program generira izlazno polje "Y", čiji elementi predstavljaju u čestalost 28 ponavljanja pojedinih brojeva kroz 185 bacanja. Broj, čiju u čestalost tražimo jednostavno je specificiran indeksom izlaznog polja, npr. Y(7) sadrži u čestalost "sedmice" u nizu od 185 bacanja. Program obuhva ća i crtanje histograma pomo ću grafi čkih naredbi, kojih je način korištenja opisan u poglavlju 2.11. Za generiranje slu čajnih brojeva koristimo funkciju RND(X) o kojoj će biti govora u odjeljku 2.7.2 . LIST 10 REM: 20 REM: HISTOGRAM 30 REM: 35 PRINTCHR$[(12) 40 DIMX(184):REM ULAZNI PODACI 45 DIMY(36):REM IZLAZNI PODACI 46 A=0 48 PRINT"GENERIRANJE ULAZNE TABELE* 50 F0RI=0TO184 60 X(I) = INT(37*RND(7)) 70 NEXTI 74 PRINT“GENERIRANJE HISTOGRAMA“ 75 REM: 76 REM: GENERIRANJE HISTOGRAMA 77 REM: 78 PRINT 80 F0RJ=0TO36 70 FORI=0TO184 100 IFX(I)=JTHENA=A+1 110 NEXT I 115 Y(J)=A:A=0 120 NEXT J 125 GOSUB1000 127 PRINTCHR$(4);TAB(10)"HIST0GRAM" 130 END 1000 REM: 1100 REM: CRTANJE 1200 REM: 1230 PRINTCHR$(12);CHR*(4) 1260 GOSUB2000 1300 FORI=0TO36 1400 MOV5*I+53,0 1500 DRAW5*I+53,Y(I)*16 1600 NEXT I 1700 RETURN 2000 REM: 2100 REM: SKALA 2200 REM: 2250 GOSUB3000 2300 FORY=0TO210STEP16 2400 MOV30,Y:DRAW32,Y 2450 MOW 253,Y:DRAW255,Y 2500 NEXT Y 2600 RETURN 3000 FORX=0TO31 3100 PRINT:NEXT 3200 FORX=0TO13 3300 PRINTX;CHR$(11);CHR$(11);CHR$(11) 3400 NEXT:RETURN > 29 30 Slika 4.2 HISTOGRAM Primjer 4: Sortiranje brojeva po veličini Algoritam, prema kojem se sortiranje provodi, u literaturi je poznat pod imenom "BUBBLE SORT". Dijagram toka je prikazan na slici 6.2., dok je mehanizam sortiranja po navedenom algoritmu prikazan na slici 5.2.. I=1 5 5 5 I+1=2 3 I=2 3 4 4 I+2=3 4 I=3 3 6 6 I+1=4 6 5>3 3<4 3<6 NEMA ZAMJENE ZAMJENA ZAMJENA I=1 5 5 5 I+1=2 4 I=2 4 6 6 I+2=3 6 I=3 4 3 3 I+1=4 3 5>4 4<6 4>3 NEMA ZAMJENE ZAMJENA NEMA ZAMJENE I=1 5 6 6 I+1=2 6 I=2 5 5 4 I+2=3 4 I=3 4 3 3 I+1=4 3 5<6 5>4 4>3 ZAMJENA NEMA ZAMJENE NEMA ZAMJENE Slika 5.2. BUBBLE SORT mehanizam Vidimo daše princip sortiranja bazira na zamjeni mjesta broja sljedbenika s prethodnikom, ukoliko je sljedbenik veći. Drugim riječima, brojevi koji su u polju ve ći, kao "mjehurići" putuju prema vrhu tabele, zato je i takav na čin sortiranja dobio ime BUBBLE SORT, jer riječ "bubble" na engleskom znači mjehurić. Opažamo da, osim indeksa I koji nam služi kao kazaljka elementa polja, imamo još jednu varijablu EX koja nam daje kriterij odluke. Na početku sortiranja je EX=0 koji odmah pri prvoj zamjeni poprima vrijednost "1" i zadržava je sve dok kazaljka ne dostigne dno tabele. Ukoliko je EX=1, tada postupak ponavljamo tako dugo dok EX ne postane "0" i kazaljka istovremeno pokazuje na dno tabele. Zamjenu dvaju elemenata u polju provedemo uz pomoć još jedne varijable T. KORAK1: T=X(I-1) ;X(I-1) spremamo na T KORAK2: X(I-1)=X(I) ;X(I ) spremamo na X(I-1) KORAK3: X(I)=T ;T VRATIMO NA X(I) KORAK4: kraj 31 START I=0 EX=0 X(I+1)>X(I) EX=1 X(I+1)↔X(I) I=I+1 END I=END I EX=0 DA DA NE NE NE 32 Slika 6.2 Dijagram toka BUBBLE SORT-a 10 REM: 20 REM: BUBBLE SORT 30 REM: 40 PRINTCHR*(12) 50 T=0 60 INPUT"KOLIKO BROJEVA ŽELITE SORTIRATI";N 65 PRINT 68 DIMX(N) 70 REM: 72 REM: UNOS PODATAKA 74 REM: 76 FORI=0TON-1 78 PRINTI+1;:INPUTX(I) 79 NEXT I 80 REM: 90 REM: POČETAK SORTIRANJA 95 REM: 100 EX=0 110 FORI=0TON-1 120 IF X(I + 1)>X(I)THENGOSUB500 130 NEXT i 140 IFEX<>0THEN100 145 GOSUB600 150 END 500 REM: 510 REM: ZAMJENA 520 REM: 540 EX=1 550 T=X(I):X(I)=X(I+1):X(I+1)=T 560 RETURN 600 REM: 610 REM: POTPROGRAM ZA ISPIS 620 REM: 625 PRINT:PRINT 650 FORI=0TON-1 660 PRINTI+1;". ";X(I) 670 NEXT I 680 RETURN > RUN KOLIKO BROJEVA ŽELITE SORTIRATI? 8 1 ? 123.456 2 ? 3456,45 3 ? 23 4 ? 678.345 5 ? 12.9090 6 ? 453 7 ? 22234 8 ? .034 1 . 22234 2 . 3456.45 3 . 678.345 4 . 453 5 . 123.456 6 . 23 7 . 12.909 8 . .034 2.5 STRINGOVI Pojam STRING-a smo već upoznali u odjeljku 2.1.1,tj. rekli smo da je STRING niz znakova koji mogu biti: - slova - brojevi - znakovi interpunkcija a nalaze se pod znakovima navodnika. Stringovi jedino ne mogu biti kontrolni znakovi npr. "[CTL][L]","[CR]" itd. String može biti uklju čen u kontekstu naredbi PRINT ili INPUT dok string varijable moraju obavezno na kraju sadržavati znak "$". Stringovi mogu, tako đer, biti elementi polja i tada ime polja mora tako đer sadržavati znak "$". Znak "$", dakle, predstavlja identifikacijski znak za stringove, odnosno string operator. Stringove možemo uspoređivati u smislu određivanja njihove jednakosti. 33 Primjer 1: Uspoređivanje stringova 10 A$ = "LIJEPO":B$ = "LIJEPO" 20 C$ = "RIJETKO":D$ = "ISTI SU" 30 IF A$=B$ THEN PRINT D$ 40 IF A$=C$ THEN PRINT D$ 50 PRINT"RAZLIČITI SU ! " Primjer 2: Zbrajanje stringova 10 READ A$,B$,C$,D$,E$,F$,G$ 20 S1$=A$+" "+B$+" "+F$+" "+G$ 30 S2$=A$+" "+B$+" "+C$+" "+D$+" "+E$ 40 PRINTS1$:PRINTS2$ 50 END 90 DATA SVAKI,POČETAK,IMA,SVOJE 95 DATA ČARI,JE,TEŽAK U slijedećim odjeljcima su opisane daljnje moguće operacije sa stringovima pomoću tzv. string funkcija. 2.5.1 ASC funkcija Funkcijom ASC(X$) priredimo nekoj numeri čkoj varijabli decimalnu vrijednost prvog znaka u stringu koja odgovara YU (ASCII) kodu. Primjer 1: 10 D=ASC("?") 20 E=ASC("A") 30 X$="ORAO":X=ASC(X$) 40 PRINT D;E;X RUN 63 65 79 Vrijednosti kodova za pojedine znakove dane su u tablici YU (ASCII) kodova na kraju priručnika. 2.5.2 CHR$ funkcija Funkcija CHR$(X) pretvara decimalnu vrijednost YU (ASCII) koda u alfanumeri čki znak, odnosno tvori string od jednog karaktera. CHR$(X) funkcija ja dakle inverzna funkcija od ASC(X$) funkcije. Primjer 1: 10 PRINT CHR$(63);CHR$(65);CHR$(79) RUN ? A O 2.5.3 LBFT$ funkcija Funkcijom LEFT$(X$,N) tvorimo podstring od-stringa X$ dužine N znakova, počevši s lijeve strane. Primjer 1: 10 X$="TELEVIZIJA" 20 X4$=LEFT$(X$,4) 30 PRINT X4$ RUN TELE > 2.5.4 RIGHT$ funkcija Funkcijom RIGHT$(X$,N) tvorimo podstring od stringa X$ dužine N znakova počevši s desne strane. Primjer 1: 34 10 X$="TELEVIZIJA" 20 X6$=RIGHT$(X$,6) 30 PRINT X6$ RUN VIZIJA > 2.5.5 MID$ funkcija Funkcijom MID$(X$,I,J), tvorimo podstring funkciju od stringa X$ dugačak J znakova, počevši s I-tim znakom. Primjer 1: 10 X$="TELEVIZIJA" 20 A$=MID$(X$,3,4) 30 PRINT A$ RUN LEVI > 2.5.6 LEN funkcija Funkcijom LEN(X$) priredimo nekoj numeričkoj varijabli dužinu stringa X$. Primjer 1; 10 A$="RAĆUNALO" 20 X=LEN(A$) 30 PRINT X RUN 8 > jer string "RAČUNALO" ima 8 znakova. 2.5.7 STR$ funkcija Funkcijom STR$(X) pretvaramo numeričku vrijednost varijable X u string. Primjer 1: 10 INPUT X: REM X je numerička varijabla 20 X$=STR$(X) 30 PRINT X$ RUN ? 25 25 2.5.8 VAL funkcija Funkcijom VAL(X$) priredimo numeričkoj varijabli numeričku vrijednost string X$. 10 A$="3.141593" 20 A=VAL(A$) 30 PRINT A RUN 3.141593 > 2.5.9 Primjeri programa sa STRING funkcijama Primjer 1: Pretvorba binarnog broja u decimalni LIST 10 REM: 35 20 REM: BINARNO-DECIMALNA PRETVORBA 30 REM: 40 INPUT "BINARNI BROJ=";B$ 50 L=LEN(B$):D=0 60 FORI=1TOL 70 A=VAL(MID$(B$,I,1)) 80 IFA>1THENPRINT"BROJ NIJE BINARNI":END 90 D=D+A*2ˆ(L-I) 92 D=INT(D) 95 NEXT I 100 PRINT"DECIMALNI EKVIVALENT=";D > 36 RUN BINARNI BR0J=? 1111111111111111 DECIMALNI EKVIVALENT= 65535 > RUN BINARNI BR0J=? 1010 DECIMALNI EKVIVALENT= 10 > RUN BINARNI BROJ=? 01111111 DECIMALNI EKVIVALENT= 127 Primjer 2: Pretvorba decimalnog broja <=65535 u binarni ekvivalent LIST 10 REM: 20 REM: DECIMALNO-BINARNA PRETVORBA 30 REM: 35 B$="" 40 INPUT"DECIMALNI BROJ=";D 50 X=INT(D/256):GOSUB80 60 X=D-256*X;GOSUB80 65 PRINT"BINARNI EKVIVALENT=":PRINT 68 PRINTB$ 70 END 80 FORI=7TO0STEP-1 90 B=SGN(XAND2ˆI) 100 B$=B$+STR$(B) 120 NEXT I 130 RETURN > RUN DECIMALNI BROJ=? 65535 BINARNI EKVIVALENT= 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 > RUN DECIMALNI BROJ=? 127 BINARNI EKVIVALENT= 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 > RUN DECIMALNI BR0J=? 40960 BINARNI EKVIVALENT= 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 > RUN DECIMALNI BR0J=? 10 BINARNI EKVIVALENT= 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 Primjer 3: Pretvorba heksadecimalnog broja <=FFFF u decimalni ekvivalent LIST 10 REM: 11 REM: HEXABECIMALNO U DECIMALNO 12 REM: 15 INPUT"HEXABECIMALNI BROJ=";A$ 20 A$=RIGHT$("0000"+A$,4):A=0 30 FORJ1=1TO4:C$=MID$(A$,J1,1) 40 IFC$>="A"ANDC$<="F"THENC=ASC(C$)-ASC("A")+10 50 IFC$>="0"ANDC$<=" 9" THENC=ASC(C$)-ASC("0") 60 A=A*16+C:NEXTJ1 70 PRINT"DECIMALNI EKVIVALENT=";A > RUN HEXADECIMALNI BROJ=? FFFF DECIMALNI EKVIVALENT= 65535 > RUN HEXADECIMALNI BROJ=? DD11 DECIMALNI EKVIVALENT= 56593 37 > RUN HEXADECIMALNI BROJ=? C274 DECIMALNI EKVIVALENT= 49780 > RUN HEXADECIMALNI BROJ=? 007F DECIMALNI EKVIVALENT= 127 > RUN HEXADECIMALNI BROJ=? 03FF DECIMALNI EKVIVALENT= 1023 > Primjer 4: Pretvorba decimalnog broja <=65535 u heksadecimalni ekvivalent LIST 10 REM: 20 REM: DECIMALNO U HEXADECIMALNO 30 REM* 40 INPUT"DECIMALNI BROJ=";Q 45 GOSUB50:PRINT"HEXADECIMALNI EKVIVALENT=";Q$ 46 END 50 B=INT(Q/256):GOSUB90 60 H1$=H$ 70 B=Q-B*256:GOSUB90 80 H2$=H$:Q$=Hl$+H2$:RETURN 90 V=BAND15:H=(BAND240)/16 100 IFH>9THENH=H+55*GOTO120 110 H=H+48 120 IFV>9THENV=V+55;GOTO140 130 V=V+48 140 H$=CHR$(H)+CHR$(V);RETURN > RUN DECIMALNI BROJ=? 65535 HEXADECIMALMI EKVIVALENT=FFFF > RUN DECIMALNI RROJ=? 1023 HFXADECIMALNI EKVIVALENT=03FF >RUN DECIMALNI BROJ=? 49780 HEXADECIMALNI EKVIVALENT=C274 Primjer 5: Određivanje dana u tjednu iz datuma. LIST 10 REM: 12 REM: DAN U TJEDNU 15 REM: 20 DIMM$(12),W$(7) 25 REM: FORMIRANJE POLJA 30 FORI=1TO12 40 READ M$(I) 50 NEXT I 60 FORI=1TO7 70 READW$(I) 80 NEXT I 85 REM: OČITAVANJE DATUMA 86 REM: I IZRAČUNAVANJE DANA U TJEDNU 90 GOSUB300:REM UNOS DATUMA 95 M=M1 100 IFM>2 THEN 140 110 M=M+10 120 Y=Y-1 130 GOTO150 140 M=M-2 38 150 I=Y-INT(Y/100)*100 160 K=INT(Y/100) 170 J=INT((13*M-l)/5)+INT(I/4)4INT(K/4) 180 W=J+I+T-2*K 190 W=W-INT(W/7)%7+l 195 REM* NEDJELJA=1,PONEDJELJAK=2, ,.. 198 PRINT 200 PRINTW$(W);" ";T;",';M$(Ml);Yl;"." 210 DATA JANUAR ,FEBRUAR,MART,APRL,MAJ,JUNI,JULI 220 DATA AUGUST,SEPTEMBAR,OKTOBAR,NOVEMBAR,DECEMBAR 230 DATA NEDJELJA,PONEDJELJAK,UTORAK,SRIJEDA,ČETVRTAK,PETAK,SUBOTA 240 END 300 INPUTT,M1,Y 310 Y1=Y 320 IFM1=2ANDT=29THEN GOSUB400 330 RETURN 400 P=Y/4*P1=INT(P) 410 DP=P-P1 420 IFDP=0THEN RETURN 430 PRINT"POGRESAN UNOS !!! " 440 PRINT"GODINA NIJE PRESTUPNA" 450 END > RUN ? 16,03,1959 PONEDJELJAK 16 .MART 1959 > RUN ? 01,01,1985 UTORAK 1 .JANUAR 1985 . > RUN ? 03,08,1985 SUBOTA 3 .AUGUST 1985 . > RUN ? 08,03,1985 PETAK 8 .MART 1985 . > RUN ? 24,11,1956 SUBOTA 24,NOVEMRAR 1956 RUN > ? 29,02,1985 POGREŠAN UNOS !!! GODIMA NIJE PRESTUPNA > RUN ? 29,02,1984 SRIJEDA 29 .FEBRUAR 1984 . Primjer 6: Sortiranje naziva po abecednom redu QUICK SORT 50 REM: 60 REM: QUICK SORT 70 REM: 110 INPUT"KOLIKO NAZIVA ŽELITE SORTIRATI":N 115 PRINT 120 DIMI$(N),A(N) 130 FORI=1TON 140 A(I)=I 160 PRINTI;:INPUTI$(I) 180 NEXT I 550 DIMS(30,2) 560 Sl=l 570 S(l,l)=l 580 S(1,2)=N 590 L=S(Sl,l) 600 R=S(S1,2) 610 Sl=Sl-1 620 I=L 630 J=R 39 640 H=A(INT(L+R)/2) 650 IFI$(A(1))>=I$(H)THEN680 655 IFI>=RTHEN680 660 I=I+1 670 GOTO650 680 IFI$(A(J)X=I$(H)THEN710 685 IFJ<=LTHEN710 690 J=J-1 700 G0T0680 710 IFI>JGOTO770 720 Z=A(I) 730 A(I)=A(J) 740 A(J)=Z 750 I=I+1 760 J=J-1 770 IFI<=JGOTO650 780 IF(R-I)<=(J-L)GOTO850 790 IFL>=JGOTO830 300 S1=S1+1 810 S(S1,1)=L 820 S(S1,2)=J 830 L=I 840 GOTO900 850 IFI>=RGOTO89O 860 Sl=Sl+l 870 S(S1,1)=I 880 S(S1,2)=R 890 R=J 900 IFR>LGOTO620 910 IFS1<>0G0T0590 950 PRINT 1000 FORI=1TON 1010 PRINTI;".";" ";l$(A(l)) 1020 NEXT 1030 END > RUN KOLIKO NAZIVA ŽELITE SORTIRATI? 10 1 ? FALKESTEINERHORSTUIEBER LIMPY 2 ? BOBALEC BJURA 3 ? PETKOVIC FRANE 4 ? FUCEK BJUKA 5 ? PECAROS ISTVAN 6 ? RABIC STIJEPAN 7 ? SCHUNBGLIEBER HANS 8 ? ANIC ROBERT 9 ? ALIC BLAGOJE 10 ? BOROVIC TOMISLAV 1 . ALIC BLAGOJE 2 . ANIC ROBERT 3 . BOBALEC BJURA 4 . BOROVIC TOMISLAV 5 . FALKESTEINERHORSTUIEBER LIMPY 6 . PECAROS ISTVAN 7 . PETKOVIC FRANE 8 . PUCEK BJUKA 9 . RABIC STIJEPAN 10 . SCHUNBGLIEBER HANS 2.6 ARITMETIČKO/LOGIČKE OPERACIJE U odjeljku 2.1.2 upoznali smo nekoliko osnovnih aritmetičkih operacija: zbrajanje, množenje, potenciranje. Osim aritmetičkih operacija, BASIC mikroračunala ORAO, ima mogućnost obrade logičkih operacija. Operacije i pripadajući operatori po prioritetu izvršavanja u aritmetičko/logičkom izrazu su: OPERACIJA OPERATOR Potenciranje ^ negacija - množenje i dijeljenje */ zbrajanje i oduzimanje + - jednakost = 40 različito <> manje ili jednake <= veće ili >= logičko NE NOT logičko I AND logičko ILI OR Ostale aritmeti čko/logičke operacije tvorimo pomo ću osnovnih, pod uvjetom da pazimo na prioritet izvo đenja osnovnih operacija, jer u protivnom možemo dobiti pogrešan rezultat. Za pravilno izračunavanje kompleksnijih izraza koristimo operatore za grupiranje: ( lijeva zagrada ) desna zagrada 2.6.1 Aritmetičke operacije: Primjer 1: Kodiranje pojedinih aritmetičkih operacija u BASIC-u IZRAZ KODIRANJE U BASIC-U k K 3,14159 3.14159 a+2,54 A+2.54 b-c a B-CA xy X*Y i:j I/J c 2 C^2 2+ + c ba (A+B)/(C+2) 22 1 yx + 1/(X^2+Y*2) [(a+b)c-1]d ((A+B)*C-1)*D) U slučaju da izraz u vanjskoj zagradi sadrži još izraz u unutarnjoj zagradi, prvo će se izvršiti izraz u unutarnjoj zagradi. Broj lijevih zagrada, mora biti jednak broju desnih zagrada, u protivnom nam računalo šalje poruku o pogrešci. Primjer 2: Izraz A^B+C/D -E*F je ekvivalentan izrazu (A*B)+(C/D)-(E*F) jer su operacije u zagradama većeg prioriteta od zbrajanja i oduzimanja. Primjer 3: Izraz A/B*C je ekvivalentan izrazu (A/D)*C dok je izraz I-J+K ekvivalenta izvršavanja operacija. Ponekad je potrebno naglasiti redoslijed izvršavanja prema prioritetu jednako vrijednih operacija s lijeve strane prema desnoj kod množenja i dijeljenja. Primjer 4: 8/4*2 nam da rezultat 4 dok 8/(4*2) da rezultat 1 Prilikom pisanja izraza, programer se mora držati slijedećih pravila: 1. Dva aritmeti čka operatora se ne smiju pojaviti jedan iza drugoga A*/B nije dozvoljeno 2. Sve ra čunske operacije moraju biti izražene eksplicitno (A+8)*(C+D) a ne (A+B)(C+D) 41 3. Izraz cba je dvosmislen, zato izbjegavamo zapis A^B^C Nedvosmisleni zapisi su A^(B^C) što znači )( cba odnosno (A^B)^C što znači cba )( Jednostavan primjer pokazuje da je 2^(3^2)=512 dok je (2^3)^2=64 2.6.2 Logičke operacije Logičkim operacijama tvorimo logičke ili Boole-ove funkcije između operanada. Osnovne logičke funkcije su: negacija NOT konjukcija AND disjunkcija OR Navedeni redoslijed je ujedno i nivo prioriteta izvođenja logičkih operacija u BASIC-u. Kompleksnije logičke funkcije tvorimo pomoću osnovnih. Primjer 1: Tabela istine osnovnih logičkih operacija A B A AND B A OR B NOT A NOT B 0 0 0 0 1 1 0 1 0 1 1 0 1 0 0 1 0 1 1 1 1 1 0 0 Primjer 2: Tvorba kompleksnijih logičkih operacija pomoću osnovnih a.) Ekskluzivna disjunkcija: Ekskluzivna disjunkcija je definirana kao BABABAZ ⊕=+= dok je ekvivalencija definirana kao negacija ekskluzivne disjunkcije, tj. BABAABZ ⊕=+= A B BA ⊕ BA ⊕ 0 0 0 1 0 1 1 0 1 0 1 0 1 1 0 1 Gornja tabela sadrži tabelu istine za ekskluzivnu disjunkciju i ekvivalenciju između jednobitnih varijabli. Sve logičke operacije možemo koristiti i na nivou višebitnih operanada,npr.: Primjer 3: Logičke operacije s 8-bitnim operandima a.) konjukcija : A= 1010 1111 ; 175 decimalno B= 1111 1010 ; 250 decimalno A AND B= 1010 1010 ; 170 decimalno 42 b.) disjunkcija 0100 0001 ; 65 decimalno B= 1000 0000 ; 128 decimalno A OR B= 1100 0001 ; 193 decimalno c.) negacija A= 1111 1110 ; 254 decimalno NOT A= 0000 0001 ; 1 decimalno d.) ekskluzivna disjunkcija A= 1100 1011 ; 203 decimalno B= 1010 1101 ; 173 decimalno A EOR B= 0110 0110 ; 102 decimalno e.) ekvivalencija A= 1100 1011 ; 173 decimalno B= 1010 1101 ; 45 decimalno A ENOR B= 1001 1001 ; 153 decimalno Primjer 4: Kodirajmo sada u BASIC-u logičke operacije iz primjera 3 43 a.) Konjukcija 10 REM: KONJUKCIJA 20 A=175:B=250 30 Z=A AND B RUN 170 b.) disjunkcija 10REM: DISJUNKCIJA 20 A=65:B=128 30 Z=A OR B 40 PRINTZ RUN 193 c.) negacija 10 REM: NEGACIJA 20 A=254 30 Z=NOT A 40 Z=Z AND 255 50 PRINTZ RUN 1 d.) ekskluzivna disjunkcija 10 REM: EOR 20 A=20 30 Z=NOT A AND B OR NOT B AND A RUN 102 e.) ekvivalencija 10 REM: ENOR 20 A=203:B=173 30 Z=NOT A AND B OR NOT B AND A 40 Z=NOT Z AND 255 50 PRINTZ RUN 153 Pokažimo slijede ćim primjerom kako je mogu će alfanumeri čki znak programski prikazati na ekranu u invertiranom obliku - (crno na bijeloj pozadini). Primjer 5: Inverzija znaka 10 A$="A" 20 PRINTA$ 30 A=ASC(A$) 40 A=A OR 128 50 AI$=CHR$(A) RUN A A > 2.7 FUNKCIJE Funkcije, koje su uključene u BASIC-u mikroračunala ORAO možemo podijeliti u tri osnovne grupe: ƒ numeri čke funkcije ƒ posebne funkcije ƒ korisni čki definirane funkcije 44 45 2.7.1 Numeričke funkcije Numerička funkcija je definirana u obliku: y=f(x) tj. varijabli "y" priredimo funkcijsku vrije dnost "f" od argumenta x". Argument "x" može, tako đer, biti numerički ili Boole-ov izraz. 2.7.1.1 ABS(X) funkcija Funkcijom ABS(X) dobivamo apsolutnu vrijednost argumenta X u smislu: ABS(X)=X ako je X>=0 ABS(X)=-X ako je x<0 2.7.1.2 INT(X) funkcija Funkcijom INT(X) dobivamo prvu manju cjelobrojnu vrijednost decimalnog argumenta X. npr. INT(9.7)=9 INT(-5.1)=-6 2.7.1.3 RND(X) funkcija Funkcija RND(X) generira slu čajni broj izme đu 0 i 1 na šest decimalnih mjesta. Ukoliko je potrebno generirati slučajni broj u nekom drugom intervalu, tada koristimo jednadžbu: (B-A)*RND(7)+A gdje je "B" gornja granica željenog intervala, a "A" donja granica intervala. Upozorenje: RND(0) generira uvijek isti broj. Primjer 1: Generiranje slučajnog broja između 0 i 100 10 Y=100"RND(7) 20 PRINTY 30 GOTO10 2.7.1.4 SGN(X) funkcija Funkcija Y=SGN(X) priredi varijabli Y predznak argumenta X u smislu: Y=0 za X=0 Y=1 za X>0 Y=-1 za X<0 Primjer 4: 10 A=0.125 20 B=0 30 C=-12.74 40 PRINTSGN(A),SGN(B),SGM(C) RUN 1 0 -1 2.7.1.5 SQR(X) funkcija Funkcija Y=SQR(X) priredi varijabli Y kvadratni korijen argumenta X. npr. 46 PRINT SQR(2) [CR] daje 1.41421 2.7.1.6 EXP(X) funkcija Funkcija Y=EXP(X) priredi varijabli Y potenciju broja "e" (e=2 .71828). Vrijednost argum enta definira potenciju broja "e". Primjer 1: operacija Y=2.71828*X je ekvivalentna operaciji Y=EXP(X) 2.7.1.7 LOG(X) funkcija Funkcija Y=LOG(X) priredi varijabli Y prirodni logaritam argumenta X (po bazi "e"). Za dobivanje logaritma po bazi "b" od nekog broja koristimo jednadžbu: log x=logx/log b Primjer 1: Odredite dekadski logaritam od broja 2 10 B=10 20 Y=(LOG(2))/(LOG(10)) 30 PRINTY 2.7.1.8 SIN(X) funkcija Funkcija Y=SIN(X) priredi varijabli Y sinus od argumenta X izraženog u radijanima. 2.7.1.9 COS(X) funkcija Funkcija Y=COS(X) priredi varijabli Y kosinus od argumenta X izraženog u radijanima. 2.7.1.10 TAN(X) funkcija Funkcija Y=TAN(X) priredi varijabli Y tangens od argumenta X izraženog u radijanima. 2.7.1.11 ATN(X) funkcija Funkcija Y=ATN(X) priredi varijabli Y vrijednost arkus tangens. Na kraju navedimo da BASIC mikroračunala ORAO ne posjeduje funkcije kao: y=arcsinx i y=arccosx pa stoga moramo koristiti slijedeće jednadžbe: a.)       − = 21 arctanarcsin x xx ; za |x| <1 b.)         −= x xx 21arctanarccos ; za 0 2.7.2.3 TAB(X) funkcija Funkcija TAB(X) postavlja kursor na X-u kolonu broje ći od po četka reda. U slu čaju da je trenuta čna pozicija veća od specificirane, tj. X-te, ispis se nastavlja u prvoj slijedećoj koloni. Primjer 1: 10 PRINTTAB(10);"MIKRORAČUNALO";TAB(15);"ORAO" ispis počinje od 10-te kolone s MIKRORAČUNALO,a od 15-te s ORAO Primjer 2: 10 PRINTTAB(10);"MIKRORAČUNALO";TAB(5);"ORAO" ispis po činje od 10-te kolone s MIKRORA ČUNALO i tada se kursor nalazi u 23-oj koloni što je ve će od vrijednosti specificirane u slijedećoj TAB funkciji, tako da će se ispis nastaviti od 23-e kolone s ORAO. Na kraju napomenimo,da se funkcije POS(X),SPC(X) i TAB(X) koriste isključivo s PRINT naredbom. 2.7.3 Korisnički definirane funkcije BASIC mikroračunala ORAO omogućava korisniku da sam definira svoju funkciju naredbom DEF FNy(X) gdje y može biti znak YU (ASCII) koda, dok X predstavlja argument definirane funkcije. Primjer 1: Definirajmo funkciju y=exp(x) kao sumu prvih 7 članova Taylor-ovog reda funkcije y=e x. Taylor-ov red funkcije y=ex je definiran kao: ∑ ∞ = ++++++=== 0 32 .....!.....!3!2!11!n nn x n xxxx n xey 48 Suma privih 7 članova je tada 72012024621 65432 xxxxxxy ++++++= odnosno kodirano u BASIC-u 10 DEFFNE(X)=1+X+(1/2)*Xˆ2+(1/6)*Xˆ3+(1/24)*Xˆ4+(1/120)*Xˆ5+(1/720)*Xˆ6 20 FOR X=-5 TO 5 30 PRINT X;FNE(X) 40 NEXT X Primjer 2: Definirajte funkciju koja računa površinu kruga 10 PI=3.141593 20 DEF FNP(R)=R*2*PI 30 INPUT R 40 PRINT FNP(R) RUN ? 2 12.5664 2.8 RAD S MEMORIJOM Dosadašnjim primjerima pokazali smo kako se simboli čkim varijablama u BASIC-u priredi numeri čka vrijednost. Sve numeri čke varijable su izražene aritmetikom kliznog za reza ("flooating point"), u opsegu od 10E-38 do 10E38 i svaka varijabla tada okupira 4 byte-a memorije. Slijedećim primjerima ćemo pokazati kako je moguće da nam memorijska lokacija bude varijabla. 2.8.1 Upisivanje podatka u memorijsku lokaciju Mikroprocesor 6502, koji predstavlja ce ntralni hardware-ski element mikrora čunala ORAO, podržava samo 8- bitnu aritmetiku, dok aritmetiku kliznog zareza generira BASIC interpreter. Svaka memorijska lokacija je veli čine 8 bita. U jednoj memorijskoj lokaciji je, dakle, mogu će pohraniti 8 bitnu informaciju, tj. broj između: 0 i 255 ; (2^8-1) Kada želimo da nam neka memorijska lokacija predstavlja 8 bitnu varijablu koristimo naredbu: POKE I,J tj. na lokaciju s decimalnom adresom I upišemo dekadski sadržaj J. 0<= I <=65535 0<= J <=255 Primjer 1: Na memorijsku lokaciju 0300 heksadecimalno upišite F0 heksadecimalno - 0300 hexa =768 decimalno - F0 hexa =240 decimalno 10 1=768:J=240 20 POKE I,J RUN > Da se uvjerimo u ispravnost našeg programa pritisnimo tipku RESET Na ekranu sada imamo ispis: *** O R A O *** * _ Unesimo sada M0300 [CR] 0300 F0 [@] 49 * _ Vidimo da je naš program dobro izveden. Vratimo se ponovo u BASIC. *BW [CR] > UPOZORENJE !!! Naredbom POKE moguće je uništiti korisnički BASIC program, ukoliko upisujete na memorijske lokacije između 0400 i 1FFF heksadecimalno, odnosno 1024 i 8191 decimalno, ako prethodno ne ograni čite opseg memorije, o čemu ce biti govora u odjeljku 2.8.4 (Primjer 2.). 2.8.2 Ispisivanje sadržaja memorijske lokacije Naredbom POKE upisujemo na memorijsku lokaciju tako, da nam memorijska lokacija može predstavljati 8 bitnu varijablu. Ako želimo ispisati sadržaj te varijable odnosno memorijske lokacije, služimo se naredbom: PEEK(X) gdje je X decimalna adresa željene memorijske lokacije između 0 i 65535. Primjer 1: Ispišite sadržaj memorijske lokacije 0300 heksadecimalno: 10 PRINT PEEK(768) RUN 240 > jer je to bila posljednja vrijednost koju smo upisali na tu memorijsku lokaciju. Primjer 2: Prikaz sadržaja memorije na ekranu LIST 1 REM:========================= 2 REM: 3 REM: PRIKAZ SADRŽAJA MEMORIJE 4 REM: NA EKRANU HEXADECIMALNO 5 REM: 6 REM:========================= 7 : 10 INPUT"POČETNA ADRESA (dec.) =";S 20 INPUT"KONAČNA ADRESA (dec.) =";E 30 DEFFNM(X)=PEEK(X) 40 FORX=STOE 50 Q=X;GOSUB900 55 X$=Q$ 60 Y=FNM(X):Q=Y:GOSUB900 70 Y$=RIGHT$(Q$,2) 80 PRINTX$;SPC(2);Y$ 90 NEXT X 100 END 900 REM: DECIMALNO/HEXABECIMALNO 1000 B=INT(Q/256):GOSUB1400 1100 H1$=H$ 1200 B=Q-B*256:GOSUB1400 1300 H2$=H$:Q$=H1$+H2$:RETURN 1400 V=BAND15:H=(BAND240)/16 1500 IFH>9THENH=H+55:GOTO1700 1600 H=H+48 1700 IFV>9THENV=V+55:GOTO1900 1800 V=V+48 1900 H$=CHR$(H)+CHR$(V):RETURN > 50 RUN POČETNA ADRESA (dec.) =? 56593 KONAČNA ADRESA (dec,) =? 56608 DD11 A2 DD12 FF DD13 86 DD14 88 DD15 9A DD16 A9 DD17 11 DD18 A0 DD19 BB DD1A 85 DD1B 01 DD1C 84 DD1D 02 DD1E 85 DD1F 04 DD20 84 2.8.3 Ekran Mikroračunalo ORAO podržava prikaz 32 alfanumeri čka znaka u 32 linije na ekra nu TV prijemnika ili TV monitora, i grafiku rezolucije 256 x 256 to čaka (o grafici će biti govora u poglavlju 2.11. ). Slika prikazuje raster ekrana u alfanumeri čkom modu i grafi čkom modu. Korisniku je, tako đer, dozvoljeno da sam definira veli činu aktivnog dijela prikaza. Ujedno je mogu će programski redefinirati osnovni set znakova ("programmable character generator") mikroračunala ORAO. 0 3 1 0 s KOLONAt u R E D v 31 51 2.8.3.1 Ograničavanje i pozicioniranje aktivnog djela prikaza Definiramo: POKE 236,L po četnu kolonu postavimo na L-tu poziciju 0<=L<=31 na RESET L=0 POKE 237,D posljednju kolonu postavimo na D-tu poziciju 0<=D<=31 na RESET D=31 Podrazumijeva se da L uvijek mora biti manji od D. POKE 234, G prvi redak postavimo na G-tu poziciju 0<=G<=31 na RESET G=0 POKE 235,P posljednji redak postavimo 0<=P<=31 na RESET P=31 Podrazumijeva se da G uvijek mora biti manji od P. Primjer 1: Ograničavanje aktivnog dijela prikaza Želimo aktivni dio prikaza ograničiti na 32 kolone i 4 retka L=0 D=31 G=0 P=3 10 PRINT CHR$(12) 20 L=0:D=31:G=0:P=3 30 POKE 236,L:POKE237,D POKE234,G:POKE235,P 0,255 255,255 u Y v 0,0 s X t 255,0 52 RUN > Unesemo li sada direktno u liniji : LIST [CR] vidimo da je sada moguće listanje samo u ograničenom dijelu prikaza. 2.8.3.2 Definiranje korisničkog seta znakova Mikroračunalo ORAO,osim standardnog seta YU (ASCII) znakova,nudi korisniku mogu ćnost da definira svoj vlastiti set znakova. Takva mogu ćnost postaje zanimljiva, kada, npr., korisnik želi, umjesto velikih slova latinice, velika slova ćirilice, ili, npr., umjesto malih slova, set grafičkih simbola itd. Postupak se svodi na definiranje novog karakter generatora i inicijalizaciju vektora adrese novog seta znakova, a pri tome važe slijedeća pravila: 1. Novi karakter generator mora biti isklju čivo lociran na početku memorijske stranice isključivši nultu, prvu i drugu stranicu 2. Svaki znak okupira blok od 8 byte-a memorije 3. Ukoliko se novi karakter nalazi u memoriji koja je predvi đena za tekstualni prostor BASIC-a, memoriju je potrebno ograničiti (vidi Primjer 2: poglavlja 2.8.4) 4. Vektori adrese su slijede ći: ZNAKOVI = 513 decimalno VELIKA SLOVA = 514 decimalno MALA SLOVA = 515 decimalno 5. Na vektor adrese upišemo stranicu memorije na kojoj se nalazi novi karakter generator Primjer 1: Izmjena seta znakova malih slova Želimo da nam se pritiskom na mala slova (uključimo s [PF1] ) pojavljuju grafički simboli novog seta. Svaki blok okupira blok od 8 byte-a u smislu $08 s početak stranice npr. 0300 $1C $7F $7F $7F $6B $49 $41 $41 s drugi znak $5D $7F $6B $3E $14 $1C $08 2 0 2 1 2 2 2 3 24 2 5 2 6 2 7 0=crna točka 1=bijela točka 53 Opažamo da su težine bitova u karakter generatoru in verzne težinama binarnog koda, tj. pozicija bita 2^7 ima težinu 2^0,2^6 t 2^1 itd. Nakon izmjene svih znakova pritiskom na tipku [PF1] uklju čimo mala slova. Sada će se pritiskom na tipku redom: [^] pojaviti prvi simbol [A] pojaviti drugi simbol itd. U priloženom programu izmijenjena su samo prva dva zn aka malih slova tj. [^] i [A], a ostale tipke daju neki slučajni oblik. LIST 1 REM: 2 REM: IZMJENA SETA ZNAKOVA MALIH SLOVA 3 REM: 5 REM: 10 REM: NOVI SET ZNAKOVA SE NALAZI 11 REM: NA TREĆOJ STRANICI MEMORIJE 12 MP=3:REM STRANICA MEMORIJE 20 VA=515:REM VEKTOR ADRESE MALIH SLOVA 30 POKEVA,MP 40 REM: DEFINICIJA PRVIH DVAJU SIMBOLA 50 FORX=768TO783 60 READ Y:POKE X,Y 70 NEXT X 72 REM: OSTALE ZNAKOVE DEFINIRAMO BIJELO 75 FORX=784TO1023:POKEX,255:NEXT 80 END 90 DATA 8,28,127,127,127,107,73,65 100 DATA 65,93,127,107,62,20,28,8 > 2.8.4 Pozivanje strojnih programa iz BASIC-a BASIC mikroračunala ORAO nudi nam mogu ćnost, da osim osnovnih naredb i, pozivamo pod kontrolom BASIC programa strojne programe koje smo sami napisali ili već postoje u ROM-u. To postižemo funkcijom : U=USR(U) Nakon što BASIC interpretira ovu funkciju, po činje izvo đenje programa čija je startna adresa upisana na lokacijama: ƒ 11 (decimalno) - niži dio adrese decimalno ƒ 12 (decimalno) - viši dio adrese decimalno Svi strojni programi koje pozivamo iz BASIC-a funkcijo m USR moraju završavati naredbom RTS, kako bismo nakon izvođnja, kontrolu ponovo vratili BASIC interpreteru. Primjer 1: Crtanje kružnice strojnim programom U MONITOR ROM-u mikrora čunala ORAO se nalazi strojni program za crtanje kružnice. Startna adresa tog programa je FF06 (heksadecimalno). Za korektno izvođenje navedeni program zahtijeva, tri parametra : ƒ koordinata središta XS,YS ƒ polumjer R Prije pozivanja programa moramo na memorijske lokacije, kojima su definirani navedeni parametri, upisati željene numeričke vrijednosti. ADRESE tih lokacija su : ƒ XS = 226 decimalno ƒ YS = 227 decimalno ƒ R = 248 decimalno Dalje postupamo na slijedeći način: 1. 1.Inicijaliziramo vektor startne ad rese -startna adresa heksadecimalno je FF 06 viši dio u u niži dio ƒ viši dio decimalno = 255 ƒ niži dio decimalno = 6 -na lokaciju 11 dec. upišemo niži dio adrese 6 t 11 54 -na lokaciju 12 dec. upišemo visi dio adrese 255 t 12 3. Na lokacije XS,YS, i R upišemo željene parametre 4. Funkcijom USR pozovemo že ljeni program Navedeni postupak kodiran u BASIC-u je: LIST 10 REM; 20 REM: POZIVANJE STROJNIH PROGRAMA 25 REM: USR funkcijom 30 REM: 50 REM: 1. INICIJALIZACIJA LEKTORA STARTNE ADRESE 60 POKE11,6:POKE12,255 70 REM: 2. INICIJALIZACIJA PARAMETARA 80 INPUT"KOORDINATE SREDIŠTA";XS,YS 90 INPUT"POLUMJER";R 100 POKE224,XS:POKE227,YS:POKE248,R 110 REM: 3. POZIVANJE STROJNOG PROGRAMA 120 U=USR(U) 130 END > RUN KOORDINATE SREDIŠTA? 127,127 POLUMJER? 100 > Primjer 2: Generiranje zvuka Program za generiranje zvuka sastoji se od 1. 10-20 upisivanje strojnog programa u memoriju od lokacije 1000-1011 heksadecimalno odnosno 4096- 4113 decimalno 2. 30 inicijalizacija vektora po četne adrese 55 početna adresa strojnog programa je 1000 heksadecimalno niži dio adrese je 00 = 0 decimalno viši dio adrese je 10 = 16 decimalno 3. 40-50 unos parametara tona i upis na lokacije E0 i E1 heksadecimalno 00E0 = 224 decimalno 00E1 = 225 decimalno 4. 52 pozivanje strojnog programa funkcijom USR 5. 55-80 18 byte-a strojnog programa (strojni kod je izražen decimalno) UKOLIKO STE NAKON UKLJU ČIVANJA RA ČUNALA, BASIC POZVALI KAO ŠTO JE OPISANO U POGLAVLJU 1.1, TJ. BEZ PRETHODNOG OGRANI ČAVANJA MEMORIJE, TADA PRIJE UNOSA PROGRAMA ZA GENERIRANJE ZVUKA PRITIS NITE TIPKU "RESET" I IZVEDITE SLIJEDE ĆU SEKVENCIJU: *BC [CR] MEMORIJA ? 4095 [CR] DULJINA LINIJE ? [CR] 3070 LOKACIJA > _ Sada smo ponovo u BASIC-u, ali na raspolaganju imamo za BASIC programe samo 3070 lokacija umjesto 7167 kad memorija nije ograničena. Mehanizam ograničavanja memorije funkcionira na slijedeći način: Na pitanje MEMORIJA ? mi unosimo maksimalnu adresu (decimalno) koja odre đuje vrh korisni čke memorije ("TOP OF MEMORY"), koju BASIC interpreter smije uzet i za memoriranje našeg iz vornog programa. U našem primjeru to je 4095 decimalno, odnosno 0FFF heksadecimalno, te smo na taj na čin dio memorije mikroračunala ORAO od 1000 heksadecimalno do 1FFF rezervirali za strojne programe ili u nekom drugom slučaju za podatke iz npr A/D pretvarača. Minimalni iznos koji smijemo unijeti na pitanje MEMORIJA ? je 1026, ali u tom slu čaju imamo na raspolaganju samo 1 byte memorije, što nije dovoljno niti za najmanji BASIC program. Trenutno raspoloživi iznos memorije možemo ispitati funkcijom PRINT FRE(X) [CR] ili PRINT FRE(X$)[CR] LIST 1 REM:====================== 2 REM: 3 REM: GENERIRANJE ZVUKA 4 REM: 5 REM:====================== 6 : 7 REM: UPISIVANJE STROJNOG PROGRAMA U MEMORIJU 8 : 10 FORX=4096TO4113 15 READY:POKEX,Y 20 NEXTX 25 REM: INICIJALIZACIJA VEKTORA POČETNE ADRESE $1000 30 POKE11,0:POKE12,16 45 INPUT"VISINA TONA (MAX. 255)";F % 48 T=255/F 49 REM: UPISIVANJE PARAMETARA TONA U MEMORIJU $E0 I $E1 50 POKE224,F:POKE225,T 52 U=USR(U):REM POZIVANJE STROJNOG PROGRAMA 54 END 55 REM: STROJNI PROGRAM ZA ZVUK 60 DATA 162,255,164,224,140,0 70 DATA 136,136,208,253,202,208 80 DATA 245,198,225, 16,239,96 > * * *B* *B* GENERIRANJE ZVUKA *B* *X10001011 1000 A2 FF LDX *FF 56 1002 A4 E0 LDY E0 1004 8C 00 88 STY 8800 1007 88 DEY 1008 D0 FD BNE 1007 100A CA DEX 100B D0 F5 BNE 1002 100D C6 E1 DEC E1 100F 10 EF BPL 1000 1011 60 RTS * *RUN VISINA TONA (MAX. 255)? 255 > RUN VISINA TONA (MAX. 255)? 47 2.9 SISTEMSKE KOMANDE Komande su naredbe koje BASIC interpreter izvrša va, nakon što su unesen e preko tastature u ra čunalo,bez numeriranja programske linije -izravno. Sistemske komande se koriste za izravan ulaz ili izlaz podataka sa, ili u periferne jedinice. Pojedine sistemske komande,također, direktno mijenjaju sadržaj tekstualnog prostora BASIC-a. 2.9.1 LOAD I LOADC komande LOAD komanda briše memoriju tekstualnog prostora i automatski u čitava novi korisni čki program s audio kazete. Kompletna sintaksa LOAD komande je : LOAD"ime programa"početna adresa 1. Ime programa smije sadržavati maksimalno 12 znakova YU (ASCII) koda osim znakova navodnika 2. Po četna adresa mora obavezno biti izražena heksadecimalno 3. Za pozivanje BASIC programa s audio kazete po četna adresa je uvijek 0400 i nije obavezna u sintaksi komande LOAD Primjer 1: Pozivanje BASIC programa s kazete Pozovimo s demo kazete program pod imenom LOAD"SORT.BAS" REPRODUKCIJA ? uključimo reprodukciju na kazetofonu i [CR] Sada računalo traži na kazeti program pod imenom SORT.BAS. Ukoliko se program SORT.BAS ne nalazi na početku kazete računalo će ispisati imena svih programa koji se nalaze ispred traženog. Do pojave prompta ">" i kursora računalo čita program sa kazete i memorira ga u tekstualni prostor. Nakon : > _ Računalo je učitalo program koji je sada spreman za izvođenje. Za pozivanje strojnih programa moramo koristiti potpunu sintaksu naredbe LOAD, tj. moramo navesti po četnu lokaciju od koje će program nakon učitavanja biti smješten. Primjer 2: Pozivanje strojnih programa s kazete Pozovimo s demo kazete program ZVUK.BIN LOAD"ZVUK.BIN"1000 [CR] REPRODUKCIJA ? uključimo reprodukciju [CR] > _ 57 Sada je program ZVUK.BIN učitan u memoriji od lokacije 1000. Budući da je program za zvuk pozicijski neovisan, možemo ga pozvati u memoriju i od lokacije 1500 LOAD"ZVUK.BIN"1500 [CR] REPRODUKCIJA ? [CR] > _ Sada je naš program smješten u memoriji od lokacije 1500. LOADC komanda služi za ispis kataloga imena programa koji su na kazeti. LOADC [CR] REPRODUKCIJA ? [CR] Nakon toga na ekranu će nam se sekvencijalno pojavljivati imena svih programa koje je ra čunalo našlo na kazeti. LOADC REPRODUKCIJA ? TORANJ.BAS 0400 063C 023C HISTOGRAM.BAS 0400 067D 029B SORT.BAS 0400 05BC 01BC DATUM.BAS 0400 072C 032C HEXADECBAS 0400 0500 0100 DECHEXA,BAS 0400 052E 012E QUICKSORT,BAS 0400 06C7 02C7 BUTWORTH.BAS 0400 071A 031A ZVUK.BIN 1000 1011 0011 VURA.BAS 0400 0B13 0913 FILTRIRANJE 0400 0615 0215 Vidimo da je ispis podijeljen u četiri polja: 1.polje : IME 2.polje : po četna adresa 3.polje : kona čna adresa 4.polje : veli čina programa (heksadecimalno) Katalogiranje kazete prekidamo pritiskom na tipku [CTL] 2.9.2 SAVE komanda SAVE komandu koristimo za pohranjivanje programa koje smo napisali u BASIC-u ili MINIASSEMBLER-u. Potpuna sintaksa naredbe SAVE je SAVE"ime programa"početna adresa,konačna adresa 1. Ime programa smije sadržavati 12 znakova YU (ASCII) koda (isklju čeni znakovi navodnika i kontrolni kodovi) 2. Po četna i konačna adresa moraju obavezno biti izražene heksadecimalno 3. Za pohranjivanje BASIC programa po četnu i kona čnu adresu ne treba navesti, jer ra čunalo automatski uzima 0400 za početnu adresu, a konačnu izračuna iz dužine programa Primjer 1: Pohranjivanje BASIC programa na kazetu SAVE"TEST" [CR] SNIMANJE ? uključimo snimanje i [CR] Nakon toga iz zvučnika će se čuti zvuk programa koje računalo kodira u audio signal i šalje prema kazetofonu. Nakon: > _ program je snimljen na kazetu. 58 Primjer 2: Pohranjivanje sadržaja ekrana na kazetu SAVE"EKRAN"6000,7FFF [CR] SNIMANJE ? uključimo snimanje i [CR] do ponovne pojave prompta i kursora ra čunalo šalje u kazetofon sadržaj memorijskih lokacija od 6000 do 7FFF koje služe za video prikaz ("VIDEO RAM") Srednja brzina prijenosa podataka između računala i kazetofona je 1500 baud-a (1500 bita u sekundi ). 2.9.3 LIST komanda LIST komanda može biti korištena na četiri načina: 1. LIST bez dodatnih specifikacija 2. LIST sa jednom specifikacijom 3. LIST sa dvije specifikacije 4. LIST sa tri specifikacije Komanda LIST nam služi za ispisivanje izvornog programa (listanje) na ekranu ili štampač. 1. LIST lista cijeli izvorni program 2. LIST n lista samo n-tu programsku liniju 3. LIST-n lista program do n-te linije LISTn- lista program od n-te linije do kraja 4. LISTn-m lista od n-te do m- te linije uz uvjet da je m>n Pritiskom na tipke [CTL]i[C] istovremeno, prekidamo listanje programa. 2.10 KONTROLNE KOMANDE/NAREDBE Kontrolne komande nam služe za kontrolu izvođenja BASIC programa. 2.10.1 RUN komanda Komanda RUN starta izvo đenje BASIC programa po čevši s linijom koja ima najmanji redni broj, te ujedno pred izvođenjem programa sve varijable postavi na nulu. Komandu RUN možemo, tako đer, koristiti sa dodatnom specifikacijom,tj.: RUN n po činje izvoditi program od n-te linije i postavi sve varijable na nulu Izvođenje BASIC programa prekinemo pritiskom na tipke [CTL] i [C] 2.10.2 STOP naredba STOP naredba zaustavlja izvođenje programa i ispisuje poruku s rednim brojem linije u kojoj je interpretirana. Primjer 1: 10 PRINT"MIKRORACUNALO" 20 STOP 30 PRINT"ORAO" RUN MIKRORAČUNALO STOP U 20 > _ 2.10.3 CONT komanda Kada ra čunalo interpretira komandu CONT,nastavlja s izvo đenjem programa od mjesta gdje je bio prekinut naredbom STOP ili pritiskom na tipke [CTL] [C]. 59 2.10.4 END naredba Naredba END definira kraj programa, ali nije obavezna. 2.10.5 NEW komanda Komandom NEW brišemo izvorni BASIC pr ogram iz memorije 3 postavljamo ka zaljku tekstualnog prostora na početak. 2.11 GRAFIKA Mikroračunalo ORAO podržava grafiku visoke rezolucije 256 x 256 u pet grafi čkih na čina. Ekran u svih pet grafičkih načina predstavlja prvi kvadrant kartezijevog koordinatnog sustava. Grafički način definiramo tako, da na lokaciju GS=522 (decimalno) upišemo grafički kod M. M=0 crta bijelo 0 Opažate da se ništa atraktivno nije dogodilo, jer grafi čki kursor nije vidljiv, iako smo ga prethodnom komandom postavili u ishodište koordinatnog sustava. 2.11.2 DRAW naredba Naredbom DRAW X,Y izvučemo liniju X,Y. unesite direktno u liniji: DRAM 255,255 [CR] čime ste izvukli dijagonalu preko ekrana. Grafi čki kursor se sada nalazi na poziciji 255,255. Da se u to uvjerite unesite ponovo direktno u liniji: DRAW 127,0 [CR;] čime ste izvukli liniju do točke 127,0 relativno od posljednje pozicije grafičkog kursora. Primjer 1: Crtanje kvadrata 60 10 A=0:B=127:C=255 20 MOVA,B 30 DRAWB,C 40 DRAWC,B 50 DRAWB,A 2.11.3 PLOT naredba Unesite direktno u liniji Naredba PLOT X,Y postavlja grafički kursor na poziciju X,Y i na toj poziciji nacrta točku. [CTLXL]PLOT 127,127 [CR] Čime ćete nacrtati jednu grafičku točku na sredini ekrana. Primjer 1: Crtanje eksponencijalne funkcije naredbom PLOT 10 FORX=0TO255 20 Y=100*(1-EXP(-X/10)) 30 PLOT X,Y 40 NEXT X Primjer 2: Crtanje eksponencijalne funkcije naredbama MOV i DRAW 10 MOV0,0 20 FOR X=0 TO 255 30 Y=100*(1-EXP(-X/10)) 40 DRAW X,Y 50 NEXT X Opažamo da nam naredba DRAW vrši linearnu interpolaciju izmedju dvije točke. 2.11.4 Animirana grafika Pojam animirane grafike se odnosi na crtanje objekata koji se pokre ću na grafi čkom zaslonu. Da bi objektu na ekranu dali pokret, postupamo na slijedeći način: ƒ KORAK1: Nacrtamo željeni objekt u prvoj fazi pokreta i prikazujemo ga T1 vremena ƒ KORAK2: Brišemo nacrtani objekt potpuno ili djelomi čno ƒ KORAK3: Crtamo objekt u drugoj fazi pokreta na istoj ili promijenjenoj poziciji i prikazujemo ga T2 vremena ƒ KORAK4: Da li su sve faze pokreta prikazane: - ako nisu idi na KORAK2 - ako jesu idi na KORAK5: ƒ KORAK5: Kraj animacije Brisanje objekta na ekranu mikroračunala ORAO omogućava nam promjena grafičkog načina. Primjer 1: Gibanje radij vektora po kružnom luku LIST 1 REM: 2 REM: ANIMACIJA RADIJ VEKTORA 3 REM: 4 PRINTCHR*(12) 10 K=2*3.141593/256 20 GS=522:MO=6:M1=1 30 FORT=0T063STEP5 40 Y=100*SIN(K*T) 50 X=127*C0S(K*T) 60 POKEGS,M0 80 GOSUB100 90 POKEGS,M1:GOSUB200 95 GOSUB100 97 NEXTT 98 POKEGS,M0:GOSUB100 99 END 100 MOV0,0;DRAWX,Y:RETURN 200 FORA=0TO400:NEXTA 210 RETURN > 61 Analogni sat je slijedeći primjer animirane grafike. Primjer 2: Analogni sat Analogni sat je slijedeći primjer animirane grafike. Primjer 2: Analogni sat 10 REM:================== 15 REM: 18 REM: ANALOGNI SAT 20 REM: 22 REM:================== 25 PRINTCHR$(12) 37 INPUT"TOČNO VRJEME SAT,MIN";A$,B$ 38 GOSUB3000:REM* RAČUNANJE POZICIJA KAZALJKI 40 M=522:CR=1:BJ=O 41 REM 42 REM GLAVNO TIJELO 43 REM 45 PRINTCHR$(12) 46 PI=3.14159$K=2*PI/600 47 X0=127*Y0=127 50 GOSUB200:REM* BROJČANIK 51 REM: 52 REM: POČETAK IGRE 53 REM: 54 R=A:REM==POČETNA POZICIJA MALE KAZALJKE 55 F0RT2=600T00STEP-10 56 R1=B+T2 57 POKEM,0 60 GOSUB6500 62 GOSUB800:GOSUB6000 64 GOSUB600 65 GOSUB6800 66 GOSUB800:GOSUB6000 68 GOSUB600:REM=CRTANJE MALE 70 GOSUB400:REM=SEKUNDER 75 POKEM,l:GOSUB6500:GOSUB800:GOSUB6000*GOSUB600 80 W=R1/6O 90 W1=INT(W) 100 DW=W-W1 110 IFDW=.5THENGOSUB1000 190 NEXT 195 GOTO55 199 END 200 REM* 210 REM* CRTANJE BROJCANIKA 220 REM* 222 POKEM,BJ*REM==BIJELO NA CRNOM== 237 C=100 238 POKE11,6:POKE12,255 240 POKE226,X0*POKE227,Y0 250 POKE248,C-1 260 U=USR(U) 280 FORT=0TO599STEP50 290 X=X0+C*COS(K*T):Y=Y0+C*SIN(K*T) 300 MOVX,Y 310 X2=X+10*C0S(T*K):Y2=Y+10*SIN(K*T) 320 DRAWX2,Y2 330 NEXT 350 RETURN 400 REM* 410 REM* SEKUNDER 420 REM* 430 FORT=600TO0STEP-10 435 POKEM,0 440 MOVX0,Y0 445 GOSUB500 450 DRAWXS,YS 460 FORD=0TO330:NEXT 462 POKE11,0:POKE12,3 464 U=USR(U) 470 GOSUB2000:REM*BRISANJE. SEKUNDERA 480 POKEM,0:GOSUB6800:GOSUB800:GOSUB6000:GOSUB600 482 GOSUB6500:GOSUB800:GOSUB6000:GOSUB600 498 NEXT 499 RETURN 500 REM* 62 510 REM* POZICIJA SEKUNDERA 520 REM* 525 T1=T+150 530 XS=X0+90*COS(T1*K) 540 YS=Y0+90*SIN(T1*K) 550 RETURN 600 REM* 610 REM* CRTANJE KAZALJKI 620 REM* 630 MOVX0,Y0:DRAWP1,P2 640 MOVP1,P2:DRAWP3,P4 645 MOVP3,P4:DRAWP5,P6 650 MOVP5,P6:DRAWX0,Y0 660 RETURN 800 REM* 810 REM* POZICIJA KAZALJKI 820 REM* 840 M1=X0+ E*COS((F-G)*K) 845 M2=Y0+ E*SIN((F-G)*K) 850 M3=X0+ H*COS(F*K) 855 M4=Y0+ H*SIN(F*K) 860 M5=X0+ E*COS((F+G)*K) 865 M6=Y0+ E*SIN<(F+G)*K) 870 RETURN 1000 REM* 1100 REM* POMAK MALE 1200 REM* 1300 FOKEM,l:GOSUB6800:GOSUB800:GOSUB6000:GOSUB600 1310 R=R-5:POKEM,0 1320 GOSUB6800:GOSUB800:GOSUB6000:GOSUB600 1400 RETURN 2000 REM* 2100 REM* BRISANJE SEKUNDERA 2200 REM* 2300 POKEM,1 2400 MOVX0,Y0:DRAWXS,YS 2500 RETURN 3000 REM* 3100 REM* RAČUNANJE POČETNIH POZICIJA KAZALJKI 3200 REM* 3300 A=VAL(A$):B=VAL(B$) 3400 B=(60-B)*10+150 3500 A=(12-A)*50+150 3700 I=0 3800 FORX=750TO150STEP-60 3900 IFX CONT 210 .998491 211 .998491 212 .998491 213 .998491 214 .998491 215 .998491 216 .998491 217 .998491 218 .998491 219 .998491 220 .998491 221 .998491 222 .998491 223 .998491 224 .998491 225 .998491 226 .998491 227 .998491 228 .998491 229 .998491 230 .998491 231 .998491 232 .998491 233 .998491 234 .998491 235 .998491 236 .998491 237 .998491 238 .998491 239 .998491 240 .998491 241 .998491 242 .998491 243 .998491 244 .998491 245 .998491 246 .998491 247 .998491 248 .998491 249 .998491 250 .998491 251 .998491 252 .998491 253 .998491 254 .998491 255 .998491 66 Primjer 2: Filtriranje signala U programu se koristi isti algoritam kao i u primjeru 1 LIST 10 REM:====================== 15 REM: 20 REM: FILTRIRANJE 35 REM: 36 REM:====================== 37 : 40 REM:FREKVENCIJA REZANJA=1000Hz 67 REM: T=40E-6 sec ("sampling rate") 95 : 96 PRINTCHR$(12) 98 PRINT"OSNOVNA FREKVENCIJA = 97.65 Hz" 99 PRINT"SUPERPONIRANA FREKVENCIJA=3906.25 Hz" 100 W2=0:W1=0 101 K=2*3.14159/256 102 DEFFNS(N)=SIN(K*N)+.5*SIN(40*K*N) 110 FORN=0TO255 120 W0=FNS(N)+1.649*W1-.702*W2 130 Y=1.323E-2*W0+2.646E-2*Wl+W2*1.323E-2 140 PLOTN,160+50*Y 145 PLOTN,100+50*FNS(N) 150 REM: 155 REM: REALIZACIJA KAŠNJENJA 156 REM: 160 W2=W1:W1=W0 170 NEXT N 180 END Ulazni signal x(nT) Diskretni Buttworth algoritam Izlazni signal y(nT) 67 > 68 Primjer 3: Crtanje prostorne funkcije z=1/(1+x^2+y^2) na crnoj pozadini LIST 10 REM*********************** 20 REM* * 30 REM* T 0 R A N J * 40 REM* * 50 REM* z=1/(l+x^2+y^2) * 60 REM* * 70 REM*********************** 75 : 80 REM* 81 REM* DEFINICIJA GRAFIKE 82 REM* 97 : 98 P0KE522,0 100 REM* 102 REM* GLAVNO TJELO PROGRAMA 104 REM* 105 PRINTCHR$(12) 110 CZ=30 120 FORX=10TO-6STEP-1 130 FORY=10TO-10STEP-.O125 135 GOSUB800 140 MOVY1,X1 150 Y=Y-.25 160 GOSUB800 170 DRAWY1,X1 190 NEXT:NEXT 200 END 800 REM* 810 REM* RAČUNANJE TOČAKA 820 REM* 830 U=1/(1+X*X+Y*Y):V=1+X/CZ 840 XP=(U*150+30)/V 850 X1=XP*1.35 860 YP=(Y+15)/V 870 Y1=YP*8 880 RETURN > 69 Primjer 4: Crtanje prostorne funkcije z=exp(sinx+cosy) na bijeloj pozadini LIST 10 REM*********************** 12 REM* 20 REM* G R E B E N I 22 REM* 25 REM* Z=EXP(SIN(X)+C0S(Y)) 30 REM* 32 REM*********************** 33 : 34 REM: INVERZIJA EKRANA 35 PRINTCHR$(12):GOSUB36:GOTO40 36 FORX=768TO791*READC:POKEX,C:NEXTX 37 POKEll,0:POKE12,3:U=USR(U) 38 RETURN 39 REM* GLAVNO TJELO PROGRAMA 40 CZ=60 50 PI=3.141593 60 K=2*PI/16 80 P0KE522,1 100 FORX=-15TO15STEP,5 110 FORY=-10TO10STEP.03125 115 GOSUB800 116 IFX1>255THENX1=255 200 MOVY1,X1 202 Y=Y+,5 204 GOSUB800 205 IFX1>255THENX1=255 207 DRAWY1,X1 220 NEXT:NEXT 222 END 700 REM: 750 REM: RAČUNANJE TOČAKA 760 REM: 800 L=SIN(K*X) 850 M=COS(K*Y) 860 U=EXP(L+M) 870 V=1+X/CZ 880 XP=(U*50+50)/V 890 X1=XP*.5 900 YP=Y+15/V 910 Y1=YP*8 950 RETURN 955 REM: 956 REM: STROJNI PROGRAM ZA INVERZIJU 957 REM: EKRANA 960 DATA 169,96,162,127,160,0 962 DATA 133,225,132,224,169,255 964 DATA 145,224,200,208,251,230 966 DATA 225,228,225,176,245,96 B********************* *B* *B* INVERZIJA EKRANA *B* *B********************* *B *X03000317 0300 A9 60 LDA *60 0302 A2 7F LDX *7F 0304 A0 00 LDY *00 0306 85 E1 STA E1 0308 84 EO STY EO 030A A9 FF LDA *FF 030C 91 EO STA