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
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.