{$f $70} // fastmul at page $a0 ($a000)

program benchmark;
uses crt, fastgraph, sysutils;

var x, y, r           : byte;
    k, v              : word;
    bmpAdr            : word;
    start, stop       : cardinal;
    pawn: array [0..23, 0..23] of byte = (
    // $80, $40, $20, $10, $08, $04, $02, $01   
      ($00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00),
      ($00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00),
      ($00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00),
      ($00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00),
      ($00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00),
      ($00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $10, $08, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00),
      ($00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $20, $10, $08, $04, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00),
      ($00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $20, $10, $08, $04, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00),
      ($00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $10, $08, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00),
      ($00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $20, $10, $08, $04, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00),
      ($00, $00, $00, $00, $00, $00, $00, $00, $00, $40, $20, $10, $08, $04, $02, $00, $00, $00, $00, $00, $00, $00, $00, $00),
      ($00, $00, $00, $00, $00, $00, $00, $00, $00, $40, $20, $10, $08, $04, $02, $00, $00, $00, $00, $00, $00, $00, $00, $00),
      ($00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $20, $10, $08, $04, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00),
      ($00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $10, $08, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00),
      ($00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $10, $08, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00),
      ($00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $20, $10, $08, $04, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00),
      ($00, $00, $00, $00, $00, $00, $00, $00, $80, $40, $20, $10, $08, $04, $02, $01, $00, $00, $00, $00, $00, $00, $00, $00),
      ($00, $00, $00, $00, $00, $00, $00, $00, $80, $40, $20, $10, $08, $04, $02, $01, $00, $00, $00, $00, $00, $00, $00, $00),
      ($00, $00, $00, $00, $00, $00, $00, $01, $80, $40, $20, $10, $08, $04, $02, $01, $80, $00, $00, $00, $00, $00, $00, $00),
      ($00, $00, $00, $00, $00, $00, $00, $01, $80, $40, $20, $10, $08, $04, $02, $01, $80, $00, $00, $00, $00, $00, $00, $00),
      ($00, $00, $00, $00, $00, $00, $02, $01, $80, $40, $20, $10, $08, $04, $02, $01, $80, $40, $00, $00, $00, $00, $00, $00),
      ($00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00),
      ($00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00),
      ($00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00)
    );


begin
  InitGraph(8); //  There are 192 rows of 320 dots in the full screen mode.
  SetColor(1);
  SetBKColor(82);
  TextBackground(80);

  bmpAdr := dpeek(88);

  start := GetTickCount;
  
  for r := 0 to 7 do begin
    for y := 0 to 23 do begin
      for x := 0 to 23 do begin
        k := bmpAdr + (3 * r) + (y * 40) + x shr 3;
        v := peek(k);
        poke(k, v or pawn[y][x and %11111]);
      end;
    end;
    //rectangle(r * 24, 0, (24 * r) + 24, 24);
  end;  

  stop := GetTickCount;
  writeln('drawing time: ', stop - start);

  ReadKey;
end.
