1 Ostatnio edytowany przez tebe (2007-03-25 01:11:31)

http://madteam.atari8.info/index.php?prod=gtia2

Modyfikacja opracowana przez Psychola wprowadza nowy tryb pracy GTIA, który można włączyć/wyłączyć programowo. GTIA w tym trybie dokonuje ze stałą częstotliwością zapisu wartości pod wskazanym rejestrem $D0XX (w stylu lda #x\ sta $D0xx). Strona $D0XX z rejestrami GTIA w tym trybie pracy jest tylko do zapisu, nie można z niej nic odczytywać (odczyt możliwy jest po przełączeniu na tryb standardowy na przerwaniu VBL). W zależności od użytego trybu graficznego zmiany kolorów widoczne są na szerokości połowy znaku (np. tryb 8,15OS) lub całej szerokości znaku (np. tryb 9OS). Zapisywana wartość jak i młodszy bajt adresu rejestru $D0XX przechowywana jest w dodatkowej pamięci (128KB) do której dostęp z poziomu CPU możliwy jest na końcu tworzonego obrazu, obraz zawsze tworzony jest na całej szerokości (256 wpisów) i wysokości (256 linii) obrazu (GTIA w tym trybie nie obciąża głównego CPU). Możliwy jest scroll poziomy każdej z linii, jak i scroll pionowy ale już całego obrazu. Na załączonych zrzutach ekranów widać jak zmieniana jest zawartość rejestru $D01A na całej wysokości obrazu (jakość obrazu nie jest najlepsza, winna jest karta graficzna i kabelki połączeniowe). Oczywiście nie musimy dokonywać za pomocą tego trybu wpisów tylko do rejestrów kolorów, możemy dokonywać wpisów do pozostałych rejestrów np. pamięci duchów GRAFP0..3 co spowoduje ich rozmnożenie w linii. Do czego może przydać się taki tryb pracy GTIA? Do stworzenia mapy zmian kolorów dzięki której można wyświetlić obrazek bez interlacu w pełnej palecie kolorów XE/XL, do rozmnożenia duchów w linii, do zmiany trybu graficznego w linii.

p.s.
no i najważniejsze, jest to nadal Atari :)

*- TeBe/Madteam
3x Atari 130XE, SDX, CPU 65816, 2x VBXE, 2x IDE Plus rev. C

2 Ostatnio edytowany przez xxl (2007-03-25 02:58:23)

to mi wyglada na blitter, a czy ten upgrade stwarz mozliwosc bombardowania tylko rejestrow sprzetowych czy ramu rowniez? jaka jest dlugosc blitu. czy starszy bajt adresu jest do edycji? czy mozna w konkretnym miejscu wystartowac zapis do rejestrow czy to sie dzieje automatycznie od poczatku ramki do konca?

poka skrina ze zmiennym kolorem ekranu gr.0 a nie bakgroundu...

a tak poza tym to strasznie skompo napisales o tym upgrade, wlasciwie tylko smaka zrobiles, wiecej info.

---
jeszcze raz przeczytalem: przechowywane w pamieci sa pary (rej,wartosc) ? troche enigmatycznie to jest napisane, jaka musi byc kolejnosc? nie mozna w obrebie 'jednego znaku' mozna zmienic zawartosc tylko 1 rejestru?

http://atari.pl/hsc/ad.php?i=1.

3

Hej, tebe, a może by tak na stronce poprawić rozszerzenia odczytywanych obrazków z jgp na jpg, bo nijak się nie można temu bliżej przyjrzeć, póki co...

Btw. fajny apgrejd. :)

I Ty zostaniesz big endianem...

4 Ostatnio edytowany przez tebe (2007-03-25 14:03:34)

ok, rozszerzenia plików zostały poprawiony, wszystkie są na *.JPG

ogólnie bombarduje tylko swoją strone $D0XX czyli strone z rejestrami GTIA, nie ma aktualnie możliwości bombardowania innych obszarów, bo po co

pamięć tak naprawde jest 16-bitowa, dokonując jej zapisu podajemy wartość oraz młodszy bajt adresu rejestru GTIA (kolejność dowolna, bo i tak przechodzi to przez dodatkowe rejestry w których zapisujemy te wartości), ogólnie jeśli CPU wykonuje 2-a cykle zegarowe, GTIA w tym trybie w tym samym czasie jest zdolne wykonać jakby 6 cykli CPU

obraz wyświetlany jest cały od linii 0, pozycji plamki 0, do końca, zawsze wyświetlany jest fullscreen, bez obciążania głównego CPU

główny CPU obciążany jest jedynie przesyłem danych do pamięci GTIA i to jest wąskie gardło, bo wypełnienie całej pamięci z użyciem standardowego CPU6502 trwa ok. 130 ramek (3 sek), w sumie jest to 256x256x2 bajtów (128KB)

na szczęście nie trzeba zawsze wypełniać całej pamięci, można tylko jej fragment, można w sumie nie czekać aż plamka skończy rysować cały obraz ale wtedy trzeba się synchronizować z linią obrazu, ale nie ma licznika linii obrazu jak ma to miejsce w ANTIC-u ($d40b jest tutaj nie używane)

szerokość zmian kolorów uzależniona jest od GTIA, w trybach 9,10,11 OS interpretacja rejestrów GTIA najwyraźniej odbywa się "wolniej" przez co zmiana koloru jest szersza, w pozostałych jest "szybsza" przez co zmiany są węższe


inny sposób wytłumaczenia tego trybu działania GTIA:

wyobraźmy sobie mamy tryb 15OS (160x192 pixle w 4 kolorach), do dyspozycji dostajemy 4 pisaki o dowolnych kolorach z palety atari, możemy nimi rysować obraz linia po linii (od lewej do prawej) i co 2 pixle bitmapy możemy jednemu z tych czterech pisaków przypisać nowy kolor

*- TeBe/Madteam
3x Atari 130XE, SDX, CPU 65816, 2x VBXE, 2x IDE Plus rev. C

5

Ciekawa sprawa, tylko szkoda, ze nie powstała +10 lat temu ... ;)

6

Wszystko fajnie tylko gdzie schemacik? :)

7

Psychol mowi:
schemacik bedzie, jak hard bedzie skonczony, tera trza sie dogadac  w sprawie komunikacji programowej.
kompromis miedzy ilościa rejestrów a subiektywna wydajnościa, osobom niewtajemniczonym w schemat dziekuje za sugestie, nie obchodzi mnie co by można było gdyby... itd.
jest pewien schemat i kilka osób wie co ten hard potrafi, nie da sie tego przebudowac pod czyjes widzimisie...
jest to całkowicie oparte o układy logiczne, żadnych procków i innych dopalaczy na tym nie ma!
wyciska to 100% z gtia, gdzie podczas pracy procesora 6502 hamowanego przez halt z antica nie jest to możliwe.
działa to z taka predkościa jakby niechamowany 6502 wykonywał w jednym cyklu maszynowym:

        lda #$xx
        sta $d0xx

robiłem to w 4 dni po 2-3 godzinki z cześci wylutowanych z płyt od centrali e10a :)

pozdro psychol...

*- TeBe/Madteam
3x Atari 130XE, SDX, CPU 65816, 2x VBXE, 2x IDE Plus rev. C

8

Ale po co to robicie, skoro VBXE jest już właściwie gotowy?

Hitler, Stalin, totalniak, SSman, NKWDzista, kaczor dyktator, za długo byłem w ChRL, wypowiadam się afektywnie.

9

a tak zeby udowodnic ze gole GTIA nie powiedziało ostatniego słowa

*- TeBe/Madteam
3x Atari 130XE, SDX, CPU 65816, 2x VBXE, 2x IDE Plus rev. C

10

epi napisał/a:

Ale po co to robicie, skoro VBXE jest już właściwie gotowy?

Popularoność rozszerzeń jest w dużej mierze odwrotnie proporcjonalna od stopnia skomplikowania. Jeśli okaże się, że GTIA Upgrade będzie na tyle proste, że będzie można sobie to samodzielnie zlutować/wlutowac i inwazyjność tej operacji będzie względnie mała oraz nie będzie wymagało części sprowadzanych na zamówienie zzagramanicy, to uważam, że to nie jest wcale taki zły pomysł. Na "seryjną", profesjonalną produkcję rozszerzeń do atari w dzisiejszych czasach trudno liczyć (patrz F7, którego wątpie żeby ktoś był w stanie zrobić poza Pasiem), wydaje mi się więc, że ten czynnik ma niebagatelne znaczenie. A poza tym dłubanie przy atari to przecież fajna rzecz :)

Jest jeszcze tylko dużo białych plam odnośnie programowanie tego, bo nie wiem, czy da się na tym zrobić jakieś real-time efekty, czy może służyć tylko jako generator statycznych obrazków (super dopał do g2f). Jak wygląda zapisywanie pamięci tego rozszerzenia? Można zapisywać tylko sekwencyjnie czy można w dowolne miejsca?

11

dobrze by bylo zeby chociaz ze dwa przyklady np jak zapisac kolor taki i taki np w 2 wierszu i 3 kolumnie itp.

http://atari.pl/hsc/ad.php?i=1.

12

ustawiasz licznik na interesującą Cie pozycje X+Y*256, i zaczynasz "wpychać" wartość+rejestr, licznik jest zwiększany automatycznie, po przekroczeniu 256 bajta zwiekszany jest o strone, wiec można wpychać od dowolnej pozycji

*- TeBe/Madteam
3x Atari 130XE, SDX, CPU 65816, 2x VBXE, 2x IDE Plus rev. C

13

wychodzi na to ze w 1 lini bedzie mozna zmienic rejetry grafp/m ? pokryc 1 playerem caly ekran?

http://atari.pl/hsc/ad.php?i=1.

14

Zgadzam się z laoo w całej rozciągłości jego posta. Jeśli się okaże, że upgrade Psychola będzie kosztować rząd wielkości mniej niż VBXE to jest o czym rozmawiać. Electron szacował koszt Videoboarda na ~300PLN więc gdyby koszt GTIA Upgrade zamknął się w 100 zł to sprawa jest prosta. Poza tym dochodzi jeszcze kwestia dostępności elementów i stopień komplikacji w lutowaniu.

No i czekamy z niecierpliwością na jakieś dema pokazujące coś więcej niż tęcza na borderze.

Czy możecie wyjaśnić, Stirlitz, dlaczego wasz służbowy adres stirlitz@rsha.gov.de ma aliasa justas@gru.su?
Nie czytam PM. Proszę używać e-mail.

15

moze byc tecza na całej powierzchni ekranu ;)

XXL: tak, tylko pamietaj ze oprocz GRAFPM musisz wczesniej dla kazdej nowej pozycji ustawic HPOSP, no ale czasu masz do takich operacji już wystarczająco

*- TeBe/Madteam
3x Atari 130XE, SDX, CPU 65816, 2x VBXE, 2x IDE Plus rev. C

16

Kusiłby mnie jakiś przykład jak się ładuje dane do pamięci i jaka jest organizacja. Zapodajcie źródła tych efektów, jakie są na screenach. To pomoże wyobrazić sobie jak się programuje.

17

Zapodajcie źródła tych efektów

hyhz0rz

I koszt, przede wszystkim KOSZT!

Czy możecie wyjaśnić, Stirlitz, dlaczego wasz służbowy adres stirlitz@rsha.gov.de ma aliasa justas@gru.su?
Nie czytam PM. Proszę używać e-mail.

18 Ostatnio edytowany przez tebe (2007-03-26 22:51:50)

koszt, w granicy 100..120 zł na pewno powinno się to zmieścić

aktualnie wykorzystywane rejestry:

$d020 - ON/OFF
$d021 - tryb pracy liczników (ogólnie szersze/węższe zmiany dzięki czemu mamy
        większą/mniejszą zajętość pamięci GTIA i szybszą/wolniejszą możliwość jej modyfikacji)
$d022 - shift Horizontal (w trybie ON), licznik linii poziomej (w trybie OFF)
$d023 - shift Vertical (w trybie ON), licznik linii pionowej (w trybie OFF)
$d024 - DATA - wartość jaką chcemy wstawić do rejestru
$d025 - REJESTR (bity 0..4) do którego zapisujemy
        bity 5..7 do wykorzystania (bit 5 będzie powodował wygenerowanie przerwania NMI)

zapisywanie pamięci GTIA jest gdy $d020=OFF (wartości na jakie będzie reagował mogą jeszcze ulec zmianie), do $d022 wpisujemy pozycje poziomą, do $d023 pozycje pionowa i zaczynamy "zapychać" pamięć, wartość do $d024, młodszy adres rejestru do $d025 (kolejność istotna)

zapis do pamięci GTIA powoduje zwiększenie licznika $d022, jeśli przekroczy 255 to zwiększany jest licznik $d023, liczniki $d022-$d023 pozwalają na różne sposoby zapychania pamięci

gdy zapisaliśmy/zmodyfikowaliśmy pamięć GTIA możemy włączyć wyświetlanie $d020=ON, teraz zmiana licznika $d022 powoduje scrol poziomy, $d023 scrol pionowy wyświetlanej mapy kolorów/rejestrów


aktualnie trzeba wyłączyć OS aby nie nastąpił zwis, OS odczytuje niektóre rejestry np. $d013, jeśli $d013<>$3fa = jmp $c0df czyli pętla bez końca, OS czyści też całe strony pamięci (zdaje się po resecie) $d0,$d2,$d4,$d3 (bez $d301) wpisując tam zera

jeśli gtia w tym trybie ma być "przeźroczysta" dla systemu trzeba uwzględnić w/w sytuacje i pewnie jeszcze troche, aby GTIA nie zaczęło reagować gdy zapisywane są zera, no i żeby wystawić odpowiednie wartości, np. dla $d013=0 (wpiszcie do $3fa wartość <>0 powinien nastąpić zwis).


lepsze efekty do pokazania będą jak Psychol podłączy właściwą pamięć (64kb x 16bit), teraz jedzie na częściach które miał pod ręką

w wersji finalnej ma to byc płytka która wcisnie się w podstawkę po GTIA (jeśli nie ma podstawki trzeba ja wlutować), pare kabelków połączeniowych i koniec (nie ma cięcia ścieżek).

*- TeBe/Madteam
3x Atari 130XE, SDX, CPU 65816, 2x VBXE, 2x IDE Plus rev. C

19 Ostatnio edytowany przez xxl (2007-03-26 23:57:35)

> $d022 - shift Horizontal (w trybie ON), licznik linii poziomej (w trybie OFF)
+
> (bit 5 będzie powodował wygenerowanie przerwania NMI)

mozemy odczytac pozycje x plamki? generujemy przerwanie w dowolnym punkcie x ekranu?
heh zblizamy sie do amigi ? ;-) a czy bedzie patch na os zeby mozna bylo rozpoznac od kogo pochodzi sygnal przerwania ;) ?

> nie obchodzi mnie co by można było gdyby... itd.

no dobrze mozemy wystartowac 6502 od dowolnego punktu ale czy mozemy go zatrzymac do jakiegos punktu/do konca lini?
powkurzam. 6 bit $d025 to jakby sta wsync.

pierwszy raz widze zeby ktos umiescil rej rozszerzenia w miejsu gdzie trzeba, no dobra, drugi raz, pierwszy to pokey stereo.
bardzo mocna konkurencja dla vbxe. bardzo mocna.

ps. ciekawe co sie stanie jak zaczniesz szybko zapisywac wartosci do rej consol na 1bit wyjscie dzwieku ;-)

ps2. narysuj cos w gr.8 i zapodaj mape kolorow na tlo co cykl koloru czy tam dwa i co linie, ciekawe jak bedzie wygladal taki tryb graficzny

http://atari.pl/hsc/ad.php?i=1.

20 Ostatnio edytowany przez tebe (2007-03-27 01:48:00)

mozna wygenerować przerwanie, ale jeśli będzie zbyt gęsto umieszczone, np. w tej samej linii kilka razy, to CPU 6502 w najgorszym przypadku (zbyt długi kod obsługi przerwania) nie wyrobi się z obsługą

GTIA wygeneruje przerwanie dla CPU, ale go nie zhaltuje, GTIA robi swoje, CPU robi swoje tzn. w przypadku przerwania NMI skacze pod wektor $FFFA do obsługi przerwania (w tym czasie GTIA nadal "zapieprza" do przodu)
starczy czasu na kilka operacji (Antic tworzy linie średnio w czasie ~113 cykli CPU, pod warunkiem że zaczęliśmy od początku linii), rejestry na stronie $d0xx są aktualnie tylko do zapisu, dlatego OS głupieje bo probuje czytać np. $d013 (TRIG3 - znacznik dołączenia kartridża)

WSYNC ($d40a) tutaj nic nie zdziała, zahaltuje CPU6502, ale GTIA będzie robić swoje bo nic nie jest go wstanie zahaltować, możemy jedynie przejść w normalny tryb pracy GTIA co oznacza też że możemy zacząć zapisywać/modyfikować pamięć dopalacza

*- TeBe/Madteam
3x Atari 130XE, SDX, CPU 65816, 2x VBXE, 2x IDE Plus rev. C

21

no to będzie pacz do G2F :)

Kontakt: pin@usdk.pl

22 Ostatnio edytowany przez laoo/ng (2007-03-27 07:35:26)

Rozumiem, że jak GTIA jest w trybie OFF, to nic na ekranie się nie wyświetla (nie ma bombardowania). To stanowi jednak pewien problem w przypadku renderowania w czasie rzeczywistym, bo mamby do dyspozycji tylko czas powrotu plamki na zmianę pamięci, czyli niewiele. Bez tego, to można tyko sprzętowo dopalić graph2font :) Upgrade byłoby znacznie atrakcyjniejsze, gdyby było jakieś podwójne buforowanie: wyświetla się zawartość jednego fragmentu pamięci, a zapisujemy do drugiego i gdy gotowe jakimś rejestrem przełączamy...

tebe napisał/a:

wartość do $d024, młodszy adres rejestru do $d025 (kolejność istotna)

Czyli licznik zwiększy się w momencie zapisania czegoś do $d025? Cóż, pofantazjować można: jakbyście projektowali upgrade 2.0, to fajne byłoby np poświęcenie adresów $d080-$d0bf w ten sposób, że zapisana tam wartość, to "wartość", a młodsze 5 bitów byłoby odrazu "młodszym adresem rejestru". Zawsze trochę dopali :) (chociaż na 65c816 teraz też jest szybko)

23

rej. dopalki sa na stronie $d0, czyli dopalka sama moze sie wylaczyc - dopalka ustawia przerwanie i sie wylacza, po czym modyfikujesz pamiec dopalu, startujesz dopal i opuszczasz przerwanie. pytanie czy gtiaupgrade moze wystartowac od dowolnego punktu... a z tym haltem przydaloby sie do cyklowania (bo gtia upgrade ma dostep tylko do $d0 a czasem jest potrzeba zapisac cos nie na stronie $d0).

http://atari.pl/hsc/ad.php?i=1.

24

dopałka sama nie potrafi się modyfikować, bo rozpoznaje adresowanie tylko 5 bitów młodszego adresu rejestru (bity 0..4), czyli potrafi zapisywać tylko obszar strony $d000..$d01F (pozostałe bity młodszego adresu rejestru 5..7 są inaczej interpretowane i na nic się zda próba zadresowania >$D01F)

jeśli jest w trybie OFF to wyświetla obraz zwykłe niedopalone GTIA, czarny ekran będzie jak wyłączymy obraz dla ANTIC-a ($D400=0)

można zapisywać/odczytywać na stronie $D0XX ale na końcu rysowania obrazu, wyłączamy dopałke i możemy pisać/czytać $D0XX

*- TeBe/Madteam
3x Atari 130XE, SDX, CPU 65816, 2x VBXE, 2x IDE Plus rev. C

25 Ostatnio edytowany przez xxl (2007-03-27 08:48:31)

kolejne marzenia za grosz: modyfikowany adres startu pobierania przez dopal wartosci ze swojej pamieci.

http://atari.pl/hsc/ad.php?i=1.