Galaksija 2024

Galaksija 2024 – uputstvo za upotrebu

Galaksija 2024 je po svemu slična originalnom modelu iz 1983. godine, s kojim je potpuno kompatibilna. Zato opsežna dokumentacija napisana za originalnu Galaksiju i dalje predstavlja osnovnu bazu znanja za snalaženje sa računarom. Najvažniji dokumenti su:

  • Računar galaksija – Uputstvo za upotrebu, umetak Računara u vašoj kući i reprint-izdanja iz 2024. godine. Tekst je raspoloživ na https://dejanristanovic.com/rac1/rac1umet.htm
  • Računar galaksija – ROM 2, umetak objavljen krajem 1984. godine u Računarima u vašoj kući 3. Moderna Galaksija ima u okviru svog sistemskog softvera i ROM 2 (odnosno kako ga sada nazivamo ROM B), pa će ovaj umetak biti važan naročito ako želite da koristite asembler za pisanje mašinskih programa. Umetak je u elektronskoj formi raspoloživ na https://dejanristanovic.com/refer/galrom2.htm
  • Galaksija bez tajni, tekst objavljen juna 1984. u Računarima u vašoj kući 2. Detaljno opisuje strukturu Galaksijinog ROM-a i sistemske pozive koje možete da koristite u svojim programima da biste, recimo, dodavali Galaksiji nove naredbe i funkcije. Tekst je u elektronskoj formi raspoloživ na https://dejanristanovic.com/refer/galadv.htm
  • Galaksija 2024 je tekst koji upravo čitate i koji treba da predstavi novitete koje je donela nova Galaksija.

Povezivanje i osnovno snalaženje

Lako je pokrenuti Galaksiju. Potreban vam je pre svega monitor. Poslužiće bilo koji moderni TFT monitor ili televizor, koji ćete najlakše povezati ako na njemu postoji kompozitni video ulaz, koji ćete prepoznati po tzv. “činč” konektorima, kao na slici. Ovi konektori su poznati i pod nazivom RCA.

Činč (RCA) konektor za povezivanje Galaksije sa monitorom

Jedna od brojnih implementacija konvertera sa kompozitnog videa na HDMI

Ukoliko nemate monitor sa kompozitnim video ulazom, možete da koristite i monitor sa HDMI ulazom (danas ga svi monitori imaju), uz konverter video na HDMI, koji ćete lako pronaći na našem tržištu, pod imenom nalik na “AV to HDMI adapter”; ne košta mnogo. Pri kupovini obratite pažnju na oznaku – ovakvi uređaji obično konvertuju samo u jednom smeru, pa biste pogrešili ako kupite “HDMI to AV adapter”. Osim toga, imajte u vidu da je ovakav uređaj aktivan, tj. treba mu napajanje koje se obično realizuje USB kablom, uz minimalnu potrošnju struje. Potrebni su i činč kabl za vezu od Galaksije do adaptera, kao i HDMI kabl za vezu adaptera sa monitorom.

Iako će Galaksija raditi sa bilo kojim modernim monitorom, njenih 32 znaka u redu i velika slova deluju malo neobično na nekom 32” ili još većem ekranu. Zato ako možete da birate, uzmite monitor dijagonale 8, 9 ili 10 inča sa odnosom stranica 4:3 umesto uobičajenog 16:9. Često se takvi monitori prodaju za potrebe video nadzora.

Barrel konektor za povezivanje napajanja

Galaksiji je potreban stabilisani izvor napajanja napona 5 V, a za priključenje se koristi Barrel konektor sa plus izvodom prečnika 2,1 mm – najstandardnija moguća varijanta, koju ćete lako kupiti u bilo kojoj radnji koja prodaje elektronske komponente. Osim ovih, postoje i konektori koji spolja izgledaju isto, ali je njihov plus izvod prečnika 2,5 mm, a jedino je važno upotrebiti konektor istog prečnika kao onaj na Galaksiji. Lako je napraviti kabl za napajanje sa bilo kog ispravljača za mobilni telefon koji na sebi ima USB port.

Galaksija će proraditi čim je priključite, na šta ukazuje dioda na levoj strani matične ploče, a poruka READY će se odmah pojaviti na ekranu. Ako, možda pišući neki mašinski program, Galaksiju uvedete u neko neregularno stanje u kome nemate kontrolu nad računarom, pritisnite reset taster koji se nalazi sa zadnje strane računara. Ukoliko čak ni to ne pomogne, pritisnite restart taster sa desne strane matične ploče i Galaksija će se vratiti u inicijalno stanje, ali ćete u tom slučaju izgubiti program koji se nalazio u memoriji; kao da ste isključili računar iz napajanja i ponovo ga uključili.

Tasteri za reset i restart Galaksije

O povezivanju sa PC-jem biće reči u posebnom poglavlju.

Tastatura

Tastatura Galaksije je realizovana preko kvalitetnih Cherry tastera, pa je upotreba veoma udobna. Ipak, potrebno je nekoliko napomena koje potiču od kompatibilnosti sa originalnim projektom, kada je Galaksija morala da koristi jedine tastere koji su mogli da se kupe u tadašnjoj Jugoslaviji, koje je proizvodio slovenački IEVT (Inštitut za Elektroniko in Vakuumsko Tehniko). Stoga je Galaksijin sistemski softver prilagođen natpisima na kapicama koje je isporučivao IEVT, a koji danas više ne postoje.

Slova i brojevi su tamo gde ih i očekujete, ali su specijalni znaci drugačije raspoređeni na Cherry kapicama nego na originalnoj Galaksiji. Minimalnim izmenama u ROM-u A, postignuto je da taster ispisuje ono što je na njemu ucrtano, pa će tako Shift+9 ispisati otvorenu zagradu, za šta se nekad koristilo Shift+8. Izuzetak je Shift+2, gde je kod Galaksije navodnik, iako na tasteru piše @, što je znak koji ne postoji u Galaksijinom setu karaktera. Osim toga, pun blok je stavljen iznad šestice, umesto znaka ^. Pomenimo i naša slova ČĆŠŽ (Galaksija nema Đ) koja se dobijaju pritiskom na Shift+X, Shift+C, Shift+S i Shift+Ž respektivno. Ostala slova nemaju šiftovane funkcije – Shift+A, na primer, daje slovo A.

Pritisak na Esc u gornjem desnom uglu tastature (na originalnoj Galaksiji zvao se BRK, Break) nalaže računaru da prekine sa izvršavanjem nekog programa i na ekranu ispiše READY (ako to ne uspe, sledeća instanca je RESET taster o kome je već bilo reči). Na novoj Galaksiji Shift+Esc omogućava nekoliko posebnih funkcija, na primer, snimanje kompletnog sadržaja memorije ili ekrana u flash memoriju, čime ćemo se baviti u kasnijem poglavlju.

Izvesna neprijatnost je u tome što se Esc taster nalazi gore desno, tamo gde na modernim tastaturama uglavnom stoji Backspace za brisanje upravo otkucanog karaktera. I Galaksija ima Backspace, ali se on nalazi red niže, i dodeljen je strelici ulevo. To će zahtevati malo navikavanja. Taster Delete (nekada DEL) briše karakter “ispod” kursora, i najčešće se koristi u editoru. Treba se još setiti da Shift+Delete briše kompletan sadržaj ekrana.

Taster Insert (nekada REPT) ima funkciju autorepeat (automatsko ponavljanje) – pritisak na njega nalaže računaru da ponavlja funkciju prethodno pritisnutog tastera. To može biti i strelica ulevo (Backspace), posle koje će Insert brisati liniju unazad, znak po znak, sve dok ne obriše čitav red.

Finalnu specifičnost Galaksijine tastature donosi Pause, koji se nekad zvao STOP LIST. Pritisak na njega nalaže računaru da na ekranu prikaže sadržaj bejzik programa koji se nalazi u memoriji. Dok držimo Pause pritisnut, program se ispisuje (možda primetite da je ispis prijatniji za oko nego nekad), a otpuštanje tastera privremeno zaustavlja listanje, da bismo pregledali ispisane komande. Pritiskom na Esc možemo da prekinemo listanje programa ako smo videli ono što nas je zanimalo.

Zastarele komande

Projekat Galaksije je u nekim segmentima pojednostavljen – samogradnja je olakšana i pojeftinjena uklanjanjem komponenti koje danas nemaju mnogo smisla. Tako je Galaksija ostala bez ekspanzionog porta i interfejsa za povezivanje sa kasetofonom. Komande za rad sa kasetofonom su ostale (osim OLD? verifikacije, koja danas nema smisla), proširene tako da omoguće snimanje i učitavanje programa u flash memoriju, ali je uklanjanje ekspanzionog porta značilo da nema mogućnosti priključenja na štampač uz komunikaciju po prastarom Centronics protokolu.

Zato su komande LPRINT, LLIST, LDUMP, INP i OUT sada ukinute i kod je uklonjen iz operativnog sistema. Ostale komande iz ROM-a B, kao što su matematičke funkcije, asembler i pretraživanje, funkcionišu normalno.

Snimanje i učitavanje programa

Umesto na kasetofon, nova Galaksija upisuje programe i podatke u svoju flash memoriju (preciznije rečeno, EEPROM) kapaciteta 512 kilobajta. To je “bruto” kapacitet, od koga se mali deo troši za tabelu zauzetih sektora (FAT) i druge sistemske potrebe – za korisnikove programe i podatke ostaje 1008 blokova po 512 bajta, dakle 516,096 bajta. Maksimalno dopušteni broj datoteka u ovoj memoriji je 480, a ime svake od njih može da ima do 14 znakova.

Interna organizacija EEPROM-a

Na početku rada treba formatirati ovaj prostor, što se radi komandom FORMAT. Napominjemo da će izvršavanje ove komande obrisati sav raniji sadržaj flash memorije, pa treba biti oprezan kod primene, jer ne postoji UNDO, kao ni UNFORMAT. Galaksija će ispisati kontrolno pitanje pre nego što stvarno formatira EEPROM.

Počnimo od najjednostavnijeg: da biste snimili bejzik program koji je smešten u memoriju, kucate SAVE “IME” pri čemu je IME naziv koji dajete svom programu. Kasnije ga možete učitati u radnu memoriju komandom OLD “IME”.

Kada radimo sa mašinskim programima ili nekim drugim podacima, potrebna je mogućnost snimanja dela memorije, ma kakav se sadržaj u njoj nalazio. Za to će nam poslužiti naredba SAVE “IME”, mmmm, nnnn, pri čemu mmmm označava početnu, a nnnn krajnju adresu memorije čiji se sadržaj snima. Da bismo, na primer, snimili mašinski program koji se nalazi u ćelijama memorije čije su adrese od &3C30 do zaključno sa &3FFF, otkucaćemo komandu SAVE “PROGRAM”, &3C30, &3FFF.

Kod učitavanja komandom OLD “IME” Galaksija će učitane bajtove smestiti na iste adrese na kojima su se nalazili pre snimanja. Ponekad je potrebno da učitavamo podatke na neke druge adrese. Ako želimo da program bude učitan na adrese koje su za 1024 veće od originalnih, koristićemo OLD “IME”, +1024 (ili, što je isto, OLD “IME”, +&400) – program iz prethodnog primera onda ne bi bio učitan na adrese &3C30-&3FFF, nego na &4030-&43FF. Da je pomeranje trebalo da bude negativno (prema početku memorije) otkucali bismo OLD “IME” -1024 ili OLD “IME” -&400. Ako tačno znate na koju adresu želite da učitate program, zanemarujući adrese sa kojih je snimljen, onda kucate OLD “IME” =mmmm, na primer OLD PROGRAM =&3500

Da bismo videli spisak svih programa upisanih u flash memoriju, koristićemo komandu DIR, koja će nas ujedno obavestiti i o raspoloživom slobodnom prostoru. Ako iza DIR navedemo neko ime, recimo DIR “JACK”, onda će biti ispisana samo imena fajlova u čijem nazivu postoji tekst “JACK”, recimo igra Jumping Jack. Postoji i mogućnost da navedemo znak & (npr. DIR &) i tada će adresa sa koje se program učitava i njegova dužina biti ispisane u heksadecimalnom brojnom sistemu.

Da biste obrisali neki nepotreban fajl iz flash memorije, koristite komandu ERASE “IME”. Pazite da je ne pomešate sa DELETE koja briše niz sukcesivnih linija bejzik programa. Budite oprezni kada brišete fajlove, jer greškom obrisani fajl ne možete povratiti (osim ako neko jednom ne napiše UNDELETE za Galaksiju, kao nekad za PC računare). Zato je dobro da važne fajlove povremeno prebacite na PC i tamo ih sačuvate.

Najzad, za promenu imena nekog fajla koristićete MOVE “STAROIME”, “NOVOIME” – opet, pazite da ne iskoristite komandu REN, jer je ona na Galaksiji RENUMBER, promena linijskih brojeva programa u memoriji.

Pomenimo i dve komande vezane za administriranje sadržaja flash memorije. Komanda BLOCKS ispisuje logičku strukturu EEPROM-a u smislu zauzetosti blokova. Šest redova će biti popunjeno grafičkim karakterima (16×64 piksela) kako biste videli zauzeti i slobodni prostor. Ukoliko bi se (možda zbog nehotičnog gašenja računara u toku upisa podataka u EEPROM) broj realno slobodnih blokova razlikovao od onoga što je upisano sistemskoj sekciji diska, podatke možete da uskladite komandom RESCAN. Ova komanda će skenirati sadržaj svih snimljnih programa i iznova formirati internu tabelu zauzetosti blokova, od kojih svaki memoriše po 510 bajtova.

Ako u toku razvoja nekog programa želite da snimite kompletan sadržaj RAM memorije, da biste posle nekog eventualnog kraha vratili sve u prethodno stanje, pritisnite Shift+Esc i onda, držeći te tastere pritisnute, pritisnite drugom rukom strelicu nagore. Sadržaj će biti snimljen u EEPROM pod imenom MEMORY i taj sadržaj neće biti izbrisan kada isključite računar. Da biste ga vratili u memoriju, takođe pritisnite Shift+Esc i strelicu nadole. Pri tom budite oprezni jer će ovom operacijom tekući sadržaj memorije biti nepovratno izgubljen.

Na sličan način sa Shift+Esc i strelica ulevo možete da snimite kompletan sadržaj ekrana – nastaće fajl pod imenom SCREEN. Taj sadržaj po potrebi vraćate na ekran sa Shift+Esc i strelica udesno.

Komunikacija sa PC-jem

Galaksija ima serijski port za komunikaciju sa PC računarom, Arduino ili nekim drugim kontrolerom, pa i za komunikaciju dve Galaksije. Da biste komunicirali sa PC-jem, potreban vam je odgovarajući kabl, koji ćete naći pod imenom nalik na USB-UART konverter. Priključite ga u USB port vašeg računara, on se u Device Manager-u pojavi kao COM port, zapišete oznaku tog porta (recimo COM10) i onda komunicirate preko njega koristeći bilo koji terminal emulator. Za prenos programa sa Galaksije i na Galaksiju napisan je poseban set komunikacionih programa za PC, koje možete preuzeti sa sajta racunari.com/galaksija/.

Instalacija programa

Set programa za komunikaciju pisan je u programskom jeziku Python i dobijate ga u izvornom obliku i preveden u EXE koji može da se izvršava na Windows računarima. Programi u izvornom obliku radiće i pod Linux-om kao i na Mac-u.

Za instalaciju, napravite neki folder, recimo C:\\GALCOMM i u njega raspakujte arhivu koju ste preuzeli sa sajta. U folderu će se naći sledeći programi:

transmit.py i transmit.exe – Prebacivanje programa sa PC-ja na Galaksiju. Na Galaksiji se kuca OLD #

receive.py i receive.exe – Prebacivanje programa sa Galaksije na PC. Na Galaksiji se kuca SAVE #

backup.py i backup.exe Backup kompletnog sadržaja Galaksijinog EEPROM-a na PC. Na Galaksiji se kuca BACKUP

restore.py i restore.exe Restore kompletnog sadržaja Galaksijinog EEPROM-a iz ranije napravljenog backup-a. Na Galaksiji se kuca RESTORE

Svim ovim programima ne potrebna adresa COM porta. Ona se može navoditi u komandnoj liniji pri pozivanju, ali je mnogo lakše da je jednom za svagda upišete u tekstualni fajl COMPORT.TXT koji se nalazi u istom folderu gde i programi. U arhivi je dat primer tog fajla – treba samo da ga editujete i unesete oznaku porta na vašem sistemu. Ako ne znate broj porta, otvorite Device Manager i pogledajte pod Ports (COM & LPT). Na slici u vidite da je oznaka porta na konkretnom sistemu COM36.

Oznaka COM porta u Device Manager-u

Za startovanje EXE programa nije potrebna nikakva dodatna instalacija. Ako želite da programe koristite u njihovom izvornom obliku, da biste možda menjali neke parametre u njima, na vašem sistemu treba da bude instalirana aktuelna verzija programskog jezika Python. Takođe treba da instalirate biblioteku za serijsku komunikaciju, što se obavlja komandom pip install pyserial.

Programi i GTP format

Za računar Galaksija napisano je mnogo igara i drugih programa koji su, zahvaljujući entuzijazmu brojnih “galaktičara”, sa analognog snimka na audio-kasetama prebačeni u digitalni format i sačuvani na brojnim sajtovima. U okviru projekta Galaksija 2024 prikupili smo brojne programe, testirali ih i upisali u arhivu koju možete da preuzmete sa racunari.com/galaksija/

Programi su sačuvani u GTP (Galaksija TaPe) formatu. To je nezvanični format koji ima nekoliko varijanti. Python programi iz našeg paketa su spremni za učitavanje svih tih formata, ali će datoteku snimati u prvom i najjednostavnijem. Kratak opis tog formata je:

Datoteka počinje 00 bajtom.

Slede dva bajta koja određuju dužinu datoteke. Posmatrajte ih kao 16-bitni broj čiji je bajt manjeg značaja prvi (tzv. little-endian format).

Slede dva 00 bajta i bajt &A5.

Slede dva bajta koja označavaju od koje adrese u memoriji se datoteka učitava, opet u little-endian formatu. Kod velike većine programa ta adresa je &2C36.

Slede dva bajta koja označavaju kraj datoteke, tj. adresu prvog slobodnog bajta nakon njenog učitavanja. Takođe u little-endian formatu.

Sledi sadržaj datoteke.

Posle zadnjeg bajta upisuje se checksum – sabiraju se svi bajtovi počevši od &A5 iz zaglavlja. Na kraju se taj zbir svede na vrednost od 0 do 255 (checksum & 0xFF) i onda se rezultat oduzme od 255.

Na kraju se može upisati još jedan dummy bajt koji postoji iz nekih istorijskih razloga iz vremena snimanja podataka na traku. Sadržaj ovog bajta je nebitan, i on ne mora ni da se beleži, ali postoji kod većine GTP programa.

Imena GTP fajlova na PC-ju mogu biti veoma duga, dok Galaksija u svoj EEPROM upisuje samo imena duga do 14 znakova, koji mogu biti samo velika slova, brojevi i specijalni znaci tačka (.) i donja crtica (_). Zato je povremeno potrebno prilagođavanje imena kako bi fajl mogao da se upiše u Galaksijin EEPROM. To prilagođavanje programi obavljaju automatski, ali ćete nekad poželeti da sami zadate pogodnije ime.

Prenos programa na Galaksiju – transmit / OLD #

Da biste preneli program u GTP formatu sa PC-ja na Galaksiju, koristite program transmit. Otvorite komandni prozor (command prompt), pređite u njega (npr. cd c:\\galcomm) i kucajte transmit ime_programa, recimo transmit galrat (za igru Galaktički rat). PC će čekati da na Galaksiji otkucate OLD # i trenutak kasnije program GALRAT.GTP će biti prenesen na Galaksiju. Tokom prenosa ekran Galaksije je zamračen jer ona, da bi održala serijsku komunikaciju, nema vremena da iscrtava sliku. Program transmit će vam u poslednjem redu ispisa sugerisati kako da na Galaksiji snimite upravo preneti fajl u EEPROM. U najvećem broju slučajeva dovoljno je da na Galaksiji otkucate SAVE “IME”, ali kod nekih programa će biti neophodno da unesete početku i krajnju adresu snimanja, recimo SAVE “SPIRIDON”, &2C36, &3F68. Potom na Galaksiji otkucajte RUN i uživajte u programu.

Druga mogućnost je da na PC-ju otkucate samo transmit, a da na Galaksiji otkucate OLD # “IME”, recimo OLD # “GALRAT”. Tada će transmit potražiti fajl datog imena sa ekstenzijom GTP i poslati ga Galaksiji. Zbog specifičnosti imenovanja fajlova na Galaksiji i na PC-ju, može se desiti da neke programe, recimo one dugog imena ili koji sadrže neke specijalne znakove, na ovaj način ne možete preneti na Galaksiju.

Ako želite da program upišete relocirano, dakle ne na adresu od koje je inicijalno snimljen nego na neku drugu adresu, na PC-ju i dalje kucate transmit ime, a na Galaksiji OLD # +adresa (za slučaj da želite da relocirate program prema višim adresama), OLD # -adresa (ako relocirate program prema nižim adresama) ili OLD # =adresa (ako program učitavate na konkretnu adresu).

Kada vaša Galaksija proradi, možda ćete poželeti da na nju odjednom prebacite više programa, ili sve programe koji postoje (ne brinite, u EEPROM-u ima dovoljno mesta). Smestite te programe u folder koji već sadrži program transmit i na PC-ju kucajte transmit * (ukoliko koristite Linux, treba da otkucate python transmit.py “*” zbog specifičnosti ovog okruženja). Sada na Galaksiji kucajte OLD # da prenesete prvi program, snimite ga (obično sa SAVE # “IME”), pa kucajte OLD # za sledeći program i tako do poslednjeg.

Prenos programa na PC – receive / SAVE #

Kada želite da prebacite program sa Galaksije na PC, on mora da se nalazi u osnovnoj memoriji računara (ako se nalazi u EEPROM-u, učitajte ga u osnovnu memoriju sa OLD # “IME”). Odatle možete da ga prebacite na PC, radi čuvanja, razmene sa kolegama, stavljanja na sajt...

Da biste prebacili program, na PC-ju kucajte receive ime a na Galaksiji SAVE #. Program će biti prenesen i snimljen na disk u tekući folder kao IME.GTP. Tokom prenosa programa ekran Galaksije je zamračen, ali ako odustanete, možete da pritisnete Escape i tako prekinete prenos.

Druga mogućnost je da na PC-ju otkucate samo receive, a na Galaksiji SAVE # “IME”. Program će biti prenesen i snimljen na disk PC-ja pod zadatim imenom, uz ekstenziju .GTP.

Komandom SAVE # bez parametara snima se bejzik program, ili bejzik program ispred koga je upisan mašinski program, što je praksa za “pakovanje” igara na Galaksiji. U nekim situacijama, recimo kada se mašinski program nalazi iza bejzik programa, ili kada snimate neku zonu memorije u kojoj uopšte i ne mora da se nalazi program nego neki drugi sadržaj, biće neophodno navođenje adresa početka i kraja segmenta memorije koji se prenosi. Tada na PC-ju otkucajte receive, a na Galaksiji SAVE # “IME”, ADRESA1, ADRESA2, recimo SAVE # “SPIRIDON”, &2C36, &3F68 i tako snimite sadržaj memorije od prve adrese pa zaključno sa adresom koja neposredno prethodi drugoj.

Backup i Restore podataka

Kada u EEPROM upišete puno programa, poželećete da napravite backup svega toga, radi sigurnog čuvanja ili prenosa na drugu Galaksiju. Da biste to uradili, na PC-ju kucajte backup [ime] pri čemu je ime naziv arhive; ako se ne navede, podrazumevano je galbackup.gb. Na Galaksiji otkucajte BACKUP. U zavisnosti od popunjenosti EEPROM-a, ovo kopiranje može da traje nekoliko minuta, posle čega ćete na disku PC-ja imati odgovarajuću arhivu.

Za vraćanje podataka na Galaksiju, na PC-ju treba otkucati restore [ime] a na Galaksiji RESTORE. Napominjemo da je ova operacija destruktivna i da će postojeći sadržaj EEPROM-a biti nepovratno izgubljen. Proverite, dakle, da li ste posle prethodnog backup-a možda snimili neke fajlove, pa ih sačuvajte jedan po jedan pre nego što pokrenete restore.

Komunikacija kratkim porukama

Galaksija omogućava komunikaciju kratkim porukama (do 16 bajta) sa drugim uređajem povezanim preko serijskog porta. Taj uređaj može da bude PC, Arduino / Raspberry PI kontroler ili čak druga Galaksija.Zahvaljujući činjenici da su poruke kratke, Galaksija stiže da iscrtava sliku dok čeka na prijem poruke, uz gubitak svega jednog ili dva frejma tokom samog prenosa. Na taj način su omogućene višekorisničke igre i slične aplikacije.Za komunikaciju se koristi Galaksijina zona alfanumeričkih promenljivih, konkretno stringovi X$ i Y$, koji su u Galaksijinoj radnoj memoriji na adresama X$: 0x2A70-0x2A7F i Y$: 0x2A80-0x2A8F. Tako komanda TX (uz propisan header i checksum na kraju) prenosi stanje stringa X$ (16 bajta) na serijski port. Analogno tome, komanda TY šalje na serijski port stanje stringa Y$. Ova komanda nema parametara.

Za prijem podataka koriste se funkcije RX i RY, takođe bez parametara. Posle A=RX ili PRINT RX podaci će sa serijskog porta biti preneseni u string X$, dok će promenljiva A dobiti vrednost 0 (ili će na ekranu biti odštampan broj 0) ako je prenos prošao bez greške, odnosno -1 (&FFFF) ako je detektovana greška u komunikaciji. Slično i za B=TY ili PRINT TY.

Ako razvijate program za neki spoljni kontroler (Arduino, PC, Raspberry Pi, PIC, Atmel...) koji će komunicirati sa Galaksijom, potrebno je da poštujete sledeći protokol komunikacije:

  • 1-50: Niz od 50 bajtova – binarnih nula (0x00). Ovo pomaže Galaksiji na prijemnoj strani da se pripremi za prijem, čak i ako u tom trenutku iscrtava sliku
  • 51: Bajt 0xFF (ovo pomaže Galaksiji na prijemnoj strani da se sinhronizuje)
  • 52: Bajt 0xD6 (komanda za prepis)
  • 53-68: Niz od 16 bajtova koje čine podaci (message body)
  • 69: 1 bajt checksum (zbir svih 16 bajtova koje čine podaci po modulu 256)

Protokol je isti u oba smera. Ako Galaksija prenosi podatke ka spoljnom kontroleru, prvih 50 bajtova će verovatno biti nepotrebno, pa će ih on tretirati kao dummy podatke, dakle ignorisaće ih. Ako se koristi za komunikaciju između dve Galaksije (što je moguće i iz bejzik programa), sve je automatsli sinhronizovano i ovaj postupak može da se ponovi neograničen broj puta. Jedini problem može da se pojavi zato što predajnik nema podatak da li je prijemnik pročitao poruku, pa bi stari paket mogao da bude zauvek izgubljen u slučaju da Galaksija na prijemnoj strani još uvek nije pročitala 16-bajtni sadržaj iz prostora za X$ ili Y$, a stigao je novi paket. Rešavanje ovog problema ostaje na programeru, koji može, recimo, naizmenično razmenjivati pakete u odnosu 1:1 ili prilagodiit tajming u programima.

Disasembler i monitor

U novi ROM C računara Galaksija je, osim koda neophodnog za upravljanje flash memorijom i komunikaciju sa PC-jem, upisan i Galaksija Monitor, fleksibilni disasembler/monitor program koji ćete koristiti za bolje upoznavanje rada Galaksije i njenog softvera.

Monitor program je, posle asemblera, najvažniji softverski alat za stvaraoce programa. Činjenica da komunicira sa memorijom računara direktno, često zaobilazeći operativni sistem (samim tim i ograničenja koja on nameće, ali i zaštite od neoprezne primene), omogućava korisniku da pronađe u memoriji ono što mu je potrebno ili da je menja onako kako mu odgovara. Čak i za početnike ovaj program može biti interesantan – pomoći će im da upoznaju rad računara i inspirisaće ih da krenu u svet mašinskog programiranja.

Pošto Galaksija Monitor ima mnoge kratke komande koje bi, neoprezno upotrebljene, mogle da naprave zbrku, za njegovu upotrebu je potrebna inicijalizacija, koju pritiskom na Shift+Esc i M ili Shift+Esc i I. Posle toga ostajemo u bejziku i koristimo ga standardno, osim što su nam na raspolaganju nove mogućnosti. Teorijski bi se nove komande mogle naći i u bejzik programu, ali to nije preporučljivo jer će posle izvršenja komande bejzik program biti prekinut i pojaviće se prompt READY.

Svaka komanda se sastoji od zvezdice i jednog slova, posle čega, ako je potrebno, slede jedan, dva ili tri argumenta, odvojena zarezima ili blankovima (oba oblika su ravnopravna). Argumenti će u najvećem broju slučajeva biti heksadecimalni brojevi (pazite da ne ispustite znak &), ali mogu da budu i decimalni brojevi, varijable ili čak izrazi.

Treba biti oprezan sa primenom nekih komandi koje mogu da budu fatalne za program koji se nalazi u RAM-u. Recimo *T 0, -1, 1 ili *Z 0, &4000 će da “izbombarduje” RAM i moraćemo da počnemo sav posao od početka.

Komande Galaksija Monitora

*A mm [, nn]

Ispisuje sadržaj memorije počev od ćelije mm zaključno sa ćelijom nn u ASCII kodu, pri čemu se na početku svakog reda ispisuje adresa. Bit 7 je maskiran, tako da se i grafički karakteri predstavljaju kao ASCII znaci. Upravljačke kodove (ispod &20) program štampa kao tačku, sa izuzetkom koda &0D, koga štampa kao novi red. Listanje traje samo dok držimo pritisnut taster ENTER; otpuštanjem tastera privremeno se zaustavlja listanje. Listanje prekidate sa Esc. Recimo, *A &F0F, &FB6.

Ako je drugi parametar (nn) izostavljen, onda se sadržaj lista počev on mm pa sve dok se ispis ne prekine pritiskom na ESC.

*B mm, nn, p

Poredi svaki bajt u bloku memorije koji počinje od adrese mm i završava se adresom nn sa vrednošću p, i štampa sve adrese na kojima je ustanovljena jednakost. Lista može da bude vrlo dugačka, pa listanje traje samo dok držite pritisnut ENTER. Recimo, *B &1500, &1700, &C9.

*C mm, nn

Ispisuje checksum bloka memorije između ćelija mm i nn. Rezultat služi za brzu proveru ispravnosti sadržaja memorije, poređenjem sa ispravnim čeksumom programa koji ste dobili na nekom drugom mestu. Checksum se dobije kada se zbir svih bajtova bloka podeli sa 256, pa se celobrojni rezultat ignoriše, a uzme se samo ostatak – ako je zbir svih bajtova zadatog bloka memorije X, onda je čeksum X MOD 256. Recimo, *C &3800 &3FFF.

*D mm [, nn]

Disasemblira sadržaj memorije počev od mm zaključno sa nn, odnosno prevodi mašinski program u mnemonički kod i ispisuje ga, zajedno sa adresom i heksadecimalnim kodom (znak “&” se ovde podrazumeva). Listanje traje samo dok držimo pritisnut ENTER, kad ga otpustimo ispis se zaustavlja do do ponovnog pritiska na ENTER. Pritiskom na Esc prekidamo listanje. Evo i primera:

*D &108B, &1098

108B F5 PUSH AF

108C CDFF02 CALL &02FF

108F DBFF IN A,(&FF)

1091 17 RLA

1092 38F8 JR C, &108C

1094 F1 POP AF

1095 D3FF OUT (&FF),A

1097 F1 POP AF

1098 C9 RET

Ako je drugi parametar (nn) izostavljen, sadržaj se disasemblira počev on mm pa sve dok se ispis ne prekine pritiskom na ESC.

*E mm

Editovanje memorije – program prihvata heksadecimalne brojeve unete preko tastature i upisuje u memoriju, počev od adrese mm. Format upisa jednak je formatu listanja memorije pri izvršavanju komande DUMP u bejziku. Kada posle, recimo, *E &3000 pritisnemo ENTER, pojaviće se adresa &3000 i računar će sačekati da upišemo heksadecimalne brojeve (bez oznake & koja se podrazumeva) odvojene blankovima, recimo 7A F3 49 2A 38 55 EE C1. Posle svakog pritiskanja tastera ENTER, kursor prelazi u novi red i ispisuje se tekuća adresa.

Svaka grupa se upisuje u memoriju tek kada pritisnemo ENTER, što nam omogućava da normalno koristimo strelicu nalevo za brisanje pogrešno unetih brojeva. Ako pritisnemo Esc, otkucana linija neće biti upisana u memoriju. Zato pre Esc treba obavezno pritisnuti ENTER.

*$ mm, nn, abc

Traži alfanumerički ASCII niz abc u bloku memorije od mm do nn i ispisuje adrese na kojima se nalazi prvi karakter takvog niza. Niz abc je proizvoljne dužine (ograničen je jedino dužinom bafera) i u njemu su dozvoljeni blankovi, ali treba imati u vidu da su blankovi na kraju niza nevidljivi na ekranu, a monitor ih traži u bloku memorije kao i svaki drugi karakter. Recimo, *$ &F00 &FFF BYTE

*G mm [, nn, pp]

Komanda *G je slična bejzik funkciji USR – služi za pozivanje programa čija se ulazna tačka nalazi na adresi mm. Za povratak u bejzik (samim tim i u monitor) služi mašinska instrukcija RET (&C9) ili JP &66 (&C3 &66 &00). Pri ulasku u potprogram registarski par HL će imati vrednost mm, a registri DE i BC će imati vrednosti nn i pp respektivno, ako istu komandu napišemo u obliku *G mm, nn, pp. Registar A će imati vrednost jednaku broju navedenih argumenata.

*K mm

Prima sa tastature ASCII znakove i upisuje ih u memoriju počevši od adrese mm. Upis se prekida pritiskom na Esc.

*R mm

Posle izvršavanja ove komande na adrese mm, mm+1 i mm+2 se upisuje poziv pomoćnog programa koji će, svaki put kad program prođe kroz tu tačku (ako uopšte prođe) pokazati stanja svih registara mikroprocesora, i sačekati da pritisnemo bilo koji taster da bi nastavio izvršenje. Pošto ova komanda uzurpira tri bajta programa, ona će ta tri bajta premestiti na &2AFF i tamo će ih i izvršiti, ali tek pošto pokaže sistemske registre i sačeka da pritisnemo neki taster. Ta tri bajta treba da predstavljaju jednu ili više celovitih instrukcija, da se ne bi njihovim premeštanjem “cepala” neka od njih, jer bi u suprotnom to izazvalo krah programa; tu će pažljiva analiza uz pomoć komande *D biti neophodna. Drugo, unutar ta tri bajta ne sme da postoji relativni skok (JR). Treće, moramo paziti da drugi ili treći bajt slučajno ne predstavlja ulaznu tačku sa nekog dela programa, koji može da bude vrlo daleko od adrese mm. Jedini način da se reši ovaj problem (a istovremeno i prva dva) je da mm bude adresa na kojoj se nalazi neka 3-bajtna instrukcija, recimo 16-bitni LD, ili CALL, ili JP. Tako, sigurno nećemo naškoditi programu koji analiziramo.

Posle završene analize, ne treba zaboraviti da uklonimo komandu *R iz testiranog programa, naročito ako želimo da je pomerimo na neku drugu lokaciju. To se radi pomoću *R 0 (kao da hoćemo da je postavimo na adresu 0) – monitor će vratiti sve na originalno mesto.

*T mm, nn, pp

Premešta blok memorije od adrese mm do nn na lokaciju počevši od adrese pp. Izvorni (mm – nn) i odredišni (pp) blok smeju da se preklapaju. Treba biti oprezan sa ovom komandom jer može da ošteti program koji se nalazi u računaru, ako se neki blok premešta na deo tog programa ili na njegove sistemske promenjive.

*V mm, nn, pp

Poredi sadržaj bloka memorije od adrese mm do nn sa sadržajem bloka koji počinje od adrese pp i ispisuje adrese i sadržaje svih bajtova koji nisu jednaki. Recimo, *V &2A00 &2A30 &3000

*W mm, nn, pp

U bloku memorije od adrese mm do nn traži 16-bitnu reč (dva bajta jedan do drugog) pp i ispisuje adresu i njen sadržaj koji prethodi adresi pronađene 16-bitne reči. Recimo, ako u komandi navedemo memorijsku reč &1234, i dobijemo odgovor monitora da ona postoji na adresi &3000, to znači da je sadržaj adrese &3000 jednak &34, a adrese &3001 jednak &12. Recimo, *W &2A00 &2A30 &3000.

*X mm, nn, pp

Međusobno zamenjuje dva bloka memorije, prvi je od adrese mm do nn a drugi počinje od pp. Ova dva bloka ne smeju da se preklapaju, jer će u tom slučaju sadržina jednog od njih biti izmenjena.

*Z mm, nn [, pp]

Briše ili menja sadržaj bloka memorije od adrese mm do adrese nn. Ako nije naveden pp, u blok upisuje nule, a ako navedemo pp kao ceo broj od 0 do 255, upisuje pp u svaki bajt zadatog bloka.


Partneri

AB Soft logo
Comtrade logo
Hewlett Packard Enterprise logo
IIB logo
Inspira logo
KimTec logo
Levi 9 logo
Nordeus logo
Rittal logo
Schneider logo