Šta je novo?

Kontrola višenamenskog interfejsa za Commodore 64

zzarko

Čuven
Učlanjen(a)
13.10.2003
Poruke
1,749
Poena
695
Poslednjih nedelju dana sam morao ležati u krevetu, pa sam rešio da se pozabavim laganim programiranjem za C64 pošto me je prijatelj pitao da mu napravim program za kontrolu višenamenskog interfejsa za C64:


Meni je palo na pamet da napravim mini programski jezik sa specijalizovanim komandama tipa "ako je ulaz X 1, skoči na korak Y", "sačekaj N desetinki", "sačekaj da se na ulazu X pojavi 1", "prekopiraj vrednost iz ulaza X na izlaz Y" itd. Takođe, hteo sam da isprobam Turbo Rascal IDE za pravljenje programa i mislim da sam napravio odličan izbor. Ideja programa je da postoji više sekvenci koje se mogu izvršavati "paraleleno", u smislu da dok neke sekvence čekaju da se neki ulaz postavi na 0 ili 1, neke druge sekvence mogu npr. ciklično postavljati izlaze.

Juče sam konačno dobio i hardver i mogu da kažem da sam veoma zadovoljan rezultatom jer je program sa pravim hardverom proradio iz prve :)



Doduše, našao sam odmah i par bagova i to ispravio, pa onda snimio video, ali je core programa radio kako treba iz prve.
 
Bravo na ideji i realizaciji. Ovde mi se dopada sto se prikljucuje na expansion port i sto je predvidjeno da se mogu prikljuciti i drugi kertridzi preko konektora na samome interfejsu. Lepo je videti i da danas, bez obzira na popularnost Arduina i Raspberry-ja, postoji interesovanje da se izrade ovakvi interfejsi za 8bitne racunare. Mozda mogu da budu jako korisni i u edukativne svrhe.
Post automatically merged:

I takodje cini mi se da hardverska realizacija se donekle razlikuje od one u casopisu, posto cujem releje kako klikcu dok dobijaju signal. I cini mi se da postoje i osiguraci za zastitu od preopterecenja.
 
Sam koncept tog interfejsa je odlican glavna ploca + namenske ploce po zelji moze i vise istih. Manje vise princip kao i kod arduina danas. Namenske ploce su i u orgianalu za velike potrosace imale releje.
Otac jednog drugara je vise godina koristio taj interfejs na strug/glodalica kombinirka za drvo. Radilo je to fine sare na drvenim stubovima . Softver ne znam ko mu je pisao , mi smo mu radili za prostije okrugle stubove. Strug gonjen motorom jednosmerne struje s varijatorom brzine. Obori se brzina ili se samo vrsi ugaono pomeranje komada i glodalica ukopava saru na okruglim ili cetvrtastim stubovima. Bilo mi je uvek zanimljivo za gledanje zbog dosta uradi sam resenja na masini i kako perfektno radi. Doduse nisu ni sva resenja zavisila od racunara posto je strug prvobitno pio kopirajuca masina kojoj je dodata automatika.
Malo off ali je stvarno upotrebljivo.
 
E, hvala što si podelio tu priču, baš mi je drago da je neko interfejs stvarno i koristio u pametne svrhe! Što se tiče mog koda, imam još malo da ga ispeglam i dopunim, pa će i to da bude online.
 
Program će uskoro biti na raspolaganju za download (zajedno sa source-om), a u međuvremenu evo još jednog videa:
 
Princip rada: recimo da postoje ove 3 sekvence naredbi (u mojoj implementaciji se podrzumeva da kada sekvenca dođe do kraja, počinje da se ponovo izvršava od početka):

Sekvenca 1
  1. čekaj da ulaz a postane 1
  2. upiši 1 u izlaz E
  3. čekaj 1s
  4. upiši 0 u izlaz E
  5. čekaj 1s

Sekvenca 2
  1. upiši 1 u izlaz F
  2. čekaj 0.5s
  3. upiši 0 u izlaz F
  4. čekaj 0.5s
Sekvenca 3
  1. Kopiraj ulaz b u izlaz G
"Paralelno" na 1-jezgarnom sistemu može jedino da znači neka varijanta multitasking-a, odnosno da se malo izvršava jedan sekvenca/ task, malo druga, malo treća. Način i uzrok prelaženja sa jednog taska na drugi karakteriše vrstu multitasking-a. Današnji moderni sistemi uglavnom koriste preemptive multitasking (zasnovano na sistemskom tajmeru i prioritetima), ali postoje i druge vrste kao npr. kooperativni gde taskovi programirano prepuštaju kontrolu drugim taskovima (putem poziva posebne funkcije ili kada su blokirani nečim).

Ovo što sam ja pravio je varijanta kooperativnog multitaskinga bez prioriteta, što znaši da se izvršavanje radi tako što se izvršava prva sekvenca, pa ako ona mora da čeka ili dođe do kraja, onda se pređe na drugu, pa po istom principu na treću, pa opet na prvu. Bilo kakvo čekanje (na ulaz ili tajmer) ili nailazak na komandu za završetak sekvence automatski prebacuje kontrolu na sledeću sekvencu. Ako neka sekvenca čeka na nešto, ta pozicija se pamti i kada opet dođe njen red da se izvršava, nastavlja tamo gde je stala.

"Multitasking" deo mog programa se odnosi na to da će se sve 3 sekvence izvršavati brzo jedna za drugom, što korisniku daje utisak da se izvršavaju "paralelno". Dok prva skevenca čeka da ulaz a postane 1, druge dve se izvršavaju neometano. Druga takođe ima čekanje, ali samo na istek vremena, a treća nema nikakvog čekanja i njena jedina komanda se izvrši u svakom ciklusu prolaska kroz sve skevence (odnosno, ona će non-stop prebacivati vrednost iz ulaza b u izlaz G). U videu u gornjem levom uglu mogu videti dva indikatora koja se rotiraju, jedan brzo, drugi sporije. Prvi se pomeri za 1 poziciju svaki put kada se prođe kroz sve sekvence, dok se drugi pomera na svakih 10 prolaženja, što vizuelno dočarava brzinu sistema. Naravno, što je više sekvenci i više naredbi u njima, ukupno izvršavanje će biti sporije.

Nadam se da je sad malo jasnije :)
 
Nazad
Vrh Dno