Enterprise Forever

:HUN => Programozás => BASIC => Topic started by: endi on 2019.September.08. 16:12:30

Title: Gépi kód Basic-ben
Post by: endi on 2019.September.08. 16:12:30
Gondoltam lehetne egy külön topik erről.
Én annak idején jópár játékot csináltam amiben gépi kód volt pl. a sprite kirajzolás. Sajnos ezekből asszem csak a Mutant Test (http://www.ep128.hu/Ep_Games/Leiras/Mutant_Test.htm) maradt meg. Pedig volt egy Dizzy-szerű attr grafikás játék is, meg egy karakteres módú platformjáték is.
Sajnos nem igazán emlékszem már, hogy pl. adatokat hogyan adtam át a gépi kódnak, illetve több adatot.
Meg a memória foglalást is elfelejtettem, bár arra emlékszem hogy pl. a Mutant Testben rendesen Exos-al foglaltam le szegmenseket. :) (Ami amúgy nem volt jellemző a programjaimra haha.)
Title: Re: Gépi kód Basic-ben
Post by: Ferro73 on 2019.September.12. 17:21:18
Akkor 3 kis progit már át lehetne helyezni.
IN A,(0B5h) (https://enterpriseforever.com/programozas/hasznos-kis-basic-programok/?action=dlattach;attach=23751)
JOY(0,1,2) (https://enterpriseforever.com/programozas/hasznos-kis-basic-programok/?action=dlattach;attach=23748)
PRESS FIRE TO START (https://enterpriseforever.com/programozas/hasznos-kis-basic-programok/?action=dlattach;attach=23749)
Kérdés.
Ilyenre gondoltál.
Vagy mint a Spectrum-nál 
1 REM!äđwdsÄ[]Ä<-<>#
2 RANDOMIZE USR(4813,0)

Készül karakter tábla LOAD, SAVE. Ehhez lenne pár kérdés.
Title: Re: Gépi kód Basic-ben
Post by: gflorez on 2019.September.13. 10:32:00
Különböző Enterprise konfigurációinál a kezdőcímek eltérőek. Használja jobban az "USR(CODE+2,CODE+2)" -t, ha azt akarja, hogy a rutin tisztában legyen a memória helyzetével, akkor továbbadhatja az operandusokat poke: "POKE CODE,JOY" or "DIRECTION=PEEK(CODE+1).

----------------

On different Enterprise configurations the start addresses are different. Better use "USR(CODE+2,CODE+2)", if you want the routine be aware of its memory position, then you can pass the operands as pokes: "POKE CODE,JOY" or "DIRECTION=PEEK(CODE+1).
Title: Re: Gépi kód Basic-ben
Post by: Ferro73 on 2019.September.13. 16:15:22
Igen.

De akkor már nem nincs ALOCATE HEX$...
És ilyenkor a programozásban nem használható JP ..., CALL ... direkt cimzés

Viszont ha JP.. CALL.. akarunk használni akkor:
Code: [Select]
RESTORE DATA
 FOR X=1 TO...
  READ A
  POKE X+y,A
 NEXT
 RANDOMIZE USR(Y,0)
 END
DATA
 DATA 1,23,42,... ,201
Title: Re: Gépi kód Basic-ben
Post by: gflorez on 2019.September.13. 19:27:28
A JR és a JR Nc képes JP és CALL szimulációra. A + -128 tartományt kibővítheti egy vagy több közbenső címkével:


JR and JR Nc can simulate JP and CALL. You can extend the +-128 range with one or more intermediate labels:

Code: [Select]
START:  JR NZ, CALC1
           -----
           code less than 128 bytes
           JR CONT
           -----
CALC1:  JR CALC
           -----
CONT:   more code, less than 128 bytes
                      -----
CALC:   subroutine code
           RET

Title: Re: Gépi kód Basic-ben
Post by: gflorez on 2019.September.13. 20:53:36
Sajnálom, elfelejtettem a visszatérést ... Újabb közbenső ugrás.

-----------

Sorry, I forgot the return... Another intermediate jump.
Title: Re: Gépi kód Basic-ben
Post by: Zozosoft on 2019.September.13. 21:00:04
Vagy lehet használni áthelyezhető modult, és akkor nincs gond a címekkel.
Title: Re: Gépi kód Basic-ben
Post by: gflorez on 2019.September.13. 22:28:35
Rendben, akkor ... ehhez szükséges egy kézikönyv. Kérem.

És ... ne feledje, hogy megígérte, hogy átvizsgálja az Enterprise HISOFT DEVPAC kézikönyvet. Biztos vagyok benne, hogy van egy rész az áthelyezhető kódról.

---------------

Ok, then... a manual of how to do it is needed. Please.

And... remember that you promised to scan the Enterprise HISOFT DEVPAC manual. I am sure that there is a section about relocatable code in it.
Title: Re: Gépi kód Basic-ben
Post by: Ferro73 on 2019.September.13. 23:25:05
Minden  JR ... helyettesíthető JP ... vel.
De nem minden JP ... helyettesíthető JR ... vel.

Vagy lehet használni áthelyezhető modult, és akkor nincs gond a címekkel.
Igen.
És pl.:
Code: [Select]
1234  EXT ":JOY"A visszatérő értékekhez, hogy jutunk hozzá?
Title: Re: Gépi kód Basic-ben
Post by: gflorez on 2019.September.13. 23:56:09
Igen, a feltételes JP-nek minden lehetséges zászlókombinációja van, míg a JR-nek csak C, NC, Z és NZ van, de a többi jelzőt PUSH AF, POP BC paranccsal lehet kódolni, majd beállítani vagy visszaállítani a Carry-t, a egy bit a C. nyilvántartásban

--------------------------

Yes, conditional JP has all possible flag combinations, while  JR only has C, NC, Z and NZ, but the other flags can be parsed on the code with PUSH AF, POP BC,  and then set or reset Carry flag depending on the status of a bit on register C.
Title: Re: Gépi kód Basic-ben
Post by: Ferro73 on 2019.September.14. 00:08:53
Nem arra gondoltam. De az is igaz.
Hanem a JR ... @+-128
Míg egy JP ... 0-65535
Title: Re: Gépi kód Basic-ben
Post by: gflorez on 2019.September.14. 00:33:03
Igen, ezt értem: +-128 egy kicsit rövid távolság, de közbenső címkék használatával ez a távolság megduplázható vagy megháromszorozható, miközben csak kissé bonyolultabbá teszi. Elég egy kis alprogramhoz.

----------------------------------

Yes, that is what I was meaning, +-128 is a little short distance, but by the use of intermediate labels, that distance can be doubled or tripled while making it only slightly more complicate. Enough for a little subroutine.


Code: [Select]
START:     JR NZ, CALC1
           -----
RETURN:    code less than 128 bytes
           JR CONT
           -----
CALC1:     JR CALC   \
RETURN1:   JR RETURN /   Intermediate labels
           -----
CONT:      more code, less than 128 bytes
           -----
CALC:      subroutine code
           JR RETURN1
Title: Re: Gépi kód Basic-ben
Post by: Ferro73 on 2019.September.14. 00:42:57
Ennyi erővel a CALL-t is helyettesíthető.
Title: Re: Gépi kód Basic-ben
Post by: Ferro73 on 2019.September.14. 20:33:36
Következő
Karakter horizontális flip:
CALL USR(RUTIN,CHAR_num) ;egy adott karakter
CALL USR(RUTIN,-1)             ;az összes karakter

Zip tartalma .BAS .ASM

Title: Re: Gépi kód Basic-ben
Post by: Ferro73 on 2019.September.19. 19:49:16
A karakter tábla mentés/ betöltés lehet:
Code: [Select]
  OPEN #106:"KARMTRIX.BIN" ACCESS INPUT
  CALL USR(karload,106)
  CLOSE #106

Így tetszés szerinti lehet a fájlnév és a csatorna szám.

Vagy lehet használni áthelyezhető modult, és akkor nincs gond a címekkel.

Kérdés BASIC bővítményekhez is használható.
Mert akkor lehetne csinálni LOADERt /include/ majd a játék ami már tartalmazza a bővítményeket meghívó utasitásokat.