VBXE + Action! Wczytywanie obrazu w overlay.

No i jest, pierwszy eksperyment w Action! + VBXE: obrazek w tle:

set 14=$8000
set $491=$8000

include "H1:RUNTIME.ACT"

proc CIOVE=$E4DF(byte areg, xreg)

proc delay()
 card i
 for i=0 to 30000 do od
return

proc main()

 byte vc=$D640
 int i byte memcont=$D65E, membank=$D65F
 byte psel=$D645, csel=$D644, cr=$D646, cg=$D647, cb=$D648
 byte xdla0=$D641, xdla1=$D642, xdla2=$D643
 byte blt0=$D650, blt1=$D651, blt2=$D652, bltst=$D653
 byte bkg=710, curinh=752
 byte iocb1cmd=850
 card iocb1buf=852, iocb1len=856

 byte array xdl=[98 136 219 0 2 0 64 1 17 223]

 ;clrscr blitterlist
 byte array clrscr=
   [ 0 0 0  ;src addr
     0 0    ;src step y
     0      ;src step x
     0 0 0  ;dst addr ($0000 up)
     64 1   ;dst step y (320)
     1      ;dst step x
     63 1   ;width (320-1)
     239    ;height (240-1)
     0      ;and mask
     0      ;xor mask
     0      ;collision and mask
     0      ;zoom
     0      ;pattern
     0 ]    ;control

 if vc<>$10 then
  printe("No VBXE FX found")
  delay()
  [$4C $C2AA] ;warm reset
 fi

 memcont=$A8  ;memac at $A000, cpu access
 membank=128+20
 moveblock($A000, xdl, 10)
 xdla0=0 xdla1=64 xdla2=1

 moveblock($A100, clrscr, 21)
 blt0=0 blt1=65 blt2=1
 bltst=1 ;blitter start will clear scr
 while bltst <> 0 do od ;let's wait till
                        ;blitter finishes
 graphics(0)
 bkg=0 curinh=1 put(31)

 close(1)
 open(1,"D1:AN.PAL",4,0)
 psel=1 csel=0
 for i=0 to 255 do
  cr=getd(1) cg=getd(1) cb=getd(1)
 od
 close(1)

 open(1,"D1:AN.PIC",4,0)
 iocb1cmd=7
 iocb1buf=$A000
 iocb1len=$1000

 for i=2 to 18 do
  membank=128+i
  CIOVE(0,$10)
 od
 close(1)

 vc=3
 printe("Hej czesc! Daj cos zjesc!")
 do od
return

test

Więcej informacji w tym wątku:

http://atarionline.pl/forum/comments.php?DiscussionID=2623&page=1#Item_15

Z moich przemyśleń dodam tylko uwagę na temat adresu overlay w xdl. Adres overlay w tym przykładzie to 0 2 0, czyli 2^9=512. Obrazek kopiujemy od adresu $2000=8192 i jeśli ustawiłbym  overlay na 0 32 0 to obraz wyświetlany byłby od samej góry, brzydko trochę, nie? Przy pierwszym podejściu ustawiałem ten adres na 0 0 0 i zastanawiałem się, czemu obrazek jest przesunięty? Po dwóch tygodniach naszła mnie właściwa myśl… Otóż, adres overlay musi być taki, aby 8192-adres było podzielne przez 320 (tada!). Czyli np. jeśli chcemy przed obrazkiem 24 linie, to 8192-24*320=512. W powyższym przykładzie blitter zeruje pamięć od $0000 więc mamy ładną ramkę przed i po obrazku.

Skomentuj

Wprowadź swoje dane lub kliknij jedną z tych ikon, aby się zalogować:

Logo WordPress.com

Komentujesz korzystając z konta WordPress.com. Log Out / Zmień )

Zdjęcie z Twittera

Komentujesz korzystając z konta Twitter. Log Out / Zmień )

Facebook photo

Komentujesz korzystając z konta Facebook. Log Out / Zmień )

Google+ photo

Komentujesz korzystając z konta Google+. Log Out / Zmień )

Connecting to %s