Emulowanie wzajemne pracy komputerów różnych platform z tego samego poziomu technologicznego


Atari 64-bit Project

Elements of project done and working – 64-bit architectures

Remindin’ history of XXI-th cent. beginnings…


Przenoszę wątek spod ‚Konwersji z innych platform’ oraz ew. porozrzucane komentarze z innych wątków w temacie, żeby było w jednym miejscu.


Chodzi o realizowanie zadań jednej maszyny z danego poziomu technologicznego przez inną maszynę z tego samego poziomu technologicznego – w kwestii rozwiązań ogólnych zbiorczych zrealizowanych działających – jako emulator pomiędzy dowolnymi dającymi się emulować wzajemnie maszynami.

Na przykładzie konkretnym pomiędzy Commodore 64 a Atari 65XE.


Ostatni komentarz w temacie z wątku konwersji z innych platform:

Gdyby ktoś chciał samodzielnie przenieść sobie gry z Commodore 64 na początek na Atari 65XE, to tu na Wikipedii jest co nie co o serii procesorów z układami w architekturze MOS.

[link]

Commodore: 6510
Atari: 6502

Zestawy instrukcji są w tych podręcznikach w PDF i schematy.
Kompletne opisy rozkazów procesora, żeby zrobić sobie ten filtr, o którym opowiadałem, pewnie są w podręcznikach do Assemblera Commodore 64.

Wystarczy przepisać i porobić relacje jako funkcje, przykładowo: i w Atari i w Commodore 64 jest rozkaz ładowania akumulatora: LDA. Zrobić tak, żeby ten rozkaz poruszał układy Atari w pełni wskaźników, rejestrów i czego potrzeba, co jest poruszane w Commodore. I LDA zakończone jako relacja gotowa. I dokończyć po pozostałych rozkazach. Gotowe.

Kto chce grę z Commodore 64 na Atari => ma gotowe. Wystarczy wgrać sobie i grać.

Działa 100% idealnie. Zapewniam.
Więcej pomóc nie mogę. Nie te tematy ‚fanowskie’.
A propos fanonwskich produkcji ‚własnoręcznych’, to w sumie aktualnie nie wiem, czy bym robił sam. Wolę gotowe.

Dzięki.
Więcej nie męczę tematem. Nie te Fora. Przepraszam.

DS`.
OCT.05.2015.
[koniec]
====


O to mi chodzi właśnie. Żeby grać sobie w gry z Commodore 64 ale nie na emulatorze Commodore 64, ale na Atari 65XE.

W skrócie chodzi TYLKO o realizowanie programu Commodore 64 przez Commodore 64 – czyli na procesorze 6510 z pamięcią dedykowaną do tego procesora (jak piszą w Wikipedii, nie wiem, czy to ten procesor jeszcze, dopiero zaczynam, więc sprawdzę dokładnie z czasem, jak już będę robił) – ale wszystkie efekty pracy procesora z pamięcią muszą iść na filtr, który przeniesie efekty pracy Commodore 64 instream in real time na efekty działania układów Atari 65 XE. Czyli efekt będzie taki, że co by uruchomić na Commodore 64 => ma robić to Atari 65XE na swoich własnych układach, a układy Commodore są mu nie potrzebne. Jedynie procesor Commodore 64 ma robić swoje i brać z powrotem to, co dostaje i robić dalej jak należy. Reszta należy do Atari 65XE – żeby wiedzieć co zrobić z praca Commodore 64.

Efekt musi być jak na Commodore 64, ale lepszy – zakładam, bo Atari 65XE jest lepszy w robocie praktycznej dla Użytkownika, jak widać i słychać po efektach. Ciekawe, czy wszystkie gry i programy i wszystko co na Commodore 64 zrobi Atari 65XE ‚w locie’ i gotowe.
READY
[]


Żeby zacząć sensownie pracę, zacząłbym od dwóch tabelek tego typu, co poniżej (wstępnie i ogólnie):

1. Tabelka (trzy kolumny): Lista rozkazów 6510|Wartości lub sygnały zwracane|Wartości lub sygnały odbierane
2. Tabelka (trzy kolumny): Lista rozkazów 6502|Wartości lub sygnały zwracane|Wartości lub sygnały odbierane

Te dwie kolumny w każdej z tabelek dotyczące sygnałów i wartości zwracanych / odbieranych trzeba połączyć tym filtrem, którego szukam, czyli rozwiązaniem i zakończeniem zdania w formie ostatecznej gotowej i można przenieść filtr programowy na sprzętowy intereface (mała płytka drukowana) i gotowe.

Chodzi o sporządzenie relacji między dwoma tabelkami powyższymi w odwzorowaniu jedno na drugie poprzez zestaw skończony – jednoznacznie określonych funkcji konkretnych i skończonych. Czyli co robi rozkaz w Commodore praktycznie => ma robić to Atari praktycznie u siebie na swoich układach zgodnie z wartościami przekazanymi przez Commodore wynikającymi z pracy swojego procesora z pamięcią. Atari ma to rozpoznawać, robić i zwracać zgodnie z funkcjami określonymi ‚z powrotem’ do Commodore tak, żeby Commodore wiedział, że wszystko zrobione zgodnie z tym, co podane i do przodu.

I koniec zadania.

W drugą stronę trzeba sporządzić analogiczny filtr, żeby Commodore robiło na swoich kładach to, co daje mu 6502 od siebie. Analogicznie. I filtr obustronny byłby gotowy.
Potem można analogicznie zrobić filtry dla dowolnych maszyn, które łatwo dają się przenieść odwzorowawczo zgodnie z przykładem Commodore 64 i Atari 65XE.

ZX Spectrum powinno być chyba łatwo ‚łyknięte’ przez Commodore i przez Atari. Odwrotnie trzeba by się pomęczyć z funkcjami, ale jakąś część emulacji Atari 65XE lub Commodore 64 na ZX Spectrum da się zrealizować – do barier technologicznych układów posiadanych przez ZX Spectrum, oczywiste. Bariery to bariery. Więcej się nie da, najwyżej można zrobić filtr ‚deluxe’ (dodatek na oryginał wprost) dla każdych relacji między komputerami emulowanymi, żeby PC to emulował. Ale to inne tematy i na potem. Typu ‚deluxe’.

I analogicznie drugi przykład ‚wzajemny':

Atari 520 ST i Amiga 500.

100% ta sama analogia – zrobić i zobaczyć.


[..]

… Ta ‚przestrzeń wspólna’ konwertowana w jedną lub w drugą stronę jest tylko wirtualna w postaci gotowego filtru, który jest zakończeniem zadania w wersji gotowej i skończonej. I właśnie chodzi o zrobienie pełnego skończonego zestawienia funkcji na relacji pomiędzy jednym a drugim komputerem. Nic więcej. I pozostałe aspekty ‚problemowe’ znikają automatycznie i nie istnieją.

Pod warunkiem, że uda się zrealizować w tym ‚filtrze’, którego szukam i chciałbym zrobić i zobaczyć jak działa – wszystkie funkcje idealnie jak należy – przenoszące pracę procesora+pamięć (jedynie to: pamięć +procesor pracujący na pamięci swojej dedykowanej – jako wspólny zestaw pracujący niezależnie samodzielnie) jednej maszyny na drugą.

Wtedy dalsze rozważania, co się da, a czego nie, a co nie bardzo – są zbędne 100%, bo po zrealizowaniu 100% tego zestawu funkcji wszystko est od razu gotowe i działa 100% idealnie. Chodzi tylko o pełen zestaw tych funkcji. Nic więcej. I koniec roboty – 100% idealna emulacja jednej maszyny przez drugą na swoich układach.
Jeśli ktoś dysponuje gotowym zestawem zaprogramowanych rozkazów procesora i układów w emulatorze Commodore 64 na PC i analogicznie Atari 65XE, to wystarczy zrobić przejście tym ‚filtrem’, o którym opowiadam pomiędzy układem pamięć+procesor pierwszej maszyny a realizacją programu na układach (z drugiej maszyny) a emuluje efekt i tak PC.

No i koniec. Czy wystarczająco opisałem, o co mi chodzi?

Sprawdzając, że to działa – miałbym analogiczny idealny emulator we wszystkie strony hurtem dla dowolnych maszyn nie tylko na tym samym poziomie technologicznym.
Oczywiste. Amiga i Atari ST mogłyby emulować Atari 65XE, albo Commodore i każdy komputer 8-bitowy na swoich układach ‚w locie’ i dowolne z innych poziomów, np. PC-ty i dowolne, etc. – w każdą dowolna stronę każdy komputer mógłby emulować dowolny inny zgodnie z zestawem przygotowanych funkcji, czyli tego ‚filtru’, którego szukam – z zachowaniem oczywistych barier technologicznych, czyli emulacja jedynie na ile jest możliwa ze względów możliwości sprzętowych układów, które miałyby realizować program wykonywany drugiej maszyny.

Gotowe zestawy funkcji w parach typu Atari 65XE<=Commodore 64 lub Commodore 64<=Atari 65XE, czy ZX Spectrum<=Atari 65XE działałyby jako gotowe interface do realizowania programu procesora jakiejś maszyny NA SWOICH układach własnych. Obojętne jaki procesor, ważne, że jeśli podaje program realizowany i wartości, to ma to być realizowane przez układy dowolnej maszyny, a nie przez układy dedykowane dla tego procesora.

Tylko o to mi chodzi i powtarzam opisując w każdym komentarzu to samo.

Gdyby ktoś dysponował kodem źródłowym w pełni działającego emulatora Atari 65XE i Commodore 64, to pewnie zrobienie tego interface (‚filtru’) pomiędzy procesorami, a układami z podmianą układów byłoby kwestią 15 minut, jak opowiadam od początku wątku w innych w miejscach na forum.

Tyle trwa pewnie przygotowanie zestawu funkcji przenoszących realizację rozkazów jednej maszyny na rozkazy drugiej maszyny:

do(IR)Atari => filtre => do (IR) Cmmodore – albo odwrotnie.

Z zachowaniem wartości i sygnałów wszystkich.

Ta książka powinna wystarczyć:

[link - Assembler 6502]

I tak samo do Commodore, jeśli nie ma kodów źródłowych jakichś dostępnych dla emulatorów obu komputerów.
I ew. szczegółowe opisy działania układów. Żeby dobrze napisać te funkcji w odwzorowaniu jak najbliższym idealnemu.
I to tyle. Nic więcej nie trzeba zrobić.

Czy dobrze wyjaśniłem, o co mi chodzi?

[..]

… W sumie sprowadza się to w pierwszym etapie działania filtru do czegoś podobnego, ale rzeczywiście niekoniecznie tak samo. Zestawy funkcji w sumie analogicznie na zdaniach prostych i najprostszych, czyli aż na rozkazach, których jest tylko 52 czy 55 i nie więcej.
Ale w tym, co opowiadam, ‚filtr’ jest zrobiony RAZ i koniec, potem zupełnie nie o to chodzi jak w Google Translator. To nie to. To nie jest konwertowanie programów na programy innej maszyny. To jest realizowanie swojego programu przez maszynę, czyli u siebie na swoim procesorze z pamięcią, ale układy wszystkie 100% okołoprocesorowe są innej maszyny. I to jest ta różnica i zasada działania, o która mi chodzi.

Z Google Translator to ma tyle wspólnego, co dwie tabelki i funkcje na relacji między elementami tabelki w najprostszych zestawieniach gramatyki i syntaktyki, etc. – dotyczące języka i zasad językowych. Ale nic więcej w realizacji.

Tak to widzę, ale musiałbym myśleć, żeby opowiedzieć konkretnie w porównaniu do Google. Na pewno da się zrobić analogię pewnych elementów.


[..]

… Ponownie to samo opisuję, poniżej, wprost najprościej, bo rzeczywiście wydaje mi si, że znowu poza tematem, który opisuję:

(procesor commodore’a + pamięć commodore’a) robią swoje ‚u siebie’ i zwracają wyniki swojej pracy DO i OD układów i pracują w trybie ciągłym zgodnie z programem w pamięci (listą rozkazów procesora). Zwracając DO i biorąc do dalszej pracy własnej OD => otrzymują i dostają dokładnie to, na co oczekują i dają – czyli 100% pełna prawidłowa praca układu procesor+pamięć. Jedynie w miejscy zwracania sygnałów i wartości DO => idzie to na filtr, który przekazuje na układy atari do zrobienia, co trzeba zgodnie z funkcjami (pełen zestaw) po czym funkcje filtrowe zwrotne (drugi pełen zestaw) zwraca po wykonaniu rozkazów commodore przez układy atari prawidłowe wyniki z powrotem DO układu procesor+pamięć commodore’a i commodore nie zauważa różnicy. To, co robi procesor commodore’a w swojej pamięci zgodnie z podanym programem z pamięci rozkaz za rozkazem jest realizowane prawidłowo na układach atari i atari zwraca poprzez ten filtr z funkcjami zwrotnymi prawidłowe wartości DO procesora commodore i pamięci commodore do dalszej pracy, że commodore nie musi wiedzieć, że wykonanie programu jest realizowane przez atari. Co procesor commodore to interesuje? Robi, podaje dalej DO i dostaje OD prawidłowe zgodnie jak potrzeba, czyli realizuje cały swój program idealnie. A że atari robi na swoich układach – to bez znaczenia dla commodore, bo commodore dostaje wartości takie, jak gdyby prawdziwe układy commodore robiły swoją pracę prawidłowo. Czyli 100% odwzorowanie commodore na układach atari lub dowolnych – w zależności od filtra dedykowanego w tę<=> wewtę.

Chodzi o przygotowanie tego zestawu funkcji, które z wartości pracy procesora+pamięć jednego komputera robią wartości odczytywalne do zrealizowania przez układy drugiego komputera. I zestaw funkcji równoległych do pełnej pracy prawidłowej filtra: wartości zwracane przez układy drugiego komputera realizujące wartości pierwszego komputera muszą w trybie ciągłym podczas pracy procesora+pamięć pierwszego komputera być zwracane do pierwszego komputera jako wartości odczytywalne do zachowania ciągłości prawidłowej pracy, czyli wykonania programu.

No i to tyle. To samo co od początku opisuję. Mogę narysować i dać przykład na kilku rozkazach i układach muzycznym i graficznym i wejść/wyjść, żeby mieć początek i byłoby widać. (?)


[..]

… Prawie tak, ale nie aż na takim niskim poziomie realizowania sygnałów układów wprost pomiędzy układami.

Te funkcje w ‚magic boxie’ mają realizować sygnały zbiorczo zwracane z danego rozkazu czy z pełnego zestawu ‚zmian wartości i sygnałów’ po wykonaniu jednego rozkazu 65010 (dla commodore) na układzie innej maszyny w taki sposób, żeby uzyskać efekt odwzorowujący pracę PRAKTYCZNĄ układów pierwszego komputera ale wykonaną na układach drugiego komputera.

Czyli zestaw może nawet dość skomplikowanych funkcji w zakresie prostoty typu jedna linia, czyli do przeniesienia na sprzęt w 10 minut przez elektronika na bramkach podstawowych, kilka chipów standardowych po grosiku albo z odrzutów i kilka lutów (ale sprzęt to potem, najpierw funkcje gotowe przetestowane, oczywiste) – jednak wystarczających do odwzorowania pracy układów jednej maszyny na układach drugiej.
Pod wieczór spróbuję dać przykład na jakimś rozkazie procesora commodora, żeby było konkretnie widać.

Rozkazy wewnętrzne, takie jak LDA są nawet nie dotykane przez filtr – pusty plastik – żadnych lutów ani połączeń (głucha ścieżka), bo realizuje to procesor u siebie i nigdzie nic nie zwraca oprócz sobie – przykładowo.

Ale rejestry, które wrzucają wartości na układy zewnętrzne trzeba zaprogramować w konkretnych skończonych idealnych funkcjach właśnie, czyli przykładowo:
rozkaz podaj na sid wartości => filtr => podaj na pokey wartości => zwróć wartości do 6502 => filtr => zwróć wartości do 6510 – i dalej… next IR… – ale to już wie i robi commodore, oczywiste.

Atari TYLKO służy swoimi układami i perfekcyjnie zwraca efekty swojej pracy zrozumiałe idealnie i prawidłowe do commodore. I tak by działał każdy program realizowany na commodore, czyli pełna 100% emulacja pracy commodore na układach atari i powinno być idealnie i w standardzie, jeśli dobrze zrobić te funkcje odwzorowujące. I to tyle. Koniec zagadnienia. I zrobić i zobaczyć jak ślicznie to musi działać, zakładając.

A propos Google Translator, to byłoby to używanie języka swojego i rozumienie języka swojego ale polecenia w tym języku i realizowanie zadań w tym języku, oraz przyjmowanie raportów ze zrealizowanych zadań zgodnie z poleceniami w języku podstawowym (czyli tu commodore) należałoby do robotników z atari (którzy używają zupełnie 100% innego i obojętnie jakiego języka, ale swojego i czystego jedynie swojego), którzy robią zgodnie z poleceniami commodore na swoich materiałach i usługach i raportują w języku commdore co zrobiono i jak dzięki tłumaczowi (filtr poszukiwany z zestawem funkcji do zlecenia do wykonania), który tłumaczy commodorowi co atari twierdzi, że zrobił i jak.

100% poprawne i pełne i zakończone porównanie w kwestii tego, o czym opowiadam – a propos wczorajszego pytania o Google Translator i porównanie.


A propos muzyki i dźwięków, nie wiem w jakim zakresie kolega / Pan pracował dotychczas ze swoimi genialnymi muzyczkami, które znam od dziecka i nadal są świetne, czyli dobra robota i to bardzo, bo lubię (a to znaczy, że ktoś się zna lub postarał) – jeśli tylko jako muzyk lub spec od dźwięków do zakresu korzystania z Atari jako keyborda z gotowymi zestawami brzmień do wykorzystania, to byłaby rozmowa jak z każdym dowolnym muzykiem lub dźwiękowcem, nie w temacie za bardzo czyli.

Bo chodziłoby o znajomość układów dźwiękowych bardziej od strony sprzętu, czyli kogoś jak elektronika prawie, kto majstruje przy brzmieniach i dźwiękach, jak autor Soft Syntha przykładowo być może, że mając układy gotowe dane, umiał zrobić sobie coś ciekawego z tym, co miał – ale nadal nie ten poziom, bo byłoby to wykorzystanie znowu brzmień w sensie praktycznym do używania z tego, co dane – wystarczy poznać programowe metody, czyli nadal nie ten poziom.

Chodzi o znajomość układu dźwiękowego pod względem sygnałów otrzymywanych, realizowanych i zwracanych w pracy układu (pełna paleta możliwych sygnałów sprzętowych wywoływanych programowo lub dowolnie, czyli pełna 100% paleta sygnałów możliwych) – sygnałów i wartości w komplecie – które przepływają przez układy dowolne każde i wszystkie w całym zestawie Atari lub Commodore – podczas pracy z danym układem, czyli powiedzmy dla Atari jeśli jest wydany rozkaz dotyczący dźwięku na pokeya, to musi być wiadomo w jednej paczce pełnej skończonej zamkniętej sygnałów i wartości – jakie rzeczy dzieją się w całym Atari na skutek wydanego rozkazu dot. układu.

I te wartości podawane przez procesor, przyjmowane przez układy do zrealizowania, a potem zwracane wartości po zrealizowaniu przez układy z powrotem gdzieś – do rejestrów nie tylko procesora pewnie i do pamięci bezpośrednio, etc. (komplet – gdzie i jak jest potrzebny) muszą być realizowane zgodnie i prawidłowo po przetworzeniu przez filtr na paczkę odpowiadającą dla procesora realizującego program własny, żeby zachować prawidłową ciągłość pracy programu, oczywiste.
No i o to by chodziło.

Żeby funkcjami pełnymi zamkniętymi skończonymi w potencjale sygnałów i wartości możliwych w pracy układów opisać pracę dwóch układów odpowiadających sobie w dwóch osobnych komputerach. I to byłby zestaw funkcji dla rozkazów dot. danego układu, czyli tu: pokey cały najlepiej, nie tylko część dotycząca dźwięku, a w commodore chyba ten ‚sid’? Nie wiem, bo nie sprawdzałem. odpowiednik pokeya w każdym razie, żeby mieć tablicę funkcji realizowanych 100% wzajemnie.

Nawet gdyby pokey lub inny układ miał odpowiedniki w kilku układach osobnych w innych komputerach, to trzeba zebrać sensownie w paczkę, żeby odwzorować sensownie i sprawnie pracę jednego na drugi. I w efekcie końcowym: wszystkie układy jednej maszyny na wszystkie układy drugiej maszyny, żeby jedna robiła swój program a układy drugiej realizowały ten program praktycznie. I to tyle w zagadnieniu. Ciągle o tym samym z różnych opisów i stron.

Spojrzałem, żeby zobaczyć jak to wygląda, żeby wiedzieć o czym dalej rozmawiać w szczegółach konkretnych już bardziej na podstawie wcześniejszego ogólnego opisu.

MOS Technology SID (dla Commodore 64): [link]

Atari Inc. POKEY (dla Atari 65XE): [link]

Chyba dobre schematy ogólne znalazłem wstępnie?
No i teraz trzeba zrobić tak, żeby w opisie funkcji nawet słownie: jedno robiło drugie. Na przykład POKEY ma odwzorować 100% pracę pełnego 100% SID. na ile technologicznie jest w stanie to zrobić, tyle musi być.

Tego, co POKEY nie umie zrobić w żaden możliwy sposób – oznaczyć, że się nie da i dlaczego – dorobi się w wersji deluxe filtra emulowane przez Emulator Atari 65XE – bo tu nie ma ograniczeń żadnych akurat. Ale najpierw powyższe.

I będzie wiadomo co dalej. Sam mogę zaprogramować funkcje filtra między Commodore a Atari, jeśli ktoś zna te dwa układy SID i POKEY) i opowie co odpowiada w odwzorowaniu praktycznym w drugim. Wtedy ja to napiszę, żeby robiło samo w funkcjach.

I na koniec oznaczenie procentowe dla statystyki i raportu, żeby wiedzieć: jaki procent SID zrealizował idealnie w odwzorowaniu tożsamościowym lub niepełnym (też % i wyjaśnienie) POKEY. Tabelka konkretna i gotowy filtr w funkcjach dźwiękowych. A te elementy nie dźwiękowe – analogicznie na układach odpowiadających, niczego to nie zmienia. Ta sama droga pracy.

[..]


Materiały i literatura uzupełniająca:

1. Atari800Win Plus Emulator (a800win.atari-area.prv.pl, atariarea.krap.pl/PLus/downloads_us.htm, atariage.com/5200/emulation/atari800_tutorial)

2. pl.wikipedia.org/wiki/Emulator

[..]