Welcome, Guest. Please login or register.


Author Topic: ASM EP-n - hogyan kezdjem? (Read 56381 times)

Offline geco

  • EP addict
  • *
  • Posts: 7085
  • Country: hu
    • Támogató Támogató
Re: ASM EP-n - hogyan kezdjem?
« Reply #60 on: 2012.October.02. 11:14:30 »
Használhatsz macroot az RST 30h-k helyett, eccerűbb lesz úgy programozni, így exos x szel meghívható bármely exos funkció:

        macro exos n
                rst   030h
                defb  n
        endm

Offline lgb

  • EP addict
  • *
  • Posts: 3563
  • Country: hu
  • æðsta yfirmaður
    • http://lgb.hu/
Re: ASM EP-n - hogyan kezdjem?
« Reply #61 on: 2012.October.02. 13:50:04 »
Használhatsz macroot az RST 30h-k helyett, eccerűbb lesz úgy programozni, így exos x szel meghívható bármely exos funkció:

        macro exos n
                rst   030h
                defb  n
        endm

Ezzel tisztaban vagyok, amde most az sdcc sajat assemblererol van szo, es bar pl sjasm-nal hasznaltam macro-t, hirtelen nem voltam biztos benne, hogy az sdcc assemblerenel pontosan mi a macrok szintaxisa ha van egyaltalan.  A fenti szintaxist ugyanis nem eszi meg, elsore azt probaltam. ELeve kisse mas, pl:

ld a,#2

A # mindenkeppen kell neki ilyen esetben. Es pl az LD A,(IX+2) helyett:

ld a, 2 (ix)

kell neki.

Amugy nem vacakolnek ezzel, de mivel sdcc-hez akartam irni vmit kenytelen voltam a sajat assembleret hasznalni, nem hiszem hogy mas assembler ui ismeri az object file szintaxisat ami a linkerehez kell neki.

Offline Z80System

  • EP addict
  • *
  • Posts: 3848
  • Country: hu
Re: ASM EP-n - hogyan kezdjem?
« Reply #62 on: 2014.July.31. 19:50:17 »
Páran használjátok ezt a sjasm dolgot,
aminek a 4 -es verziójában az újdonságok közé egész furi dolgok vannak felvéve,
mint pld. "push/pop -nak csak egy operandusza lehet", meg ilyesmik,

ez mint különbség olyan meglepő ... :)

szóval valami olyan lenne a kérdés, ahhoz aki ismeri, hogy az új 4 -es vonallal érdemes molyolni,
vagy a korábbi hármas a nyerő ?
Z80 System

Offline geco

  • EP addict
  • *
  • Posts: 7085
  • Country: hu
    • Támogató Támogató
Re: ASM EP-n - hogyan kezdjem?
« Reply #63 on: 2014.August.01. 10:17:38 »
Sajnos nem tudok segíteni, én v0.39g6 -t használok.

Offline Zozosoft

  • Global Moderator
  • EP addict
  • *
  • Posts: 14723
  • Country: hu
    • http://enterprise.iko.hu/
Re: ASM EP-n - hogyan kezdjem?
« Reply #64 on: 2014.August.01. 10:27:50 »
Quote from: geco
Sajnos nem tudok segíteni, én v0.39g6 -t használok.
Én is. A 4-esből egy csomó elvileg nem létező, de értelmezhető dolgot kivettek. Ilyen pl. az említett PUSH dolog, ami a 3-asban így működött:
- PUSH and POP can take register lists:
 PUSH AF,BC ; push af / push bc
 POP AF,BC ; pop bc / pop af <- reversed order

3-asban olyan is van, hogy LD DE,HL ami természetesen
LD D,H
LD E,L
utasításokra fordult, és még egy csomó hasonló.

Offline Zozosoft

  • Global Moderator
  • EP addict
  • *
  • Posts: 14723
  • Country: hu
    • http://enterprise.iko.hu/
Re: ASM EP-n - hogyan kezdjem?
« Reply #65 on: 2014.August.01. 10:37:11 »
És úgy rémlik mintha az adatdefiniálást is lebutították volna, nem működött a szokásos
DB 8,"GAME.PRG"
megoldás a 4-esben.

Offline Z80System

  • EP addict
  • *
  • Posts: 3848
  • Country: hu
Re: ASM EP-n - hogyan kezdjem?
« Reply #66 on: 2014.August.01. 11:37:45 »
Milyen okok vehették vajon rá őket ilyen módosításokra ? Felteszem elég nyomós okok kellett legyenek, ha megérte nekik inkompatibilissé tenni a korábbi forrásokat ...

Ez a Sjasm egyébként az ismert legnagyobb tudással rendelkező z80 cross compiler, vagy ismerünk másokat is a ligában ?

Tegnapi napomat a galaga valagának elméleti fényezésével töltöttem, pár dolog átsúlyozódott bennem a mikéntekkel kapcsolatban, és lépek kicsit a kevésbé elborultabban optimalizáló irányba, inkább elvesztve 10-30% futási időt, de a memóriát lapozhatóra, kényelmesebben menedzselhetővé téve.

Ennek mellékhatásaként úgy döntöttem, hogy azt hiszem elhagyom a C fordítót és Assembler -re térek át.

Annak idején, mikor a C keresztfordítót kezdtem keresni, a következőket reméltem tőle:

- Kényelem. (Hát ez van, sosem leszek olyan fajta örömprogramozó, aki direkt kitalál magának egy olyan nyelvet, melyben szándékoltan iszonyat nehéz a kódolás ...)
Ez az egy dolog egyébként majdnem működött is, a C az nem assembly, sokkal kényelmesebb, és végülis az SDCC fordít és működik. Csak hát a többi elrontja az összképet.

- Enterprise oldali inicializálás, precomputing. Hogy ne kelljen külön kis programokat írni PC -re az egyes előreszámított adatok, táblázatok kiszámításához, hanem kényelmesen lehessen ilyeneket a programba tenni, amik az EP oldalon lefutnak indításkor és kiszámolják a táblázatokat. A paramétereiket ott helyben a kódban lehet módosítani, ugyanazokkal a konstansokkal megy az összes fordítás, nem kell őket több helyen módosítani, nem kell töltögetéseket írni EP oldalon, stb ... Ez a dolog természetesen a méreten és a sebességen bukott el, túl lassú is az EP+C kombó az inicializálásokhoz, ráadásul a kód is elég sok lesz, feleslegesen foglalja csak a helyet. Simán el tudna foglalni egy szegmenst vagy akár kettőt is egy ilyen C -ről fordított játék inicializálásokat tartalmazó kód, és értéke a felhasználói oldalon meg semmi, hisz a program a generált adatokból dolgozik, ráadásul még lassú is. Szóval marad a PC előreszámolás, EP töltögetés módszer.

- Lokális változók. A PC (win32,msdev) inline assembly -ben jól megszoktam és megszerettem, hogy a C lokális változókhoz az inline assembly -ben használható offset konstansokat generál a fordító, és egy regiszter (ha jól emlékszem ebp, vagy mifranc) tiszteletben tartásával az ember könnyen elérte őket. Namost itt az SDCC -ben nem találtam meg ezeket az offset -eket, nekem kellett megnézzem milyen kódot fordít, és kézzel kell felvegyem a valtozókhoz az offset -eket, melyek egy esetleges fordító változtatásnál ugye invalidálódhatnak is ... meg a kényelmet ugye eléggé csapja agyonfele, hogy felveszel/törölsz/típusmódosítasz egy paramétert vagy lokált, és offszetelgetheted újra őket ... szal ez sem jött be.

Szóval igazából fentiek feladása után nem sok okom maradt a C megtartására, és azzal az assembler -rel akarom folytatni, ami legtöbb lehetőséget nyújtja.

Nem mondom hogy elsőre megértettem az Sjasm doksijában mindent, inkább csak egy benyomásom lett, hogy EP -s assembler -ekhez képest korszerű fogalmakkal és eszközkészlettel dolgozó valami lehet. Most ettől remélem, hogy megkapom azt a lehetőséget, hogy nyilvantart egy "struktúrát", melynek member offset -jeit és hosszát használva könnyen tudok majd stack -et manipulálni és elérni azt, a függvény paramétereim és lokális változóim használatához. Jó ilyenre a Sjasm véleményetek szerint ?
« Last Edit: 2014.August.01. 11:42:30 by Z80System »
Z80 System

Offline DrPrery

  • EP user
  • *
  • Posts: 264
  • Country: hu
Re: ASM EP-n - hogyan kezdjem?
« Reply #67 on: 2014.August.01. 13:09:19 »
Quote
Tegnapi napomat a galaga valagának elméleti fényezésével töltöttem,
:smt042  :smt043 :smt044

Quote
azt hiszem elhagyom a C fordítót és Assembler -re térek át.
Hát ja, veszkődtem azzal a C dologgal eleget, végül oda is csaptam...
Akkor már inkább a totális kontroll az EP felett. Ezt a Sjasm dolgot tehát nem ártana kivesézni...

Offline sanyike

  • User
  • *
  • Posts: 99
  • Country: hu
Re: ASM EP-n - hogyan kezdjem?
« Reply #68 on: 2015.December.23. 21:42:17 »
A gépi kódú rutinom végén található nagy mennyiségű db egy része átlóg a következő lapra.
Van arra lehetőség, hogy a HEASS a db sorozatot az általam megadott címre fordítsa?
pl. 4000H-tól

Offline geco

  • EP addict
  • *
  • Posts: 7085
  • Country: hu
    • Támogató Támogató
Re: ASM EP-n - hogyan kezdjem?
« Reply #69 on: 2015.December.23. 22:02:04 »
A gépi kódú rutinom végén található nagy mennyiségű db egy része átlóg a következő lapra.
Van arra lehetőség, hogy a HEASS a db sorozatot az általam megadott címre fordítsa?
pl. 4000H-tól
Gondolom az ORG cím ott is működik :)

Offline sanyike

  • User
  • *
  • Posts: 99
  • Country: hu
Re: ASM EP-n - hogyan kezdjem?
« Reply #70 on: 2015.December.23. 23:07:42 »
Gondolom az ORG cím ott is működik :)
Én is gondoltam, de nem :-)

A kérdéses db rész elé beírtam...

              org 4000H
spr:         db 1,2,3,4,5,6,7,8,9,0
               db    ;stb...

ugyan oda tölti... mit kéne másképp?

Offline geco

  • EP addict
  • *
  • Posts: 7085
  • Country: hu
    • Támogató Támogató
Re: ASM EP-n - hogyan kezdjem?
« Reply #71 on: 2015.December.23. 23:25:33 »
Úgy látom a doksiból, hogy a DS kifejezés használható erre a célra.

   DS 4000h-$

szerintem. (feltölti 4000h-ig lévő üres területet 0-ákkal

Offline sanyike

  • User
  • *
  • Posts: 99
  • Country: hu
Re: ASM EP-n - hogyan kezdjem?
« Reply #72 on: 2015.December.23. 23:42:54 »
Igen, 4000h-IG kinullázta, de az adatokat nem írta be utána, ... konkrétan eltűntek :-)

Offline sanyike

  • User
  • *
  • Posts: 99
  • Country: hu
Re: ASM EP-n - hogyan kezdjem?
« Reply #73 on: 2015.December.24. 01:17:27 »
... átlóg a következő lapra.


nem lóg át, szegmenshatárnál megszűnik, a 4000h fölé kerülő rész nem is megy be a memóriába...

Offline geco

  • EP addict
  • *
  • Posts: 7085
  • Country: hu
    • Támogató Támogató
Re: ASM EP-n - hogyan kezdjem?
« Reply #74 on: 2015.December.25. 00:57:01 »
Akkor ezert nem latszik a DS utani adatod se, nem tudom a Heass hogy mukodik, ha nagyon nem megy a masik lapra forditas, akkor forditsd le kulon a DB-s reszt, es majd toltsd be, vagy meg kell nezni, hogy esetleg neked kell-e beallitani egy memorialapot 4000h-ra Heassban hasznalathoz