Lekcija 1: C64 Asembler na Commodore 64

Lekcija 1 iz serijala „C64 Asembler“ predstavlja uvod u niskonivou programski jezik za Commodore 64. Objašnjava osnovne razlike između interpreterskih jezika kao što su BASIC i SIMON’S BASIC, i kompajlerskog asembler jezika koji omogućava direktnu manipulaciju memorijom i izvršavanje koda u punoj brzini.Korisnici iz Srbije, Bosne i Hercegovine, Hrvatske, Crne Gore i Severne Makedonije mogu pronaći uputstva kako da započnu sa Turbo Assembler-om, uključujući preuzimanje .prg i .d64 fajlova, komande za pokretanje (SYS 36864), osnovne kontrole, i savete za očuvanje podataka.

Ova lekcija je namenjena početnicima koji žele da pređu sa BASIC jezika na programiranje u asembleru. Objašnjeni su izrazi kao što su heksadecimalni i binarni brojevi, manipulacija memorijskom mapom, bezbednosne preporuke, kao i komande za rad sa editorom, diskom i memorijom.

Poseban fokus je na edukaciji i digitalnom očuvanju znanja iz ere 8-bitnih računara, što je posebno važno za lokalnu retro zajednicu, kolekcionare, edukatore i nostalgične korisnike Commodore 64 računara.

Ključne fraze: C64 Asembler Srbija, Commodore 64 Turbo Assembler, C64 programiranje za početnike, SYS 36864, heksadecimalne adrese C64, retro programiranje, asembler emulator CCS64 Vice, C64 lekcije na srpskom, programiranje u Turbo Asembleru, C64 editor komande.

Lekcija 1 iz serijala „C64 Asembler“ predstavlja uvod u niskonivou programski jezik za Commodore 64. Objašnjava osnovne razlike između interpreterskih jezika kao što su BASIC i SIMON’S BASIC, i kompajlerskog asembler jezika koji omogućava direktnu manipulaciju memorijom i izvršavanje koda u punoj brzini.Korisnici iz Srbije, Bosne i Hercegovine, Hrvatske, Crne Gore i Severne Makedonije mogu pronaći uputstva kako da započnu sa Turbo Assembler-om, uključujući preuzimanje .prg i .d64 fajlova, komande za pokretanje (SYS 36864), osnovne kontrole, i savete za očuvanje podataka.

Ova lekcija je namenjena početnicima koji žele da pređu sa BASIC jezika na programiranje u asembleru. Objašnjeni su izrazi kao što su heksadecimalni i binarni brojevi, manipulacija memorijskom mapom, bezbednosne preporuke, kao i komande za rad sa editorom, diskom i memorijom.

Poseban fokus je na edukaciji i digitalnom očuvanju znanja iz ere 8-bitnih računara, što je posebno važno za lokalnu retro zajednicu, kolekcionare, edukatore i nostalgične korisnike Commodore 64 računara.

Ključne fraze: C64 Asembler Srbija, Commodore 64 Turbo Assembler, C64 programiranje za početnike, SYS 36864, heksadecimalne adrese C64, retro programiranje, asembler emulator CCS64 Vice, C64 lekcije na srpskom, programiranje u Turbo Asembleru, C64 editor komande.

lekcija 1

lekcija 2

(C64 Assembly)

Dobrodošli u Malu školu programiranja na Commodore 64, ovog puta u asemblerskom jeziku! Do sada smo prošli C64 standardni i Sajmons bejzik – dva programska jezika koji spadaju u klasu interpretera i koji nose titulu viših programskih jezika. To je iz razloga veoma olakšanog programiranja putem očitih naredbi koje obuhvataju sva područja programiranja. (Ovo nije bio slučaj kod standardnog bejzika jer su istom falile većina naredbi za grafiku, zvuk, sprajtove i sl. Sajmons bejzik je pokrpio ove rupe i zajedno su činili veoma dobru zaokruženu programsku celinu).


Šta je interpreterski programski jezik?

Interpreter je programski jezik gde se napisani program izvršava liniju po liniju, svaka se posebno prevodi u mašinski jezik (osnovni kod računara), a potom izvršava. To je za računar mukotrpan posao koji mu oduzima mnogo vremena (zbog toga je standardni jezik veoma spor. Sajmons bejzik je u nekim stvarima dosta brži od standardnog bejzika, ali u usporedbi sa asemblerom takođe je veoma spor).

Šta je asemblerski kompajler?

Kada je u pitanju asembler, on je kompajlerski programski jezik (prevodilac) i nosi opis nižeg programskog jezika iz razloga što se potpuno oslanja na manipulaciju memorijskom mapom računara (možemo koristiti i gotove mašinske podprograme koji pripadaju operativnom sistemu). To znači da se njegov kod u celini direktno prevodi u mašinski kod u njegovom najosnovnijem obliku. Ovaj način je ono što C64 najviše voli. Mašinski kod se izvršava punom brzinom gde dolazi do izražaja brzina centralnog i pomoćnih procesora računara.

Imajte u vidu da je asembler često nazivan mašincem, što u suštini nije greška jer su ova dva pojma čvrsto povezana. Razlika je u tome što je izvorni/asemblerski kod onaj koji piše programer (Pseudo naredbe), a kompajlirani/prevedeni je mašinski kod koji koristi računar (0 i 1 bit kombinacije organizovanih u jedan bajt – 8 bita u opsegu 0-255 decimalno ili 0-FF heksadecimalno).


Napomene, saveti i objašnjenja

Prvo što moramo da odlučimo kada počinjemo da programiramo u asembleru je koji program ćemo koristiti za to. Postoji više asemblerskih programa za C64, od kojih su najpoznatiji Profi Assembler, Turbo Assembler i Turbo Mac Pro Assembler.

  • Profi Assembler: Unos koda se vrši putem programskih linija kao kod Bejzik programa, koristeći ekranski editor standardnog Bejzika.
  • Turbo i Turbo Mac Pro Assembler: Imaju svoj poseban ekranski editor za unos koda, bez bespotrebnog unosa redova i sa mogućnosti korišćenja funkcijskih i makro tastera za olakšanje rada, kao i šetnje gore-dole po programu putem kursorskih strelica. Takođe, odmah po unosu koda vrši se provera njegove ispravnosti.

Ovaj način rada je daleko efikasniji i nadalje ćemo u našim lekcijama raditi sa Turbo Asemblerom, koji je po našem mišljenju najpogodniji, pogotovo za početnike. Naravno, na vama je da odlučite koji asemblerski kompajler želite da koristite.


VEOMA VAŽNA NAPOMENA

Asemblerski programi, za razliku od interpreterskih (koji takođe mogu da stvore problem, ali u značajno manjem obimu), pogrešnom manipulacijom memorijskih adresa veoma lako mogu da izazovu brisanje ili korupciju unetog programa, kao i krahiranje računara/emulatora. Ovim se nepovratno gubi uneti program (naravno, da bi se sistem oporavio, dovoljno je ugasiti/upaliti računar ili hard resetovati emulator).

Zato se snažno preporučuje da pre nego što startujete uneti mašinski program isti snimite (kod emulatora je to veoma olakšano uvođenjem *state*, odnosno *snapshot* snimanja/učitavanja). Takođe, imajte u vidu da eksperimentisanje sa promenama vrednosti memorijskih lokacija može dovesti i do uništenja podataka na fizičkoj ili virtuelnoj disketi, pa se snažno preporučuje pravljenje kopija istih ukoliko poseduju važne podatke.


TURBO ASEMBLER – Skidanje sa interneta

Sajt sa koga možete skinuti verziju Turbo Asemblera 6.0 je https://csdb.dk/release/?id=102008, koja je verzija data u `.prg` formatu. Učitavanje ovog formata kod CCS64 je kao i sa drugim programima. Ako koristite Vice, izaberite `autostart disk/tape image`. Starija verzija 5.1 https://csdb.dk/release/?id=199520 data je u standardnom `.d64` formatu.

Naravno, možete koristiti bilo koju verziju koju skinete sa interneta (komande su iste sa malim varijacijama izgleda ekrana editora i izvršavanja).


Startovanje kompajlera

Ovaj asemblerski programski kompajler se startuje sa naredbom SYS 9*4096 (nekada je bilo uobičajeno da se memorija podeli na 16 segmenata po 4 kilobajta zbog heksadecimalne konverzije $1000 = 4096 bajta, tako da množenjem sa devet znači da je asembler smešten počev od 36-og kilobajta u memoriji računara – heksadecimalno $9000) ili naravno možemo samo otkucati SYS 36864.

Imajte u vidu da nam u našem asemblerskom programiranju neće biti potrebne sve komande koje ovaj program nudi i kod pisanja programa počev od druge lekcije naglašavaćemo koje komande koristimo i ceo postupak korak po korak.

Kod većine komandi glavnu reč ima taster leve strelice ← (kod emulatora taster „~“, koji se nalazi levo od jedinice), kao makro taster koji u kombinaciji sa različitim slovima i karakterima daje željene akcije (prvo se pritisne strelica ulevo, pa onda željena komanda – ne istovremeno).

Prilikom startovanja programa dobija se crni ekran sa crnom pozadinom (koje boje se mogu menjati u definisanim kombinacijama) sa ispisom u karakter setu 2 (velika i mala slova). U zadnja dva reda imamo ispisano „turbo assembler“, a ispod toga:

  • x: (broj kolone gde je kursor)
  • line (broj reda u kome je kursor)
  • bot: (adresa u kojoj se smeštaju komandni kod koji unosimo – ne programski kod)
  • insert (pokazuje u kom modu se nalazimo – osnovni je `replace`/pisanje preko karaktera na kome je kursor, a ako imamo ispis „char“ onda je `insert` mod/umetanje karaktera od pozicije kursora)
  • line (automatski režim umetanja reda uključen/isključen)

Kako izgleda unos koda u editoru

Kada počnemo sa unosom koda koji program prepoznaje kao ispravan, isti će se automatski povući desno za 8 karaktera i početi ispis od devetog sivom bojom (ovo su osnovne boje podešene od startovanja programa. U nekim verzijama Turbo Asemblera boje su drugačije, a takođe možete podesiti željene boje putem opcija).

U slučaju unosa teksta koji nije prepoznatljiv programu kao asemblerski kod, isti će se prihvatiti kao mesto skoka ili labela i krenuti ispis od početka reda/prve kolone. U slučaju da je kod prepoznat, ali je unet u neispravnom formatu, isti će promeniti boju iz sive u belu, što ukazuje na pogrešan format, i u pretposlednjem redu će se ispisati tekst koji će objasniti koja je greška nastala.


Komande Turbo Asemblera

Pomeranje kursora po ekranu, dodavanje i brisanje karaktera i redova

  • CRSR LEVO/DESNO – pomeranje kursora levo/desno za jednu poziciju u redu
  • CRSR GORE/DOLE – kretanje gore/dole po redu
  • RETURN – umetanje reda (ako je u režimu umetanja reda) i prelazak na ovaj red
  • SHIFT+RETURN – skok na sledeći red
  • F1/F7 – skrolovanje 20 redova gore/dole
  • F2/F8 – skok na početak/kraj izvornog koda
  • F3 – ispisivanje teksta komande .word
  • F4 – asembliranje unetog programa i automatsko startovanje
  • F5 – ispisivanje teksta komande .byte
  • F6 – brisanje reda u kome se nalazi kursor
  • ←CRSR GORE/DOLE – skrolovanje 200 redova gore/dole
  • ←Q – prelazak na početak reda
  • ←N – prelazak na željeni red dajući njegov broj
  • ←Y – prelazak na donji red
  • DEL – brisanje karaktera levo od kursora
  • INST – automatski režim umetanja karaktera uključen/isključen
  • ←DEL – brisanje stvarnog reda
  • ←INST – automatski režim umetanja reda uključen/isključen
  • ←RETURN – umetanje reda od pozicije kursora
Napomene:
  1. Nakon što napustite red, TURBO-ASM automatski proverava svoju sintaksu.
  2. Kod Turbo Asemblera postoji manji bag koji se iskazuje ako damo asembliranje pritiskom na F4 taster, a da nismo uneli nikakav kod ili test. U ovom slučaju dolazi do kraha računara/emulatora. Takođe, prilikom asembliranja pritiskom na F4, tekst o greškama i osnovnim podacima samo će protrčati ekranom, tako da nismo u stanju da isti pročitamo (da bismo izbegli ove bagove, umesto korišćenja F4 tastera treba koristiti kombinaciju strelice ulevo i broja 3).

Asembliranje

  • ←3 – asembluje u memoriju, prikazuje nastale greške ukoliko postoje i na kraju pita da li želite startovati kompajlirani program
  • ←4 – navodi asembliranu datoteku u: ?=štampač, *=ekran, ime datoteke=datoteka
  • ←5 – asemblira u objektnu (izvršnu) datoteku
  • ←U – navodi oznake/labele u: ?=štampač, *=ekran, ime datoteke=datoteka

Postavljanje tabulatora, linije, brisanje, kopiranje

  • ←2 – ispisuje se ;---------------------------------------- red
  • ←/ – briše od kursora do kraja reda (cut)
  • ←RAZMAK – popunjava red razmakom/briše postojeći tekst u redu
  • ←↑ – kopira red u kome je kursor (copy)
  • ←= – iseca red od početka do kursora (cut)
  • ←(funta) – nalepljuje isečeni ili kopirani tekst (paste)

Operacije blokiranja i označavanja

  • ←M – postavlja oznaku (#0-9), početak bloka (#s) ili kraj bloka (#e)
  • ←G – ide na oznaku markera (#0-9)
  • ←; – oznaka za brisanje markera (0-9)
  • ←: – lista svih oznaka
  • ←B – blok operacije: pisanje (u ASCII SEQ datoteku), brisanje, kopiranje.
  • ←E – umetanje (UVOZ ASCII SEQ) datoteke sa diska na trenutnu poziciju
Napomena:

Nikada ne treba označiti prvi red izvornog koda kao početak bloka.

Pretraga i zamena

  • ←F – pretraga stringa
  • ←H – pretraga sledećeg pojavljivanja
  • ←R – zamena stringa 1 sa stringom 2, pretraga prvog pojavljivanja
  • ←T – zamena i pretraga sledeće zamene
  • ←Y – zamena svih pojavljivanja

Programiranje funkcijskih tastera

  • ←F1 – Resetovanje funkcijskih tastera (F3=“.word“, F4=asembliranje i pokretanje, F5=“.byte“, F6=brisanje linije)
  • ←A – Unos svih karaktera (izlaz sa „←“); da biste dobili „←“ pritisnite „←“ dva puta (sve akcije i funkcijski tasteri daju svoj simbolički inverzni ispis) korisno kada se definišu F-tasteri
  • ←K – pritisnite F-taster (F3-F6) da biste redefinisali

Operacije sa diskom

  • ←* – direktorijum diska
  • ←@ – status diska
  • ←D – komanda diska:
    • "N:ime,ID" – Formatizuje novu ili briše sve podatke sa stare diskete i dodeljuje ime diskete i identifikacioni broj (opciono)
    • "S:ime datoteke" – briše datu datoteku sa diskete
    • "R:novo ime=staro ime" – menja naziv datoteke
    • "C:ime nove datoteke=ime stare datoteke" – kopira datoteku pod drugim imenom
    • "I" – inicijalizacija disketne jedinice
    • "V" – reorganizacija diskete
  • ←P – podešavanje EOR-kod za kodiranje izvornog koda
  • ←W – upisuje sav izvorni kod u ASCII SEQ datoteku (IZVOZ)
  • ←L – učitavanje izvornog koda
  • ←S – čuvanje izvornog koda (moguće prepisivanje sa prefiksom `@:`)
NAPOMENE:
  1. TURBO-ASM učitava svoj izvor od vrha ($8FEB) do dna ($0800) memorije i obrađuje njegove opkodove, brojeve po sopstvenom (kao BASIC tokeni).
  2. Čuvanjem i učitavanjem izvornog koda, TURBO-ASM takođe čuva i učitava konfiguracije poput boja, F-tastera, oznaka i stvarne pozicije kursora.

Operacije sa memorijom

  • ←6 – konvertuje memorijski blok između adresa u podatke izvornog koda
  • ←J – čuva memorijski blok između adresa
  • ←SHIFT+F – puni memorijski blok između adresa kodom
  • ←SHIFT+L – učitava u memorijsku adresu
  • ←SHIFT+S – čuva memorijski blok između adresa

Ostale komande

  • ←C – hladan start (inicijalizuje TURBO-ASM i briše izvorni kod)
  • ←I – inicijalizuje TURBO-ASM i briše neiskorišćenu memoriju
  • ←+ – sabira dva heksadecimalna broja
  • ← - – oduzima dva heksadecimalna brojeva
  • ←V – prikaz korišćenja memorije: `-` slobodni blokovi, `+` korišćeni blokovi
  • ←O – promena boja okvira, pozadine i ispisa editora (osnovna + 5 kombinacija)
  • ←SHIFT+K – klik tastera uključeno/isključeno
  • ←1 – izlaz iz TURBO-ASM-a. (SYS 36864 ili SYS 333 za ponovno pokretanje)
NAPOMENA:

←V radi nepravilno u opsegu $E000-$FFFF, jer čita I/O i KERNAL.


Izrazi

Asembler radi sa 8 i 16-bitnim brojevima sa sledećim notacijama:

  • $ – za heksadecimalne brojeve
  • % – za binarne brojeve
  • ! (ili ništa jer se podrazumeva) – za decimalne brojeve
  • "x" – za znakove

Dozvoljene operacije u izrazima (u redosledu od najviše do najniže hijerarhije):

  • () – zagrade
  • * / – množenje, deljenje
  • + - – plus, minus
  • : & . – EOR, AND, OR operacije

Specijalne operacije:

  • < – niži bajt 16-bitnog izraza
  • > – viši bajt 16-bitnog izraza
  • * – stvarna asemblirana adresa ili definisanje početka objektnog koda (*=start)
NAPOMENA:
  1. Nikada ne koristite oznaku posle oznake label=* ili sličnu kombinaciju.
  2. Ne koristite područje između $E000-$FFFF (rezervisano za TURBO-ASM oznake).

Pomoćne komande

  • .OFFS adresa – podešavanje pomeranja objektnog koda (dodavanjem adrese)
  • .BYTE bajt1,bajt2,... – ubacivanje bajtova
  • .WORD reč1,reč2,... – ubacivanje reči (dva bajta)
  • .TEXT "tekst1","tekst2",... – ubacivanje tekstualnih nizova
  • ; – unos komentara poput REM naredbe kod Bejzika

Završavamo sa današnjom lekcijom. Nadamo se da Vas nismo zabrinuli ili smorili ovom gomilom komandi, različitim nepoznatim izrazima i sl. Imajte u vidu da se programski jezik poput asemblera najbolje uči korak po korak, tako da ćemo ići lagano.

Vidimo se u asembler lekciji 2!

Puno pozdrava!

Preslušaj audio recenziju ovog teksta na srpskom jeziku.

https://test.techfokus.rs/c64-asembler-lekcija-2-registri-memorija-naredbe/

Ostavite komentar

Vaša adresa e-pošte neće biti objavljena. Neophodna polja su označena *

Scroll to Top