1 Ostatnio edytowany przez tebe (2009-09-13 15:29:01)

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 ?

*- TeBe/Madteam
3x Atari 130XE, SDX, CPU 65816, 2x VBXE, 2x IDE Plus rev. C

2

tryb 9 i 10 nie sa w stosunku do siebie przesuniete chyba ten numer to tryb 11 i nie o 1 pixel tylko pol pixela

???
chyba

http://atari.pl/hsc/ad.php?i=1.

3

No właśnie cały dowcip z GTIA polega na tym, że tryb 10 jest przesunięty o pół piksla (nie pamiętam teraz tylko, w którą stronę) w stosunku do trybów 9 i 11.

Tutaj nieco o trybie HIP (atariki).

I Ty zostaniesz big endianem...

4

tak, to jest uwzględnione (przesunięcie o pół pixla, dwa bity), inaczej wogóle aktualna AIS nie wyświetlała by HIP-ów

AIS 1.1.9 z aktualnego news-a ma zaimplementowane w/w procedury odczytu/zapisu HIP-a, można obejrzeć to w działaniu

*- TeBe/Madteam
3x Atari 130XE, SDX, CPU 65816, 2x VBXE, 2x IDE Plus rev. C

5

pytanie sprowadza sie do

jak obraz 160x200 (HIP) zapisać w postaci dwóch obrazów GR9 + GR10

*- TeBe/Madteam
3x Atari 130XE, SDX, CPU 65816, 2x VBXE, 2x IDE Plus rev. C

6

Najprościej: piksele w kolumnach parzystych (od 0), zapisujesz jako obrazek GR.9 (po zamianie na 16 jasności), a w nieparzystych - GR.10 (po zamianie na 8 jasności).

Hitler, Stalin, totalniak, SSman, NKWDzista, kaczor dyktator, za długo byłem w ChRL, wypowiadam się afektywnie.

7

czyli zapis jest OK, to może odczyt jest źle realizowany, że ciągle obraz jest przesuwany o pixel w prawo

*- TeBe/Madteam
3x Atari 130XE, SDX, CPU 65816, 2x VBXE, 2x IDE Plus rev. C