Turbo Assembler

Azok akik lelkiismeretesen, az emulátor előtt ülve saját maguk is végigcsinálták az eddigi feladatokat, már kezdik érezni, hogy ez bizony elég nehézkesen és nyögvenyelősen megy.

Például a programunk módosítása, ha mondjuk új utasításokat szeretnénk már meglévőek közé beszúrni. 

Az Action Replay beépített monitorja még így is nagy segítség volt persze, de ha komolyabb dolgokat szeretnénk csinálni, és némileg kényelmesebben, akkor bizony szükségünk lesz valamilyen komolyabb fejlesztőeszközre.

Nosza rajta, szépen töltsük le a TASM74.d64 filet az alábbi helyről: https://csdb.dk/release/?id=85926 

Mentsük le valahova, ahol megtaláljuk. Én ezt is hanyag eleganciával bedobtam a Vice mappámba. Indítsunk egy emulátort, majd Alt+8, és a megjelenő ablakban navigáljuk el a letöltött TASM64.d64 filehoz:

009-tasmd64.jpg

Kiválasztva a d64-et, jobb oldalt megjelenik valami.

Mi az a D64?

Ez egy általánosnak nevezhető formátum, amiben teljes C64 lemezeket tudunk tárolni. Működési elve kb ugyanaz, mint a PC-s ISO képfájloknak.

Ha kiválasztjuk a d64-ünket, az ablak jobb oldalán a Vice egyből meg is mutatja a tartalmát. Jelen esetben csak egyetlen file található benne, a "TASM 74 PAL/NTS" nevű, típusa PRG, vagyis nagy valószínűséggel futtatható program.

Nyomjunk az Open-re. (Az Autostarttal egyből el is indítaná, de mi most azt nem akarjuk) Látszólag nem történik semmi. Természetesen, mert egyelőre még csak behelyeztük a virtuális mágneslemezünket az olvasóba, és ráhajtottuk a kis kallantyút. ( Keresd a hibát a képen ;))009-floppy.jpg

Ha még csak most indítottuk el az emulátort, ezt látjuk:

004-boot.jpg

Itt most nyomjunk F7-et, mert megkönnyíti az életünket, és a program betöltését a lemezről. Megkapjuk a jól ismert FASTLOAD-os képernyőt. Gépeljük be:

LOAD"$",8   majd enter

Itt már láthatóan történik valami, a gép elkezdi betölteni a "$" nevű speciális filet, ami valójában a lemez tartalomjegyzéke. A varázslatos 8-as szám a lemezegységet jelöli. (Mint ahogyan Windows alatt van C,D,stb meghajtónk, itt 8,9,10,11) Ha visszakaptuk a kurzort, mehet egy LIST parancs.

009-dir.jpg

Nahát! Ugyanazt látjuk, mint előzőleg a Vice file választó ablakában. Most beírhatnánk a

LOAD"TASM 74 PAL/NTSC",8   majd a

RUN

parancsot, hogy betöltsük az assemblerünket a memóriába, de ehelyett inkább nézzük meg, hogyan egyszerűsíti ezt le nekünk az Action Replay. Nyomjuk F7-et.

009-dir2.jpg

Micsoda könnyedség, mennyi energiát megspórolunk, nem kell mindenféle LOAD-okat és LIST-eket írkálnunk, egyből itt van a lemez tartalma. A TASM-ot betölteni kétféleképpen is tudjuk, ugyanilyen egygombos módszerrel.

Felmegyünk a kurzorral a "TASM 74 PAL/NTSC" sorra, és nyomunk egy F5-öt, ekkor betölti a programot.

Vagy egy üres sorban állva nyomunk egy F5-öt, ami megkeresi a lemezen az első programot, és betölti azt. Esetünkben csak 1 db program van a lemezen, szóval ez a második módszer az egyszerűbb. Úgyhogy csak simán: F5.

009-dir3.jpg

Itt már nincs más dolgunk, mint futtatni a programot a RUN paranccsal, vagy a leglustábbaknak: F3, ami ugyanaz.

Természetesen ez is csak egy apró bemutató volt, nem kell mindig ilyen körülményesen végignyomkodni mindent, pont erre jó a Vice "Autostart" gombja a d64 választó ablakban.

A későbbiekben majd nem árt, ha tudjuk hogyan lehet fileokat betölteni.

Némi gondolkodás után elindul a Turbo Assembler 7.4, ami egyből egy kérdéssel kezdi. Clear memory?

009-tasm.jpg

Nyomjuk meg bátran az Y-t, hiszen úgysincs tétje a dolognak. Ezután a legelső dolog amit csinálnunk kell, hogy ne bolonduljunk meg: Shift + Backspace. Ennek hatására megjelnik alul az "insert:" feliratt mellett egy "char". Ezáltal bekapcsoltuk a "beszúrás" módot, így mikor gépelünk, ugyanúgy fog minden működni, mint egy mai normál bármilyen szövegszerkesztőben. Ha valaki azt tapasztalja, hogy gépelés közben hirtelen amit ír, az elkezdi felülírni a képernyőn látható szöveget, az azt jelenti, hogy ez a a beszúrás mód nem aktív. A "line" pedig azt jelenti, hogy ha nyomunk egy entert, az egy új sort fog beszúrni. Éppen úgy, mint manapság.

Sok segítséget nem igazán ad nekünk ez a TASM, csak egy villogó kurzort. Írjunk be valami egyszerűt, aztán lássuk, hogy mi miért történik. Kezdük például ezzel, írjuk be: *=$1000  majd enter.

009-tasm2.jpg

A szerkesztő nagyon ügyesen behúzta jobbra amit írtunk, meg is formázta, és a következő sor elejére ugrott. Nosza, írjunk be valami egyszerű kis programot.

009-tasm3.jpg

Milyen ismerősnek tűnik, nem? Beteszünk A-ba egy 1-est, majd ezt kicsapjuk a képernyőmemória első bytejába, végül befejezzük a program futását.

Viszont semmi extra szemét nincs a képernyőn, semmi memóriacím, semmi gépi kód. Az első csillagos sorban található az egyetlen furcsaság. A csillaggal azt mondjuk meg az assemblernek, hogy a $1000-es címtől kezdődően fordítsa le a memóriába a programunkat.

Ha nyomunk egy F4-et, a kódunk lefordítódik, és el is indul. Az assembler előzékenyen kiírja nekünk a "started:" feliratot is a képernyőre.

009-tasm4.jpg

Valóban megjelent az "a" betű, ahogy vártuk. Az egyetlen furcsaság, hogy eddig minden csupa nagybetűs volt, most pedig minden kisbetűs. Szerencsétlenségünkre most a kis/nagybetűk közötti váltás a Shift+TAB-bal nem működik. Gondolom a TASM letiltotta.

Aki szeretne csupa nagybetűket, átválthatja az éppen használt karakterkészletet, ha a grafikus chip $D018-as regiszterébe beír egy $15-öt. (BASIC: POKE 53272,21) Kisbetűk: $17 (23)

009-charset.jpg

Oké, lefutott a programunk, de eltűnt az assembler. Mivel okos program, szépen rálőtte magát a RESTORE billentyűre, ami abban különlegesebb a többitől, hogy képes megszakítás generálására. Vagyis ha megnyomjuk a RESTORE (PageUp) billentyűt, az éppen aktuális folyamatokat a processzor abbahagyja, és egy megadott memóriacímre ugrik majd. (Ami pont az assemblerünk)

PageUp után újra az ismerős kép fogad. Írjunk hát egy, az előzőhöz hasonló ciklust, és nézzük meg milyen extrákkal halmoz el minket új fejlesztői környezetünk. Sorokat törölni az F6 billentyűvel lehet.

009-tasm5.jpg

A legelső, ami kiszúrja a szemünket az az, hogy a pontosvessző után megadhatunk tetszőleges megjegyzéseket a kódunkban.  Ez nagyon nagy segítség, pláne még a tanulási időszakban, hiszen így jegyzetelhetünk magunknak, hogy éppen mi mit csinál.

A következő érdekesség a screenram, és colorram állandók (konstansok) definiálása. A későbbiekben ezek után ahol pl screenram-ot írunk, az $0400-ként lesz értelmezve majd. A fordító ezeket fordítás közben automatikusan kicseréli majd a valós számértékekre. 

Tetszőleges címkéket (label) is elhelyezhetünk a kódban, amikre később hivatkozhatunk. Esetünkben az "ugorjide" egy memóriacímet jelöl, ahová vissza fog ugrani a ciklusunk. Ezt a címet nekünk nem is kell ismernünk, a fordító majd kiszámolja, és beírja a megfelelő helyekre. Emellett ha mondjuk az első sorban kicseréljük a $1000-et valamilyen más címre, mert át akarjuk helyezni a programot, akkor nem kell átírnunk az összes ugró utasításunkat, hiszen a fordító ezt is intézi.

Ezek a nevek lehetnek hosszabbak, mint 8 karakter, de az assembler csak az első 8 karaktert értelmezi. (Tehát a "screeenra" és a "screeenram" ugyanazt jelenti pl)

Innentől már nagyjából beszédes a kódunk, kitoljuk az A értékét a screenramba, és a colorramba, nővelünk, összehasonlítunk, és visszaugrunk az "ugorjide" labelhez. A megértést jelentősen segítik a kommentek. Használjuk őket mindig bátran.

F4-el futtattva meg is kapjuk a várt eredményt:

009-tasm6.jpg

Fehér (1-es színű) A betűk (1-es karakter), pontosan 5 darab (CPX #$05)... Mindez jól láthatóan szebb, és érthetőbb kóddal.

De ha már itt vagyunk, nézzük meg, vajon mit is csinált a fordító a háttérben? Mi került bele a memóriába?

Dobjunk egy "MON"-t, majd egy "D 1000 1010" parancsot, amivel kilistázzuk a lefordított kódunkat.

009-tasm77.jpg

Ugye milyen hasonló? Viszont a fordító tényleg kicserélte az általunk szövegesen definiált dolgokat. Értelemszerűen a kommentjeink sincsenek itt, sem pedig a konstansaink. Minek is lennének, hiszen az a processzort nem érdekli, hogy mi magunknak mit firkálgatunk.

Épp eljött az ideje annak, hogy ránézzünk, pontosan mi van a memóriában, mit lát a processzor, és mit hajt végre.

Ugyanitt a monitorban adjuk ki az "M 1000 1010" (azaz memory dump) parancsot. Ez nem tesz mást, mint kiírja a memória egyes bytejait.

009-tasm8.jpg

Ha jól megnézzük, látható, hogy a byteok tényleg ugyanazok a D és az M parancs kimenetében is. (a9 01 a2 00 ...) Az M mindig 8 byte-ot ír egy sorba, majd ugyanezen byte-okat karakterekként is megjeleníti, ha tudja a jobb szélen. Amit nem tud értelmes karakterként megjeleníteni, oda egy pont kerül. Ez főleg szövegeknél hasznos, esetünkben sokat nem oszt, nem szoroz.

Az egyetlen különbség a megjelenítésben van, a D (disassemble) a számokból előállítja nekünk a megfelelő assembly utasítást.

Ha most ezeket a számokat felírnánk egy kockás papírra, kiresetelnénk a gépet és törölnénk a teljes memóriát, majd ezután bepötyögnénk újra, ugyanezt a programot kapnánk vissza. Én ezt a részt most kihagyom, hogy ne hulljon ki az összes hajam, de a kételkedők nyugodtan kipróbálhatják :)

Apró kiegészítés a Turbo Assemblerhez:

Sajnos nálam a VICE nem igazán jeleskedik a magyar billentyűzetkiosztás megfelelő kezelésében. Így sajnos képtelen voltam rájönni, hogy az eredeti C64 balranyíl (<-) billentyűje mi lehet. A normális fordítási képernyőt ugyanis a <- 3 billentyűk lenyomásával kapnánk meg. Itt kiírná a fordító, hogy talált-e valamilyen hibát a kódunkban, és ha igen, hányadik sorban van a bajos rész. Hiba esetén az F4 viszont egy pillanat alatt visszavált az assembler szövegszerkesztőjére, és a hibaüzenet éppen csak felvillan.

Akinek esetleg nem indul a programja, és nem tudja hol vétett hibát, az bár küszködve, de az F4 nyomkodásával "bevillogtathatja" ezt a képernyőt, és kilesheti a sor számát.

Angol billentyűzetkiosztással a balranyíl megtalálható ugyanazon a helyen ahol az eredeti gépen is, a 0-tól balra.

UPDATE:

a <- balranyíl billentyű a SHIFT és a mellette lévő minusz megnyomásával kelthető életre, magyarul az alulvonással: _

Vagy az END billentyűvel. 
Tehát: SHIFT+- majd 3, vagy END majd 3, és láthatjuk a fordítás eredményét, és esetleges hibaüzeneteit:

A bejegyzés trackback címe:

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

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.

tájbor1001110 2022.09.20. 20:37:42

Valahogyan meg lehetne változtatni a szerkesztőben a karakterek színét sárgáról valami másra?

tájbor1001110 2022.09.20. 21:14:34

Válaszolva a saját kérdésemre:
Az End+o
-val lehet 5 szín séma között váltogatni.

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