Cyprian napisał/a:

coś ciekawego knujesz?

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

2

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

Mmmm... Macra... Co ja bym bez nich począł? :D 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... :P

3

(529 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. :) 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 :P ) 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 :P  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 :) 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

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

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

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

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. :O 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. :) 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:  :D Teraz to ładna pogoda jest i trzeba to wykorzystać... :P Ok. Coś tam zrobię... ;)

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ć... :P

11

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

Właśnie taką ewentualność chcę w domu sprawdzić. :D Ś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ł. :(

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ć. :) Może ktoś będzie wiedział, jakim trackerem ją potraktować. :)

15

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

YERZMYEY/HOOY-PROGRAM napisał/a:

Bardzo mi się podoba.

:D

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 :)

17

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

Trzeba poczekać kilka sekund na wygenerowanie obiektów - a później jest już bardzo ładnie. :D No i do tego ten obrazek umilający oczekiwanie... :P 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ą. :) I znowu 9 scanlinii mniej :D

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

19

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

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

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 :P )
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... :D

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ę :P Niestety nie mam chyba możliwości (halo panie adminie :)) 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: :D

    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. :D 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ć :) W wolnej chwili połączę optymalizację i będziemy mieć BOSKIE wypełnianie. :D

24

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

Kur...ka. ;) 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ć?