Temat zupełnie nieoczekiwanie dla mnie zakiełkował i tutaj tylko naszkicuję sprawę grafiki.

Może ktoś się zainteresuje i stestuje możliwość realizacji tworzenia playfield. Ja póki co jedynie przeliczyłem, że powinno udać się w ten sposób rozwiązać sprawę emulacji tej konsoli ale na pewno nie dla dowolnego ROM-u.

Po pierwsze "emulator" tak naprawdę byłby binarnym rekompilatorem (offlinowym) ROM-ów dla 2600 na kod, który działałby z Atari XL/XE.

Po drugie w Atari 2600 całość grafiki w każdej ramce jest tworzona od 0 przez 6502 i wysyłana do układu graficznego. Niestety brak jest zgodnego trybu graficznego w ANTIC (2600 używa: 40x192 w 2 kolorach lub odcieniach + duszki (2x8 pixli) i pocisk (1x1 pixel) w "rozdzielczości" 160x192).

Ja widzę dwa rozwiązania problemu:
* użycie trybu tekstowego 40x24, w którym wszystkie znaki są zaprojektowane jako wszystkie możliwe do użycia zestawy kreseczek poziomych ("mono").
* użycie trybu tekstowego ANTIC 4 ze znakami zdefiniowanymi j.w. (full kolor)
* użycie trybu ANTIC 9 tyle, że nie sprawdziłem jeszcze czy ANTIC pozwala na podmianę zawartości poszczególnych linii i uzyskanie w ten sposób wymaganej rozdzielczości 192 lini w pionie.

W obu przypadkach dynamicznie zmieniające się tło będzie wyjątkowo trudne w realizacji ale na początek chciałby uzyskać emulację dla gier ze statycznym playfield i z dowolnie konfigurowanymi duszkami.

Tekst powyżej jest tylko luźnym zarysowaniem i na dziś brak jest po mojej stronie konkretnych planów realizacyjnych. Po prostu oglądając z zupełnie innego powodu opisy konsoli stwierdziłem, że "emulator" powinno udać się zrobić i z mojej pamięci jeszcze nikt tego nie zrobił.

Jeśli ja tematu nie ruszę to może komuś się innemu przyda/zachęci go ten tekst do ugryzienia sprawy. Myślę, że problem dużo bardziej interesujący jest dla Amerykanów. W Polsce Atari VCS miał raczej dosyć znikomą popularność.

--
1985? - DA'Fuzz, 1987? - Meritum, 1989? - Atari 130XE, 1992 - PC/AT, 2008 - Atari 130XE + Meritum

2

:d

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

3

ArchieIl napisał/a:

Po pierwsze "emulator" tak naprawdę byłby binarnym rekompilatorem (offlinowym) ROM-ów dla 2600 na kod, który działałby z Atari XL/XE.

xxl już zrobił jeden "rekompilator offlineowy" - możesz go popytać jakie są problemy. Polecam wątek http://atariarea.krap.pl/forum/viewtopic.php?id=4772

ArchieIl napisał/a:

Po drugie w Atari 2600 całość grafiki w każdej ramce jest tworzona od 0 przez 6502 i wysyłana do układu graficznego.

lda abs - 4 cykle
sta abs - 4 cykle
CPU jest taktowany 1,773447 MHz w PAL - zegar dzielony jest przez 2 więc masz 886723 cykle procesora na sekundę.
W ramce (PAL - 1/50 s) masz więc 17734 cykli więc jesteś w stanie przepisać rozwiniętą pętlą 2216 bajtów (najszybszy sposób). Rozdzielczość 40x192 daje Ci 7680 bajtów na Atari XL/XE. Nie liczę zupełnie cykli, które ANTIC zabiera na odświeżanie ekranu i zakładam, że ANTIC podczas generacji ma wyłączone rysowanie ekranu.
Nawet gdyby zastosować sprajty do rysowania obrazu a grafikę do rysowania sprajtów to i tak masz dla ekranu 960 bajtów do przepisania, a dla sprajtów 576 bajtów (chyba, że będziesz to modyfikował tylko tam, gdzie trzeba) - w sumie masz więc 1536 ($600) bajtów do przepisania co daje 12288 cykli (i zajmuje $2400 ramu). Reszta czyli 5446 zostaje Ci na logikę i generowanie treści.

ArchieIl napisał/a:

* użycie trybu tekstowego 40x24, w którym wszystkie znaki są zaprojektowane jako wszystkie możliwe do użycia zestawy kreseczek poziomych ("mono").
* użycie trybu tekstowego ANTIC 4 ze znakami zdefiniowanymi j.w. (full kolor)

8 linii po 2 stany - ilość kombinacji = ilość stanów do potęgi ilość linii; wychodzi 256 kombinacji - nie wystarczy Ci generatora znaków.

ArchieIl napisał/a:

* użycie trybu ANTIC 9 tyle, że nie sprawdziłem jeszcze czy ANTIC pozwala na podmianę zawartości poszczególnych linii i uzyskanie w ten sposób wymaganej rozdzielczości 192 lini w pionie.

Jak działałyby gry gdyby nie pozwalał? Rozdzielczość OS9: 80x192.

ArchieIl napisał/a:

W obu przypadkach dynamicznie zmieniające się tło będzie wyjątkowo trudne w realizacji ale na początek chciałby uzyskać emulację dla gier ze statycznym playfield i z dowolnie konfigurowanymi duszkami.

Przecież to zazpisywanie pełnych bajtów: $00, $11, $22 i tak aż do $88. Żadnego maskowania, przesunięć, liczenia - gdzie tu trudność?

hex, code and ror'n'rol
niewiedza buduje, wiedza rujnuje

4

To co - jest już jakaś wersja testowa? ;)

I Ty zostaniesz big endianem...

5

Napisz se..... ArchieIl dał pomysł i wytyczne, kierunek.... do przodu

6

mono napisał/a:

xxl już zrobił jeden "rekompilator offlineowy" - możesz go popytać jakie są problemy. Polecam wątek http://atariarea.krap.pl/forum/viewtopic.php?id=4772

Mówiąc szczerze po części z powodu tamtego wątku pomyślałem o emulacji 2600 czytając opis jak się ją programuje

mono napisał/a:
ArchieIl napisał/a:

* użycie trybu tekstowego 40x24, w którym wszystkie znaki są zaprojektowane jako wszystkie możliwe do użycia zestawy kreseczek poziomych ("mono").
* użycie trybu tekstowego ANTIC 4 ze znakami zdefiniowanymi j.w. (full kolor)

8 linii po 2 stany - ilość kombinacji = ilość stanów do potęgi ilość linii; wychodzi 256 kombinacji - nie wystarczy Ci generatora znaków.

Czemuż miałoby nie wystarczyć?
W obu trybach mam 128 znaków + inverse

mono napisał/a:
ArchieIl napisał/a:

W obu przypadkach dynamicznie zmieniające się tło będzie wyjątkowo trudne w realizacji ale na początek chciałby uzyskać emulację dla gier ze statycznym playfield i z dowolnie konfigurowanymi duszkami.

Przecież to zazpisywanie pełnych bajtów: $00, $11, $22 i tak aż do $88. Żadnego maskowania, przesunięć, liczenia - gdzie tu trudność?

Nie do końca.
a) 2600 rysuje tak naprawdę tylko połowę linii, a druga połowa to odbicie lustrzane lub duplikacja.
b) kolejność punktów w rejestrach rysujących linię jest "dziwna" i w przypadku dynamicznej zmiany wymagałaby utworzenia "rekonfiguratora" piksli, który nie wyrobi się w ramce.

Dużo zależy od inteligencji "rekompilatora". Statyczny playfield jest robiony raz i w Atarce wystarczy po utworzeniu playfield zająć się emulacją duszków, podmianą kolorów itp.

Dla gry typu pacman zmiana wyglądu playfield tak naprawdę wymaga zmiany kilku bajtów ekranu i można zrobić to z użyciem procedury dynamicznej o ile uda się stworzyć automat do przekonwertowania tworzenia całej ramki na tworzenie procedury zmieniającej różnice między poprzednią ramką i następną.

Tryb graficzny co prawda jest 80x192 ale statyczne podwojenie w poziomie nie jest wiele trudniejsze niż przestawienie bitów playfield (to jest 20 bitów, 2.5 rejestra bez jednolitości) z formatu rejestrów tworzenia wiersza ekranowego Atari 2600 do liniowości bitów w pamięci ekranu XL/XE.

--
1985? - DA'Fuzz, 1987? - Meritum, 1989? - Atari 130XE, 1992 - PC/AT, 2008 - Atari 130XE + Meritum

7 Ostatnio edytowany przez epi (2008-06-26 07:06:42)

mono napisał/a:

CPU jest taktowany 1,773447 MHz w PAL - zegar dzielony jest przez 2 więc masz 886723 cykle procesora na sekundę.
W ramce (PAL - 1/50 s) masz więc 17734 cykli więc jesteś w stanie przepisać rozwiniętą pętlą 2216 bajtów (najszybszy sposób). Rozdzielczość 40x192 daje Ci 7680 bajtów na Atari XL/XE. Nie liczę zupełnie cykli, które ANTIC zabiera na odświeżanie ekranu i zakładam, że ANTIC podczas generacji ma wyłączone rysowanie ekranu.

Zalecam doszkolenie: http://atariki.krap.pl/index.php/Ramka :)
Dodatkowo ANTIC nawet kiedy ma wyłączone rysowanie ekranu, to i tak po cichu zabiera 9 ze 114 cykli w każdej linii.

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

8

ArchieIl napisał/a:

W obu trybach mam 128 znaków + inverse

Hm, a to nie jest tak przypadkiem, że inwers jest robiony ZAWSZE z pierwszej połówki zestawu i nie może być inny niż znaki z tejże?

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.

9

Generator ma 128 znaków. Jeżeli rysujemy tylko pełne poziome linie, to te pierwsze 128 znaków może zawierać linie %00000000 (wszystkie linie puste) do %01111111 (linie 0-6 pełne, 7 pusta). Inverse daje nam pozostałe kombinacje w odwrotnej kolejności, czyli inwersja %01111111 to %10000000, dalej jest inwersja %01111110 czyli %10000001 itd. Wszystko się zgadza. Mamy wszystkie kombinacje. (No chyba że się mylę, bo rano jeszcze ;) )

10

jesli pierwsze 8 bajtow to 8x0, drugie 1,7x0, trzecie 0,1,6x0, 127 to 7x1,0, to 128 powinien wynosic 1,7x0 czyli tyle ile bajt pierwszy tylko inwese, bajt 255 tyle co bajt zerowy w inwerse.
?

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

11

Rzeczywiście w trybie ANTIC 4 nie do końca uzyskuje się to co jest potrzebne. Podmieniany jest tam tylko 1 kolor, a nie zamieniane ze sobą tło z kolorem znaków.

Podmiana duszków itp. i tak musi jednak odbywać się w każdej linii ekranowej i nie widzę problemów z "dopracowaniem" zestawu znaków na potrzeby wyświetlania pełnych 256 możliwych kombinacji linii poziomych. Powinna chyba wystarczyć zmiana podczas wyświetlania znaku koloru tła i odpowiednie ustawienie 5 koloru.

--
1985? - DA'Fuzz, 1987? - Meritum, 1989? - Atari 130XE, 1992 - PC/AT, 2008 - Atari 130XE + Meritum

12

Takiego emulatora nie da się zrealizować i to z wielu powodów, wymienię tylko kilka:

1. 2600 ma 20 bitów pamięci obrazu na stronie zerowej, co starcza na pół szerokości ekranu, druga połowa może być taka sama, lub odbiciem lustrzanym, a przez odpowiednio docyklowany zapis można wyświetlić co innego.
ANTIC nie ma takiego trybu. Najbardziej zbliżone byłoby wyłączenie ekranu i ustawienie duszków na maksymalną szerokość, co i tak nie rozwiązuje kwestii powielania grafiki na drugą połowę ekranu.

2. Duszki mogą być nie tylko rozciągane, ale również powielane (np. ten sam duszek wyświetlony 3 razy z odstępami).

3. Większość rejestrów sprzętowych jest na stronie zerowej i nie ma odpowiedników w a8.

4. Procek w a8 jest chyba tylko 1/3 szybszy niż w 2600, więc nie ma wystarczającego zapasu, żeby emulować rzeczy, które nie mają odpowiedników sprzętowych.

https://www.youtube.com/watch?v=jofNR_WkoCE

13 Ostatnio edytowany przez ArchieIl (2008-06-26 10:54:20)

online się nie da.

offline jak najbardziej w wielu przypadkach się da.

Przekompilowanie ROM z 2600 do postaci kodu wykonywalnego XL/XE przede wszystkich wielokrotnie zwiększy zajętość pamięci.
Jedna ramka statycznego playfield to ~10KB kodu.

Nie licząc gier z dynamicznie zmienianym playfield to wszystkie ROM-y 4KB powinny zadziałać z co najmniej 48KB RAM XL/XE z w miarę prostym rekompilatorem.

Problem taki, że niektóre kartridże miały 8, 16 i bodajże 32KB ROM (możliwe, że nawet więcej) i wtedy nawet statyczny playfield może szybko wybujać do np. 500KB kodu zrekompilowanego dla XL/XE.

Graficzny ANTIC 9 odpada ze względu na brak wystarczającej ilości cykli żeby zawartość linii ekranowej w locie podmienić.

Czyli zostaje offline przekompilowanie kodu do tworzenia playfield na znakacz i "emulacja" pozostałych rzeczy.
Dźwięk nie wiem czy da się w prosty sposób przenieść ale duszki, pocisk, zmiana kolorów, odczyt pozycji joy-ów, paddles itp. problemu nie powinny żadnych nastręczać.

EDIT: zegar i prędkości dla obu maszyn:
2600: ~1MHz bez straty cykli
XL/XE: ~1.7(1.8)MHz z podkradaniem cykli przez ANTIC (~1.3MHz rzeczywista w tym przypadku)

tyle, że 2600 musi również zmieniać synchronizację i robić kilka innych rzeczy za ANTIC-a, których w XL/XE nie trzeba przenosić co daje "zysk" minimum 40000 cykli na sekundę.

Na oko więc mamy "emulację" procesora i sprzętu z 0.9MHz na procesorze 1.3MHz czyli ~50% więcej cykli może pójść na potrzeby zmian w "używaniu" grafiki/dźwięku itp.

--
1985? - DA'Fuzz, 1987? - Meritum, 1989? - Atari 130XE, 1992 - PC/AT, 2008 - Atari 130XE + Meritum

14

No to do roboty - pisz taki rekompilator offline i pokazuj jakies efekty. W koncu "problemu nie powinny żadnych nastręczać" - prawda??

Bla bla bla bla, bla bla bla. Bla bla bla - bla - bla. Blabla bleee.

15

epi napisał/a:

Zalecam doszkolenie: http://atariki.krap.pl/index.php/Ramka :)
Dodatkowo ANTIC nawet kiedy ma wyłączone rysowanie ekranu, to i tak po cichu zabiera 9 ze 114 cykli w każdej linii.

Tak, tak :) Nie wiem czemu ubzdurało mi się, że zegar taktujący jest dzielony na 2 - z moich obliczeń wychodziłoby wtedy 57 cykli na linię - nie sprawdziłem :/. O tych 9 cyklach wiem...

@Archiel: masz w takim razie 2x więcej czasu na logikę. Tryb tekstowy z generatorem znaków w trybie 2ANTIC rzeczywiście (jak pisze Laoo) da się zrobić. Pozostają tylko problemy zasygnalizowane prez Fox'a...

hex, code and ror'n'rol
niewiedza buduje, wiedza rujnuje

16

Generalnie zamiast bawić się w emulację 2600, można skupić się na konwersji jakiegoś tytułu stamtąd (najlepiej takiego, którego na 8-bit nie ma).

I Ty zostaniesz big endianem...