ostatnio próbowałem dodać obsługę rysowania HIP-a w AIS, niestety poległem, odczyt jeszcze działa, ale każdorozowy zapis powoduje zniekształcenie HIP-a, czyli rysujemy kreskę i za każdym razem jak zapiszemy nasz nowy HIP otrzymujemy inną kreskę :)
przyjąłem że tryb 10 jest przesunięty w prawo względem piksli trybu 9, chyba dobrze przyjąłem
tryb 9 76543210 76543210
tryb 10 xx765432 10
odczyt działa tak:
for j:=0 to 199 do
for i:=0 to 39 do begin
v:=buf0[i+j*40];
m:=buf1[i+j*40];
cl0:=Interlace(pal0[buf] , pal1[m shr 4]);
cl1:=Interlace(pal0[v shr 4] , pal1[m shr 4];);
cl2:=Interlace(pal0[v shr 4] , pal1[m and $0f]);
cl3:=Interlace(pal0[v and $f] , pal1[m and $0f]);
buf:=v and $f;
end;
cl0, cl1, cl2, cl3 to kolory RGB piksli powstałych przez zmieszanie kolorów z PAL0 i PAL1 (PAL0 to kolory trybu 10, PAL1 to kolory trybu 9)
problem stanowi zapis, po zapisie obraz ulega przesunięciu, jakby smooth
for j:=0 to h-1 do
for i:=0 to w-1 do begin
x:=getPixel(i*8+0,j); // getPixel zwraca bajt, gdzie:
v:=x shl 4; // starszy nibbl to kolor trybu 10
// mlodszy nibbl to kolor trybu 9
x:=getPixel(i*8+2,j);
m:=x and $f0;
x:=getPixel(i*8+4,j);
v:=v or (x and $0f);
x:=getPixel(i*8+6,j);
m:=m or (x shr 4);
buf0[i+j*w]:=v; // gr9
buf1[i+j*w]:=m; // gr10
end;
obraz jest poddany operacji resize, więc skaczemy co 2 piksle 0,2,4,6,8 itd...
xx xx xx xx
0 2 4 6
jasności dla trybu 9 pobierane sa z piksli 0,4, kolory trybu 10 z piksli 2,6, w teorii powinno być OK, w praktyce tak nie jest
ktoś widzi tutaj jakiś błąd ?
3x Atari 130XE, SDX, CPU 65816, 2x VBXE, 2x IDE Plus rev. C