kategorie: Asembler, Blitz
[#1] [ASM, BLITZ] Prośba o wytłumaczenie tego kawałka kodu..
Hej, czy Ktoś może mi wytłumaczyć ten fragment kodu?

Zadaniem jest szybkie wyczyszczenie 3-bitplanowej bitmapy
Bitmap 0,320,256,3


Wiem, że:
- jedna linia w rozdzielczości LOWRES zajmuje 40 bajty: 320 / 8
- a więc jeden bitplan 320x256 to bedzie: 320 / 8 * 256 = 10 240 bajtów = 10 kb
- a cała bitmapa to: 320 / 8 * 256 * 3 = 30 720 bajtów = 30 kb
- o ile dobrze sie orientuje to w pamięci jest to ułożone w taki sposób że najpierw 1 cały bitplane, potem 2 i 3.

i teraz nie rozumiem dlaczego do asemblerowej funkcji czyszczącej jako parametr jest podawana zawartość pamięci pod adresem bitmapy + 8 aby wyczyścić 1 bitplane a następnie kolejne przesunięte o 4, czyli +12 i +16.

mycls{Peek.l (Addr BitMap(db)+8)}
mycls{Peek.l (Addr BitMap(db)+12)}
mycls{Peek.l (Addr BitMap(db)+16)}


Po pierwsze dlaczego nie podajemy tam samego adresu początku bitmapy tylko "to co jest pod adresem + 8" (o ile dobrze to zrozumiełem).. co oznacza to 8, adres przesunięty o 8 bajów, ale po co? czemu nie zaczynamy od początku i skąd te kolejne ofsety o 4 bajty, skoro jeden bitplan zajmuje 10kb?

funkcja asemblerowa wygląda tak, nie chodzi mi o optymalizację tej funkcji tylko wytłumaczenie tej zagwozdki z bitplanami..

Watek z optymalizajcą tej funkcji jest tutaj: link

Statement mycls{ a.l }
  MOVE.l d0, a0
  ADD.l #40*256, a0
  
  MOVEQ #0, d0
  MOVEQ#0,d1
  MOVEQ#0,d2
  MOVEQ#0,d3
  MOVEQ#0,d4
  MOVEQ#0,d5
  MOVEQ#0,d6

  MOVE.l d0, a1
  MOVE.l d0, a2
  MOVE.l d0, a3
  
  MOVE #255, d7
 
  loop1:
     MOVEM.l d0-d6/a1-a3, -(a0)
     DBRA d7, loop1

 AsmExit
End Statement
[#2] Re: [ASM, BLITZ] Prośba o wytłumaczenie tego kawałka kodu..

@mateusz_s, post #1

Mała podpowiedź - przyjrzyj się jak wygląda struktura BitMap a będziesz wiedział skąd te przesunięcia.
[#3] Re: [ASM, BLITZ] Prośba o wytłumaczenie tego kawałka kodu..

@pisklak, post #2

bitplany to dla mnie nowosc, bo zwykle operowalem na chunky na pc, wiec tam mialem po prostu wypelniony bufor tylko samymi wartosciami pikseli,

zaczyna mi sie wydawac ze w tym przypadku sa jakies dodatkowe informacje zapisane na poczatku kazdego bitplanu, ale nie moge nic znaleźć póki co..
[wyróżniony] [#4] Re: [ASM, BLITZ] Prośba o wytłumaczenie tego kawałka kodu..

@mateusz_s, post #3

Pod tymi polami znajdują się właśnie adresy bitplanów, a nie te bitplany. Każdy bitplan może rezydować gdzie indziej w pamięci.

Bitmapa systemowa ma następującą strukturę:

Zauważ, że posiada nagłówek (8-bajtowy) z rozmiarami pojedynczego bitplanu oraz liczbą bitplanów.

struct BitMap
{
    UWORD   BytesPerRow;
    UWORD   Rows;
    UBYTE   Flags;
    UBYTE   Depth;
    UWORD   pad;
    PLANEPTR Planes[8];
};

Te polecenia odnoszą się do pól Planes[0], Planes[1] oraz Planes[2]:

mycls{Peek.l (Addr BitMap(db)+8)}
mycls{Peek.l (Addr BitMap(db)+12)}
mycls{Peek.l (Addr BitMap(db)+16)}


Ostatnia aktualizacja: 10.02.2020 00:41:11 przez Hexmage960
[#5] Re: [ASM, BLITZ] Prośba o wytłumaczenie tego kawałka kodu..

@Hexmage960, post #4

oo.. teraz wszystko jasne.. nie widziałem wcześniej tych informacji, myslalem ze dane sa po prostu wrzucone w buforze jak w chunky.. dzięki.. :)
[#6] Re: [ASM, BLITZ] Prośba o wytłumaczenie tego kawałka kodu..

@mateusz_s, post #5

Szczerze polecam ten adres w sieci amigadev.elowar.com/
Na stronie www.PPA.pl, podobnie jak na wielu innych stronach internetowych, wykorzystywane są tzw. cookies (ciasteczka). Służą ona m.in. do tego, aby zalogować się na swoje konto, czy brać udział w ankietach. Ze względu na nowe regulacje prawne jesteśmy zobowiązani do poinformowania Cię o tym w wyraźniejszy niż dotychczas sposób. Dalsze korzystanie z naszej strony bez zmiany ustawień przeglądarki internetowej będzie oznaczać, że zgadzasz się na ich wykorzystywanie.
OK, rozumiem