TIME FOR 100 (OR 1000, SPECIFIED) LOOPS EXPRESSED IN 1/200 SECONDS
IN ST LOW ON ATARI STE - FS = WHOLE SCREEN 1/2 = ONLY 100 FIRST LINES (16000) X NOLOOP LOOP ITERATION AVOIDED LIST OF CARD ... FOR 1 LINE (160O)
What's important ?
TEST WITH COMPILED CODE WITH GFA COMPILER 3.6 TT 1993
I NOTICE LITTLE DIFFERENCES OF TIME BETWEEN 2 EXECUTIONS... STRANGE OR...MAYBE...
DUFFERENCIES WITH CARDS BETWEEN BLITTER AND NOT BLITTER, LITTLE TOUGH, AS BLITTER SHOULD NOT CHANGE ANYTHING FOR CARD....
100 VSYNC = 400 /200 sec = 2 sec > VSYNC = 0.02 or 50 * VSYNC = 1 sec : way of test doesn't seem wrong
100x LOOP, TIMER access and sub are not significative (less than 1/200s)
PSET 4.5 X FASTER THANT PLOT !
PSET WITH CARD AND ADRE & DECA PRECALCULATED => 9.4 FASTER THAN PSET ! PRECALCS RULES ! =D
WITHOUT PRECALCS, IT S REALLY SLOWER THAN PSET BUT FASTER THAN PLOT...
PTST 3X FASTER THAN POINT LINE A MAKE A GREAT SPEED DIFFERENCE WITH VDI ... NVDI NOT FRIENDLY THOUGH
USING LONG TO CLEAR MEMORY IS VERY VERY VERY SLOW ! TEST IS NOT CORRECT, I ERASE ON "LONG FOR TWO" TEST SHOULD BE 2 X SLOWER.
WITH ONE LOOP PER LINE (160 o), BMOVE IS ABOUT 5X FASTER ON A WHOLE SCREEN !! SO LONG OR CARD ONLY FOR FEW WORDS... WHEN NO CHOICE...
WHAT'S REALLY AMAZING IS THE SAME TEST WITH CARD ONLY FOR ONE PLANE : IT'S 5X SLOWER THANG LONG, TO ERASE ONLY ONE BIT PLANE !!!!
WHAT'S WRONG ?!
BMOVE 32000 IS FASTER THAN CLS WITHOUT BLITTER (22%), BUS SLOWER WITH BLITTER (53%).
Testing if Stf or Ste For HeAVY LOOPS ? STF AND STE VERSION OF PRG. THE DIFFERENCE IS VERY IMPORTANT !
ON STF (OR TT ?), SPUT IS EVEN FASTER THAN CLS ! ABOUT SAME TIME AS BMOVE.
ALINE IS 7% FASTER THAN LINE THAT MAKES A REAL DIFFERENCE.
H LINE IS FAR SPEEDER SO IF HORYZONTAL... (12.55X SPEEDER THAN ALINE !)
RCCOPY ALWAYS USE 4 PLANES. AND HERE, IT'S ABOUT 4X FASTER TO USE IT WITH BLITTER TNAH WITHOUT ! A ENORMOUS DIFFERENCE...
ABOUT PUT, THE DIFFERENCE ABOUT THE SAME (3.86).
WITHOUT BLITTER, PUT AT 5.8 IS VERY SLOWER THAN PUT 0,0 (NO OFFSET) : ABOUT 45% ! SO... PRINTING AT X MOD 16 AND WITHOUT Y MUL...
RC COPY IN MODE 0 (TO ERASE) IS 3.89X FASTER WITH BLITTER BUT ABOUT 2 TIMES SLOWER THAN CLS AND 20% SLOWER THAN BMOVE ON WHOLE SCREEN.
SPUT WITH OR WITHOUT B DO NOT CHANGE.
TEXT IS 3X SPEEDER WITH B !
BITBLT IS ABOUT 4X FASTER WITH B.
LA BITBLT WITH 2 OR 4 PLANES COST THE SAME TIME ! ERROR UN PROG ?
LA BITBLT 1 PLANE 30X FASTER WITHOUT B AND FASTER THAT WITH B !! ANOTHER MISTAKE FROM ME ?! OF COURSE, BUT WHERE ?!
WITH B - LA BITBLT VS VDI BIT BLT - LA 4PL 2.12 X - LA 2PL 1.19 X - LA 1PL 1.34X. ONE MORE TIME LINEA MAKE A IMPORTANT DIFFERENCE. AS NVDI IS NOT IN ST RAM...
VDI BITBLT 1PL >1.63X> 2 PL >1.79X> 4PL 1PL ABOUT 2.91X FASTER THANF 4 PL
PBOX/ARECT 4.3X/6.78X FASTER WITH B LA MAKES THE DIFFERENCE AGAIN...
ARECT 88% FASTER THAN PBOX WITH B
POLYFILL 4.6% FASTER WITH B LOW DIFFERENCE
APOLY SLOWER THAN POLYFILL BY 19 % !
APOLY... SOMEBODY CAN HELP ?
TO CONTINUE...
TEST RESULTS :
WITH BLITTER
ITERATION AVOIDED LIST OF CARD ... FOR 1 LINE (160O)
NOTHING BUT THE LOOP, sub and timer access 0
VSYNC :399
1000 LOOPS PLOT 12,13 :132
1000 LOOPS PSET 12,13,15 :28
1000 LOOPS PSET WITH CARD ADRE DECA PRECA 12,13 :3
1000 LOOPS a&=POINT(12,13) :83
1000 LOOPS a&=PTST(12,13) :28
FS LONG 4PL X NOLOOP :916
FS CARD=0 1 plan X NOLOOP :91699
FS CARD=CARD FOR COPY 1 PLANE X NOLOOP :92133
BMOVE :374
1000 LOOPS ALINE 0 0 319 199 :1243
1000 LOOPS HLINE 0 319 99 : 99
1000 LOOPS LINE 0 0 319 199 :1329
BLITTER ON
CLS :244
SPUT :375
FS RCCOPY :449
PUT 5,8 1/2 :237
PUT 0,0 1/2 :230
RCCOPY MODE 0 1/2 :228
LA BITBLT 1PL 1/2 :32
LA BITBLT 2PL 1/2 :59
LA BITBLT 4PL 1/2 :59
VDI BITBLT 4PL 1/2 :125
VDI BITBLT 2PL 1/2 :70
VDI BITBLT 1PL 1/2 :43
TEXT DEFAULT :359
PBOX 0 0 159 99 :120
ARECT 0 0 159 99 :64
POLYFILL 0 0 79 99 159 10 :876
APOLY TO 0 0 79 99 159 10 : 1039
END OF TEST
WITHOUT BLITTER
NOTHING BUT THE LOOP, sub and timer access 1
VSYNC :399
1000 LOOPS PLOT 12,13 :132
1000 LOOPS PSET 12,13,15 :28
1000 LOOPS PSET WITH CARD ADRE DECA PRECA 12,13 :3
1000 LOOPS a&=POINT(12,13) :83
1000 LOOPS a&=PTST(12,13) :28
FS LONG 4PL X NOLOOP :916
FS CARD=0 1 plan X NOLOOP :91627
FS CARD=CARD FOR COPY 1 PLANE X NOLOOP :92061
BMOVE :374
1000 LOOPS ALINE 0 0 319 199 :1243
1000 LOOPS HLINE 0 319 99 : 99
1000 LOOPS LINE 0 0 319 199 :1329
BLITTER OFF
CLS :455
SPUT :375
FS RCCOPY :1765
PUT 5,8 1/2 :1826
PUT 0,0 1/2 :889
RCCOPY MODE 0 1/2 :887
LA BITBLT 1PL 1/2 :8
LA BITBLT 2PL 1/2 :242
LA BITBLT 4PL 1/2 :241
VDI BITBLT 4PL 1/2 :488
VDI BITBLT 2PL 1/2 :252
VDI BITBLT 1PL 1/2 :134
TEXT DEFAULT :1080
PBOX 0 0 159 99 :513
ARECT 0 0 159 99 :434
POLYFILL 0 0 79 99 159 10 :916
APOLY TO 0 0 79 99 159 10 : 1067
END OF TEST
SOURCE :
Source following to see how it was made. May it help someone.
Thers some problem with BITBLT use. It change the array between two calls ? Does anyone know what is changed ?
- Code: Tout sélectionner
' SPEED TEST OF MOVE MEMORY & ERASE SCREEN WAYS
' 1.9 062011 HYLST
' 100 LOOP with TIMER 1/200 e sec
RESERVE 200000
OUT 4,18
sup%=GEMDOS(32,L:0)
OPEN "o",#1,"testblit.txt"
PRINT #1;"SPEED TEST OF MOVE MEMORY & ERASE SCREEN WAYS WITHOUT THEN WITH BLITTER"
PRINT #1;"TIME FOR 100 (OR 1000, SPECIFIED) LOOPS EXPRESSED IN 1/200 SECONDS"
PRINT #1;"IN ST LOW ON ATARI STE - FS = WHOLE SCREEN 1/2 = ONLY 100 FIRST LINES (16000) X NOLOOP LOOP ITERATION AVOIDED LIST OF CARD ... FOR 1 LINE (160O)"
CLS
SGET a$
a%=V:a$
xb%=XBIOS(2)
t%=TIMER
FOR t&=0 TO 99
NEXT t&
t%=TIMER-t%
PRINT #1;"NOTHING BUT THE LOOP, sub and timer access ";t%
VSYNC
t%=TIMER
FOR t&=0 TO 99
VSYNC
NEXT t&
t%=TIMER-t%
PRINT #1;"VSYNC :";t%
' ~INP(2)
t%=TIMER
FOR t&=0 TO 999
PLOT 12,13
NEXT t&
t%=TIMER-t%
PRINT #1;"1000 LOOPS PLOT 12,13 :";t%
' ~INP(2)
t%=TIMER
FOR t&=0 TO 999
PSET 12,13,15
NEXT t&
t%=TIMER-t%
PRINT #1;"1000 LOOPS PSET 12,13,15 :";t%
' ~INP(2)
x&=12
y&=13
adrx&=AND(SHR(x&,1),65528)
adry&=MUL(160,y&) ! could preprecalc x160 if realtime sure...
adre%=ADD(xb%,ADD(adrx&,adry&))
dec%=SHR(32768,(x& AND &HF))
t%=TIMER
FOR t&=0 TO 999
CARD{adre%}=CARD{adre%} OR dec%
NEXT t&
t%=TIMER-t%
PRINT #1;"1000 LOOPS PSET WITH CARD ADRE DECA PRECA 12,13 :";t%
' ~INP(2)
t%=TIMER
FOR t&=0 TO 999
a&=POINT(12,13)
NEXT t&
t%=TIMER-t%
PRINT #1;"1000 LOOPS a&=POINT(12,13) :";t%
' ~INP(2)
t%=TIMER
FOR t&=0 TO 999
a&=PTST(12,13)
NEXT t&
t%=TIMER-t%
PRINT #1;"1000 LOOPS a&=PTST(12,13) :";t%
' ~INP(2)
xbe%=xb%+32000-8
t%=TIMER
FOR t&=0 TO 99
FOR e%=xb% TO xbe% STEP 160
LONG{e%}=0
LONG{e%+4}=0
LONG{e%+8}=0
LONG{e%+12}=0
LONG{e%+16}=0
LONG{e%+20}=0
LONG{e%+24}=0
LONG{e%+28}=0
LONG{e%+32}=0
LONG{e%+36}=0
LONG{e%+40}=0
LONG{e%+44}=0
LONG{e%+48}=0
LONG{e%+52}=0
LONG{e%+56}=0
LONG{e%+60}=0
LONG{e%+64}=0
LONG{e%+68}=0
LONG{e%+72}=0
LONG{e%+76}=0
LONG{e%+80}=0
LONG{e%+84}=0
LONG{e%+88}=0
LONG{e%+92}=0
LONG{e%+96}=0
LONG{e%+100}=0
LONG{e%+104}=0
LONG{e%+108}=0
LONG{e%+112}=0
LONG{e%+116}=0
LONG{e%+120}=0
LONG{e%+124}=0
LONG{e%+128}=0
LONG{e%+132}=0
LONG{e%+136}=0
LONG{e%+140}=0
LONG{e%+144}=0
LONG{e%+148}=0
LONG{e%+152}=0
LONG{e%+156}=0
NEXT e%
NEXT t&
t%=TIMER-t%
PRINT #1;"FS LONG 4PL X NOLOOP :";t%
' ~INP(2)
fs%=xb%+32000-4
t%=TIMER
FOR t&=0 TO 99
FOR e%=xb% TO xbe% STEP 160
CARD{e%}=0
CARD{e%+8}=0
CARD{e%+16}=0
CARD{e%+24}=0
CARD{e%+32}=0
CARD{e%+40}=0
CARD{e%+48}=0
CARD{e%+56}=0
CARD{e%+64}=0
CARD{e%+72}=0
CARD{e%+80}=0
CARD{e%+88}=0
CARD{e%+96}=0
CARD{e%+104}=0
CARD{e%+112}=0
CARD{e%+120}=0
CARD{e%+128}=0
CARD{e%+136}=0
CARD{e%+144}=0
CARD{e%+152}=0
NEXT e%
NEXT t&
PRINT #1;"FS CARD=0 1 plan X NOLOOP :";t%
' ~INP(2)
t%=TIMER
FOR t&=0 TO 99
FOR e%=xb% TO fs% STEP 160
CARD{e%}=CARD{e%}
CARD{e%+8}=CARD{e%+8}
CARD{e%+16}=CARD{e%+16}
CARD{e%+24}=CARD{e%+24}
CARD{e%+32}=CARD{e%+32}
CARD{e%+40}=CARD{e%+40}
CARD{e%+48}=CARD{e%+48}
CARD{e%+56}=CARD{e%+56}
CARD{e%+64}=CARD{e%+64}
CARD{e%+72}=CARD{e%+72}
CARD{e%+72}=CARD{e%+72}
CARD{e%+88}=CARD{e%+88}
CARD{e%+96}=CARD{e%+96}
CARD{e%+104}=CARD{e%+104}
CARD{e%+112}=CARD{e%+112}
CARD{e%+120}=CARD{e%+120}
CARD{e%+128}=CARD{e%+128}
CARD{e%+136}=CARD{e%+136}
CARD{e%+144}=CARD{e%+144}
CARD{e%+152}=CARD{e%+152}
NEXT e%
NEXT t&
PRINT #1;"FS CARD=CARD FOR COPY 1 PLANE X NOLOOP :";t%
' ~INP(2)
t%=TIMER
FOR t&=0 TO 99
BMOVE a%,xb%,32000
NEXT t&
t%=TIMER-t%
PRINT #1;"BMOVE :";t%
' ~INP(2)
t%=TIMER
FOR t&=0 TO 999
ALINE 0,0,319,199,1,65535,0
NEXT t&
t%=TIMER-t%
PRINT #1;"1000 LOOPS ALINE 0 0 319 199 :";t%
' ~INP(2)
pattern=65535
adr%=V:pattern
t%=TIMER
FOR t&=0 TO 999
HLINE 0,99,319,12,0,adr%,0
NEXT t&
t%=TIMER-t%
PRINT #1;"1000 LOOPS HLINE 0 319 99 : ";t%
' ~INP(2)
COLOR 0
t%=TIMER
FOR t&=0 TO 999
LINE 0,0,319,199
NEXT t&
t%=TIMER-t%
PRINT #1;"1000 LOOPS LINE 0 0 319 199 :";t%
' ~INP(2)
' here starts function that blitter speed up
blitter!=TRUE
PRINT #1;"BLITTER ON"
blitter:
blitter(blitter!)
t%=TIMER
FOR t&=0 TO 99
CLS
NEXT t&
t%=TIMER-t%
PRINT #1;"CLS :";t%
' ~INP(2)
t%=TIMER
FOR t&=0 TO 99
SPUT a$
NEXT t&
t%=TIMER-t%
PRINT #1;"SPUT :";t%
' ~INP(2)
t%=TIMER
FOR t&=0 TO 99
RC_COPY a%,0,0,320,200 TO xb%,0,0
NEXT t&
t%=TIMER-t%
PRINT #1;"FS RCCOPY :";t%
' ~INP(2)
prepcopybitblt
GET 0,0,319,99,b$
t%=TIMER
FOR t&=0 TO 99
PUT 1,100,b$
NEXT t&
t%=TIMER-t%
PRINT #1;"PUT 5,8 1/2 :";t%
t%=TIMER
FOR t&=0 TO 99
PUT 0,0,b$
NEXT t&
t%=TIMER-t%
PRINT #1;"PUT 0,0 1/2 :";t%
t%=TIMER
FOR t&=0 TO 99
RC_COPY xb%,0,0,320,100 TO xb%,160,0
NEXT t&
t%=TIMER-t%
PRINT #1;"RCCOPY MODE 0 1/2 :";t%
' ~INP(2)
t%=TIMER
FOR t&=0 TO 99
BITBLT struct%
NEXT t&
t%=TIMER-t%
PRINT #1;"LA BITBLT 1PL 1/2 :";t%
' ~INP(2)
CARD{struct%+4}=2 ! nbre de plans (monochrome : 1 ; 4 couleurs : 2 ; 16 couleurs : 4 ; 256 couleurs : 8)
CARD{struct%+22}=4 !Offset en octets entre deux mots du mme plan de couleur
CARD{struct%+36}=4 !Incrmenten octets entre deux mots du mme plan de couleur
t%=TIMER
FOR t&=0 TO 99
BITBLT struct%
NEXT t&
' argh... struct% seems to be modified after one call... what's modified ?
t%=TIMER-t%
PRINT #1;"LA BITBLT 2PL 1/2 :";t%
' ~INP(2)
t%=TIMER
FOR t&=0 TO 99
BITBLT struct%
NEXT t&
t%=TIMER-t%
PRINT #1;"LA BITBLT 4PL 1/2 :";t%
' ~INP(2)
vdiblit
t%=TIMER
FOR t&=0 TO 99
BITBLT vblit_surface_source%(),vblit_surface_dest%(),vblit_param%()
NEXT t&
t%=TIMER-t%
PRINT #1;"VDI BITBLT 4PL 1/2 :";t%
' ~INP(2)
vblit_surface_source%(5)=2
vblit_surface_dest%(5)=2
t%=TIMER
FOR t&=0 TO 99
BITBLT vblit_surface_source%(),vblit_surface_dest%(),vblit_param%()
NEXT t&
t%=TIMER-t%
PRINT #1;"VDI BITBLT 2PL 1/2 :";t%
' ~INP(2)
vblit_surface_source%(5)=1
vblit_surface_dest%(5)=1
t%=TIMER
FOR t&=0 TO 99
BITBLT vblit_surface_source%(),vblit_surface_dest%(),vblit_param%()
NEXT t&
t%=TIMER-t%
PRINT #1;"VDI BITBLT 1PL 1/2 :";t%
' ~INP(2)
t%=TIMER
FOR t&=0 TO 99
TEXT 5,20,"DOES BLITTER SPEED TEXT PRINT ?"
NEXT t&
t%=TIMER-t%
PRINT #1;"TEXT DEFAULT :";t%
' ~INP(2)
DEFFILL 15
t%=TIMER
FOR t&=0 TO 99
PBOX 0,0,159,99
NEXT t&
t%=TIMER-t%
PRINT #1;"PBOX 0 0 159 99 :";t%
' ~INP(2)
t%=TIMER
FOR t&=0 TO 99
ARECT 0,0,159,99,15,0,adr%,0
NEXT t&
t%=TIMER-t%
PRINT #1;"ARECT 0 0 159 99 :";t%
' ~INP(2)
DIM x&(3),y&(3)
x&(0)=0
y&(0)=0
x&(1)=79
y&(1)=99
x&(2)=159
y&(2)=10
t%=TIMER
FOR t&=0 TO 99
POLYFILL 3,x&(),y&()
NEXT t&
t%=TIMER-t%
PRINT #1;"POLYFILL 0 0 79 99 159 10 :";t%
' ~INP(2)
m&=-1
m%=V:m&
DIM xyp&(6)
xyp&(0)=0
xyp&(1)=0
xyp&(2)=79
xyp&(3)=99
xyp&(4)=159
xyp&(5)=10
pnt%=V:xyp&(0)
t%=TIMER
FOR t&=0 TO 99
APOLY pnt%,4,0 TO 199,15,0,m%,0
NEXT t&
t%=TIMER-t%
PRINT #1;"APOLY TO 0 0 79 99 159 10 :";t%
' ~INP(2)
IF blitter!
PRINT #1;"END OF TEST"
CLOSE #1
VSYNC
OPEN "o",#1,"testnobl.txt"
PRINT #1;"BLITTER OFF"
blitter!=FALSE
GOTO blitter
ENDIF
PRINT #1;"END OF TEST"
CLOSE #1
' halftoned
~GEMDOS(32,L:sup%)
OUT 4,8
RESERVE
EDIT
> PROCEDURE halftoned
' ======== second blitting = halftoned ========
DIM buff_halftone&(16)
halftone%=V:buff_halftone&(0)
' setting up halftone
CARD{halftone%+0}=&X0
CARD{halftone%+2}=&X0
CARD{halftone%+4}=&X1010101010101010
CARD{halftone%+6}=&X0
CARD{halftone%+8}=&X1010101010101010
CARD{halftone%+10}=&X101010101010101
CARD{halftone%+12}=&X1010101010101010
CARD{halftone%+14}=&X1111111111111111
CARD{halftone%+16}=&X1111111111111111
CARD{halftone%+18}=&X1010101010101010
CARD{halftone%+20}=&X101010101010101
CARD{halftone%+22}=&X1010101010101010
CARD{halftone%+24}=&X0
CARD{halftone%+26}=&X1010101010101010
CARD{halftone%+28}=&X0
CARD{halftone%+30}=&X0
'
CARD{struct%+28}=60
CARD{struct%+30}=5
LONG{struct%+42}=halftone%
CARD{struct%+46}=2
CARD{struct%+48}=0
CARD{struct%+50}=31
BITBLT struct%
CARD{struct%+28}=100
CARD{struct%+30}=39
BITBLT struct%
' ======== third blitting = halftoned with 4 bitplan pattern ========
DIM buff_halftone4&(64)
halftone4%=V:buff_halftone&(0)
halftone%=halftone4%
' setting up halftone
' -- bitplan 0--
halftone%=halftone4%
CARD{halftone%+0}=&X0
CARD{halftone%+8}=&X0
CARD{halftone%+16}=&X1010101010101010
CARD{halftone%+24}=&X0
CARD{halftone%+32}=&X1010101010101010
CARD{halftone%+40}=&X101010101010101
CARD{halftone%+48}=&X1010101010101010
CARD{halftone%+56}=&X1111111111111111
CARD{halftone%+64}=&X1111111111111111
CARD{halftone%+72}=&X1010101010101010
CARD{halftone%+80}=&X101010101010101
CARD{halftone%+88}=&X1010101010101010
CARD{halftone%+96}=&X0
CARD{halftone%+104}=&X1010101010101010
CARD{halftone%+112}=&X0
CARD{halftone%+120}=&X0
' -- bitplan 1--
halftone%=halftone%+2
CARD{halftone%+0}=&X0
CARD{halftone%+8}=&X1010101010101010
CARD{halftone%+16}=&X0
CARD{halftone%+24}=&X1010101010101010
CARD{halftone%+32}=&X101010101010101
CARD{halftone%+40}=&X1010101010101010
CARD{halftone%+48}=&X1111111111111111
CARD{halftone%+56}=&X1111111111111111
CARD{halftone%+64}=&X1111111111111111
CARD{halftone%+72}=&X1010101010101010
CARD{halftone%+80}=&X101010101010101
CARD{halftone%+88}=&X1010101010101010
CARD{halftone%+96}=&X0
CARD{halftone%+104}=&X1010101010101010
CARD{halftone%+112}=&X0
CARD{halftone%+120}=&X0
' -- bitplan 2--
halftone%=halftone%+2
CARD{halftone%+0}=&X0
CARD{halftone%+8}=&X1010101010101010
CARD{halftone%+16}=&X0
CARD{halftone%+24}=&X1010101010101010
CARD{halftone%+32}=&X101010101010101
CARD{halftone%+40}=&X1010101010101010
CARD{halftone%+48}=&X1111111111111111
CARD{halftone%+56}=&X1111111111111111
CARD{halftone%+64}=&X1111111111111111
CARD{halftone%+72}=&X1111111111111111
CARD{halftone%+80}=&X1010101010101010
CARD{halftone%+88}=&X101010101010101
CARD{halftone%+96}=&X1010101010101010
CARD{halftone%+104}=&X0
CARD{halftone%+112}=&X1010101010101010
CARD{halftone%+120}=&X0
' -- bitplan 3--
halftone%=halftone%+2
CARD{halftone%+0}=&X1010101010101010
CARD{halftone%+8}=&X0
CARD{halftone%+16}=&X1010101010101010
CARD{halftone%+24}=&X101010101010101
CARD{halftone%+32}=&X1010101010101010
CARD{halftone%+40}=&X1111111111111111
CARD{halftone%+48}=&X1111111111111111
CARD{halftone%+56}=&X1111111111111111
CARD{halftone%+64}=&X1111111111111111
CARD{halftone%+72}=&X1111111111111111
CARD{halftone%+80}=&X1010101010101010
CARD{halftone%+88}=&X101010101010101
CARD{halftone%+96}=&X1010101010101010
CARD{halftone%+104}=&X0
CARD{halftone%+112}=&X1010101010101010
CARD{halftone%+120}=&X0
~INP(2)
CARD{struct%+28}=210
CARD{struct%+30}=9
LONG{struct%+42}=halftone4%
CARD{struct%+46}=8
CARD{struct%+48}=2
CARD{struct%+50}=127
BITBLT struct%
~INP(2)
RETURN
> PROCEDURE prepcopybitblt
PRINT "CECI EST UN MESSAGE DE TEST BIDON POUR TEST DE COPIE D'CRAND"
COLOR 15
LINE 0,0,319,99
COLOR 1
LINE 0,99,319,0
CLS
DEFFILL 1
PCIRCLE 30,30,30
DEFFILL 9
PCIRCLE 60,30,30
DEFFILL 4
PCIRCLE 30,45,10
DEFFILL 3
PCIRCLE 45,45,10
DEFFILL 2
PCIRCLE 60,45,10
ERASE linea_params&()
DIM linea_params&(40)
struct%=V:linea_params&(0)
CARD{struct%}=160 ! larg pix bloc a copier
CARD{struct%+2}=100 ! haut "
CARD{struct%+4}=1 ! nbre de plans (monochrome : 1 ; 4 couleurs : 2 ; 16 couleurs : 4 ; 256 couleurs : 8)
CARD{struct%+6}=1 ! coul 1er plan
CARD{struct%+8}=0 ! coul fond
LONG{struct%+10}=&H3030303 ! Tableau de 4 octets contenant le mode graphique utiliser en fonction des bits de la couleur source et destination
' Pour chaque plan de couleur, index = (bit de la couleur de premier plan * 2) + (bit de la couleur de fond)
CARD{struct%+14}=0 !Coordonnes x du coin en haut gauche, dans la surface source, du bloc copier
CARD{struct%+16}=0 !Coordonnes y du coin en haut gauche, dans la surface source, du bloc copier
LONG{struct%+18}=xb% ! Adresse de la surface source
CARD{struct%+22}=2 !Offset en octets entre deux mots du mme plan de couleur
' En gnral, CARD{struct%+22} = 2 * Nombre de plan de couleur de la surface source
CARD{struct%+24}=160 !Incrment en octets entre le dbut d'une ligne et la suivante
' Pour une zone mmoire continue, ce sera la largeur en pixel * le nombre de plan de couleur *
CARD{struct%+26}=2 !Incrment en octets pour passer au plan suivant
CARD{struct%+28}=0 !Coordonnes x du coin en haut gauche, dans la surface cible, du bloc copier
CARD{struct%+30}=0 !Coordonnes y du coin en haut gauche, dans la surface cible, du bloc copier
LONG{struct%+32}=xb%+16000 !Adresse de la surface cible
CARD{struct%+36}=2 !Incrmenten octets entre deux mots du mme plan de couleur
' En gnral, CARD{struct%+36} = 2 * Nombre de plan de couleur de la surface cible
CARD{struct%+38}=160 !INCREMENT EN OCTETS ENTRE LE DBUT D'UNE LIGNE ET LA SUIVANTE
' POUR UNE ZONE MMOIRE CONTINUE, CE SERA LA LARGEUR EN PIXEL * LE NOMBRE DE PLAN DE COULEUR *
CARD{struct%+40}=2 !INCRMENT EN OCTETS POUR PASSER AU PLAN SUIVANT
' EN GNRAL, CE SERA 2
LONG{struct%+42}=0 !ADRESSE DU MOTIF DE DEMI-TEINTE
' L'ADRESSE DOIT TRE NON NULLE POUR UTILISER CETTE FONCTIONNALIT
CARD{struct%+46}=0 !TAILLE EN OCTETS D'UNE LIGNE DE MOTIF DE DEMI-TEINTE
CARD{struct%+48}=2 !TAILLE EN OCTETS D'UN PLAN D'UNE LIGNE DE MOTIF
' SI LE MOTIF EST SUR UN SEUL PLAN, ON MET 0
CARD{struct%+50}=0 !TAILLE DU MOTIF EN OCTETS - 1
' CETTE TAILLE DOIT TRE UNE PUISSANCE DE DEUX (2, 4, 8, 16, ...)
' ======== first blitting = normal ========
RETURN
> PROCEDURE vdiblit
' ================================
' VDI blitter test
' The top half of the screen will be the source,
' the bottom half will be the destination
' ======== init screen ========
' this will be used as source
' and target for bitblitting.
'
' this test program use the low resolution
'
' CLS
DEFFILL 15
PCIRCLE 30,30,30
DEFFILL 2
PCIRCLE 60,30,30
'
FOR i=1 TO 15
DEFFILL i
PBOX i*8+160,j*10+50,i*8+167,j*10+59
NEXT i
'
RANDOMIZE TIMER
FOR i=0 TO 39
FOR j=0 TO 9
DEFFILL RAND(16)
PBOX i*8,j*10+100,i*8+7,j*10+109
NEXT j
NEXT i
'
' ======== define blitter surfaces ========
' surface%(0) Adresse de la zone mémoire, doit être paire
' surface%(1) Largeur de la surface en pixels, doit être un multiple de 16
' surface%(2) Hauteur de la surface en pixels
' surface%(3) Largeur de la grille en mot (= surface%(1) div 16)
' surface%(4) RÉSERVÉ, toujours 0
' surface%(5) nombre de plan de couleurs (monochrome : 1 ; 4 couleurs : 2 ; 16 couleurs : 4 ; 256 couleurs : 8)
'
ERASE vblit_surface_source%(),vblit_surface_dest%()
DIM vblit_surface_source%(6),vblit_surface_dest%(6)
' Top half of the screen
'
vblit_surface_source%(0)=xb%
vblit_surface_source%(1)=320
vblit_surface_source%(2)=100
vblit_surface_source%(3)=vblit_surface_source%(1)/16
vblit_surface_source%(4)=0
vblit_surface_source%(5)=4
'
' Bottom half of the screen
'
vblit_surface_dest%(0)=xb%+16000
vblit_surface_dest%(1)=320
vblit_surface_dest%(2)=100
vblit_surface_dest%(3)=vblit_surface_dest%(1)/16
vblit_surface_dest%(4)=0
vblit_surface_dest%(5)=4
'
'
' ======== define blitting parameters and do blitting ========
' parametre%(0) coordonnées x du coin en haut à gauche, dans la surface source, du bloc à copier
' parametre%(1) coordonnées y du coin en haut à gauche, dans la surface source, du bloc à copier
' parametre%(2) coordonnées x du coin en bas à droite, dans la surface source, du bloc à copier
' parametre%(3) coordonnées y du coin en bas à droite, dans la surface source, du bloc à copier
' parametre%(4) coordonnées x du coin en haut à gauche, dans la surface cible, du bloc à copier
' parametre%(5) coordonnées y du coin en haut à gauche, dans la surface cible, du bloc à copier
' parametre%(6) coordonnées x du coin en bas à droite, dans la surface cible, du bloc à copier
' parametre%(7) coordonnées y du coin en bas à droite, dans la surface cible, du bloc à copier
' PARAM 8 MODE GRAPHIQUE
ERASE vblit_param%()
DIM vblit_param%(9)
vblit_param%(0)=0
vblit_param%(1)=0
vblit_param%(2)=159
vblit_param%(3)=99
vblit_param%(4)=0
vblit_param%(5)=0
vblit_param%(6)=159
vblit_param%(7)=99
vblit_param%(8)=3
'
RETURN
> PROCEDURE blitter(switch!)
LOCAL status
status=XBIOS(64,-1)
IF BTST(status,1) ! Blitter available?
IF switch!
status=BSET(status,0) ! Blitter on
ELSE
status=BCLR(status,0) ! Blitter off
ENDIF
~XBIOS(64,status) ! do it
ENDIF
RETURN