ANDOR 64 – egy „kis” összefoglaló

Közel 8 hónapnyi munka után elkészült, az ANDOR 64 névre keresztelt „kis” 8 bites számítógépem. Ez a korábban bemutatott gépem (érdemes ezt a cikket is átfutni a teljesebb kép érdekében) újragondolt, továbbfejlesztett, és immáron forrpontos nyákpanelekre készült változata.

Habár a próbapaneles megoldás nagyon látványos és nem utolsó sorban könnyen változtatható volt, sajnos a rengeteg kontakt hiba sokszor bosszúságot okozott. Mivel tervben volt a gép továbbfejlesztése, jobbnak láttam újragondolni és stabil alapokon megépíteni az utódot, így akár évek múlva is hiba nélkül működhet.

Előkészületek

Az új géphez szinte minden rendelkezésre állt, egyedül a paneleket, drótokat kellet beszereznem, valamint olyan apróságokat, mint kondenzátorok, IC foglalatok, ellenállások és a burkolat építéséhez szükséges fa és plexi anyagok.

Hasonlóan az elődhöz ez is a 74LS sorozatú TTL IC-kből épül fel. Sőt, olyannyira, hogy a régi konstrukciót teljesen el is bontottam és azok az IC-k ide kerültek át. Kicsit sajnálom is a régi gépet, de mint írtam, a karbantartása hajszáltépkedő volt már.

Persze mindezekből nem lehet gépet építeni, amíg az nincs alaposan átgondolva és megtervezve. Hagyományos értelemben vett kapcsolási rajz sosem készült a gépről, de mivel ez előd is jól átlátható volt a huzalozás által, így nem okozott gondot látvány alapján a visszafejtése, meg persze sok minden fejben is megvolt még. 🙂

Tervezéshez a LochMaster 4.0 nevű programot használtam, amit mintha csak erre a feladatra találtak volna ki! Segítségével egyszerűen létrehozhatunk forrpontos próbapaneleket, és elhelyezhetjük rajta az alkatrészeket.
Mondanom sem kell, hogy eme terv elkészítése közel másfél hónapot vett igénybe. Szempont volt a modularitás, azaz, hogy egy panelre olyan dolgok kerüljenek fel amik összetartoznak és egy feladatot látnak kell. Persze akadt némi kivétel, az 1-2 IC-s részegységeknél mint az RTC, vagy a hanggenerátor, de ezek is egész elszeparáltra sikerültek a többi dolgoktól. 


Táp ellátás, portok, hang, Real Time Clock

Elsőként az a panel készült el, ami több feladatott hivatott ellátni.
Ezen található az összes ki és bemeneti port:

  • Tápcsatlakozó (5V)
  • Hang kimenet (Jack)
  • Serial – Ezen át lehet programokat betölteni
  • Kettő joystick / kontroller port
  • Illetve itt kapott helyet a főkapcsoló is

A bal felső saroknál egy kis szegmens kijelzőn látható a bemeneti feszültség, ami jó esetben konstans 5 V, illetve az aktuális áramfelvételt is láthatjuk. Ez egyébként maximum 1.4 A körül szokott mozogni abban az esetben, ha csúcsra van hajtva a gép. Kikapcsolt LED oszlopok estén pedig 0.9 A az átlagérték.
A kijelző alatti tüskesorra fog csatlakozni a többi panel tápellátása, míg a többi tüskére a vezérlések és adatbusz.

A fenti IC sor a portok kezeléséért felel, az alsó sorban található pedig az RTC (M3002) a hozzá tartozó elemmel, mellette a hanggenerátor (SN76489) és egy kis erősítőt láthatunk, illetve a hangszóró kivezetés.

Érdekesség: Minden panel esetében a hátoldalon csak a tápellátás fut. Adat szálak csak abban az esetben, ha másképp nem lehetett volna esztétikusan kivitelezni (kevés ilyen eset van).


Memória modul

Következő modulnak a memóriát választottam, ami szinte faék egyszerűségű ahhoz képest, hogy milyen lesz a többi panel. 🙂

A memória IC (UM61512A) 16 biten címezhető, így lehetővé tesz 64 Kb adat tárolását. Persze mivel a gép teljesen 8 bites, így nem képes egyszerre 16 biten címeket kezelni, ezért a memória két részre lett osztva, egy felső és egy alsó memória területre (2×8 bit = 16 bit).
Középen található maga a memória, fent és lent pedig a két cím regiszter (alsó/felső cím) ami tárolja és adja át a memóriának az épen aktuális címet.
Ebből következik, hogy a címzés kétlépcsős, azaz első lépésben beállítjuk az alsó, majd a felső címet. De erről majd később részletesebben írok. 
A két LED oszlopon pedig mindig az épen aktuális memória címet láthatjuk, amit persze bináris számként kell értelmeznünk.

A panel bal oldala szinte teljesen üres, de nem véletlenül! Tervben van ide egy ROM beépítése, amiben egy egyszerű KERNAL kapna helyett, megvalósítva ezzel egy egyszerű operációs rendszert. De ez még a távoli jövő zenéje, nem biztos, hogy meg is fogom valósítani.

Stack?

Memória kapcsán joggal merülhet fel a kérdés, hogy van-e a gépben stack/verem kezelés? Igazság szerint van is és nincs is. 🙂

A hagyományos értelemben vett stack nincs, hanem egy 2 byte-os, úgynevezett virtuális verem van, ami a memória két legutolsó címe. Ide kerülhet 2×8 biten az a cím (alsó/felső), ahova a szubrutinnak vissza kell térnie lefutása után. Ebből következik, hogy maximum egy szubrutin lehet egy idődben, egymásba ágyazni nem lehet őket. De ez igazából bőven elegendő is ezen a gépen.


Órajel generátor modul

Az órajel előállításáért egy NE555 timer IC felel, ami három különböző sebességre kapcsolható:

  • Maximális sebesség 1 Mhz körül van, ami már bőven elegendő minden programnak, ami ezen a konstrukción futni fog.
  • Közepes sebesség 500 Khz körüli. Ez főként csak debug célokra van fenntartva.
  • A leglassabb órajelen már szemmel is jól követhető az adatmozgás a panelekre épített LED oszlopok által. Tulajdonképen ez a gép demó módja, ahol nem az épen futó program az érdekes, hanem az adatvándorlás megfigyelhetősége a modulok között.

A fehér LED minden egyes villanása egy órajelnek felel meg. Persze ennek jelentősége a leglassabb órajelen van csak, vagy manuális léptetésnél.

Ezen a panelen nem csak az órajel generátor kapott helyet, hanem a reset gomb működéséhez szükséges logika, és az LCD kijelző fény (PWM vezérlés) / kontraszt állításai áramköre, valamint annak adatvezérlője is. Igaz ez utóbbiak a képen látható panelen még nincsenek rajta, mert később kerültek csak fel a jobb oldali részre.

Erre a panelra csatlakoznak majd a kezelőpanel gombok is. Többek között amikkel választani lehet az automatikus / manuális órajel generálás között, vagy a manuális léptetés lehet véghezvinni. Illetve az órajel sebesség választó kapcsoló és még pár gomb, amikről később ejtek szót.


Processzor modul (ALU)

A gépnek nincs abban az értelemben vett processzora, mint a legtöbb 8 bites gépnél, hogy van egy CPU IC ami elvégzi a számolásokat. Itt maga a processzor a komplett panelre értendő, ami ugye IC-ből lett felépítve.
Ez az egyik legbonyolultabb panel, bár működését tekintve nagyon is egyszerű. Talán csak a sok huzal az, amitől bonyolultnak tűnhet így ránézésre.

Alapjában véve két műveletet ismer a CPU kártya, összeadás és kivonás. Tehát az ALU szó nem teljes egészében illik rá, mert logikai műveletekre nem képes.

A panel felső része két regisztert rejt: A és B. Ide kerül be az a két szám, amivel aztán a lenti részen található műveleti IC-k (74LS283) számítást végeznek (összeadják, vagy kivonják őket). A felső két LED oszlop mutatja a két számot, a lenti pedig az eredményt, természetesen bináris számformában itt is.

Státusz regiszter

Látható itt még egy 3 szegmensű kis LED oszlop. Ez a felette lévő státusz (flag) regiszter tartalmát hivatott mutatni. Számolás során ugyanis háromféle tulajdonságot állapít meg a gép a kapott értékről:

  • Zero flag: Igaz, ha a szám 0
  • Carry flag: Igaz, ha a szám nagyobb mint 255 (unsigned integer)
  • Negative flag: Igaz, ha a szám negatív (unsigned integer)

E három státusszal válik lehetővé a feltételes memória ugrások kezelése, amit már a Program Counter (memória lapozó) modul végez.


Program Counter (memória lapozó)

Ahogy korábban írtam, a memória kétszer 8 biten van címezve. Ezért a memória lapozó is két részből áll, azaz két 8 bites bináris számlálóból (74LS161). Ezek láthatóak a panel alsó részén, egymás mellett. Felettük a LED oszlopokon pedig az aktuális értékük jelenik meg.

A jobb felső sarokban kapott helyet az ugrásokért felelős logika, ami közvetlen a flag regiszterrel lesz összekötve.

Átmeneti regiszter

Látható itt még egy félkész részegység a bal felső sarokban. Ez az úgynevezett Temporary (átmeneti) regiszter. Műkésének nincs köze a Program Counterhez, egyszerűen csak itt jutott neki hely 🙂 Ahogy a neve is árulkodik róla, ez egy általános regiszter, átmeneti adatok tárolására, ami bizonyos műveletek végrehajtásához jön majd jól.

Utasítás feldolgozó (opkód panel)

Az opkód panel felel az utasítások végrehajtásáért, azaz a gép minden részegységének vezérléséért.
Az itt található utasításregiszterbe kerülnek az utasítások a memóriából, majd ennek megfelelően a négy EEPROM vezérli a többi modul IC-inek ki-be menteit és műveleteit.

A jobb alsó sarokban lévő kettő IC maga az instrukciós regiszter, aminek értéke a mellettük lévő LED oszlopon jelenik meg.
A bal oldali IC és a mellette található négy szegmensű LED oszlop egy 4 bites bináris számláló. Ez felel az aktuális utasításfeldolgozás lépéseinek váltásához. Mivel 4 bites a számláló, így egy utasítás végrehajtásához maximum 16 órajel áll rendelkezésre. Szerencsére ez bőven elég! A legtöbb utasítás ugyanis 5-10 órajel között mozog.

A középső EEPROM sor kapja meg 7 biten az utasítást (így 128 utasítása lehet maximum a gépnek), és 4 biten a bináris számláló értékét. Így áll össze 11 biten az aktuális művelet. Következő órajelnél a bináris számláló léptet egyet a címen, a parancs érték marad a regiszterből, így mehet a következő művelet. Történik mindez a parancs feldolgozás végéig, amikor is resetelődik a számláló és az instrukciós regiszterbe bekerül a következő parancs és megkezdődik annak is a végrehajtása.

A panel alján lévő tüskesorra csatlakoznak a modulok egyes vezérlőszignál vezetékei, amikből körülbelül 50 fut át a panelek között!

 

Hogy kerül az opkód az EEPROM-okba?

EEPROM-ot írni ugye EEPROM égetővel szoktunk ami, ha nem áll rendelkezésre, akkor építhetünk is magunknak egyet. Így tettem én is.

Az égető lelke egy Arnuino Nano, ami két shift regiszterrel (74HC595) megtámogatva, már kitud adni annyi jelet (11 cím láb, 8 adat láb), amennyi az EEPROM-ok írásához kell.

Az égető jelenleg még próbapanelen van, mivel ezt még az előző ANDOR-hoz készítettem, és mivel ugyanazokat az EEPROM-okat használom itt is, így ezt nem kellet átépíteni. Igaz ezt is szeretném stabil alapokra újrakreálni. Már megterveztem és el is kezdtem megépíteni a forrpontnyákos változatát. Már csak be kellene fejezni a huzalozást 🙂


Adatbusz

Ez alighanem ez a gép legegyszerűbb része. Nem áll másból mint 8 sávnyi tüskesorból és drótból. Szerepe pedig a mellette lévő modulok egymás közötti adatátvitelét lehetővé tenni. Tehát ahogy a képeken is látható erre csatlakozik minden modul.

Később ennek aljára is került egy LED oszlop, min az adatbuszon jelenlévő adatokat is szemmel követhetjük.

Érdekesség: A paneleket és az adatbuszt összekötő kábelek méretre vágott IDE kábelekből készültek. Az adatbuszon lévő csatlakozóból így négy köteg is mehet a különböző pontokra.


Burkolat

Miután a panelek elkészültek és teszteken is átment a szerkezet (persze kellet javítani még itt-ott), jöhetett a burkolat tervezése és megépítése.

A 3D terv Google SketchUp-ban készült, ami egy nagyon jól használható, egyszerű kis 3D modellező program. Még a paneleket is betexturáztam, amiknek képét a LochMaster-ből exportáltam ki 🙂

A ház alapja egy 1 cm vastag, fehér bútorlap. Ez kellő tartást ad a paneleknek és az oldalaknak, amik 3 mm vastag fa lemezekből lettek kivágva.
A burkolat első és felső része plexi lapokból van, hogy gép belseje teljes pompájában látszódjon.

A gép méretei: 46 cm x 35 cm x 9 cm

A képen már a kezelőgombok panelje is látható, min a következő gombok kaptak helyet:

  • Kék – Váltás automatikus és manuális órajel generálás között
  • Fehér – Manuális órajel léptetés
  • Piros – Reset
  • Zöld – LED oszlopok ki-be kapcsolása
  • Sárga – Hang ki-be kapcsolása
  • Kapcsoló – Órajel sebesség választó

Itt a plexire még nem kerültek fel, de a terven látható két potméter is az LCD mellet. Ezek segítésékével lehet majd annak fényerejét és kontrasztját állítani.

A burkolat hátoldalán pedig a gép ki és bemeneti portjai találhatóak, valamint mag a ki-be kapcsoló gomb. Bal oldalon, az apró lyukakkal megfurkált részen a kis hangszóró is helyet kapott.

A paneleket kis távtartók rögzítik le, illetve támasztják alá középen.


Huzalozás

Miután összeállt a burkolat, és bekerültek a panelek, jöhetett a vezérlő kábelek bekötése. Ez körülbelül 50 vezetéket jelent, amelyek az adatbusz két oldalán futnak az egyes modulok megfelelő tüskéire. Miután ezek a gép belső részében szépen el lettek vezetve és rögzítve, már csak a Opkód panelen kellet a végüket méretre vágni és csatlakoztatni.

Végül jöhettek az utolsó simítások!

Érdekesség: A sok színes puha drót, egy ~2 m hosszú, bontott SCART kábelből kerültek ki. 🙂


LCD Kijelző

Ez egy ST7920-as grafikus és karakteres kijelző is egyben, ami annyit tesz, hogy van beépített karakter ROM-ja, de használható pixelgrafikus módban is.

A beépített karakterkészlet nagy segítség, mivel így nem kell külön karakterkészletet készíteni azokra az esetekre ha szöveget szeretnék megjeleníteni. Bár tervezem egy karakterkészlet elkészítését is, mivel karakteres módban csak 4 sor áll rendelkezésre, ezért egy képernyőn elég kevés szöveg fér el és ezek pozíciója (sor/oszlop) sem variálható túl szabadon. (A korábban említett ROM itt is jó szolgálatot tehetne!)

Grafikus módban a kijelző felbontása 128×64 pixel. Erre azért már egész jó grafikákat lehet készíteni, persze 1 bit árnyalat mélységben 🙂 Illetve ezen a felbontáson kerek 1Kb helyet foglal el egy kép.

Az LCD vezérelhető lenne közvetlen az adatbuszra kötve, hiszen ez is 8 bites cím/adatbusszal rendelkezik, viszont a kapott adat mégis átmegy egy EEPROM-on, amit tekinthetünk amolyan videó BIOS-nak is (erős túlzással persze).
Ennek a legfőbb szerepe a számok századosokra, tizedesekre és egyesekre való lebontásában van. Mivel a kijelző egyszerre csak 1 karaktert tud fogadni megjelenítésre 1 órajel alatt, nem tudunk neki küldeni egyből olyan számot, mint például 135. Le kell bontani tehát három számra (1, 3, 5) és egyesével átküldeni őket a kijelzőnek.
Ráadásul a számoknak az LCD modul karakter lapjának azon címére kell mutatni, ahol az adott szám karaktere található. Ezt a lebontást és memória hely meghatározást végzi tehát az EEPROM, aminek így valóban elég csak a számot megkapni, minden mást Ő majd megold a kijelző számára.

Persze hogy a LCD effektíven kezelhető legyen, számos assembly utasításra volt szükség. A kijelző kezelést az OUT parancs végzi, amiből összesen 24 variáció van, többek között az eltérő címzési módok miatt is (lásd Utasításkészlet fejezet).

  • OUT I – Instrukciót küldhetünk a kijelzőnek. Például képernyő törlése, kurzor mozgatása adott pozícióba
  • OUT D – Decimális érték küldése a kijelzőnek, ekkor lebontásra kerül az adott szám
  • OUT C – Karakter küldése a kijelzőnek, ekkor nincs lebontás
  • OUT G – Grafikus adat küldése a kijelzőnek


Hang

Pár mondat erejéig még kitérnék a hangra is.

A hangot egy SN76489 IC adja, ami egy egyszerű négycsatornás hanggenerátor. Ezt régen főként a Sega játékkonzolokban használták és itt is nagyon jó szolgálatot tesz most.
8 bites adatbusszal rendelkezik így közvetlen ANDOR adatbuszára köthető és egyetlen vezérlőszignál használatával aktiválható a bemenete.

Mivel az IC önmagában nem tudna meghajtani egy hangszórót, szükség volt egy kis erősítőre is. Ennek alapja egy LM386-os hangerősítő. Az előlapi panelen magát az erősítőt lehet ki-be kapcsolni, ezzel engedélyezve, vagy meggátolva a hang hangszóróig jutását. Erre főként azért volt szükség, mert a hanggenerátor IC-t első körben inicializálni kell, azaz némítani mind a négy csatornáját. Mivel áram alá helyezéskor random adatok vannak a regisztereiben, így nagyon fülsértő hangokat tud a gép bekapcsolásakor hallatni.
Ezen a fentebb említett ROM programja segíthetne, ami a csatornák némítását is elvégezné. Addig viszont a programoké marad ez a feladat, ami igazából nem sok plusz többletet jelent, mindössze 8 bytenyi kódból megvan. Csak ugye az a fránya kényelem… 🙂


Végeredmény

Felkerült minden az első plexi lapra: Kezelő gombok, LCD szabályzó potméterek és persze maga a kijelző is.

A felső plexi lap kapott két sor szellőző lyukat, ami valószínű elegendő lesz, mivel nem melegszik számottevően a konstrukció (méréseim alapján eddig maximum 28 fok volt bent). Erről a lapról a védőfóliát nem vettem még le, jobb ha minél később lesz csak karcos 🙂

Ami még hátra van, az a gombok, illetve a paneleken lévő egyes részegységek, LED oszlopok feliratozása, hogy mi milyen funkciót lát el.


Utasításkészlet

Ahogy az opkód részben is írtam, a gépnek maximum 128 utasítása lehet, ami bőven elég is. Jelen cikk írásakor 71 van és ami még lesz, arra elég a maradandó hely.

A lentebb látható táblázatban a jelenlegi utasítások olvashatóak. Persze ezek többségének létezik legalább még három variációja az eltérő címzési módok miatt, amik az alábbiak lehetnek:

  • Accumulator: A művelet csak az ALU-ban történik.
    Például: ASL – A regiszter aktuális értékének bitjeit egyel balra tolja
  • Implied: 1 byte-os utasítás, amelyhez nem tartozik operandus.
    Például: HLT – Órajel megállítása
  • Immediate: 2 byte-os utasítás, ahol az operandus az utasításkód után jön.
    Például: ADC #10 – (Az A regiszter aktuális értékéhez +10 hozzáadása)
  • Absolute: Olyan utasítás, ahol az utasítást követően a teljes (2×8 bit) memóriacím áll. tehát ez egy 3 byte-os utasítás.
    Például: JMP 0x7D0 – Ugrás a 2000-es memória címre)
  • Zero page: Szintén memória címre mutató utasítás, viszont csak az alsó 8 bites címre mutat, így az utasítás 2 byte-ot foglal csak.
    Például: JMP 0x20 – Ugrás a 32-es memória címre

Lássuk tehát a jelenlegi utasításkészletet:

UTASÍTÁSMAGYARÁZAT
NOPÜres utasítás
HLTÓrajel megállítása
ADCÉrték hozzáadása az A regiszterhez
SBCÉrték kivonása az A regiszterből
LDIEgy megadott érték betöltése az A regiszterbe
LDTÉrték betöltése az átmeneti regiszterbe
LDAÉrték betöltése az A regiszterbe egy megadott memóriacímről
STAAz A regiszter értékének elmentése egy megadott memóriacímre
STMMegadott érték elmentése egy memóriacímre
JMPUgrás egy memóriacímre
CMPKét érték összehasonlítása
BEQUgrás, ha az ALU értéke nulla
BCSUgrás, ha az ALU értéke meghaladja a 255-öt
BMIUgrás, ha az ALU értéke negatív szám
JSRUgrás egy szubrutinra
RTSVisszatérés a szubrutinból
INCALU értékének növelése eggyel
DECALU értékének csökkentése eggyel
ASLALU érték bitjeinek eggyel balra tolása
OUTLCD kijelző kezelésének parancsa
RTRÓrából (RTC) érték kiolvasása
RTWÓrába (RTC) érték írása
SJA / SJBA és B joystick port értékének írása egy megadott memóriacímre
LJA / LJBA és B joystick port értékének betöltése az A regiszterbe
SNDAdat küldése a hang generátor IC-nek

Hogy kerül a program a gépbe?

Ez a folyamat három részből áll.

Első körben terméseztessen meg kell írni a programot, ami assembly nyelven történik, ahogy az a fentebbi utasításkészlet is sejteti. Ehhez kezdetben egy saját kódszerkesztőt használtam, de mivel nem akartam azt továbbfejleszteni, inkább kerestem valami megfelelőt, amiben benne vannak azok a funkciók, amiket egyébként is szerettem volna az enyémbe beletenni.
Ez a program a Relauch64 nevű IDE, ami igazából Commodore 64 programok írására készült. Ez nekem külön jó, hiszen az utasításkészletem pont a C=64 mintájára készült.
Van szintaxis kiemelés, címke kezelés és ami a legjobb, saját fordítót és külső programokat is meghívhatunk vele.

Második körben a forráskód lefordítása jön. Erre a Customasm nevű fordítót használom. Ennek a fő erénye az, hogy bármilyen CPU kódját hozzá idomíthatjuk. Csak fel kell venni egy definíciós fájlba, hogy a megadott utasítások és operandusuk milyen gépi kódra forduljanak.
Tudja kezelni a címkéket, lehet memória területeket lefoglalni, feltételeket megszabni és még megannyi jó dolgot…

Harmadik körben jön a lefordított program ANDOR-ba való betöltése. Erre egy saját kis C programot írtam, ami fogja a gépi kódú fájlt és bájtonként a gép memóriájába írja egy USB -> Serial átalakítón át. Ez is egy saját készítésű ketyere, amiben egy FTDI chip van egy panelen, ami a konverziót végzi.

Hogy a lehető legkényelmesebben menjen végbe a folyamat, a Relauch64-be custom scripként felvettem a kód fordítását (Customasm meghívás), majd betöltését (betöltő program). Így F7 nyomásra rögtön lefordul és betöltődik a gépbe a program. Ennél kényelmesebb szerintem már nem is lehetne 🙂

Hogy kerül grafika a képernyőre?

Szerencsére nem kézzel kell nullákból és egyesekből leírni a képet alkotó pixelhalmazt, hanem erre is van egy hasznos kis programocska, az LCD Assistant.
Segítségével monokróm bitmap képekből tudunk generálni egy szöveges fájlt, ami a kép bithalmazát hexadecimális formában tartalmazza. Ez az adat már mehet is ANDOR memóriájába, amit a hozzá írt program megtud jeleníteni a kijelzőn. Szintén nagyon kényelmes dolog!


Beviteli perifériák

Beviteli eszköz téren jelenleg csak joystick támogatott, illetve az a kontroller amiket én készítettem a géphez. Joystickből minden használható ami egyébként C=64-el is kompatibilis, illetve a kontrollerek is ennek mintájára készültek, amik ezen okból kifolyólag jók C=64-hez is 🙂 

Kontroller egyébként azért készült, mert én jobban szeretem azt használni, mint a joyok nyakát tekergetni. Ezek a kontrollerek ebay-es, pár száz forintos USB-s cuccok, amikből az elektronika teljes kikerült és a gombsapkák alá mikrókapcsolók kerültek. A bináris átalakítást pedig egyszerű diódák oldják meg, mivel itt nem csak a négy irány és tűz gomb van, hanem még három másik gomb is.

A gépen két joystick port van, így ezekből kettő is ráköthető, ami lehetővé teszi a multiplayer játékok megvalósítását is! Ez első körben szerintem a jó öreg Pong lesz! 🙂


Programok

Mivel nemrég lett csak kész a gép hardveres téren, így a szoftverek többsége csak kisebb próba program, amik az egyes komponensek tesztelésére készültek.

Egy, közel teljes értékű játékot írtam, ami a Mindtrial névre hallgat és a klasszikus keresd meg az ábra párját játék remakeje. 🙂
Betöltés után a főképernyőn négy nehézségi szint közül lehet választani. A nehézség abban nyilvánul meg, hogy 1, 2, 3, vagy 4 sornyi ábrát kelljen feltárni.
A játék számolja a próbák számát, így végül, ha sikerül megoldani a feladványt azt is megtudjuk, hogy hány lépésből sikerült azt véghezvinni. 

A játék kihasználja a gép minden modulját, még az RTC-t is, mivel ezt használja random szám generátorként az ábrák elszórására. Sikeres pár találatkor még a hanggenerátor is dolgozik kicsit egy beep hang kiadása erejéig 🙂

A játékot működés közben a cikk végén lévő videóban láthatod.


Végszó

Nagyon sokat írtam, de nem eleget! 🙂 Még lehetne részletezni a gép felépítését, működését és kisebb novellát írni belőle, de helyette egy videó sorozatot szeretnék róla indítani, amiben szinte az utolsó ellenállásig részleteznék minden panelt. Ez viszont még nem tudom mikor fog útjára indulni, de még a nyár folyamán szeretnék belekezdeni.
Illetve még kellene írnom pár játékot és demó programot, amikkel lehet szemléltetni az adatmozgást és a gép képességeit.

A programok forráskódja, a gép kapcsolási rajza és minden ezzel kapcsolatos dolog felfog kerülni GitHub-ra is a közeljövőben.

Végül pedig álljon itt egy kisebb videó ANDOR 64-ről, működés közben!

Ha nem szeretnél lemaradni az új videókról, iratkozz fel a csatornára! 😉

Vélemény, hozzászólás?

Az e-mail címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük