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ć.
Zmarł twórca języka BASIC Zmarł Thomas E. Kurtz twórca języka BASIC
Zmiana serwera atari.area Serwis przeszedł właśnie ważną aktualizację infrastruktury
4th Atari ASCII Compo - wyniki Dostępne są już wyniki tegorocznego ATASCII Compo.
thing neo 1.60 Olivier Landemarre wydał nową wersję desktopu Thing.
VIII. Basque Tournament of Atari 2600 Kolejna relacja, wśród otrzymywanych od naszego przyjaciela Egoitza z Kraju Basków.
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.030 sekund, wykonano 63 zapytań