Enterprise Forever

:HUN => Programozás => Topic started by: Jubatian on 2011.March.22. 22:39:21

Title: ASM EP-n - hogyan kezdjem?
Post by: Jubatian on 2011.March.22. 22:39:21
Üdv!

Kis segedelmet szeretnék kérni abban, hogyan tudnám az EP-t Assemblerben programozni? Azaz konkrétan abban, mi is kellene ahhoz, hogy egy ilyen ASM program elinduljon pl. BASIC alól betöltés és futtatásra. C64-en ezt úgy oldottam meg, hogy valahonnan kihalásztam, mi is van a .prg fájlokban, aztán írtam egy stub-ot (Egy SYS ugrás az utána következõ ASM elsõ utasítására), amit a fordítóval generált bináris elejére applikálok. Valami ilyesmihez szeretnék EP-vel is eljutni. Hol kellene ugyan nézelõdnöm? Esetleg itt ez azért bonyolultabb lenne, hogy az EXOS-al is jóban legyek? Hát na, a BASIC-et annyira nem szeretem, bár próbálgattam azért :)

Esetleg így a technikaiakról akad ez-az? Játékok szervezése például? Arra gondolok, hogy hogyan alakulnak az alap gép-specifikus dolgok, például akár a játékok mondjuk miért olyan fájlokra vannak lebontva, amilyenekre (Ennek az egy-egy szegmensbe szánt binárisnak az lenne a szerepe, hogy az indító .com majd bepakolná õket egyenként betöltéskor? Momentán a Wriggler van elõttem). Vagy csak én nem nézelõdnék a dolog után jó helyen, pedig ott az orrom elõtt...

Köszi a segítséget!
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: Zozosoft on 2011.March.22. 23:32:39
Használ EP assemblert (HEASS ajánlott) (http://www.ep128.hu/Ep_Util/HEASS.htm), és akkor csak annyi a dolgod, hogy 5-ös fejléccel fordítod le a programodat. A LOAD ezt 100H-tól fogja betölteni, és indítani, lásd új alkalmazói programok betöltése. (http://www.ep128.hu/Ep_Konyv/Exos.htm#48)

Itt egy példaprogramocska, ami tartalmazza a program szabályos indulását, memória foglalást, LPT felépítést, kilépést. A fõprogram jelenleg kimerül SPACE gomb figyelésben :-)
Code: ZiLOG Z80 Assembler
  1.                 MACRO EXOS n
  2.                   RST 30H
  3.                   DB  n
  4.                 ENDM
  5.  
  6.                 ORG 0F0H
  7.  
  8.                 ;16 bájtos EXOS fejléc
  9.  
  10.                 DB 0,5          ;5-ös típus, vagyis gépi kódú felhasználói program
  11.                 DW VEGE-100H    ;hossz 16 biten
  12.                 DB 0,0,0,0,0,0,0,0,0,0,0,0 ;többi bájt nem használt
  13.  
  14.                 ;program kezdete, 100H-ra töltödik be
  15.  
  16.                 LD SP,100H      ;felhasználói veremmutató beállítása, 164 bájt szabad
  17.                                 ;Az EXOS-nak saját belsõ verme van a rendszerszegmensben
  18.                                 ;EXOS hívások vagy EXOS megszakítás kiszolgálása esetén
  19.                                 ;8 bájt kerül felhasználásra a felhasználói verembõl
  20.                 LD HL,HIBA
  21.                 LD (0BFF8H),HL  ;EXOS melegindítási rutin címének beállítása
  22.  
  23.                                 ;ez a rutin fut le a Reset gomb egyszeri megnyomásakor
  24.                                 ;jelen esetben ugyanazt a kilépési rutint használjuk,
  25.                                 ;amit egyéb hibák esetén is. A HIBA rutin felszabadítja
  26.                                 ;a programunk által használt memóriát, majd szabályosan
  27.                                 ;kilép a villogó ENTERPRISE felírathoz.
  28.                                 ;így a reset megnyomásakor a program szabályosan kilép,
  29.                                 ;nem történik teljes hidegindítás, így a gépben lévõ
  30.                                 ;adatok (pl RAMDISK vagy rendszerbõvítõk) megõrzõdnek
  31.  
  32.                 LD A,12         ;memória várakozások
  33.                 OUT (191),A     ;tiltása (opcionális :-)
  34.                
  35.                 ;keretszín feketére állítása
  36.  
  37.                 LD BC,100H+27   ;B=1 írás kódja
  38.                                 ;C=27 rendszerváltozó száma (BORDER)
  39.                 LD D,0          ;változó új értéke
  40.                 EXOS 16         ;EXOS változó kezelése
  41.  
  42.                 CALL VID        ;egy videó szegmens igénylése
  43.                 JP NZ,HIBA      ;ha nem sikerült, akkor kilépés
  44.                 LD A,C          ;kapott szegmens számának
  45.                 LD (VIDS),A     ;letárolása
  46.                 OUT (0B3H),A    ;szegmens belapozása a 3. lapra
  47.  
  48.                
  49.                 LD DE,0         ;szegmensszám alsó
  50.                 RRA             ;két bitje
  51.                 RR D            ;lesz a videócím
  52.                 RRA             ;felsõ két
  53.                 RR D            ;bítje
  54.                 LD (VIDCIM1),DE ;ezzel adjuk majd meg
  55.                                 ;a pixel adatok helyét
  56.  
  57.                 LD HL,3F00H     ;a pixel adatok mögött
  58.                 ADD HL,DE       ;lesz a képernyõt leíró
  59.                 LD (LPTCIM),HL  ;sorparaméter tábla videó címe
  60.                 EXOS 24         ;szegmens igénylése
  61.                 JP NZ,HIBA      ;ha nem sikerült, akkor kilépés
  62.                 LD A,C          ;kapott szegmens számának
  63.                 LD (P1S),A      ;letárolása
  64.                 OUT (0B1H),A    ;és belapozása az 1. lapra
  65.                 EXOS 24         ;szegmens igénylése
  66.                 JP NZ,HIBA      ;ha nem sikerült, akkor kilépés
  67.                 LD A,C          ;kapott szegmens számának
  68.                 LD (P2S),A      ;letárolása
  69.                 OUT (0B2H),A    ;és belapozása a 2. lapra
  70.  
  71.                 LD HL,4000H     ;minden
  72.                 LD DE,4001H     ;kapott
  73.                 LD (HL),L       ;memória
  74.                 LD BC,0C000H    ;törlése
  75.                 LDIR
  76.  
  77.                 LD HL,LPT       ;sorparaméter tábla
  78.                 LD DE,0FF00H    ;másolása a videó
  79.                 LD BC,LPTH      ;szegmens végére
  80.                 LDIR
  81.                
  82.                 LD HL,(LPTCIM)  ;LPT videó címe
  83.                 LD B,4          ;4 bittel elforgatás
  84. LPTA:           SRL H
  85.                 RR L
  86.                 DJNZ LPTA
  87.                 LD A,L          ;alsó bájt
  88.                 OUT (82H),A     ;kiküldése NICK-nek
  89.                 LD A,H          ;felsõ 4 bit
  90.                 OR 0C0H         ;NICK futás engedélyezése,
  91.                                 ;és áttérés az új LPT-re
  92.                                 ;az aktuális képkocka végén
  93.                 OUT (83H),A     ;kiküldés NICK-nek
  94.        
  95.         ;készen áll a memória, és felépült a 320x200-as 4 színû képernyõ
  96.         ;kezdõdhet a fõprogram
  97.  
  98.  
  99.                 DI
  100.                 LD A,8          ;SPACE sorának
  101.                 OUT (0B5H),A    ;kijelõlése a billentyûzet mátrixban
  102. SPACE           IN A,(0B5H)     ;billentyûzet mátrix kijelölt sorának olvasása
  103.                 BIT 6,A         ;SPACE gomb lenyomva?
  104.                 JR NZ,SPACE     ;várakozás, ha nem
  105.                 JP HIBA         ;kilépés
  106.  
  107.  ;EP billentyûzetmátrix:
  108.  ;        b7    b6    b5    b4    b3    b2    b1    b0
  109.  ;Sor    80H   40H   20H   10H   08H   04H   02H   01H
  110.  ; 0   B.SH.     Z     X     V     C     B     \     N
  111.  ; 1    CTRL     A     S     F     D     G  LOCK     H
  112.  ; 2     TAB     W     E     T     R     Y     Q     U
  113.  ; 3     ESC     2     3     5     4     6     1     7
  114.  ; 4      F1    F2    F7    F5    F6    F3    F8    F4
  115.  ; 5         ERASE     ^     0     -     9           8
  116.  ; 6             ]     :     L     ;     K           J
  117.  ; 7     ALT ENTER   BAL  HOLD   FEL  JOBB    LE  STOP
  118.  ; 8     INS SPACE J.SH.     .     /     ,   DEL     M
  119.  ; 9                   [     P     @     0           I
  120.  
  121.  
  122. HIBA:           DI
  123.                 LD SP,100H      ;felhasználói veremmutató beállítása
  124.                 LD A,255        ;rendszerszegmens
  125.                 OUT (0B2H),A    ;2. lapra
  126.                 LD HL,HIBA
  127.                 LD (0BFF8H),HL  ;melegindítási cím beállítása
  128.                 LD HL,(0BFF4H)  ;EXOS LPT címe
  129.                 SET 6,H         ;konvertálás videócímmé
  130.                 LD B,4          ;4 bittel elforgatás
  131. ELPT:           SRL H
  132.                 RR L
  133.                 DJNZ ELPT
  134.                 LD A,L          ;alsó bájt
  135.                 OUT (82H),A     ;kiküldése NICK-nek
  136.                 LD A,H          ;felsõ 4 bit
  137.                 OR 0C0H         ;NICK futás engedélyezése,
  138.                                 ;és áttérés az új LPT-re
  139.                                 ;az aktuális képkocka végén
  140.                 OUT (83H),A     ;kiküldés NICK-nek
  141.                 LD A,0F5H       ;eredeti
  142.                 LD HL,1837H     ;EXOS IRQ rutin
  143.                 LD (38H),A      ;kezdetének
  144.                 LD (39H),HL     ;visszaállítása
  145.                                 ;arra az esetre, ha a 38H-ra
  146.                                 ;helyezett JP-vel átvettük volna
  147.                                 ;saját rutinnal az IRQ kezelést
  148.                
  149.                 LD C,40H        ;felhasználói RAM felszabadítása
  150.                 EXOS 0          ;rendszer reset hívása
  151.                 LD A,1          ;1-es ROM szegmens
  152.                 OUT (0B3H),A    ;3-as lapra
  153.                 LD A,6          ;6-os funkció=bejelentkezõ képernyõ
  154.                 JP 0C00DH       ;vezérlés átadása a ROM-nak, vagyis kilépés
  155.  
  156.         ;videószegmens igénylõ rutin
  157.  
  158. VID:            LD HL,VEGE      ;puffer terület
  159.                 LD (HL),0       ;lista elejének jelzése
  160. KER:            EXOS 24         ;szegmens igénylése
  161.                 JR Z,NAMIVAN    ;siker esetén szegmensszám vizsgálat
  162.                 CP 7FH          ;hibakód=a kiutalt szegmens a rendszerrel
  163.                                 ;megosztott közös használatú?
  164.                 JP NZ,HIBA      ;egyéb hiba esetén kilépés
  165. NAMIVAN:        EX AF,AF'       ;hibakód háttérbe
  166.                 LD A,C          ;kapott szegmens száma
  167.                 CP 0FCH         ;<0FCh?, azaz mint a legkisebb
  168.                                 ;videószegmens
  169.                 JR NC,NEMKER    ;kilépés hamár videó
  170.                                 ;szegmenst kaptunk
  171.                 INC HL          ;következõ puffercím
  172.                 LD (HL),C       ;szegmensszám letárolása
  173.                 JR KER          ;újabb szegmens igénylése
  174. NEMKER          PUSH BC         ;szegmensszám mentése
  175. VISSZA          LD C,(HL)       ;felesleges szegmens
  176.                 EXOS 25         ;felszabadítása
  177.                 DEC HL          ;elözõ puffercím
  178.                 JR Z,VISSZA     ;felszabadítás folytatása
  179.                                 ;amikor a lista elején lévõ 0-val hívjuk
  180.                                 ;a szegmens felszabadítása funkciót, akkor
  181.                                 ;hiba keletkezik, amely az NZ flag-gel kilép
  182.                                 ;a ciklusból (0=ROM, így nem lehet felszabadítani)
  183.                 EX AF,AF'       ;hibakód elõtérbe
  184.                 POP BC          ;kapott szegmensszám
  185.                 OR A            ;Z flag beállítása a hibakód alapján
  186.                                 ;NZ jelzi ha megosztott szegmenst kaptunk
  187.                 RET
  188.  
  189. VIDS            DB 0
  190. P1S             DB 0
  191. P2S             DB 0
  192. LPTCIM          DW 0
  193.  
  194.         ;NICK sorparaméter tábla (LPT)
  195.  
  196. LPT:        DB -200 ;200 sor
  197.             DB 32H  ;0 01 1 001 0
  198.                     ;VINT=0, nincs megszakítás
  199.                     ;Colour Mode=01, 4 szín mód
  200.                     ;VRES=1, teljes függõleges felbontás
  201.                     ;Video Mode=001, pixel grafikus mód
  202.                     ;Reload=0, még nincs vége az LPT-nek
  203.             DB 11   ;bal margó=11
  204.             DB 51   ;jobb margó=51
  205. VIDCIM1:    DW 0    ;elsõdleges videócím, pixel adatok kezdete
  206.             DW 0    ;másodlagos videócím, pixel grafikánál nem használt
  207. PALETTE:    DB 0,36,219,73,0,0,0,0 ;fekete, kék, sárga, piros (a nem használt színek feketék)
  208.  
  209.             DB -50,12H,63,0,0,0,0,0,0,0,0,0,0,0,0,0
  210.                ;50 keretszínû sor, ez határozza meg a also margó nagyságat,
  211.  
  212.             DB -3,16,63,0,0,0,0,0,0,0,0,0,0,0,0,0
  213.                ;3 fekete sor, a szinkronizáció kikapcsolva
  214.  
  215.             DB -4,16,6,63,0,0,0,0,0,0,0,0,0,0,0,0
  216.                ;4 sor, a szinkronizacio bekapcsolva
  217.  
  218.             DB -1,90H,63,32,0,0,0,0,0,0,0,0,0,0,0,0
  219.                ;1 sor, a szinkronizáció a sor felénél kikapcsol,
  220.                ;a NICK chip ennél a sornal ad megszakitást
  221.  
  222.             DB 252,12H,6,63,0,0,0,0,0,0,0,0,0,0,0,0
  223.                ;4 fekete sor
  224.  
  225.             DB -50,13H,63,0,0,0,0,0,0,0,0,0,0,0,0,0
  226.                ;50 keretszínû sor, ez határozza meg a felsõ margó nagyságát
  227.  
  228.                
  229. LPTH:           EQU $-LPT ;LPT hossza
  230. VEGE            EQU $     ;programkód vége, innentõl szabad terület
  231.                 END
  232.  
  233.  
  234.  

Az elején itt általános Z80 assemblerhez létre van hozva az EXOS macro, valamint adatként definiálva az EP fájlfejléc.
HEASS esetén így kell kezdeni:
Code: ZiLOG Z80 Assembler
  1.                 HEADER 5                ;5-ös típus, vagyis gépi kódú felhasználói program
  2.                 OBJECT filename.com ;lefordított program fájl neve
  3.                 ORG 0100H
  4.  
  5.                 ;program kezdete, 100H-ra töltödik be
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: Ferro73 on 2011.March.23. 05:29:21
Én meg az ASMEN-t ajánlom ha nemvagy biztos a rutinok müködésében,
Ennek is van EDITOR, forditó és Debugge? rész ahol a rutint, programrészt figyelheted lépésröl, lépésre vagy csak a végeredmént.
Hátránya  max 40-48Kb lehet az *.ASM fájl
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: geco on 2011.March.23. 08:59:24
Én a SJASM-ot ajánlom, hozzá a CONTextet Z80 assembly highligterrel, így nincs semmilyen memóriakorlát a forrás méretére :D, igaz ez mind PC-s tool, de nagyban megkönnyíti az ember életét, debugolni meg ott az EP128 debuggere, attól jobb, használhatóbb egy emulátorban sincs.
Csak annyi, hogy minden egyes 5-ös fejlécű programot a Zozo példájában leírt sorokkal kell kezdeni a ";program kezdete, 100H-ra töltödik be" sorig, meg természetesen a forrás végére betenni a VEGE címkét :)
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: Zozosoft on 2011.March.23. 09:04:43
Debugge? rész ahol a rutint, programrészt figyelheted lépésröl, lépésre vagy csak a végeredmént.
Erre manapság az ep128emu debuggere sokkal-sokkal-sokkal-sokkal-...  :ds_icon_cheesygrin: alkalmasabb!
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: geco on 2011.March.23. 14:08:47
bocsánat, sajtóhiba történt, EP128emu-t akartam írni én is,csak az emu lemaradt :D
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: szipucsu on 2011.March.23. 15:03:39
bocsánat, sajtóhiba történt, EP128emu-t akartam írni én is,csak az emu lemaradt :D
Nekem fel se tûnt, alapból arra gondoltam.
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: Ferro73 on 2011.March.23. 18:43:25
Erre manapság az ep128emu debuggere sokkal-sokkal-sokkal-sokkal-...  :ds_icon_cheesygrin: alkalmasabb!
Gondolod ?
Csináljak külön egy betöltö rész csak azért hogy teszteljen a rutint, ha nemjó inditsam újra a gépet /EMU-t/ modositsam a rutint forditsam le betöltöbe /5-ös fejléc/..... tisztára mikor TAPE: egységem volt
Akkor már ASMEN-ben röktön memoriába forditom és máris tesztelhetem ha nemjó akkor modositom a rutint az EDITOR-ban leforditom a memoriába, és még kise léptem a programból.
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: IstvanV on 2011.March.23. 19:48:41
Én a SJASM-ot ajánlom

Ez az assembler megtalálható a letöltéseknél (http://ep4ever.org/letoeltesek_downloads/pc_utils-t358.0.html) is az EPvideoconv csomagban, amely Linux verziót is tartalmaz, egy javítással (eredetileg lefagyott module/endmod használatakor). Hasznos tulajdonsága, hogy egy .lst kiterjesztésű file-ba disassembly listát készít az eredeti forráskódot címekkel és a lefordított gépi kód byte-jaival kiegészítve, ami debug célra használható.

Gondolod ?
Csináljak külön egy betöltö rész csak azért hogy teszteljen a rutint, ha nemjó inditsam újra a gépet /EMU-t/ modositsam a rutint forditsam le betöltöbe /5-ös fejléc/..... tisztára mikor TAPE: egységem volt

A debuggerben van L parancs (erről a wiki (http://wiki.enterpriseforever.com/index.php?title=EP128Emu_le%C3%ADr%C3%A1s#Monitor)-n található leírás), amellyel fejléc nélküli bináris file közvetlenül a memóriába tölthető, így elkerülhető az emulált gép újraindítása. :) Természetesen az új kódot le kell fordítani pl. SjASM-el és újra betölteni - ez azonban ismételt fordításnál csak fel + Enter billentyű a parancssorban, illetve újra Enter a monitorban valószínűleg már meglevő L parancson - viszont elkerülhető az ASMON lassúsága és korlátozásai. Rövid, néhány soros módosításra használható az A monitor parancs is.
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: Jubatian on 2011.March.24. 17:27:28
Ejha! Szép kis bevezetõ, köszönöm! Na, és úgy látom, akkor a Linuxom alatt se lesz nyûg a dolog, assembler, kazetta - emulátor (MrPrise - TAPir), aztán az audiokábelen már csoroghat is át a próba az asztal túlvégére, az EP hátujába! :) Háát, ha már van gép, szerintem nem fogok én emulálni, bár nem tudom. Már hozzászoktam, hogy nincsenek debuggereim, csak amit én lapátolok a kódba. Lényeg: Indulhat a játék! Köszi a segítséget!
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: Attus on 2011.March.24. 22:24:48
Valós gépen és nem emulátorban...
Én a MON -GEN párost használtam, mindent a MON-ban próbáltam ki elõször. Assembly rutinokat meg az asmon -ban, vagy a fenas -ban írtam, ezeket lefordított eredményét meg a MON-ba töltve futtattam.
Annál jobb debugger akkortájt nem volt, az asmon a nyomába sem érhet.
Rövidebb rutinkákat meg közvetlen hexa pötyogéssel illesztettem be.
A GEN is nagyon jó assembler, kicsit nehézkes, de nagytudású és nagyon passzol a MON -hoz. Az ed editoromat például azzal írtam.
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: IstvanV on 2011.April.03. 17:45:28
A fenti példa program kisebb módosításokkal, és kiegészítve IVIEW formátumú file választásával (ehhez a program beépített FILE bővítést használ) és megjelenítésével:
  [attachurl=#]
  [attachurl=#]
  [attachurl=#]
  [attachurl=#]
  [attachurl=#]
  [attachurl=#]
  [attachurl=#]
Az .s kiterjesztésű file-ok SjASM-el fordíthatók. Az .asm-ek átmeneti file-ok, amelyeket HEASS segítségével lehet .HEA formátumra konvertálni; ehhez előbb "TAB/DELETE TAB-POINTS" (F2,F2) is kell, mert egyébként a HEASS a forrásszöveget eltolja jobbra és nem ismeri fel a címkéket :oops: A konvertálás ezt követően a "FILE/CREATE", majd "CONV/ASC LOAD" használatával történik.
Az .s -> .asm konverzióhoz az "asmconv.sh" shell scriptet használtam, amely az UTF-8 formátumú ékezetes karaktereket HFONT-ra konvertálja, az IXL/IXH/IYL/IYH regisztereket átnevezi "I" nélküli változatra, a TAB karaktereket szóközökké alakítja, és LF -> CR-LF sorvégződés konverziót is végez, ha a bemeneti file unix formátumú.

A programmal megnyitható IVIEW kép csak 320x200 méretű, 4 színű, nem interlace módú, és fix palettájú lehet (-mode 1 -size 40 200 -palres 0 -scalemode 1 -quality 9 -outfmt 1).

Egy másik példa program:
  [attachurl=#]
  [attachurl=#]
  [attachurl=#]
Sok értelme ugyan nincs, de tartalmaz megszakítás kezelést, rajzolást, és kezdetleges hangot is.
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: Zozosoft on 2011.April.03. 19:05:52
Az .asm-ek átmeneti file-ok, amelyeket HEASS segítségével lehet .HEA formátumra konvertálni; ehhez elõbb "TAB/DELETE TAB-POINTS" (F2,F2) is kell, mert egyébként a HEASS a forrásszöveget eltolja jobbra és nem ismeri fel a címkéket :oops:
Én egy TAB pontot szoktam rakni az elsõ oszlopba, az is jó. Aztán el kell menteni a HEASS Setup-ot, és legközelebb már nem kell foglalkozni vele.


Quote
Az .s -> .asm konverzióhoz az "asmconv.sh" shell scriptet használtam, amely az UTF-8 formátumú éke
Ezt mivel lehet futtatni?
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: Ferro73 on 2011.April.03. 20:26:05

Ezt mivel lehet futtatni?
[/quote]
Olyan linuxos jellegü lehet
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: Attus on 2011.April.05. 17:40:45
Jó kis bash szkript, gondolom jólirányzott "sed" parancsokkal telitûzdelve a cserékhez.
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: lgb on 2011.December.03. 21:39:57
Nos, elkezdtem jatszani a gondolattal, hogy EP-re kene programoznom :) Kis backgound info rolam (remelem nem lesz unalmas): nem volt ugye EP-m, amikor kb 10 eve szereztem egyet, doksik alapjan elkezdtem irni egy emulatort (hogy PC elott ulve tudjak kiserletezni/fejleszteni), mert nem talaltam megfelelot, foleg nem olyat, ami Linux alatt normalisan menne. Ez el is jutott addig, hogy pl a WP mar ment benne (http://web.archive.org/web/20050205020248/http://nemesys.lgb.hu/screen.php   regi site-m egy maradvanya az archive.org segitsegevel, sajna a kepek kozul nem sok latszik mar), amde aztan se idom se energiam nem volt ra. Most, hogy visszatertem a temahoz, ujra megneztem az ep128emu-t, es orommel lattam, hogy kb mindent tud amire valaha is szuksegem lehet es remekul fut Linux alatt. Tehat emulator irasi probalkozasomat kb 10 ev utan feladtam :)

No, ez a bevezeto ahhoz kellett, hogy ravilagitsak: habar HW oldalrol van nemi elkepzelesem az EP-rol (eleve kellett az emulator irashoz, hogy megismerjek par dolgot az EP-rol, ideertve persze magat a Z80-at is), software oldalrol a tudasom a nullahoz konvergal (emulatoromnal csak azt csinaltam hogy netrol levadaszott ROM image-ekkel "megetettem" es addig programozgattam amig nem csinalt valamit aztan a kerdeses rom tartalomnak hala az emulalt EP). Tehat kvazi szuz vagyok a temaban. 10 perc keresgeles utan most irtam egy olyat, hogy 81h portot irogatom es vegtelen ciklusban igy szeeeeep effektet kaptam :) Tehat, az megvan, hogy 5-os tipusu fejlec, stb. De magarol az EXOS-rol pl semmit nem tudok. Van valami bevezeto jellegu iras, ami igy magyarzgatja el az EP-re fejlesztes menetet assembly-ben?

Pl konkretan most ez erdekelne: kellene nekem egy "szokasos" karakteres kepernyo, amit azonban en kozvetlenul irogatnek. Azonban ugye a Nick rugalmassaganak hala, ez maris sok kerdest vet fel: van valami lehetosegem arra, hogy tudjam: adott felbontasu karakteres kepernyo, a videoram egy fixed helyen es kesz, irhatok bele (gondolom pl grafikus stb modhoz biztos nincs, de en most elsore egy std karakteres dologra vagyok csak semmi faxni). Vagy nekem kell egy LPT-t felepiteni, video ram szegmenst foglalni, stb? Nincs erre valami pl EXOS funkcionalitas, hogy egyszeruen ugymond "kerjek egy kepernyot"? Hasonloan amator kerdes: ha nem kozvetlenul irkalnek a kepernyore, hogyan tudok pl egy karaktert mondjuk EXOS-al kiiratni a kepernyore, esetleg egy egesz sztringet? Olvasgattam az EXOS leirast, de igy teljesen elsore nem feltetlen tiszta nekem.

Koszi a turelmet :)
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: Zozosoft on 2011.December.03. 21:58:28
Áthoztam ide, mert már volt ilyen téma.
Itt lentebb találsz is példa programocskákat indulásnak, igaz ezekben grafikus képernyõrõl van szó.
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: Zozosoft on 2011.December.03. 22:17:18
Pl konkretan most ez erdekelne: kellene nekem egy "szokasos" karakteres kepernyo, amit azonban en kozvetlenul irogatnek. Azonban ugye a Nick rugalmassaganak hala, ez maris sok kerdest vet fel: van valami lehetosegem arra, hogy tudjam: adott felbontasu karakteres kepernyo, a videoram egy fixed helyen es kesz, irhatok bele (gondolom pl grafikus stb modhoz biztos nincs, de en most elsore egy std karakteres dologra vagyok csak semmi faxni). Vagy nekem kell egy LPT-t felepiteni, video ram szegmenst foglalni, stb? Nincs erre valami pl EXOS funkcionalitas, hogy egyszeruen ugymond "kerjek egy kepernyot"? Hasonloan amator kerdes: ha nem kozvetlenul irkalnek a kepernyore, hogyan tudok pl egy karaktert mondjuk EXOS-al kiiratni a kepernyore, esetleg egy egesz sztringet? Olvasgattam az EXOS leirast, de igy teljesen elsore nem feltetlen tiszta nekem.
Ha közvetlenül akarod írogatni, akkor a legjobb, ha csinálsz saját LPT-t, saját videómemóriával.
Ha elég egy sornyi is, akkor használhatod a Status sort is, ennek a címét a rendszerszegmensbõl lehet kiolvasni.

Ha van egy videólapod, akkor annak videómemória címét az EXOS 11/3 hívással (http://gafz.enterpriseforever.com/Dokumentacio/Konyvek/EXOS_2.1_technikal_information/exos/video/Ch3.html#ADDR) tudod lekérdezni a direkt kezeléshez, de ezzel vigyázni kell, mert egyes mûveletektõl (pl további csatornák nyitása, zárása) változhat.

Saját videó laphoz itt az anno Enterpressben közölt példaprogram. (http://ep128.hu/Ep_Konyv/Assembly/Tan1.txt) Van benne kiíratás is.
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: Zozosoft on 2011.December.03. 22:27:02
Lacika! Innen (http://ep128.hu/Ep_Konyv/Enterpress_Gepikod.htm) hiányzik még egy Haluska cikk, ami számok, szövegek kiírásáról szól. Itt a hozzátartozó ASM.
(Amúgy meg a szöveges részt érdemes lenne átnézni OCR hibák után kutatva, akad bõven  :oops: )
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: Lacika on 2011.December.03. 23:49:03
(Amúgy meg a szöveges részt érdemes lenne átnézni OCR hibák után kutatva, akad bõven  :oops: )
Sokat segítene a hibakeresésben, ha segítenél, hol keressem:  :oops:
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: Attus on 2011.December.04. 15:17:03
Ahogy az írásodat értelmezem, te nem szinte kizárólag "magasabb szintû" EXOS hívásokkal operáló progikon töröd a fejed, (exos hívásokkal képre írkálás, rajzolás stb.). A "fix" kép (LPT), memória környezet felépítéséhez (amiben garázdálkodni szándékozol amolyaan spectrum, c64 stílusban) azonban szinte kikerülhetetlen ezek használata.
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: IstvanV on 2011.December.04. 15:25:19
A "fix" kép (LPT), memória környezet felépítéséhez (amiben garázdálkodni szándékozol amolyaan spectrum, c64 stílusban) azonban szinte kikerülhetetlen ezek használata.

Szerencsére általában minimális EXOS használat is elég:
  - memória foglalás (EXOS 24), felszabadítás (EXOS 25)
  - melegindítási rutin írása (többnyire néhány soros) és a cím beállítása
  - file megnyitása, olvasása, bezárása (ha a program több file-ból áll)
  - EXOS változók írása/olvasása (BIAS állításához a beépített hangszóró engedélyezésének a megváltoztatása nélkül)
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: IstvanV on 2011.December.04. 16:38:11
Itt egy egyszerű program (SjASM PC-s Z80 assemblerrel fordítható), amely karakteres képernyőt állít be, és kiír egy üzenetet, majd a SPACE billentyűre vár, aminek a lenyomásakor kilép:

Code: ZiLOG Z80 Assembler
  1.         org   00f0h
  2.         defw  0500h, prg_end - 0100h, 0, 0, 0, 0, 0, 0
  3.  
  4.     macro exos n
  5.         rst   30h
  6.         defb  n
  7.     endm
  8.  
  9. dispw   equ     40
  10. disph   equ     25
  11.  
  12. main:
  13.         di
  14.         ld    sp, 0100h
  15.         ld    a, 0ffh
  16.         out   (0b2h), a
  17.         ld    hl, reset
  18.         ld    (0bff8h), hl
  19.         ei
  20.         ld    bc, 1:27                  ; BORD_VID
  21.         ld    d, 00100000b
  22.         exos  16
  23.         halt
  24.         halt
  25.         call  mem_alloc
  26.         call  lpt_init
  27.         ei
  28.         ld    hl, testmsg
  29.         ld    de, 1:2
  30.         call  printstr
  31. .l1:    ld    a, 8
  32.         di
  33.         out   (0b5h), a
  34.         in    a, (0b5h)
  35.         ei
  36.         and   40h
  37.         jr    nz, .l1
  38.         jp    reset
  39.  
  40. mem_alloc:
  41. .l1:    exos  24
  42.         or    a
  43.         jp    nz, reset
  44.         ld    a, c
  45.         cp    0fch
  46.         jr    c, .l1
  47.         ld    l, c
  48.         out   (0b3h), a
  49. .l2:    dec   l
  50.         ret   z
  51.         ld    c, l
  52.         exos  25
  53.         jr    .l2
  54.  
  55. lpt_init:
  56.         di
  57.         ld    hl, (0bff4h)
  58.         set   7, h
  59.         res   6, h
  60.         set   2, l
  61.         set   1, l
  62.         ld    a, (hl)
  63.         inc   l
  64.         ld    h, (hl)
  65.         ld    l, a
  66.         ld    (lpbdata + 6), hl
  67.         ld    de, lpt_begin
  68.         ld    hl, disp_begin & 3fffh
  69.         in    a, (0b3h)
  70.         rrca
  71.         rrca
  72.         and   0c0h
  73.         push  af
  74.         or    h
  75.         ld    h, a
  76.         ld    a, disph
  77. .l1:    ld    (lpbdata + 4), hl
  78.         ld    bc, dispw
  79.         add   hl, bc
  80.         push  hl
  81.         ld    hl, lpbdata
  82.         ld    c, 16
  83.         ldir
  84.         pop   hl
  85.         dec   a
  86.         jr    nz, .l1
  87.         ld    hl, lptborderblank
  88.         ld    bc, lptborderblank_end - lptborderblank
  89.         ldir
  90.         ld    hl, disp_begin
  91.         ld    de, disp_begin + 1
  92.         ld    bc, disph * dispw - 1
  93.         ld    (hl), ' '
  94.         ldir
  95.         pop   af
  96.         or    high (lpt_begin & 3fffh)
  97.         ld    l, low lpt_begin
  98.         ld    h, a
  99.  
  100. setlptaddr:
  101.         ld    a, 1ch
  102. .l1:    add   hl, hl
  103.         rla
  104.         jr    nc, .l1
  105.         ld    c, 82h
  106.         out   (c), h
  107.         out   (83h), a
  108.         ret
  109.  
  110. printstr:
  111.         push  hl
  112.         push  de
  113.         ld    e, d                      ; D = Y
  114.         ld    d, 0
  115.         ld    a, dispw
  116.         call  multDEbyAtoHL
  117.         ld    bc, disp_begin
  118.         pop   de                        ; E = X
  119.         ld    d, 0
  120.         add   hl, bc
  121.         add   hl, de
  122.         pop   de
  123. .l1:    ld    a, (de)
  124.         or    a
  125.         ret   z
  126.         ld    (hl), a
  127.         inc   de
  128.         inc   hl
  129.         jr    .l1
  130.  
  131. multDEbyAtoHL:
  132.         ld    hl, 0
  133.         add   a, a
  134.         jr    nc, .l1
  135.         ld    l, e
  136.         ld    h, d
  137.         add   hl, hl
  138. .l1:    add   a, a
  139.         jr    nc, .l2
  140.         add   hl, de
  141. .l2:    add   hl, hl
  142.         add   a, a
  143.         jr    nc, .l3
  144.         add   hl, de
  145. .l3:    add   hl, hl
  146.         add   a, a
  147.         jr    nc, .l4
  148.         add   hl, de
  149. .l4:    add   hl, hl
  150.         add   a, a
  151.         jr    nc, .l5
  152.         add   hl, de
  153. .l5:    add   hl, hl
  154.         add   a, a
  155.         jr    nc, .l6
  156.         add   hl, de
  157. .l6:    add   hl, hl
  158.         add   a, a
  159.         jr    nc, .l7
  160.         add   hl, de
  161. .l7:    add   hl, hl
  162.         ret   p
  163.         add   hl, de
  164.         ret
  165.  
  166. reset:
  167.         di
  168.         ld    sp, 4000h
  169.         ld    a, 0ffh
  170.         out   (0b2h), a
  171.         ld    hl, reset
  172.         ld    (0bff8h), hl
  173.         ld    bc, 1:27                  ; BORD_VID
  174.         ld    d, 00h
  175.         exos  16
  176.         ld    c, 40h
  177.         exos  0
  178.         ld    a, 01h
  179.         out   (0b3h), a
  180.         ld    a, 6
  181.         jp    0c00dh
  182.  
  183.  
  184. lpt_begin       equ     0f800h
  185. disp_begin      equ     0c000h
  186.  
  187. lpbdata:
  188.         defb  256 - 9, 08h, (63 - dispw) / 2, (63 + dispw) / 2
  189.         defw  0, 0
  190.         defb  00000000b, 10010010b, 00000000b, 01001001b
  191.         defb  0, 0, 0, 0
  192.  
  193. tborder         equ     (294 / 2) - (disph * 9 / 2)
  194. bborder         equ     (294 / 2) - ((disph * 9 + 1) / 2)
  195.  
  196. lptborderblank:
  197.         defb  256 - bborder, 82h, 63, 0,  0, 0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0
  198.         defb  256 - 3, 00h, 63, 0,  0, 0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0
  199.         defb  256 - 2, 00h, 6, 63,  0, 0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0
  200.         defb  256 - 1, 00h, 63, 32,  0, 0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0
  201.         defb  256 - 3, 00h, 63, 0,  0, 0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0
  202.         defb  256 - 9, 02h, 6, 63,  0, 0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0
  203.         defb  256 - tborder, 03h, 63, 0,  0, 0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0
  204. lptborderblank_end:
  205.  
  206. testmsg:
  207.         defm  "Enterprise"
  208.         defb  0
  209.  
  210. prg_end:

A program működésének a magyarázata:
  - először beállítja a veremmutatót, minden EXOS 5 fejlécű programot ezzel kell kezdeni, mert egyébként a veremmutató érvénytelen, és a program az első megszakításnál lefagy
  - belapozza a rendszerszegmenst (FFh) a 2. lapra, a program futása közben a 8000h-BFFFh területen mindig ez lesz látható
  - ha a program hosszabb lenne egy szegmensnél, akkor a második és a harmadik szegmens száma a BFFDh és BFFEh címeken lenne található (a rendszer nem lapozza be automatikusan)
  - beállítja a melegindítási címet (BFF8h), hogy a reset gomb lenyomására ne történjen hidegindítás
  - EXOS változó írása (EXOS 16) hívással beállítja a keretszínt
  - lefoglal egy video szegmenst az LPT-nek és a karakteres képernyőnek
  - létrehozza az LPT-t, törli a képernyőt, és beállítja az LPT címét a 82h/83h I/O portokon
  - kiír egy üzenetet a képernyő bal felső sarkába
  - a Space billentyű lenyomására vár (B5h port figyelése), és ha ez megtörténik, akkor a melegindítási rutinra ugrik

A memóriafoglalás:
  - ciklusban szegmenst foglal (EXOS 24) addig, amíg a száma FCh vagy nagyobb lesz (video szegmens); az EXOS a szegmenseket növekvő sorrendben foglalja le, tehát az esetleges video szegmensek csak minden más szegmens lefoglalása után kerülnek sorra
  - ha ez nem sikerül, akkor a melegindítási rutinra ugrik
  - egyébként a 3. lapra belapozza a video szegmenst, és minden más szegmenst felszabadít (EXOS 25)

A képernyő inicializálása:
  - az EXOS LPT címét a rendszerszegmensről kiolvassa (BFF4h), és ehhez képest +6 byte eltolással megtalálható az LPT-be írandó karakterkészlet cím
  - létrehozza az LPT-t (a karaktersoroknak megfelelő számú LPB + a keretek és a függőleges visszafutás)
  - a címeket NICK címekre konvertálja a szegmensszámnak megfelelően
  - feltölti a képernyőt szóköz karakterekkel
  - végül a 82h és 83h I/O portokon beállítja az LPT címét

Szöveg írása a képernyőre (E = X pozíció, D = Y pozíció, HL = szöveg címe, a szöveg C formátumú, azaz 00h karakter jelzi a végét):
  - kiszámítja a képernyő memória kezdőcímet, ami C000h + (D * szélesség) + E
  - a szöveget 00h karakterig másolja (nem ellenőrzi, hogy nem történik-e a képernyő területén kívülre írás)

Melegindítás:
  - beállítja a veremmutatót és belapozza a rendszerszegmenst a 2. lapra
  - átmenetileg visszaállítja a címet, hogy a reset gomb esetleges nagyon gyors újabb lenyomása (pl. érintkezési hiba miatt) ne eredményezzen hidegindítást (ez nem biztos, hogy a gyakorlatban hasznos)
  - visszaállítja a korábban EXOS változó írásával beállított keretszínt feketére
  - felszabadít minden lefoglalt memóriát (EXOS 0 C=40h jelzőbitekkel)
  - a 01h:C00Dh címre ugrik A=6 kóddal, ami a rendszer indításakor látható villogó Enterprise logót jeleníti meg (a RAM-ban található bővítők, RAMDISK, és EXOS változók nem vesznek el)
  - az LPT visszaállításával nem foglalkozik, mert azt a rendszer egyébként is megteszi, ahogy az esetleges csatornák bezárását is; csak a Reset gomb lenyomásakor szintén automatikusan helyreállítja a rendszer a 0030h-005Fh területet is
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: lgb on 2011.December.04. 20:52:53
Itt egy egyszerű program (SjASM PC-s Z80 assemblerrel fordítható), amely karakteres képernyőt állít be, és kiír egy üzenetet, majd a SPACE billentyűre vár, aminek a lenyomásakor kilép:
Koszi! Franko pelda volt. Azonban van ami nem vilagos nekem. Miert kell az, hogy ilyen reset szeru modon kilepni? Elnezest, ha hulyeseget irok, vagy hulyen fogalmazok, megprobalom leirni, mi nem vilagos nekem. Sajna mindig C64-es peldaval kell jonnom: ott betoltok egy programot, futtatom (itt eleve kulon nem is kell futtatni?), aztan visszakapom a vezerlest ha az kilep. Ugy, hogy ujra tudom futtatni ha akarom, megvizsgalhatom a memoriat stb. Itt viszont a billentyulenyomas utan nem kilep, hanem "resetel" hiszen ujra ott vagyok ahogy a gep bekapcsol amugy. Bocsanat, tudom, alapveto EP ismereti hianyossagaim vannak :)

Amugy nagyon erdekes ez az EP. Ehhez kepest a C64 az csak egy vas, sw tekinteteben kb nulla, van ugye basic interpreter meg valami kernal ami kb ahhoz kell h a basic menjen. De semmi meg csak hasonlo advanced dolog sincs, mint ami az EP-re jellemezo, tobbek kozott imho ennek koszonheto az, ami nekem itt uj es "komplexnek" elek meg, hogy nem csak annyi a dolog, miszerint kb minden hw elemet kezzel kell programoznom, "OS" (hmm kernal) az max alap funkciokra jo pl billentyuzet, disk I/O, de legtobb valamire valo program ugyis direktbe csinalja mintha nulla sw komponens lenne a C64-ben. Ezt csak azert irtam le, hogy ertheto legyen, miert fura nekem ez a szemlelet elsore :) Persze a mai korban se hw-t programozunk tobb esetben direktbe PC-n sem (legyen Windows, Linux, akarmi), nekem csak az uj, hogy a 8 bites korszakban is van olyan, ahol ilyesmivel talalkozik az ember. Cool. Csak meg kell ertenem :)
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: Zozosoft on 2011.December.04. 22:17:26
Az neked a furcsa, hogy van a gépnek operációs rendszere, a szó valódi értelmében.
Natívan magát az EXOS-t a villogó EP feliratig láthatod futni. (De eddig a pontig is ad több lehetõséget más, ROM-ba égetett programoknak, hogy átvegyék a vezérlést.)
Ezután mindig van (az EXOS könyv szóhasználatával élve) egy aktuális alkalmazói program. Ez induláskor valamelyik rendszerbõvítõ lesz, amelyik válaszol az EXOS hívására. Átlag gépen az IS-BASIC, ha nincs bent a cartridge, akkor pedig a WP.
Amikor pedig a betöltés egy 5-ös fejlécû programot talál, akkor az lesz az új alkalmazói program, amit 100H-tól tölt be, és indít el.
Az aktuális alkalmazói program kiváltsága a 0-ás lap szegmens használata az EXOS által használt pár tucat bájt kivételével. Ebbõl adódik, hogy amikor elindult egy új program, a régihez már nem lehet visszatérni, hiszen annak a 0-ás lapon lévõ adatai már felül lesznek írva. Így kilépni úgy lehet, ha meghívunk vagy betöltünk egy másik programot.
Ami meghívható program, és minden gépen egészen biztosan ott van az a WP. Viszont ezt meghívni nem túl felhasználóbarát lépés.
Másik verzió az, amit István programjában is láthatsz, hogy visszaadjuk annak a ROM rutinnak a vezérlést, amit az EXOS is használ amikor a rendszer indításakor végzett minden feladattal, azaz a bejelentkezõ képhez. Innen a felhasználó oda jut tovább, ahova egyébként szokott, ha a BASIC-be akkor oda, ha EPDOS-ba akkor oda, stb
Ez a "resetel" viszont nagyon nem igaz! A memória nem lesz törölve, a beállított rendszerváltozók, dátum, idõ, RAMDISK, betöltött rendszerbõvítõk mind-mind megmaradnak!

Amire te gondolsz C64 szerû végrehajtásként, azt IS-BASIC-ben elõ lehet adni, ALLOCATE, USR utasításokkal lehet gépi kódot bevinni, amit aztán meg lehet hívni, és visszatér. Bár az Asmon tud ilyen formára is fordítani, azért komolyabb feladatra nem igazán alkalmas :-) Lehet azt is, hogy ez az basicesgépikód rész foglal memóriát, oda betölti a komolyabb programkódot, meghívja, majd ha onnan visszatért, visszarendezi a memóriát a BASIC-nek, és visszatér. A korai gyári játék programokból sok készült ilyen módszerrel. De ha ZZZIP-el lefordítunk egy Basic programot az is ilyen lesz.
Annyi elõnye van, hogy a Basic által megnyitott csatornákat lehet használni be/kivitelhez.

Ill. ha fejlesztési szempontból érdekes ez az egész, akkor valamelyik Assembler Debugger részét lehet használni.
De manapság ott az ep128emu debuggere, az sokkal full extrásabb erre a feladatra!

És van még egy lehetõség meghívható-visszatérõ gépi kód futtatására ez a rendszerbõvítõ programforma, ez dönthet úgyis, hogy átveszi a vezérlést, és aktuális alkalmazói programmá válik, vagy elvégezvén a tevékenységét vissza is adhatja a vezérlését. Ha nem válik aktuális alkalmazói programmá, akkor az alapértelmezett csatorna funkciót használva be/kivitelre pl úgy írhat ki üzeneteket, hogy nem kell saját videolap megnyitásával foglalkozni. Pl erre az EXDOS parancsok, ahol az üzenetek a BASIC, vagy WP, vagy stb képernyõjén jelennek meg, és amikor billentyû válaszra vár (Pl Retry/Abort/Ignore), azt szintén ezek billentyûzethez meg nyitott csatornájáról olvassa be.

Ha elmentjük a 0-ás lap tartalmát, akkor egész bonyolult dolgokból is vissza lehet térni, pl erre az általam elkövetett Spectrum Emulátor ROM, ahol úgy lehet visszatérni pl a BASIC-be, hogy annak szempontjából csak egy melegindítás történt, a bent lévõ BASIC programok is megmaradnak.
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: lgb on 2011.December.04. 22:30:39
Az neked a furcsa, hogy van a gépnek operációs rendszere, a szó valódi értelmében.

Jol latod, es persze nem negativ ertelemben mondtam: ez nekem tetszik, csak teny, hogy igy egy ideig eltart mire igazan megertem :)

Amugy tudsz ajanlani olyan doksit (keresgettem, de pont ilyet nem leltem), ami kb ott indul, hogy nem akar Z80 assembly-t oktatni, EP HW-t se nagyon, csupan az assembly szintu fejlesztes finomsagait "oktatja" (a fent emlitett ket tema nelkul) kiemelve az EXOS dolgait, stb. Amit talaltam EXOS leirast az mar elegge feltetelezi, hogy tud az ember rola azert par dolgot ...

De koszi mindenkinek, odaig azert eljutottam, hogy irok egyszeru programokat, max jelenleg csunya, mert pl letiltom az interrupt-okat, aztan kb hw szinten csinalok amit akarok, es oda irok ahova akarok :) Nyilvan ez egyaltalan nem szep megoldas, de legalabb van sikerelmenyem, hogy latok futni az emulatoron valamit, amit en irtam.
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: Zozosoft on 2011.December.05. 10:07:13
Ezt (http://ep128.hu/Ep_Konyv/Gepi_kod.htm) olvastad már?
(http://ep128.hu/Ep_Konyv/Pic/Gepi_Kod_SM.jpg)
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: lgb on 2011.December.12. 07:47:07
Ezt (http://ep128.hu/Ep_Konyv/Gepi_kod.htm) olvastad már?

Koszi, folyamatban :) Par kerdesem azert meg lenne, ha van meg turelmetek hozzam:

* Akkor cross-platform (PC-n) valo fejleszteshez sjasm-ot ajanljatok? Talaltam en egy rakas Z80 assembler-t, azert kerdezem. Persze olyan kell, ami Linuxos verzioban is elerheto, az sjasm speciel ilyen.
* az elozo kerdesemhez, hogy miert nem tud egy program csak ugy "kilepni": mi van, ha egy zenelejatszot irnek mondjuk, de olyat, ami IRQ-ba epul be, hogy betoltes utan  hatterben zeneljen szepen. Ekkor persze valahogy csak ki kell lepnem, gondolom en ...

Title: Re: ASM EP-n - hogyan kezdjem?
Post by: Zozosoft on 2011.December.12. 09:42:21
* az elozo kerdesemhez, hogy miert nem tud egy program csak ugy "kilepni": mi van, ha egy zenelejatszot irnek mondjuk, de olyat, ami IRQ-ba epul be, hogy betoltes utan  hatterben zeneljen szepen. Ekkor persze valahogy csak ki kell lepnem, gondolom en ...
Erre a feladatra a rendszerbõvítõ formátum alkalmas, ami inicializáláskor beláncol egy saját periféria kezelõt, és annak a megszakítási rutinja végzi a zenélést.
A rendszerbõvítõ a beláncolás után visszaadja a vezérlést az EXOS-nak, ami meg az aktuálisan futó programnak, pl BASIC-nek.
A továbbiakban a bõvítõ felismerhet parancsokat, amivel a lejátszást lehet vezérelni.
Így mûködik az általam elkövetett Music Box Player is :-)
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: Tuby128 on 2012.February.07. 23:46:04
Tegnap olvasgattam az EXOS referencia könyvet és rengeteg olyan információt találtam, ami programírásra inspirált.
Ki akartam próbálni, hogy az 5-ös kódú Exos fejléccel fordított és file-ba mentett új felhasználói program valóban automatikusan elindul-e.
 Pár órámba tellett, mire felfrissítettem Z80-as ismereteimet (nagyon szépen köszönöm a könyvet Szipucsu!!!) írtam egy olyan rutint, ami kiolvassa a sorparaméter tábla elsõ sorának adatait, és belapozza az adatterülethez tartozó szegmenst, majd kiírja a programszámláló (PC) értékét a képernyõre hexa formában. Azt akartam tesztelni, hogy valóban a 0100h címtõl kezdõdik a programom.
 A PC adatának megszerzésére a Call majd POP utasítást használtam.

 Ekkor jöttem rá arra a Z80 hiányosságra, hogy pl. nincs relatív CALL utasítás. Egy gépi kódú progamot nem lehet úgy megírni, hogy bárhova teszem a memóriában, ugyanolyan jól mûködik. A JR utasítással a relatív ugrást még megoldja, de ha a program után elhelyezkedõ adatterületet akarom használni, akkor nem tudok rá hivatkozni, mert nem tudom az abszolút címét.
 Nincs olyan utasítás, amivel a programszámláló értékét ki tudom olvasni, sem olyan báziscím regiszter ami megmondaná merre vagyok. Adatok írásához/olvasásához pedig ez elengedhetetlen.

 Végül a referencia könyv alapján feltételezve, hogy 0100h címre fog kerülni a program, sikerült megbizonyosodnom, hogy valóban így van.

 Egy felvetõdött problémát nem sikerült megoldanom maradéktalanul, érdekelne ki hogyan oldotta volna meg:
Adott egy regiszter (HL) amiben van egy 16 bites szám. Szeretném kiírni hexidecimális alakban a négy számjegyet egy memóriacímtõl (DE) egymás után. Kérdés, hogy puszta Z80-as assembly utasítások használatával hogyan tehetem ezt meg?
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: szipucsu on 2012.February.08. 00:05:02
Szívesen a könyvet, te nagyobb hasznát veszed, mert amit itt írtál, abból semmit nem értettem. Én a könyvnek csak az elsõ oldalait olvastam ki, a sorparaméter tábla elsõ sorait nem, és szegmenst sem lapoztam be, legfeljebb a könyvbe lapoztam be(le).  :ds_icon_cheesygrin:
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: Zozosoft on 2012.February.08. 09:09:27
Ekkor jöttem rá arra a Z80 hiányosságra, hogy pl. nincs relatív CALL utasítás. Egy gépi kódú progamot nem lehet úgy megírni, hogy bárhova teszem a memóriában, ugyanolyan jól mûködik. A JR utasítással a relatív ugrást még megoldja, de ha a program után elhelyezkedõ adatterületet akarom használni, akkor nem tudok rá hivatkozni, mert nem tudom az abszolút címét.
 Nincs olyan utasítás, amivel a programszámláló értékét ki tudom olvasni, sem olyan báziscím regiszter ami megmondaná merre vagyok. Adatok írásához/olvasásához pedig ez elengedhetetlen.
:shock: :?: :?: :?:

Ezt nagyon nem értem! Erre valók a címkék az assemblerben! Te egyszer a program elején megmondod, hova teszed, a többi a fordító dolga.
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: geco on 2012.February.08. 09:22:40
Szerintem Tuby128 arra gondolt, hogy befordítva bárhová betöltve teljesen jól működne a kód. Ha a kód számolná a betöltési címhez képest az CALL ugrási címkéit, és helyettesítené be, talán így megoldható, de akkor ezt a program indulásakor egy plusz kóddal kéne elvégezni, és az összes CALL ugrási címét helyettesíteni. Nagyban megnőne a kód.

HL értékét fel kell bontani alsó, és felső byte-ra, majd 30h-ht hozzáadni, így a karakteres képernyőre egyből kiírható az érték, ja, figyelni kell hogyha betű, akkor nem 30h-at, hanem 37h-t kell hozzáadni.
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: lgb on 2012.February.08. 09:26:46
:shock: :?: :?: :?:

Ezt nagyon nem értem! Erre valók a címkék az assemblerben! Te egyszer a program elején megmondod, hova teszed, a többi a fordító dolga.

Szerintem o arra gondolt, hogy a mar _leforditott_ cuccot akarja mas-mas cimre betolteni. Ezt hivjak (legalabbis egyes korokben) PIC kodnak (Position Independent Code). Ez amugy a maskeppen "fejlettnek" mondott x86-on is problema, egy regisztert kvazi el kell pazarolnod, hogy az adatterulet cimet ott tarold is igy relativen legyen cimezheto (mert ugye nem csak a PC-relativ CALL is a kerdeses: mi van a hasznalt adatterulettel?!). Mondjuk ez imho Z80-on is menne, bar ott (is) ervagas hogy egy regiszter megy a levelesbe a PIC jelleg miatt. Es nem is biztos, hogy van ertelme, hogy ugyanazt a kesz kodot be lehet tolteni nemi loader-rel kulonbozo PC-kre is, es az adat is lehet mashol stb.

Ez "komolyabb" (pl multitask miegymas) OS-eknel felmerulo kerdes meg 8 bites gepeken is, pl C64 viszonylataban alkottak meg erre az o65 nevu formatumot ami relokacios tablakkal rendelkezik, es a loader feladata a megjelolt program/adat byte-ok modositasa a betoltesi cim fuggvenyeben, en jatszottam ilyenekkel a kis prototype OS-semmel C64 DTV-n. De amugy "normal" kornyezetben (gondolom EP, EXOS) nem biztos, hogy megeri azt a macerat ami jar ezzel ...
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: Zozosoft on 2012.February.08. 09:30:40
Szerintem o arra gondolt, hogy a mar _leforditott_ cuccot akarja mas-mas cimre betolteni.
És minek akar ilyet csinálni? Egyébként erre van kitalálva a relokálható fájlformátum az EXOS-ban.
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: geco on 2012.February.08. 09:31:11
valahogy így, remélem nem szúrtam el semmit:
Code: [Select]
ld    a,h
call  conver1

ld    a,h
call  convert

ld    a,l
call  conver1

ld    a,l
jp    convert

conver1 rrca
rrca
rrca
rrca
convert and   0fh
add   30h
        cp    3ah
jr    c,number1
add   07h
number1 ld    (de),a
inc   de
ret
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: Attus on 2012.February.08. 09:39:31
Ekkor jöttem rá arra a Z80 hiányosságra, hogy pl. nincs relatív CALL utasítás. Egy gépi kódú progamot nem lehet úgy megírni, hogy bárhova teszem a memóriában, ugyanolyan jól mûködik. A JR utasítással a relatív ugrást még megoldja, de ha a program után elhelyezkedõ adatterületet akarom használni, akkor nem tudok rá hivatkozni, mert nem tudom az abszolút címét.
 Nincs olyan utasítás, amivel a programszámláló értékét ki tudom olvasni, sem olyan báziscím regiszter ami megmondaná merre vagyok. Adatok írásához/olvasásához pedig ez elengedhetetlen.


Persze, hogy megoldható mindez egy kis ötletességgel.
A verem mindig megmutatja, hogy merre vagy.
Egy egyszerú pop push párral már benne is van az a cím a regiszteredbe, ahova majd  a call ból visszatérsz a ret -tel.
Azonkívül a call utasítás operandusa is megváltoztatható, ha írható memóriában lépked a proci.
Ha meg nem, akkor is lehet vele számolni, benyomni az értéket a stackba és annyi.
 :)
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: lgb on 2012.February.08. 09:59:41
És minek akar ilyet csinálni? Egyébként erre van kitalálva a relokálható fájlformátum az EXOS-ban.

Azt nem tudom, hogy minek akar, en csak valaszoltam ra, hogy van ilyen amugy :) Azt persze nem tudtam, hogy EXOS-ban van hasonlo, de nem is csoda: hw-n felul EXOS-sal ismerkedesem csak folyamatban levo project eppen :)
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: Tuby128 on 2012.February.08. 16:31:11
Attus!

 Azért nem jó a CALL utasítás, mert ha nem tudod hol tartózkodsz a memóriában akkor hova adod ki az ugrás címét? Az a baj a CALL-lal, hogy nincs relatív párja.

 LGB nem érzem azt, hogy pocsékolás lenne egy regisztert elhasználni arra, hogy megmutassa a báziscímet. Én inkább azt hívnám pocsékolásnak, hogy egy kód csak egy adott helyrõl képes elindulni. Ettõl lesz egy SW erõsen op rendszer specifiukus, és nehezen lehet átvinni máshová. A relatív ugrás ráadásul még gyorsabb és kevesebb helyet igényel, mert egy elõjeles byte-tal tudod megmondani mennyit ugorjon, nem pedig egy 16 bites abszolút címmel. Processzorórajeleket lehet megtakarítani.

Mindenki:
Már a 80-as évek szakirodalmai is kihangsúlyozták, hogy igenis a legjobb gépi kódú program az, amely a memória bármely pontjára elhelyezve problémamentesen le tud futni. Mind az 80x86-os mind pedig a Motorola 68 processzorcsalád tartalmazott olyan lehetõségeket, amely ezt az elvet támogatták.

(Forrás: Michael Andrews: Mikroprocesszorok és illesztõegységek, Mûszaki Könyvkiadó 1985)

 Persze hozzáteszem, hogy ott az operációs rendszer volt az úr, továbbá a proceszor nagyobb címterületet érhetett el, és mivel egyszerre több szoftver futott nem mindegy, hova kerül a program.

 (Gondolatjáték: Megírok egy assembly kódot 1000h címtõl, ami a képernyõre ír. Megírok egy másikat 2000h címtõl, ami a hangot ad. Eladom valakinek a rutint egy lemezen, de a forráskódot nem mellékelem. A vevõ egyszerre akarná a két szoftvert használni. Kiderül, hogy az elsõ kód hosszabb mint 1000h (tehát belenyúlik a 2000h-s címterületbe), ezért nem lehet a kettõt egyszerre a memóriába tenni. Ezt meg lehetne oldani lapozgatással, de ha mind a két kódra egyfolytában szükség van párhuzamosan, akkor rengeteg idõt elvesz a lapozás plusz a 0.LAP-ot nem tanácsos cserélgetni. Pozíciófüggetlen kód esetén ez nem jelentett volna gondot.)

A Z80-at tudom nem erre tervezték, a maga 4MHz-es órajelével örülünk ha egy feladatot el tud látni. Ezek a kérdések akkor merültek fel bennem, amikor kitaláltam, hogy gondolatban továbbfejleszteném a Z80-at mondjuk 200Mhz-re és további extra utasítások kerülnének bele, és a teljes 4MB-os memóriatartományt meg tudná címezni egyedül.

Title: Re: ASM EP-n - hogyan kezdjem?
Post by: IstvanV on 2012.February.08. 18:29:26
LGB nem érzem azt, hogy pocsékolás lenne egy regisztert elhasználni arra, hogy megmutassa a báziscímet. Én inkább azt hívnám pocsékolásnak, hogy egy kód csak egy adott helyrõl képes elindulni. Ettõl lesz egy SW erõsen op rendszer specifiukus, és nehezen lehet átvinni máshová.

Ennek EP-n általában kevés jelentősége van, legfeljebb a rendszerbővítőknél fontos, amik áthelyezhető formátumba is fordíthatók.
PC-n is csak a .dll (Windows) és .so (Unix) file-ok áthelyezhetők - illetve ezek közül is csak az utóbbi valódi pozíció független kód 32 bites x86 rendszeren, a programok fix címre fordítódnak (de ez nem probléma, mert az operációs rendszer mindnek külön virtuális címterületet biztosít).

Quote
Processzorórajeleket lehet megtakarítani.

Csak akkor, ha a relatív ugrás nem történik meg. Az utasítások futásideje (memória várakozás nélkül):
  - JP (mindig): 10 ciklus
  - JR (nem teljesül a feltétel): 7 ciklus
  - JR (az ugrás megtörténik): 12 ciklus
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: IstvanV on 2012.February.08. 18:36:31
Ez amugy a maskeppen "fejlettnek" mondott x86-on is problema

A 64 bites módban már nem, ha jól tudom. x86_64-en már használható RIP-relatív címzés.
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: Attus on 2012.February.08. 21:21:20
Attus!

Azért nem jó a CALL utasítás, mert ha nem tudod hol tartózkodsz a memóriában akkor hova adod ki az ugrás címét? Az a baj a CALL-lal, hogy nincs relatív párja.

Értem én, hogy mit hiányolsz, de programozástechnikailag megoldható a relatív call is, meg is oldották már rengetegszer.
Igaz kicsit körülményesen,  hardveresen tényleg kényelmesebb és gyorsabb lenne. Erre persze igen ritkán van szükség. A relokációt akár a program saját maga is eltudja végezni saját magán, mielõtt elkezdi végrehajtani, ha írható memóriában fut.

Hogy hol tartózkodsz megtudható a PC regiszterbõl, hisz arra lett kitalálva, hogy azt tartalmazza. Mondjuk call egy ismert fix memória részre, ahol mondjuk ez van:
ex (sp), hl
jp (hl)

És máris számolhatsz az értékkel a programod folytatásában, stackban meg ott a mentett hl, az sem vész el.
Ha meg az ix -et használod erre, akkor a relatívitás már egybõl adja magát.

Nekem pont ezek a csavarok tetszettek nagyon hajdanán.

De hát ez csak egy Z80...
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: lgb on 2012.February.09. 09:19:41
A 64 bites módban már nem, ha jól tudom. x86_64-en már használható RIP-relatív címzés.


Na ja, de x86-rol beszeltem, az alatt a 32 bitet ertem en legalabbis :) Amugy is a 32 bites x86 ISA az ugye meg a 8088, sot a 8080-ra nyulik vissza (ilyen modon kozos ose a Z80-al), es egy ilyen CPU-hoz kepest allatira elavult, rengeteg minden kell a kompatibilitas fenntartasahoz, millionyi tranzisztor csak arra van, amit mas fejlett RISC-nel lesz*rnak es elfogadjak: ez igy mux (pl hogy egy opcode esetleg ELOBB hajtodik vegre mint egy masik, annak ellenere hogy a kodban forditott a sorrend: ennek oka a pipeline-ok hosszusaga, x86-on ennek megelozese eleg sok ganyolast kivan, mivel belulrol amugy az is "RISC", csak user fele nem mutatja). Raadasul 64 bites modban van eleg regiszter is, 32 bites modban pl az adat offset-re fixen lefoglalt regiszter PIC kod eseten eleg komoly ervagas, mert nincs annyira sok regisztere mint egy klasszikus RISC masinerianak.
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: lgb on 2012.February.09. 09:34:38
Ennek EP-n általában kevés jelentősége van, legfeljebb a rendszerbővítőknél fontos, amik áthelyezhető formátumba is fordíthatók.
PC-n is csak a .dll (Windows) és .so (Unix) file-ok áthelyezhetők - illetve ezek közül is csak az utóbbi valódi pozíció független kód 32 bites x86 rendszeren, a programok fix címre fordítódnak (de ez nem probléma, mert az operációs rendszer mindnek külön virtuális címterületet biztosít).

Csak akkor, ha a relatív ugrás nem történik meg. Az utasítások futásideje (memória várakozás nélkül):
  - JP (mindig): 10 ciklus
  - JR (nem teljesül a feltétel): 7 ciklus
  - JR (az ugrás megtörténik): 12 ciklus


A windows DLL az valojaban amugy a UNIX-okbol ismert COFF formatum, megfejelve egy EXE fejleccel :) Vagy hasonlo. Amugy erre irtam, hogy meg egy "modernnek mondott" 32 bites x86-on is merheto telejsitmenycsokkenest okoz az, hogy egy regisztert "elpazarolsz" mert PIC kodot forditasz (lasd pl gcc -fPIC kapcsolojat, es errol valo ertekezest benchmark-okban a kulonbozo ISA-k kapcsan).

De amugy igazad van, neha ettol ez meg fontos, es "be kell vallalni" a regiszter "elpazarlasat" (elpazarlas: masra hasznalhato lenne, igy kevesebb "szabad" regisztered van, tobb dolgot kell memoriaba lepakolni: ergo, valamivel lassabb lesz. Egy modern valodi "RISC" procin ez nem olyan nagy gond, mivel van regiszter dogivel).

Nem erzem ugy, hogy egy EP specifikus programnal ez annyira lenyeh, ha "szabalyosan" EXOS-al mux stb, azzal toltodik be,miegymas, akkor kb adott hova lehet tenni. Viszont azonnal igazad van, ha ennel tobbet akarsz, mondjuk Z80 peldat nem tudok sajat munkaimbol hozni, de 6502 (es compatible) eseten en csinaltam olyat hogy a kod maga legyen teljesen platform fuggetlen (ha I/O, kepernyore iras, barmi van, azt kvazi syscall-kent hasznalt BRK csinalja): ekkor ugyanaz a binaris kod futhat barmilyen 6502 (v compatible) alapu gepen, ha ott kesz van hozza a "syscall interface" (OS-nek nem hivnam, mert ahhoz nem eleg fejlett meg), nyilvan itt relokacio is van (nem lehet tudni h a target gep memoriaszervezese milyen: hol van RAM, stb). Amde en ezt pl nem PIC koddal oldottam meg, hanem az o65 nevu formatummal, amiben relokacios tablak vannak, hogy kb milyen cimen kell pl egy byte-ot modositani. Ja, es o65-nek van symbol tablaja is stb, az mas kerdes h en nem hasznalom jelenleg, lasd BRK-s trukk.

Lehet ilyet is, de nem hiszem hogy megeri annyira, ha egy adott hw "gyari" OS-e ala akarsz tolni dolgokat.

A kulon virtualis cimterulet egy modern OS eseten igaz, amde nem vonatkozik lib-ekre: hiszen annak linkelodnie kell ugye a programodhoz pl. Szoval itt kellhet a PIC. Nyilvan ha irsz egy programot ami kiirja "hello world" az pl Linux alatt nem PIC kod, tekintve hogy a process sajat virtualis cimteruletet lat, es ugyanaz a "memoriakiosztas" a process szemszogebol legalabb. Viszont van eset, amikor ez nem eleg, lasd pl lib-ek esete.
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: Tuby128 on 2012.February.12. 08:01:59
Hogy tudom rávenni az 1.5 Asmont, hogy fordítsa le a kódomat 0066H címre? Azt írja már az elsõ utasításnál, hogy Memory overwrite. De én akkor is oda akarom tenni.
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: Attus on 2012.February.12. 17:44:34
Csodálkozom.
Ezt nem tudja az asmon?

Én a gen -t használtam általában, azzal nincs ilyen gond. Kopasz magnós rendszerrel is anno. Majd floppyssal is.
Áthelyezhetõ cuccost is csináltam vele, én a komolyabb dolgokhoz azt használtam, Spectrum átíráshoz és egyszerûbb nyúlfarknyi dolgokhoz használtam csak az asmon assemblerét. (A HoH négyszínûsítéséhez is a gen -hez nyúltam)
Debuggolni meg mindig a mon -t, az asmont sose.
 
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: Zozosoft on 2012.February.12. 18:08:31
Ezt nem tudja az asmon?
Tudja, csak közvetlenül a RAM-ba nem enged olyan alacsonyan, hogy tönkre ne vágd a rendszert.
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: Tuby128 on 2012.February.13. 02:25:53
Akkor hogyan tudom megoldani, hogy a cimkék arra a területre szóljanak?
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: geco on 2012.February.13. 09:27:33
Memory assembly NO-val próbáld, szerintem úgy befordítja a kódot.
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: Tuby128 on 2012.February.13. 10:13:58
Persze, akkor lefordítja, de hova kerül a gépi kód?
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: geco on 2012.February.13. 11:37:54
Persze, akkor lefordítja, de hova kerül a gépi kód?
Ha nem állítottál be file-nevet, akkor sztem a DUMMY-ba :D
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: geco on 2012.February.13. 11:48:54
fordítsd le így, egy file-ba, utána az EP128emu debuggerébe be is töltheted, és tesztelheted:
l "file név" 0 hová
;cím                      ahonnan szeretnéd futtatni a programot
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: lgb on 2012.October.01. 12:29:23
Eloszor is koszi Zozo-nak a masik topic-ban az 5-os fejlecben a meret ertelmezese problemat elharitottam :)

Az ujabb - megintcsak eleg amator - kerdesem (amit inkabb ebbe a topic-ba irok, jobban ide illik szerintem): hogyan tudok egy karaktert es vagy stringet megjeleniteni a kepernyon? Jelen esetben maradnek az EXOS-on at valo mukodesnel, semmi direkt videoram iras, meg hasonlo, ha lehetseges. A doksikbol ezt tudtam kiollozni:

LD A, 0x66 ; 0x66 csatorna
LD B, ... ; a karakter
EXOS 7

Ezzel az a baj, hogy semmi nem jelenik meg ... Ehhez kene elotte vmi csatorna nyitas, vagy barmi? En azt vettem ki a leirasokbol, hogy a 0x66-os csatorna az "standard", a peldaban is hasznaljak, semmifele megnyitas stb nincs elotte.

http://ep128.hu/Ep_Konyv/Gepi_kod.htm

Az infot innen banyasztami ki, EXOS 7-es funkciorol szolo ertekezes.

Gondolom egy string pl ertelmesebben megjelenitheto a 8-as funkcioval, hasonloan ha karaktert akarok beolvasni, akkor 5-os funkcio (csak itt a 0x69 csatorna kell)? Lehet, nagy a zavar a fejemben, hogy kell hasznalni ezeket a csatornakat, de a leirasokban szerepel az "alapertelmezetten nyitott csatorna" ezert gondoltam ez eleg. Amde semmi nem jelenik meg kiirasnal megse, az idezett muben levo peldakra sem (igaz en nem BASIC-bol hivom ugye ...).
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: Zozosoft on 2012.October.01. 12:52:47
Ehhez kene elotte vmi csatorna nyitas, vagy barmi? En azt vettem ki a leirasokbol, hogy a 0x66-os csatorna az "standard", a peldaban is hasznaljak, semmifele megnyitas stb nincs elotte.
Igen, kell megnyitás. Ott a példákban azért standard, mert BASIC alatt futnak a példák, ahol a BASIC alatt már eleve meg van nyitva.
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: endi on 2012.October.01. 19:09:52
ismét tanácsolnám az EP Plusz használatát asm tanuláshoz...
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: lgb on 2012.October.01. 22:21:26
ismét tanácsolnám az EP Plusz használatát asm tanuláshoz...

Elnezest a tudatlansagomert, de mi az az EP Plusz? :) Amugy itt kulon kene valasztani, hogy maga a Z80 assembly, EP specifikus hw ismeretek, vagy EP specifikus sw. Nekem ez utobbival van gondom.

Olyat csinaltam mar hogy kvazi az EXOS ROM0-t lecserelem emulatorban, enyem az egesz hw, hurra. Csak ugye ez nem tul realisztikus egy valodi EP-ben meg nem is tul user friendly :) Ezert szertnek nemileg normalisabb dolgokat alkotni.

Azonban meg mindig tanacstalan vagyok, allati bonyolultnak tunik szamomra hogy egy sima karakteres kepernyot akarok, es kiirni ra szoveget. Sehogy nem jon ossze, pedig napok ota szenvedek vele, a doksik/konyvek meg semmit nem ernek, mert kb az EXOS visszafejteseig mindenbe belemennek csak egyetlen normalis "Hello world" programot nem mellekelnek, ami siman csak annyi, hogy 5-os fejlecu  program karakteres kepernyore kipakol vmit. Azert en ezt nagy hianyossagnak erzem, hiszen a "Hello world" tipusu program mindenhol az elso szokott lenni amit leirnak, es amibol az ember ugye kiindul. Ilyet meg sehol nem talaltam viszont.

Amit eddig probaltam: EXOS valtozok beallit, video: csatorna megnyitasa, 11-es exos funkcio/func=1, aztan exos 7, karakterkiiras a csatornara. Az eredmeny vagy fekete kepernyo, vagy kb 2-3 percenkent valtozo fekete/kek csik kombinacio az emulatorbol nezve.

Asszem' inkabb maradok a hw kozeli programozasnal, nekem ez az EXOS felfoghatatlannak tunik :) Max letiltom az interrupt-otkat ele pakolok nemi 5-os fejlecet stb, igy legalabb betoltheto, csak ugye agyonvagja az exos-ot, ramdisk-et miegymast: nem tul szep :(
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: Zozosoft on 2012.October.01. 22:52:03
Amit eddig probaltam: EXOS valtozok beallit, video: csatorna megnyitasa, 11-es exos funkcio/func=1, aztan exos 7, karakterkiiras a csatornara. Az eredmeny vagy fekete kepernyo, vagy kb 2-3 percenkent valtozo fekete/kek csik kombinacio az emulatorbol nezve.
Hmmm, stack pointert beállítottad a program elején? (Általában LD SP,100H-val szokás kezdeni.)

De ha akarod összerakok neked Hello Word-ot :-)
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: Zozosoft on 2012.October.01. 22:58:43
Ezt: http://www.ep128.hu/Ep_Konyv/Assembly/Tan3.txt (http://www.ep128.hu/Ep_Konyv/Assembly/Tan3.txt)
Vagy ezt: http://www.ep128.hu/Ep_Konyv/Assembly/Tan4.txt (http://www.ep128.hu/Ep_Konyv/Assembly/Tan4.txt)
érdemes tanulmányoznod.
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: lgb on 2012.October.01. 22:59:10
Hmmm, stack pointert beállítottad a program elején? (Általában LD SP,100H-val szokás kezdeni.)

De ha akarod összerakok neked Hello Word-ot :-)

Beallitottam, igen. Pont azzel is kezdtem :) Igaz nem 100h, hanem a program altal hasznalt memoriaterulet felett hagytam +512byte-ot es oda, de az egesz program belefer 16K (-100h)-ba, tehat gondolom ez nem gond (amugy azert kiprobaltam 100h-val is, uaz, azert akartam nem oda tenni, mivel ott kevesebb hely van azert, es mivel ugye sdcc-t akartam volna rabirni h lehessen C-ben irogatni, kicsit intenzivebb stack hasznalat varhato). Btw jelen esetben  meg a crt0-t simogatom, hogy a C runtime-nak legyen mar megnyitott kepernyoje amivel egy szem EXOS call-al irhatna pl.

Jo, hat ha van kedved ilyet irni, nem tartalak vissza :) A lenyeg annyi, hogy most tenyleg szeretnek EXOS-osan csinalni mindent szepen. Nyilvan letrehozhatnek sajat LPT-t, talalomra kivalaszthatnek barmi memoriat, hogy az az enyem stb, csak ez ugye .... nem szep :)
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: lgb on 2012.October.01. 23:56:40
Hmmm, stack pointert beállítottad a program elején? (Általában LD SP,100H-val szokás kezdeni.)

De ha akarod összerakok neked Hello Word-ot :-)

Nah, asszem megvan: az exos 11-nel hulye ertekeket adtam, es/vagy exos 1-es es nem 2-es funkcioval nyitottam a csatit a video:-hoz. Nem tudom melyik volt a gond, esetleg mindketto, de most mux! A c-ben irt kodom sdcc-vel forditva a kore irt "loaderemmel" mukodni latszik!

Csattolom a crt0.s-t ("loader") ha valakit erdekel, es/vagy esetleg van valami megjegyzese, amivel jobba teheto. A fura syntax azert, mert az sdcc assemblernek ez kell. Ha a _main (az a C main() fuggveny) visszater idiota keret "effektet" jatszok h latszodjon, vege a program futasanak.
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: geco 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
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: lgb 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.
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: Z80System 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ő ?
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: geco on 2014.August.01. 10:17:38
Sajnos nem tudok segíteni, én v0.39g6 -t használok.
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: Zozosoft 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ó.
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: Zozosoft 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.
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: Z80System 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 ?
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: DrPrery 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...
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: sanyike 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
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: geco 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 :)
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: sanyike 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?
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: geco 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
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: sanyike on 2015.December.23. 23:42:54
Igen, 4000h-IG kinullázta, de az adatokat nem írta be utána, ... konkrétan eltűntek :-)
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: sanyike 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...
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: geco 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
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: Zozosoft on 2015.December.25. 09:53:01
Ez egy bazi nagy 5-ös fejlécü program? Ha igen akkor aktuális lehet az Enterpressböl "amikor az Exos nem osztott lapot" cimü Haluska cikk. Lényeg programindulása után be kell lapozni a user szegmenseket.

De ha amugy nagy üresség lenne elótte, akkor célszerübb fájlból betölteni egy lefoglalt szegmensbe.
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: sanyike on 2015.December.25. 19:20:12
Ez egy bazi nagy 5-ös fejlécü program?

Igen, egy kicsit elszálltam :-);

a sprite irányonként 14 frame-ből áll, asszem ezt megfelezem majd, nem sok értelme van... azon kívül, hogy rengeteg helyet foglal.

A Haluska cikk segített, köszönöm !

Ilyen lett:
(egy kicsit villog, de működik és öröm van :-) )

[attachurl=1]
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: ergoGnomik on 2015.December.25. 20:19:29
a sprite irányonként 14 frame-ből áll, asszem ezt megfelezem majd, nem sok értelme van... azon kívül, hogy rengeteg helyet foglal.
"Felezd meg" mégegyszer azzal, hogy az egyik irányból a másikat tükrözéssel állítod elő.
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: sanyike on 2015.December.25. 21:11:59
Az első verzió valós időben tükrözött, de sajnos rendkívül lassú volt.
Meglehet, a kód nem volt a túl optimális :-), mindenesetre feladtam...

Title: Re: ASM EP-n - hogyan kezdjem?
Post by: ergoGnomik on 2015.December.25. 21:45:07
Nem a futás közben gondoltam, hanem az inicializálás során. Ott majdnem mindegy milyen gyors, inkább a méretre érdemes optimalizálni. Persze értelmes határok között.
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: sanyike on 2015.December.25. 22:21:32
Nem a futás közben gondoltam, hanem az inicializálás során.

Ez nem teljesen világos.
Az átfordítás számítás igényes, ami időbe kerül... vagy nem jól gondolom  :-/ ?
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: ergoGnomik on 2015.December.25. 23:04:41
Természetesen időigényes, csak nem mindegy mikor fordítod rá az időt. Ha a játék közben végzed, amikor már irányítás alatt mozognia kell a figurának és a program többi játékmechanikai elemének is működnie kell, akkor kevesebb idő jut másra. Ha a program indulása után csinálod, akkor igaz hogy kis késéssel fog a játékos odáig jutni hogy ténylegesen játszhasson, de azt az időt amit a tükrözésre fordítanál felhasználhatod másra, például háttér animációra, vagy bármi olyasmire ami szebbé vagy érdekesebbé teheti a játékot. Ráadásul a tükrözött fázisok is statikusak ugyan úgy, mint a forrás animációs fázisok, tehát nyugodtan megteheted hogy egyszer, a program indulása után létrehozod és letárolod, azután már csak használnod kell.
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: Tutus on 2015.December.26. 08:30:56
Igen, egy kicsit elszálltam :-);

a sprite irányonként 14 frame-ből áll, asszem ezt megfelezem majd, nem sok értelme van... azon kívül, hogy rengeteg helyet foglal.

A Haluska cikk segített, köszönöm !

Ilyen lett:
(egy kicsit villog, de működik és öröm van :-) )

(Attachment Link)

Egy kis segítséget kérhetek? Mivel az elmúlt években nem követtem az eseményeket ...
Az .ep128s kiterjesztésű programok csak EP emulátoron futnak?
Ha igen, hogyan futtathatom EP-n őket?
Előfe is köszi :)
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: geco on 2015.December.26. 08:53:56
Egy kis segítséget kérhetek? Mivel az elmúlt években nem követtem az eseményeket ...
Az .ep128s kiterjesztésű programok csak EP emulátoron futnak?
Ha igen, hogyan futtathatom EP-n őket?
Előfe is köszi :)
A load snapshot menuponttal tolthetok be, vagy ALT-L, es csak EP128EMUban
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: ergoGnomik on 2015.December.26. 09:06:02
Az emulátor telepítéskor regisztrálja magát futtató programnak a kiterjesztéshez, így a dupla kattintás vagy azzal egyenértékű akció is használható az indítására.

Miután a fájl egy teljes állapot leírást tartalmaz a gép működéséről, nem teljesen lehetetlen elvileg kibányászni belőle a memória tartalmat, amit betöltve van némi esély futtatni igazi vason is. De én nem állnék addig egy lábon amíg valaki nem ír erre a feladatra egy programot. :ds_icon_cheesygrin:
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: Zozosoft on 2015.December.26. 09:34:17
De ő igazi EP- szeretné futtatni!
BASIC-nél ha fileio-s a snapshot, akkor ki lehet menteni.
Gépi kódú a program, akkor meg kell kérni a készitőt, hogy tegye fel rendesen is.
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: Tutus on 2015.December.26. 10:25:48
De ő igazi EP- szeretné futtatni!
BASIC-nél ha fileio-s a snapshot, akkor ki lehet menteni.
Gépi kódú a program, akkor meg kell kérni a készitőt, hogy tegye fel rendesen is.

Öööö, igen, mert nekem Mac-em van itthon és Mac-re ugye nincs jól működő EP emulátor :)
Bent a munkahelyi PC-n van EMU :)
Elnézést, hogy ebben a topikban ilyenekkel zaklatlak benneteket :) sanyike, feltennéd sima EP formátumban is? Köszi!
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: endi on 2015.December.26. 10:36:03
webes emun meg tudod szerintem nézni mac-en is
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: sanyike on 2015.December.26. 10:49:15
, feltennéd sima EP formátumban is? Köszi!


Igazi vason nem teszteltem, de mennie kell...

[attachurl=1]
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: Tutus on 2015.December.26. 12:30:06

Igazi vason nem teszteltem, de mennie kell...

(Attachment Link)

Köszi szépen! :D
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: Ep128 on 2015.December.27. 00:39:23
(... szerintem úgy általában is szokjuk meg, hogy az igazi EP-re is kitesszük, ami EMU -hoz kirakódik. (Feltéve persze, hogy nem kifejezetten EMU -hoz köthető a dolog, akkor naná, hogy nem. :-) ) Részemről is 10 -ből kb. 8x igazi Ep -n nyomulok, szóval én is örülnék, ha a jövőben ezt a trendet követnénk! :-) )
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: Tutus on 2015.December.27. 08:08:37

Igazi vason nem teszteltem, de mennie kell...

(Attachment Link)

EP-n tök jól működik, gratula. Én szerintem soha meg sem fogom közelíteni ezt a szintet gépi kódú programozásommal(?) .... :D
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: sanyike on 2015.December.27. 20:22:10
Áá csak próbálkozom...
Nemrég kezdtem ezzel foglalkozni, remek hobby.
Csak gányolgatok... de nagyon élvezem :-)...


Köszönöm, hogy kipróbáltad.
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: sanyike on 2015.December.29. 21:01:56
Ha valaki meg tudna osztani egy-két gondolatot a maszkolásról? ...
Szóval, hogy a sprite színhelyes maradjon a háttér előtt vagy mögött .


ALT-ra lövöldözik (egyelőre csak egy irányba) :-)


[attachurl=1]

[attachurl=2]
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: endi on 2015.December.29. 21:30:18
hát ha nem akarsz elszíneződést, akkor nem használhatod az xor-os módszert
ez esetben el kell tárolni a háttér képet a sprite mögött és mozgáskor azzal törölni (azaz visszarajzolni a hátteret)
vagy eleve egy háttér bufferen van az egész háttér grafika és akkor onnan rajzolod vissza
illetve az is megoldás hogy double bufferbe rajzolsz és minden frame-ben minden sprite-ot újrarajzolod az előzőleg letörölt bufferre
játéktól függ melyik a jó megoldás
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: sanyike on 2015.December.29. 22:13:36
hát ha nem akarsz elszíneződést, akkor nem használhatod az xor-os módszert

Értem.
Az or, xor, and megoldásra azért gondoltam, mert a sprite editor amit használok

AMSprite (http://www.cpcwiki.eu/index.php/AMSprite)

a sprite adaton felül generál egy 256 byt-ból álló ".maskLookupTable" blokkot, csak fogalmam sincs hogy (s mire) kell használni...



jelenleg 2 lapot használok

valahogy így:

eleje: a 2-es lapot megjelenítem
az egyesre közben betöltöm a hátteret és sprite-ot, amikor kész;
az egyes lapot jelenítem meg
közben a kettes lapra betöltöm a hátteret és a sprite-ot, ha kész;
vissza az elejére :-)
---
a sprite or-al megy a hátérre...  de ugye ez nem az igazi ...
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: geco on 2015.December.29. 22:42:27
A masklookup table nem a sprite maskolásához kell?
Betöltöd a sprite egyik bájtját, annak a bájt értékének megfelelő pozíciójából a masklookup table-ből kiolvasod a maszkolási értéket, majd AND-eled a háttérrel, és ezzel OR-ozod a sprite bájtot.
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: sanyike on 2015.December.29. 23:09:32
, majd AND-eled a háttérrel, és ezzel OR-ozod a sprite bájtot.

jaaa, szóval ha pl. a sprite bájtom 02H, akkor a mask értékem a táblázatból kiolvasott 3. érték azaz 55H?


Code: [Select]
.maskLookupTable ; lookup table for masks, by byte. AND with screen data, then OR with pixel data.
defb &FF,&AA,&55,&00,&AA,&AA,&00,&00,&55,&00,&55,&00,&00,&00,&00,&00,&AA,&AA,&00,&00,&AA,&AA,&00,&00,&00,&00,&00,&00,&00,&00,&00,&00
defb &55,&00,&55,&00,&00,&00,&00,&00,&55,&00,&55,&00,&00,&00,&00,&00,&00,&00,&00,&00,&00,&00,&00,&00,&00,&00,&00,&00,&00,&00,&00,&00
defb &AA,&AA,&00,&00,&AA,&AA,&00,&00,&00,&00,&00,&00,&00,&00,&00,&00,&AA,&AA,&00,&00,&AA,&AA,&00,&00,&00,&00,&00,&00,&00,&00,&00,&00
defb &00,&00,&00,&00,&00,&00,&00,&00,&00,&00,&00,&00,&00,&00,&00,&00,&00,&00,&00,&00,&00,&00,&00,&00,&00,&00,&00,&00,&00,&00,&00,&00
defb &55,&00,&55,&00,&00,&00,&00,&00,&55,&00,&55,&00,&00,&00,&00,&00,&00,&00,&00,&00,&00,&00,&00,&00,&00,&00,&00,&00,&00,&00,&00,&00
defb &55,&00,&55,&00,&00,&00,&00,&00,&55,&00,&55,&00,&00,&00,&00,&00,&00,&00,&00,&00,&00,&00,&00,&00,&00,&00,&00,&00,&00,&00,&00,&00
defb &00,&00,&00,&00,&00,&00,&00,&00,&00,&00,&00,&00,&00,&00,&00,&00,&00,&00,&00,&00,&00,&00,&00,&00,&00,&00,&00,&00,&00,&00,&00,&00
defb &00,&00,&00,&00,&00,&00,&00,&00,&00,&00,&00,&00,&00,&00,&00,&00,&00,&00,&00,&00,&00,&00,&00,&00,&00,&00,&00,&00,&00,&00,&00,&00
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: geco on 2015.December.29. 23:22:02
Igen, és érdemes a lookup table-t xx00h címen kezdeni a sebesség miatt.
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: sanyike on 2015.December.30. 00:35:57
Köszönöm, ki fogom próbálni...
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: geco on 2015.December.30. 11:02:45
Elmeletileg egy gyors megoldas a sprite kirajzolasahoz (egy bajtra):
HL tartalmazza a sprite cimet
B. tartalmazza a lookup table cimenek magas helyierteket
DE pedig a kepernyo cimet, ahova a sprite kerul

Code: [Select]
     ld c,(hl)
     ld a,(bc)
     ex de,hl
     and (hl)
     ex de,hl
     or c
     ld (hl),a
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: IstvanV on 2015.December.30. 11:32:49
Egy másik lehetséges megoldás (SP = sprite adat, D = maszk táblázat felső 8 bit, HL = video cím):
Code: ZiLOG Z80 Assembler
  1.         pop     bc                      ; 10
  2.         ld      e, c                    ; 14
  3.         ld      a, (de)                 ; 21
  4.         and     (hl)                    ; 28 + 2
  5.         or      e                       ; 32
  6.         ld      (hl), a                 ; 39 + 2.5
  7.         inc     hl                      ; 45
  8.         ld      e, b                    ; 49
  9.         ld      a, (de)                 ; 56
  10.         and     (hl)                    ; 63 + 3
  11.         or      e                       ; 67
  12.         ld      (hl), a                 ; 74 + 2.5
  13.         inc     hl                      ; 80
Ez nem tartalmazza az eredeti képernyő tartalom mentését, amit például így lehet megoldani (itt 3 karakter a sprite szélessége, SP = sorok közötti eltolás byte-ban - 6), de talán hatékonyabb lenne a fenti rajzoló rutinba beépíteni:
Code: ZiLOG Z80 Assembler
  1.         ldi
  2.         ldi
  3.         ldi
  4.         ldi
  5.         ldi
  6.         ldi
  7.         add     hl, sp
  8.         ...
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: sanyike on 2015.December.31. 00:03:36
Elmeletileg egy gyors megoldas a sprite kirajzolasahoz (egy bajtra):


Valamiért ez nem működik...
nem is igazán értem;
a DE tartalmazza a sprite címet, nem látom a kódban hogy DE-re mikor történik kiírás..


Egy másik lehetséges megoldás (SP = sprite adat, D = maszk táblázat felső 8 bit, HL = video cím):

hű, ezt még emésztgetem... :-)
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: sanyike on 2015.December.31. 00:31:23
Code: [Select]

     ld a,(bc)
     and (hl)
     ld (hl),a
     ld a,(de)
     or (hl)
     ld (hl),a


bc = mask táblából kiolvasott érték
hl = képernyő cím
de = sprite cím

Még nem az igazi :-( ;

[attachurl=1]
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: IstvanV on 2015.December.31. 09:44:25
a DE tartalmazza a sprite címet, nem látom a kódban hogy DE-re mikor történik kiírás..

Az utolsó utasításnak LD (DE), A-nak kellene lennie LD (HL), A helyett.
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: IstvanV on 2015.December.31. 13:08:23
Ezek a rutinok nem biztos, hogy működnek, de készítek majd egy rövid példa programot:

[attachurl=1]
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: sanyike on 2015.December.31. 15:08:02
Megvan a hiba, ezt nem vettem figyelembe;

Igen, és érdemes a lookup table-t xx00h címen kezdeni a sebesség miatt.

:-) köszönöm!

A kód is megy, az István által említett módosítással...

[attachurl=1]
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: IstvanV on 2016.January.01. 12:25:46
[attachurl=1]
[attachurl=2]

[attachurl=3]

[attachurl=4]
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: endi on 2016.January.01. 13:32:41
(Attachment Link)
(Attachment Link)

(Attachment Link)

(Attachment Link)

állat
border színezést tudnál beletenni hogy lássuk az időket?
ha jól látom az ütközés pixelpontos? :)
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: IstvanV on 2016.January.01. 14:19:25
border színezést tudnál beletenni hogy lássuk az időket?

Az első programnál csak kevesebb mint egy karakter (0.5 ms = 7.8 pixel sor, 1 sor = 0.064056 ms) marad :oops::
- 4.64 ms a sprite-ok törlése
- 14.2 ms a rajzolás (ami tartalmazza a háttér mentését is)
- 0.64-0.75 ms a mozgatás (ütközésnél lassabb)
A másodiknál néhány karakternek megfelelő idő marad, de ott sem sok (3 ms = 46.8 pixel sor):
- 3.87 ms törlés
- 9.47 ms az "ellenfelek" rajzolása
- 3.22 ms a játékos rajzolása és a billentyűzet figyelése amikor nincs mozgás
- 0.43-0.5 ms a többi sprite mozgatása

Quote
ha jól látom az ütközés pixelpontos? :)

Csak a játékosnál a második programban (drawSpriteC rutin), a többi sprite ütközését a falakkal egyszerűen a koordináták alapján figyeli. A takarásban levő háttér pixeleket OR-olja, és a 8-15 paletta színek ellenfelet jeleznek, a 4-7 pedig falat. A 0-3 színek nem akadályozzák a mozgást. Természetesen a pontos ütközés lassabb, 2.37 helyett 3.22 ms a mentés+rajzolás, bár az utóbbi tartalmazza a billentyűzet figyelését is.
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: IstvanV on 2016.January.01. 14:27:04
A háttér mentése elvileg elkerülhető lenne (több memória használatával, az egész háttér egy másolatát tárolva), így több sprite is lehetne a képen.
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: geco on 2016.January.01. 14:36:49
Tök jók, a másodikból akár egy játékot is lehetne csinálni, csak eredményjelző kéne, meg pár nehézségi szint.
Nincs kedved egy demót csinálni az elmúlt pár hétben bemutatott effektekből? Az első programot is bele lehetne tenni. :)
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: endi on 2016.January.01. 14:47:15
aha érdekes idők
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: IstvanV on 2016.January.01. 17:06:29
Tök jók, a másodikból akár egy játékot is lehetne csinálni, csak eredményjelző kéne, meg pár nehézségi szint.
Nincs kedved egy demót csinálni az elmúlt pár hétben bemutatott effektekből? Az első programot is bele lehetne tenni. :)

A "Magic Ball" demót ki lehetne egészíteni labdával, bár ezt valószínűleg a sávok számának a csökkentésével vagy átlátszóság nélkül lehetne megoldani (vagy csak sötét színű labdával), mert az eredeti verzió mind a 8 paletta színt használja a pálya megjelenítésére (4 normál és 4 átlátszóság, ami szimmetrikus 7 sávos pályához volt elég).
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: endi on 2016.January.01. 17:08:12
A "Magic Ball" demót ki lehetne egészíteni labdával, bár ezt valószínűleg a sávok számának a csökkentésével vagy átlátszóság nélkül lehetne megoldani (vagy csak sötét színű labdával), mert az eredeti verzió mind a 8 paletta színt használja a pálya megjelenítésére (4 normál és 4 átlátszóság, ami szimmetrikus 7 sávos pályához volt elég).

a divatos mobiljátékokban meg 3 sáv van :)
igaz, általában nem csak síkban zajlik (talajon) hanem vannak akadályok is amik kiemelkednek a talajból.
hm amúgy ezt meg lehetne ep-n is csinálni, közeledő, felnagyobbodó sprite-ok! :) látványos lenne
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: geco on 2016.January.01. 17:17:41
A "Magic Ball" demót ki lehetne egészíteni labdával, bár ezt valószínűleg a sávok számának a csökkentésével vagy átlátszóság nélkül lehetne megoldani (vagy csak sötét színű labdával), mert az eredeti verzió mind a 8 paletta színt használja a pálya megjelenítésére (4 normál és 4 átlátszóság, ami szimmetrikus 7 sávos pályához volt elég).
Azt is lehet, amúgy az önmagában is nagyon látványos, ha labda, akkor arra lehetne használni a Bias színeit, nem?
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: IstvanV on 2016.January.01. 22:00:17
Azt is lehet, amúgy az önmagában is nagyon látványos, ha labda, akkor arra lehetne használni a Bias színeit, nem?

Igen, bár a bias 0 (a fekete háttérhez kell), ezért csak sötét színeket lehetne használni.

Az előző programok háttér mentés nélküli változata, így több sprite megjelenítésére van idő:

[attachurl=1]

[attachurl=2]

[attachurl=3]
[attachurl=4]
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: nyuzga on 2016.January.01. 22:12:09
Az előző programok háttér mentés nélküli változata, így több sprite megjelenítésére van idő:


Hát igen! Aki tud az tud. :smt038
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: sanyike on 2016.January.01. 22:24:27
Nagyon jó!

:smt023
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: geco on 2016.January.02. 09:20:51
Az előző programok háttér mentés nélküli változata, így több sprite megjelenítésére van idő:
Nagyon jó, és ha jól láttam, akkor egy kis idő még maradt is, tényleg érdemes lenne szerintem ebből egy játékot csinálni :)
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: Ep128 on 2016.January.02. 11:40:36
... mint ha szó lett volna róla, hogy "eredeti" Ep -s formátumban is kerüljenek ki a feltöltött cuccok... :-) ;-)

Megvan a hiba, ezt nem vettem figyelembe;

:-) köszönöm!

A kód is megy, az István által említett módosítással...

(Attachment Link)
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: IstvanV on 2016.January.03. 10:01:59
A "Magic Ball" demót ki lehetne egészíteni labdával, bár ezt valószínűleg a sávok számának a csökkentésével vagy átlátszóság nélkül lehetne megoldani (vagy csak sötét színű labdával), mert az eredeti verzió mind a 8 paletta színt használja a pálya megjelenítésére (4 normál és 4 átlátszóság, ami szimmetrikus 7 sávos pályához volt elég).

Labda sprite már van, egyelőre árnyék nélkül, de 2 paletta szín felhasználásával (tehát csak 5 sávos pályához, ami vagy szimmetrikus és átlátszó, vagy lehet nem szimmetrikus is átlátszóság nélkül):

[attachurl=1]

Nagyobb felbontással ilyen lenne:

[attachurl=2]
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: endi on 2016.January.03. 11:01:12
szerintem a bias színekből simán lehet ilyet...
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: IstvanV on 2016.January.03. 11:11:43
Valóban, bár a bias 0, hogy lehessen fekete háttér. Így viszont a paletta használata nélkül csak sötét színek lehetségesek, mint például ezen a képen (bias = 0, és a 8, 12, 14, és 15 színekkel):

[attachurl=1]
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: endi on 2016.January.03. 11:46:38
szerintem ne magicball klónt csinálj, ha már...
lehetne egy futó figura, vagy ha más nem, egy 4x ekkora gömb! milyen látványos lenne
az meg hogy nagyobb bias esetén nincs fekete, szerintem nem baj, miért kéne mindenáron feketének lennie? a világos színű játékok a divat :)
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: nyuzga on 2016.January.03. 11:58:49
Endi valami ilyenre gondolhat.

Ninja Runner (https://www.youtube.com/watch?v=S1OKF9d005o)
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: endi on 2016.January.03. 12:01:22
ja, hát millió ilyen runner van és elég sikeresek :) néhányban dolgoztam is :)
na de mit szóltok egy ilyen gömbhöz?
esetleg egy futó figurát is tudok csinálni, pontosabban csináltam egyet régebben, azt előszedhetem
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: endi on 2016.January.03. 13:00:53
ja ha kell tudok renderelni másfajtát, más szín, több anim fázis, akármi
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: IstvanV on 2016.January.03. 14:07:28
Ilyen minőségű kép az EP-n lehetséges felbontással és színekkel nem biztos, hogy jól konvertálható. :oops:

Az előbbi példa így néz ki a sprite "demo" programban:
[attachurl=1]

[attachurl=2]
[attachurl=3]
[attachurl=4]

Quote
lehetne egy futó figura, vagy ha más nem, egy 4x ekkora gömb! milyen látványos lenne

4x4 méret az gyakorlatilag 16 sprite megjelenítése lenne, a háttér animációja mellett. 2x2-re talán lenne idő, de akkor másra már nem sok maradna.
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: endi on 2016.January.03. 17:13:38
egy 3 sávos "runner" játék esetén mondjuk marad sok szín meg proci idő is nagy labdára :)
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: geco on 2016.January.03. 20:44:48
Ilyen minőségű kép az EP-n lehetséges felbontással és színekkel nem biztos, hogy jól konvertálható. :oops:

Az előbbi példa így néz ki a sprite "demo" programban:
4x4 méret az gyakorlatilag 16 sprite megjelenítése lenne, a háttér animációja mellett. 2x2-re talán lenne idő, de akkor másra már nem sok maradna.
Cool ez a labda, és a mozgása is nagyon jó. Lehet a nagy labda, mondjuk 2x ekkora már túl sok processzor időt elvinne, és tényleg csak 3 sáv maradna, szerintem az már nem olyan jó.
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: endi on 2016.January.03. 21:53:22
hm egyre nagyobb a kísértés hogy újra elkezdjek asm-ban dolgozni :)
neem nem nem nemmmmmm
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: Ep128 on 2016.January.04. 00:37:53
hm egyre nagyobb a kísértés hogy újra elkezdjek asm-ban dolgozni :)
neem nem nem nemmmmmm
HEAS -ban is teheted... :-D (Haluska szerint van olyan jó, mint az ASM, bár ezt nyilván azok tudnák megmondani, akik mindkettőt használták.)
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: geco on 2016.January.04. 08:48:04
hm egyre nagyobb a kísértés hogy újra elkezdjek asm-ban dolgozni :)
neem nem nem nemmmmmm
Hajráááá :D Jól el lehet b.szni vele az időt :D
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: IstvanV on 2016.January.04. 17:24:37
"ASM EP-n - hogyan kezdjem újra?" :)
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: IstvanV on 2016.January.05. 11:29:48
Cool ez a labda, és a mozgása is nagyon jó.

Ezzel a (meglehetősen kezdetleges) programmal készült:
[attachurl=1]
[attachurl=2]

És így konvertálható EP formátumra (az xpm2ep16.cpp a korábbi sprite demo forrás csomagjában található):
Code: [Select]
for i in ball_??.xpm ; do    \
  echo -e "$i:" | sed 's/ball_\(..\)\.xpm/player\1SpriteData/' ;    \
  ./xpm2ep16 $i 0 8 7 5 6 ; echo -e ".l1:    block   SPRITE_WIDTH * 2 * SPRITE_HEIGHT, 00h\n" ;    \
done >> sprdata.s

Jobb minőségű változat:
[attachurl=3]
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: ergoGnomik on 2016.October.29. 10:09:45
Volt ez a dolog, amire mindig kíváncsi voltam hogyan néz ki EP-n? Elmúlt éjjel nagyjából összekalapáltam, utána megálmodtam mi volt a hibája, és ma délelőtt kijavítottam. Álljon itt elrettentésként mindenki számára! Így nem szabad csinálni!
[attachurl=1]

Szerk.: Vajon kik lehetnek akik letöltötték? Dobnátok PM-et?
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: szipucsu on 2016.October.29. 13:30:55
LumSweep.zip (3.49 kB - letöltve 2 alkalommal.)

Szerk.: Vajon kik lehetnek akik letöltötték? Dobnátok PM-et?
Elvileg létezik olyan fórumfunkció, hogy azt is kiírja, kik töltötték le, nem csak hogy hányan. Nem tudom, mennyire nehéz megcsinálni, de MrPrise biztos megcsinálja, ha van rá igény.
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: ergoGnomik on 2016.October.29. 15:06:42
/OFF

Elvileg létezik olyan fórumfunkció, hogy azt is kiírja, kik töltötték le, nem csak hogy hányan. Nem tudom, mennyire nehéz megcsinálni, de MrPrise biztos megcsinálja, ha van rá igény.

Igazából csak hangosan morfondíroztam, nem akarok én senkit ilyesféle fejlesztésekre rávenni. Valójában abban sem vagyok biztos, hogy tényleg tudni akarom-e? Nyilván meg van a kíváncsiság, de valami érthetetlen okból aggaszt is a dolog.

/ON
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: geco on 2016.October.30. 08:04:08
Nagyon jó lett a logó, a világosodás is jól el lett találva :)
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: ergoGnomik on 2016.October.30. 10:06:38
Nagyon jó lett a logó, a világosodás is jól el lett találva :)
Köszike! Valójában nem eltalálva lett, hanem kiszámolva. :) Végigvettem az összes lehetséges színt, kiszámoltam az R*299+G*587+B*114 képlettel a fényerejüket, és sorba rendeztem. Az van a NickLuma.s fájlban, csökkenő sorrendben. Sokkal jobban látszik, ha az emulátorban leveszed a színtelítettséget nullára. Színesben kicsit zavaró a folytonos átmenet hiánya, enyhén villogni látszik tőle.

A logó a gép bejelentkező logójából lett átrajzolva, bár az olyan vastag részekkel, mint az R betűk szára, nem vagyok elégedett, de az én tehetségemből ennyire futotta. :oops:

Igazából nem volt nehéz összehozni, csak néhány dolog okozott ilyen-olyan meglepetést. Például célszerű jól eltalálni a videó szegmens számát és Z80 lapszámot, ha azonos címet akarok használni az LPT címzésére. Vagy hogy az LPT-ben lennie kell olyan sornak amire be van állítva a Reload, és olyannak is, amiben a VINT, már ha komolyan gondolom, hogy videómegszakítást szeretnék használni. A feledékenység. Ugye-ugye? :D Azután meg, bár a Z80 utasításai meglehetősen rugalmasak, mindent mindenre mégsem lehet használni, így elég sokszor kellett lapozgatni a vonatkozó irodalmat, többször, mint azt kényelmesnek gondoltam. :( Na és az, hogy a megszakítás kiszolgáló rutinban újra engedélyezni kell a megszakításokat, mert a Z80 automatikusan tiltja. Nem vagyok én ehhez szokva, na. :)
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: Attus on 2016.October.30. 12:58:57
Szerk.: Vajon kik lehetnek akik letöltötték? Dobnátok PM-et?
Én most töltöttem, belenéztem, elrettentem.
:(
Nagyon nem tetszik benne az infinity ciklus.
Esetleg abba bele lehetett volna egy billentyű portolvasást is építeni, ami, ha észlel billentyűnyomást azt eredményezhetné, hogy visszállítja az eredeti interruptot és nem a reset gombhoz kell nyúlni.
Persze előbb el kell menteni valahova ehhez az eredeti interrupt felűlírt bájtjainak értékét, hogy vissza lehessen rakni.
Amúgy szép és jó, amit műveltél szerintem.
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: ergoGnomik on 2016.October.30. 15:56:47
Én most töltöttem
Köszönöm a visszajelzést! Gondoltam legelső próbálkozásnak ennyi is elég lesz, de ha nem, hát nem. Ígérem, ha legközelebb próbálkozni akarok, több energiát fektetek bele. (Kár, hogy nincs becsszóra szmájli.)
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: Attus on 2016.October.30. 17:46:50
;-)
Persze jól tudom, hogy az én mostani asm, meg átírási aktivitásom gyakorlatilag a 0 -val egyenlő, hisz részemről átadtam a terepet az újabb nemzedéknek, csak ritkán engedek meg magamnak egy pár jószándékú megnyilatkozást.
Külön örömmel tölt el egy pár ilyen z80 asm tanulmányozása, igaz, manapság igen ritkán foglalkozom vele, amiért is elnézést kérek, de jó elmerengeni egy ilyen forrás láttán is a régi z80 assembler programozási élményeimen és tapasztalataimon. Főleg látvén a szépséget is, melyek ilyen kódokban rejlenek.
Az igazi programozás számomra még mindig a "primitív" -nek titulált assembler.
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: geco on 2016.October.31. 10:04:39
Színesben kicsit zavaró a folytonos átmenet hiánya, enyhén villogni látszik tőle.
Kicsit, de ott is látszik, hogy folyamatosan világosodik.

A logó a gép bejelentkező logójából lett átrajzolva, bár az olyan vastag részekkel, mint az R betűk szára, nem vagyok elégedett, de az én tehetségemből ennyire futotta. :oops:
Én se vagyok egy pixelguru, és ráadásul az ilyen konverziókkal el is szoktam babrálni 1-2 órát, az EP logo a programok alján is beletelt szerintem 2 órába.
Igazából nem volt nehéz összehozni, csak néhány dolog okozott ilyen-olyan meglepetést. Például célszerű jól eltalálni a videó szegmens számát és Z80 lapszámot, ha azonos címet akarok használni az LPT címzésére. Vagy hogy az LPT-ben lennie kell olyan sornak amire be van állítva a Reload, és olyannak is, amiben a VINT, már ha komolyan gondolom, hogy videómegszakítást szeretnék használni. A feledékenység. Ugye-ugye? :D Azután meg, bár a Z80 utasításai meglehetősen rugalmasak, mindent mindenre mégsem lehet használni, így elég sokszor kellett lapozgatni a vonatkozó irodalmat, többször, mint azt kényelmesnek gondoltam. :( Na és az, hogy a megszakítás kiszolgáló rutinban újra engedélyezni kell a megszakításokat, mert a Z80 automatikusan tiltja. Nem vagyok én ehhez szokva, na. :)
Az LPT a meglepetések tárháza :D A legtöbb hibát ott szoktam véteni, kedvencem, amikor a sok soros LPT palettáját akarom feltölteni, és elcsúszik a feltöltés felülírva a képvezérlő részeket :oops: , a VINT-et már én is elfelejtettem jópárszor :)
A sűrű lapozgatást lehet a leggyorsabban kiküszöbölni, írsz még 2-3 programot, és rohamosan ritkulni fog ;)
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: Tutus on 2016.November.01. 06:23:41
Volt ez a dolog, amire mindig kíváncsi voltam hogyan néz ki EP-n? Elmúlt éjjel nagyjából összekalapáltam, utána megálmodtam mi volt a hibája, és ma délelőtt kijavítottam. Álljon itt elrettentésként mindenki számára! Így nem szabad csinálni!
(Attachment Link)

Szerk.: Vajon kik lehetnek akik letöltötték? Dobnátok PM-et?
Én letöltöttem, mert érdekelt. És gratula, én mint nem programozó értékelem az ilyeneket :)
És persze ha ezt meg tudnám csinálni én is, megcsókolnám a Hősök tere közepét :)
Anno még nagyon régen Basic-ben írtam egy ún. Fotó katalógust (mely megmondja, hogy a negatívokon hol, melyik kép található.
Ezt Zozo segített átírni gépi kódban, és akkor nagyon sokat tanultam ebből, de mára szinte mindent elfelejtettem :(
Most meg igazán az Enterpressre és az EP Klubra koncentrálok, persze megnézek mindent itt a fórumon :)
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: IstvanV on 2016.November.01. 08:04:34
Kicsit, de ott is látszik, hogy folyamatosan világosodik.

Ez attól is függ, hogy a rendezés hogyan számítja az egyes színek fényerejét, az egyszerű YUV konverzió (Y = R*0.299 + G*0.587 + B*0.114) megegyezik azzal, amit az ep128emu és a TV-k használnak fekete-fehér kép előállítására, azonban színes képnél nem biztos, hogy ez közelíti a legjobban az érzékelt fényerőt. Itt (https://enterpriseforever.com/programozas/grafikai-trukkok/msg44452/#msg44452) található egy összehasonlítás az EP színek két különböző színtérben való rendezése között.
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: geco on 2016.November.01. 12:42:07
Ez attól is függ, hogy a rendezés hogyan számítja az egyes színek fényerejét, az egyszerű YUV konverzió (Y = R*0.299 + G*0.587 + B*0.114) megegyezik azzal, amit az ep128emu és a TV-k használnak fekete-fehér kép előállítására, azonban színes képnél nem biztos, hogy ez közelíti a legjobban az érzékelt fényerőt. Itt (https://enterpriseforever.com/programozas/grafikai-trukkok/msg44452/#msg44452) található egy összehasonlítás az EP színek két különböző színtérben való rendezése között.
Én csak ámulok, és bámulok (oké már láttam a linkelt hozzászólásod), van olyan amit nem tudsz ? :)
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: lgb on 2016.November.01. 14:45:01
Én csak ámulok, és bámulok (oké már láttam a linkelt hozzászólásod), van olyan amit nem tudsz ? :)

Szerintem csak a lotto kovetkezo nyero szamait nem tudja talan ... De meg ebben sem vagyok biztos :D
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: geco on 2016.November.02. 09:39:24
Szerintem csak a lotto kovetkezo nyero szamait nem tudja talan ... De meg ebben sem vagyok biztos :D
Én sem, csak nem akarja elvenni mások örömét :D
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: ergoGnomik on 2017.April.17. 14:39:12
Eszembe jutott, hogy nem tettem hozzá a színtáblázat generáló forráskódját. Kicsit pofozgattam rajta, hogy legalább egy minimális civilizáltság látszatát keltse, és pótlom az elmaradást. Qt 5.6-ban lett faragva, a MinGW-s változatban.
[attachurl=2]

Szerk.: Javítás a forrásban, mert kimaradt egy szükséges módosítás.
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: ergoGnomik on 2017.April.18. 18:49:55
Azok, akik letöltötték a tegnapi forráskódomat kérem írjanak egy PM-et arról, hogy mi motiválta őket hogy letöltsék, és mi a véleményük róla.
Előre is köszönöm!

Those of you, who downloaded my source code from yesterday, please write a PM about your motivation to download, what is your opinion about it.
Thank you in advance.
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: szipucsu on 2017.April.19. 14:33:36
Azok, akik letöltötték a tegnapi forráskódomat kérem írjanak egy PM-et
Én nem töltöttem le, mert azt se tudom, a cpp kiterjesztést eszik-e vagy isszák. De aki letöltötte, szerintem a fórumra is megírhatja, mit gondol róla, nem titkos, sokaknak lehet érdekes, hasznos.
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: DrPrery on 2017.April.19. 20:24:06
Én csak a Qt-s dolgokra voltam kíváncsi... :mrgreen:
 
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: Povi on 2017.September.14. 21:03:38
hülye kérdés, de nem tudom:

mitől függ, hogy HALT utasításra megáll-e a proci "örökre", vagy tovább lép, az 50Hz-es megszakításnál?
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: Zozosoft on 2017.September.14. 21:32:15
mitől függ, hogy HALT utasításra megáll-e a proci "örökre", vagy tovább lép, az 50Hz-es megszakításnál?
Volt-e előtte EI :-)
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: Povi on 2017.September.14. 21:35:42
ááá, és tényleg, volt egy függvény, ami csinált DI-t, csak nem volt utána EI, azért ragadt be... :-)
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: endi on 2017.September.15. 12:55:29
hm mi ez a halt előtti EI???
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: Povi on 2017.September.15. 13:22:17
hm mi ez a halt előtti EI???
EI = enable interrupt
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: endi on 2017.September.15. 14:08:43
EI = enable interrupt

ja, az ok, csak nem értem miről is van szó :D
ja de közben rájöttem, hogy túlbonyolítottam. azt hittem valaki új funkció amiről nem tudtam. hiába, nagyon vágyik az ember arra hogy újat tudjon meg és akkor odaképzeli :D
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: endi on 2017.November.11. 16:00:33
haha ez jó, webes z80 assembler :)
pl hex kód kimente is van, basic-be be lehet így építeni könnyen :)

http://clrhome.org/asm/
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: Zozosoft on 2017.November.11. 19:09:56
basic-be be lehet így építeni könnyen :)
ASMON-nal még egyszerűbb :-)
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: sanyike on 2024.March.07. 15:15:57
Használ EP assemblert (HEASS ajánlott) (http://www.ep128.hu/Ep_Util/HEASS.htm), és akkor csak annyi a dolgod, hogy 5-ös fejléccel fordítod le a programodat. A LOAD ezt 100H-tól fogja betölteni, és indítani, lásd új alkalmazói programok betöltése. (http://www.ep128.hu/Ep_Konyv/Exos.htm#48)

Itt egy példaprogramocska, ami tartalmazza a program szabályos indulását, memória foglalást, LPT felépítést, kilépést. A fõprogram jelenleg kimerül SPACE gomb figyelésben :-)
Code: ZiLOG Z80 Assembler
  1.                 MACRO EXOS n
  2.                   RST 30H
  3.                   DB  n
  4.                 ENDM
  5.  
  6.                 ORG 0F0H
  7.  
  8.                 ;16 bájtos EXOS fejléc
  9.  
  10.                 DB 0,5          ;5-ös típus, vagyis gépi kódú felhasználói program
  11.                 DW VEGE-100H    ;hossz 16 biten
  12.                 DB 0,0,0,0,0,0,0,0,0,0,0,0 ;többi bájt nem használt
  13.  
  14.                 ;program kezdete, 100H-ra töltödik be
  15.  
  16.                 LD SP,100H      ;felhasználói veremmutató beállítása, 164 bájt szabad
  17.                                 ;Az EXOS-nak saját belsõ verme van a rendszerszegmensben
  18.                                 ;EXOS hívások vagy EXOS megszakítás kiszolgálása esetén
  19.                                 ;8 bájt kerül felhasználásra a felhasználói verembõl
  20.                 LD HL,HIBA
  21.                 LD (0BFF8H),HL  ;EXOS melegindítási rutin címének beállítása
  22.  
  23.                                 ;ez a rutin fut le a Reset gomb egyszeri megnyomásakor
  24.                                 ;jelen esetben ugyanazt a kilépési rutint használjuk,
  25.                                 ;amit egyéb hibák esetén is. A HIBA rutin felszabadítja
  26.                                 ;a programunk által használt memóriát, majd szabályosan
  27.                                 ;kilép a villogó ENTERPRISE felírathoz.
  28.                                 ;így a reset megnyomásakor a program szabályosan kilép,
  29.                                 ;nem történik teljes hidegindítás, így a gépben lévõ
  30.                                 ;adatok (pl RAMDISK vagy rendszerbõvítõk) megõrzõdnek
  31.  
  32.                 LD A,12         ;memória várakozások
  33.                 OUT (191),A     ;tiltása (opcionális :-)
  34.                
  35.                 ;keretszín feketére állítása
  36.  
  37.                 LD BC,100H+27   ;B=1 írás kódja
  38.                                 ;C=27 rendszerváltozó száma (BORDER)
  39.                 LD D,0          ;változó új értéke
  40.                 EXOS 16         ;EXOS változó kezelése
  41.  
  42.                 CALL VID        ;egy videó szegmens igénylése
  43.                 JP NZ,HIBA      ;ha nem sikerült, akkor kilépés
  44.                 LD A,C          ;kapott szegmens számának
  45.                 LD (VIDS),A     ;letárolása
  46.                 OUT (0B3H),A    ;szegmens belapozása a 3. lapra
  47. ......
  48.  



Zozo pédaprogramját némiképp módosítva nyitottam egy attributum üzemmódú képernyőt.
Ez működik is, a videómemóriába a pixeladat és színadat területek írásával rendben meg tudom jeleníteni amit szeretnék.
Az lenne a kérdésem, hogy az EXOS-al lehetséges-e direktbe karaktereket, szöveget írni a képernyőre.

Ezzel próbálkozom, sikertelenül;


LD A,101 ;  Csatornaszam - bár fogalmam sincs, hogy mi van megnyitva...ha megvan
LD BC, SZHOSSZ
LD DE, SZOVEG
EXOS 8

...

SZOVEG           DB 26; kepernyo torlese        
                       DB "FOMENU",10,13,10,13
                       DB "ELSO SOR",10,13
                       DB "MASODIK SOR",10,13
                       DB "HARMADIK SOR",10,13,10,13
                       DB "NEGYEDIK SOR"
SZHOSSZ         EQU $-SZOVEG



Title: Re: ASM EP-n - hogyan kezdjem?
Post by: Zozosoft on 2024.March.07. 15:33:59
Az lenne a kérdésem, hogy az EXOS-al lehetséges-e direktbe karaktereket, szöveget írni a képernyőre.

Ezzel próbálkozom, sikertelenül;


LD A,101 ;  Csatornaszam - bár fogalmam sincs, hogy mi van megnyitva...ha megvan
Nem fog menni, mert semmi nincs megnyitva, ez a példa arról szól, hogy a memóriát elkérjük az EXOS-tól, és onnantól kezdve a gép közvetlen programozására rendezkedünk be.
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: sanyike on 2024.March.07. 16:00:21
Nem fog menni, mert semmi nincs megnyitva, ez a példa arról szól, hogy a memóriát elkérjük az EXOS-tól, és onnantól kezdve a gép közvetlen programozására rendezkedünk be.

Értem, akkor nem erőlködöm tovább.
Célszerű egy saját szövegíró rutint írni.
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: Ferro73 on 2024.March.07. 21:37:44
Ajánlom a Zx programok átírás enterprisera SPLoader.txt (http://www.ep128.hu/Ep_Konyv/Specload.txt)

itt az elején felépít egy szöveges felületet. Tisztára mint BASIC-ban.
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: Ferro73 on 2024.March.07. 21:48:47


Zozo pédaprogramját némiképp módosítva nyitottam egy attributum üzemmódú képernyőt.
Ez működik is, a videómemóriába a pixeladat és színadat területek írásával rendben meg tudom jeleníteni amit szeretnék.
Az lenne a kérdésem, hogy az EXOS-al lehetséges-e direktbe karaktereket, szöveget írni a képernyőre.

Ezzel próbálkozom, sikertelenül;


LD A,101 ;  Csatornaszam - bár fogalmam sincs, hogy mi van megnyitva...ha megvan
LD BC, SZHOSSZ
LD DE, SZOVEG
EXOS 8

...

SZOVEG           DB 26; kepernyo torlese        
                       DB "FOMENU",10,13,10,13
                       DB "ELSO SOR",10,13
                       DB "MASODIK SOR",10,13
                       DB "HARMADIK SOR",10,13,10,13
                       DB "NEGYEDIK SOR"
SZHOSSZ         EQU $-SZOVEG
Probáld.
Ha garafikus képernyő akkor jelöld ki a kiírási pontot mint a BASIC-ben
Használd az " ESC n  " kódokat.

Code: [Select]
SET #101:PLOT 0,640
PRINT #101:"ELSO SOR"

Title: Re: ASM EP-n - hogyan kezdjem?
Post by: sanyike on 2024.March.08. 10:18:32
Ajánlom a Zx programok átírás enterprisera SPLoader.txt (http://www.ep128.hu/Ep_Konyv/Specload.txt)

itt az elején felépít egy szöveges felületet. Tisztára mint BASIC-ban.


Köszönöm!

Nagyon jó anyag. Nem tudom miért nem találkoztam ezzel eddig...

http://www.ep128.hu/Ep_Konyv/Sp-Ep_konvertalas.htm#e

Title: Re: ASM EP-n - hogyan kezdjem?
Post by: Ferro73 on 2024.March.08. 17:16:26
Én még papír alapúan tanultam.
Spectrum Világ újságból.
Valahol fenn vannak a lap kiadásai.
Abban volt az utolsó cikk "GÉPI KÓD TANFOLYAM"
Rendesen elmagyarázták benne a kódokat.
Majd mikor a játékokat konvertálta, javítgattam tovább fejlődtem.
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: geco on 2024.March.09. 08:25:21
A régi ENTERPRESS-ben is volt egy tök jó cikksorozat a gépi kód megismeréséről, és használatáról.
Ha érdeket, itt megtalálhatod őket (http://enterprise.iko.hu/magazines.htm)
Title: Re: ASM EP-n - hogyan kezdjem?
Post by: Ferro73 on 2024.March.24. 11:44:57
Valami ilyesmi kiegészítő lap volt a "ZX Spectrum ROM Programja" vagy "Z80-as sorozat - VIII. rész: CPU utasításkészlet"
Programozáshoz nekem elengedhetetlen kellék volt.
[attach=1]

Az EP karaktereket ebbe nem találtam megfelelőt.
Ezért hiányos.