DEMO.DESIGN
Frequently Asked Questions
 
оглавление | demo party в ex-СССР | infused bytes e-mag | новости от ib/news | другие проекты | письмо | win koi lat

следующий фpагмент (2)
ВЫВОД ТОЧКИ В 256 цветных VESA pежимов (с банками) ================================================== { Yuri Gumenuk, 2:4624/77.27 } Const OldVBank : Word = 0; Procedure Set640x480x256; Var Rt : Byte; Begin Asm mov ax, 4F02h mov bx, 101h int 10h mov Rt, ah End; WriteLn('ExitCode = ', Rt); End; Procedure CloseGraphMode; Begin Asm mov ax, 0003h int 10h End; End; Procedure PutPixel(x, y : LongInt; Color : Byte); Var Offs : LongInt; VBank : Word; Begin Offs := x+y*640; VBank := 0; While Offs >= 65536 do Begin Dec(Offs,65536); Inc(VBank); End; If VBank <> OldVBank Then Begin Asm mov ax, 4F05h mov bx, 0000h mov dx, VBank int 10h End; OldVBank := VBank; End; Mem[$A000:Offs] := Color; End;
следующий фpагмент (3)|пpедыдущий фpагмент (1)
void setbank(int y) { asm { mov ax, 0x4f05 xor bh, bh mov dx, y shr y, 6 int 0x10 mov bank, dx } } void SVGAmode(int mode) { switch (mode) { case 0x100: {WIDTH= 640; HEIGHT= 400; BANKS= 4;}; break; case 0x101: {WIDTH= 640; HEIGHT= 480; BANKS= 5;}; break; case 0x102: {WIDTH= 800; HEIGHT= 600; BANKS= 8;}; break; case 0x103: {WIDTH= 800; HEIGHT= 600; BANKS= 8;}; break; case 0x104: {WIDTH=1024; HEIGHT= 768; BANKS=12;}; break; case 0x105: {WIDTH=1024; HEIGHT= 768; BANKS=12;}; break; case 0x106: {WIDTH=1280; HEIGHT=1024; BANKS=20;}; break; case 0x107: {WIDTH=1280; HEIGHT=1024; BANKS=20;}; break; } asm{ mov ax, 0x4F02 mov bx, mode int 0x10 } } void putpixel(int x, int y, byte c) { long ofs; ofs=(long)y*WIDTH+(long)x; setbank(ofs/BNKBYTES); ofs%=BNKBYTES; asm{ mov ax, 0xa000 mov es, ax mov di, word ptr[ofs] mov al, c stosb } } void closegraph(void) { asm{ mov ax, 0x003 int 0x10 } } void setpal(int entry,byte R, byte G, byte B) { asm { mov dx,0x3c8 mov al,byte ptr[entry] out dx,al inc dx mov al,byte ptr[R] out dx,al mov al,byte ptr[G] out dx,al mov al,byte ptr[B] out dx,al } }
следующий фpагмент (4)|пpедыдущий фpагмент (2)
A znaete-li vi kak uskorit vivod prosteyshih graphicheskih primitivov? Ya znayu kak eto zdelat. Perehodite v graphicheskiy rezhim VESA, zatem izmenyaete logicheskuyu dlinu stroki razwertki funkciey 4F06h - mov ax,4f06h xor bx,bx mov cx,1024 ; dlina stroki po int 10h ; gorizontali Cho eto dast? Obyasnayu. Esli u was rezim 640*480*256 colours, to adres tochki wi budete wichislyat tak: imul edi,Y,640 add edi,X A esli u was budet dlina stroki 1024, to tak: mov edi,Y shl edi,10 ; edi:=edi*1024 add edi,X Chto trebuet gorazdo menshe taktow processora. I wo wtorih, mozhno izmenyat graficheskiy rezhim *BEZ* izmeneniaya koda procedur wiwoda grafiki! (Estestwenno chto kol-wo pikselow po gorizontali nowogo rezhima budet menshe libo rawno dline stroki razwertki.) Poka wse. Esli ya oshibsya, to poshlite washi zamechania i woprosi na moy e-mail: <asemenenko@yandex.ru>

Всего 3 фpагмент(а/ов) |пpедыдущий фpагмент (3)

Если вы хотите дополнить FAQ - пожалуйста пишите.

design/collection/some content by Frog,
DEMO DESIGN FAQ (C) Realm Of Illusion 1994-2000,
При перепечатке материалов этой страницы пожалуйста ссылайтесь на источник: "DEMO.DESIGN FAQ, http://www.enlight.ru/demo/faq".