MODULE HAMDemo;

(** ------------------------------------------------------------------

           Commodore Amiga hold and modify demonstration module

      (c) Copyright 1986 Modula-2 Software Ltd.  All Rights Reserved
      (c) Copyright 1986 TDI Software, Inc.      All Rights Reserved

    ------------------------------------------------------------------ **)


(* VERSION FOR COMMODORE AMIGA

     Original Author : Paul Curtis, Modula-2 Software Ltd.  15-Jul-86

     Version         : 0.00a  15-Jul-86  Paul Curtis, Modula-2 Software Ltd.
                         Original from the Amiga Hardware Manual, p. 3-52.

  *)


  (*$S-,$T-,$A+*)


  FROM SYSTEM IMPORT NULL, WORD, ADDRESS, CODE;
  FROM DemoScreen IMPORT InitDemoScreen, EndDemo, ColourTable, DemoScreen;
  FROM Views IMPORT ModeSet, Modes;

  CONST
    DEPTH  = 6;
    WIDTH  = 320;
    HEIGHT = 200;


  PROCEDURE Fill(bitplane: ADDRESS; data: LONGCARD);
  VAR i: CARDINAL;
    bpa: POINTER TO LONGCARD;
  BEGIN
    bpa := bitplane;
    FOR i := 1 TO WIDTH*HEIGHT DIV 32 DO
      bpa^ := data;
      INC(bpa,SIZE(data))
    END
  END Fill;

  VAR i: CARDINAL;
    l: LONGCARD;

BEGIN
  (* set all color registers to zero, i.e. black *)
  FOR i := 0 TO HIGH(ColourTable) DO
    ColourTable[i] := 0
  END;

  IF InitDemoScreen(WIDTH,HEIGHT,DEPTH,ModeSet{HAM}) THEN

    (* fill bitplanes with easily recognisable pattern *)
    WITH DemoScreen^.VPort.rasInfo^.bitMap^ DO
      Fill(Planes[0],055555555H);
      Fill(Planes[1],033333333H);
      Fill(Planes[2],00F0F0F0FH);
      Fill(Planes[3],0F0F0F0F0H);
      Fill(Planes[4],0FFFFFFFFH);
      Fill(Planes[5],000000000H);
    END;

    FOR l := 0 TO 200000 DO END;
    EndDemo

  END;

END HAMDemo.
