Enterprise Forever

:HUN => Programozás => Topic started by: IstvanV on 2019.April.04. 14:45:48

Title: Sjasm fejlesztése
Post by: IstvanV on 2019.April.04. 14:45:48
A sjasm kisebb hiányosságait is javítani lehetne, ha hasznos lenne csak ezekért külön verziót használni:
- .sym file exportálásakor a negatív értékű címkék hibásan működnek, ez problémákat okozott az R-Type fordításakor
- nincs lehetőség értékek definiálására a parancssorban, például a -Dnév=érték a DEFINE, az -Enév=érték pedig az EQU megfelelője lehetne

Szerk.: .sym helyett valójában jobban használható lett volna az .exp file, ami csak az erre a célra választott címkéket exportálja. Nem kellett volna cserélni az összes negatív címkét, ezt még visszaállítom a régi forrásra. :oops:
Title: Re:Sjasm fejlesztése
Post by: geco on 2019.April.04. 15:14:43
Az általam ismert leújabb SJASM-ot nem szerettem :D
Negatív címkék okoztak gondot az új fordítási módban, vagy csak zavaró volt a két hiba?
Igen az értékadás paracssorban jól jött volna, nem kellett volna a sok mini SRC file :D
Igen, sajnos PR1, és a pálya újra töltődik, ráadásul a legtöbb zene kétszer szerepel, egyszer a PR1-ben ( ha jól emléxem), és még egyszer a pályafájlokban, sajnos csak így tudtam megoldani, hogy fusson 128KB-n, és a zene teszt is megmaradjon a menüben.
Title: Re:Sjasm fejlesztése
Post by: Zozosoft on 2019.April.04. 15:38:04
A sjasm kisebb hiányosságait is javítani lehetne, ha hasznos lenne csak ezekért külön verziót használni:
Sőt egy külön sjasmep is jó lenne! :oops: (Spectrumosoknál már láttam saját sjasm verziót)

Quote
- nincs lehetőség értékek definiálására a parancssorban, például a -Dnév=érték a DEFINE, az -Enév=érték pedig az EQU megfelelője lehetne
Ezt én is szoktam hiányolni, pl több nyelvű verzió fordításánál.

Az általam ismert leújabb SJASM-ot nem szerettem :D
Én se, csomó mindent elrontottak benne, amit EP-n megszoktunk, és sjasm 0.39-ben is működött.
De van abban is pár jó trükk, pl létező bináris fájl update-olása. Pl EXDOS 1.4-nél használtam az EXDOS ROM-ba a patch rutinok berakására. (Amely rutinok 0.39-el fordultak :-) )

Esetleges EP-s sjasm-be ilyenek lennének még jók:
-beépített EXOS n
-EXOS header fordítása, legalább 5/6
-HEASS-ból a DB különböző EP-s variációi, különösen a DBL
-4-es sjasm-ből a fájl update-olós trükk
Title: Re:Sjasm fejlesztése
Post by: geco on 2019.April.04. 17:35:44
A sjasm kisebb hiányosságait is javítani lehetne, ha hasznos lenne csak ezekért külön verziót használni:

Szerk.: .sym helyett valójában jobban használható lett volna az .exp file, ami csak az erre a célra választott címkéket exportálja. Nem kellett volna cserélni az összes negatív címkét, ezt még visszaállítom a régi forrásra. :oops:
Simán érdemes lehetne külön verziót használni, legalábbis én használnám ;)  , az R-Type-ot is, meg az összes 4 MHz forrást átalakítottam sjasm-ra, mindegyik Winape módban volt :D
Az exp-et nem is ismertem, de ezek után használni is fogom :D
Title: Re:Sjasm fejlesztése
Post by: IstvanV on 2019.April.04. 18:43:08
Sőt egy külön sjasmep is jó lenne!

Már van (https://github.com/istvan-v/sjasmep) :), egyelőre a korábban már említett változtatásokkal, illetve a régebbi Linux MODULE javítással.
Title: Re:Sjasm fejlesztése
Post by: Zozosoft on 2019.April.04. 19:52:52
Már van (https://github.com/istvan-v/sjasmep) :), egyelőre a korábban már említett változtatásokkal, illetve a régebbi Linux MODULE javítással.
:smt038
Csináltam neki külön topicot.
Title: Re: Sjasm fejlesztése
Post by: geco on 2019.April.05. 08:44:35
Király vagy, majd megpróbálom beforgatni :)
Title: Re: Sjasm fejlesztése
Post by: IstvanV on 2019.April.05. 12:43:43
Beépítettem az EXOS és a DBL támogatását is, bár az utóbbi nem működik üres névvel. :oops: A forráskód Windowson is egyszerűen fordítható ezzel a MinGW csomaggal (https://www.dropbox.com/s/ex0zxz7e6bmcb9r/mingw_w64-x64.7z?dl=1), a mingw32-make parancs fordítja a sjasm.exe-t.
Title: Re: Sjasm fejlesztése
Post by: Zozosoft on 2019.April.05. 13:06:10
Beépítettem az EXOS és a DBL támogatását is
:smt038

Quote
, bár az utóbbi nem működik üres névvel. :oops:
Nem baj, az ilyet úgyis DB 0-nak szokás írni.
Title: Re: Sjasm fejlesztése
Post by: BruceTanner on 2019.April.05. 14:51:10
As we're on the subject :mrgreen: ...what would be really nice :mrgreen:  ...is if ep128emu could read in a symbol table file from sjasm or M80, and then whenever the disassembler window prints an address, attempt to look up the address in the symbol table and print the symbol instead. It won't get it right all the time but it is very useful when it does! :twisted:

Title: Re:Sjasm fejlesztése
Post by: IstvanV on 2019.April.05. 18:42:30
-EXOS header fordítása, legalább 5/6

Már van ilyen is, bár kissé korlátozottan, a program vagy bővítő végét továbbra is definiálni kell címkével (szerk.: javítva, működik címke nélkül is):
Code: ZiLOG Z80 Assembler
  1.         header  5;, prgend
  2.         di
  3.         ld      sp, 0100h
  4.         ld      c, 40h
  5.         exos    0
  6.         ld      a, 01h
  7.         out     (0b3h), a
  8.         ld      a, 6
  9.         jp      0c00dh
  10. ;prgend:
Jelenleg hibát eredményez, ha a modul túl nagy méretű, de ez nem feltétlenül jó megoldás, mert csomagolva használhatóak lehetnének a "szabálytalan" programok is.

Változtatás még, hogy hiba esetén a kimeneti file törlődik, ez nem tudom, hogy valóban jó ötlet-e, de nagyobb projektnél elkerülhetőbbé teszi, hogy a fordítás a rossz file használatával később tovább folytatódjon. Az .lst-t ilyenkor sem törli.

Quote
-HEASS-ból a DB különböző EP-s variációi, különösen a DBL

A DBL-en kívül melyik lenne még hasznos elsősorban?

Quote
-4-es sjasm-ből a fájl update-olós trükk

Ez pontosan hogyan működik? :oops:
Title: Re: Sjasm fejlesztése
Post by: geco on 2019.April.05. 19:22:07
kisebb szórakozás után sikerült is beforgatni, PATH definíciókat kellett hozzáadni a Winfosomhoz :D
Köfi, műxik is :)
Title: Re:Sjasm fejlesztése
Post by: Zozosoft on 2019.April.05. 20:13:33
Már van ilyen is, bár kissé korlátozottan
:smt038

Quote
A DBL-en kívül melyik lenne még hasznos elsősorban?
DBR,DBS,DP2,DP4,DP16

Quote
Ez pontosan hogyan működik? :oops:
update fájlnév; innentől ebbe a kimeneti fájlba ír.
code @ cím; a fájban erre a címre ugrik
De most, hogy nézegetem a leírást (https://github.com/istvan-v/sjasmep/blob/master/sjasm.txt), ha jól látom másképp nevezve meg van már :-)
Quote
FPOS <position>
----
The FPOS directive makes it possible to set the file position to anywhere in the output file.

This example will result in a file with a length of one byte:
  BYTE 0
  FPOS 0
  BYTE 1
  END

In combination with OUTPUT "<filename>",r it is possible to update existing files.
Title: Re: Sjasm fejlesztése
Post by: IstvanV on 2019.April.05. 22:37:12
DBR,DBS,DP2,DP4,DP16

Ezeket is beépítettem, remélhetőleg nem lett hibás a pixel formátumoknál a sok bit forgatás. :)

A HEADER-nél a file végének a címe opcionális lett, ha nincs címke megadva, akkor feltételezi, hogy a forrás végén lett volna.

A DP2, DP4, és DP16 egyébként a DB-re épül, minden eredeti byte egy pixel lesz, de egy sorban csak 128 pixel lehet. Mivel csak az alsó bit(ek)et veszik figyelembe, szöveges formátum is használható, például DP4 "01233210".
Title: Re: Sjasm fejlesztése
Post by: Zozosoft on 2019.April.05. 22:58:07
Szuper!

Jöhetnek nehezebb kérések is? Nem biztos, hogy megoldhatóak :oops:
Title: Re: Sjasm fejlesztése
Post by: IstvanV on 2019.April.05. 23:05:11
Talán van valami, ami még megoldható.
Title: Re: Sjasm fejlesztése
Post by: Zozosoft on 2019.April.05. 23:37:12
Talán van valami, ami még megoldható.
HEADER 4, mint az ASMON-ban?
Első sornak berak egy megfelelő méretű ALLOCATE-t, aztán meg CODE =HEX$ sorokban a kód hexában.
Esetleg ha úgy egyszerűbb, akkor mehetne sima szöveges fájlba is, azt is betölti a Basic.

2-es, 7-es típus? Bár attól tartok itt gondot okoz az, hogy minden címkéről tudni kéne, hogy relatív vagy abszolút érték, ehhez valószínűleg alapjaiban kéne átalakítani a programot.
Title: Re: Sjasm fejlesztése
Post by: IstvanV on 2019.April.06. 00:35:53
2-es, 7-es típus? Bár attól tartok itt gondot okoz az, hogy minden címkéről tudni kéne, hogy relatív vagy abszolút érték, ehhez valószínűleg alapjaiban kéne átalakítani a programot.

Ilyen célra valójában már készült program (https://enterpriseforever.com/programming/easy-relocatable-code-in-basic/msg70156/#msg70156), hasonló trükk beépítése megoldhatónak tűnik, vagy legalábbis a "reloc" bemeneti formátumának az előállítása a fordítást kétszer futtatva a kimeneti file bezárása nélkül.
Title: Re: Sjasm fejlesztése
Post by: Zozosoft on 2019.April.06. 11:57:38
hasonló trükk beépítése megoldhatónak tűnik
Na ez nem lenne rossz!
Title: Re: Sjasm fejlesztése
Post by: IstvanV on 2019.April.06. 15:54:44
Beépítettem a HEADER 2, 4, és 7 támogatását, bár nem sokat teszteltem, mennyire megbízhatóan működnek. Egy egyszerű BASIC program és a régebbi dbasx.xr példa jónak tűnik. Ilyen modulokban nem használható ORG, OUTPUT, vagy FPOS, és BASIC kimenetnél áthelyezhető formátumot igénylő címek sem.
Title: Re: Sjasm fejlesztése
Post by: Zozosoft on 2019.April.06. 17:20:43
Köszi! :smt038
Title: Re: Sjasm fejlesztése
Post by: IstvanV on 2019.April.06. 18:11:31
Még egy kisebb változtatás: a második fordításnál a MODULE használatát a címkék törlésére cseréltem, így már lefordítható olyan forrás, amiben eredetileg is volt MODULE, például az IVIEW.EXT-ből sikerült áthelyezhető változatot készíteni (bár ilyen formátumban 15 másodpercnél tovább tart a betöltése :)).

A BASIC kimenetnél érdemesebb lenne-e 8 byte-ot tárolni egy sorban, az ASMON-hoz hasonlóan, vagy akár 16-ot? A jelenlegi 6 előnye, hogy elfér a képernyőn TEXT 40 módban, viszont a hosszabb sorokkal kisebb lehetne a .bas file. A CODE után a változó névre sem lenne szükség az első sor kivételével.
Title: Re: Sjasm fejlesztése
Post by: Zozosoft on 2019.April.06. 18:42:26
Szerintem nyugodtan lehetnek hosszabb CODE sorok, ha olvasni akarjuk, arra ott az eredeti kód :-)
Title: Re: Sjasm fejlesztése
Post by: Zozosoft on 2019.April.06. 19:18:56
és BASIC kimenetnél áthelyezhető formátumot igénylő címek sem.
Ez esetleg lekezelhető lenne, de lehet, hogy nagyon elbonyolítaná a kód fájlba írását :oops: Viszont lehetővé tenné bonyolultabb rutinok megírását is.
Az elv az, hogy az első CODE változó=HEX$-nél a változó már megkapja a kód kezdőcímét, amit már lehet eltoláshoz számolásához felhasználni, akár már ebben az első CODE-ban is. Csak a kiszámolt érték beillesztése hosszabb kifejezést igényel, mivel a CODE stringet vár.
Példa: CODE =HEX$("CD")&CHR$(MOD(A+100,256))&CHR$((A+100)/256)&HEX$(...
Title: Re: Sjasm fejlesztése
Post by: IstvanV on 2019.April.06. 19:24:36
Szerintem nyugodtan lehetnek hosszabb CODE sorok, ha olvasni akarjuk, arra ott az eredeti kód :-)

Módosítottam, 16 byte lehet egy sorban, és csak az első sorba kerül változónév.
Title: Re: Sjasm fejlesztése
Post by: IstvanV on 2019.April.06. 19:53:01
Bonyolultabb rutinoknál talán használható lehetne a 2-es modul típus:
[attachurl=1]
Code: ZiLOG Z80 Assembler
  1.         header  4
  2. loadmodule:
  3.         halt
  4. .l1:    di
  5.         dec     sp
  6.         dec     sp
  7.         pop     bc
  8.         ei
  9.         ld      de, modbuf - .l1
  10.         ex      de, hl
  11.         add     hl, bc
  12.         ex      de, hl
  13.         push    de
  14.         ld      a, l
  15.         exos    1
  16.         pop     de
  17.         jr      nz, .l2
  18.         push    de
  19.         ld      a, l
  20.         exos    29
  21.         pop     de
  22.         xor     0eeh                    ; .ITYPE
  23.         jr      nz, .l2
  24.         inc     de
  25.         ld      a, (de)
  26.         xor     02h
  27.         jr      nz, .l2
  28.         inc     de
  29.         ld      a, (de)
  30.         inc     de
  31.         add     a, low (0ffffh - (modbufend - modbuf))
  32.         ld      a, (de)
  33.         adc     a, high (0ffffh - (modbufend - modbuf))
  34.         sbc     a, a
  35.         jr      nz, .l2
  36.         dec     de
  37.         dec     de
  38.         dec     de
  39.         ld      a, l
  40.         exos    30
  41. .l2:    ld      h, a
  42.         ld      a, l
  43.         ld      l, h
  44.         exos    3
  45.         ret
  46.  
  47. modbuf:
  48.         dbl     "demo.out"
  49. modbufend       equ     loadmodule + 512
[attachurl=2]
[attachurl=3]    (szerk.: az ALLOCATE mérete helyesen 569 lenne az eredeti betöltőhöz)
[attachurl=4]    (ez ugyan nem a legjobb példa, mert nem EXOS kompatibilis, de egyébként a betöltése működik)
[attachurl=5]
Title: Re: Sjasm fejlesztése
Post by: Zozosoft on 2019.April.06. 20:46:23
Bonyolultabb rutinoknál talán használható lehetne a 2-es modul típus:
Igen, végülis most már tudunk ilyet is csinálni :-) Érdemes lenne a Basic bővítéseknek is utánajárni (azok is 2-es modulban vannak), és akkor új utasításként/függvényként is lehetne rutinokat berakni. Pl lehetne GRACHA bővítőkészlet a sok pókolás helyett.
Title: Re: Sjasm fejlesztése
Post by: IstvanV on 2019.April.07. 16:19:18
Néhány hibát javítottam, és a sjasm.exe kisebb is lett.
Title: Re: Sjasm fejlesztése
Post by: Zozosoft on 2019.April.07. 20:40:45
Lehet kérni egy kész EXE-t?
Title: Re: Sjasm fejlesztése
Post by: IstvanV on 2019.April.07. 21:24:19
Az itt (https://enterpriseforever.com/programozas/sjasm-fejlesztese/msg75435/#msg75435) leírt módon könnyen fordítható, de készíthetek bináris csomagot is, csak az hamar elavulhat, ha még változik valami (például hibák miatt :oops:):

[attachurl=1]
Title: Re: Sjasm fejlesztése
Post by: geco on 2019.April.08. 17:37:37
Lehet kérni egy kész EXE-t?
Ha még nincs meg :)
Title: Re: Sjasm fejlesztése
Post by: IstvanV on 2019.April.10. 13:18:30
Az előző hozzászólásban valójában már van .exe, és Linux verzió is. :) Nem tudom, talált-e valaki hibát. :oops:
Title: Re: Sjasm fejlesztése
Post by: Zozosoft on 2019.April.10. 13:41:42
-E megadásnál lehet több is? Ha igen, akkor az mind külön -E, vagy egy felsorolás?
Title: Re: Sjasm fejlesztése
Post by: Zozosoft on 2019.April.10. 13:57:56
Az előző hozzászólásban valójában már van .exe
Ez lehetséges, hogy csak x64 verzió? :oops:
Title: Re: Sjasm fejlesztése
Post by: IstvanV on 2019.April.10. 14:09:31
-E megadásnál lehet több is? Ha igen, akkor az mind külön -E, vagy egy felsorolás?

Az -E és a -D többször is használható, például -Elabel1=123 -Elabel2=456, csak nem lehet újradefiniálni korábban már megadott azonosítót.

Ez lehetséges, hogy csak x64 verzió? :oops:

A .zip-ben és Geco hozzászólásában található .exe azonos és x64 verzió. De ha azt valaki nem tudja használni, akkor egyszerűen fordítható x86 is.
Title: Re: Sjasm fejlesztése
Post by: Zozosoft on 2019.April.10. 14:22:46
De ha azt valaki nem tudja használni, akkor egyszerűen fordítható x86 is.
Én kérnék egyet ide a munkahelyi gépre.
Title: Re: Sjasm fejlesztése
Post by: IstvanV on 2019.April.10. 15:57:04
[attachurl=1]

A fordítása egyébként nagyon egyszerű, csak erre a csomagra (https://www.dropbox.com/s/a336x3bs1p0gv3t/mingw_w64-x86.7z?dl=1) van szükség (64 biteshez pedig erre (https://www.dropbox.com/s/ex0zxz7e6bmcb9r/mingw_w64-x64.7z?dl=1)), és mingw32-make parancsra.
Title: Re: Sjasm fejlesztése
Post by: Zozosoft on 2019.April.10. 16:19:51
Köszi, működik!
Title: Re: Sjasm fejlesztése
Post by: Zozosoft on 2019.April.11. 12:47:00
Még egy ötlet, amit hasznos lenne, ha meg lehet csinálni:
Olyan értékadás ami egy fájl méretét adná vissza. Ilyesmire gondolok:
prgsize   FSIZE game.prg

  LD DE,...
  LD BC,prgsize
  EXOS 6
Title: Re: Sjasm fejlesztése
Post by: IstvanV on 2019.April.11. 18:48:44
Egyelőre így oldottam meg, nem tudom, ez megfelelő-e:
Code: ZiLOG Z80 Assembler
  1.     fsize   "file.bin"          ; DW fileméret
  2.     fsize   "file.bin", prgsize ; prgsize EQU fileméret
  3.     fsize   "file.bin", bc      ; LD BC, fileméret (DE, HL, vagy SP is lehet)
Hiba esetén a címkés változat -1 értéket ad vissza, a többinél viszont fordítási hiba az eredmény. Talán célszerűbb lenne címkénél is az utóbbi módon kezelni a hibákat, de lehet, hogy hasznos funkció file létezésének a tesztelése?
Title: Re: Sjasm fejlesztése
Post by: Zozosoft on 2019.April.11. 19:25:12
Egyelőre így oldottam meg, nem tudom, ez megfelelő-e:
Teljesen jó!

Quote
lehet, hogy hasznos funkció file létezésének a tesztelése?
Feltételes fordításhoz jó lehet, pl ha nincs betöltőkép, akkor annak töltését ne fordítsa be.
Title: Re: Sjasm fejlesztése
Post by: IstvanV on 2019.April.11. 20:22:35
Az aktuális verzióból készítettem bináris csomagot, ami letölthető innen (https://github.com/istvan-v/sjasmep/releases/tag/v0.39-20190411-2).
Title: Re: Sjasm fejlesztése
Post by: geco on 2019.April.12. 08:31:01
Nem tudom mennyire lenne rá igény, én eddig 2x találkoztam vele, relokálható bináris fordítása, amikor a bináris végén helyezi el az összes címkét, és ha jól emlékszem az épp aktuális értékét, ami az áthelyezéshez szükséges, Symbos használ ilyet, és ha jól emlékszem a Winape tud ilyet.
Title: Re: Sjasm fejlesztése
Post by: IstvanV on 2019.April.12. 14:59:58
Az FSIZE hibásan működött címke kimenetnél áthelyezhető modulban ("Duplicate label" hiba). :oops: Javítottam, de egyelőre csak a forráskódban. Kisebb újdonságként most már támogatja az IX és IY regisztereket is.

Nem tudom mennyire lenne rá igény, én eddig 2x találkoztam vele, relokálható bináris fordítása, amikor a bináris végén helyezi el az összes címkét, és ha jól emlékszem az épp aktuális értékét, ami az áthelyezéshez szükséges, Symbos használ ilyet, és ha jól emlékszem a Winape tud ilyet.

Az EXOS 2 vagy 7 modul egyszerűen konvertálható tetszőleges formátumra, bár ha jól látom, a WinAPE lehetővé teszi a normál és az áthelyezhető kód keverését egy file-on belül, ami problémásabbnak tűnik.
Title: Re: Sjasm fejlesztése
Post by: IstvanV on 2019.April.17. 16:38:59
As we're on the subject :mrgreen: ...what would be really nice :mrgreen:  ...is if ep128emu could read in a symbol table file from sjasm or M80, and then whenever the disassembler window prints an address, attempt to look up the address in the symbol table and print the symbol instead. It won't get it right all the time but it is very useful when it does! :twisted:

Printing symbol names is not implemented yet, but the Git version of ep128emu now supports breakpoint definitions in SjASM export file (.exp) format:
[attachthumb=1]
A string in this format is basically just replaced with the lower 16 bits of the value, the first 4 characters (usually 0000) and the label name are ignored, but it may still be a convenient feature. Additionally, the breakpoint list can include comments, the rest of the line is ignored after a ; or # character.