Ja jestem prostym człowiekiem i piję koncernowe pilse, aby był w butelce.
Tylko kurcze zaczynam się martwić, bo ja chcę się tego CRT pozbyć, a LCD wystawiłem przy okazji. Ale przyznam, że faktycznie jest fajny i nie jest to pierwszy lepszy.
Nie jesteś zalogowany. Proszę się zalogować lub zarejestrować.
Echa Outline 2025 Zakończyło się party Outline 2025 - zobacz pełne wyniki i relację z wydarzenia
Ice-T 2.8.0 Najlepszy terminal VT-100/ANSI na Atari 8-bit z nowymi funkcjami
Rozpoznaj: POKEY czy emulacja? Nowe wyzwanie z wykorzystaniem SUBcarta i nagrań dźwiękowych.
Anty *AJEK Copy 1.5 Nowa wersja kopiera Speedy 2700 z optymalizacjami i obsługą błędów
Yoomp! trafia na Atari ST Kultowa gra z Atari XL/XE przeniesiona na ST z nowym trybem gry
atari.area forum » Posty przez laoo/ng
Ja jestem prostym człowiekiem i piję koncernowe pilse, aby był w butelce.
Tylko kurcze zaczynam się martwić, bo ja chcę się tego CRT pozbyć, a LCD wystawiłem przy okazji. Ale przyznam, że faktycznie jest fajny i nie jest to pierwszy lepszy.
@Mateoos - będzie mnóstwo czasu na Zlocie. Czas na decyzję do soboty w południe.
I też bardzo chciałbym nie zabierać z powrotem do Wrocławia tego Thomsona.
Mam na wydaniu dwa monitory, których już nie używam / nie mam na nie miejsca. Odbiór osobisty Na Lost Party 2024.
Niech to będzie licytacja, która skończy się w sobotę 13 lipca 2024 w południe (jak deadline na compo).
Cena wywoławcza: 0 piw, dokładamy po piwie :)
1. TV 14" THOMSON 393R/TX807
Bez pilota. Ma wejście SCART i composite. Jak świeci, widać na załączonym obrazku. Wyniosłem go z poprzedniej firmy (za zgodą szefa ;) stąd naklejki.
2. Monitor Liliput FA1046-NP/C 10,4" 800x600
Ma sporo wejść, m.in S-video, ale jakość po tym złączu jest mocno średnia:
Jednakże prawdziwym walorem tego monitorka jest współpraca z Medusą. Jego 800x600 jest pixel-perfect żyleta, lepszego nie widziałem, jakby był stworzony dla Medusy:
Pewnym minusem jest, że w tym trybie nie ma audio, jak się włączy audio po DVI to z jakiegoś powodu traci się pixel-w-pixel.
No ale jest mały, w poręcznym pudełku, z zasilaczem i kablem HDMI, w sam raz na zloty.
Poprawiony kod, bo był zabugowany i nie działał na prawdziwym Lynksie (A właściwie z oryginalnym ROMem)
?65c02 equ 1
:?65c02 sta (?dest)
:!?65c02 sta (?dest,x)
Sprytne, nie wpadłbym na to.
Zrobiłem release z poprawką literówki i relatywną ściężką trace-loga do pliku ze skryptem.
Sprawdziłem najnowszą wersję na najnowszym MADSie. W emulatorze działa. Na oko tak samo, ale jak policzyłem instrukcje to spadło z 3045851 do 2780943. Ostateczny test trzeba zrobić na prawdziwym Lynksie.
Zresztą ściagnij Felixa i podaj mu upkr_math.lyx za argument (albo zrób drag&drop) i zobacz. Jak w tym samym folderze co upkr_math.lyx będzie upkr_math.lyx.lua to wygeneruje Ci trace z dekompresji (w folderze roboczym, czyli teraz tam gdzie jest Felix.exe, muszę to zmienić na folder z obrazem cartridge'a). Tak, w skrypcie jest literówka, muszę to poprawić :)
EDIT: kod miał błąd - nie działał na prawdziwym Lynksie. Dodałem poprawiony niżej
Zrobiłem test dla Lynksa kompresując jakiś losowy obrazek z sieci, wygenerowałem trzy wersje: z pętlą, z tablicami oraz z użyciem sprzętowego mnożenia i prawdę mówiąc "na oko" te dwa ostatnie są bardzo zbliżone. Nie potrafię od ręki policzyć czasu, ale w emulatorze policzyłem wykonane instrukcje i wyszło mi:
loop: 5527257
table: 3172612
math: 3045851
Z tym, że wersję ze sprzętowym mnożeniem można jeszcze podrasować, ale to trzeba testować na prawdziwym Lynksie, do którego nie mam teraz dostępu.
Załączam źródła, obrazek i binarki, teraz skompiluje się wersja z pętlą, łatwo przestawić na wersję z tablicami, ale wersja z mnożeniem wymaga hakowania źródeł, bo faktycznie MADS nie potrafi tego skompilować.
Weź mi nie wspominaj o tej dekadenckiej manierze ;)
Za obliczenia odpowiada chip Suzy, który jest 16-bitowy. Wszystkie jego rejestry są 16-bitowe i mają tę samą właściwość - zapis młodszego bajtu zeruje starszy, ale nie jest to traktowane jako zapis do starszego bajtu, tylko jako zapis liczby 16-bitowej, gdzie starsze 8 bitów jest uzupełnione zerami. Zapis do A jest konieczny, gdyż w przypadku mnożenia pod zapis starszego bajtu pary AB podpięty jest start mnożenia. Z tego co widzę w unupkr jest poprawnie - najpierw zapis do D (co zeruje C), potem do B (zerując A) a na końcu do A startując mnożenie.
Czy te rejestry są też do odczytu?
Wszystkie rejestry matematyczne są też do odczytu, mają jednak specyficzne funkcje. Rejestry AB i CD służą do przyjmowania argumentów dla mnożenia, za to jest do nich zapisywany wynik dzielenia. Nigdy tego nie sprawdzałem, ale zakładam, że po wykonaniu mnożenia są w nich niezmienione argumenty - tak przynajmniej zrobiłem w emulatorze i żadna aplikacja do tej pory się nie wywróciła na operacjach arytmetycznych, więc chyba tak jest.
Co do szczegółów działania można poczytać emulator: zapis i odczyt rejestrów oraz same obliczenia
Jeszcze jedna rzecz - w przypadku mnożenia bez znaku i bez akumulacji (domyślnie jest to wyłączone, można to aktywować w rejestrze SPRSYS) mnożenie trwa 44 cykle 16 MHz. Odczyt dowolnego rejestru Suzy zajmuje minimalnie 5 + 4 + 4 + 9 = 22 cykle, a np operacja RMW zerostronicowa minimalnie 5 + 4 + 5 + 4 + 5 = 23, więc "INC $xx; LDA H" powinno wystarczyć, ale trzeba byłoby to sprawdzić. Tak jak pisałem w drugim temacie - znajdę wystarczająco czasu, to napiszę test.
Znajdę czas to sprawdzę czy i jak działa mnożenie na Lynksie.
"Urządzenie" ma już wymyśloną minimalną funkcjonalność. Jest już zaimplementowane na brudno w Altirrze jako kolejna wersja / alternstywa dla rdzenia FX dla VBXE. Jesteśmy w trakcie implementowania tej funkcjonalności jako modyfikacją GTIA w rdzeniu Atari800 w MiSTerze ze względu na wygodę developiwania. Jak uruchomimy, to znaczniemy przenosić to do docelowego VBXE. Jeżeli się to nie uda, to znaczy, że projekt był przestrzelony, bo te minimum, które zaprojektowałem, to serio minimum którego próba obcięcia jest bez sensu. Ale będę się tym martwił jeśli to nastąpi, na razie na podstawie tego co wiem, że jest w rdzeniach FX jestem nastawiony optymistycznie - dlatego w ogóle to robimy.
To, czy rdzeń będzie opublikowany jako OpenSource - tego nie wiem. Ani ja o tym decyduje ani nie mam też zdania jak w tym konkretnym projekcie powinno być, coś mi się jednak wydaje że nawet jakby to otworzyć to i tak nic by z tego nie wynikło - mam za dużo otwartych projektów na githubie, żeby wierzyć, że komuś zrobi to różnicę. Na pewno mogę Cię jednak zapewnić, że jeśli projekt się powiedzie, to zostanie opisany i każdy będzie mógł napisać sobie grę używając tego rdzenia.
Jeśli chodzi o algorytmy komoresji to nie chce wychodzić jednak zbyt dalego poza kompresję jaka już jest, czyli wzięty z Lynksa RLE, który jest bardzo miły dla przepustowości pamięci, bo pozwala na czytanie mniej bajtów niż trzeba zapisać w pamięci obrazu, więc wychodzi lepiej niż kopiowanie i więcej nie trzeba.
a kolizje sprzętowo przez VBXE? czy programowo przewidujecie? obecnie w przypadku detekcji przez VBXE paleta kolorów jest rozdzielona na kolejne sprity, ayby można było to sprzętowo realizować
no ale taki Mortal Kombat to bardziej przez hitboxy
Doświadczenie pokazuje, że taki rodzaj wykrywania kolizji jest bezużyteczny. Sens mają tylko hitboxy.
Jeżeli starczy miejsca, to chciałbym dodać do rdzenia sprzętowy "akcelerator hitboxów" - trzymałoby się w pamięci VBXE tablice boxów i FPGA mogłoby wykryć kolizje pomiędzy wybranymi zestawami. Ale to zobaczymy ile się zmieści.
p.s.
czy Wy nie knujecie z myślą aby zrealizować 'fillpolygon' jak ma to miejsce na Lynxi-e, przez 2 sprity trójkątne ?
Na razie vanilla-prostokąty bez udziwnień. Lepiej żeby było szybciej niż fikuśniej. Ale można mieć z tyłu głowy, że goście od Lynksa zrobili potem 3DO ;)
Na poczatku sie zastanawialem PoCo? Ale jak do VBXE w obecnej formie to ma sens.
Niewielki ale ma :D (moje zdanie)
VBXE ma już 18 lat (to już powoli retro bo jest starszy niż nasze Atari podczas rozkwitu sceny :)), więc próba tchnięcia w stary sprzęt nowego życia za pomocą świeżego firmware'u jest wg mnie jak najbardziej w duchu sceny.
Dodatkowo jest tego naklepane setki sztuk, więc może mieć to nawet wymiar dość praktyczny, jeżeli dałoby się tego użyć prościej.
Czy do VBXE jest dostepne cokolwiek od czego mozna zaczac? Czy wszystko od zera trzeba? Czy moze na zasadzie Zrobmy burze mozgow, ktos to zlozy w calosc i nikt tego nie zobaczy w formie zrodlowej?
Nie potrafię odpowiedzieć na to pytanie, ale nie wiem, czy jest to witalne zagadnienie. Skoro przez 18 lat nikt się tym nie interesował, to dlaczego nagle teraz miałby być wysyp zainteresowanych? Na razie są wczesne prace nad pomysłem, o którym myślę sobie od paru lat, mam prototyp funkcjonalności w Altirrze (więc od razu będzie emulacja) oraz pracujemy z Mateuszem nad prototypową implementacją w MiSTerze, jak będzie z wciśnięciem tego co wyjdzie do VBXE to zobaczymy. Jak się nie uda, to nie będzie tematu :)
Jaki jest cel tej kompresji?
Trzymanie tego w RAM w formie rozkompresowanej (rozkompresowanie i zaladowanie do RAM), Czy raczej dekompresja w locie w razie potrzeby?
Dekompresja jest w locie podczas rysowania sprajta. Szału nie ma, ale w zależności od sprajta kilkadziesiąt procent rozmiaru można być do przodu.
rozmiar sprita będzie dowolny? jak ten system będzie rozpoznawał rozmiar jak dostanie PNG 'sprite sheet' z N-liczbą klatek animacji ? Aseprite pozwala generować 'sprite sheet' pionowe i poziome...
To zależy od narzędzi. Mamy już jakieś narzędzie do robienia rzeczy na Lynksa, tutaj blitter będzie dość kompatybilny z tym Lynksowym, więc narzędzia projektujemy analogiczne. Tu jest mój program do konwertowania PNG do sprajtów Lynksowych, mam już wersję dla "nowego rdzenia VBXE". Można poczytać co on potrafi - jest projektowany na generowanie scen, które mają wspólną paletę. Rozmiar sprajta z grubsza dowolny. Można trzymać wiele klatek animacji poziomo.
VBXE ma kilka slotów we flaszu. Jeszcze nie wiem jak to będzie można najlepiej technicznie rozwiązać, ale tak, trzeba będzie raz wgrać alternatywny rdzeń do VBXE i się na niego przełączyć, żeby odpalić grę, która go potrzebuje (to czego nie wiem, to czy gra będzie mogła poszukać sobie tego rdzenia i przełączyć się na niego sama, czy użytkownik będzie musiał sam się na niego przełączyć przed odpaleniem gry, ale to technikalia do ogarnięcia później).
Dałoby się ciekawą pracę magisterską napisać analizując i porównując sposoby, w jakie była generowana grafika w konsolach 8 i 16 bitowych.
Przez 18 lat nikt nie wziął i nie napisał innego rdzenia do VBXE, każdy, który by się za to brał, miałby swoją wizję. Moja wizja jest rezultatem moich doświadczeń i przemyśleń i uważam, że jest dobra. Póki nie okaże się, że w VBXE zrobić tego się nie da, rewolucji na miarę "zróbmy NeoGeo" nie przewiduję, bo to zupełnie inna filozofia (no i NeoGeo swoją wypaśność zawdzięcza bardziej grubej rurze, którą lecą piksele z cartridge'a na ekran, a nie jakiejś finezji - a takiej rury w VBXE nie mamy).
Hej.
Trochę niefortunnie wyszło, bo nie jestem mistrzem w pisaniu zwięźle. Może jakby pierwszy temat był w dwóch zdaniach, a nie na całą stronę, to byłoby jaśniej.
W skrócie chodzi o zupełnie nowy rdzeń do VBXE, który będzie robił trochę inne rzeczy i pomyślałem, że może ktoś ma w rękawie jakieś fajne pomysły, jak zmodyfikować format kompresji z Lynksa, aby było jeszcze fajniej. Jak nikt nie ma, to nie ma problemu, bo jakieś tam pomysły już mam. Dzięki za odzew!
Nie tylko wielbiciele BASICa zaglądają na to forum i różne mądre dyskusje tutaj już były. Jak nikt się nie znajdzie, to trudno. Jakieś tam swoje pomysły już mam.
Nie jestem pewien do jakiego działu to pasuje, bo to trochę interdyscyplinarne, ale lecim...
Kiełkowała mi od kilku lat idea zrobienia alternatywnego rdzenia do VBXE, który byłby bardziej dostosowany do typowych wyzwań stawianych przez gry i wygląda na to, że projekt ma szansę na materializację przy wielkiej i nieocenionej pomocy MatGuru.
Pod pojęciem "bardziej dostosowany do typowych wyzwań stawianych przez gry" rozumiem "coś mniej więcej jak zrobili w Atari Lynx". A w szczególności chcę wzorować się na lynksowym blitterze, którego principia działania nie polegają na przepuszczaniu pamięci przez operacje logiczne (tak jak działa to w klasycznym blitterze rodem z Amigi, Atari ST i w rezultacie też takim jaki został zaimplementowany w VBXE), lecz raczej... na rysowaniu sprajtów na ekranie. Nie jest to teraz miejsce na zgłębianie ogólnych mechanizmów działania tego blittera, zainteresowanych mogę odesłać do dokumentacji. Mnie teraz w szczególności interesuje jeden jego aspekt, a jest nim schemat kompresji grafiki zastosowany w ustrukturyzowanych danych lynksowego sprajta.
Przygotowałem uproszczony (wyrzuciłem rzeczy, które nie są teraz istotne) schemat struktury danych sprajta:
Nigdzie w strukturze sprajta nie jest zadeklarowana jego szerokość, ani wysokość, lecz jest on strukturalnie podzielony na wiersze, nagłówek wiersza jest offsetem do następnego wiersza, offset = 0 oznacza koniec sprajta. Pomiędzy offsetami są dane wiersza, które są podzielone na pakiety. Pakiet składa się z 5-bitowego nagłówka - 1 bit na wyznacznik, czy dane są literalne (1), czy powtórzone (0) oraz 4 bitów długości pakietu (N). W przypadku danych literalnych zawartość pakietu to dane N pikseli, w przypadku danych spakowanych jest to jeden piksel, który ma być powtórzony N razy. Czyli dość klasyczne RLE.
Dekompresor tego jest zrealizowany sprzętowo i też tak samo "sprzętowo" (w FPGA) będzie musiało to być zrealizowane w VBXE. Zagadnienie z jakim się zwracam na forum to:
Czy można wymyślić coś o lepszym stopniu kompresji, co nie byłoby trudne do implementacji w FPGA?
Nie muszę robić wiernej kopii rozwiązania z Lynksa, bo nie zależy mi na kompatybilności 1:1, np już uprościłem sobie strukturę ustalając na sztywno liczbę bitów na piksel do 4. Nie chciałbym wychodzić poza RLE - rozwiązania słownikowe wydają się zbyt skomplikowane. No chyba że ktoś uzasadni, że jakieś "LZ" byłoby do zrobienia i miałoby sens.
Na takie pomysły zmian wpadałem do tej pory:
* Można w strukturze opisu sprajta zawrzeć liczbę bitów do kodowania długości pakietu (w Lynksie jest to zawsze 4).
* Można liczbę bitów długości pakietu kodować per wiersz (np na trzech bitach od 0 do 7)
* A może w strukturze opisu sprajta zawrzeć liczbę pakietów, co ile ustalane byłoby ile bitów ma długość pakietu? Może pozbyć się wyznacznika literal/repeated?
Ogólnie ja nie wiem, czy można wymyślić coś lepszego, co dalej byłoby RLE. Pomysły i tak trzeba byłoby jakoś empiryczne zbadać na jakichś danych testowych. Zaznaczę tylko, że przeznaczeniem tej kompresji byłoby pakowanie 16-kolorowych sprajtów, które kodują przezroczystość na kolorze 0 i zwykle nie są jakoś bardzo duże. Maksymalny sensowny rozmiar, to 336 pikseli szerokości ekranu i każdy wiersz sprajta rozpatrujemy osobno jako niezależnie kompresowany ciąg.
Jest na sali jakiś spec od kompresji (wiem, że są ;p), który miałby jakieś pomysły w ramach burzy mózgów?
A tego właśnie nie wiedziałem, czy pierwsze wgranie emutosa jest flaszerem czy programatorem. Tylko flaszer ingeruje w obszar opisu wgranych TOSów, więc rzeczywiście przy pierwszym uruchomieniu będzie wyglądał na pusty. Dodatkowo błąd weryfikacji też nie uaktualnia tego wpisu (że też będzie pusty).
Mam nadzieję, że niedługo powstanie więcej software'u, ale mam teraz urwanie głowy z milionem innych rzeczy i jeszcze nie dałem rady do tego usiąść.
Tosster jest wielorazowego użytku. Możesz zaryzykować ;)
Wygeneruj sobie flaszer fabrycznego 1.62 i zaflaszuj na inny slot. Flaszer po starcie wydrukuje gdzie jest emutos a które są wolne.
Jakby pojawił się błąd weryfikacji, to możesz albo powtarzać aż się zweryfikuje albo zignorować bo to false negative przy odczycie zaflaszowanego rdzenia - soft jest do korekty.
Jeszcze jedno - teraz kabelek jest potrzebny bo nie dopisałem w software opcji przełączania rdzenia, trzeba resetem.
Nie może. USB-C to ikona nowiczesności. A bycie nowoczesnym oznacza używanie feminatywów.
Ja miałbym bez sprzętu przyjechać? Z roku na rok nawet przywożę więcej!
Feature, który zmienia swoje działanie pomiędzy wersjami 1.7.9, a 1.8.0 to taki wątpliwy feature ;)
atari.area forum » Posty przez laoo/ng
Wygenerowano w 0.461 sekund, wykonano 3 zapytań