Na C64 nie mają wyjścia - ekran zwęża się z 40 do 38 znaków, a my mamy displaylist i obszar 4kB.
niewiedza buduje, wiedza rujnuje
Nie jesteś zalogowany. Proszę się zalogować lub zarejestrować.
TURGEN 9.3.1 Najnowsza wersja oprogramowania TURGEN wprowadza kilka istotnych ulepszeń.
FujiCup 2024 - głosowanie Wystartowało głosowanie w tegorocznej edycji konkursu FujiCup.
IX. Basque Tournament of Atari 2600 31 stycznia Euskal Retro Association zorganizowało IX. Baskijski Turniej Atari 2600.
Rogul 1.0f Poprawki i nowe funkcje
a8rawconv GUI Graficzny interfejs użytkownika (GUI) dla narzędzia a8rawconv
atari.area forum » Programowanie - 8 bit » demo effects
Strony Poprzednia 1 2 3 4 5 6 Następna
Zaloguj się lub zarejestruj by napisać odpowiedź
Na C64 nie mają wyjścia - ekran zwęża się z 40 do 38 znaków, a my mamy displaylist i obszar 4kB.
Przepraszam Panowie, ale ja czegoś nie czaję. W przykładzie Tebego zakomentowałem linijkę:
sta text+48-256,x
i scroll jak działał tak dalej działa. Gdzie tu czegoś nie rozumiem?
dopisz trochę więcej tekstu, jakieś znaczki bardziej rzucające się w oczy i odczekaj 256 bajtów, będzie różnica
Racja - wydłużyłem trochę tekst i jest różnica. Dzięki. Najwyraźniej muszę jeszcze trochę pokminić nad tym przykładem.
EDIT:
Jeszcze jedno pytanie - dlaczego w przykładzie SCREEN_WIDTH == 48? Ekran w $02 ma 40 wierszy, domyślam się, że trzeba trochę nadłożyć, ale dlaczego akurat tyle?
Na C64 nie mają wyjścia - ekran zwęża się z 40 do 38 znaków, a my mamy displaylist i obszar 4kB.
VIC ma tyle bug-ów że myślę że nie muszą wcale przepisywać... niektóre tricki zadziwiają...
http://codebase64.org/doku.php?id=base:vic
niby nie mają display-list ale zobacz np. to:
@seban: FLD znam :) ładny efekt chyba jeszcze z '90. Ciekawi mnie tylko czy mogą sobie tak dowolnie, jak my zmieniać co linię skanningową/tekstową adres pamięci ekranu (co do bajta, bo to pomocne przy skrolu poziomym). Bo zdaje się pamięć ekranu leży sztywno w konkretnym wybranym banku RAM.
@grzybson: kiedy włączasz skrol poziomy w dlist, wtedy linia ma rozmiar 48 bajtów lub 24 bajty (tryby tekstowe podwójnej szerokości) choć na ekranie wyświetlana jest tylko część określana szerokością ekranu, adresem w lms i hscrollem.
efekt znany ze starych dem, Seban pewnie pamięta, XXL wykorzystał to przy pewnej konwersji gry
co się stanie kiedy jako pamięć obrazu ustawimy adres zestawu znaków + N, gdzie N = <0..height>
dl dta $70,$70
:208 dta $4f,a(fnt+#)
dta $41,a(dl)
otrzymamy kolumny znaków <0..height/8>, przesunięte o linię względem każdej kolejnej kolumny, w każdej kolumnie te same znaki przesunięte o linię w górę, teraz wystarczy zmodyfikować te height/8 znaków aby otrzymać efekt ruchu na całym ekranie, w sumie maksymalnie modyfikujemy do 256 bajtów pamięci, spokojnie mieścimy się w ramce
w załączniku przykład wykorzystania takiej organizacji pamięci, w pętli tworzony jest wzór 8 bajtowy znaku, następnie przepisywany pod kolejny adres w zestawie znaków, i tak 30 razy
Hej!
Nie znałem tej metody, gdy bawiłem się w moje "fly dots", robiłem to metodą dość prymitywną i brutalną... smarowałem wszystko co się dało na ekranie graficznym... czyściłem ekran również metodą "brute force" :P ... pierwsze próby bez żadnych optymalizacji o dziwo "wyrabiały się w ramce", jednak efekt wizualny jaki osiągnąłem nie zachwycał mnie zbytnio... sprawę więc szybko porzuciłem nie mając pomysłu jak to wykorzystać... niby chciałem zrobić z tego scroll-a... zamieniając po drodze grafikę na "fonty", ale jakoś chęci i motywacji zabrakło... wspominajac to wszystko, zajrzałem nawet do bardzo starych dyskietek z QA, które o dziwo się przeczytały... więc pozwalam sobie załączyć te wypociny... jednak darujcie zanęcanie się nade mną za "jakość" i "szybkość" tego kodu ;-) to naprawdę stary kod (z czasów Code3, czyli wczesne lata '90), do tego wszystkiego jestem prawie pewien że miałem jeszcze ten sam kod właśnie wzbogacony o scrolling (na grafice) zamiast "samych latających kropek", ale nie mogę tego znaleźć... tak czy inaczej można to napisać o wiele efektywniej, nawet wykorzystując ekran graficzny :) więc jeżeli ktoś zechce sobie zrobić z tego oldschool-owy scroll, czemu nie :]
Format QA, z użyciem "dta c' ' oraz Atari control-characters", a więc skompiluje to chyba tylko QA. A może ktoś popełnił konwerter? ;) Do obejrzenia źródeł na PC w formacie ATASCII proponuję użyć: Memopad ( http://joyfulcoder.com/memopad/ )
Tego typu "concept idea" czy inne efekty w tamtych czasach pisałem i testowałem bezpośrednio pod QA, asemblując do pamięci oraz uruchamiając z poziomu QA. W tym wypadku wystarczy zmienić OPT na %00010101 i do tego ustawić "MemHi" na $A000 i RUN na $480. Po czym wykonujemy assembly a następnie RUN... efekt uruchamia się bez problemu bezpośrednio z poziomu QA.
Na koniec pliki o których była mowa wyżej:
1) plik ATR zawierający DOS II+, QA oraz źródła i plik .OBJ dostępne tutaj: fly_dots.atr
2) źródło do wglądu (format QA, ATASCII -> na PeCe użyć MemoPad R9 do podglądu) tutaj: fly_dots.asm
3) do kompletu jak ktoś na szybko chce sobie to uruchomić pod emulatorem plik XEX tutaj: fly_dots.xex
ps1) koncepcja względnej szybkości tego efektu polegała jedynie na tym że de-facto nie tam tam żadnej procedury PLOT, a stawiania pixela odbywa się jedynie przy pomocy jednego STA. Założenie jest takie że zawsze zapalony jest tylko jeden bit w obrębie bajtu i ruch punktu odbywa się jedynie w obrębie tego bajtu, w zależności od wartości zapisywanej na ekran (ustawiony tylko jeden z bitów) zmieniamy pozycję poziomą pixela z zakresie 0..7. Ruch w pionie odbywa sie na podstawie tablic adresów. A rysowanie każdego pixela z osobna polega za zapisywaniu innego bajtu z wykorzystaniem trybu indeksowego sta (adr),y gdzie rej. Y zawiera tak naprawdę nr. bajtu (w tym wypadku również pixela). Całości dopełniają dwie pre-kalkulowane wcześniej (Turbo Basic XL) tablice sinusów, dzięki którym uzyskujemy ciekawy wizualnie kształt poruszania się pixeli. To tak w wielkim uproszczeniu.
ps2) poszukam jeszcze jakichś źródeł logo-scrolla z użyciem ring-buffer. Jak coś sensownego znajdę to zamieszczę również tutaj.
Hej!
Ze starych dysków wygrzebałem źródło logo-scrolla zrealizowanego z użyciem bufora pierścieniowego, to też dość stary kod, myślę że to okolice '92 roku, ale sądzę że jest dość czytelny i minimalistyczny (pomijając tą sieczkę związaną z dta c'...')
Fonty użyte w scroll-u pochodzą z tej produkcji "Our5oft's part of UNITY Project". Ponieważ te fonty bardzo mi się spodobały, byłem na tyle bezczelny że "wyciąłem" sobie te fonty i postanowiłem zrobić własny logo scroll na nich bazujący, a następnie wykorzystać to we własnej produkcji, ale o tym na końcu.
Źródła jak zwykle w QA, do oglądania na PC należy użyć np. Memopad o którym pisałem wyżej. Kompiluje się tylko z użyciem QA (jak zwykle dane trzymam w formie dta c'...' / tak, tak... miałem do tego konwerter :P /
1) plik ATR zawierający DOS II+, QA oraz źródła i plik .OBJ dostępne tutaj: scroll.atr
2) źródło do wglądu (format QA, ATASCII, EOL $9B) tutaj: scroll.asm
3) do kompletu jak ktoś na szybko chce sobie to uruchomić pod emulatorem plik XEX tutaj: scroll.xex
Oczywiście ten przykład można skompilować do pamięci i uruchomić bezpośrednio z QA (Run $480, MemHI $a000), Assembly a potem RUN.
Cała procedura scrolla znajduje się od etykiety "scr". Procedura zapisu buforów od etykiety "pupa".
Tablice przechowujące znaki z których składają sie litery logo scrolla t0...t7.
Ponieważ szerokości liter są różne (głownie 4 fonty, tylko "M" i "W" mają szerokość 6 znaków, a także "!" oraz " o szerokości 3 znaków) wyboru szerokości litery dokonuje się bez tablicy, zakładając domyślną szerokość na 4 znaki i potem uwzględniając wyjątki dla M,W,!," ... ten kod widać od etykiety "OK". W kodzie zaszyta jest jeszcze tablica translacji nazwana "tt", dokonująca konwersji znaków w scrollu (dta d' ' / ANTIC codes) na odpowiednie indeksy w tablicach t0..t7
PS) gdyby to kogokolwiek interesowało to jest to jakaś wstępna wersja scrolla pochodzaca, z nigdy nie puszczonego dema zawierającego 256KB samlowanych fragmentów z utworu Another Day in Paradise - Phila Collinsa. Do kompletu dołożone było parę "digitalizowanych" obrazków z teledysku do tego utworu. Demo nigdy nie zostało puszczone ponieważ mało kto w tamtym czasie dysponował takim rozszerzeniem pamięci, i do kompletu z czystego lenistwa (było tworzone jako "concept idea") zostało umieszczone na dysku w formacie 720KB (wymagana stacja TOMS720) ... w takiej formie pozostało porzucone i nigdy nie ujrzało światła dziennego. Na własne uszy słyszał to chyba tylko Miker. Gdy już sensowne stało się wypuszczenie tej produkcji, dysk je zawierający przepadł w odmętach wieczności :P teraz grzebiąc po starych dyskach odnalazłem jakąś pierwszą wersję tego scrolla.
Jaskier kiedys napisal konwerter QA >X-asm: Converter.zip
ciekawe sposoby optymalizacji operacji mnożenia poprzez sumowanie tablic logarytmów, oraz inne sposoby optymalizacji obliczeń dla 6502
http://realtimecollisiondetection.net/blog/?p=21
a tutaj jak można błądzić http://everything2.com/title/Fast+6502+multiplication
w sumie to w paczce z mads-em jest fast_mul bodaj od Fox-a, który załatwia temat, ale skąd co się wzięło warto wiedzieć
a tutaj na temat rotacji bitmapy:
http://www.drdobbs.com/architecture-and … /184416337
dzięki za linki TeBe. Tak po ich obejrzeniu, o ile mnie pamięć nie myli to chyba gra "Mercenary - Escape from Targ" całą arytmetykę miała opartą o mnożenie na tablicach log/exp. Wtedy gdy patrzyłem w kod nie bardzo mogłem to zrozumieć bo moja wiedza matematyczna była znikoma.
Mnożenie oparte o właśnie metodę z tablicą kwadratów, tzn:
f(x) = x*x/4
f(a+b) - f(a-b) = a*b
Wykorzystałem w Invitro do SV2K11 przy początkowej części gdzie smaruje 3d star-field wraz z korekcją perspektywy, i to nawet "wchodzące w ramkę". Gwiazdek mało to na ich tle smaruje się jeszcze slow-motion sprite-scroller :P
jak zyskać cykle CPU, zastępując przerwanie DLI poprzez IRQ
http://www.atari.org.pl/forum/viewtopic … 18#p208218
dojrzewający następca ACTION, własne IDE, działająca już kompilacja do XEX-a
http://atariage.com/forums/topic/223277 … try3223308
I niedziałające x=x+5. :)
czołem, od kilku dni pracuję nad twirlem na c64, moja metoda jest inna niż podana na stronie Tebe, wyliczam oddzielnie tablice kolejnych kręgów i zapisuję w którym bajcie i w którym pixlu bajtu ma być pixel, druga tablica to pixele w danych okręgach. Procedura rysująca na stronie zerowej zapisuje pixel z przesunięciem z tablicy pixeli danego okręgu w danym znaku na ekranie. Z racji tego, że c64 ma 256 znaków w zestawie starczyło to na 4x4 pixle po 4 kolory każdy w znaku.
Mam jeszcze pytanie- jak shadow uzyskał taką dużą prędkość twirla w demie "triple threat"? czyżby rozpętlony kod dla każdego bajtu?
https://www.youtube.com/watch?v=64UNE482PZ4
skoro metoda jest inna niż ta na stronie Tebe, tzn. że robisz to źle ;)
p.s.
autorem tej metody jest Konop/Shadows, a rozpętlenie kodu jest jest Twoim świętym obowiązkiem
p.s. #2
kiedyś disasemblowałem jakieś intro 512b na C64, efekt końcowy to ~8KB rozpętlonego kodu
moja metoda jest o tyle dobra, że autorska, co do rozpętlenia kodu to pewnie by to przyspieszyło, ale mam opory przed łatwizną :)
edit:
P.S. nie sądzę, żeby moja metoda była gorsza, to co opisane na Twojej stronie wydaje się wolniejsze bez rozpętlenia.
Ja czasem rozpętlam połowicznie - tzn, mam osobny kod dla każdego wiersza. A pixle/bajty w wierszu jadę w pętli.
Wszystko zależy od tego, ile masz czasu procesora, pamięci, itd...
Rozpętlanie to niekoniecznie jest łatwizna. Wtedy trzeba bardzo ostro upakować logikę efektu w kilka rozkazów asemblera. To nie zawsze jest proste.
gorgh: unroll to podstawa szybkich efektów, a nie łatwizna, szczególnie na C64 który prędkością nie powala.
Pomijając sam algorytm na twirla polecam zmienić tryb na 4x4 FLI, co pozwoli albo na 16 kolorów/pixel albo 16 ditherowanych odcieni/pixel robiąc na znakach, drugi tryb można naprawdę kreatywnie wykorzystać, przykład tutaj:
http://codebase64.org/doku.php?id=base: … _of_colors
o dzięki.
co do hektaru kodu to mam opory przed stosowaniem tego, ale faktycznie może nieodzowne czasami
edit
swój kod do stawiania pixli optymalizowałem chyba 10 krotnie, obecnie pętla rysująca wygląda tak:
loop000
lda $ffff,y
bmi byte8
beq byte
sta byte2+2
sta byte5+2
byte8
ldx $ffff,y
byte
lda $ffff,y
byte6
and $ffff,y
byte5
ora $ff00,x
byte2
sta $ff00,x
dey
bne loop000
i efekt działa w 4 ramkach
co do speedcodu to niestey tojest trochę tak, że myśleć nad tym trzeba 4 razy mniej.
To chyba znacie ? zebrane w jednym miejscu zaawansowane techniki programowania XE/XL.
Ktoś z Lamersów jakiś czas temu potrzebował pomocy przy HIP-ie
https://atariwiki.org/wiki/Wiki.jsp?pag … an%20Atari
dla 9++ rozwinięcie można odnaleźć w 'Altirra Hardware Reference Manual' dołączonym do Altirry
Strony Poprzednia 1 2 3 4 5 6 Następna
Zaloguj się lub zarejestruj by napisać odpowiedź
atari.area forum » Programowanie - 8 bit » demo effects
Wygenerowano w 0.033 sekund, wykonano 67 zapytań