Welcome, Guest. Please login or register.


Author Topic: HiSoft Pascal (Read 87808 times)

Offline IstvanV

  • EP addict
  • *
  • Posts: 4822
Re: HiSoft Pascal
« Reply #300 on: 2017.May.15. 13:55:50 »
[ Guests cannot view attachments ]

[ Guests cannot view attachments ]
[ Guests cannot view attachments ]
[ Guests cannot view attachments ]
[ Guests cannot view attachments ]
[ Guests cannot view attachments ]     (teszt program)
[ Guests cannot view attachments ]     (EXOS verzió)

A Fill rutin nem jó (lassabb az EXOS változatnál), a többi gyorsult.

Offline Lacika

  • EP addict
  • *
  • Posts: 3191
  • Country: hu
    • http://www.ep128.hu
Re: HiSoft Pascal
« Reply #301 on: 2017.May.15. 21:22:46 »
Mi a különbség a Plot és a PlotC között? Plot-nál paraméterben nincs csatorna. Ha jól látom, az i paraméter a csatornaszám, de az ink-nél csak i paraméter van(?)
Az Rnd8Init, Rnd8, UpdateLpt mit csinál?

Offline Lacika

  • EP addict
  • *
  • Posts: 3191
  • Country: hu
    • http://www.ep128.hu
Re: HiSoft Pascal
« Reply #302 on: 2017.May.15. 21:23:55 »
A VSyncWait-ból kérhetek INLINE-os verziót, amit bele lehetne rakni a GRAPH.HPU-ba? :oops:

Offline IstvanV

  • EP addict
  • *
  • Posts: 4822
Re: HiSoft Pascal
« Reply #303 on: 2017.May.16. 00:11:30 »
Mi a különbség a Plot és a PlotC között? Plot-nál paraméterben nincs csatorna. Ha jól látom, az i paraméter a csatornaszám, de az ink-nél csak i paraméter van(?)
Az Rnd8Init, Rnd8, UpdateLpt mit csinál?

A PlotC-nél paletta színt lehet megadni, a Plot a korábban beállított színt használja. Az 'i' paraméter a többinél is szín, csatornaszám nincs. Az UpdateLPT az LPT-t frissíti a beállított színekkel, a palettát forgató PaletteRL és PaletteRR ezt automatikusan megteszi. Az Rnd8 egszerű véletlenszám generátor, 8 bites értéket ad vissza a második paraméterrel végzett AND művelet után, illetve az elsőnél mindig kisebbet (pl. Rnd8(5,7) = 0 és 4 közötti érték).

A VSyncWait-ból kérhetek INLINE-os verziót, amit bele lehetne rakni a GRAPH.HPU-ba? :oops:

Code: Pascal
  1. procedure VSyncWait(n:integer);
  2. begin
  3.   inline(#DD,#46,#02,#0E,#00,#DB,#B4,#E6);
  4.   inline(#10,#B9,#4F,#30,#F8,#10,#F6);
  5. end;
« Last Edit: 2017.May.16. 19:08:02 by IstvanV »

Offline Lacika

  • EP addict
  • *
  • Posts: 3191
  • Country: hu
    • http://www.ep128.hu
Re: HiSoft Pascal
« Reply #304 on: 2017.May.16. 18:29:57 »
 A VSYNCWAIT hogy működik? Konkrétan a Bomber Plus bármilyen paraméterrel lefagy.

Offline IstvanV

  • EP addict
  • *
  • Posts: 4822
Re: HiSoft Pascal
« Reply #305 on: 2017.May.16. 19:07:37 »
A C9 (RET) nem kell a végén, javítottam. :oops:

Offline Lacika

  • EP addict
  • *
  • Posts: 3191
  • Country: hu
    • http://www.ep128.hu
Re: HiSoft Pascal
« Reply #306 on: 2017.May.16. 21:02:06 »
A C9 (RET) nem kell a végén, javítottam. :oops:

Ha a paraméter 0, mennyit vár? Akkor a leglassabb...
Úgy tűnik, hogy a sebesség így is változik a különböző órajeleken, ez lehetséges?
« Last Edit: 2017.May.16. 21:12:41 by Lacika »

Offline IstvanV

  • EP addict
  • *
  • Posts: 4822
Re: HiSoft Pascal
« Reply #307 on: 2017.May.16. 22:35:29 »
Ha a paraméter 0, mennyit vár? Akkor a leglassabb...

8 bites paramétert használ, a 0 256-nak felel meg. Módosítani lehetne 16 bitesre is.

Quote
Úgy tűnik, hogy a sebesség így is változik a különböző órajeleken, ez lehetséges?

Elvileg csak a NICK órajelétől és az LPT-től függ, de ha a hívások között futó kód vagy az EXOS megszakítás kezelése lassú, akkor elveszhetnek megszakítások, és ilyenkor a CPU sebességétől is függhet az időzítés.

Offline Lacika

  • EP addict
  • *
  • Posts: 3191
  • Country: hu
    • http://www.ep128.hu
Re: HiSoft Pascal
« Reply #308 on: 2017.May.16. 23:35:43 »
A GRAPH16.HPU 16 színű 40x20-as méretű 101-es csatornát használ?
Nem semmi a kőrrajzoló rutin, pedig az EP körrajzoló rutinja alapból is gyorsnak számított. :)

Offline IstvanV

  • EP addict
  • *
  • Posts: 4822
Re: HiSoft Pascal
« Reply #309 on: 2017.May.17. 09:49:36 »
A GRAPH16.HPU 16 színű 40x20-as méretű 101-es csatornát használ?

Nem EXOS csatorna, lefoglal egy szegmenst és belapozza a 3. lapra. Tehát a Pascal program is közvetlenül hozzáférhet a video adathoz #C000 kezdőcímtől. A képernyő mérete 40x22 karakter (160x198 pixel), ez a legnagyobb ami egy szegmensen elfér. Valójában lehetne 204 soros is, de az nem egész számú karakter. A méret módosítható a graph16.s file elején.

Quote
Nem semmi a kőrrajzoló rutin, pedig az EP körrajzoló rutinja alapból is gyorsnak számított. :)

Kört valamivel egyszerűbb rajzolni, mint ellipszist. Bár itt hátránya is van, mert valójában 4 színű felbontást használ, és ez növeli a pixelek számát. Pascal változat:
[ Guests cannot view attachments ]

Offline Lacika

  • EP addict
  • *
  • Posts: 3191
  • Country: hu
    • http://www.ep128.hu
Re: HiSoft Pascal
« Reply #310 on: 2017.May.17. 22:41:46 »
Az UpdateLPT mit csinál?

Offline IstvanV

  • EP addict
  • *
  • Posts: 4822
Re: HiSoft Pascal
« Reply #311 on: 2017.May.17. 22:50:27 »
Az UpdateLPT mit csinál?

Csak a Color használata után van jelentősége, az LPT-t frissíti a módosított színekkel. Bár lehet, hogy célszerűbb lenne automatikusan hívni, és külön eljárást létrehozni a teljes paletta állítására.

Offline IstvanV

  • EP addict
  • *
  • Posts: 4822
Re: HiSoft Pascal
« Reply #312 on: 2017.May.20. 21:25:08 »
Néhány újabb eljárás (még fejlesztés alatt):
[ Guests cannot view attachments ]
[ Guests cannot view attachments ]
[ Guests cannot view attachments ]
[ Guests cannot view attachments ]

Egyszerű példák:
[ Guests cannot view attachments ]
[ Guests cannot view attachments ]
[ Guests cannot view attachments ]

Offline Lacika

  • EP addict
  • *
  • Posts: 3191
  • Country: hu
    • http://www.ep128.hu
Re: HiSoft Pascal
« Reply #313 on: 2017.May.20. 22:56:22 »
Néhány újabb eljárás (még fejlesztés alatt):

Egyre érdekesebb!
Majd beraknám a Hisoft Pascal ismertetőbe ha kész, bár az új sprite és egérkezelő utasítások annyira már nem egyértelműek nekem. Ez az egérkezelés gyorsabb, mint ami itt van?

Offline IstvanV

  • EP addict
  • *
  • Posts: 4822
Re: HiSoft Pascal
« Reply #314 on: 2017.May.21. 00:21:37 »
Ez az egérkezelés gyorsabb, mint ami itt van?

Nem igazán gyors, elsősorban kis méretű. Lehet, hogy a Bricky Prise-ban használthoz hasonló megoldásra cserélem, ami nem méretre, hanem sebességre optimalizált.

Majd beraknám a Hisoft Pascal ismertetőbe ha kész, bár az új sprite és egérkezelő utasítások annyira már nem egyértelműek nekem.

Az új eljárások rövid leírása (még változhatnak):

procedure Palette(c0,c1,c2,c3,c4,c5,c6,c7:integer);

Paletta beállítása, az LPT-t is frissíti.

function GetPixel(x,y:integer):integer;

Pixel lekérdezése a megadott pozícióban, a visszatérési érték a szín (0..15), vagy -1 érvénytelen koordináták esetén.

procedure SpriteInit(p,s,n,c:integer);

Sprite inicializálása.

p: munkaterület kezdőcíme (n * 504 + 128 byte). Az első 128 byte a rajzoláskor mentett hátteret tárolja, de ezt célszerűbb lenne külön paraméterként megadni, hogy több sprite is használhassa ugyanazokat az animációkat. A memóriaigényt is csökkenteni lehetne, jelenleg minden animáció fázisból külön eltolt változat is készül, és mindkettőhöz maszk, így lesz összesen 6 * 21 * 4 = 504 byte
s: forrás adat, az inicializálás után már nincs rá szükség, felülírható (n * 126 byte, egy sprite 6 byte széles és 21 pixel magas, az utolsó oszlop nem használt, tehát 11x21 lehet a méret)
n: animáció fázisok száma
c: átlátszó szín a forrás adatban (0..15)

function SpriteDraw(p,n,x,y:integer):integer;

Sprite megjelenítése, a 'p' paraméter ugyanaz, mint a SpriteInit-nél, az 'n' pedig az animáció fázis 0 és a korábban megadott n - 1 között. Érvénytelen koordináták esetén nem jelenik meg semmi. Az 'n'-hez 128-at adva engedélyezett a háttérrel való ütközés vizsgálata, ami lassabb, ilyenkor a visszatérési érték a háttér takarásban levő részei között végzett OR művelet eredménye, egyébként 0.

procedure SpriteClr(p:integer);

Korábban megjelenített sprite törlése, visszaállítja a mentett hátteret. Több sprite esetén ezt a műveletet fordított sorrendben kell végezni.

procedure IRQDisable;
procedure IRQEnable;


Az EXOS megszakítás kezelésének tiltása/engedélyezése a 0038h cím felülírásával.

function GetKey(n:integer):integer;

Billentyű lekérdezése, n = mátrix pozíció (sor * 8 + oszlop + 128 ha külső joystick). 0-t ad vissza ha a billentyű nincs lenyomva, egyébként -1-et.

function ReadMouse:integer;

EnterMice kompatibilis egér lekérdezése, 0 ha sikeres volt, -1 ha nincs egér. Frissíti az alábbi függvények számára a tárolt állapotot.

procedure ResetMouse(x,y,w:integer);

Egér koordináták beállítása, a 'w' a görgetés pozíciója, ami valójában csak 8 bites.

function GetMouseX:integer;

Aktuális X pozíció, előjeles 16 bites érték, 16 színű módban kétszeres felbontású.

function GetMouseY:integer;

Aktuális Y pozíció.

function GetMouseW:integer;

Görgetés pozíció, előjeles 8 bites érték 16 bitre kiegészítve.

function MouseBtn(n:integer):integer;

Egér gomb (n = 0..3) aktuális állapota, -1 ha le van nyomva, egyébként 0. Az n-hez 4-et hozzáadva "élérzékeny" módon figyelhetők a gombok, ilyenkor a függvény csak a lenyomás eseményét jelzi.