Welcome, Guest. Please login or register.


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

Offline Zozosoft

  • Global Moderator
  • EP addict
  • *
  • Posts: 14710
  • Country: hu
    • http://enterprise.iko.hu/
Re: Assembly programozás
« Reply #90 on: 2008.September.15. 18:29:58 »
A EXOS által használt 0-ás szegmenst kilapozom, és helyére belapozok egy elõre kiválasztott memóriaszegmenst, amire felmásolom a 0-ás szegmens tartalmát 0-200H-ig, és átállítom, ha jó emlékszem a BFFCh memóriacímet a megfelelõ értékre. EP32 magnós konfig alatt nincsen semmi gondom a file betöltéssel, teljesen jól mûködik, de EP128 EXDOS-os config alatt CF-es hibaüzenetet ad vissza az EXOS1-es hívás.
Ez izgi, mert ez én is csinálom a spectrum átiratos betöltõmben, EP64 esetére. Itt az FF szegmens lesz a nullás lap, betöltõ program, LPT és a rendszer szegmens egyben :-) és mûködik is az EXOS 1 magnóról, floppyról, vinyóról egyaránt! Annyi a fontos, hogyha te is FF szegmenst akarod erre használni, hogy az EXOS határt is be kell állítani, persze elötte kiutaltatni megosztott szegmensként.
A CF-rõl nem találtam semmit.
 :?:
A CF az számításaim szerint 207, az pedig File not found.
Itt vannak az EXDOS hibakódok, az angol EXDOS leírásban. (Itt BASIC számmal emlegeti, normálisan értelemszerûen 9000-el kisebb kódok.)
Ill. van pár hibakód amire gyárilag nincs magyarázat, ezek közül jó pár belekerült az általam módosított EXDOS ROM-okba. Ilyen pl a Track not found, FAT error, meg még egy pár de a CF az gyári :-)

Offline geco

  • EP addict
  • *
  • Posts: 7072
  • Country: hu
    • Támogató Támogató
Re: Assembly programozás
« Reply #91 on: 2008.September.16. 09:02:24 »
Köszi szépen, nem is tudtam, hogy -9000-rel kapható meg a kód.  :) Érdekes, mert úgy emlékszem, hogy az összes file-t felmásoltam a floppy image-re, de majd megnézem újra, a betöltő részt is, pár órám már ráment.  :ds_icon_cheesygrin:
Az FF szegmenst csak a 0-200h, meg az LPT tárolására használom most, a program 128K-s CPC-n, és az egyik memóriszegmensen, ami alapból is belapozódik 0. lapra, 0-200 h érintetlen marad, azt használom erre a célra.  :)

Offline Zozosoft

  • Global Moderator
  • EP addict
  • *
  • Posts: 14710
  • Country: hu
    • http://enterprise.iko.hu/
Re: Assembly programozás
« Reply #92 on: 2008.October.22. 11:17:19 »
el tudnátok mondani pontosan mit csinál az lpt vsync része?
sosem értettem miért kell ez a trükközés a végén, azaz miért ilyen bonyolult?
eltérõ módú sorok, különbözõ margókkal... ?
Én már kezdem érteni, egyszerüség kedvéért nézzünk egy üres LPT-t, ez van alapból az IVIEW-ben:
Code: [Select]
SYNC
            DEFB 106,12H,63,0,0,0,0,0,0,0,0,0,0,0,0,0   ;150 sor
            DEFB 106,12H,63,0,0,0,0,0,0,0,0,0,0,0,0,0   ;150 sor
            DEFB 253,10H,63,0,0,0,0,0,0,0,0,0,0,0,0,0   ;3 sor, a szinkronizacio kikapcsolva
            DEFB 252,10H,6,63,0,0,0,0,0,0,0,0,0,0,0,0   ;4 sor, a szinkronizacio bekapcsolva
            DEFB 255,90H,63,32,0,0,0,0,0,0,0,0,0,0,0,0  ;1 sor, a szinkronizacio a sor felenel kikapcsol
            DEFB 252,13H,6,63,0,0,0,0,0,0,0,0,0,0,0,0   ;4 ures sor
A 2 db 150 soros rész szabadon variálható képmegjelenítésre. Konkrétan az IVIEW esetén a kettõ közé jön a kép, ennek megfelelõen csökkentve ezeknek a hosszát. Ami megmarad ezekbõl a sorokból, az fogja a keretszínt megjeleníteni a kép alatt és felett.
Összesen itt 300 sorunk van, de nagy valószínûséggel egy átlag TV vagy monitor csak olyan 270-280-at tud megjeleníteni, a többi a képernyõn kívülre esik. (Mint ahogy vízszintesen is 46 karakter lehet a kép szélessége, de ebbõl jó ha 42 megjelenik.)
Ezután jön fixen 3 sor keret, ezt még meg kell vizsgálni, hogy kihagyható-e (és akkor 303 sor lesz az elõzõ szakaszban).
A következõ 4 sorral kezdõdik a szinkronizáció. Mivel a PAL szabvány elõírja, a jelszint itt 0-n legyen, ezért van az, hogy rendes margók vannak beállítva a teljes tartományra, és elvileg ugye a 0-ás videócímtõl jeleniti meg a képet, de ez nem számít mivel minden paletta szín fekete.
A következõ sorban a cseles margóval érik el, hogy a sor felénél abba maradjon a szinkronizáció, mint ahogy az a szabványban is van.
És a maradék szintén a szabványnak megfelelõen biztosít további nullás jelszintet a 4 fekete sorral.

Offline Povi

  • EP addict
  • *
  • Posts: 2290
  • Country: hu
    • http://povi.fw.hu
Re: Assembly programozás
« Reply #93 on: 2008.November.23. 20:44:38 »
Ejnye, nem figyeltél az elmúlt években, amikor számtalanszor ajánlottam ezt a módszert gépi kódú programból való kilépésre... :-(
Az EXOS lapozórutinján keresztül kell meghívni az 1-es szegmenst, 6-os akciókóddal:
Code: [Select]
                LD A,6
                EX AF,AF'
                LD A,1
                LD HL,0C00DH
                JP 0B217H
Természetesen ekkor a 2-es lapon a rendszerszegmensnek kell lenni.


Két probléma van ezzel a módszerrel.
1. a kisebbik: nem szabadítja fel a felhasználónak kiutalt szegmenseket, ezt meg kell tennünk magunknak, ha tényleg elegánsan akarunk kilépni a programból.
2. a nagyobb probléma: nem működik EXOS 2.0-n. Ehhez módosítani kell az utolsó sort, JP 0B21C-re.
*** Speicherplatz zu klein

Offline Zozosoft

  • Global Moderator
  • EP addict
  • *
  • Posts: 14710
  • Country: hu
    • http://enterprise.iko.hu/
Re: Assembly programozás
« Reply #94 on: 2008.November.24. 09:11:39 »
1. a kisebbik: nem szabadítja fel a felhasználónak kiutalt szegmenseket, ezt meg kell tennünk magunknak
Természetesen!
Quote
2. a nagyobb probléma: nem mûködik EXOS 2.0-n. Ehhez módosítani kell az utolsó sort, JP 0B21C-re.
Nem szép de mûködik  :oops: igaz végrehajt pár fölös utasítást  :oops:

De akkor legyen szép:
Code: ZiLOG Z80 Assembler
  1.                 LD A,6
  2.                 EX AF,AF'
  3.                 LD A,(0B21CH)
  4.                 CP 0D3H
  5.                 LD A,1
  6.                 LD HL,0C00DH
  7.                 JP Z,0B21CH
  8.                 JP 0B217H
« Last Edit: 2008.November.24. 09:33:16 by Zozosoft »

Offline Tuby128

  • EP addict
  • *
  • Posts: 1453
  • Country: hu
Re: Assembly programozás
« Reply #95 on: 2009.April.05. 19:59:02 »
Sziasztok!

Lenne egy kérdésem:
 Ha megírok egy programot az Asmon-ban, akkor hogy kell elmentenem ahhoz, hogy gép újraindítása után betöltéskor elinduljon? Milyen org címre kell fordítanom, egyáltalán melyik lapra tölti be?
 Meg ha lehet, kicsit részletesebb leírást kérek ezzel kapcsolatban, hogy az asmon-ban miket állítsak be.

Elõre is köszönöm a választ!

Offline IstvanV

  • EP addict
  • *
  • Posts: 4822
Re: Assembly programozás
« Reply #96 on: 2009.April.05. 20:31:54 »
Ha megírok egy programot az Asmon-ban, akkor hogy kell elmentenem ahhoz, hogy gép újraindítása után betöltéskor elinduljon?
Monitor módban a Z billentyű lenyomása után az 'Object file name'-nél meg kell adni a file nevet, az 'EXOS module header'-t YES-re állítani, és az 'EXOS module type' 5 legyen. Utána az A billentyűvel lehet lefordítani a programot. Természetesen a forráskódot sem árt menteni kilépés előtt :)
Quote
Milyen org címre kell fordítanom, egyáltalán melyik lapra tölti be?
100h címre, és a nullás lapra töltődik be a program eleje. Ha hosszabb, mint 15.75K, akkor az EXOS lefoglal legfeljebb két további szegmenst, és azokra töltődik a program többi része. Ezeknek a szegmenseknek a számát az FFh szegmensen a BFFDh és BFFEh címen lehet megtalálni (indításkor nincsenek belapozva). Ezt és ezt célszerű elolvasni.

Offline Tuby128

  • EP addict
  • *
  • Posts: 1453
  • Country: hu
Re: Assembly programozás
« Reply #97 on: 2009.April.05. 22:41:03 »
Hány processzorütem kell, amíg a DAVE belapoz egy lapot a Z80-nak?
Az asmonban ha írok egy progit, és mondjuk az van benne, hogy OUT (0b2h),0FFh akkor a G végrehajtásával miért nem lapozza be? Csináltam késleltetõ rutint, és úgy sem változott.
 Talán blokkolja a lapozást az Asmon?
 Nem értem.
 Egyébként az In a, (0b2h) utasításra az akkumlátorba mindig 0 kerül. Ha viszont a C regisztert használom a cím megadására akkor bezzeg kiolvassa. Ez meg megint miért van?

Offline Mayer Gábor

  • EP fan
  • *
  • Posts: 216
  • Country: hu
Re: Assembly programozás
« Reply #98 on: 2009.April.06. 10:46:54 »
P2-t használja az asmon, próbáld P1-en (port 0b1h)

Offline Tuby128

  • EP addict
  • *
  • Posts: 1453
  • Country: hu
Re: Assembly programozás
« Reply #99 on: 2009.April.06. 16:55:35 »
Hehe. Rájöttem! Szintaktikai hibát vétettem. Az egyik címke elõtt ott maradt egy pontosvesszõ. Nem találjátok ki milyen utasítás volt utána! De bizony! Out 0b2h,a :D Ekkora szégyent.
 Onnan jöttem rá egyébként, hogy elkezdtem disassemblálni a memóriában lévõ lefordított kódot, és feltûnt, hogy hiányzik egy sor.
 Mostmár sikerült kiíratni a státuszsorba, hogy szerény személyem milyen elmés, hogy ilyeneket tud :)

Offline Zozosoft

  • Global Moderator
  • EP addict
  • *
  • Posts: 14710
  • Country: hu
    • http://enterprise.iko.hu/
Re: Assembly programozás
« Reply #100 on: 2009.April.20. 15:59:18 »
EXDOS visszafejtésbõl, a HELP rutinban amikor a parancsok listáját írja ki.
Ha megnézzük a táblázatot, akkor látszik, hogy vannak definiálva olyan spéci "parancsok" amik nem kerülnek kiírásra.
A kiírórutinban zseniálisan egy szem BIT 5,(HL) utasítással megoldották annak eldöntését, hogy kiírandó parancsszóról van szó. Nagyon tetszik  :smt038
Code: ZiLOG Z80 Assembler
  1.         ;használható parancsszavak listájának kiírása
  2.  
  3.         LD      HL,LEC58        ;parancsok táblázata, HL az elsõ hosszbájtra mutat
  4. leb9e:  LD      C,(HL)          ;hosszbájt a C-be
  5.         LD      E,L
  6.         LD      D,H             ;LD DE,HL
  7.         INC     DE              ;DE a szöveg elejére mutat
  8.         XOR     A
  9.         LD      B,A             ;BC=a szöveg hossza
  10.         ADD     HL,BC           ;HL az utolsó karakterre mutat
  11.         BIT     5,(HL)          ;az utolsó karakter vizsgálata
  12.                                 ;normál nagybetûs szövegeknél
  13.                                 ;Z lesz az eredmény
  14.                                 ;a speciális * ill. EXDOS,FDH
  15.                                 ;esetén pedig NZ
  16.         INC     HL              ;végrehajtó
  17.         INC     HL              ;rutin címe
  18.         INC     HL              ;HL a következõ hosszbájtra mutat
  19.         JR      NZ,LEB9E        ;ugrás ha nem nagybetû
  20.         DEC     A               ;A=255, alapértelmezett csatorna
  21.         EXOS    08H             ;szöveg kiírása
  22.         LD      B,20H           ;szóköz
  23.         CALL    LEFD9           ;karakter kiírása
  24.         LD      A,(HL)          ;az új hosszbájt az A-ba
  25.         OR      A               ;=0?
  26.         JR      NZ,LEB9E        ;ciklus elejére, ha van még szöveg
  27.         LD      C,A             ;C=0
  28.         JP      LEFD2           ;ugrás a CR/LF kiírás rutinjára
  29.                                 ;ahonnan a RET-tel az EXOS-hoz tér vissza,
  30.                                 ;nullázott C regiszterrel, tehát a mûvelet
  31.                                 ;elvégezve
  32. LEC58:  DB 2,"**"
  33.         DW LED9A
  34.         DB 2,"CD"
  35.         DW LF27F
  36.         DB 2,"MD"
  37.         DW LF41B
  38.         DB 2,"RD"
  39.         DW LF3BE
  40.         DB 3,"***"
  41.         DW LED9A
  42.         DB 3,"DEL"
  43.         DW LF3BF
  44.         DB 3,"DIR"
  45.         DW LF2AB
  46.         DB 3,"CLS"
  47.         DW LF4DA
  48.         DB 3,"ERA"
  49.         DW LF3BF
  50.         DB 3,"REM"
  51.         DW LED9A
  52.         DB 3,"REN"
  53.         DW LF433
  54.         DB 3,"VAR"
  55.         DW LFB69
  56.         DB 3,"VOL"
  57.         DW LF495
  58.         DB 4,"ATTR"
  59.         DW LECD0
  60.         DB 4,"COPY"
  61.         DW LF4EF
  62.         DB 4,"DATE"
  63.         DW LF90C
  64.         DB 4,"ECHO"
  65.         DW LF4E2
  66.         DB 4,"LOAD"
  67.         DW LFB11
  68.         DB 4,"MOVE"
  69.         DW LF430
  70.         DB 4,"TIME"
  71.         DW LF90B
  72.         DB 4,"TYPE"
  73.         DW LF4E9
  74.         DB 5,"ATDIR"
  75.         DW LECC8
  76.         DB 5,"CHDIR"
  77.         DW LF27F
  78.         DB 5,"ERASE"
  79.         DW LF3BF
  80.         DB 5,"EXDOS"
  81.         DW LEDA3
  82.         DB 5,"ISDOS"
  83.         DW LFA9E
  84.         DB 5,"MKDIR"
  85.         DW LF41B
  86.         DB 5,"MVDIR"
  87.         DW LF42F
  88.         DB 5,"PAUSE"
  89.         DW LFB31
  90.         DB 5,"RMDIR"
  91.         DW LF3BE
  92.         DB 5,"RNDIR"
  93.         DW LF432
  94.         DB 6,"EXDOS",0FDH
  95.         DW LED9C
  96.         DB 6,"FORMAT"
  97.         DW LFA44
  98.         DB 6,"RENAME"
  99.         DW LF433
  100.         DB 6,"ASSIGN"
  101.         DW LED00
  102.         DB 7,"RAMDISK"
  103.         DW LFB3D
  104.         DB 7,"MAPDISK"
  105.         DW LED01
  106.         DB 0

Offline Zozosoft

  • Global Moderator
  • EP addict
  • *
  • Posts: 14710
  • Country: hu
    • http://enterprise.iko.hu/
Re: Assembly programozás
« Reply #101 on: 2009.May.01. 12:22:26 »
Szintén EXDOS, aranyos kis trükk, hogyan helyettesítsünk egy bájttal egy két bájtos közeli JR-t! A töltelékbájtokat tessék figyelni :-)
Code: ZiLOG Z80 Assembler
  1. lfd34:  LD      A,(IY-2AH)      ;eddigi paraméter értékek
  2.         OR      (HL)            ;aktuális hozzáadása
  3.         INC     DE              ;következõ szövegkarakter
  4.         POP     HL              ;paramétertábla címe vissza
  5.  
  6.         ;töltelék bájt, hogy az utána következõ XOR A ne fusson le
  7.  
  8.         DB 0EH ;LD      C,0AFH
  9.  
  10.         ;/ paraméterek keresése
  11.         ;DE=szövegpuffer
  12.         ;HL=paramétertáblázat címe, a táblázat két bájtos elemekbõl épül fel
  13.         ;az elsõ a parméter karakter, a második a hozzátartozó érték
  14.  
  15.         ;Z lesz, ha már nem / paraméter a következõ szó
  16.         ;NZ, ha van / paraméter, de az nincs a táblázatban
  17.  
  18. LFD3B:  XOR A                   ;paraméter kezdõérték
  19.         SET     0,A
  20.         LD      (IY-2AH),A      ;RAM terület 53H címe, itt gyûjti a
  21.                                 ;paraméter értékeket
  22.         EXX    
  23.         LD      C,A             ;C'=paraméterérték
  24.         EXX    
  25.         PUSH    HL              ;paramétertábla címe a verembe
  26.         CALL    LFC05           ;szóköz és TAB karakterek átugrása
  27.         LD      A,C             ;a következõ karakter
  28.         CP      2FH             ;="/"?
  29.         JR      NZ,LFD5D        ;kilépés a keresésbõl, ha nem
  30. lfd4d:  LD      A,(DE)          ;A-ba a / utáni karakter
  31.         CALL    LFE31           ;nagybetûsítés
  32.         CP      (HL)            ;összehasonlítás a paramétertábla
  33.                                 ;aktuális karakterével
  34.         INC     HL              ;mutató a paraméterhez tartozó értékre
  35.         JR      Z,LFD34         ;paraméter érték letárolása, ha találat van
  36.         INC     HL              ;táblázat következõ eleme
  37.         LD      A,(HL)          ;karakter az A-ba
  38.         OR      A               ;táblázat vége?
  39.         JR      NZ,LFD4D        ;ha nem, akkor az újabb elem összehasonlítása
  40.         OR      0AEH            ;A-ba az "Invalid parameter" hibakód
  41.                                 ;és egyben NZ flag beállítás
  42.         ;töltelék bájt, hogy az utána következõ DEC DE, XOR A ne fusson le       
  43.  
  44.         DB 0CAH ;JP      Z,LAF1B
  45.  
  46. LFD5D:  DEC DE                  ;mutató vissza az elözõ karakterre
  47.         XOR A                   ;Z flag
  48.         POP     HL
  49.         RET
« Last Edit: 2009.May.01. 14:46:29 by Zozosoft »

Offline Zozosoft

  • Global Moderator
  • EP addict
  • *
  • Posts: 14710
  • Country: hu
    • http://enterprise.iko.hu/
Re: Assembly programozás
« Reply #102 on: 2009.May.01. 18:34:14 »
gondolom, a túlcsordulást nem veszi figyelembe, és csak az alsó byte-ot használja fel
Igen, itt a bûnös:
Code: ZiLOG Z80 Assembler
  1. lfda3:  XOR     A               ;kezdõ érték 0
  2. lfda4:  LD      C,A             ;aktuális érték
  3.         CALL    LFDD1           ;numerikus karakter?
  4.         RET     C               ;visszatérés, ha nem
  5.  
  6.         PUSH    AF              ;karakter értéke a verembe
  7.         LD      A,C             ;A-ba az eddigi érték
  8.         ADD     A,A             ;A=eddigi érték*2
  9.         LD      C,A             ;C=eddigi érték*2
  10.         ADD     A,A             ;A=eddigi érték*4
  11.         ADD     A,A             ;A=eddigi érték*8
  12.         ADD     A,C             ;A=eddigi érték*10
  13.         LD      C,A             ;C=eddigi érték*10
  14.         POP     AF
  15.         ADD     A,C             ;A=most talált érték+10*eddigi érték
  16.         JR      LFDA4           ;következõ karakter keresése
Mint látható a konvertálást buzgón megcsinálja mindaddig, míg el nem fogynak a szám karakterek, viszont a túlcsordulással nem foglalkozik.
« Last Edit: 2009.May.01. 19:28:51 by Zozosoft »

Offline Z80System

  • EP addict
  • *
  • Posts: 3848
  • Country: hu
Re: Assembly programozás
« Reply #103 on: 2009.September.10. 00:31:21 »

Sziasztok, par napja egy demo- effekten kuzdok, es nem allitanam hogy nagy sikerrel. Emlekeztem en, hogy anno mikor az EP- t terveztek hiaba csinaltak bele a remek video modokat, ha scroll es sprite HW hianyaban a z80 keptelen megmozgatni azt a memoriat, ami a kepet alkotja. Ez mar anno is nagyon zavart engem, hogy egy C60 csilliard eve meglete, es az amiga hajnalan hogy lehetett ilyen cuccot tervezni, amibol ugy kell kicsikarni, osszesoprogetni, barmi kis teljesitmenymorzsat.

Naszo par napja egy demoeffektel kuzdeok, es kerdeznem, hogy van- e valaki, aki sebessegorientalt kodokat irogatott ( demo, jatek ), es vannak emlekei, vagy most is csinalja ? Egy ket kerdesem lenne, csak ugy aranyaiban az EP sebessegere vonatkozoan, mert meg a vartanal az emlekezettnel is nagysagrendekkel lassabbnak tunik az EP, pontyosabban az emulator, es szeretnem megtudni, vajon tenyleg ilyen rossz- e a helyzet...

Z80System


Z80 System

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 #104 on: 2009.September.10. 17:47:07 »
Scroll tekintetében ajánlom a Scroll demo megnézését.

Az EP videó teljesítménye másban mutatkozik meg, nem scrollban vagy sprite-okban. Nézd meg az újonnan konvertált pc képeket, elég döbbenetesen néznek ki EP-n.

(Ha még nem láttad volna ezeket persze...)
Vigyázat! Szektás vagyok! :)