2,726

(12 odpowiedzi, napisanych Bałagan)

Duddie napisał/a:

A monitor SC1435 mogę Ci naprawić.

dał byś radę rzucić okiem na mój SC1435?

2,727

(47 odpowiedzi, napisanych Scena - 8bit)

Pinex, ja też poproszę. zapodaj jakiegoś xexa

2,728

(14 odpowiedzi, napisanych Bałagan)

ok, zgłaszam zaległy iwenty
"Zeszło-Zeszłotygodniowe łikendowe piwko"
Miejsce: u mnie
Organizatorzy: Cyprian i Ja
Termin: zeszły zeszły łikend
Cena piwka: <zakładana cena>
https://lh4.googleusercontent.com/-ufvpcQ9NumE/VR8On8DhdII/AAAAAAAAIOA/LMXPN86qXiA/w843-h632-no/IMG_20150205_070724.jpg

Jedynie Irish Beer i Black Beer Stout warte uwagi.


Nowy termin:
"Zeszłotygodniowe łikendowe piwko"
Miejsce: u mnie
Organizatorzy: Cyprian i Ja

Termin: zeszły łikend
Cena piwka: <zakładana cena>
https://lh6.googleusercontent.com/-zftnaKjchXo/VR8Omg60TkI/AAAAAAAAIN0/a9viFCwschk/w843-h632-no/IMG_20150205_070403.jpg

Wszystkie cacy


Nowy termin:
"Dziś bania"
Miejsce: u mnie
Organizatorzy: Cyprian i Ja
Termin: dziś a w zasadzie to już trwa :)
Cena piwka: <zakładana cena>
https://lh4.googleusercontent.com/-3FRYpDdMWKk/VSqPpq1DC6I/AAAAAAAAIfU/agubGI9VeRw/w843-h632-no/IMG_20150412_173026.jpg

Na razie git

2,729

(14 odpowiedzi, napisanych Bałagan)

szach mat :)

2,730

(31 odpowiedzi, napisanych Programowanie - 16/32bit)

mały OT. Tutaj nowość od konkurencji :)
https://youtu.be/ZQ3-nnoXGng?t=49
Sprawdziłem w debuggerze winuae no i jeden obiekt generowany jest w cztery ramki

2,731

(31 odpowiedzi, napisanych Programowanie - 16/32bit)

Wczoraj w nocy udało mi się dodać optymalizację w której BLiTTER generuje nową tablicę leftEdge address/rightEdge address/leftMask/rightMask. Skraca ona czas całości o trzy linie skaningowe. Nie jest to powalający wynik, ale nowy kod daje miejsce na dalsze optymalizacje.

.poly_fill_line wygląda teraz tak:

.poly_fill_line:
    movem.w  (A0)+,D0-D3        ; D0 - left; D1 - right; D2 - left mask; D3 - right mask
    movea.l  a5,a4
    lea      logLine(a5),a5     ;next y offset line
    lea      (a4,d0.w),a4       ;add line x offset
    sub.w     d0,d1              ;line width
    
    asr.w    #3,D1
    bgt.s    .multi_words

Kod jest brudny, wieczorem siądę by go oczyścić i jutro wrzucę go na forum.

2,732

(31 odpowiedzi, napisanych Programowanie - 16/32bit)

Super, widzę że sprawy idą w słusznym kierunku. Wprowadziłeś kawał niezłego kodu, jutro siadam do studiowania :)

Ja niestety dopiero dzisiaj miałem okazję znowu siąść do kodu.
Bazuję teraz na ostatnim BT4PC_C. Dodałem nową procedurę BLiTTERa - inicjalizacja i generowanie nowej tablicy leftEdge/rightEdge/leftMask/rightMask oraz nową wersję poly_fill_line bazującą na tej tablicy. Pierwszy etap - generowani tablicy działa poprawnie, niestety drugi - poly_fill_line już nie. Dziś już nie dam rady, ale może jutro wieczorem uda mi się siąść do debuggera i przejść przez poly_fill_line.

Co do clippingu to czy on zawsze jest on potrzebny? Np. dla glenz nie wychodzącego poza ramki ekranu?

2,733

(50 odpowiedzi, napisanych Programowanie - 16/32bit)

Naprawdę słuszna koncepcja :)

jeśli chodzi o moją część to, mam działający kod ale niestety nie miałem jeszcze czasu zintegrować go z trianglefi. Muszę jeszcze raz przemyśleć użycie rejestrów gdyż w trianglefi większośc jest wykorzystana.

2,734

(50 odpowiedzi, napisanych Programowanie - 16/32bit)

Te dwa słowa na linię w przypadku 16 punktowych linii wynikało z tego że rejestry Halftone inicjowałem tylko jeden raz, ale za to wartościami dla wszystkich kolorów.

By wypełnić cztery bitplany w jednym strzale (z uwzględnieniem Mask1/Mask3) musiałem dać ujemne dstYinc, co powoduje że Halftone są dekrementowane. Działa to dobrze w "multi_words" ale nie w wariancie z tylko jednym słowem (<=16 punktów) na bitplan. Tak więc dla linii 16 punktowej musiałem zwiększyć szerokość linii do dwóch słów by móc zastosować ujemne dstYinc.

Widzę że w 5_C inicjujesz Halftone częściej, ale za to tylko jednym kolorem. To daje możliwośc poprawienia 16 punktowych linii.

2,735

(50 odpowiedzi, napisanych Programowanie - 16/32bit)

Niestety dopiero wieczorem będę miał więcej czasu, siądę do Twojego ostatniego kodu i zrobię parę testów.

Jeśli chodzi o wybraną ilość planów to jasne, zapodawaj :)
Jakby co to też mam kod, tylko jeszcze go nie publikowałem. W sumie są to kosmetyczne zmiany do aktualnej procedury blittera.

2,736

(50 odpowiedzi, napisanych Programowanie - 16/32bit)

Tomasz Wachowiak napisał/a:

Hmm... 2? A nie 4? A co z danymi do wypełniania zawartymi w halftonach?

cykl szyny (z punktu widzenia CPU/BLiTTERa) czyli 4 cykle CPU :)
17 cykli szyny na załadowanie danych z pamięci do D0-D7 i drugie 17 na przesłanie z D0-D7 do Halftone

Potem generowanie leftMask/rightMask na podstawie Halftone i leftEdge/rightEdge - 2 cykle szyny (Jeden odczyt i Jeden zapis) - 8 cykli procesora na jedną maskę


Tomasz Wachowiak napisał/a:

Tylko pamiętaj, że na lsrze stracisz. Ja poszedłem w drugą stronę i zrobiłem oddzielne tablice dla prawej i lewej strony, dzięki czemu zamieniłem lsra na dwa addy. No i sam movem sporo zabiera.

Chodziło mi o to by BLiTTER na podstawie leftEdge/rightEdge wygenerował tablicę leftMask/rightMask,
oraz by uniknąć lsl/addów BLiTTER dokonał na leftEdge/rightEdge operacji - AND $FFF0 i rotacji o 3 bity w prawo.


Najprościej będzie jak w wolnej chwili siądę do assemblera i sprawdzę czy to działa.
A tutaj napisany z palca, tak na szybko, szkic kodu fill_triangle_line_loop:

fill_triangle_line_loop
    movem.w    (A0)+,D0-D3          ; D0 - left; D1 - right
                                    ; D2 - left mask; D3 - right mask

    move.l    D6,A4                 ; current line address
    add.l    #160,D6                ; next line address
    lea        (A4,D0.w),a4         ; add line x offset


    sub.w    D0,D1                  ; line width

    asr.w    #1,D1                  ; words number
    bgt.s    .multi_words

    and.w    D2,D3
    move.w    D3,endmsk1(a6)        ;only mask
...

2,737

(50 odpowiedzi, napisanych Programowanie - 16/32bit)

No ciekawe. Chodzi o usprawnienie compute_triangle_dx?

Jakby co to mam ideę na zmianę w fill_triangle_line_loop. BLiTTER, na podstawie leftEdge/rightEdge może wygenerować left mask/right mask. Koszt to 34 cykle szyny na inicjalizację rejestrów Halftone a potem tylko 2 cykle szyny na maskę.
A jeszcze jakby udało się przeorganizować tablice leftEdge/rightEdge na taką:

REPT rezY
 ds.w leftEdge, rightEdge, leftMask, right Mask. 
ENDR

to w fill_triangle_line_loop można by jednym zgrabnym "movem.w    (A0)+,D0-D3" ładować od razu wszystkie potrzebne dane.

2,738

(522 odpowiedzi, napisanych Bałagan)

YERZMYEY/HOOY-PROGRAM napisał/a:

Btw, co prawda nie znam się zupełnie na SID-dzie i nigdy nic na to nie pisałem, ale zrobiłem dziś parę patternów, żeby sprawdzić, jak chodzą SID-owe procedury na Raspberry Pi 2 (GoatTracker).
No i wydaje mi się, na moje drewniane ucho, że chodzą prawidłowo.
http://yerzmyey.i-demo.pl/yerz_SID_rasp … i_test.mp3

brzmi git

2,739

(4 odpowiedzi, napisanych Scena - 16/32bit)

dzięki

2,740

(95 odpowiedzi, napisanych Sprzęt - 16/32bit)

dzięki

2,741

(95 odpowiedzi, napisanych Sprzęt - 16/32bit)

ok, a kto robił te pacze?

2,742

(4 odpowiedzi, napisanych Scena - 16/32bit)

git,
może pamiętasz z którego roku są te polskie produkcje?

2,743

(50 odpowiedzi, napisanych Programowanie - 16/32bit)

Tomasz Wachowiak napisał/a:

Nie bądź taki skromny... :) Te kilkanaście linijek jest przykładem na to, jak myśląc w nieszablonowy sposób można uzyskać świetne rezultaty. Jak dla mnie, to numer jeden od naprawdę długiego czasu.

:)

Tomasz Wachowiak napisał/a:

Myślę jeszcze o czymś innym :) Tyle, że dużo roboty i muszę cały kod napisać, żeby się przekonać, czy będzie szybciej. A krótkich linii bym nie ruszał, bo kod blittera jest zbyt piękny, żeby go prymitywną motorolą zastępować :P

zapodawaj :)

widzę jeszcze miejsce na drobne optymalizacje, typu:
- Jeśli ekran jest w obrębie 16bitowej strony to można:
"move.l a4,dstAddr(a6)        ; Destination Addr" --> "move.w a4,dstAddr+2(a6)        ; Destination Addr"

- zmienić adresowanie dla kodu blittera z:

    move.w    D0,hop(A6)
...
    move.w #0,endmsk3(a6)        ; EndMask3
    move.w    #-6,dstYinc(a6)        ; DestYInc
    move.l a4,dstAddr(a6)        ; Destination Addr
    move.w #2,xCount(a6)        ; xCount
    move.w d4,yCount(a6)        ; yCount
    move.b D7,lineNum(a6)        ; Do Blit, start with 3rd Half-Tone

na:

    lea        $FFFF8A3A.w,A6    ;HOP
    move.w    D0,(A6)
...
    move.w d4,-(a6)    ; yCount
    move.w #2,-(a6)        ; xCount
    move.l a4,-(a6)        ; Destination Addr
    move.w #-6,-(a6)        ; DestYInc
    move.w #0,-2(a6)        ; EndMask3

    move.b D7,$10(a6)        ; Do Blit, start with 3rd Half-Tone

Ale to urywa zaledwie kilkanaście cykli na linię.

2,744

(4 odpowiedzi, napisanych Scena - 16/32bit)

takie coś się właśnie pojawiło na DemoZoo:
http://demozoo.org/productions/128090/

a w środku taka perełka:
http://media.demozoo.org/screens/s/d4/9d/2f15.82956.png

2,745

(95 odpowiedzi, napisanych Sprzęt - 16/32bit)

git, czyli teraz TOS 4.04 działa na ST?
pewnie było sporo łatek. Będzie można je obejrzeć?

2,746

(1 odpowiedzi, napisanych Programowanie - 16/32bit)

Fajne. Jakby co to zapisane obrazki można obejrzeć online: http://260ste.appspot.com/

2,747

(50 odpowiedzi, napisanych Programowanie - 16/32bit)

Tomasz Wachowiak napisał/a:

Zachwycające. :D Poważnie. Świetny pomysł. Nie ma to, jak wyciskać ostatnie soki ze słabego sprzętu.

Dzięki. Wyprodukowałeś naprawdę fajny kod, przy nim optymalizacja BLiTTERa to błahostka :)
Swoją drogą BLiTTER był mocno niedoceniany ale myślę że może on czymś nas zaskoczyć.

Tomasz Wachowiak napisał/a:

Myślę, że dzięki przekonfigurowaniu programu da się jeszcze z 5% uszczknąć.

pewnie tak.
można jeszcze spróbować z rozdzieleniem linii - krótkie CPU; długie BLiTTER.

Tomasz Wachowiak napisał/a:

Muszę tylko żonę przekonać, żeby mi trochę czasu na testy dała :P
I będziemy kurdę najlepsi.. :P

hehe :)

2,748

(6 odpowiedzi, napisanych Programowanie - 16/32bit)

fajne Wachu.
dawaj więcej :)

2,749

(50 odpowiedzi, napisanych Programowanie - 16/32bit)

Może jeszcze dziś uda mi się wrzucić kod źródłowy.
Główną ideą było zaoszczędzenie cykli procesora przez usunięcie zbędnych instrukcji (zaskakujące :) ). Tak więc, podzieliłem kod blittera na trzy części - wykonywaną: tylko raz; raz na trójkąt; co każda linia. Najbardziej czasochłonna jest ta ostatnia, gdzie BLiTTER był programowany tymi samymi wartościami dla każdego bitplanu osobno.
Moja optymalizacja to wykonanie tylko jednego blittu dla wszystkich bitplanów. Rejestr yCount zawiera ilość wypełnianych bitplanów a dstYinc wartość ujemną - przesunięcie każdego bitplanu.
Haczyk tkwi w wykorzystaniu rejestrów Halftone, Line Number i OP. Dla wariantu 16sto kolorowego potrzeba 128 bajtów pamięci (16kolorów * 8bajtów), a dostępnych są 32 bajty.

--edycja--
dodałem plik dla wersji 4P. Teraz obsługuje tylko 4 bitplany. W wolnej chwili dorobię wariant dla innej ilość bitplanów.

2,750

(50 odpowiedzi, napisanych Programowanie - 16/32bit)

Mam pomysł inną implementację BLiTTERa. Chodzi o wykorzystanie rejestrów Halftone i Line Number.
Zrobiłem już pierwsze testy no i widzę że można dopalić całość jeszcze o kilkanaście procent.


---edycja---

Pierwsza próba.
To jest oryginalny BTRI4P:
http://www.atari.org.pl/forum/misc.php?action=pun_attachment&amp;item=2324

a to z nową implementacją BLiTTERa:
http://www.atari.org.pl/forum/misc.php?action=pun_attachment&amp;item=2323

Jest jeszcze jeden mały błąd w procedurze krótkich linii (czubek trójkąta ma inny kolor). Jutro rzucę na to okiem.