123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401 |
- {$MODE objfpc}
- {$ASMMODE intel}
- Unit vga;
- Interface
- Const
- {mode types}
- FAKEMODE = 0;
- RGB332 = 1;
- INDEX8 = 2;
- {fakemode types}
- FAKEMODE1A = 0;
- FAKEMODE1B = 1;
- FAKEMODE1C = 2;
- FAKEMODE2A = 3;
- FAKEMODE2B = 4;
- FAKEMODE2C = 5;
- FAKEMODE3A = 6;
- FAKEMODE3B = 7;
- FAKEMODE3C = 8;
- Var
- m_mode_type : Integer;
- m_fake_type : Integer;
- m_dispoffset : Integer;
- Procedure VGASetMode(xres, yres, modetype, faketype : Integer);
- Procedure fakemode_load(src : PByte; wvr : Boolean);
- Implementation
- Uses
- go32;
- Var
- RealRegs : TRealRegs;
- Procedure vgamode;
- Begin
- RealRegs.ax := $13;
- realintr($10, RealRegs);
- End;
- Procedure biostextmode;
- Begin
- RealRegs.ax := 3;
- realintr($10, RealRegs);
- End;
- Procedure wait_retrace;
- Begin
- While (inportb($3DA) And 8) <> 0 Do;
- While (inportb($3DA) And 8) = 0 Do;
- End;
- Procedure clearmem(d : DWord); Assembler;
- Asm
- cld
- push es
- mov ax, fs
- mov es, ax
- mov edi, [d]
- mov ecx, 2048/4
- mov eax, 0
- rep stosd
- pop es
- End;
- Procedure clear_memory;
- Var
- dest : DWord;
- strip : Integer;
- Begin
- wait_retrace;
- dest := $A0000;
- For strip := 0 To 31 Do
- Begin
- outportw($3C4, $102);
- clearmem(dest);
- outportw($3C4, $202);
- clearmem(dest);
- outportw($3C4, $402);
- clearmem(dest);
- outportw($3C4, $802);
- clearmem(dest);
- Inc(dest, 2048);
- End;
- End;
- Procedure palette(data : PDWord);
- Var
- I : Integer;
- C : DWord;
- Begin
- outportb($3C8, 0);
- For I := 0 To 255 Do
- Begin
- C := (data[I] Shr 2) And $3F3F3F;
- outportb($3C9, C Shr 16);
- outportb($3C9, C Shr 8);
- outportb($3C9, C);
- End;
- End;
- Procedure VGASetMode(xres, yres, modetype, faketype : Integer);
- Var
- pal : Array[0..255] Of DWord;
- I : Integer;
- r, g, b : Integer;
- z : Integer;
- Begin
- m_mode_type := modetype;
- { set up display offset to centre image on display }
- m_dispoffset := ((100 - (yres Shr 1)) * 320) + (160 - (xres Shr 1));
- If (faketype < FAKEMODE1A) Or (faketype > FAKEMODE2C) Then
- faketype := FAKEMODE2A;
- m_fake_type := faketype;
- vgamode;
- If modetype = FAKEMODE Then
- Begin
- FillChar(pal, SizeOf(pal), 0);
- palette(@pal);
- m_dispoffset := 0;
- wait_retrace;
- If (faketype >= FAKEMODE1A) And (faketype <= FAKEMODE1C) Then
- Begin
- {FAKEMODE1x - 320x600}
- outportb($3D4, $11);
- outportb($3D5, inportb($3D5) And $7F);
- outportb($3C2, $E7);
- outportb($3D4, $00); outportb($3D5, $5F);
- outportb($3D4, $01); outportb($3D5, $4F);
- outportb($3D4, $02); outportb($3D5, $50);
- outportb($3D4, $03); outportb($3D5, $82);
- outportb($3D4, $04); outportb($3D5, $54);
- outportb($3D4, $05); outportb($3D5, $80);
- outportb($3D4, $06); outportb($3D5, $70);
- outportb($3D4, $07); outportb($3D5, $F0);
- outportb($3D4, $08); outportb($3D5, $00);
- outportb($3D4, $09); outportb($3D5, $60);
- outportb($3D4, $10); outportb($3D5, $5B);
- outportb($3D4, $11); outportb($3D5, $8C);
- outportb($3D4, $12); outportb($3D5, $57);
- outportb($3D4, $13); outportb($3D5, $28);
- outportb($3D4, $14); outportb($3D5, $00);
- outportb($3D4, $15); outportb($3D5, $58);
- outportb($3D4, $16); outportb($3D5, $70);
- outportb($3D4, $17); outportb($3D5, $E3);
- outportb($3C4, $01); outportb($3C5, $01);
- outportb($3C4, $04); outportb($3C5, $06);
- outportb($3CE, $05); outportb($3CF, $40);
- outportb($3CE, $06); outportb($3CF, $05);
- outportb($3CE, $06); outportb($3CF, $05);
- End
- Else
- Begin
- outportb($3D4, $11); outportb($3D5, inportb($3D5) And $7F);
- outportb($3C2, $63);
- outportb($3D4, $00); outportb($3D5, $5F);
- outportb($3D4, $01); outportb($3D5, $4F);
- outportb($3D4, $02); outportb($3D5, $50);
- outportb($3D4, $03); outportb($3D5, $82);
- outportb($3D4, $04); outportb($3D5, $54);
- outportb($3D4, $05); outportb($3D5, $80);
- outportb($3D4, $06); outportb($3D5, $BF);
- outportb($3D4, $07); outportb($3D5, $1F);
- outportb($3D4, $08); outportb($3D5, $00);
- outportb($3D4, $09); outportb($3D5, $40);
- outportb($3D4, $10); outportb($3D5, $9C);
- outportb($3D4, $11); outportb($3D5, $8E);
- outportb($3D4, $12); outportb($3D5, $8F);
- outportb($3D4, $13); outportb($3D5, $28);
- outportb($3D4, $14); outportb($3D5, $00);
- outportb($3D4, $15); outportb($3D5, $96);
- outportb($3D4, $16); outportb($3D5, $B9);
- outportb($3D4, $17); outportb($3D5, $E3);
- outportb($3C4, $01); outportb($3C5, $01);
- outportb($3C4, $04); outportb($3C5, $06);
- outportb($3CE, $05); outportb($3CF, $40);
- outportb($3CE, $06); outportb($3CF, $05);
- outportb($3CE, $06); outportb($3CF, $05);
- End;
- clear_memory;
- If (faketype >= FAKEMODE2A) And (faketype <= FAKEMODE2C) Then
- Begin
- {FAKEMODE2 palette}
- {taken from PTC 0.73}
- For I := 0 To $7F Do
- Begin
- {bit 7 = 0 (top section)}
- {red (4 bits)}
- r := Round(((I Shr 3) * 255) / 15);
- {blue (3 bits)}
- b := Round(((I And 7) * 255) / 7);
- pal[I] := (r Shl 16) Or b;
- End;
- For I := $80 To $FF Do
- Begin
- {bit 7 = 1 (bottom section)}
- {green}
- g := Round(((I And $1F) * 255) / 31);
- pal[I] := g Shl 8;
- End;
- End
- Else
- Begin
- For I := 0 To 63 Do
- Begin
- {FAKEMODE(1,3) palette}
- z := Round((I * 255) / 63);
- pal[I] := z Shl 16;
- pal[I + 64] := z Shl 8;
- pal[I + 128] := z;
- pal[I + 192] := (z Shl 16) Or (z Shl 8) Or z;
- End;
- End;
- palette(@pal);
- End
- Else
- If modetype = RGB332 Then
- Begin
- For I := 0 To 255 Do
- Begin
- r := Round(((I Shr 5) * 255) / 7);
- g := Round((((I And $1C) Shr 2) * 255) / 7);
- b := Round(((I And $03) * 255) / 3);
- pal[I] := (r Shl 16) Or (g Shl 8) Or b;
- End;
- palette(@pal);
- End;
- End;
- Function PlaneBlt1_RGB(src : PByte; dest : DWord; rows : Integer) : DWord;
- Var
- row, col : Integer;
- r, gl, gh, b : DWord;
- Begin
- For row := 1 To rows Do
- Begin
- For col := 0 To 19 Do
- Begin
- gl := ((src[ 0]) ) Or ((src[ 8]) Shl 8) Or
- ((src[16]) Shl 16) Or ((src[24]) Shl 24);
- b := gl;
- gl := gl And $E0E0E0E0;
- gl := gl Shr 5;
- gh := ((src[ 1]) ) Or ((src[ 9]) Shl 8) Or
- ((src[17]) Shl 16) Or ((src[25]) Shl 24);
- r := gh;
- gh := gh And $07070707;
- gh := gh Shl 3;
- b := b And $1F1F1F1F;
- b := b Shl 1;
- b := b Or $80808080;
- r := r And $F8F8F8F8;
- r := r Shr 2;
- Inc(gl, gh);
- gl := gl Or $40404040;
- MemL[dest] := r;
- MemL[dest + 20*4] := gl;
- MemL[dest + 40*4] := b;
- Inc(dest, 4);
- Inc(src, 4 * 4 * 2);
- End;
- Inc(dest, 40 * 4);
- End;
- PlaneBlt1_RGB := dest;
- End;
- Function PlaneBlt1_RBG(src : PByte; dest : DWord; rows : Integer) : DWord;
- Var
- row, col : Integer;
- r, gl, gh, b : DWord;
- Begin
- For row := 1 To rows Do
- Begin
- For col := 0 To 19 Do
- Begin
- gl := ((src[ 0]) ) Or ((src[ 8]) Shl 8) Or
- ((src[16]) Shl 16) Or ((src[24]) Shl 24);
- b := gl;
- gl := gl And $E0E0E0E0;
- gl := gl Shr 5;
- gh := ((src[ 1]) ) Or ((src[ 9]) Shl 8) Or
- ((src[17]) Shl 16) Or ((src[25]) Shl 24);
- r := gh;
- gh := gh And $07070707;
- gh := gh Shl 3;
- b := b And $1F1F1F1F;
- b := b Shl 1;
- b := b Or $80808080;
- r := r And $F8F8F8F8;
- r := r Shr 2;
- Inc(gl, gh);
- gl := gl Or $40404040;
- MemL[dest] := r;
- MemL[dest + 20*4] := b;
- MemL[dest + 40*4] := gl;
- Inc(dest, 4);
- Inc(src, 4 * 4 * 2);
- End;
- Inc(dest, 40 * 4);
- End;
- PlaneBlt1_RBG := dest;
- End;
- Function PlaneBlt1_GRB(src : PByte; dest : DWord; rows : Integer) : DWord;
- Var
- row, col : Integer;
- r, gl, gh, b : DWord;
- Begin
- For row := 1 To rows Do
- Begin
- For col := 0 To 19 Do
- Begin
- gl := ((src[ 0]) ) Or ((src[ 8]) Shl 8) Or
- ((src[16]) Shl 16) Or ((src[24]) Shl 24);
- b := gl;
- gl := gl And $E0E0E0E0;
- gl := gl Shr 5;
- gh := ((src[ 1]) ) Or ((src[ 9]) Shl 8) Or
- ((src[17]) Shl 16) Or ((src[25]) Shl 24);
- r := gh;
- gh := gh And $07070707;
- gh := gh Shl 3;
- b := b And $1F1F1F1F;
- b := b Shl 1;
- b := b Or $80808080;
- r := r And $F8F8F8F8;
- r := r Shr 2;
- Inc(gl, gh);
- gl := gl Or $40404040;
- MemL[dest] := gl;
- MemL[dest + 20*4] := r;
- MemL[dest + 40*4] := b;
- Inc(dest, 4);
- Inc(src, 4 * 4 * 2);
- End;
- Inc(dest, 40 * 4);
- End;
- PlaneBlt1_GRB := dest;
- End;
- Function PlaneBlt2_RBG(src : PByte; dest : DWord; rows : Integer) : DWord;
- Var
- row, col : Integer;
- r, gl, gh, b : DWord;
- Begin
- For row := 1 To rows Do
- Begin
- For col := 0 To 19 Do
- Begin
- gl := ((src[ 0]) ) Or ((src[ 8]) Shl 8) Or
- ((src[16]) Shl 16) Or ((src[24]) Shl 24);
- b := gl;
- gl := gl And $C0C0C0C0;
- gl := gl Shr 6;
- gh := ((src[ 1]) ) Or ((src[ 9]) Shl 8) Or
- ((src[17]) Shl 16) Or ((src[25]) Shl 24);
- r := gh;
- gh := gh And $07070707;
- gh := gh Shl 2;
- b := b And $1C1C1C1C;
- b := b Shr 2;
- r := r And $F0F0F0F0;
- r := r Shr 1;
- Inc(r, b);
- Inc(gl, gh);
- gl := gl Or $80808080;
- MemL[dest] := r;
- MemL[dest + 20*4] := gl;
- Inc(dest, 4);
- Inc(src, 4 * 4 * 2);
- End;
- Inc(dest, 20 * 4);
- End;
- PlaneBlt2_RBG := dest;
- End;
- Function PlaneBlt2_GBR(src : PByte; dest : DWord; rows : Integer) : DWord;
- Var
- row, col : Integer;
- r, gl, gh, b : DWord;
- Begin
- For row := 1 To rows Do
- Begin
- For col := 0 To 19 Do
- Begin
- gl := ((src[ 0]) ) Or ((src[ 8]) Shl 8) Or
- ((src[16]) Shl 16) Or ((src[24]) Shl 24);
- b := gl;
- gl := gl And $C0C0C0C0;
- gl := gl Shr 6;
- gh := ((src[ 1]) ) Or ((src[ 9]) Shl 8) Or
- ((src[17]) Shl 16) Or ((src[25]) Shl 24);
- r := gh;
- gh := gh And $07070707;
- gh := gh Shl 2;
- b := b And $1C1C1C1C;
- b := b Shr 2;
- r := r And $F0F0F0F0;
- r := r Shr 1;
- Inc(r, b);
- Inc(gl, gh);
- gl := gl Or $80808080;
- MemL[dest] := gl;
- MemL[dest + 20*4] := r;
- Inc(dest, 4);
- Inc(src, 4 * 4 * 2);
- End;
- Inc(dest, 20 * 4);
- End;
- PlaneBlt2_GBR := dest;
- End;
- Function PlaneBlt3_RGBRGB(src : PByte; dest : DWord; rows : Integer) : DWord;
- Var
- row, col : Integer;
- r, gl, gh, b : DWord;
- Begin
- For row := 1 To rows Do
- Begin
- For col := 0 To 19 Do
- Begin
- gl := ((src[ 0]) ) Or ((src[ 8]) Shl 8) Or
- ((src[16]) Shl 16) Or ((src[24]) Shl 24);
- gl := gl And $E0E0E0E0;
- gl := gl Shr 5;
- gh := ((src[ 1]) ) Or ((src[ 9]) Shl 8) Or
- ((src[17]) Shl 16) Or ((src[25]) Shl 24);
- r := gh;
- gh := gh And $07070707;
- gh := gh Shl 3;
- b := ((src[ 0+(320*2)]) ) Or ((src[ 8+(320*2)]) Shl 8) Or
- ((src[16+(320*2)]) Shl 16) Or ((src[24+(320*2)]) Shl 24);
- b := b And $1F1F1F1F;
- b := b Shl 1;
- b := b Or $80808080;
- r := r And $F8F8F8F8;
- r := r Shr 2;
- Inc(gl, gh);
- gl := gl Or $40404040;
- MemL[dest] := r;
- MemL[dest + 20*4] := gl;
- MemL[dest + 40*4] := b;
- r := ((src[ 1+(320*2)]) ) Or ((src[ 9+(320*2)]) Shl 8) Or
- ((src[17+(320*2)]) Shl 16) Or ((src[25+(320*2)]) Shl 24);
- r := r And $F8F8F8F8;
- r := r Shr 2;
- gl := ((src[ 0+(640*2)]) ) Or ((src[ 8+(640*2)]) Shl 8) Or
- ((src[16+(640*2)]) Shl 16) Or ((src[24+(640*2)]) Shl 24);
- b := gl;
- gl := gl And $E0E0E0E0;
- gl := gl Shr 5;
- gh := ((src[ 1+(640*2)]) ) Or ((src[ 9+(640*2)]) Shl 8) Or
- ((src[17+(640*2)]) Shl 16) Or ((src[25+(640*2)]) Shl 24);
- gh := gh And $07070707;
- gh := gh Shl 3;
- b := b And $1F1F1F1F;
- b := b Shl 1;
- b := b Or $80808080;
- Inc(gl, gh);
- gl := gl Or $40404040;
- MemL[dest + 60*4] := r;
- MemL[dest + 80*4] := gl;
- MemL[dest + 100*4] := b;
- Inc(dest, 4);
- Inc(src, 4 * 4 * 2);
- End;
- Inc(dest, 100 * 4);
- Inc(src, 320 * 2 * 2);
- End;
- PlaneBlt3_RGBRGB := dest;
- End;
- Function PlaneBlt3_GRBGRB(src : PByte; dest : DWord; rows : Integer) : DWord;
- Var
- row, col : Integer;
- r, gl, gh, b : DWord;
- Begin
- For row := 1 To rows Do
- Begin
- For col := 0 To 19 Do
- Begin
- gl := ((src[ 0]) ) Or ((src[ 8]) Shl 8) Or
- ((src[16]) Shl 16) Or ((src[24]) Shl 24);
- gl := gl And $E0E0E0E0;
- gl := gl Shr 5;
- gh := ((src[ 1]) ) Or ((src[ 9]) Shl 8) Or
- ((src[17]) Shl 16) Or ((src[25]) Shl 24);
- r := gh;
- gh := gh And $07070707;
- gh := gh Shl 3;
- b := ((src[ 0+(320*2)]) ) Or ((src[ 8+(320*2)]) Shl 8) Or
- ((src[16+(320*2)]) Shl 16) Or ((src[24+(320*2)]) Shl 24);
- b := b And $1F1F1F1F;
- b := b Shl 1;
- b := b Or $80808080;
- r := r And $F8F8F8F8;
- r := r Shr 2;
- Inc(gl, gh);
- gl := gl Or $40404040;
- MemL[dest] := gl;
- MemL[dest + 20*4] := r;
- MemL[dest + 40*4] := b;
- r := ((src[ 1+(320*2)]) ) Or ((src[ 9+(320*2)]) Shl 8) Or
- ((src[17+(320*2)]) Shl 16) Or ((src[25+(320*2)]) Shl 24);
- r := r And $F8F8F8F8;
- r := r Shr 2;
- gl := ((src[ 0+(640*2)]) ) Or ((src[ 8+(640*2)]) Shl 8) Or
- ((src[16+(640*2)]) Shl 16) Or ((src[24+(640*2)]) Shl 24);
- b := gl;
- gl := gl And $E0E0E0E0;
- gl := gl Shr 5;
- gh := ((src[ 1+(640*2)]) ) Or ((src[ 9+(640*2)]) Shl 8) Or
- ((src[17+(640*2)]) Shl 16) Or ((src[25+(640*2)]) Shl 24);
- gh := gh And $07070707;
- gh := gh Shl 3;
- b := b And $1F1F1F1F;
- b := b Shl 1;
- b := b Or $80808080;
- Inc(gl, gh);
- gl := gl Or $40404040;
- MemL[dest + 60*4] := gl;
- MemL[dest + 80*4] := r;
- MemL[dest + 100*4] := b;
- Inc(dest, 4);
- Inc(src, 4 * 4 * 2);
- End;
- Inc(dest, 100 * 4);
- Inc(src, 320 * 2 * 2);
- End;
- PlaneBlt3_GRBGRB := dest;
- End;
- Function PlaneBlt3_RBGRBG(src : PByte; dest : DWord; rows : Integer) : DWord;
- Var
- row, col : Integer;
- r, gl, gh, b : DWord;
- Begin
- For row := 1 To rows Do
- Begin
- For col := 0 To 19 Do
- Begin
- gl := ((src[ 0]) ) Or ((src[ 8]) Shl 8) Or
- ((src[16]) Shl 16) Or ((src[24]) Shl 24);
- gl := gl And $E0E0E0E0;
- gl := gl Shr 5;
- gh := ((src[ 1]) ) Or ((src[ 9]) Shl 8) Or
- ((src[17]) Shl 16) Or ((src[25]) Shl 24);
- r := gh;
- gh := gh And $07070707;
- gh := gh Shl 3;
- b := ((src[ 0+(320*2)]) ) Or ((src[ 8+(320*2)]) Shl 8) Or
- ((src[16+(320*2)]) Shl 16) Or ((src[24+(320*2)]) Shl 24);
- b := b And $1F1F1F1F;
- b := b Shl 1;
- b := b Or $80808080;
- r := r And $F8F8F8F8;
- r := r Shr 2;
- Inc(gl, gh);
- gl := gl Or $40404040;
- MemL[dest] := r;
- MemL[dest + 20*4] := b;
- MemL[dest + 40*4] := gl;
- r := ((src[ 1+(320*2)]) ) Or ((src[ 9+(320*2)]) Shl 8) Or
- ((src[17+(320*2)]) Shl 16) Or ((src[25+(320*2)]) Shl 24);
- r := r And $F8F8F8F8;
- r := r Shr 2;
- gl := ((src[ 0+(640*2)]) ) Or ((src[ 8+(640*2)]) Shl 8) Or
- ((src[16+(640*2)]) Shl 16) Or ((src[24+(640*2)]) Shl 24);
- b := gl;
- gl := gl And $E0E0E0E0;
- gl := gl Shr 5;
- gh := ((src[ 1+(640*2)]) ) Or ((src[ 9+(640*2)]) Shl 8) Or
- ((src[17+(640*2)]) Shl 16) Or ((src[25+(640*2)]) Shl 24);
- gh := gh And $07070707;
- gh := gh Shl 3;
- b := b And $1F1F1F1F;
- b := b Shl 1;
- b := b Or $80808080;
- Inc(gl, gh);
- gl := gl Or $40404040;
- MemL[dest + 60*4] := r;
- MemL[dest + 80*4] := b;
- MemL[dest + 100*4] := gl;
- Inc(dest, 4);
- Inc(src, 4 * 4 * 2);
- End;
- Inc(dest, 100 * 4);
- Inc(src, 320 * 2 * 2);
- End;
- PlaneBlt3_RBGRBG := dest;
- End;
- Function PlaneBlt3_GRBRBG(src : PByte; dest : DWord; rows : Integer) : DWord;
- Var
- row, col : Integer;
- r, gl, gh, b : DWord;
- Begin
- For row := 1 To rows Do
- Begin
- For col := 0 To 19 Do
- Begin
- gl := ((src[ 0]) ) Or ((src[ 8]) Shl 8) Or
- ((src[16]) Shl 16) Or ((src[24]) Shl 24);
- gl := gl And $E0E0E0E0;
- gl := gl Shr 5;
- gh := ((src[ 1]) ) Or ((src[ 9]) Shl 8) Or
- ((src[17]) Shl 16) Or ((src[25]) Shl 24);
- r := gh;
- gh := gh And $07070707;
- gh := gh Shl 3;
- b := ((src[ 0+(320*2)]) ) Or ((src[ 8+(320*2)]) Shl 8) Or
- ((src[16+(320*2)]) Shl 16) Or ((src[24+(320*2)]) Shl 24);
- b := b And $1F1F1F1F;
- b := b Shl 1;
- b := b Or $80808080;
- r := r And $F8F8F8F8;
- r := r Shr 2;
- Inc(gl, gh);
- gl := gl Or $40404040;
- MemL[dest] := gl;
- MemL[dest + 20*4] := r;
- MemL[dest + 40*4] := b;
- r := ((src[ 1+(320*2)]) ) Or ((src[ 9+(320*2)]) Shl 8) Or
- ((src[17+(320*2)]) Shl 16) Or ((src[25+(320*2)]) Shl 24);
- r := r And $F8F8F8F8;
- r := r Shr 2;
- gl := ((src[ 0+(640*2)]) ) Or ((src[ 8+(640*2)]) Shl 8) Or
- ((src[16+(640*2)]) Shl 16) Or ((src[24+(640*2)]) Shl 24);
- b := gl;
- gl := gl And $E0E0E0E0;
- gl := gl Shr 5;
- gh := ((src[ 1+(640*2)]) ) Or ((src[ 9+(640*2)]) Shl 8) Or
- ((src[17+(640*2)]) Shl 16) Or ((src[25+(640*2)]) Shl 24);
- gh := gh And $07070707;
- gh := gh Shl 3;
- b := b And $1F1F1F1F;
- b := b Shl 1;
- b := b Or $80808080;
- Inc(gl, gh);
- gl := gl Or $40404040;
- MemL[dest + 60*4] := r;
- MemL[dest + 80*4] := b;
- MemL[dest + 100*4] := gl;
- Inc(dest, 4);
- Inc(src, 4 * 4 * 2);
- End;
- Inc(dest, 100 * 4);
- Inc(src, 320 * 2 * 2);
- End;
- PlaneBlt3_GRBRBG := dest;
- End;
- Function PlaneBlt3_RBGGRB(src : PByte; dest : DWord; rows : Integer) : DWord;
- Var
- row, col : Integer;
- r, gl, gh, b : DWord;
- Begin
- For row := 1 To rows Do
- Begin
- For col := 0 To 19 Do
- Begin
- gl := ((src[ 0]) ) Or ((src[ 8]) Shl 8) Or
- ((src[16]) Shl 16) Or ((src[24]) Shl 24);
- gl := gl And $E0E0E0E0;
- gl := gl Shr 5;
- gh := ((src[ 1]) ) Or ((src[ 9]) Shl 8) Or
- ((src[17]) Shl 16) Or ((src[25]) Shl 24);
- r := gh;
- gh := gh And $07070707;
- gh := gh Shl 3;
- b := ((src[ 0+(320*2)]) ) Or ((src[ 8+(320*2)]) Shl 8) Or
- ((src[16+(320*2)]) Shl 16) Or ((src[24+(320*2)]) Shl 24);
- b := b And $1F1F1F1F;
- b := b Shl 1;
- b := b Or $80808080;
- r := r And $F8F8F8F8;
- r := r Shr 2;
- Inc(gl, gh);
- gl := gl Or $40404040;
- MemL[dest] := r;
- MemL[dest + 20*4] := b;
- MemL[dest + 40*4] := gl;
- r := ((src[ 1+(320*2)]) ) Or ((src[ 9+(320*2)]) Shl 8) Or
- ((src[17+(320*2)]) Shl 16) Or ((src[25+(320*2)]) Shl 24);
- r := r And $F8F8F8F8;
- r := r Shr 2;
- gl := ((src[ 0+(640*2)]) ) Or ((src[ 8+(640*2)]) Shl 8) Or
- ((src[16+(640*2)]) Shl 16) Or ((src[24+(640*2)]) Shl 24);
- b := gl;
- gl := gl And $E0E0E0E0;
- gl := gl Shr 5;
- gh := ((src[ 1+(640*2)]) ) Or ((src[ 9+(640*2)]) Shl 8) Or
- ((src[17+(640*2)]) Shl 16) Or ((src[25+(640*2)]) Shl 24);
- gh := gh And $07070707;
- gh := gh Shl 3;
- b := b And $1F1F1F1F;
- b := b Shl 1;
- b := b Or $80808080;
- Inc(gl, gh);
- gl := gl Or $40404040;
- MemL[dest + 60*4] := gl;
- MemL[dest + 80*4] := r;
- MemL[dest + 100*4] := b;
- Inc(dest, 4);
- Inc(src, 4 * 4 * 2);
- End;
- Inc(dest, 100 * 4);
- Inc(src, 320 * 2 * 2);
- End;
- PlaneBlt3_RBGGRB := dest;
- End;
- Function PlaneBlt3_RGBR(src : PByte; dest : DWord; rows : Integer) : DWord;
- Var
- {row,} col : Integer;
- r, gl, gh, b : DWord;
- Begin
- For col := 0 To 19 Do
- Begin
- gl := ((src[ 0]) ) Or ((src[ 8]) Shl 8) Or
- ((src[16]) Shl 16) Or ((src[24]) Shl 24);
- gl := gl And $E0E0E0E0;
- gl := gl Shr 5;
- gh := ((src[ 1]) ) Or ((src[ 9]) Shl 8) Or
- ((src[17]) Shl 16) Or ((src[25]) Shl 24);
- r := gh;
- gh := gh And $07070707;
- gh := gh Shl 3;
- b := ((src[ 0+320*2]) ) Or ((src[ 8+320*2]) Shl 8) Or
- ((src[16+320*2]) Shl 16) Or ((src[24+320*2]) Shl 24);
- b := b And $1F1F1F1F;
- b := b Shl 1;
- b := b Or $80808080;
- r := r And $F8F8F8F8;
- r := r Shr 2;
- Inc(gl, gh);
- gl := gl Or $40404040;
- MemL[dest] := r;
- MemL[dest + 20*4] := gl;
- MemL[dest + 40*4] := b;
- r := ((src[ 1+320*2]) ) Or ((src[ 9+320*2]) Shl 8) Or
- ((src[17+320*2]) Shl 16) Or ((src[25+320*2]) Shl 24);
- r := r Or $F8F8F8F8;
- r := r Shr 2;
- MemL[dest + 60*4] := r;
- Inc(dest, 4);
- Inc(src, 4 * 4 * 2);
- End;
- PlaneBlt3_RGBR := dest;
- End;
- Function PlaneBlt3_GRBG(src : PByte; dest : DWord; rows : Integer) : DWord;
- Var
- {row,} col : Integer;
- r, gl, gh, b : DWord;
- Begin
- For col := 0 To 19 Do
- Begin
- gl := ((src[ 0]) ) Or ((src[ 8]) Shl 8) Or
- ((src[16]) Shl 16) Or ((src[24]) Shl 24);
- gl := gl And $E0E0E0E0;
- gl := gl Shr 5;
- gh := ((src[ 1]) ) Or ((src[ 9]) Shl 8) Or
- ((src[17]) Shl 16) Or ((src[25]) Shl 24);
- r := gh;
- gh := gh And $07070707;
- gh := gh Shl 3;
- b := ((src[ 0+320*2]) ) Or ((src[ 8+320*2]) Shl 8) Or
- ((src[16+320*2]) Shl 16) Or ((src[24+320*2]) Shl 24);
- b := b And $1F1F1F1F;
- b := b Shl 1;
- b := b Or $80808080;
- r := r And $F8F8F8F8;
- r := r Shr 2;
- Inc(gl, gh);
- gl := gl Or $40404040;
- MemL[dest] := gl;
- MemL[dest + 20*4] := r;
- MemL[dest + 40*4] := b;
- gl := ((src[ 0+640*2]) ) Or ((src[ 8+640*2]) Shl 8) Or
- ((src[16+640*2]) Shl 16) Or ((src[24+640*2]) Shl 24);
- gl := gl And $E0E0E0E0;
- gl := gl Shr 5;
- gh := ((src[ 1+640*2]) ) Or ((src[ 9+640*2]) Shl 8) Or
- ((src[17+640*2]) Shl 16) Or ((src[25+640*2]) Shl 24);
- gh := gh And $07070707;
- gh := gh Shl 3;
- Inc(gl, gh);
- gl := gl Or $40404040;
- MemL[dest + 60*4] := gl;
- Inc(dest, 4);
- Inc(src, 4 * 4 * 2);
- End;
- PlaneBlt3_GRBG := dest;
- End;
- Function PlaneBlt3_RBGR(src : PByte; dest : DWord; rows : Integer) : DWord;
- Var
- {row,} col : Integer;
- r, gl, gh, b : DWord;
- Begin
- For col := 0 To 19 Do
- Begin
- gl := ((src[ 0]) ) Or ((src[ 8]) Shl 8) Or
- ((src[16]) Shl 16) Or ((src[24]) Shl 24);
- gl := gl And $E0E0E0E0;
- gl := gl Shr 5;
- gh := ((src[ 1]) ) Or ((src[ 9]) Shl 8) Or
- ((src[17]) Shl 16) Or ((src[25]) Shl 24);
- r := gh;
- gh := gh And $07070707;
- gh := gh Shl 3;
- b := ((src[ 0+320*2]) ) Or ((src[ 8+320*2]) Shl 8) Or
- ((src[16+320*2]) Shl 16) Or ((src[24+320*2]) Shl 24);
- b := b And $1F1F1F1F;
- b := b Shl 1;
- b := b Or $80808080;
- r := r And $F8F8F8F8;
- r := r Shr 2;
- Inc(gl, gh);
- gl := gl Or $40404040;
- MemL[dest] := r;
- MemL[dest + 20*4] := b;
- MemL[dest + 40*4] := gl;
- r := ((src[ 1+320*2]) ) Or ((src[ 9+320*2]) Shl 8) Or
- ((src[17+320*2]) Shl 16) Or ((src[25+320*2]) Shl 24);
- r := r Or $F8F8F8F8;
- r := r Shr 2;
- MemL[dest + 60*4] := r;
- Inc(dest, 4);
- Inc(src, 4 * 4 * 2);
- End;
- PlaneBlt3_RBGR := dest;
- End;
- Function PlaneBlt3_GRBR(src : PByte; dest : DWord; rows : Integer) : DWord;
- Var
- {row,} col : Integer;
- r, gl, gh, b : DWord;
- Begin
- For col := 0 To 19 Do
- Begin
- gl := ((src[ 0]) ) Or ((src[ 8]) Shl 8) Or
- ((src[16]) Shl 16) Or ((src[24]) Shl 24);
- gl := gl And $E0E0E0E0;
- gl := gl Shr 5;
- gh := ((src[ 1]) ) Or ((src[ 9]) Shl 8) Or
- ((src[17]) Shl 16) Or ((src[25]) Shl 24);
- r := gh;
- gh := gh And $07070707;
- gh := gh Shl 3;
- b := ((src[ 0+320*2]) ) Or ((src[ 8+320*2]) Shl 8) Or
- ((src[16+320*2]) Shl 16) Or ((src[24+320*2]) Shl 24);
- b := b And $1F1F1F1F;
- b := b Shl 1;
- b := b Or $80808080;
- r := r And $F8F8F8F8;
- r := r Shr 2;
- Inc(gl, gh);
- gl := gl Or $40404040;
- MemL[dest] := gl;
- MemL[dest + 20*4] := r;
- MemL[dest + 40*4] := b;
- r := ((src[ 1+320*2]) ) Or ((src[ 9+320*2]) Shl 8) Or
- ((src[17+320*2]) Shl 16) Or ((src[25+320*2]) Shl 24);
- r := r Or $F8F8F8F8;
- r := r Shr 2;
- MemL[dest + 60*4] := r;
- Inc(dest, 4);
- Inc(src, 4 * 4 * 2);
- End;
- PlaneBlt3_GRBR := dest;
- End;
- Function PlaneBlt3_RBGG(src : PByte; dest : DWord; rows : Integer) : DWord;
- Var
- {row,} col : Integer;
- r, gl, gh, b : DWord;
- Begin
- For col := 0 To 19 Do
- Begin
- gl := ((src[ 0]) ) Or ((src[ 8]) Shl 8) Or
- ((src[16]) Shl 16) Or ((src[24]) Shl 24);
- gl := gl And $E0E0E0E0;
- gl := gl Shr 5;
- gh := ((src[ 1]) ) Or ((src[ 9]) Shl 8) Or
- ((src[17]) Shl 16) Or ((src[25]) Shl 24);
- r := gh;
- gh := gh And $07070707;
- gh := gh Shl 3;
- b := ((src[ 0+320*2]) ) Or ((src[ 8+320*2]) Shl 8) Or
- ((src[16+320*2]) Shl 16) Or ((src[24+320*2]) Shl 24);
- b := b And $1F1F1F1F;
- b := b Shl 1;
- b := b Or $80808080;
- r := r And $F8F8F8F8;
- r := r Shr 2;
- Inc(gl, gh);
- gl := gl Or $40404040;
- MemL[dest] := r;
- MemL[dest + 20*4] := b;
- MemL[dest + 40*4] := gl;
- gl := ((src[ 0+640*2]) ) Or ((src[ 8+640*2]) Shl 8) Or
- ((src[16+640*2]) Shl 16) Or ((src[24+640*2]) Shl 24);
- gl := gl And $E0E0E0E0;
- gl := gl Shr 5;
- gh := ((src[ 1+640*2]) ) Or ((src[ 9+640*2]) Shl 8) Or
- ((src[17+640*2]) Shl 16) Or ((src[25+640*2]) Shl 24);
- gh := gh And $07070707;
- gh := gh Shl 3;
- Inc(gl, gh);
- gl := gl Or $40404040;
- MemL[dest + 60*4] := gl;
- Inc(dest, 4);
- Inc(src, 4 * 4 * 2);
- End;
- PlaneBlt3_RBGG := dest;
- End;
- Procedure fakemode_load(src : PByte; wvr : Boolean);
- Var
- dest, d : DWord;
- w, s : Integer;
- Begin
- dest := $A0000;
- Case m_fake_type Of
- FAKEMODE1A :
- For w := 0 To 24 Do
- Begin
- {plane 0}
- outportw($3C4, $102);
- PlaneBlt1_RGB(src + 0, dest, 8);
-
- {plane 1}
- outportw($3C4, $202);
- PlaneBlt1_RGB(src + 2, dest, 8);
-
- {plane 2}
- outportw($3C4, $402);
- PlaneBlt1_RGB(src + 4, dest, 8);
-
- {plane 3}
- outportw($3C4, $802);
- dest := PlaneBlt1_RGB(src + 6, dest, 8);
- Inc(src, 320 * 4 * 4);
- End;
- FAKEMODE1B :
- For w := 0 To 24 Do
- Begin
- {plane 0}
- outportw($3C4, $102);
- d := PlaneBlt1_RBG(src + (4*4*2*20*0), dest, 1);
- d := PlaneBlt1_GRB(src + (4*4*2*20*1), d, 1);
- d := PlaneBlt1_RBG(src + (4*4*2*20*2), d, 1);
- d := PlaneBlt1_GRB(src + (4*4*2*20*3), d, 1);
- d := PlaneBlt1_RBG(src + (4*4*2*20*4), d, 1);
- d := PlaneBlt1_GRB(src + (4*4*2*20*5), d, 1);
- d := PlaneBlt1_RBG(src + (4*4*2*20*6), d, 1);
- d := PlaneBlt1_GRB(src + (4*4*2*20*7), d, 1);
-
- {plane 1}
- outportw($3C4, $202);
- d := PlaneBlt1_GRB(src + 2 + (4*4*2*20*0), dest, 1);
- d := PlaneBlt1_RBG(src + 2 + (4*4*2*20*1), d, 1);
- d := PlaneBlt1_GRB(src + 2 + (4*4*2*20*2), d, 1);
- d := PlaneBlt1_RBG(src + 2 + (4*4*2*20*3), d, 1);
- d := PlaneBlt1_GRB(src + 2 + (4*4*2*20*4), d, 1);
- d := PlaneBlt1_RBG(src + 2 + (4*4*2*20*5), d, 1);
- d := PlaneBlt1_GRB(src + 2 + (4*4*2*20*6), d, 1);
- d := PlaneBlt1_RBG(src + 2 + (4*4*2*20*7), d, 1);
-
- {plane 2}
- outportw($3C4, $402);
- d := PlaneBlt1_RBG(src + 4 + (4*4*2*20*0), dest, 1);
- d := PlaneBlt1_GRB(src + 4 + (4*4*2*20*1), d, 1);
- d := PlaneBlt1_RBG(src + 4 + (4*4*2*20*2), d, 1);
- d := PlaneBlt1_GRB(src + 4 + (4*4*2*20*3), d, 1);
- d := PlaneBlt1_RBG(src + 4 + (4*4*2*20*4), d, 1);
- d := PlaneBlt1_GRB(src + 4 + (4*4*2*20*5), d, 1);
- d := PlaneBlt1_RBG(src + 4 + (4*4*2*20*6), d, 1);
- d := PlaneBlt1_GRB(src + 4 + (4*4*2*20*7), d, 1);
-
- {plane 3}
- outportw($3C4, $802);
- d := PlaneBlt1_GRB(src + 6 + (4*4*2*20*0), dest, 1);
- d := PlaneBlt1_RBG(src + 6 + (4*4*2*20*1), d, 1);
- d := PlaneBlt1_GRB(src + 6 + (4*4*2*20*2), d, 1);
- d := PlaneBlt1_RBG(src + 6 + (4*4*2*20*3), d, 1);
- d := PlaneBlt1_GRB(src + 6 + (4*4*2*20*4), d, 1);
- d := PlaneBlt1_RBG(src + 6 + (4*4*2*20*5), d, 1);
- d := PlaneBlt1_GRB(src + 6 + (4*4*2*20*6), d, 1);
- dest := PlaneBlt1_RBG(src + 6 + (4*4*2*20*7), d, 1);
- Inc(src, 320*4*4);
- End;
- FAKEMODE1C :
- For w := 0 To 24 Do
- Begin
- {plane 0}
- outportw($3C4, $102);
- PlaneBlt1_RBG(src + 0, dest, 8);
-
- {plane 1}
- outportw($3C4, $202);
- PlaneBlt1_GRB(src + 2, dest, 8);
-
- {plane 2}
- outportw($3C4, $402);
- PlaneBlt1_RBG(src + 4, dest, 8);
-
- {plane 3}
- outportw($3C4, $802);
- dest := PlaneBlt1_GRB(src + 6, dest, 8);
- Inc(src, 320 * 4 * 4);
- End;
- FAKEMODE2A :
- For w := 0 To 24 Do
- Begin
- {plane 0}
- outportw($3C4, $102);
- PlaneBlt2_RBG(src + 0, dest, 8);
-
- {plane 1}
- outportw($3C4, $202);
- PlaneBlt2_RBG(src + 2, dest, 8);
-
- {plane 2}
- outportw($3C4, $402);
- PlaneBlt2_RBG(src + 4, dest, 8);
-
- {plane 3}
- outportw($3C4, $802);
- dest := PlaneBlt2_RBG(src + 6, dest, 8);
- Inc(src, 320 * 4 * 4);
- End;
- FAKEMODE2B :
- For w := 0 To 24 Do
- Begin
- {plane 0}
- outportw($3C4, $102);
- d := PlaneBlt2_RBG(src + (4*4*2*20*0), dest, 1);
- d := PlaneBlt2_GBR(src + (4*4*2*20*1), d, 1);
- d := PlaneBlt2_RBG(src + (4*4*2*20*2), d, 1);
- d := PlaneBlt2_GBR(src + (4*4*2*20*3), d, 1);
- d := PlaneBlt2_RBG(src + (4*4*2*20*4), d, 1);
- d := PlaneBlt2_GBR(src + (4*4*2*20*5), d, 1);
- d := PlaneBlt2_RBG(src + (4*4*2*20*6), d, 1);
- d := PlaneBlt2_GBR(src + (4*4*2*20*7), d, 1);
-
- {plane 1}
- outportw($3C4, $202);
- d := PlaneBlt2_GBR(src + 2 + (4*4*2*20*0), dest, 1);
- d := PlaneBlt2_RBG(src + 2 + (4*4*2*20*1), d, 1);
- d := PlaneBlt2_GBR(src + 2 + (4*4*2*20*2), d, 1);
- d := PlaneBlt2_RBG(src + 2 + (4*4*2*20*3), d, 1);
- d := PlaneBlt2_GBR(src + 2 + (4*4*2*20*4), d, 1);
- d := PlaneBlt2_RBG(src + 2 + (4*4*2*20*5), d, 1);
- d := PlaneBlt2_GBR(src + 2 + (4*4*2*20*6), d, 1);
- d := PlaneBlt2_RBG(src + 2 + (4*4*2*20*7), d, 1);
-
- {plane 2}
- outportw($3C4, $402);
- d := PlaneBlt2_RBG(src + 4 + (4*4*2*20*0), dest, 1);
- d := PlaneBlt2_GBR(src + 4 + (4*4*2*20*1), d, 1);
- d := PlaneBlt2_RBG(src + 4 + (4*4*2*20*2), d, 1);
- d := PlaneBlt2_GBR(src + 4 + (4*4*2*20*3), d, 1);
- d := PlaneBlt2_RBG(src + 4 + (4*4*2*20*4), d, 1);
- d := PlaneBlt2_GBR(src + 4 + (4*4*2*20*5), d, 1);
- d := PlaneBlt2_RBG(src + 4 + (4*4*2*20*6), d, 1);
- d := PlaneBlt2_GBR(src + 4 + (4*4*2*20*7), d, 1);
-
- {plane 3}
- outportw($3C4, $802);
- d := PlaneBlt2_GBR(src + 6 + (4*4*2*20*0), dest, 1);
- d := PlaneBlt2_RBG(src + 6 + (4*4*2*20*1), d, 1);
- d := PlaneBlt2_GBR(src + 6 + (4*4*2*20*2), d, 1);
- d := PlaneBlt2_RBG(src + 6 + (4*4*2*20*3), d, 1);
- d := PlaneBlt2_GBR(src + 6 + (4*4*2*20*4), d, 1);
- d := PlaneBlt2_RBG(src + 6 + (4*4*2*20*5), d, 1);
- d := PlaneBlt2_GBR(src + 6 + (4*4*2*20*6), d, 1);
- dest := PlaneBlt2_RBG(src + 6 + (4*4*2*20*7), d, 1);
- Inc(src, 320*4*4);
- End;
- FAKEMODE2C :
- For w := 0 To 24 Do
- Begin
- {plane 0}
- outportw($3C4, $102);
- PlaneBlt2_RBG(src + 0, dest, 8);
-
- {plane 1}
- outportw($3C4, $202);
- PlaneBlt2_GBR(src + 2, dest, 8);
-
- {plane 2}
- outportw($3C4, $402);
- PlaneBlt2_RBG(src + 4, dest, 8);
-
- {plane 3}
- outportw($3C4, $802);
- dest := PlaneBlt2_GBR(src + 6, dest, 8);
- Inc(src, 320 * 4 * 4);
- End;
- FAKEMODE3A : Begin
- For w := 0 To 15 Do
- Begin
- {plane 0}
- outportw($3C4, $102);
- PlaneBlt3_RGBRGB(src + 0, dest, 4);
-
- {plane 1}
- outportw($3C4, $202);
- PlaneBlt3_RGBRGB(src + 2, dest, 4);
-
- {plane 2}
- outportw($3C4, $402);
- PlaneBlt3_RGBRGB(src + 4, dest, 4);
-
- {plane 3}
- outportw($3C4, $802);
- dest := PlaneBlt3_RGBRGB(src + 6, dest, 4);
- Inc(src, 320 * 4 * 2 * 3);
- End;
- s := (4*4*2*20) + (320*2*2*2);
- outportw($3C4, $102);
- d := PlaneBlt3_RGBRGB(src, dest, 2);
- PlaneBlt3_RGBR(src + s, d, 1);
- outportw($3C4, $202);
- d := PlaneBlt3_RGBRGB(src + 2, dest, 2);
- PlaneBlt3_RGBR(src + s + 2, d, 1);
- outportw($3C4, $402);
- d := PlaneBlt3_RGBRGB(src + 4, dest, 2);
- PlaneBlt3_RGBR(src + s + 4, d, 1);
- outportw($3C4, $802);
- d := PlaneBlt3_RGBRGB(src + 6, dest, 2);
- PlaneBlt3_RGBR(src + s + 6, d, 1);
- End;
- FAKEMODE3B : Begin
- For w := 0 To 15 Do
- Begin
- {plane 0}
- outportw($3C4, $102);
- PlaneBlt3_GRBRBG(src + 0, dest, 4);
-
- {plane 1}
- outportw($3C4, $202);
- PlaneBlt3_RBGGRB(src + 2, dest, 4);
-
- {plane 2}
- outportw($3C4, $402);
- PlaneBlt3_GRBRBG(src + 4, dest, 4);
-
- {plane 3}
- outportw($3C4, $802);
- dest := PlaneBlt3_RBGGRB(src + 6, dest, 4);
- Inc(src, 320 * 4 * 2 * 3);
- End;
- s := (4*4*2*20) + (320*2*2*2);
- outportw($3C4, $102);
- d := PlaneBlt3_GRBRBG(src, dest, 2);
- PlaneBlt3_GRBR(src + s, d, 1);
- outportw($3C4, $202);
- d := PlaneBlt3_RBGGRB(src + 2, dest, 2);
- PlaneBlt3_RBGG(src + s + 2, d, 1);
- outportw($3C4, $402);
- d := PlaneBlt3_GRBRBG(src + 4, dest, 2);
- PlaneBlt3_GRBR(src + s + 4, d, 1);
- outportw($3C4, $802);
- d := PlaneBlt3_RBGGRB(src + 6, dest, 2);
- PlaneBlt3_RBGG(src + s + 6, d, 1);
- End;
- FAKEMODE3C : Begin
- For w := 0 To 15 Do
- Begin
- {plane 0}
- outportw($3C4, $102);
- PlaneBlt3_GRBGRB(src + 0, dest, 4);
-
- {plane 1}
- outportw($3C4, $202);
- PlaneBlt3_RBGRBG(src + 2, dest, 4);
-
- {plane 2}
- outportw($3C4, $402);
- PlaneBlt3_GRBGRB(src + 4, dest, 4);
-
- {plane 3}
- outportw($3C4, $802);
- dest := PlaneBlt3_RBGRBG(src + 6, dest, 4);
- Inc(src, 320 * 4 * 2 * 3);
- End;
- s := (4*4*2*20) + (320*2*2*2);
- outportw($3C4, $102);
- d := PlaneBlt3_GRBGRB(src, dest, 2);
- PlaneBlt3_GRBG(src + s, d, 1);
- outportw($3C4, $202);
- d := PlaneBlt3_RBGRBG(src + 2, dest, 2);
- PlaneBlt3_RBGR(src + s + 2, d, 1);
- outportw($3C4, $402);
- d := PlaneBlt3_GRBGRB(src + 4, dest, 2);
- PlaneBlt3_GRBG(src + s + 4, d, 1);
- outportw($3C4, $802);
- d := PlaneBlt3_RBGRBG(src + 6, dest, 2);
- PlaneBlt3_RBGR(src + s + 6, d, 1);
- End;
- End;
- If wvr Then
- wait_retrace;
- End;
- End.
|