Mrorao102 Orao Manual
orao_manual
User Manual:
Open the PDF directly: View PDF .
Page Count: 86
Download | |
Open PDF In Browser | View PDF |
1 Autori: PONGRAČIĆ IVAN — ZEBEC BRANKO MIKRORAČUNALO ORAO 102 PRIRUČNIK 2 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 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 4 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 5 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. 6 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 7167 LOKACIJA > _ [CR] 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 7 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 JA JA JA JA JA JA JA JA JA JA SAM SAM SAM SAM SAM SAM SAM SAM SAM SAM SAM U U U u u u u u u u u PETLJI PETLJI PETLJI PETLJI PETLJI PETLJI PETLJI PETLJI PETLJI PETLJI 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] 8 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 primjer, 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 [CTL] G [CTL] F [CTL] H [CTL] K [CTL] I [CTL] J [CTL] V [CTL] E [CTL] B [CTL] U [CTL] D [CTL] M [CTL] C briše ekran zvučni signal "beep" briše tekst od kursora do kraja ekrana pomiče kursor za jedno mjesto u lijevo pomiče kursor za jedan redak prema gore pomiče kursor za jedno mjesto u desno pomiče kursor za jedan redak prema dolje zvučni signal "beep" prilikom pritiska na neku tipku briše tekst od kursora do kraja linije uključuje štampač (printer) isključuje štampač vraća kursor na početak ekrana vraća kursor na početak reda (carriage return) prekid izvođenja programa (escape) Poneke tipke imaju dva znaka. Donji znak 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 9 kursor lijevo kursor dolje [s][u] [v][t] kursor gore kursor desno Preostale četiri tipke su tzv. funkcijske tipke. [PF1] [PF2] [PF3] [PF4] Pritiskom na [PF1] računalo ispisuje mala slova. Povratak ispisivanja 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 20 30 40 FOR 1=0 TO 255 Y=100*SIN(I/40)+128 PLOT I,Y NEXT Program ćemo pokrenuti naredbom RUN > _ RUN [CR] Na ekranu će se iscrtati funkcija sinus. Detaljniji opis korištenih 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. 10 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 zahvate popravlja ili mijenja sadržaj bilo koje instrukcijske linije. Prilikom 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 kazetofon. 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]. 11 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 SLIKA FUNKCIJA SINUS PETLJA. ASS POTPROGRAM.ASS POKUS.BAS SLIKA.DAT [CTL] 0400 6000 0400 1000 1100 0400 6000 07FE 7FFH 082A 102A 1234 148A 8000 03FE 1FFF 042A 002A 0134 108A 2000 > _ 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 12 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 1000 A9 1002 20 1005 A2 1007 A9 1009 20 100C CA 100F 60 100F [CR] CA LDA #0A F1 FF JSR FFF1 10 LDX #10 41 LDA #41 F1 FF JSR FFF1 DEX RTS Lijeva strana disassemblerskog listinga prikazuje strojni kod, kojeg ustvari 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 namijenjen 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 njegovo 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 13 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 pregledno smješteni na ekranu. O formatiranju ispisa bit će govora u odjeljku 2.7.2. 3*3=9 3.14159/2=1 7*7.2+4/5=51.2 SQR(2)=1.41421 ;množenje ;dijeljenje ;aritmetički izraz ;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 obavezno pritisnuti [CR] 14 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] 15 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 16 Slika 1.2 Grafički simboli za crtanje blok dijagrama Nacrtajmo sada dijagram toka za problem ispisa 100 brojeva START N=0 ISPIŠI N N=N+1 NE N>99 DA STOP 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 ALGORITMA, 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 tek 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: 17 10 20 30 40 50 N=0 PRINT N N=N+1 IF N>99 THEN END 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 prilikom pisanja napravili grešku, tj. pogrešno unesli neku od naredbi, ili želimo isti program koristiti 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 ispod 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 20 30 40 50 60 70 > PI=3.14 159 K=2*PI/256 FOR X=0 TO 255 Y=127+l 00* SIN(K*X) PLOTX,Y NBXT X 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] 18 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 kraja 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 19 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 20 30 40 50 A=1 B=2 C=3 D=4 E=5 Primjer 2: 10 DATA 1,2,ORAO,MIKRORAČUNALO,7 20 READ A,B,C$,D$,C ekvivalentan niz operacija je 10 20 30 40 50 A=1 S=2 C$="ORAO" D$="MIKRORAĆUNALO" C=7 2.2.3 RESTORE naredba Vraća podatkovnu kazaljku na prvi argument DATA naredbe Primjer 1: 10 20 30 40 50 60 DATA 1,2,3,4,5,6 READ A,B,C RESTORE READ D,E,F RESTORE READ G,H Ekvivalentan niz operacija je 10 20 30 40 50 60 70 80 A=1 B=2 C=3 D=1 E=2 F=3 G=1 H=2 2.2.4 PRINT naredba PRINT naredba omogućava korisniku da pod kontrolom BASIC programa 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" 20 > 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: 21 100 200 210 220 230 240 FOR X=7 TO 20 PRINT X FOR Y=0.25 TO 2.5 NEXT X PRINT Y NEXT Y Primjer 3: Petlje koje završavaju na istom mjestu: 10 20 30 40 FOR I=0 TO 10 STEP 2 FOR J=0 TO 20 STEP 4 PRINT I,J 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 20 30 40 INPUT X, Y,Z FOR I=X TO Y STEP Z PRINT 1, 1ˆ2 NEXT RUN ?10,100,2 10 100 12 144 . . . . . . 100 10000 Primjer 5: Izračunavanje faktorijela 10 15 20 30 40 50 60 70 INPUT"N=";N FA=1 IF N=0 THEN 60 FOR X=N TO 1 STEP -1 FA=FA*X NEXT X PRINT"N!=";FA END RUN N = ? 3 N!= 6 > [CR] 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 22 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 23 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 20 30 50 60 70 INPUT L ON I GOTO 50,60,70 END PRINT"PRVI SKOK":END PRINT"DRUGI SKOK":END 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. 24 Naredba IF se koristi u kombinaciji sa slijedećim operatorima: 1. = 2. <> 3. < 4. > 5. <= 6. >= ; jednako ; različito ; manje ; veće ; manje ili jednako ; 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 20 30 40 50 INPUT A,B IF A>B+4 THEN 50 IF A=3 THEN PRINT"TROJKA":END IF A>B THEN PRINTA,B:END 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) X$(i) ; i-ti element polja numeričkih varijabli ; i-ti element polja string varijabli Primjer 1: a. Formiranje jednodimenzionalnog polja 25 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 x(0,0) x(1,0) x(2,0) x(0,1) x(0,2) x(0,3) x(0,2) x(1,2) x(2,2) x(0,3) x(1,3) x(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(1,0,0) x(2,0,0) x(0,1,0) x(1,1,0) x(2,1,0) x(0,2,0) x(1,2,0) x(2,2,0) x(0,0,1) x(1,0,1) x(2,0,1) x(0,1,1) x(1,1,1) x(2,1,1) x(0,2,1) x(1,2,1) x(2,2,1) x(0,0,2) x(1,0,2) x(2,0,2) x(0,1,2) x(1,1,2) x(2,1,2) x(0,2,2) x(1,2,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 20 30 40 50 DIM X(4):REM rezerviramo mjesto za 5 elemenata FOR 1=0 TO 4:REM formiramo indeks pomoću petlje READ X(I):REM upisivanje podataka u polje NEXT I 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 26 što je potvrda pravilnosti priređivanja. 2.4.2 Pisanje podataka u polje Na prijašnjem primjeru smo naredbama 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 polja 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 n −1 Xsr = (1 / n )∑ Xi = i =0 1 ( X 0 + X 1 + ..... X n−1 ) = (1 / n) * ( X 0 + X 1 + ..... X n−1 ) n 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 27 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 > 28 29 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 I+1=2 5 3 4 I=2 I+2=3 6 I=1 I+1=2 3 4 4 6 I=3 I+1=4 3 6 5>3 3<4 3<6 ZAMJENA ZAMJENA 5 5 5 4 6 4 I=2 I+2=3 3 I+1=2 5 NEMA ZAMJENE 6 I=1 5 6 3 I=3 I+1=4 4 3 5>4 4<6 4>3 NEMA ZAMJENE ZAMJENA NEMA ZAMJENE 5 6 6 5 5 6 4 I=2 I+2=3 4 I=3 I+1=4 4 3 3 5<6 5>4 4>3 ZAMJENA NEMA ZAMJENE NEMA ZAMJENE 3 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) KORAK2: X(I-1)=X(I) KORAK3: X(I)=T KORAK4: kraj ;X(I-1) spremamo na T ;X(I) spremamo na X(I-1) ;T VRATIMO NA X(I) 30 START I=0 EX=0 X(I+1)>X(I) NE I=I+1 DA EX=1 X(I+1)↔X(I) NE I=END I NE EX=0 DA END 31 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 2 3 4 5 6 7 8 ? ? ? ? ? ? ? ? 123.456 3456,45 23 678.345 12.9090 453 22234 .034 1 2 3 4 5 6 7 8 . . . . . . . . 22234 3456.45 678.345 453 123.456 23 12.909 .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. 32 Primjer 1: Uspoređivanje stringova 10 20 30 40 50 A$ = "LIJEPO":B$ = "LIJEPO" C$ = "RIJETKO":D$ = "ISTI SU" IF A$=B$ THEN PRINT D$ IF A$=C$ THEN PRINT D$ PRINT"RAZLIČITI SU ! " Primjer 2: Zbrajanje stringova 10 20 30 40 50 90 95 READ A$,B$,C$,D$,E$,F$,G$ S1$=A$+" "+B$+" "+F$+" "+G$ S2$=A$+" "+B$+" "+C$+" "+D$+" "+E$ PRINTS1$:PRINTS2$ END DATA SVAKI,POČETAK,IMA,SVOJE 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 20 30 40 D=ASC("?") E=ASC("A") X$="ORAO":X=ASC(X$) 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: 33 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: 34 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 > 35 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 36 > 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 37 150 160 170 180 190 195 198 200 210 220 230 240 300 310 320 330 400 410 420 430 440 450 I=Y-INT(Y/100)*100 K=INT(Y/100) J=INT((13*M-l)/5)+INT(I/4)4INT(K/4) W=J+I+T-2*K W=W-INT(W/7)%7+l REM* NEDJELJA=1,PONEDJELJAK=2, ,.. PRINT PRINTW$(W);" ";T;",';M$(Ml);Yl;"." DATA JANUAR ,FEBRUAR,MART,APRL,MAJ,JUNI,JULI DATA AUGUST,SEPTEMBAR,OKTOBAR,NOVEMBAR,DECEMBAR DATA NEDJELJA,PONEDJELJAK,UTORAK,SRIJEDA,ČETVRTAK,PETAK,SUBOTA END INPUTT,M1,Y Y1=Y IFM1=2ANDT=29THEN GOSUB400 RETURN P=Y/4*P1=INT(P) DP=P-P1 IFDP=0THEN RETURN PRINT"POGRESAN UNOS !!! " PRINT"GODINA NIJE PRESTUPNA" 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 38 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 Potenciranje negacija množenje i dijeljenje zbrajanje i oduzimanje jednakost OPERATOR ^ */ += 39 različito manje ili jednake veće ili logičko NE logičko I logičko ILI <> <= >= NOT AND 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 k 3,14159 a+2,54 b-ca xy i:j c2 a+b c+2 1 2 x + y2 [(a+b)c-1]d KODIRANJE U BASIC-U K 3.14159 A+2.54 B-CA X*Y I/J C^2 (A+B)/(C+2) 1/(X^2+Y*2) ((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) 40 bc Izraz a je dvosmislen, zato izbjegavamo zapis A^B^C Nedvosmisleni zapisi su 3. A^(B^C) što znači a ( bc ) odnosno (A^B)^C što znači ( a b c ) 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 0 0 1 1 B 0 1 0 1 A AND B 0 0 0 1 A OR B 0 1 1 1 NOT A 1 1 0 0 NOT B 1 0 1 0 Primjer 2: Tvorba kompleksnijih logičkih operacija pomoću osnovnih a.) Ekskluzivna disjunkcija: Ekskluzivna disjunkcija je definirana kao Z = AB + A B = A ⊕ B dok je ekvivalencija definirana kao negacija ekskluzivne disjunkcije, tj. Z = AB + A B = A ⊕ B A B A⊕ B A⊕B 0 0 1 1 0 1 0 1 0 1 1 0 1 0 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 B= 1111 1010 A AND B= 1010 1010 ; 175 decimalno ; 250 decimalno ; 170 decimalno 41 b.) disjunkcija B= A OR B= 0100 0001 1000 0000 1100 0001 ; 65 decimalno ; 128 decimalno ; 193 decimalno c.) negacija A= NOT A= 1111 1110 0000 0001 ; 254 decimalno ; 1 decimalno d.) ekskluzivna disjunkcija A= 1100 1011 B= 1010 1101 A EOR B= 0110 0110 ; 203 decimalno ; 173 decimalno ; 102 decimalno e.) ekvivalencija A= 1100 1011 B= 1010 1101 A ENOR B= 1001 1001 ; 173 decimalno ; 45 decimalno ; 153 decimalno Primjer 4: Kodirajmo sada u BASIC-u logičke operacije iz primjera 3 42 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 20 30 40 50 REM: NEGACIJA A=254 Z=NOT A Z=Z AND 255 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 20 30 40 50 REM: ENOR A=203:B=173 Z=NOT A AND B OR NOT B AND A Z=NOT Z AND 255 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 20 30 40 50 A$="A" PRINTA$ A=ASC(A$) A=A OR 128 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 43 44 2.7.1 Numeričke funkcije Numerička funkcija je definirana u obliku: y=f(x) tj. varijabli "y" priredimo funkcijsku vrijednost "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 20 30 40 A=0.125 B=0 C=-12.74 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. 45 PRINT SQR(2) 1.41421 [CR] daje 2.7.1.6 EXP(X) funkcija Funkcija Y=EXP(X) priredi varijabli Y potenciju broja "e" (e=2.71828). Vrijednost argumenta 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: x 2 1− x ; za |x| <1 1 − x2 x ; 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=ex. Taylor-ov red funkcije y=ex je definiran kao: ∞ y = ex = ∑ n =0 xn x x 2 x3 xn =1+ + + + ..... + + ..... n! n! 1! 2! 3! 47 Suma privih 7 članova je tada y = 1+ x + x 2 x3 x 4 x5 x6 + + + + 2 6 24 120 720 odnosno kodirano u BASIC-u 10 20 30 40 DEFFNE(X)=1+X+(1/2)*Xˆ2+(1/6)*Xˆ3+(1/24)*Xˆ4+(1/120)*Xˆ5+(1/720)*Xˆ6 FOR X=-5 TO 5 PRINT X;FNE(X) NEXT X Primjer 2: Definirajte funkciju koja računa površinu kruga 10 20 30 40 PI=3.141593 DEF FNP(R)=R*2*PI INPUT R 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 zareza ("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 centralni hardware-ski element mikroračunala ORAO, podržava samo 8bitnu 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 [@] 48 * _ 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 > 49 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 ekranu 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 31 0 s KOLONAt u R E D v 31 50 0,255 255,255 u Y v 0,0 sXt 255,0 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 51 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 $1C $7F $7F $7F $6B $49 $41 $41 $5D $7F $6B $3E $14 $1C $08 s početak stranice npr. 0300 0=crna točka 1=bijela točka s drugi znak 20 21 22 23 24 25 26 27 52 Opažamo da su težine bitova u karakter generatoru inverzne 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 znaka 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 naredbi, 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 funkcijom 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 adrese -startna adresa heksadecimalno je FF viši dio u 06 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 53 -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 željeni 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 40964113 decimalno 2. 30 inicijalizacija vektora početne adrese 54 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 PRITISNITE 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 uzeti za memoriranje našeg izvornog 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] PRINT FRE(X$)[CR] ili 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 55 1002 1004 1007 1008 100A 100B 100D 100F 1011 A4 8C 88 D0 CA D0 C6 10 60 E0 LDY E0 00 88 STY 8800 DEY FD BNE 1007 DEX F5 BNE 1002 E1 DEC E1 EF BPL 1000 RTS * *RUN VISINA TONA (MAX. 255)? 255 > RUN VISINA TONA (MAX. 255)? 47 2.9 SISTEMSKE KOMANDE Komande su naredbe koje BASIC interpreter izvršava, nakon što su unesene 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] > _ 56 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 2.polje 3.polje 4.polje : : : : IME početna adresa konačna adresa 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" SNIMANJE ? [CR] 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. 57 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]. 58 2.10.4 END naredba Naredba END definira kraj programa, ali nije obavezna. 2.10.5 NEW komanda Komandom NEW brišemo izvorni BASIC program iz memorije 3 postavljamo kazaljku 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 59 10 20 30 40 50 A=0:B=127:C=255 MOVA,B DRAWB,C DRAWC,B 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 20 30 40 FORX=0TO255 Y=100*(1-EXP(-X/10)) PLOT X,Y NEXT X Primjer 2: Crtanje eksponencijalne funkcije naredbama MOV i DRAW 10 20 30 40 50 MOV0,0 FOR X=0 TO 255 Y=100*(1-EXP(-X/10)) DRAW X,Y 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 > 60 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* 61 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 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 .998487 .998487 .998487 .998487 .998487 .998487 .998488 .998488 .998488 .998488 .998489 .998489 .998489 .998489 .998489 .998489 .99849 .99849 130 .998491 .998491 .998491 .998491 .998491 .998491 .998491 .998491 .998491 .998491 .998491 .998491 .998491 .998491 .998491 .998491 .998491 .998491 .998491 .998491 .998491 .998491 .998491 .998491 .998491 .998491 .998491 .998491 .998491 .998491 .998491 .998491 .998491 .998491 .998491 .998491 .998491 .998491 .998491 .998491 .998491 .998491 .998491 .998491 .998491 .998491 65 Primjer 2: Filtriranje signala Ulazni signal x(nT) Diskretni Buttworth algoritam Izlazni signal y(nT) 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 66 > 67 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 > 68 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 0302 A2 7F LDX 0304 A0 00 LDY 0306 85 E1 STA 0308 84 EO STY 030A A9 FF LDA 030C 91 EO STA 030E C8 INY 030F DO FB BNE 0311 E6 E1 INC 0313 E4 E1 CPX 0315 BO F5 BCS 0317 60 RTS *60 *7F *00 E1 EO *FF
Source Exif Data:File Type : PDF File Type Extension : pdf MIME Type : application/pdf PDF Version : 1.3 Linearized : Yes Create Date : 2006:09:06 10:14:22+02:00 Modify Date : 2006:09:06 10:14:22+02:00 Page Count : 86 Creation Date : 2006:09:06 08:14:22Z Mod Date : 2006:09:06 08:14:22Z Producer : Acrobat Distiller 5.0 (Windows) Author : o.boisseau Metadata Date : 2006:09:06 08:14:22Z Creator : o.boisseau Title : Microsoft Word - mrorao102.docEXIF Metadata provided by EXIF.tools