Enterprise Forever
:HUN => Programozás => BASIC => Topic started 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.)
-
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.
-
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).
-
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:
RESTORE DATA
FOR X=1 TO...
READ A
POKE X+y,A
NEXT
RANDOMIZE USR(Y,0)
END
DATA
DATA 1,23,42,... ,201
-
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:
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
-
Sajnálom, elfelejtettem a visszatérést ... Újabb közbenső ugrás.
-----------
Sorry, I forgot the return... Another intermediate jump.
-
Vagy lehet használni áthelyezhető modult, és akkor nincs gond a címekkel.
-
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.
-
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.: 1234 EXT ":JOY"
A visszatérő értékekhez, hogy jutunk hozzá?
-
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.
-
Nem arra gondoltam. De az is igaz.
Hanem a JR ... @+-128
Míg egy JP ... 0-65535
-
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.
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
-
Ennyi erővel a CALL-t is helyettesíthető.
-
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
-
A karakter tábla mentés/ betöltés lehet:
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.