Cyprian napisał/a:

coś ciekawego knujesz?

Jak ma flachę, to aż zbrodnią byłoby nie poznać DSPka smile

2

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

Mmmm... Macra... Co ja bym bez nich począł? big_smile Fajna biblioteka, chociaż na małej dokładności robiona (8 bitów). Ze względów wydajnościowych (jeśli chodzi o M68k) działam na 15 bitowej. A moje sqrt i tak szybsze... tongue

3

(526 odpowiedzi, napisanych Zloty)

Na pocieszenie (prawdopodobnie wątpliwe) Grey napiszę, że kilka lat temu buchnęli mi cały samochód...

4

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

Oświetlenie pada z góry. smile Chciałem zrobić poprawne oświetlenie, nawet przy ścianach, które mają w danej chwili stałą jasność (właśnie flat shading), a do tego należy obliczyć znormalizowany wektor normalny (masło maślane tongue ) do płaszczyzny i na tej podstawie obliczyć jasność ściany. Oczywiście sposób podany przez Ciebie również zadziała, ale docelowo chciałbym dojść do ruchomego źródła światła (na razie mam procedurę, która liczy oświetlenie dla promieni padających prostopadle do obiektu (góra, dół, lewo, prawo).

5

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

Na fali uniesienia bardzo dobrą pozycją dema Back To Old Scholl na SV podsyłam kod liczący pierwiastki kwadratowe. Funkcja jest w formie makra, dzięki czemu można ją dopasować do swojego kodu i zaoszczędzić na BSR/JSR tongue  Parametry makra wyglądają następująco: rejestr z liczbą do spierwiastkowania, rejestr z wynikiem, rejestr pomocniczy1, rejestr pomocniczy2, rejestr adresowy z tablicą pomocniczą. Wygląda skomplikowanie, ale tak nie jest. Przykład wywołania:

sqrt_on_tabs d0,d1,d2,d3,a6, gdzie w d0 liczba do spierwiastkowania, a w d1 wynik. Zresztą zamieszczony przykład jest wart więcej, niż 1000 słów.

Wadą (niewielką) przygotowanego rozwiązania jest brak zaokrągleń do najbliższej liczby całkowitej (zaoszczędziłem jedno dzielenie), czyli pierwiastek z 25 będzie równy 5, ale pierwiastek z 35 wyniesie również 5 i dopiero pierwiastek z 36 da w wyniku 6 smile Z praktycznego punktu widzenia nie ma to absolutnie żadnego znaczenia - wszystkie lightsource w BTOSie są liczone tą metodą.

Zaletą jest oczywiście szybkość - do 65535 funkcja obywa się zupełnie bez dzielenia.

6

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

Gratulacje. Bardzo ładnie całość wyszła.

Tak to mniej-więcej wygląda. Przykład, jak zrobię kostkę big_smile, chociaż wystarczą drobne zmiany, żeby u każdego zadziałało - trzeba w odpowiednie miejsce (mała zagadka, chociaż od razu widać gdzie tongue) wstawić adres ekranu i powinno być ok. smile

lea blitter,a6
movem.l    clearParams+endmsk1(pc),d0-d5
movem.l    d0-d5,endmsk1(a6)
move.b    #mLineBusyHog,lineNum(a6)


section data

clearParams
    dcb.b   endmsk1,0
    dc.w    $ffff,$ffff,$ffff,8,-6-((4000-2)*8),0,0,4000,planes,$0200

8

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

To mnie zaskoczyliście z tym Blade Packerem. yikes Patrząc na kod potrzebny do odtworzenia muzy w Insomnii nie widzę nigdzie procedur depakujących, ale postaram się przeanalizować kod pod tym kątem. smile W sumie to mógłbym wyciąć kod potrzebny do odtworzenia muzy, ale na pewno nie jestem w stanie zrobić z powrotem moda. Na 90% procedura korzysta z bebechów octalyzera (zobaczcie na info, które dodałem do posta) - Insomnia korzysta z modroutine "Rachel".

9

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

OFTOP:  big_smile Teraz to ładna pogoda jest i trzeba to wykorzystać... tongue Ok. Coś tam zrobię... wink

10

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

Wygląda na jakąś karnację Octalyzera (do jej odtwarzania wykorzystywany jest plugin "rachel" znany właśnie z Octalyzera) . Tyle, że Octalyzer nie chce jej odtworzyć... tongue

11

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

Właśnie taką ewentualność chcę w domu sprawdzić. big_smile Ściągnę sobie odtwarzacz, który obsługuje dużo formatów i zobaczymy co się stanie.

12

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

W toolach nic nie widzę. Poszukam jeszcze u mnie w zachowanych źródłach.

13

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

Racja... Ale za cholerę nie wiem, jak ja to skonwertowałem. Nie widzę też, żeby się jakiś tool do konwersji u mnie uchował. sad

14

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

To była trackerowa muzyczka, tyle że w jakimś dziwnym formacie. Szczerze, to nie pamiętam czym była konwertowana lub na czym pisana, co nie przeszkadza mi, żeby ją wrzucić. smile Może ktoś będzie wiedział, jakim trackerem ją potraktować. smile

15

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

YERZMYEY/HOOY-PROGRAM napisał/a:

Bardzo mi się podoba.

big_smile

16

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

Planuję demko "Insomnia 2016" - nową wersję po 20 (!!!) latach od ukazania się oryginalnej "Insomnii". Oczywiście o ile starczy mi czasu i samozaparcia. No i oczywiście liczę na dużą pomoc grupowiczów smile

17

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

Trzeba poczekać kilka sekund na wygenerowanie obiektów - a później jest już bardzo ładnie. big_smile No i do tego ten obrazek umilający oczekiwanie... tongue Oczywiście kod w asmie do wglądu, efekt jest stosunkowo prosty do zakodowania - najpierw przeliczamy, rysujemy i zapamiętujemy sobie obiekty 3d, a później rzucamy ja na ekran w formie spriteów.

18

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

No i w końcu jest... Wersja ekstremalna z rozwiniętą pętlą wypełniającą. smile I znowu 9 scanlinii mniej big_smile

Edit: Tylko źródła jeszcze dodam tongue

19

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

W takim razie może uda się zejść poniżej 50% czasu ramki big_smile

20

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

Podsyłam obiecaną wersję. Doszło kilka flag, którymi można manipulować: clipOn - włącza/wyłącza clipping, debug - wersja pomocna w czasie debugowania kodu - teraz działanie programu można przejrzeć (oczywiście w debugerze) w sposób łatwy, prosty i przyjemny. Wersja jest już bardzo mocno zoptymalizowana i jedyne co można jeszcze zrobić, to rozwinąć pętlę rysującą linie poziome - uwalniamy wtedy jeden rejestr na wprowadzenie optymalizacji pod kątem adresowania blittera. Tak swoją drogą, to tylko dwóch optymalizacji adresowych zabrakło mi do pełnej optymalizacji pętli wypełniającej - jeszcze dwa rejestry i byłoby genialnie, a tak jest tylko super tongue )
Edit: Kurde! Dla linii dłuższych od 16 pix. (dla krótszych musi być bra, więc będzie podobnie jak w pętli) do wyciągnięcia jest od 12 do 16 cykli zegara plus 4 na optymalizację adresową. Hmmmm... big_smile

21

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

Dzisiaj po południu powinienem wrzucić gotową wersję i powiem tylko tyle: drukuje kod, tapetuję ścianę i codziennie się do niego modlę tongue Niestety nie mam chyba możliwości (halo panie adminie smile) wrzucenia obrazka z wersji przed i po, ale trójkąt w 4 planach, oczywiście na cały ekran zabiera tylko około 52% czasu ramki!!!

22

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

Yeah! Zbliżamy się do końca optymalizacji. Mam już 3-przebiegową wersję generowania masek na blitterze, a dodatkowo po mojej ostatniej optymalizacji kod wypełniania wygląda tak: big_smile

    movem.w    (a2)+,d0-d3            ;left x offset, right x offset, left mask, right mask
    sub.w    d0,d1                ;line width
    ext.l    d0
    add.l    (a5)+,d0
    asr.w    #3,d1
    bgt.s    .multi_words

Jak dodam pomniejsze optymalizację na tryby adresowania oczywiście wrzucę wersję ostateczną

23

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

Cyprian napisał/a:

Więc miałeś na myśli leftEdge i rightEdge w jedym przebiegu.

Dokładnie tak. big_smile Po tym, jak otworzyłeś mi oczy na odpowiednie wykorzystanie xCountów i yCountów pierwsze co robię, to zastanawiam się, czy nie da się tego odpowiednio wykorzystać smile W wolnej chwili połączę optymalizację i będziemy mieć BOSKIE wypełnianie. big_smile

24

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

Kur...ka. wink Wiem, gdzie popełniłem błąd w swoim kodzie. Założyłem, że smudge przyjmie wartości tylko z przedziału 0-15, a przecież większe zostaną po prostu obcięte (!!!) - jedno przejście mam nadmiarowe. Ale z tego co widzę, trochę inaczej podszedłem do tematu i (po połączeniu naszych optymalizacji) wydaje mi się, że całość uda się zamknąć w 3 przejściach! Jak znajdę siły, postaram się napisać odpowiednią poprawkę...

25

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

Jakie kroki wykonujesz? Przed implementacją byłem przekonany, że uda mi się właśnie w 4 krokach wszystko załatwić, ale skew dla offsetów wykonuje się przed maskami i jest dupa - musiałem rozdzielić offsety na 2 przejścia. A może udało ci się maski w jednym przejściu wygenerować?