@mateusz_s, post #1
@mateusz_s, post #1
; A0: Współrzędne X punktów ; A1: Adres początku pamięci graficznej linii ; BPR: Wartość stała - liczba bajtów w wierszu (bitmapa typu interleaved) CLR.W D1 ; Aktualny indeks słowa CLR.L D3 ; Dane graficzne (1=zapalone punkty) .następny: MOVE.W (A0)+,D0 ; Odczyt współrzędnej X punktu BMI.S .opróżnij ; Jeżeli wartość ujemna - koniec tablicy MOVE.B D0,D2 ; Kopia ANDI.B #$1F,D2 ; Odczyt współrzędnej w słowie 0-31 NEG.B D2 ADDI.B #$1F,D2 ; Odwrócenie liczby na numer bitu LSR.W #5,D0 ; Odczyt indeksu słowa CMPI.W D0,D1 ; Czy leży w tym samym słowie? BEQ.S .omiń ; Skocz gdy leży w tym samym słowie ; Opróżnienie bufora .opróżnij: LSL.W #2,D1 ; Liczymy indeks długiego słowo (dla CPU 68000) MOVE.L D3,(A1,D1.W) ; Zapisujemy do pamięci graficznej pod indeks D0 MOVE.L D3,BPR(A1,D1.W) MOVE.L D3,BPR*2(A1,D1.W) MOVE.W D0,D1 ; Aktualizujemy indeks BMI.S .koniec CLR.L D3 .omiń: BSET D2,D3 BRA.S .następny .koniec: RTS
@mateusz_s, post #1
@Hexmage960, post #8
Tak, przepraszam - wklejasz tylko w te bitplany wyrażone przez kolor piksela: Jeżeli ten kolor to np. 5 = %101 wklejasz tylko w bitplan 0 i 2.
@mschulz, post #9
; D4: Indeks koloru piksela ; A2: Dane graficzne tła w tej linii ; GLEB: Liczba bitplanów CLR.B D5 ; Licznik bitplanów 0, 1, ..., GLEB-1 BRA.S .wklej .nastBitplan: ADDI.L #BPR,D1 ; Zwiększamy przesunięcie by wskazywało na nast. bitplan .wklej: MOVE.L D3,D6 NOT.L D6 ; Odwrócone bity AND.L (A2,D1.W),D6 ; Pobieramy tło tam gdzie nie ma punktów BTST D5,D4 BEQ.S .ominbitplan ; Czy ustawić czy zostawić nieruszone? OR.L D3,D6 ; Ustawiamy punkty w bitplanie .ominbitplan: MOVE.L D6,(A1,D1.W) ADDQ.B #1,D5 CMPI.B #GLEB,D5 BLT.S .nastBitplan ; Gotowe