Welcome, Guest. Please login or register.


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

Offline Z80System

  • EP addict
  • *
  • Posts: 3848
  • Country: hu
Re: Assembly programozás
« Reply #165 on: 2009.September.12. 00:53:36 »
egyebkent az SDCC az nem egy assembler, hanem C fordito, igy lehet C- ben tolni EP- re... csak iszonyat nagy kodokat general... de mindegy a nagyon unalmas inicializalo reszeket akkor is abba irom, megha 1 szegmens ra is megy az inicializalasi kodokra ... es float- okat hasznalni vegkepp nem szabad, muveletenkent dobja a kilobytokat ra ... :) :) nem is ertem, nincs ebbe az SDCC -be call, vagy mi ???


Z80 System

Offline geco

  • EP addict
  • *
  • Posts: 7069
  • Country: hu
    • Támogató Támogató
Re: Assembly programozás
« Reply #166 on: 2009.September.12. 08:43:26 »
hat az ugy megint nem tetszik... azert nyomott esc- t mert ki akar lepni... nem akarja rezidens progikent ... de hat van ep- re cp/m, meg ilyesmi... abba tuti nem igy van... az exos fejlesztoi nem ismertek azt a szitut, hogy betolt/futtat/kilep ???

hat hiaba, en ezeket ma sosem fogom megerteni...
Van egy másik megoldás, Basicben is meg lehet írni egy gépi kódú betöltőt, ami betölt egy fejléc nélküli file-t a megadott címre, majd betöltés után meghívni, ha ott térsz vissza RET-tel, akkor simán visszatér  a Basic progidhoz

Offline Zozosoft

  • Global Moderator
  • EP addict
  • *
  • Posts: 14709
  • Country: hu
    • http://enterprise.iko.hu/
Re: Assembly programozás
« Reply #167 on: 2009.September.12. 09:09:57 »
Van egy másik megoldás, Basicben is meg lehet írni egy gépi kódú betöltõt, ami betölt egy fejléc nélküli file-t a megadott címre, majd betöltés után meghívni, ha ott térsz vissza RET-tel, akkor simán visszatér  a Basic progidhoz
Ezzel viszont az a gond, hogy akkor csak BASIC-bõl fog mûködni a program, ill. elõfordulhat, hogy bizonyos gép verziókkal fog mûködni. (Sok gyári programmal is ez okozta az angol/német gép problémát!)
Lehetséges még a 2-es fejlécû felhasználói áthelyezhetõ modul, de olyat ember nem írt még a pár gyári programon kívül :-) és ezzel szintén a BASIC-hez láncoljuk magunkat.

Offline Zozosoft

  • Global Moderator
  • EP addict
  • *
  • Posts: 14709
  • Country: hu
    • http://enterprise.iko.hu/
Re: Assembly programozás
« Reply #168 on: 2009.September.12. 09:30:51 »
az exos fejlesztoi nem ismertek azt a szitut, hogy betolt/futtat/kilep ???
Akkoriban a számítástechnika aktuális fejlettségi szintje ez volt: betölt, futtat, kikapcsol.
Még reset sincsen a Spectrumon, C64-en és még egy csomó más gépen se. C64-en legalább kikapcsoló volt :-)
Ehhez képest az EP a maga reset gombjával már király :-) különösen, hogy kétféle reset módot ismer, amihez hasonlót én még nem láttam más gépen (kivéve a TVC, de az igen közeli rokon :-) ), még a PC se tudja!
És az EXOS már lehetõséget adott arra, hogy kilépéskor vagy reset gomb megnyomásakor visszatérj pl a BASIC-hez, úgy hogy közben megmaradtak a betöltött bõvítõk, ramdisk, változó beállítások, stb. (gyakorlati használatát bemutatta István)
Kár, hogy az EP-re készült programok 99% nem használta ki ezeket a lehetõségeket, és csak hideg indítással lehetett kilépni belõlük. Ezért is készült az EXOS 2.3 ami jobban ragaszkodik az életéhez, és ha lehet, akkor hidegindítás helyett a bejelentkezõ képhez ugrik.

Offline Zozosoft

  • Global Moderator
  • EP addict
  • *
  • Posts: 14709
  • Country: hu
    • http://enterprise.iko.hu/
Re: Assembly programozás
« Reply #169 on: 2009.September.12. 11:57:20 »
Ez már egy remélhetõleg jobb változat:
A JP 1000H helyére kell CALL, és akkor ESC-re rámegy a kilépésre.

Offline Zozosoft

  • Global Moderator
  • EP addict
  • *
  • Posts: 14709
  • Country: hu
    • http://enterprise.iko.hu/
Re: Assembly programozás
« Reply #170 on: 2009.September.12. 11:58:35 »
Nekem ez nagyon tetszik, abba ne hagyd!!!  ;-)
Egyetértek, nagyon jó!!!

Offline geco

  • EP addict
  • *
  • Posts: 7069
  • Country: hu
    • Támogató Támogató
Re: Assembly programozás
« Reply #171 on: 2009.September.12. 13:11:47 »
Akkoriban a számítástechnika aktuális fejlettségi szintje ez volt: betölt, futtat, kikapcsol.
Még reset sincsen a Spectrumon, C64-en és még egy csomó más gépen se. C64-en legalább kikapcsoló volt :-)
Kár, hogy az EP-re készült programok 99% nem használta ki ezeket a lehetõségeket, és csak hideg indítással lehetett kilépni belõlük. Ezért is készült az EXOS 2.3 ami jobban ragaszkodik az életéhez, és ha lehet, akkor hidegindítás helyett a bejelentkezõ képhez ugrik.
Kapott is szegény kikapcsológombom a C64-esen rendesen :D, csoda, hogy nem az adta meg magát, hanem a táp. :D
De hála neked, az új programok/átiratok már EXOS kompatibilisek. ;)

Offline IstvanV

  • EP addict
  • *
  • Posts: 4822
Re: Assembly programozás
« Reply #172 on: 2009.September.13. 17:34:53 »
Ezzel viszont az a gond, hogy akkor csak BASIC-bõl fog mûködni a program, ill. elõfordulhat, hogy bizonyos gép verziókkal fog mûködni. (Sok gyári programmal is ez okozta az angol/német gép problémát!)
Lehetséges még a 2-es fejlécû felhasználói áthelyezhetõ modul, de olyat ember nem írt még a pár gyári programon kívül :-) és ezzel szintén a BASIC-hez láncoljuk magunkat.

Esetleg még olyan bővítőt lehetne írni, amely betölt egy megadott nevű file-t a memóriába, és futtatja (melegindítás nélkül) :)

A JP 1000H helyére kell CALL, és akkor ESC-re rámegy a kilépésre.

Javított változat:
  [ Guests cannot view attachments ]
  [ Guests cannot view attachments ]

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 #173 on: 2010.May.02. 13:43:01 »
Volt már szó itt a fórumon arról, hogy bizonyos gépeken az IM2 megszakítás címének vétele hibás eredményt ad, mert az alsó byte-ban valami "zaj" van. (Ilyen volt az én gépem is, nem is futottak az im2-t használó játékok.)
Na most tudna valaki olyat csinálni hogy kiiratja egy file-ba vagy tga/bmp képre ezt a zajt? Tök kíváncsi lennék hogy néz ki. :)
Lehet hogy ezek az EP-k valódi véletlenszám generátorral rendelkeztek. :o)
Vigyázat! Szektás vagyok! :)

Offline Attus

  • EP addict
  • *
  • Posts: 1225
  • Country: hu
Re: Assembly programozás
« Reply #174 on: 2010.May.02. 20:54:28 »
Volt már szó itt a fórumon arról, hogy bizonyos gépeken az IM2 megszakítás címének vétele hibás eredményt ad, mert az alsó byte-ban valami "zaj" van. (Ilyen volt az én gépem is, nem is futottak az im2-t használó játékok.)
Az én gépem is ilyen volt, a BAM és janó féle átratokból elég sok nem is futott emiatt a gépemen.
Mondjuk nem ért túl nagy veszteség velük. :mrgreen:
Ezért is csináltam teljes 256 bájtos im2 táblát mindig. A profik által csinált spectrum programok is teljes tabellát csináltak, nem véletlenül.

Offline Zozosoft

  • Global Moderator
  • EP addict
  • *
  • Posts: 14709
  • Country: hu
    • http://enterprise.iko.hu/
Re: Assembly programozás
« Reply #175 on: 2010.May.02. 21:22:22 »
Ezért is csináltam teljes 256 bájtos im2 táblát mindig. A profik által csinált spectrum programok is teljes tabellát csináltak, nem véletlenül.
Vagy vissza kell rakni IM1-re, es megsporoljuk a tablat :-)

Offline Attus

  • EP addict
  • *
  • Posts: 1225
  • Country: hu
Re: Assembly programozás
« Reply #176 on: 2010.May.02. 21:37:49 »
Vagy vissza kell rakni IM1-re, es megsporoljuk a tablat :-)
:smt045

Offline Zozosoft

  • Global Moderator
  • EP addict
  • *
  • Posts: 14709
  • Country: hu
    • http://enterprise.iko.hu/
Re: Assembly programozás
« Reply #177 on: 2010.June.12. 11:11:21 »
Ez megválaszolta a következõnek szánt kérdésemet: mitõl lassul be brutálisan az LDIR, ha az utasítás kódja a videó memóriába kerül. Naivan eddig azt hittem, csak egyszer olvassa be a Z80  :oops: és így akkor megúszhatóak a várakozások.
De így akkor egyértelmûen az jön ki, hogy minden esetben gyorsabb a kiírt LDI LDI LDI... sorozat, mint az LDIR. Persze bizonyos mennyiség felett elég memória pazarló ez a módszer :-)
És van még egy módszer, ami memória takarékosabb, és még gyorsabb is mint az LDI-s, a POP-PUSH, itt egy félképernyõ (TEXT 80) scrollozásra van próbálkozás:
Code: ZiLOG Z80 Assembler
  1. SPSCROLL:
  2.                 LD HL,4000H          
  3.                 LD DE,4000H-9*80+20  
  4.                 LD A,198              
  5.                 CALL SPSCROLL1        
  6.                 LD HL,4000H-9*80      
  7.                 LD DE,4000H+189*80+20
  8.                 LD A,9              
  9. SPSCROLL1  
  10.                 LD (SPCEL+1),DE      
  11.                 LD (SPCOUNT+1),A      
  12.                 LD (SPSAVE+1),SP      
  13. SPKEZD:        
  14.                 LD SP,HL              
  15.                 POP BC                
  16.                 POP DE                
  17.                 POP HL                
  18.                 POP IX                
  19.                 POP IY                
  20.                 EXX                  
  21.                 POP BC                
  22.                 POP DE                
  23.                 POP HL                
  24.                 POP AF                
  25.                 EX AF,AF'            
  26.                 POP AF                
  27.                 LD (SPKEZD2+1),SP    
  28. SPCEL:          LD SP,4000H-9*80+20  
  29.                 PUSH AF              
  30.                 EX AF,AF'            
  31.                 PUSH AF              
  32.                 PUSH HL              
  33.                 PUSH DE              
  34.                 PUSH BC              
  35.                 EXX                  
  36.                 PUSH IY              
  37.                 PUSH IX              
  38.                 PUSH HL              
  39.                 PUSH DE              
  40.                 PUSH BC              
  41.                 LD HL,40              
  42.                 ADD HL,SP            
  43.                 LD (SPCEL2+1),HL      
  44.  
  45. SPKEZD2:        LD SP,4000H
  46.                 POP BC
  47.                 POP DE
  48.                 POP HL
  49.                 POP IX
  50.                 POP IY
  51.                 EXX
  52.                 POP BC
  53.                 POP DE
  54.                 POP HL
  55.                 POP AF
  56.                 EX AF,AF'
  57.                 POP AF
  58. SPCEL2:         LD SP,4000H-9*80+20
  59.                 PUSH AF
  60.                 EX AF,AF'
  61.                 PUSH AF
  62.                 PUSH HL
  63.                 PUSH DE
  64.                 PUSH BC
  65.                 EXX
  66.                 PUSH IY
  67.                 PUSH IX
  68.                 PUSH HL
  69.                 PUSH DE
  70.                 PUSH BC
  71.                 LD HL,80
  72.                 ADD HL,SP
  73.                 LD (SPCEL+1),HL
  74.                 LD HL,(SPKEZD2+1)
  75.                 LD BC,80-20
  76.                 ADD HL,BC
  77. SPCOUNT:        LD A,200
  78.                 DEC A
  79.                 LD (SPCOUNT+1),A
  80.                 JR NZ,SPKEZD
  81. SPSAVE:         LD SP,0
  82.                 RET

Önmagában a POP-PUSH kb 2x gyorsabb mint az LDIR, viszont gyakran kell variálni az SP-el, ami elviszi a megtakarítás nagy részét :-( Nem tudom, lehetne-e ezen még optimalizálni valamit?

Offline IstvanV

  • EP addict
  • *
  • Posts: 4822
Re: Assembly programozás
« Reply #178 on: 2010.June.12. 11:24:57 »
És van még egy módszer, ami memória takarékosabb, és még gyorsabb is mint az LDI-s, a POP-PUSH, itt egy félképernyõ (TEXT 80) scrollozásra van próbálkozás:

Képernyő scrollozására gyorsabb megoldás lehetne az LPT-ben átírni a video címet, és akkor csak a belépő pixeleket kell a memóriába írni az egész mozgatása helyett. Igaz, így bonyolultabb a pixel adatok címzése, és ez a megoldás nem kompatibilis az EXOS videokezelőjével (ha annak a képernyőjét próbálod scrollozni).

Offline IstvanV

  • EP addict
  • *
  • Posts: 4822
Re: Assembly programozás
« Reply #179 on: 2010.June.12. 11:28:29 »
És van még egy módszer, ami memória takarékosabb, és még gyorsabb is mint az LDI-s, a POP-PUSH, itt egy félképernyõ (TEXT 80) scrollozásra van próbálkozás:

Ilyen megoldást használtak egyébként az ATF-ben is :)