RETRO KUTAK – tehnologija prošlih decenijaSIMON'S BASIC

SIMON’S BASIC C64 – lekcija čevrta

Četvrta lekcija iz serijala o SIMON’S BASIC programiranju na Commodore 64 objašnjava korišćenje grafičkih naredbi kao što su HIRES, MULTI, LOW COL, PLOT i LINE. Kroz detaljna upustva, korisnici u Srbiji i regionu mogu naučiti kako da crtaju tačke i linije u visokoj (320×200) i multikolor (160×200) rezoluciji, kako funkcioniše bojenje, prikaz, testiranje tačaka i ispis boja. Fokus je na praktičnim primerima i optimizaciji performansi, što ovaj vodič čini savršenim za retro entuzijaste, programere početnike i ljubitelje C64 računara. Lekcija je deo serijala RETRO KUTAK na sajtu TechFokus.rs, lokalizovana za srpsko govorno područje.

RETRO KUTAK 

SIMON’S BASIC C64 –  lekcija prva
SIMON’S BASIC C64 – lekcija druga
SIMON’S BASIC C64 – lekcija treća
SIMON’S BASIC C64 – lekcija čevrta
SIMON’S BASIC C64 – lekcija peta
SIMON’S BASIC C64 –  lekcija šesta
SIMON’S BASIC C64 – lekcija sedma

Vreme je za četvrtu lekciju. Danas ćemo preći deo naredbi Sajmons bejzika koje se bave grafikom u visokoj i multikolor rezoluciji

Napomene, saveti i objašnjenja

Kada smo radili sa standardnim bejzikom C64 skrenuli smo pažnju da nije isplativo raditi u visokoj i multikolor rezoluciji zbog izuzetne sporosti izvršavanja. Ovo nije slučaj kada je u pitanju Sajmons bejzik jer njegove naredbe višestruko ubrzavaju izvršavanje programa u višim modovima rezolucije

Naredbe Simon’s basic-a

Rad sa grafikom visoke i multikolor rezolucije

Sajmons bejzik poseduje sve potrebne naredbe za rad u grafičkom modu visoke i multikolor rezolucije. Nema više potrebe za direktnim upisima u memorijskim lokacijama koji su zadužene za ispis na ekranima visoke i multikolor rezolucije koji način je bio koliko nezgrapan, toliko i spor.

 

HIRES – uključivanje grafike visoke rezolucije, brisanje ekrana iste i zadavanje boja ispisa i pozadine

Ovom naredbom prelazimo u mod visoke rezolucije (320×200 tačaka), brišemo ekran i vršimo određivanje boje ispisa tačaka visoke rezolucije i boje pozadine (kolor matrice 40×25 veličine 8×8 u dve boje – boja tačke (1) i boja pozadine(0)). Kada program koji radi sa visokom rezolucijom završi sa radom prikaz se automatski vraća iz ekrana visoke rezolucije u tekstualni mod rada.

Format naredbe:

HIRES a,b  – Prelazak u mod visoke rezolucije. Argument „a“ dodeljuje boju tačaka (0-15), a argument „b“ dodeljuje boju pozadine (0-15 boja, matrice 8×8)

Primer:

10 HIRES 2,7

20 GOTO 20

U programskom redu 10 uključiće se ekran visoke rezolucije, isti će se obrisati i postaviti za boju pozadine žutu, a crvenu boju za ispis (koja se neće videti jer još ništa nije nacrtano). Kada uporedite ovu brzinu brisanja ekrana koja je gotovo trenutna, sa brisanjem ekrana u standardnom bejziku (oko minut) jasna vam je prednost rada sa Sajmons bejzik naredbama. Naredba GOTO u redu 20 pravi beskonačnu petlju inače bi ekran visoke rezolucije samo bljesnuo i prikaz bi se odmah vratio u tekstualni način rada. Pritiskom na run/stop prekidamo petlju i automatski se vraćamo u tekstualni mod

 

MULTI – prelazak u višebojni način rada (multikolor) i zadavanje boja kombinacija tačaka

Data naredba prebacuje rad iz visoke u multikolor rezoluciju. Kada smo objašnjavali multikolor rezoluciju u lekcijama standardnog bejzika skrenuli smo pažnju da je ista dvostruka manja po horizontali (160×200) od visoke iz razloga što se ovde multikolor tačke upisuju koristeći dva bita što daje kombinacije za četri boje u jednoj kolornoj matrici (8×8) (u stvari tri boje tačke plus boja pozadine – kombinacije (01),(10),(11) i pozadina (00))

Format naredbe:

MULTI p,d,i – prelazak u multikolor rad i određivanje boja. Argument „p“ za kombinaciju multikolor tačke (01),“d“ za kombinaciju (10),“i“ za kombinaciju (11),a za boju pozadine (00) se uzima dodeljena boja pozadine u HIRES naredbi argument „b“

10 HIRES 2,7

20 MULTI 1,5,8

30 GOTO 30

Aktivira se grafički prikaz visoke rezolucije i odmah prelazi u multikolor mod sa dodeljivanjem boja (koje se takođe neće videti u ovom primeru jer ne postoje iscrtane tačke, a sve će biti objašnjeno kada pređemo na naredbe za crtanje)

 

NRM – povratak u tekstualni način rada

Ovom naredbom se vraćamo u tekstualni način rada. Iako se ekran visoke i multikolor rezolucije automatski vraća u tekstualni mod posle završetka programa potrebno nam je da se to desi i u toku izvršavanja programa a to ova naredba i radi. Daje se bez argumenata

 

CSET – Biranje prikaza grafičkog moda

Ova naredba nam omogućava da izaberemo koji ćemo grafički mod videti. I ovde važi pravilo da je prikaz visoke i multikolor rezolucije aktivan dok program traje a onda se automatski vraća u tekstualni mod

Oblik naredbe:

CSET a – ako je argument „a“ jednak 0 prikazuje se tekstualni mod u prvom setu karaktera (velika slova), za vrednost 1 prikazuje se tekstualni mod u drugom setu karaktera (mala slova), a za vrednost 2 dobijamo prikaz grafike visoke ili multikolor rezolucije zavisno od zadnjeg rada sa istima.

 

LOW COL -određivanje boja tačaka u visokoj i multikolor rezoluciji

Ovom naredbom određujemo boju tačaka u visokoj i multikolor rezoluciji za kolor matricu (8×8) i to na isti način kao i kod HIRES i MULTI naredbi. Ista se koristi kada hoćemo da izmenimo boje ispisa tačaka u toku rada programa od onih koje smo zadali naredbama HIRES I MULTI na početku programa

Za ekran visoke rezolucije:

LOW COL a,b,0 – argument „a“ dodeljuje boju tačaka (0-15), a argument „b“ dodeljuje boju pozadine (0-15). Morali smo dodati još jedan argument „0“ pošto ova naredba traži tri argumenta zbog mogućnosti rada iste i sa multikolor rezolucijom

Za ekran multikolor rezolucije:

LOW COL p,d,i –  Argument „p“ daje boju kombinaciji multikolor tačke (01),“d“ za kombinaciju (10), „i“ za kombinaciju (11). Za sva tri argumenta vrednosti se kreću od 0 do 15

 

HI COL – poništava dejstvo LOW COL naredbe

Datom naredbom poništavamo naredbu LOW COL i vraćamo boje koje su defenisane u HIRES odnosno MULTI naredbama. Daje se bez argumenata

Naredbe za crtanje i bojenje

Najzad smo došli i do naredbi pomoću kojih ćemo crtati i bojiti na ekranima visoke i multikolor rezolucije. Pošto se naredbe koje ćemo učiti izvršavaju u oba ova grafička moda daćemo uporedna objašnjenja i primere za iste

 

PLOT – crtanje tačke na ekranu

Najosnovnija naredba za crtanje. Jedna tačka sa kordinatama od 0 do 319 za X i od 0 do 199 za Y osu kod visoke rezolucije (320×200) i od 0 do 159 za X i od 0 do 199 za Y osu kod multikolor rezolucije (160×200), sa određivanjem načina ispisa.

Format naredbe:

PLOT x,y,n – argument „x“ određuje X kordinatu, argument „y“ određuje Y kordinatu tačke, a argument „n“ način ispisa

Što se tiče x i y argumenata tu je stvar jasna ali način ispisa? To izgleda ovako:

Kod ekrana visoke rezolucije:

n=0 – tačka se briše

n=1 – tačka se crta – boja tačke i pozadina iste (8×8) date su naredbama HIRES / LOW COL (argumenti „a“ i „b“)

n=2 – tačka se invertuje (ako je nacrtana na datim kordinatima ista se briše, ako ne postoji onda se crta)

Kod multikolor rezolucije:

n=0 – tačka se briše

n=1 – tačka se crta bojom koja je data za kombinaciju (01)  – kod MULTI / LOW COL naredbe argument „p“

n=2 – tačka se crta bojom koja je data za kombinaciju (10)  – kod MULTI / LOW COL naredbe argument „d“

n=3 – tačka se crta bojom koja je data za kombinaciju (11)  – kod MULTI / LOW COL naredbe argument „i“

n=4 – tačka se invertuje (kombinacija tačke (01) postaje (10), a (00) postaje (11) i obratno)

kod kombinacije 00 uzima se boja pozadine određena u HIRES naredbi (argument „b“)

Ovde treba imati u vidu da boja ispisa (argument „a“) u HIRES naredbi ne igra nikakvu ulogu kada se pređe u multikolor mod.

Napomena:Ovaj opis ispisa tačaka važi za sve naredbe za crtanje koje ćemo dalje učiti

 

Primer 1 za visoku rezoluciju:

10 HIRES 2,7

Prelazak u visoku rezoluciju i dodeljivanje početne boje ispisa i pozadine (crvena i žuta)

20 PLOT RND(1)*320,RND(1)*200,1

Ispisujemo tačke sa slučajnim X i Y kordinatama (opsek 319×199)

30 LOW COL RND(1)*16, RND(1)*16, 0

Dodeljujemo slučajne boje tački i pozadini iste (0-15) koje će se prikazati sledećom PLOT naredbom

40 GOTO 20

Povratak na ispis sledeće slučajne tačke

 

Startovanjem ovog programa na celom ekranu će početi da iskaču tačke od kojih će svaka imati slučajno odabrane boje za ispis i pozadinu. Obratite pažnju da kada se neka tačka drugačije boje ispisa i pozadine iscrta sa kordinatama u istoj matrici (8×8) već postojeće tačke, promeniće i boju postojeće tačke kao i boju pozadine cele te matrice (razlog je, kao što već pretpostavljate, jedna boja za tačku i jedna za pozadinu u istoj matrici. Boje ispisa i pozadine zadnje unete tačke su one koje važe za celu 8×8 matricu)

 

Primer 2 za multikolor rezoluciju:

10 HIRES 2,7

Prelazak u visoku rezoluciju i dodeljivanje početne boje ispisa i pozadine (pošto ćemo raditi sa multikolor rezolucijom bitna nam je samo boja pozadine).

20 MULTI 5,8,11

Prelazak u multikolor mod (dodela početnih boja za argumente „p“ – zelena (5), „d“ – braon (8), „i“ – siva (11))

30 PLOT RND(1)*160,RND(1)*200,RND(1)*3+1

Iscrtavanje slučajne tačke sa kordinatama u opseku 159×199 u slučajnim kombinacijama načina ispisa (1-3) multikolor tačke (1-„p“-(01), 2-„d“-(10) ili 3-„i“-(11)  / kombinacije multikolor tačke)

40 LOW COL RND(1)*16, RND(1)*16, RND(1)*16

Dodeljuju se slučajne boje (0-15) za sve kombinacije sledeće iscrtane tačke u PLOT naredbi (argumenti „p“,“d“,“i“)

50 GOTO 30

Povratak na iscrtavanje nove tačke

 

Posle startovanja programa na ekranu će početi da se pojavljuju tačke različitih boja. Ovde treba obratiti pažnju na dve stvari. Prva je da je svaka tačka dvostruko veća po horizontali od one koja je bila u primeru za visokorezoluciju, a druga da tačke različite boje mogu da se nađu jedna uz drugu u matrici 8×8 (3 različite kombinacije za jednu kolor matricu plus boja pozadine. Ukoliko se pojavi nova tačka u drugoj boji sa istom kombinacijom postojeće tačke u toj matrici, već ispisana tačka će promeniti svoju boju u saglasnosti sa novom bojom)

TEST – testiranje da li na navedenim kordinatama postoji tačka

Kada nam bude zatrebalo da znamo da li na ekranima visoke i multilkolor rezolucije postoji iscrtana tačka to možemo testirati ovom funkcijom. Ako tačka postoji rezultat je 1 a ako ne dobijamo 0

Format funkcije:

TEST (x,y) – argumenti X i Y su kordinate tačke koju želimo da testiramo

Primer:

10 HIRES 2,7

20 PLOT 120,120,1

30 PLOT 100,100,0

40 PRINT TEST (120,120)

50 PRINT TEST (100,100)

Posle pokretanja ovog programa u ekranu visoke rezolucije ispisaće se tačka sa kordinatama 120,120, a obrisaće se tačka (ukoliko postoji) sa  kordinatama 100,100. Kada test izvrši ispitivanje u prvom slučaju kordinate 120,120 gde tačka postoji daće vrednost 1, a kod kordinate 100,100 gde je tačka obrisana daće vrednost 0

 

LINE – Iscrtavanje prave linije na ekranu visoke i multiklolor rezolucije

Ovom naredbom iscrtavamo pravu liniju na ekranu visoke i multikolor rezolucije sa datim kordinatama početka i kraja iste i načina ispisa (kordinacija i način ispisa je identično PLOT naredbi)

Format naredbe:

LINE xp,yp,xk,yk,n  – Iscrtavanje prave linije sa datim kordinatama i načinom ispisa

Argument „xp“ je početna X kordinata linije,“yp“ je početna Y kordinata linije,“xk“ je krajnja X kordinata linije,“yk“ je krajnja Y kordinata linije, a argument „n“ je način ispisa

 

Primer 1 za visoku rezoluciju:

10 HIRES 2,7

Prelazak u visoku rezoluciju i dodeljivanje početne boje ispisa i pozadine (crvena i žuta)

20 FOR I=5 TO 300 STEP 2

Dajemo petlju sa početnom vrednošću I promenljive 5, krajnjoj 300 i korakom 2

30 LINE I,10,I,120,1

Iscrtavamo liniju sa početnom X kordinatom vrednosti promenljive I, za početnu Y kordinatu uzimamo vrednost 10, za krajnju X kordinatu uzimamo takođe promenljivu I, a za krajnju Y kordinatu dajemo vrednost 120. Način ispisa je jedan što znači da crtamo liniju.

40 LOW COL RND(1)*16,RND(1)*16,0

Dodeljujemo slučajnu boju ispisa i pozadine koja će biti važeća za sledeću iscrtanu liniju

45 NEXT I

Kraj petlje kada promenljiva I dostigne krajnju vrednost 300

50 GOTO 50

Beskonačna petlja

 

Kada startujemo ovaj primer dobićemo iscrtavanje vertikalnih linija, X kordinate od 5 do 300 sa korakom od 2 između dve linije, dužine 110 tačaka (Y kordinata 120-10). Obratite pažnju da kada se jedna linija iscrta, u jednoj boji pozadine i ispisa, crtanjem druge linije druge boje ispisa i pozadine, koja je u istoj kolor matrici kao prethodna, menja se i boja i pozadina prethodno iscrtane linije (razlog je naravno to što može biti samo jedna boja tačke i jedna boja pozadine u jednoj matrici 8×8 kod visoke rezolucije)

 

Primer 2 za multikolor rezoluciju:

10 HIRES 2,7

Prelazak u visoku rezoluciju i dodeljivanje početne boje ispisa i pozadine (argument „a“-crvena i argument „b“-žuta). Za multikolor rezoluciju je bitna samo boja pozadine (argument „b“) dodeljena ovom naredbom

20 MULTI 5,8,11

Prelazak u multikolor mod (dodela početnih boja za argumente „p“ – zelena (5), „d“ – braon (8), „i“ – siva (11))

30 M=1:B=1

Stavljamo vrednost 1 u numeričkoj promenljivi M koju ćemo koristiti za način ispisa multikolor tačaka i vrednost 1 u promenljivu B koja će određivati kada će se vršiti promena boje

40 FOR I=5 TO 100 STEP 2

Dajemo petlju sa početnom vrednošću I promenljive 5, krajnjoj 100 i korakom 2

50 LINE I,10,I,120,M

Iscrtavamo liniju sa početnom X kordinatom vrednosti promenljive I, za početnu Y kordinatu uzimamo vrednost 10, za krajnju X kordinatu uzimamo takođe promenljivu I, a za krajnju Y kordinatu dajemo vrednost 120. Način ispisa je od 1 do 3 za sve tri kombinacije ispisa tačke u multikolor rezoluciji (argumenti „p“,“d“,“i“)

60 M=M+1:IF M>3 THEN M=1

Uvećavamo vrednost M za jedan (promenljiva kojoj smo dodelili ulogu određivanja način ispisa tačke u multikolor rezoluciji). Ukoliko je veća od 3 stavljamo da je vrednost 1 i tako u krug

70 IF B=4 THEN LOW COL RND(1)*16, RND(1)*16, RND(1)*16:B=1:ELSE:B=B+1

U slučaju da je promenljiva B jednaka 4 (iscrtane su 4 linije-sigurno smo izašli iz matrice prethodne linije) dodeljujemo nove slučajne boje za sve kombinacije iscrtane linije (tačku u liniji). Koja boja će se uzeti zavisi od kombinacije tačke koja je data u LINE naredbi („p“,“d“,“i“) putem promenljive M. Zatim stavljamo vrednost 1 u promenljivu B. U slučaju da uslov nije zadovoljen uvećavamo promenljivu B za 1 i nastavljamo dalje. Zašto smo uopšte morali da formiramo promenljivu B? Razlog je taj što kada bi smo promenili boje dok je iscrtavanje nove linije još u istoj matrici prethodne linije promenile bi se i boje već iscrtane linije saglasno novo dodeljenoj boji

80 NEXT I

Kraj petlje kada promenljiva I dostigne krajnju vrednost 100

90 GOTO 90

Beskonačna petlja

 

U ovom primeru imamo takođe iscrtavanje vertikalnih linija, X kordinate od 5 do 100 sa korakom od 2 između dve linije, dužine 110 tačaka (Y kordinata 120-10). Obratite pažnju na to da je linija dva puta veća po horizontali od linije iscrtane u visokoj rezoluciji i da kada se jedna linija iscrta u jednoj boji druga do nje ne utiče na promenu boje iste jer je iscrtana drugačijom kombinacijom bitova (tako da mogu biti u istoj kolor matrici a da ne utiču jedna na druge kakav je slučaj bio kod iscrtavanja linija u visokoj rezoluciji. U slučaju da želimo više boja tačaka od 3 u jednoj 8×8 kolor matrici to ne bismo mogli da postignemo jer kada bi smo dodelili nekoj od već postojećih kombinacija novu boju onda bi tačka koja je već ispisana u toj kombinaciji takođe promenila boju u novo datu).

 

Ovom naredbom završavamo današnju lekciju. Postoje još nekoliko naredbi za crtanje, bojenje i tekst na ekranima visoke i multikolor rezolucije koje ćemo preći u sledećim lekcijama, a zatim ćemo nastaviti sa izučavanjem drugih naredbi za defeniciju karaktera, sprajta, zvuka/muzike i još dosta toga.

Puno pozdrava

SIMON’S BASIC C64 –  lekcija prvahttps://techfokus.rs/simonss-basic-za-commodorw-64-lekcija-1/
SIMON’S BASIC C64 – lekcija drugahttps://techfokus.rs/simons-basic-c64-lekcija-druga/
SIMON’S BASIC C64 – lekcija trećahttps://techfokus.rs/simons-basic-c64-lekcija-treca/
SIMON’S BASIC C64 – lekcija čevrtahttps://techfokus.rs/simons-basic-grafika-lekcija-4/
SIMON’S BASIC C64 – lekcija petahttps://techfokus.rs/retrokutak-simons-basic-lekcija-peta/
SIMON’S BASIC C64 –  lekcija šestahttps://techfokus.rs/retro-kutak-simons-basic-c64-lekcija-sesta/
SIMON’S BASIC C64 – lekcija sedmahttps://techfokus.rs/retro-kutak-simons-basic-c64-lekcija-sedma/

Оставите одговор

Ваша адреса е-поште неће бити објављена. Неопходна поља су означена *