Хочу разобраться со цветом.
данный код нормально разбивает цвета
Code:
procedure WriteVRAM(b:Byte;x,y: integer);
Var
pix1,pix2,pix3,pix4:byte;
begin
pix1:=0;
pix2:=0;
pix3:=0;
pix4:=0;
if (b and 128)=128 then pix1:=pix1+1;
if (b and 8)=8 then pix1:=pix1+2;
if (b and 64)=64 then pix2:=pix2+1;
if (b and 4)=4 then pix2:=pix2+2;
if (b and 32)=32 then pix3:=pix3+1;
if (b and 2)=2 then pix3:=pix3+2;
if (b and 16)=16 then pix4:=pix4+1;
if (b and 1)=1 then pix4:=pix4+2;
gamecanvas.Canvas.Pixels[x,y]:= compute_color_index(ports[$C1],Mycolor[pix1]);
gamecanvas.Canvas.Pixels[x+1,y]:=compute_color_index(ports[$C1],Mycolor[pix2]);
gamecanvas.Canvas.Pixels[x+2,y]:=compute_color_index(ports[$C1],Mycolor[pix3]);
gamecanvas.Canvas.Pixels[x+3,y]:=compute_color_index(ports[$C1],Mycolor[pix4]);
end;
сделал процедуру с учетом порта $C1
Code:
function TMainFormEmu.compute_color_index(port : byte; color : tcolor): tcolor;
begin
Result:=ClBLACK;
if ((port and $40)<>0) then
begin
Result:= (Result xor ClBLUE);
end;
if ((port and $20)<>0) then
begin
Result:= (Result xor CLGREEN);
end;
if ((port and $10)<>0) then
begin
Result:= (Result xor ClRED);
end;
case color of
clBLACK:
begin
if ((port and $08)=0) then
begin
Result:= (Result xor CLRED);
end;
if ((port and $04)=0) then
begin
Result:= (Result xor ClBLUE);
end;
end;
clGREEN: begin
Result:= (Result xor ClGREEN);
end;
clred: begin
Result:= (Result xor ClRED);
if ((port and $02)=0) then
begin
Result:= (Result xor ClGREEN);
end;
end;
clBLUE: begin
Result:= (Result xor ClBLUE);
if ((port and $01)=0) then
begin
Result:= (Result xor ClRED);
end;
end;
end;
end;
однозначно косячит желтый цвет