jesli tych aplikacji mialoby byc kilkadziesiat, wowczas opoznienie tez wynosiloby kilkadziesiat ramek,
No właśnie, sam mechanizm przełączania tasków to jeszcze jest najmniejszy problem.
Mimo twojego optymizmu co do szybkości przełączania na 6502, nie sądzę, żeby to było ogólnie takie proste. Przede wszystkim, system z wielozadaniowością nie mógłby być zgodny z systemem dotychczasowym, a to ze względu na deskryptory plików (każdy proces musi mieć oddzielne, podczas gdy obecnie jest osiem globalnych deskryptorów). Rozdzielenie tego wymusza poświęcenie dodatkowych cykli na przekopiowanie bloków IOCB; oczywiście, trzeba byłoby napisać DOS, który brałby to pod uwagę, bo zrobienie takiego numeru któremukolwiek z obecnych DOS-ów spowoduje jego malownicze sypnięcie się.
Druga rzecz, zapobieżenie temu, o czym piszesz powyżej, to znaczy, żeby uruchomienie 50 programów nie spowodowało, ze przełączenia tasków następują co sekundę (zamiast co 1/50 sekundy). Procesy trzeba podzielić według ich statusu, czas dostają tylko te, które "działają" (to znaczy, wykonują swój kod np. w pętli). Proces, który czeka na dane np. z klawiatury albo RS-232, albo SIO, nie dostaje czasu CPU, póki te dane się nie pojawią.
Pociąga to za sobą konieczność przekonstruowania handlerów urządzeń oraz powiązania ich z przerwaniami tak, żeby pojawienie się danych z klawiatury budziło proces, który na nie czeka. Dodatkowy problem: ma to być tylko jeden proces, to znaczy np. edytor tekstu, z któorym pracuje uzytkownik, a nie wszystkie, które wywołały funkcję odczytu danych z klawiatury.
Następna sprawa, która się z tym wiąże: programów mażących po ekranie może być wiele, ale tego, co produkują, nie mogą sobie zamazywać nawzajem. W związku z tym każdemu trzeba przydzielić oddzielny ekran, pomiędzy którymi to ekranami użytkownik będzie mógł się przełączać. Oczywiście, żeby to działało w miarę ładnie, programy muszą mazać na ekranie przez system operacyjny (albo przynajmniej wykorzystując wskaźnik w rodzaju SAVMSC $58), i nie mogą w tym celu odwoływać się bezpośrednio do sprzętu, bo efekt będzie taki, jak w twoim przykładzie (a nie o to chodzi).
dlatego najlepszym zastosowaniem takiego multitaskingu bylaby mozliwosc przelanczania aplikacji, np. mamy zaladowanych kilka programow w pamieci (odpowiednio napisanych, kod relokowalny) odpowiednia kombinacja klawiszy przechodzimy to task managera, wybieramy inna aplikacje i dzialamy w niej, potem mozemy wrocic do poprzedniej i kontynuowac
To jest multitasking bez wywłaszczania. Do tego nie trzeba bardzo ingerować w przerwania ani w nic. Wystarczy przekopiowywać cały obszar pamięci programu. To nie jest trudne i mogłoby być nawet użyteczne. Ale oczywiście program, który jest "w tle", nie działa, stoi.
oczywiscie czesc aplikacji wymagalaby dzialania w tle, ftp'e, zegar czasu (co 50 ramek wywolywac), msx player (wywolywac co 1 ramke), moznaby takie aplikacje podpiac pod koncowke przerwania VBL, ogolnie bylyby rozne typy aplikacji jak i rozne ich piorytety dzialania, z kolei
operacje IO bylyby krytyczne czasowo
Zauważ, że w ogóle scheduler dobrze jest podłączyć pod VBL deferred, wtedy operacje krytyczne czasowo oraz przerwania IRQ automatycznie blokowałyby przełączanie tasków.
kod dla 65816 bylby szybszy jednak narzucalby ograniczenia co do ilosci zaladowanych aplikacji, nie przeznaczymy przeciez calych 64kb na stosy dla kazdej z aplikacji, przechowywanie aplikacji w pamieci dodatkowej jest bardziej uniwersalne i nie narzuca ograniczen dla organizacji pamieci podstawowej
Nie przeznaczymy 64k na strony zerowe i stosy dla wszystkich aplikacji, zgadza się. Dlatego myślałem o tym, żeby w systemie dla 65c816 (z dodatkową pamięcią liniową) wykorzystać na stosy i strony zerowe banki pamięci 130XE. Im więcej banków, tym więcej aplikacji.
Kto chętny ... nie wiem, czy naprawdę jest sens pisania tego pod 6502. Będzie to chodzić, jakby chciało a nie mogło (z powodu kopiowania sporej ilości danych co ramkę), a na 65c816 nie będzie wykorzystywać wsparcia dla multitaskingu, jakie ten procesor ma.