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

Én még azon szerencsések közé tartozom, akik megélhették és láthatták a 80-as, 90-es években a magyarországi számítástechnika kibontakozását és (fel)virágzását. Gyerekek voltunk még, és hihetetlen élmény volt számunkra a sok színes-szagos masina, a rengeteg új játék, amit haveroktól, esetleg a piacos bácsitól tudtunk beszerezni.

De volt ezeknek a gépeknek még egy manapság már 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 ü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. Ilyenkor azért hamar előkerült a szomszéd srác, 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 futtatni.

001-c64-syntax-error.jpg

Maga a parancssor jelenlegi világunkban már sokaknak értelmetlennek és butácskának tűnhet, de akkortájt nekünk ez a fajta interakció hihetetlenül izgalmas volt. Direktben adhattunk 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, és elkezdtek BASIC-ben programozgatni ezt-azt. Mivel azonban a C64 BASIC-e eléggé sok mindenben korlátozott, pl nincsenek hanggeneráló, vagy direkt grafikát produkáló utasítások, a következő szükségszerű lépés az assembly megtanulása volt.

Mi 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, ez én írtam kiscsákó!

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, és stabilabb kódot írni bárkinek, aki hajlandó elég mélyre lemenni a nyúl üregébe.

Mindemellett elég menő érzés, amikor az ember manapság ír egy programot, ami mondjuk 1 Kb, és nem 5 Mb. :)

Miért C64?

Jogos a felvetés, hogy van-e ennek valódi, a gyakorlatban alkalmazható haszna, hiszen manapság valószínűleg már senki nem fog nekiállni a munkahelyén C64-en programozni.

Valójában bármi amit az életben/iskolában tanulunk, mind az alapoknál kezdődnek. Általános elsőben megtanítják nekünk a számokat, majd azt, hogyan tudunk összeadni és kivonni. Először csak 1-10 között, 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.

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 :)

Emlékszem nekem mennyire könnyűnek tűnt átlépni anno a jóval bonyolultabb 286-os processzor programozására, ezen "alapszintű" tudás meglétével. 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, és a "hatalmas" sebesség.

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 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

Jelen keretek között, bár megpróbálok, 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 elmenteni, és legalább egyszer á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.

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

A bejegyzés trackback címe:

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

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