Miért pont assembly, és kinek jó ez?

Én még azon generáció egyik szerencsés tagja vagyok (értsd: boomer), akik megélhették a 80-as, 90-es években a magyarországi számítástechnika kibontakozását és (fel)virágzását.  Így visszatekintve azokra az időkre, bizony sokminden megmosolyogtató már, de gyerekek voltunk még, és bizony ahogy a mondás tartja, egy újszülöttnek minden új.

Valóban hihetetlen élmény volt számunkra a sok színes-szagos masina, hiszen akkoriban rengetegféle (mikro)számítógép volt az otthonokban. Az egyik osztálytársamnál Enterprise géppel csapattuk, egy másiknak PC volt otthon, a harmadiknak meg Commodore masina. Minden napra jutott egy új élmény, na meg a rengeteg új játék, amit egymástól, haveroktól, és a piacos bácsitól tudtunk beszerezni. (Yup, ez bizony piracy, és még az offline fajta 😉)

De volt ezeknek a gépeknek még egy manapság már nagyon furcsának tűnő tulajdonsága. A beépített BASIC parancsértelmező. A gép bekapcsolásakor nem történt konkrétan semmi, csak kapott az ember fia egy (szinte) üres képernyőt, és egy villogó kurzort. 

001-c64-screen.jpg

Természetesen kezdő géptulajdonosként mindenfélét beírt az ember, majd bámult bután a megjelenő syntax error hibaüzenetre, hogy ez vajon mit is jelenthet. Mivel ezek a rendszerek egyáltalán nem voltak olyan intuitívak, mint korunk kütyüjei, így ilyenkor aztán persze hamar előkerült a szomszéd/rokon/akárki, akinek már volt számítógépe, és ő kiokosította a nagyérdeműt az alapvető BASIC parancsokról, mint a PRINT, vagy a LOAD, amivel végre már játékokat is tudtunk csapatni 😆 Ez volt a lényeg, a kutyát nem érdekelt semmi más, csak a gaming 😆

001-c64-syntax-error.jpg

Maga a parancssor jelenlegi világunkban már sokaknak (jogosan) értelmetlennek és butácskának tűnhet, de akkortájt nekünk ez a fajta interakció hihetetlenül izgalmas volt. Valójában mindenkinek, aki számítógéppel került bármilyen kapcsolatba, az első interaktív élménye egy valamilyen parancssor volt. Semmi GUI, no egér, nincs nyíl, nincsenek ikonok. Bizony itt direktben adhattunk bármilyen parancsot a gépnek, ami azonnal végrehajtotta azt, gondolkodás vagy kérdés nélkül. Ha nem értett valamit, akkor pedig szólt róla. (Syntax error)

Magától érthetődően sokan nem bírtak magukkal (én sem), és elkezdtek BASIC-ben programozgatni ezt-azt. Egy kis gógyival néhány nap alatt már szépen el lehetett sajátítani az alapokat, szerintem nyugodtan nevezhetjük ezt az akkori kor pythonjának. Mivel azonban a C64 BASIC-e eléggé sok mindenben korlátozott, így a következő szükségszerű lépés mindig mindenki számára az assembly elsajátítása volt. Mivel a BASIC az interpreter miatt mocskosul lassúúúúúú, ráadásul nincsenek hanggeneráló, vagy pl direkt grafikai utasítások, így komolyabb dolgokra teljesen használhatatlan. Mi meg játékokat akartunk írni, híressé válni, és megváltani a világot. Kellett az assembly!

Mi volt ennek a haszna?

Személyes véleményem szerint a legnagyobb haszna az assembly nyelvnek az volt, hogy rengeteget tudtunk így tanulni a gép belső felépítéséről. Egy hang megszólaltatásához ismernünk kellett a hangchip megfelelő regisztereit, tudnunk kellett hogyan állítsunk hangerőt a programból, nem beszélve arról, hogyan is épül fel a szintetizátor által előállított ADSR görbe, aminek a különböző beállításaival mindenféle "hangszerek" hangját tudtuk kicsikarni a masinából.

Megismertük a videoram fogalmát, megértettük hogyan építi fel a képet rasztersoronként a tévén a grafikus chip, és ez a megértés új ötleteket, és olyan új technikai trükköket hozott magával, amin még mi is csak ámultunk.

Megtanított emellett minket egy olyan gondolkodásmódra, amivel bármilyen feladatot le tudtunk bontani a legelemibb, legapróbb, a gép által értelmezhető utasításmorzsákra. Ez a tudás későbbi életemben nagyon hasznosnak bizonyult.

Nem mellesleg átláthattuk egy egész rendszer, egy teljes számítógép komplex működését, a bekapcsolástól kezdve egészen odáig, hogy a programunk elindul, hangot ad ki, színes képeket mozgat a képernyőn, és mindezt emberi beavatkozással még irányítani is lehet.

Ez a totális rálátás, és a hatalom a gép felett részegítő volt. Egyfajta szellemi narkó, amivel nem mellesleg büszkélkedni is lehetett a haveroknak, hogy na ezt nézd vaze, ezt én csináltam!

És mivel ezek egyszerű rendszerek, mindez egyáltalán nem volt olyan szörnyű és nehéz, ahogyan az az első olvasásra tűnik. Ne feledd, jelenleg a telefonodban csak az ébresztő app 100szor bonyolultabb, mint az akkori gépekben a komplett OS 😉

Mindez a mai gyakorlatban

Ez a sorozat bárkinek hasznos lehet, aki szeretné megérteni, hogyan is működik valójában egy számítógép. Hogyan hajtódnak végre az utasítások, mi játszódik le a processzorban, hogyan lesz a memórában pár byte-ból szöveg vagy grafika a képernyőn. Olyan elméleti tudás lehet ez, ami segíthet a tanulmányokban, vagy akár a munkában is.

Az assembly "szigorúsága", és ennek a szigorú mentalitásnak az elsajátítása hasznos lehet programozóknak, és programozni tanulóknak. Megtaníthat arra, hogy miért ne használjunk feleslegesen 64bites integer változókat, ha pl csak egy életkort akarunk tárolni, ami általában elfér 1 byte-on is. Megmutathatja azokat a ma már talán mágikusnak tűnő jelenségeket, hogy pl miért csordul túl egy változó, miért gyorsabb pl 4-el osztani biteltolással, mire is jó egy pointer, vagy épp mitől gyorsabb egy ciklus, amit nem 1-től 100-ig, hanem visszafelé 100-tól 1-ig számoltatunk. Ezen gondolkodásmód segíthet kisebb, gyorsabb, hatékonyabb és stabilabb kódot írni bárkinek, aki hajlandó elég mélyre lemenni a nyúl üregébe.

Nyugi, teljesen jogos a kérdésed, hogy van-e ennek valódi, a gyakorlatban alkalmazható haszna? Manapság valószínűleg már senki nem fog nekiállni a munkahelyén assemblyben programozni. Nemhogy 8 biten, de 64-en sem 😆

Viszont ha visszatekintünk, bármi amit az életben/iskolában tanultunk, mind az alapoknál kezdődtek. Általános elsőben megtanítják nekünk a számokat, majd azt, hogyan tudunk összeadni és kivonni. Először csak 1-től 10-ig, majd később 100-ig. Aztán jön a szorzótábla, hatványozás, gyökvonás, törtek, egyenletek, másodfokú egyenletek, és így tovább, egymásra építve a tudást. És minden ott kezdődött, hogy elsőben girbegurba béna vonalakkal megpróbáltuk rendesen lerajzolni a 3-ast, meg a 6-os hasát 😄

Miért C64?

A Commodore 64-et egyrészt azért választottam, mert tökéletes terep ahhoz, hogy az ember átláthassa egy személyben az egész gépet, mint rendszert. Másrészt sok tekintetben "faék", és így a megértése jelentősen egyszerűbb, mint pl egy mostani PC-nek. Harmadrészt: mert ezt a 8 bites rendszert ismerem legjobban :)

Viszont lövésem sincs például a Z80as processzor programozásáról, mert sohasem csináltam. A C64-ben lévő CPU viszont nagyon közeli (99,99% kompatibilis) rokona a korabeli gépekben ketyegő 6502-nek. Szóval ezzel a tudással felvértezve már sokkal könnyebben fejleszthetsz 8bites Atari 2600 konzolra, Apple II-re vagy Nintendóra bármit 😄 (Hiszen hát mi másért is lennél itt, ugye 😉)001-6502-systems.pngViccen kívül, emlékszem még, nekem mennyire könnyűnek tűnt átlépni anno a "jóval bonyolultabb" intel 286-os processzor programozására, ezen "alapszintű" tudás meglétével. Hiszen ugyanúgy ott volt minden a PC-s rendszerben is, mint előtte a C64-ben, csak persze nagyobb léptékben, több regiszter, több utasítás, több memória, na és persze a "szédületes" sebesség 😂 (12Mhz!!!)

Kinek nem való?

Mindazoknak, akik semmilyen programozási ismerettel nem rendelkeznek. Nekik elsőre nem csak ijesztő, de lelombozó is lehet az assembly nyelv. Ha valaki mégis bátor, és belevágna ennek ellenére, nekik ajánlom a BASIC-ről szóló rész áttanulmányozását, valamint az ott található linkeket. A BASIC elég könnyen elsajátítható nyelv, akár pár óra alatt már működő programunk lehet, nullla előképzettséggel. Mindez segíthet megérteni a programozás logikáját, és az utasítások működését.

A tényleg nagyon kezdőknek alapvetően inkább azt tanácsolom, keressenek maguknak egy szimpatikus magasszintű programozási nyelvet PC-re, és kezdjék azzal az alapok elsajátítását. (Pl. Python, Javascript, stb)

Még egy gondolat

Bár megpróbálok minél alaposabb lenni, de nem fogok tudni kitérni minden kis apróságra, mert évekig is eltartana ez a sorozat. Az egyes részekben mindig vannak linkek külső oldalakra, amiket érdemes alaposan áttanulmányozni. Pl nem fogom felsorolni a grafikus chip összes vezérlőregiszterét, a színek számkódjait, de lesz egy link, ahol megtalálható az összes. Ezeket a külső linkeket érdemes mondjuk elmenteni, és legalább egyszer nagyjából átfutni rajtuk. Ugyanis nekünk nem kell ám minden hülye számot, memóriacímet, címzésmódot, stb-t mindig fejben tartanunk, elég ha tudjuk, hogy hol kell keresni. :)

Emellett, mint minden másra, erre is igaz, hogy az egyes részekben leírt feladatokat érdemes megcsinálni, és nem csak átolvasni ezt a sorozatot, mert úgy jobban rögzül.

Ja, és az egyszerű(bb) navigáció érdekében az oldalsávban megtalálhatóak az egyes részek időrendi sorrendben. Ha mobilon olvasod ezt most, akkor megszívtad, ott nincs oldalsáv. Mássz át a pc-hez, úgyis kelleni fog egy emulátor és billentyűzet 😉

Bevezetőnek egyelőre ennyi, vágjunk bele!

A bejegyzés trackback címe:

https://c64assembly.blog.hu/api/trackback/id/tr6016179828

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben és az adatvédelmi tájékoztatóban.

Nincsenek hozzászólások.

C64 assembly alapok

Friss topikok

  • Heretic83: Sziasztok! Tudnátok ajánlani olyan tudástárt, ahonnan lehet tanulni bővebben az assembly programoz... (2023.07.13. 19:15) Mi az az assembly
  • tájbor1001110: Válaszolva a saját kérdésemre: Az End+o -val lehet 5 szín séma között váltogatni. (2022.09.20. 21:14) Turbo Assembler
  • tájbor1001110: Ne haragudj, aludtam rá egyet és észrevettem hogy a "*=$1000" direktívából hiányzik a '$'. (((: Bo... (2022.09.16. 08:56) Képernyőtörlés

Címkék

süti beállítások módosítása