| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- {$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.
|