RETRO KUTAK – tehnologija prošlih decenijaSIMON'S BASIC

SIMON’S BASIC C64 – Lekcija Osma

Kako da znate da li vam je potreban novi telefon u Srbiji? Ovaj vodič na TechFokus.rs pomaže korisnicima da prepoznaju sedam ključnih znakova starenja mobilnog uređaja: od usporavanja performansi, kratkog trajanja baterije i nedostatka ažuriranja, do fizičkih oštećenja, nedostatka memorije i zastarelih tehnologija poput izostanka 5G podrške. Tekst je posebno prilagođen korisnicima u Srbiji i regionu, gde je uobičajeno koristiti isti telefon duže od proseka. Takođe se ističe važnost redovnih bezbednosnih zakrpa, kompatibilnosti sa lokalnim mrežama (Telekom, Yettel, A1), i preporučuju legalne strategije za prodaju, reciklažu ili ponovnu upotrebu starog telefona. Uključeni su i saveti o tome kada NE treba menjati telefon, kao i često postavljana pitanja u vezi sa starošću uređaja, softverskom podrškom i kamerama. Idealan tekst za sve korisnike koji razmatraju kupovinu novog telefona u 2025. bez marketinških pritisaka.
Ova lekcija o Simon’s BASIC funkcijama za Commodore 64 namenjena je retro entuzijastima i programerima u Srbiji, Hrvatskoj, Bosni i Hercegovini, Crnoj Gori i Sloveniji. Tekst je optimizovan za korisnike koji žele da uče o retro BASIC funkcijama kao što su AT, EXOR, MOD i DUP, sa praktičnim primerima i objašnjenjima na srpskom jeziku.

RETRO KUTAK: SIMON’S BASIC C64 – Lekcija Osma

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 

SIMON’S BASIC C64 – lekcija sedma

Dođosmo i do osme lekcije. Za danas ćemo se zabaviti Sajmons bejzik funkcijama i videti koje su njihove mogućnosti.

Napomene, saveti i objašnjenja

Sajmons bejzik ima dosta novih funkcija od kojih su neke veoma korisne, a neke nikada nećete koristiti. U današnjoj lekciji ćemo se upoznati sa onim korisnima.

Funkcije Simon’s basic-a

AT – postavljanje kursora na željenom mestu ekrana i ispisivanje od istog

Ovo je zaista korisna funkcija. Nema više potrebe za upisivanjem simbola kursorskog kretanja pod znacima navoda. Sve je lepo brojčano dato sa X (kolone 0-39/ukupno 40) i Y (redovi 0-24/ukupno 25) koordinatama tekstualnog ekrana.

Format funkcije: AT(x,y) izraz – postavlja kursor/ispis na željeno mesto na ekranu. Argument „x“ je broj kolone od koje se ispisuje, „y“ je broj reda u kome se ispisuje, „izraz“ može biti tekst, broj, matematički proračun, numerička ili tekstualna promenljiva. Između funkcije AT i leve zagrade nema razmaka.

Primer:

10 PRINT "(SHIFT+CLR/HOME)"
'Brišemo ekran
20 FOR Y=0 TO 24
'Imamo petlju za Y od 0 do 24 za redove
30 FOR X=0 TO 39
'Imamo petlju za X od 0 do 39 za kolone
40 PRINT AT(X,Y)X;Y
'Štampamo na ekranu sa datim kordinatama vrednost promenljivih X i Y (broj kolone i broj reda)
50 GET A$:IF A$="" THEN 50
'Čeka se dok se ne pretisne neki taster
60 NEXT X
'Kraj petlje X
70 NEXT Y
'Kraj petlje Y

Startovanjem primera ispisaće se na ekranu vrednost reda i kolone u kome je kursor i čekaće se da se pritisne neki taster. Kada se štampa brojna vrednost ispisuje se razmak, a tek onda broj. Prilikom ispisivanja sledećih koordinata (kolona+1) izbrisaće se prethodne vrednosti tako dobijemo na izgled skrolovanja ispisa. Primetićete da kada kursor dođe do 34. kolone u svakom redu ispisivanje sledećeg broja će preći u sledeći red. Razlog je što je kursor i dalje u prethodnom redu, ali ispisivanje je zbog veličine ispisa prešlo u sledeći red. Kada ispis dođe u poslednji 25. red (označen sa 24) doći će do skrolovanja ekrana na gore posle svakog ispisivanja (kada smo radili u standardnom bejziku napomenuli smo da ako se ispisuje u 25. redu automatski dolazi do skrolovanja ekrana).

DUP – Umnožavanje teksta ili vrednosti tekstualne promenljive

Ovom naredbom možemo umnožiti tekst pod navodnicama ili vrednost tekstualne promenljive do 255 puta.

Formati funkcije: DUP ("tekst",n) DUP (X$,n) Argumenti „tekst“ i X$ su tekst ili vrednost tekstualne promenljive koji se umnožavaju, „n“ broj koliko puta će se ispisati tekst ili vrednost tekstualne promenljive.

Primer:

10 X$="A"
20 PRINT "(SHIFT+CLR/HOME)"
30 PRINT DUP(X$,10)
40 PRINT DUP("PROBA ",20)

Startovanjem ovog primera imaćemo ispisivanje deset slova A i dvadeset reči „PROBA „.

INKEY – Utvrđivanje koji je funkcijski taster pritisnut

Ovom funkcijom utvrđujemo koji je funkcijski taster (F1-F8) pritisnut. Prikazivanjem dobijamo broj pritisnutog funkcijskog tastera, a ispitivanjem određujemo radnju za pritisnuti taster.

Format funkcije: INKEY – Utvrđuje broj pritisnutog funkcijskog tastera. Daje se bez argumenata.

Primer:

10 PRINT "(SHIFT+CLR/HOME)"
20 PRINT AT(3,10)"PRETISNUT FUNKCIJSKI TASTER";INKEY
30 IF INKEY=7 THEN PRINT "PRETISNUT JE F7 TASTER ZA IZLAZ":END
40 GOTO 20

Startovanjem primera ispisaće se tekst u desetom redu od treće kolone i prikazati broj funkcijskog tastera koji je pritisnut (ukoliko nijedan nije pritisnut rezultat je 0). Kada se pritisne taster F7 program se završava.

MOD – izračunavanje celobrojnog ostatka deljenja

Ova funkcija nam daje celobrojni ostatak prilikom deljenja.

Format funkcije: MOD (a,b) – gde je argument „a“ deljenik (vrednost koja se deli), a „b“ delilac (vrednost sa kojom se deli). Argumenti mogu biti brojevi ili numeričke promenljive.

Primer:

10 PRINT MOD (15,3)
20 A=27:B=5
30 X=MOD (A,B)
40 PRINT X

Startovanjem primera dobijamo vrednosti 0 (15:3=5 / 5×3=15 nema ostatka) i 2 (27:5=5 / 5×5=25 ostatak 2).

DIV – izračunavanje celobrojnog rezultata deljenja

Ovom funkcijom dobijamo celobrojnu vrednost deljenja (ostatak se odbacuje / decimale se ne prikazuju).

Primer:

10 PRINT DIV (15,3)
20 A=27:B=5
30 X=DIV (A,B)
40 PRINT X

Startovanjem primera dobijamo vrednosti 5 (15:3=5) i 5 (27:5=5 ostatak se odbacuje).

FRAC – izračunavanje decimalnog ostatka

Ova funkcija nam daje decimalni ostatak prilikom neke matematičke operacije.

Format funkcije: FRAC (a) – argument „a“ je brojni izraz.

Primer:

10 PRINT "(SHIFT+CLR/HOME)"
20 PRINT FRAC (12.5*7)
30 A=43:B=17
40 X=FRAC (A/B)
50 PRINT X

Prilikom startovanja ovog primera dobijamo decimalne vrednosti .5 (12.5×7=87.5) i .529411766 (43:17=2.529411766).

% – konvertovanje binarnog broja u decimalni

Ovim simbolom vršimo konvertovanje/pretvaranje binarnih vrednosti u decimalne. Data funkcija je veoma korisna u daljem radu gde je potrebno tačno setovati/resetovati željeni bit u nekoj memorijskoj lokaciji.

Format funkcije: % b – gde je argument „b“ binarni izraz od 8 bita (jedan bajt). Konvertovane vrednosti se kreću od 0 do 255.

Primer:

10 PRINT %11111111
20 A=%10101010
30 PRINT A

Startovanjem dobijamo rezultate 255 i 170.

$ – konvertovanje heksadecimalnog broja u decimalni

Ovim simbolom vršimo konvertovanje/pretvaranje heksadecimalnog broja u decimalni broj. Da prvo objasnimo pojam heksadecimalnog broja. Kada radimo sa bitovima u jednom bajtu rekli smo da postoje 8 kombinacija koje daju decimalne brojeve od 0 do 255. Stvar je u tom što nije najbolji način označavati binarne brojeve decimalnim. Zato su uvedene tzv. heksadecimalne vrednosti. Bajt možemo podeliti u dva dela po četiri bita (nibla). Kod decimalnih vrednosti za prvi nibl imamo odbrojavanje od 0 do 15 (16 kombinacija) pa dodavanjem drugog nibla do 255 (ukupno 256 kombinacija), a kod heksadecimalnog imamo odbrojavanje za prvi nibl od 0 do F (16 kombinacija) pa dodavanjem drugog nibla do FF (256 kombinacija). Kao što vidite ovo je bolji način označavanja kombinacija bitova jer za svaku kombinaciju u niblu postoji broj ili slovo. Kako to izgleda kada uporedimo?

binarna vrednost (%)

heksadecimalna vrednost ($)decimalna vrednost

0000

00

0001

11

0010

2

2

00113

3

01004

4

0101

55

0110

66

0111

77

1000

88

1001

9

9

1010A

10

1011B

11

1100C

12

1101D

13

1110

E

14

1111F

15

Iz napred datog pregleda vidi se da svaka binarna kombinacija od 0 do 15 (pola bajta/nibl) ima svoju oznaku u heksadecimalnom sistemu od 0 do F što omogućava lako konvertovanje iz jednog u drugi sistem. Heksadecimalne vrednosti se uglavnom koriste kod programiranja koje zahteva rad sa velikim količinama binarnih kombinacija (pogotovo u asemblerskom programiranju). Da bismo prikazali i manipulisali adresama memorijskih lokacija računara (dva bajta/16 bitova) decimalno koristili bi brojeve od 0 do 65535 dok bi heksadecimalno koristili brojeve i oznake od 0 do FFFF, a za unos vrednosti u istima (jedan bajt/8 bitova) decimalno bi išlo od 0 do 255, a heksadecimalno od 0 do FF.

Format funkcije: $h – argument „h“ označava četvorocifreni heksadecimalni broj (obavezno je uneti četiri karaktera). Oznaka heksadecimalne vrednosti može se koristiti i kod numeričkih promenljivih u kojima će se automatski heksadecimalna vrednost konvertovati u decimalnu. Pošto se unosi maksimalno 4 karaktera heksadecimalne vrednosti dobijamo rezultate od 0 do 65535.

Primer:

10 PRINT $002D
20 PRINT $0F11
30 A=$FFFF
40 PRINT A

Startovanjem primera dobijamo vrednosti 45, 3857 i 65535.

EXOR – logičko isključivo sabiranje

Šta mu dođe logičko isključivo sabiranje i zašto nam je ono potrebno?

Format funkcije: EXOR (a,b) Argument „a“ je broj od 0 do 65535 koji predstavlja osnovu, „b“ je broj od 0 do 65535 koji predstavlja vrednost sa kojom se vrši logičko isključivo sabiranje. Ova naredba vrši ovu vrstu logičke radnje nad decimalnim brojevima koji se prilikom izvršenja pretvaraju u binarne dok se rezultat daje takođe u decimalnom obliku. Kako to funkcioniše? Imamo za primer broj 4 koji se binarno piše kao 100 i broj 2 koji se binarno piše kao 10. Kada se vrši binarno logičko isključivo sabiranje bit 1 i 1 daju 0, 0 i 0 daju 0, 1 i 0 daju 1, 0 i 1 daju 1 tako da se dobija:

             100 - 4
EXOR  011 - 2
             111 - 7

A sada pogledajte ovo:

             111 - 7
EXOR  011 - 2
             100 - 4

Kao što vidite kada rezultat EXOR funkcije ponovo izložite istom broju koji ste upotrebili na osnovnom dobijate taj osnovni broj! Zbog napred date činjenice ova logička funkcija je imala najviše primena u raznim programima za šifriranje celih tekstova, raznih kombinacija brojeva, slika, zvuka, čak i celog programskog koda.

Primer:

10 PRINT "(SHIFT+CLR/HOME)"
'Brisanje ekrana
20 INPUT "UNESI 3 SIFRANTA";M,N,L:IF M>255 OR N>255 OR L>255 THEN 20
'Unosimo tri numeričke vrednosti koje će nam biti šifrantni sa ograničenom vrednošću svake od njih do 255. Ukoliko se pređe ova vrednost za bilo koju promenljivu traži se ponovni unos sva tri šifrantna
30 INPUT "UNESITE TEKST";A$
'Unosimo tekst koji će se šifrirati
40 D=LEN(A$)
'Određujemo koliko uneti tekst ima karaktera (uzima se i razmak)
50 FOR I=1 TO D
'Imamo petlju koja za promenljivu I ima početnu vrednost 1 a za krajnju ukupan broj slova u tekstu koji šifriramo
60 X=ASC(MID$(A$,I,1))
'Pretvaramo slovo po slovo iz osnovnog teksta u brojčanu vrednost Petascii karaktera
70 Q=EXOR (X,M)
'Promenljivoj Q dodeljujemo rezultat EXOR operacije između Petascii koda slova iz teksta i prvog šifranta (enkripcija)
80 W=EXOR (Q,N)
'Promenljivoj W dodeljujemo rezultat EXOR operacije između koda slova,prvog šifranta, a sada i drugog šifranta (dvostruka enkripcija)
90 E=EXOR (W,L)
'Promenljivoj E dodeljujemo rezultat EXOR operacije između koda slova,prvog,drugog, a sada i trećeg šifranta (trostruka enkripcija)
100 PRINT "OSNOV";X;" KODIRANO ";E
'Prikazujemo Petascii kodove osnovnog slova iz teksta i šifrovanog karaktera
110 B$=B$+CHR$(E)
'Tekstualnu promenljivu B$ uvećavamo za tekstualni karakter koji smo dobili prevodom koda šifrovane numeričke promenljive u šifrovani tekstualni karakter
120 NEXT I
'Kraj petlje kada promenljiva I dostigne ukupan broj slova u tekstu
130 PRINT:PRINT B$:PRINT
'Štampamo šifrovani tekst sa razmakom između redova
140 GET P$:IF P$="" THEN 140
'Čekamo da se pretisne neki taster
150 FOR I=1 TO D
'Imamo petlju koja za promenljivu I ima početnu vrednost 1 a za krajnju ukupan broj slova u tekstu koji dešifriramo
160 X=ASC(MID$(B$,I,1))
'Pretvaramo slovo po slovo iz šifrovanog teksta u brojčanu vrednost Petascii karaktera
170 Q=EXOR (X,M)
'Promenljivoj Q dodeljujemo rezultat EXOR operacije između šifrovanog Petascii koda slova i prvog šifranta (poništenje prve enkripcije)
180 W=EXOR (Q,N)
'Promenljivoj W dodeljujemo rezultat EXOR operacije između šifrovanog koda slova,prvog šifranta  i sada drugog šifranta (poništenje druge enkripcije)
190 E=EXOR (W,L)
'Promenljivoj E dodeljujemo rezultat EXOR operacije između šifrovanog koda slova,prvog,drugog i sada trećeg šifranta (poništenje treće enkripcije. Šifrovani karakter je samim tim dešifrovan)
200 PRINT "KODIRANO";X;" OSNOV ";E
'Prikazujemo Petascii kodove šifrovanog karaktera iz teksta i dešifrovanog osnovnog slova
210 C$=C$+CHR$(E)
'Tekstualnu promenljivu C$ uvećavamo za tekstualni karakter koji smo dobili prevodom koda dešifrovane numeričke promenljive u dešifrovani tekstualni karakter
220 NEXT I
'Kraj petlje kada promenljiva I dostigne ukupan broj slova u šifrovanom tekstu
230 PRINT:PRINT C$
'Štampamo sa rednim razmakom dešifrovani tekst koji je identičan osnovnom tekstu

Startovanjem primera računar će nam zatražiti tri šifranta (morali smo da ograničimo vrednosti od 0 do 255 zbog CHR$ funkcije) koje možemo uneti jednog po jednog ili sve u isti red razdvojeno zarezom. Zatim će tražiti tekst koji će se šifrovati. Kada ga unesete dešava se sledeće: prvo se svako slovo iz osnovnog teksta pretvara u brojčanu vrednost Petascii karaktera. Zatim se nad tom vrednošću vrši logičko isključivo sabiranje sa prvim, drugim i trećim datim šifrantima (trostruka enkripcija 256x256x256=16.777.216 kombinacija) i prikazuju se vrednost osnovnog i šifrovanog koda karaktera. Na kraju se prikazuje celi šifrovani tekst (u retkim slučajevima šifrovani tekst se neće ispisati jer neki petascii kodovi koji se dobijaju šifriranjem se ne ispisuju, ali važno je da su tu u memoriji i dostupni za dalje korišćenje. Primer: 77,77,77). Zatim će program uzeti taj šifrovani tekst, ponovo primeniti trostruku ovog puta dekripciju sa istim šifrantima (sada su to dešifranti) i na kraju dobiti osnovni tekst. Kao što vidite pomoću ove logike lako je šifrirati bilo koji tekst, kombinaciju brojeva, programski kod ili bilo koje digitalno delo (fajlove, slike, muziku itd.). Prilikom davanja šifranata može se desiti da se pogode kombinacije istih koji će dati rezultat da šifrovani tekst bude identičan osnovnom tekstu koji smo uneli (npr. 1,4,5 ili 1,6,7 itd). To se dešava kada se vrednosti kodova karaktera prvog sa primenom funkcija EXOR i OR drugog šifranta poklope sa rezultatom (trećim šifrantom). Rešenje je prosto izbegavajte ove kombinacije i proverite da li se tekst zaista šifrovao.

Primer za poklapanje gde se neće izvršiti šifrovanje:

     1 = binarno 001    prvi šifrant
OR   4 = binarno 100    drugi šifrant (enkripcija)
     5 = binarno 101    treći šifrant (rezultat)

i

     1 = binarno 001    prvi šifrant
EXOR 4 = binarno 100    drugi šifrant (enkripcija)
     5 = binarno 101    treći šifrant (rezultat)

Sa ovim završavamo današnju lekciju. Kao što ste videli ove funkcije su zaista korisne (pogotovo AT). Sigurni smo da bi iste našle svoje mesto u standardnom bejziku samo da je u C64 ugrađena njemu prilagođena verzija bejzika.

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/c

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

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