1

Od jakiegoś czasu w internecie można znaleźć trzy wersje Atari800 na komputery Pocket PC. Niestety ostatnia wersja jest dość stara, zawiera sporo błędów i nie jest optymalizowana pod procesory Xscale :-( Nie wiem jakie zdanie ma reszta szanownych forumowiczów, ale ja osobiście bardzo lubię sobie obejrzeć jakies demko, albo pograć w jakąś grę na PPC będąc on-the-go :-) (np. we wleczącym się godzinami pociągu).

Próbowałem we własnym zakresie skompilować najnowszą wersję Atari800 na Pocket PC, ale niestety mój brak wiedzy umiejętności w środowisku Microsoft Embedded Visual C++ szybko dał o sobie znać.... próba się nie powiodła.

Dlatego też zwracam się do wszystkich zainteresowanych tematem, którzy znają się na Visual'u z prośbą o pomoc.

2

Nie znam sie na C++, ale moge ufundowac nagrode dla tego kto sprawi, ze na moim PPC2002 z prockiem 200Mhz (Mitac Mio 338) emulator Atari XL/XE bedzie smigal z szybkoscia 100% oryginalu. Pisalem o tym wielokrotnie :(  Wydaje sie niemozliwoscia ale, na te popularna platforme jest 1 (!) emulator i dziala u mnie z szybkoscia 50% oryginalu. Dla przykladu, komercyjny i znacznie wygodniejszy PocketC64 dziala mbosko a emulator ST dziala z szybkoscia 80% oryginalu.
Jaka nagroda zmobilizuje Cie (albo innych) do bardziej wytezonej pracy? ;)

Moja propozycja nagrody: Atari Jaguar + Pad + cart DOOM.

3

Ja nawet sam dla siebie chciałbym skompilować i poprawić nową wersję na PPC, ale nie znam się za bardzo na Visual C++. Dlatego zapytuję publicznie ;)

4

Wbrew pozorom Atari ST i C64 łatwiej zaemulować z racji braku takiego chipa jak Antic ;)

5 Ostatnio edytowany przez Fox (2005-10-28 16:53:46)

Alex: co rozumiesz przez "najnowszą wersję Atari800" ? Jeśli Ci się mocno nie spieszy, to zaczekaj na 1.4.0, które wyjdzie wkrótce. W przeciwnym przypadku ściągnij sobie źródła z CVSa i ew. mailnij człowieka obecnie odpowiedzialnego za wersję WinCE.

Nosty: refresh na 3, ew. wyłączyć "HiFi Pokey" i może ew. użyć wersji nowszej od 1.3.6.
Jak sam zauważyłeś, PocketC64 jest komercyjny i pewnie nie odpala wielu demek (w odróżnieniu od Atari800).

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

6 Ostatnio edytowany przez Cyprian_Konador (2005-10-28 16:57:38)

na razie nie powstal emulator ktory Atari ST dobrze emuluje ST.
pierwszy problem to dobra emulacja samego prock 68000 -  prefetch i cykolowanie Div'ow.
nastepne to emulacja hardware - tutaj leza m.in blitter, microwire, emulacja procka klawiatury, dzwiek
no i emulacja bugow - shifter, mmu itp.

wiec nie jestem wcale pewien czy latwiej jest emulaowac ST...
:)

Lynx I / Mega ST 1 / 7800 / Portfolio / Lynx II / Jaguar / TT030 / Mega STe / 800 XL / 1040 STe / Falcon030 / 65 XE / 520 STm / SM124 / SC1435
DDD HDD / AT Speed C16 / TF536 / SDrive / PAK68/3 / Lynx Multi Card / LDW Super 2000 / XCA12 / SkunkBoard / CosmosEx / SatanDisk / UltraSatan / USB Floppy Drive Emulator / Eiffel / SIO2PC / Crazy Dots / PAM Net
http://260ste.atari.org

7

Fox: najnowsza w sensie nowsza niż ta, co aktualnie jest dostępna, czyli 1.3.0

Problem stanowią też błędy w GUI (szczególnie klawisze CTRL i SHIFT).

Ja wiem, że w źródłach niby jest wersja z bibliotekami dla PPC, ale ona się nijak nie kompiluje. EVC++ wywala błędy.... potrzebny jest spec od Visual'a Microsoftu.

Dla zainteresowanych tematem: pocketatari.retrogames.com

8

No to rzeczywiście świeża jak piwo otwarte 3 lata temu.
Może jednak lepiej zrobić tak, jak napisałem wyżej.

A poza tym nie wkleiłeś błędów, które się pojawiają, nie napisałeś, której wersji Visuala używasz,
nie wiadomo jakie błędy w GUI masz na myśli - jakiej pomocy więc oczekujesz?

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

9

Na razie szukam chetnych do pomocy, ktorzy się znaja :) Jak skompletuję zespół (min. 1 osoba) to przekażę wszystkie swoje uwagi, bo nie chcę zaśmiecać forum.

Tak w telegraficznym skrócie:
- nikt odpowiedzialny za wersje PPC się nie odezwał,
- używam narzędzi ze strony microsoftu czyli Embedded Visual C++ 4.0 z toolsami dla WM2003 Pocket PC,
- przy próbie kompilacji wyskakują błędy, że czegoś brakuje i kilka warningów (przygotuję szczegółowe opisy),

To jak Fox - piszesz się do pracy nad tym projektem? :)

10

Fox - dzieki ale przebilem sie juz przez wszystkie ustawienia i mimo to nie osiagnalem plynnosci i szybkosci duzo wiekszej niz 50% oryginalu. Co ciekawe w pliku readme pisze ze powienien sie wyrabiac przy procku 200MHz... Moze na innym typie procka.
Cyprian - emulator ST jaki mam na PocketPC calkowicie mi wystarcza - dopalilem kilkadziesiat gier i wsio chodzi. Tylko dzwiek mi sie chrzani ale to nie jest dla mnie priorytet.
Mam w nosie dema! Chce tylko sobie pograc na starych dobrych gierkach ;)

11

Alex: jedyną osobą odpowiedzialną za Atari800/WinCE jest Kostas Nakos i odpowiada on na maile z szybkością błyskawicy, oczywiście pod warunkiem, że napisze się po angielsku. Jeśli chodzi o zaśmiecanie
forum, to raczej zaśmiecasz je nie podając opisu problemu.

nosty: procek 200 MHz powinien spokojnie wystarczać niezależnie od rodzaju (chyba że to Z80 ;-) ).
Możliwe przyczyny to ślimaczący się dostęp do ekranu (wtedy trzeba przestawić refresh)
i brak sprzętowego FPU (wtedy trzeba wyłączyć HiFi Pokey). Kostas wspominał też coś o spadku
wydajności po użyciu menu Atari800 do ok. 50%, więc sprawdź, czy to to.

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

12

200MHz to chodzi w glownej mierze o x86 (na tej platformie byl najczesciej testowany)
jesli chodzi natomiast o strongarmy (czy ich nastepcow - xscale) to sa prawdziwe riski
tak wiec przy dobrej optymalizacji (a kopulatory ms w tej chwili maja zdaje sie jedne z lepszych
optymalizery) w teori - powinny lepiej sie sprawowac niz x86.

alex napisał/a:

- używam narzędzi ze strony microsoftu czyli Embedded Visual C++ 4.0 z toolsami dla WM2003 Pocket PC,

czy czasem nie jest to skrojona wersja (wzgledem platnej)?
czy czasem nie jest pozbawiona np. mfc?
atari800win+ jest zalezne niestety od mfc - tak wiec kopulator dostepny na stronach ms za darmo do pobrania
odpada - bo jest pozbawiony wlasnie tych bibliotek (niezle upraszczajacych pisanie pod winde...)

problemem moze byc brak jakichs plikow naglowkowych (co powinno byc do wyczytania na podstawie bladow kopulatora - mozesz mi je na priv. podeslac?) - ogolnie to mozesz sie do mnie na odezwac przez gg/jabbera/skype/maila - postaram sie pomoc przy rozwiazywaniu problemow z dowolnym kopulatorem...

odpowiednie dane przesylam ci na priv.

The UNIX Guru`s view of Sex:
unzip; strip; touch; finger; mount; fsck; more; yes; umount; sleep

13

jellonek: w tym poście jest mowa o Atari800 a nie o Atari800Win PLus. Biblioteka na WinCE ZTCW obejmuje MFC, brakuje natomiast całkiem podstawowych funkcji libc w rodzaju strdup().
ARMy mają świetny zestaw instrukcji, jednak przewagami x86 mogą być superskalarność (nie wiem jak z tym w ARMach), zmienny przecinek (ZTCW ARMy zwykle go nie mają) oraz dostęp do niewyrównanych słów i "mała indiańskość", co przydaje się przy emulacji 6502.

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

14 Ostatnio edytowany przez Cyprian_Konador (2005-10-31 11:36:57)

nosty napisał/a:

Cyprian - emulator ST jaki mam na PocketPC calkowicie mi wystarcza - dopalilem kilkadziesiat gier i wsio chodzi. Tylko dzwiek mi sie chrzani ale to nie jest dla mnie priorytet.
Mam w nosie dema! Chce tylko sobie pograc na starych dobrych gierkach ;)

no nie pisalem ze emulator nie dziala tylko ze jest okrojony w stosunku do orginalu :P

chodzilo mi tylko o to ze porownywanie wydajnosci niekompletnych emulatorow jest bezsensu

Lynx I / Mega ST 1 / 7800 / Portfolio / Lynx II / Jaguar / TT030 / Mega STe / 800 XL / 1040 STe / Falcon030 / 65 XE / 520 STm / SM124 / SC1435
DDD HDD / AT Speed C16 / TF536 / SDrive / PAK68/3 / Lynx Multi Card / LDW Super 2000 / XCA12 / SkunkBoard / CosmosEx / SatanDisk / UltraSatan / USB Floppy Drive Emulator / Eiffel / SIO2PC / Crazy Dots / PAM Net
http://260ste.atari.org

15

fox: atari800win+ podalem jako przykry przyklad zaleznosci z ta biblioteka - wiem ze pytanie dotyczylo ,,czystej'' wersji atari800. nie wiem poprostu czy MFC jest zaleznoscia atari800 w wypadq wersji PocketPC i czy wchozi w sklad tego udostepnianego MS Visual C++ 4 (nie mam teraz na to czasu - moze kiedys zajrze do MSDN-a...)

co do przewagi jednych prockow nad drugimi to w wypadku x86 czasem trudno o timingi konkretnych instrukcji, co w wypadku riskow jest sztywno okreslone (a embedded arm-a z jednostka zmienno przecinkowa nie kojarze :/ )
brakuje mi tez nieco kompilatora gnu obslugujacego xscale w native mode (nie wiem jak tam nowe gcc).
do tej pory nalezalo uzywac trybu zgodnosci z ARM, co powodowalo spadek wydajnosci.

ale i tak pozostaje faktem ze waskim gardlem prawdopodobnie pozostaje dostep do ekranu (zazwyczaj w wypadku pocketpc kozysta sie z wbudowane w StrongARM-y kontrolery matrycy LCD, czyli albo procek, albo kontroler ciagnie dane z pamieci poprzez szyne systemowa...).

The UNIX Guru`s view of Sex:
unzip; strip; touch; finger; mount; fsck; more; yes; umount; sleep

16

jellonek napisał/a:

czy MFC jest zaleznoscia atari800 w wypadq wersji PocketPC

Nie jest.

Jeśli chodzi o trudność w określeniu timingów, to cecha procków superskalarnych i/lub z kieszeniami, więc prawdopodobnie również nowych ARMów.

Offtopic: GCC 4.0 generuje np. "lea eax, [eax+1]", ktoś wie dlaczego nie po prostu "inc eax" ?

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

17

Nie zdziwiłbym się, gdyby to pierwsze było szybsze.

KMK
? HEX$(6670358)

18

Fox: OK, mogę wszystko wrzucić tutaj na forum. Mam nadzieję, że pomożesz :) Co do osoby odpowiedzialnej to podaj mi jakiś kontakt do Kostas Nakos'a, ja się kontaktowałem chyba z jakimś Czechem, którego namiary znalazłem w ostatniej wersji atari800, którą używam.

Jellonek: Pakiet Embedded Visual C++ dla PPC który jest dostęny za darmo na stronach Microsoftu jest pełnym pakietem do produkcji wszelakiego softu na PPC. Nie ma płatnej wersji EVC++. O ile dobrze pamiętam MFC zdaje sie jest ale trzeba pamiętać, że to jest dla PPC. Cieszę się, że jesteś chętny do pomocy. Odezwę się :)

Dla usprawnienia prac przedstawiam krótki harmonogram prac na początek:
1) poprawne skompilowanie najświeższej wersji atari800 WinCE,
2) usunięcie błędów virtualnej klawiatury (shift, ctrl, caps etc.)
3) optymalizacja przełączania banków rozszerzonej pamięci.

19 Ostatnio edytowany przez jellonek (2005-10-31 15:17:01)

zawsze tak generuje?
moze chodzi o wypelnienie? (alignacje - zwana przez niektorych alienacja 8-)

pierwsza wersja to 3 bajty (prawie dubble word), druga tylko jeden - moze dluzszy rozkaz latwiej ladowac do pipeline?

alex - mala prosba: nie wprowadzaj do uzycia blednego skrotu... ppc to skrot od PowerPC (procesorow) a nie od PocketPC. odnosnie tych drugich - nazywaj je pelna nazwa, bo jak sie twoje posty czyta to ppc powoduje malutkie zmieszanie...

The UNIX Guru`s view of Sex:
unzip; strip; touch; finger; mount; fsck; more; yes; umount; sleep

20

Drac030: pewnie tak, ze względu na to, że wykonuje je część procka od generowania adresów, a nie ALU.

Alex: pewnie napisałeś do Stehlika, który czasem bywa zajęty;
http://cvs.sourceforge.net/viewcvs.py/* … TALL.wince

Jeśli chodzi o "3)" to raczej pobożne życzenia (czytaj: jeśli uda się wam to zrobić, to pogratuluję).

jellonek: dłuższy rozkaz na pewno trudniej załadować, w dodatku taki, który ma parametr

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

21

fox: pamietaj ze kazda komorka w x86 pipeline ma szerokosc 32bit, wiec przesuniecie 8bit do nastepnego cell z zaladowanych 4 kolejnych bajtow moze byc szybsze niz przesuniecie 24bit, ale watpie coby mialo to na tyle znaczenia aby wlasnie to przewazalo - za to twoj argument jest o wiele sensowniejszy, czyli uzywanie w tym celu jednostki odpowiedzialnej za generowanie adresow, co pozwala na odciazenie ALU, a co za tym idzie - wieksze prawdopodobienstwo wykonania rownolegle 2 rozkazow, jesli dany procesor na to pozwala...

btw. nie ma to jak jedno zdanie pieco wersowe ;)

The UNIX Guru`s view of Sex:
unzip; strip; touch; finger; mount; fsck; more; yes; umount; sleep

22

Jellonek: Spróbuję pamiętać :-) ale w środowisku pocketowców przyjęło się, że PPC to Pocket PC i mi to juz weszło w krew. O PowerPC to ja juz dawno zapomniałem. Chyba jeszcze tylko fanatycy ogryzków ich używają, ale juz nie długo, bo Apple przechodzi na procki Intela.

Fox: No właśnie - Stehlik :) Nic mi niestety nie odpowiedział... :( Z tą pamięcią to wiem, że to wynik takiego, a nie innego rozwiązania problemu. Trzebaby pewnie przeogranizować zarządzanie pamięcią, żeby nie było przepisywania tylko sprytne indexowanie.... no ale to tak na wyrost :) Może wspólnie uda sie coś wymyśleć :)

23

Problem w tym, że nawet sprytne indexowanie nie będzie efektywne przy dostępie do kodu 6502,
którego jest kilkakrotnie więcej, niż dostępu do danych - wystarczy spojrzeć na:

lda #0
sta $600

- 5 bajtów kodu i tylko jeden danych. Jeśli nie chcesz przepisywać z dodatkowej pamięci
do tablicy memory[], to nie tylko każdy dostęp do kodu musi być przez wskaźnik,
ale nie możesz też używać 16-bitowego dostępu w przypadku procków little-endian łykających
niewyrównane dane (w szczególności x86). W przypadku dem wykonujących rozpętlony
kod w dodatkowej pamięci będzie więc spory spadek wydajności, to samo we wszystkich programach
wykorzystujących tylko 64 KB.

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

24

Tak głęboko jeszcze nie wnikałem, ale zastanawiałem się czysto teoretycznie nad emulacją banków pamięci w taki sposób:

- tablica memory w emulatorze miałaby długość -> liczba_banków_pamięci*$10000,
- przełączanie banków zamiast przepisywania byłoby relizowane przez dodanie do indexu wartości nr_banku*$10000,
- bank byłyby przełączany tylko wtedy, kiedy licznik adresowy procesora lub adres w którymś z rozkazów pochodziłby z zakresu $4000-$7fff.

Oczywiście w takim przypadku w każdym emulowanym banku mającym $10000 tracimy 48 KB, ale mamy prosty mechanizm przełączania i nie trzeba przepisywać :)

Od razu mówię, że nie analizowałem kodu emulatora i nie wiem jak to w tej chwili działa dokładnie więc mój pomysł może być bez żadnego sensu, ale na razie są to luźne rozmyślania na ten odległy temat ;)

25

Nie zrozumiałem, co chcesz osiągnąć przeznaczając $10000 na każdy bank zamiast $4000.

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