uses crt;
Const color:array[0..12,0..16] of Byte=
(
(4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,1),
(4,24,15,15,24,24,24,15,15,15,24,15,24,24,24,15,1),
(4,15,24,22,15,24,15,24,24,24,24,15,15,24,15,15,1),
(4,15,22,24,15,24,24,15,15,24,24,15,24,15,24,15,1),
(4,15,15,15,15,24,24,24,24,15,24,15,24,24,24,15,1),
(4,15,24,24,15,24,15,15,15,24,24,15,24,24,24,15,1),
(4,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,1),
(4,15,15,15,24,24,24,15,15,15,24,24,24,15,15,15,1),
(4,15,22,24,15,24,15,24,24,24,15,24,15,24,24,24,1),
(4,15,15,15,24,24,15,15,15,15,15,24,24,15,15,24,1),
(4,15,24,22,24,22,15,24,22,24,15,24,24,24,24,15,1),
(4,15,24,22,22,22,15,24,22,24,15,24,15,15,15,24,1),
(4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,1)
);
Var
x,y,c,col:Word;
Procedure BlockOut(x,y,mx,my:Word);
Begin
asm
mov ax,0a000h
mov es,ax {es:di <- screen[0,0]}
lea si,color {ds:si <- color[0]}
mov cx,y {cx <- y}
shl cx,6 {cx <- cx * 2^6<=>y*64}
mov di,cx {di <- y*64}
shl cx,2 {cx <- cx*2^6*2^2<=>y*256}
add di,cx {di <- di+y*256}
add di,[x] {di <- di+x}
mov cx,[my] {kol-vo povtorov po y}
mov dx,[mx] {kol-vo povtorov po x}
@l1:
push cx {sohranyaem cx v steke}
mov cx,dx {pomeshatm v cx kolvo povt. po x}
rep movsb {es:[di]<-ds:[si]}{vuvodim stroku tochek}
pop cx {vostanavlivaem cx dla povtorov po y}
add di,320
sub di,mx {Vuchislaem adres sleduyshei stroki}
loop @l1 {cx<-cx-1; goto @l1}
end;
end;
BEGIN
asm
mov ax,0013h
int 10h
end;
repeat
blockout(random(320-17),random(200-13),17,13);
delay(700);
until keypressed;
asm
mov ah,0
int 16h
end;
end.
Вывод картинки напрямую в видеопамять |