3,426

(72 odpowiedzi, napisanych Emulacja - 8bit)

nosty, to nie jest takie proste. W takim emulatorze atari800 większość mocy maszyny zżera prawdopodobnie nie tyle sama emulacja CPU, co fakt, że emulator musi też utrzymać proporcje czasowe rozkazów i w ogóle działania całości. Czyli, LDA #$02 / CLC / ADC #$02 nie ma tylko dodawać dwa do dwóch, ale jeszcze zrobić to w sześć cykli wirtualnego czasu. To tak tytułem prostego przykładu.

Poza tym faktem jest owszem, że dzisiejsze procesory są nowsze i lepsze, ale zwróć uwagę, że 6502 jest procesorem ośmiobitowym, a rozkazy operują na pojedynczych bajtach. W związku z tym spora część mocy obliczeniowej takiego 32-bitowego procesora jak Motorola 68030 się przy emulowaniu takiego LDA/STA po prostu marnuje, bo co z tego, że procesor jest w stanie machnąć 32-bitowe move, skoro to w normalnym silniku 6502 w zasadzie nie zachodzi (aczkolwiek można posztuczkować, pewnie, wszystko można). Itd.

3,427

(22 odpowiedzi, napisanych Software, Gry - 8bit)

Pecuś: ja mam te procedury, nawet w formie źrodłowej (i binarnej także). Mieszczą się w 2k. Wrzucę przy okazji.

3,428

(72 odpowiedzi, napisanych Emulacja - 8bit)

Fox napisał/a:

Taką różnicę w przypadków programów na Atari "migających" bankami pamięci mogłoby tłumaczyć użycie sprzętowego mechanizmu stronicowania, zamiast przepisywania pamięci.

Do użycia MMU w celu bankowania pamięci nigdy nie doszedłem, porzuciłem dalszą pracę nad tym programem sporo wcześniej, kiedy się przekonałem, że host jest za wolny na to, co chcę zrobić. Teraz (68060/66 MHz) jest prawdopodobnie wystarczająco szybki, no ale mi się już nie chce.

3,429

(72 odpowiedzi, napisanych Emulacja - 8bit)

Jellonek: tylko że Numen na ZX81 nie istnieje, a ja na poparcie moich słów mam działający program.

To, że mam rację, możesz łatwo sprawdzić wg mojej sugestii powyżej: wziąć maszynę o analogicznej mocy obliczeniowej (3,8 MIPS) i przy użyciu dowolnego kompilatora C zaimplementować w tym języku engine 6502 - jeśli osiągniesz w tym silniku 50% szybkości mojego, to osobiście Ci pogratuluję i odszczekam.

EDIT: Istnieje też alternatywa, emulec gdzieś tam się wala po sieci w postaci binarnej (o ile pamiętam 150k pliku wykonywalnego), możesz wziąć disasembler i zajrzeć.

Jeśli natomiast nie chce Ci się tego robić, ale za to wolisz twierdzenia o Numenie na ZX81, to - jak to już zresztą zostało dośc dawno temu powiedziane - dalsza dyskusja jest bezprzedmiotowa.

3,430

(72 odpowiedzi, napisanych Emulacja - 8bit)

Cieszę się, że nieporozumienie zostało wyjaśnione.

kompilator nie ma bladego pojęcia, co kompilowany program robi, oraz jak można wykorzystać architekturę danej maszyny do zrobienia tego lepiej.

Jest dokładnie odwrotnie. Program jest precyzyjnym zapisem algorytmu, więc kompilator dobrze go rozumie.

Zgadza się, o tyle o ile. Kompilator faktycznie "rozumie" program pod względem formalnym, "wie" co robią poszczególne instrukcje oraz złożone z nich wyrażenia. Nie rozumie jednak programu jako całości, nie wie, do czego on ma służyć i co W ISTOCIE robić. Nie może tego wiedzieć, bo jest tępym automatem o zerowej inteligencji i coś takiego jak "koncepcja" czy "idea" jest mu kompletnie obce.

W 9999 przypadków na 10000 ta wiedza nie jest mu do niczego potrzebna, a efekty i tak są zadowalające. Zachodzi jednak wyjątek, o którym tu mowa, przy którym kompilator nie jest w stanie wykorzystać zasobów maszyny, bo nie wie, że mogą być ewentualnie do tego przydatne. A nie wie tego, bo nie wie do czego mają być przydatne, a tego z kolei nie wie, bo nie rozumie, co program ma robić. Itd.

3,431

(72 odpowiedzi, napisanych Emulacja - 8bit)

Fox napisał/a:

Jest mi ono niesłusznie przypisywane. :)

Jeśli niesłusznie, to uznaj aluzję za niebyłą.

3,432

(72 odpowiedzi, napisanych Emulacja - 8bit)

jellonek napisał/a:

drac030: przeslij foxowi swoj kod, a GWARANTUJE CI (gwarancja w postaci litra finlandii), ze jesli znajdzie czas i checi (to drugie bedzie pewnie motywowane mozliwoscia zastosowania twoich rozwiazan w atari800) to przeniesiony przez niego Twoj kod do postaci C, bedzie spelnial twoje wymagania.

Nie będzie. Język C nie pozwala na zastosowanie takiej konstrukcji. I wolałbym, żebyście jako ludzie inteligentni obaj czytali ze zrozumieniem to, co piszę.

3,433

(72 odpowiedzi, napisanych Emulacja - 8bit)

Fox napisał/a:

drac030: Bardzo niegrzecznie z Twojej strony. Chwalisz się, że zrobiłeś coś lepszego niż grupa ludzi tworzących od 10 lat projekt Atari800 oraz sztab ludzi tworzących gcc, a nie pokazałeś nic konkretnego i sam twierdzisz, że nie masz ochoty pokazać. To nie ja, tylko Ty masz coś do udowodnienia.

Drogi Foxie, chyba niezbyt uważnie czytasz to, co napisałem. W takim wypadku na Twoim miejscu nie ośmielałbym się pisać odpowiedzi, że już nie wspomnę to nadaniu jej tonu nagany, jaki tu wyczuwam.

Osobiście nie uważam, żebym miał jakikolwiek - nawet moralny - obowiązek uczestniczenia w każdym będącym obecnie w toku projekcie na Ziemi. Dlatego też nie przypuszczam, żeby jakąkolwiek niegrzecznością z mojej strony było niepodzielenie się moim kodem z "grupą ludzi tworzących od 10 lat" coś tam. Jeśli jest to grupa ludzi, i pracuje od 10 lat, to spokojnie może się tego samego, co ja, dopracować sama, o ile składa się z ludzi myślących oraz o ile jej na tym zalezy i jej to jest potrzebne (podkreślam trzy warunki). Czy to nie aby Ty jesteś autorem powiedzenia "napisz se"? No.

Co do "sztabu ludzi tworzących gcc", napisałem chyba wyraźnie wyżej, że to ani gcc ani języka C jako takiego nie dotyczy - sprecyzuję może: trzeba byłoby zmienić definicję języka C. Ani mi to na myśl nie przyjdzie.

Żeby wszystko było zupełnie jasne, ja nie mam nic do udowadniania, ja wiem swoje. Co więcej, koncepcję, o której mowa, zrealizowałem w postaci działającego kodu. Mój emulator jest niedokończony, zgadza się, ale akurat silnik 6502 w nim działa dobrze.

3,434

(72 odpowiedzi, napisanych Emulacja - 8bit)

Fox, zgodzę się z Twoimi twierdzeniami zawartymi powyżej bardzo chętnie, jeśli siądziesz do gcc i napiszesz silnik 6502, który po skompilowaniu z dowolnymi opcjami optymalizacji będzie na tej samej maszynie (68030/16 MHz) działał chociaz o połowę wolniej niż mój silnik asemblerowy.

I póki to nie nastąpi, może zawieśmy tę dyskusję, bo niestety ja wiem, co mówię, a Ty nie (oczywiście, bo nie znasz mojego kodu, a ja owszem).

3,435

(72 odpowiedzi, napisanych Emulacja - 8bit)

jellonek napisał/a:

pamietaj ze C to wlasciwie tylko nieco bardziej przenosny assembler, tak wiec jesli dobrze zaprojektuje sie kod C - wynik w assemblerze, przy dobrym kopulatorze, niewiele sie bedzie roznil od perfekcyjnie napisanego recznie.

Pamiętam. Jednak podtrzymuję, że zachodzi tu wyjątek, mianowicie w postaci programu, który jest silnikiem emulacji innego CPU. Tutaj C niestety polegnie, bo jest JEDNAK językiem stosunkowo wysokiego (za wysokiego) poziomu.

gcc dla m68k to było kolejno 2.7.2, 2.8.1, 2.95.2. Wszystkie wersje generują dość przyzwoity kod wynikowy, zresztą chyba nie może być inaczej, skoro gcc przeprowadza optymalizację jeszcze na etapie niezależnym od maszyny, a dopiero to co mu wychodzi przekłada na mnemoniki. Podejrzewam, że na innych platformach z jakością kodu jest dokładnie tak samo.

Pytanie jest idiotyczne z dwóch względów:

a) masz wyżej napisane, że silnik asemblerowy jest szybszy od ANALOGICZNEGO kodu w C (czyli: algorytm ten sam)

b) asembler to jednak nie jest C, więc wymyślenie programu w C, a potem przełozenie go ręczne na asembler nie może dawać wyników znacząco lepszych niz w przypadku produktu kompilatora; implementacja algorytmu musi być nie tylko w asemblerze napisana, ale tez w asemblerze wymyślona.

Dla ułatwienia dodam, że ten program chodzi na procesorach od 68020 do 68060 i nie zawiera nieczystych sztuczek w rodzaju samomodyfikującego się kodu (bo to na Motorolach powoduje problemy z cache'em).

Cały program z gcc nie ma nic wspólnego, poza tym, że gcc występuje tu jako wartość porównawcza. Ale twierdzę, że to jest właśnie taki przypadek, gdzie nie tylo gcc, ale dokładnie każdy kompilator zawiedzie. A to z tego powodu, że kompilator jest bezmyślnym automatem. Może optymalizowac znane sobie (czyli swoim twórcom) konstrukcje pod względem formalnym, oraz dokonywac analizy programu na np. częstotliwośc użycia pewnych zmiennych, żeby zdecydować, które zmienne umieścić w rejestrach, które na stosie a które gdzie tam. Oraz dysponuje repertuarem tym podobnych chwytów.

To wszystko jednak nie zmienia faktu, że kompilator nie ma bladego pojęcia, co kompilowany program robi, oraz jak można wykorzystać architekturę danej maszyny do zrobienia tego lepiej. To wie tylko człowiek, bo tylko człowiek jest w stanie zrozumieć algorytm.

Fox: zagadnienie nie ma nic wspólnego z opcjami optymalizacji kompilatora C, a raczej z tym, jak kompilator w ogóle działa, no i jak jest zdefiniowany język C jako taki.

3,436

(27 odpowiedzi, napisanych Software, Gry - 8bit)

jellonek: a jakiego "wsparcia" się spodziewałeś? Wyrazów życzliwej zachęty i entuzjazmu? A od kiedy to życzliwa zachęta i entuzjazm zastępuje robotę? Jeśli człowiek ma ochotę i możliwości oraz czuje się na siłach zrobić port, czy też reverse-engineering danego programu, to *ukończony* projekt niewątpliwie spotka się z życzliwym przyjęciem.

3,437

(27 odpowiedzi, napisanych Software, Gry - 8bit)

Myślimy, że nie ma przeszkód, żebyś to zrobił.

3,438

(72 odpowiedzi, napisanych Emulacja - 8bit)

Pierwsze pytanie jest, wybacz wyraz, idiotyczne.

Dalsze pytania:

1) chodzi o Falcona - procesor Motorola 68030.
2) przyjrzeć się nie można, bo nie mam zwyczaju ujawniać źrodeł
3) do Atari 800 nie trafiło, bo jest niekompatybilne z a800, a Petr Stehlik nie zrozumiał kodu w stopniu wystarczającym, by to przystosować.
4) odczyt/zapis rejestrów sprzętowych był uwzględniony, ten silnik jest zaimplementowany w istniejącym - aczkolwiek mocno niedokończonym, bo mi się odechciało - emulatorze, mianowicie EmuXL.

3,439

(72 odpowiedzi, napisanych Emulacja - 8bit)

Jellonek, ty teoretyzujesz, a ja napisałem w asemblerze silnik 6502 sześć razy szybszy od analogicznego kodu generowanego przez gcc. Taka jest różnica między zdaniem moim a twoim.

3,440

(29 odpowiedzi, napisanych Sprzęt - 8bit)

W Hammurabim posługujemy się klawiaturą (to tekstówka jest), a co więcej, input uzytkownika - a nie np. VBL - stanowi podstawę czasu. Dlatego jest to gra, która najbardziej nadawałaby się do grania przez internet.

Nawet kiedyś chciałem zrobić serwer Hammurabiego, który pozwalałby pewnej ilości użytkowników grać jednocześnie - ale tu na chceniu się skończyło.

3,441

(29 odpowiedzi, napisanych Sprzęt - 8bit)

No to podziel się tym sposobem, bo mi na razie synchronizacja internetu z fi2 wydaje się koncepcją dość egzotyczną.

3,442

(72 odpowiedzi, napisanych Emulacja - 8bit)

W przypadku przeciętnego programu może to i jest prawda. Ale w przypadku emulatora, a konkretnie takiego silnika, który emuluje 6502 na procesorze-hoście, raczej nie ma szans na taki kompilator, który wygeneruje kod optymalny co do szybkości interpretowania opkodów.

3,443

(29 odpowiedzi, napisanych Sprzęt - 8bit)

Moim zdaniem nie ma siły - pudełko może wysłać pakiet z informacją o zdarzeniu do komputera remotnego, poczekać na potwierdzenie przyjęcia i dopiero wtedy przesłać tę samą informację do kompa lokalnego ALE to też niewiele da, bo pakiet z informacją zwrotną nie nadejdzie natychmiast, lecz droga też zabierze mu nieco czasu.

Jeśli więc pomiędzy wysłaniem pakietu z informacją o zdarzeniu a potwierdzeniem przyjęcia upłyną np. 2 sekundy, to nie znaczy, że komputer zdalny dostał informację po dwóch sekundach, tylko że dostał ją gdzieś w czasie od t+0 do t+2, że tak powiem. Kiedy konkretnie - to jest kompletnie nie do ustalenia.

(EDIT: a może i jest - w pakiecie zdarzenia trzeba byłoby zaznaczyć czas nadania, a w zwrotnym czas przyjęcia; a dalej jak poniżej).

Rozwiązaniem jedynym realnym moim zdaniem jest transmisja synchroniczna, to znaczy pudełka generują określoną liczbę pakietów na sekundę niezależnie od tego co robią gracze. Streaming pakietów, innymi słowy, wtedy opóźnienia transmisji dałoby się łatwo przeliczyć w oparciu o podstawę czasu nazwijmy to, co pomogłoby wyeliminować desynch.

Ale obawiam się, że z tym będzie problem, o którym pisano już powyżej, to znaczy gra typu Spy vs. Spy przestanie być grywalna jeśli na na reakcję na ruch joystickiem trzeba będzie poczekać do paru sekund.

3,444

(72 odpowiedzi, napisanych Emulacja - 8bit)

Lizard: big endian to jest m68k, 6502 jest little endian. Pomerdały ci się procesory, za dużo przy piecu siedzisz :P

Na ARM-ie nie ma dostępu do słów spod nieparzystego adresu?

3,445

(29 odpowiedzi, napisanych Sprzęt - 8bit)

Alex, nosty ma rację, przemyśl to jeszcze. Tu nie chodzi o rozjechanie się zegarów, tylko właśnie sytuacji w grze, co będzie spowodowane tym, że "ewenty" joysticka będą docierały do obydwu komputerów nierównomiernie: do jednego - lokalnego - natychmiast, do remotnego natomiast - z opóźnieniem powodowanym przesłaniem pakietu przez internet. I odwrotnie, remotny komp będzie dostawał lokalne wydarzenia natychmiast, ale do twojego będą one docierały z opóźnieniem np. pół sekundy.

Efekt będzie taki, że ty go w ryj, i on na twoim ekranie w ryj dostaje, ale na drugim komputerze on jest już w drugim pokoju a ty nie wiadomo gdzie.

PS. demko to była Pierestroyka.

3,446

(29 odpowiedzi, napisanych Sprzęt - 8bit)

Co to znaczy "wiedz"? Tryb rozkazujący od "wiedzieć"? Nie bardzo mi pasuje do kontekstu.

3,447

(29 odpowiedzi, napisanych Sprzęt - 8bit)

Ale w Hammurabiego można byłoby pograć.

3,448

(271 odpowiedzi, napisanych Sprzęt - 8bit)

Taa. To musi jakieś chińskie ampery w przeciwieństwie do tajwańskich :)

3,449

(271 odpowiedzi, napisanych Sprzęt - 8bit)

A ile ten "długi zasilacz" ma amperów? Muszę coś wpisać do manuala w kwestii recommended power supply.

3,450

(271 odpowiedzi, napisanych Sprzęt - 8bit)

Ja mam zasialcz 1,5A od 130XE i on mi wystarcza na zasilenie komputera i dysku. Ale nie zbaczajmy z tematu, mi idzie konkretnie o to, jaki zasilacz trzeba do interfejsu IDEa i tu chyba tylko Piguła może się wypowiedzieć.