{$G+} unit Draw10H; {Используестся для быстрого рисования НОРМАЛЬНЫХ объектов (фреймов)} INTERFACE VAR CurPage : byte Absolute $40:$62; VmemLen : word Absolute $40:$4c; CONST PlaneMaskingPort = $03CE; SelectPlanePort = $03C4; Procedure DrawSprite12H(xpos,ypos,xsize,ysize:word;Page:byte;BitPlane : pointer); {Рисуется спрайт, лежащий по адр. BitPlane размером xsize x ysize, только кратны 8. Никаких проверок нет. Спрайт - 4 битовые плоскости B G R A} IMPLEMENTATION {-----------------------------------------} Procedure DrawSprite12H;assembler; var Beg : pointer; cool : word; asm push ds mov ax, word ptr BitPlane+2 mov cool, ax xor ax, ax mov al, page push 40h pop es mov bx, es:[4ch] mul bx shr ax, 4 mov bx, 0A000h add bx, ax mov ax, ypos {Calculate ypos} push ax shl ax, 2 add bx, ax {y*(640/8)/16 = y*5 - segment} pop cx add bx, cx shr xpos, 3 shr xsize, 3 mov ax, xpos {Calcualte xpos} mov word ptr Beg, ax mov word ptr Beg+2, bx mov ax, 0005h {Set GDC Register for writing} mov dx, 03CEh out dx, ax INC DX xor ax, ax out dx, ax mov bx, 1 mov si, word ptr BitPlane @1: mov dx, 03C4h {Индекс синхронизатора} mov al, 2 out dx, al {Режим выбора слоя} inc dx mov al, bl {Выбор текущего слоя} out dx, al shl bl, 1 {Выбор нового слоя} les di, Beg mov cx, ysize @2: push cx mov cx, xsize push ds mov ds, cool repe movsb pop ds add di, 80 sub di, xsize pop cx loop @2 cmp bl, 0010000b jne @1 mov dx, 3C4H mov ax, 02 out dx, al inc dx mov al, 0Fh {Select default plane} out dx, al pop ds end;{DrawSprite12H} {-----------------------------------------} end.