SPEED TEST OF MOVE MEMORY & ERASE SCREEN WAYS WITH THEN WITH

SPEED TEST OF MOVE MEMORY & ERASE SCREEN WAYS WITH THEN WITH

Messagede hylst » Sam 28 Mai 2011 15:29

SPEED TEST OF MOVE MEMORY & ERASE SCREEN WAYS WITHOUT THEN WITH BLITTER
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 :roll:
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
Let's visit my personal website http://hylst.t15.org !
hylst
 
Messages: 184
Inscription: Mer 27 Avr 2011 17:17
Localisation: France Strasbourg

Retourner vers English section

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité

cron