' Programm: Viewdemo mit Dual Playfield Modus

DECLARE FUNCTION AllocMem&    LIBRARY
DECLARE FUNCTION GetColorMap& LIBRARY
DECLARE FUNCTION AllocRaster& LIBRARY

LIBRARY "exec.library"
LIBRARY "graphics.library"

vbreite&=320       'Breite View
vhoehe&=220        'Hoehe View
modes&=&H400+&H40  'Dual Playfield / Playfield 2 vorne

flag&=2^1+2^16
speicher&=AllocMem& (362,flag&)  'Speicher anlegen
IF speicher&=0 THEN ERROR 7

rastport1&=speicher&
viewport& =speicher&+100
view&     =speicher&+140
rasinfo1& =speicher&+158
bitmap1&  =speicher&+170
rastport2&=speicher&+210
rasinfo2& =speicher&+310
bitmap2&  =speicher&+322

breite&=640:hoehe&=400:tiefe&=1                '
Initbitmap bitmap1&,tiefe&,breite&,hoehe&      '
Initbitmap bitmap2&,tiefe&,breite&,hoehe&      '  Zwei Bitmaps und
FOR i=1 TO tiefe&                              '  Bitplanes initialisieren
  bitplane1&(i)=AllocRaster& (breite&,hoehe&)  '
  IF bitplane1&(i)=0 THEN ERROR 7              '
  POKEL bitmap1&+8+(i-1)*4,bitplane1&(i)       '
NEXT                                           '
FOR i=1 TO tiefe&                              '
  bitplane2&(i)=AllocRaster& (breite&,hoehe&)  '
  IF bitplane2&(i)=0 THEN ERROR 7              '
  POKEL bitmap2&+8+(i-1)*4,bitplane2&(i)       '
NEXT                                           '
  
rxoffset1&=0:ryoffset1&=0                      '
InitRastport rastport1&                        ' Zwei Rastportstrukturen
InitRastport rastport2&                        ' initialisieren
POKEL rastport1&+4,bitmap1&                    ' Werte in Rastport und 
POKEL rasinfo1&   ,rasinfo2&                   ' Rasinfostruktur setzen
POKEL rasinfo1&+ 4,bitmap1&                    '
POKEW rasinfo1&+ 8,rxoffset1&                  '
POKEW rasinfo1&+10,ryoffset1&                  '

rxoffset2&=0:ryoffset2&=0                      '
POKEL rastport2&+4,bitmap2&                    ' Werte fuer zweite
POKEL rasinfo2&+ 4,bitmap2&                    ' Rastportstruktur setzen
POKEW rasinfo2&+ 8,rxoffset2&                  '
POKEW rasinfo2&+10,ryoffset2&                  '

InitVPort viewport&                            '
POKEW viewport&+24,vbreite&                    ' Viewport initialisieren
POKEW viewport&+26,vhoehe&                     ' und Werte setzen
POKEW viewport&+32,modes&                      '
POKEL viewport&+36,rasinfo1&                   '

InitView view&                                 ' View initialisieren
POKEL view&,viewport&                          ' und Werte setzen                        '

colormap&= GetColorMap& (12)                   ' Farbtabelle einrichten
SetRGB4CM colormap&,0,0,2,1                    ' Farben setzen
SetRGB4CM colormap&,1,15,15,15                 '
SetRGB4CM colormap&,8,0,2,1                    ' und
SetRGB4CM colormap&,9,2,12,1                   ' Farbtabelle in
POKEL viewport&+4,colormap&                    ' Viewportstruktur setzen

MakeVPort view&,viewport&                      ' Copperlist f. Viewport
MrgCop view&                                   ' Copperlist zusammenbinden
LoadView view&                                 ' Copperlist aktivieren

setrast rastport1&,0
setrast rastport2&,8
setapen rastport1&,1
y&=0:x1&=300:y1&=400                           '
FOR x&=1 TO 600 STEP 30                        '  In Bitmap 1 zeichnen
  move rastport1&,x&,y&                        '
  draw rastport1&,x1&,y1&                      '
NEXT                                           '

setapen rastport2&,9                           '
FOR i=1 TO 100                                 '
  RANDOMIZE TIMER                              ' In Bitmap 2 zeichnen
  x&=INT (1+RND(TIMER)*640)                    '
  y&=INT (1+RND(TIMER)*400)                    '
  xr&=INT (1+RND(TIMER)*20)+x&                 '
  yr&=INT (1+RND(TIMER)*20)+y&                 '
  rectfill rastport2&,x&,y&,xr&,yr&            '
NEXT                                           '

FOR k&=1 TO 300                                '
  POKEW rasinfo2&+8,k&                         '  Playfield 2 scrollen
  IF k&>200 THEN                               '
    POKEW rasinfo2&+10,PEEKW(rasinfo2&+10)+1   '
  END IF                                       '
  MakeVPort view&,viewport&                    '
  MrgCop view&                                 '
  LoadView view&                               '
  FOR l=1 TO 80:NEXT                           ' Verzoegern
NEXT 

FOR k&=1 TO 300                                '
  POKEW rasinfo1&+8,k&                         '  Playfield 1 scrollen
  MakeVPort view&,viewport&                    '
  MrgCop view&                                 '
  LoadView view&                               '
NEXT                                           '
                                           
FOR k=1 TO 5000:NEXT                           ' Einen Moment warten

aus:
FreeColorMap colormap&                         '
FOR i=1 TO tiefe&                              '
  FreeRaster bitplane1&(i),breite&,hoehe&      ' Speicher wieder freigeben
  FreeRaster bitplane2&(i),breite&,hoehe&      '
NEXT                                           '
FreeMem speicher&,362                          '

LIBRARY CLOSE                                  ' Library schliessen 
                              
STOP                                           ' zum Workbenchmodus
                                              
