VASM ==== Dokumentáció: http://sun.hasenbraten.de/vasm/release/vasm.html Egy kicsit fura a doksi, mert a vasm moduláris. A doksi eleje vasm által megvalósított, közös a modulokban, funkcionalitást írja le, míg az utasításokat a modul dokumentációja tartalmazza. Ezen felül ha valamit nem tudtam lefordítani azt csak bemásoltam ide. Kifejezések =========== ## Operandusok + kiértékelési sorrend: 1. + - ! ~ (egyoperandusú +/- előjel, negálás, egyes komplemens) 2. << >> (bitléptetés balra, bitléptetés jobbra) 3. * / % // (szorzás, osztás, moduló) 4. & (bitenkénti és) 5. ^ ~ (bitenkénti kizáró vagy) 6. | ! (bitenkénti kizárpó vagy) 7. + - (összedás, kivonás) 8. < > <= >= (kisebb, nagyobb, kisebb vagy egyenlő, nagyobb vagy egyenlő) 9. == != = <> (egyenlő, nem egyenlő) 10. && (logikai és) 11. || (logikai vagy) ## Karakter konstansok: 'a' vagy "a", 'ab' is megengedett, az arhitektúrának megfelelő bájt sorrendben lesz értelmezve. ## Speciális szekvenciák karakter konstansokban: \\ \ \b Harang. \f Form feed. \n Következő sor. \r Kocsi vissza. \t Tabulátor. \" " \' ' \e Esc (27) \ Az oktális értéknek megfelelő karakter. \x \X A hexa értéknek megfelelő karakter. VASM régi stílus (ezt a modult használja jstvc) =============================================== ## Alapok: globális (global) címke: a sor első karakterén kell kezdődnie, végződhet kettősponttal (:) helyi (local) címke: két globális címke közt érvényes, vagy ponttal (.) kell kezdődnie, vagy dollárra ($) végződnie. Helyi címkéket lehet globálissal együtt használni: global_name.local_name (de nem szükséges). A címke és a mnemonic közé whitespace kell. A mnemonic és az operandusok közé whitespace kell, az operandusokat vesszővel kell elválasztani. Címke és feltételes fordítési direktívák nem lehetnek egy sorban. Megjegyzés: ; a sor pontosvessző utáni része Példa: mylabel instr op1, op2 ;comment Hexa számok: $ff, $f323, 0xff, 0xf333 Bináris: %11010101, 0b11010101 ## Utasítások: = lásd: equ abyte ,[,,""...] A kifejezések memóriába másolása, offset-el való megnövelés után. addr [,...] lásd: word [,...] align Addig szór be 0-ákat a memóriába, amíg az aló bitcount bitje a címnek nulla nem lesz. asc [,,""...] lásd: byte [,,""...] ascii [,,""...] lásd: defm asciiz ""[,""...] lásd: string assert [,] Hibaüzenet megjelenítése, ha a kifejezés hamis. binary A fájl beszúrása az aktuális címtől. A fájlt először az aktuális könyvtárban, majd a '-I', majd az incdir beállításoknak megfefelően keresi. blk [,] A kifejezésnek megfelelő számú nulla vagy fill-t ír a szegmensbe. blkw [,] A kifejezésnek megfelelő számú nulla vagy fill-t ír a szegmensbe (16 bites értékeket, a CPU-nak megfelelő bájtsorrendben). byt blk 1,0 byte [,,""...] A megadott kifejezéseket, szövegeket rögzíti a szegmensben. data [,,""...] lásd: byte db [,,""...] lásd: byte dc [,] lásd: blk defb [,,""...] lásd: byte defc = Új szimbólum definiálása. Egy név csak egyszer definálható. defl [,...] A kifejezéseket 32 bites értékként rögzíti. (CPU bájtsorrend) defp [,...] A kifejezéseket 24 bites értékként rögzíti. (CPU bájtsorrend) defm "string" lásd: text defw [,...] lásd: word dfb [,,""...] lásd: byte dfw [,...] lásd word defs [,] lásd: blk dephase lásd: rend ds [,] lásd: blk dsb [,] lásd: blk dsw [,] lásd: blkw dw [,...] lásd: word end Befejezi a fordítást. endif Feltételes fordítási szakasz vége. el lásd: else else A következő szakasz csak akkor kerül fordításra, ha a megelőző if feltétele hamis volt. endm endmac endmacro Macro vége. endr endrep endrepeat Ismétődő szakasz vége. endstruct endstructure Struktúra vége. eq equ Új szimbólum definiálása. Egy név csak egyszer definálható. extern [,...] lásd: global even align 1 fail Kilép a megadott üzenettel. fill blk ,0 global [,...] Külső szimbólum definálása, ami elérhető több modulból. if Feltételes fordítás. A következő szakasz akkor fordul, ha a feltétel igaz. ifdef A következő szakasz csak akkor fordul ha a szimbólum létezik. ifndef A következő szakasz csak akkor fordul ha a szimbólum nem létezik. ifeq A következő szakasz csak akkor fordul ha a kifejezés értéke 0. ifne A következő szakasz csak akkor fordul ha a kifejezés értéke <> 0. ifgt A következő szakasz csak akkor fordul ha a kifejezés értéke nagyobb mint 0. ifge A következő szakasz csak akkor fordul ha a kifejezés értéke nagyobb vagy egyenlő 0. iflt A következő szakasz csak akkor fordul ha a kifejezés értéke kisebb mint 0. iflt A következő szakasz csak akkor fordul ha a kifejezés értéke kisebb vagy egyenlő mint 0. ifused A következő szakasz csak akkor fordul ha a szimbólummal már találkozott a fordító a megelőző sorokban. incbin [,[,]] A fájl beillesztése. offset: ennyi bájtot kihagyni az elejéről, nbytes: ennyi bájtot olvasni. Fájl keresés: aktuális könyvtár, -I, incdir incdir A megadott könyvtárban is fogja keresni a beillesztendő fájlokat. include A megadott forrásfájl beillesztése. Fájl keresés: aktuális könyvtár, -I, incdir mac macro list A következő sorok meg fognak jelenni a listázási fájlban. local [,...] Lokális szimbólumok. Ezeket más modul nem fogja látni. macro [,...] Macro létrehozása. A macro-t le kell zárni endmacro-val. Max 9 paraméter használható. A paramétereket vagy meg kell nevezni, vagy \1 \2 .. \9 jelöléssel használhatóak. \# a paraméterek száma. \?n az n-edik paraméter hossza. Argument \0 is set to the macro's first qualifier (mnemonic extension), when given. \@ egy egyedi azonosító (_nnnnnnnn, ahol n egy szám), jó címkékhez. Egyedi hívásonként. \@! ugyan ezt teszi, de az id-t elteszi egy stack-be is. \@@ beilleszti a legfelső id-t ebből a stack-ből. \() may be used as a separator between the name of a macro argument and the subsequent text. < és > közötti rész egy paraméternek számít makró híváskor, > duplázással hasznáéható ezen belül (>>-ből > lesz). mdat incbin nolist Listába másolás megszüntetése. Lásd: list org A cél cím módosítása. Megegyezik: $= phase rorg repeat rept rept Az endr végéig tartó szakasz ismétlése a kifejezés szerint. reserve blk ,0 rend rorg szakasz vége. rorg A rend-el jelzett szakaszvégig a kód átcímezése az értéknek megfelelően. section [,""] Szekció létrehozása. set Szimbólum definálása, módosítása. spc blk ,0 string ""[,""...] Szöveg tárolása, záró nullával. struct structure Struktúra meghatározása. Címkék a struktúrában eltolásként használhatók. Lezárás endstruct-al. A struktúra neve egy globális szimbólum, értéke a struktúra mérete. Az eltolás használata: name.label Adat definíciók használhatók, hasznosak mikor a struktúra inicializálásra van használva. Példa: struct point x db 4 y db 5 z db 6 endstruct Hatás: point.x ; 0 eltolások point.y ; 1 point.z ; 2 point ; 3 méret Mezők értéke felülírható: point1 point point2 point 1, 2, 3 point3 point ,,4 text "string" Egy string beillsztése. weak [,...] Gyenge szimbólumok. Láthatóak minden modul által, de nem kell definíció linkeléshez. Ha nincs definíció, akkor az értéke 0. wor [,...] word [,...] 16 bites értékek tárolása a CPU-nak megfelelő bájt sorrendben. xdef [,...] xlib [,...] xref [,...] Lásd: global Példa ===== startaddr = 6639-128-16 datalen = $3000 - startaddr + 1 applen = datalen - 128 - 16 blockcnt = datalen / 128 blockbyt = (datalen % 128) & 255 ; cas header (ez jobb lenne kulon progiba, majd kesobb) org startaddr byte $11, $00 byte blockcnt % 256, blockcnt / 256 byte blockbyt blk 128-5 byte $00, $01 byte applen & 255, applen / 256 blk 16-4 ; 10 print usr(6912) org 6639 byte $0f,$0a,$00,$dd,$20,$55,$53,$52 byte $96,$36,$39,$31,$32,$95,$ff ; ide jon a kod org $1b00 ld hl, 'a' + 1 ret ; egy extra szegmens, hogy a fajlmeret fix legyen (bizti van vmi megoldas hogy ne kelljen) org $3000 byte $76 end