Welcome, Guest. Please login or register.


Author Topic: Assembly programozás (Read 258359 times)

Offline Zozosoft

  • Global Moderator
  • EP addict
  • *
  • Posts: 14734
  • Country: hu
    • http://enterprise.iko.hu/
Re: Assembly programozás
« Reply #705 on: 2013.November.14. 10:38:14 »
Quote from: Povi
ööö... én olyat keresek, amibe betöltök egy fájlt, megmondom a kezdőcímet (hogy hova dissassemblálja), majd kiírja nekem txt fájlba
Az ilyen fajta disassemblerrel nem mész sokra, max nagyon egyszerű programok esetén. Mindenesetre ilyen a DZ80
IDA-val lehet jobban boldogulni, azzal meg csak az a baj, hogy pl az EXOS hívásokat nem ismeri, kézzel kell mindet szerkeszteni, hogy az RST után DB legyen.
Beszéltünk már sokat arról, hogy kéne egy jó, EP-t ismerő disassembler, de eddig még nincs ilyen :-(

Offline Zozosoft

  • Global Moderator
  • EP addict
  • *
  • Posts: 14734
  • Country: hu
    • http://enterprise.iko.hu/
Re: Assembly programozás
« Reply #706 on: 2013.November.14. 10:41:49 »
Quote from: Povi
köszi
közben találtam ezt: dZ80
Ehhez csináltam EXOS hívás felismerőt.

Offline endi

  • EP addict
  • *
  • Posts: 7298
  • Country: hu
  • grafikus, játékfejlesztõ, programozás, scifi, tudományok, vallás
    • Honlapom
Re: Assembly programozás
« Reply #707 on: 2013.November.14. 10:46:03 »
jó lesz ha abbahagyjátok ezeket a tool fejlesztéseket mert a végén még én is elkezdek megint ep-re programozni
:)
Vigyázat! Szektás vagyok! :)

Offline Z80System

  • EP addict
  • *
  • Posts: 3848
  • Country: hu
Re: Assembly programozás
« Reply #708 on: 2013.November.14. 10:59:05 »
[ Guests cannot view attachments ]
Z80 System

Offline Povi

  • EP addict
  • *
  • Posts: 2298
  • Country: hu
    • http://povi.fw.hu
Re: Assembly programozás
« Reply #709 on: 2013.November.14. 11:40:54 »
Quote from: Zozosoft
Ehhez csináltam EXOS hívás felismerőt.
de jó, köszi! :-)
*** Speicherplatz zu klein

Offline lgb

  • EP addict
  • *
  • Posts: 3563
  • Country: hu
  • æðsta yfirmaður
    • http://lgb.hu/
Re: Assembly programozás
« Reply #710 on: 2013.November.14. 14:51:35 »
Quote from: Zozosoft
Az ilyen fajta disassemblerrel nem mész sokra, max nagyon egyszerű programok esetén. Mindenesetre ilyen a DZ80
IDA-val lehet jobban boldogulni, azzal meg csak az a baj, hogy pl az EXOS hívásokat nem ismeri, kézzel kell mindet szerkeszteni, hogy az RST után DB legyen.
Beszéltünk már sokat arról, hogy kéne egy jó, EP-t ismerő disassembler, de eddig még nincs ilyen :-(

Az epbas projectem kereteben kezdtem el ilyet ugye, csakhat azert messze van attol, hogy igazan jo legyen ... Ez mondjuk disasm mellett tud par mas dolgot is, pl basic (innen a neve az "epbas"), meg kepet is pl.

Itt van par sample kimenet, amiket csinal: http://epbas.lgb.hu/tryit/?storage=index, weben at is hasznalhato, nem feltetlen kell letolteni (mert akkor kell ala python, stb)

Itt a tema a forumon, az elejen meg csak basic-rol van szo benne.
« Last Edit: 2013.November.14. 15:08:42 by lgb »

Offline szipucsu

  • Global Moderator
  • EP addict
  • *
  • Posts: 9928
  • Country: hu
    • Támogató Támogató
    • Webnyelv.hu - Tanuljunk nyelveket!
Re: Assembly programozás
« Reply #711 on: 2013.November.14. 19:06:49 »
Quote from: endi
jó lesz ha abbahagyjátok ezeket a tool fejlesztéseket mert a végén még én is elkezdek megint ep-re programozni :)
Ejnye, mivel te nem programozol EP-re, más se tegye? Miféle sabotage ez? :D
100 SOUND SOURCE 2,STYLE 128,PITCH 25.2,SYNC 1
110 SOUND PITCH 25,SYNC 1
120 ! Videos

Offline Z80System

  • EP addict
  • *
  • Posts: 3848
  • Country: hu
Re: Assembly programozás
« Reply #712 on: 2013.November.14. 19:08:56 »
Quote
 Miféle sabotage ez? 
Saboteur.
Z80 System

Offline szipucsu

  • Global Moderator
  • EP addict
  • *
  • Posts: 9928
  • Country: hu
    • Támogató Támogató
    • Webnyelv.hu - Tanuljunk nyelveket!
Re: Assembly programozás
« Reply #713 on: 2013.November.14. 19:31:34 »
Quote from: Z80System
Saboteur.
Igen. Megtalálja a lemezt tele EP programokkal, majd egy helikopterrel lelép a cuccal. :D
100 SOUND SOURCE 2,STYLE 128,PITCH 25.2,SYNC 1
110 SOUND PITCH 25,SYNC 1
120 ! Videos

Offline Povi

  • EP addict
  • *
  • Posts: 2298
  • Country: hu
    • http://povi.fw.hu
Re: Assembly programozás
« Reply #714 on: 2013.November.15. 22:04:39 »
gyöngyszemek a HiSoft Pascal-ból:

1. értékadás HL-nek
2. elmenti HL értékét a memóriába
3. HL-nak más értéket ad
4. csinál vele valamit, tök mindegy mit
5. a memóriából visszatölti a HL értékét
???
a 2. és az 5. pontot ki lehetne hagyni, és az 5. helyére tenni az 1.-t

még az is jobb lett volna, ha a 2. és 5. pont helyett egy PUSH és egy POP van, de annak se lett volna értelme
*** Speicherplatz zu klein

Offline Zozosoft

  • Global Moderator
  • EP addict
  • *
  • Posts: 14734
  • Country: hu
    • http://enterprise.iko.hu/
Re: Assembly programozás
« Reply #715 on: 2013.November.15. 22:06:23 »
És az 5. pontra nincs ugrás máshonnan?

Offline Povi

  • EP addict
  • *
  • Posts: 2298
  • Country: hu
    • http://povi.fw.hu
Re: Assembly programozás
« Reply #716 on: 2013.November.15. 22:33:20 »
nincs :-)
*** Speicherplatz zu klein

Offline Z80System

  • EP addict
  • *
  • Posts: 3848
  • Country: hu
Re: Assembly programozás
« Reply #717 on: 2013.November.16. 00:01:53 »
PC regiszter valami általánosabb regiszterbe töltésére van valami szép módszer ? Szebb mondjuk ennél :

call addr
addr:
pop hl
Z80 System

Offline IstvanV

  • EP addict
  • *
  • Posts: 4822
Re: Assembly programozás
« Reply #718 on: 2013.November.16. 09:36:33 »
Quote from: Z80System
PC regiszter valami általánosabb regiszterbe töltésére van valami szép módszer ? Szebb mondjuk ennél :

call addr
addr:
pop hl

Ebben az esetben (ha a POP HL közvetlenül a CALL után található) egyszerű "LD HL, addr", mert az "addr" fix címre fordítódik, egyébként a CALL nem is működne. Fix címen található, pozíció független kódból több helyről hívható rutin ilyen lehetne:
Code: ZiLOG Z80 Assembler
  1. getPC:
  2.         pop     hl
  3.         jp      (hl)
Ha fontos a sebesség/méret, akkor ezt célszerű RST utasítással hívni.

Hasonló megoldás használható 32 bites x86 kódban is, ezt például a "gcc -m32 -fPIC" kimenetéből másoltam:
Code: [Select]
00000000 <__x86.get_pc_thunk.cx>:
   0:   8b 0c 24                mov    ecx,DWORD PTR [esp]
   3:   c3                      ret
A 64 bites x86 már támogatja az RIP relatív címzést, így ott nincs szükség ilyen trükkre.
« Last Edit: 2013.November.16. 09:41:34 by IstvanV »

Offline Z80System

  • EP addict
  • *
  • Posts: 3848
  • Country: hu
Re: Assembly programozás
« Reply #719 on: 2013.November.16. 11:49:15 »
Igazából úgy tűnik mégsem fog kelleni ilyen PC babrálás, mert megoldódott nélküle.

Nálam ilyen a memória (lap) kiosztás:

F8,FC,FD,FE

Amiből F8 természetesen a kód+mindenféle adat és változó terület (meg az első 100h ugye),
és FC,FD,FE pedig a screen buffer -eim, plussz a sprite adatok, interleave -elve 100h -nként.
Az FE legvégén van üres 6K, az lesz a hangeffekt puffer.

Namost ehhez jön az FF szegmens legelejére tett LPT, de az jelenleg fix, nem animált, így az FF nincs is belapozva, csak addig míg inicializálási időben le van generálva rá az LPT.

Na és akkor ezekre jött rá a csillagmozgás szegmense, ami az F9 -re fog kerülni, és minden frame -ben be fog lapozódni a nullás lapon az F8 helyére, majd ha kirajzolta a csillagokat a másik három lapon lévő aktuális képernyőre, akkor visszakerül az F8 a 0xb0 -ra.

Mindezt úgy valósítom meg jelenleg, hogy az F8 -as normál szegmensemen olyan kód van, ami belapozza az F8 -at a 0xb1 -re is, majd átugrik rá arra a címre ami közvetlenül a lapozó utasítás után van az F8 szegmensen, de már a 0xb1 lapon, és ott pedig olyan kód folytatódik az F8 -on, hogy 0xb0 -ra berakja a csillagmozgás szegmensét (F9), és jp xxxx -szel ráugrik a csillagmozgás kódjára.
A csillagmozgás kódja először visszalapozza az FC szegmenst 0xb1 -re, ami ideiglenesen felülíródott a 0xb0 váltásához, kirajzolja a csillagokat, majd megjátsza az előző lapváltást és visszaugrást fordítva.
Az F8 -on lévő normál kód végül szintén visszalapozza az FC szegmenst a 0xb1 -re, mert ugye most meg az F9 -cel íródott felül a 0xb0 szegmensváltásához.
Ezután a következő csillag kirajzolásig nem változnak a szegmensek.

Na és amiért mindezt leírtam: az ehhez szükséges kódhoz nem volt szükségem sem PC babrálásra mint ahogy először gondoltam, de még módosított kódra sem.
Mindent ki tudtam fejezni fordítási időben, simán a fordítóval.
Mindezt úgy, hogy a F9 szegmensen lévő csillagmozgás kódot és adatot úgy másolom/generálom az F8 -on valahova épp befordult kódokból. De a kód és adat patterneket elég csak simán egymás után pakolgassam, azokban már minden címhelyes lesz a beforduláskor. Semmit nem kell "relokálgassak" rajtuk, és nincs bennük sem semilyen PC szamítgatás megvalósítva.
« Last Edit: 2013.November.16. 11:52:56 by Z80System »
Z80 System