A monitor SC1435 mogę Ci naprawić.
dał byś radę rzucić okiem na mój SC1435?
Nie jesteś zalogowany. Proszę się zalogować lub zarejestrować.
Wyniki konkursu i gala FujiCup 2025 Poznaj zwycięzców dorocznego turnieju FujiCup 2025 wspierającego twórców gier na Atari XL/XE.
Fujisan 1.1.8 Nowa wersja emulatora Fujisan przynosi wsparcie dla FastBasic oraz poprawki błędów w obsłudze dźwięku.
Wyniki 24h Compo: System Error Poznaliśmy zwycięzców 24h Compo: System Error.
Gearlynx 1.2.1 Gearlynx to wieloplatformowy emulator konsoli Atari Lynx, który właśnie doczekał się ważnych poprawek.
II. Baskijski Turniej Atari 8-bit Relacja z drugiej edycji retro zawodów Atari 8-bit zorganizowanych przez Euskal Retro w Bilbao.
atari.area forum » Posty przez Cyprian
A monitor SC1435 mogę Ci naprawić.
dał byś radę rzucić okiem na mój SC1435?
Pinex, ja też poproszę. zapodaj jakiegoś xexa
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>
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>
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>
Na razie git
szach mat :)
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
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_wordsKod jest brudny, wieczorem siądę by go oczyścić i jutro wrzucę go na forum.
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?
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.
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.
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.
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ę
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
...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.
ENDRto w fill_triangle_line_loop można by jednym zgrabnym "movem.w (A0)+,D0-D3" ładować od razu wszystkie potrzebne dane.
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
dzięki
ok, a kto robił te pacze?
git,
może pamiętasz z którego roku są te polskie produkcje?
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.
:)
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-Tonena:
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-ToneAle to urywa zaledwie kilkanaście cykli na linię.
takie coś się właśnie pojawiło na DemoZoo:
http://demozoo.org/productions/128090/
a w środku taka perełka: 
git, czyli teraz TOS 4.04 działa na ST?
pewnie było sporo łatek. Będzie można je obejrzeć?
Fajne. Jakby co to zapisane obrazki można obejrzeć online: http://260ste.appspot.com/
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ć.
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.
Muszę tylko żonę przekonać, żeby mi trochę czasu na testy dała :P
I będziemy kurdę najlepsi.. :P
hehe :)
fajne Wachu.
dawaj więcej :)
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.
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:
a to z nową implementacją BLiTTERa:
Jest jeszcze jeden mały błąd w procedurze krótkich linii (czubek trójkąta ma inny kolor). Jutro rzucę na to okiem.
atari.area forum » Posty przez Cyprian
Wygenerowano w 0.162 sekund, wykonano 17 zapytań