3,876

(36 odpowiedzi, napisanych Programowanie - 8 bit)

O mnie prosze się nie martwić.

Zmartwieniem bym tego nie nazwał.

Na początek wystarczy brak tonu moralizatorskiego i osobistych wycieczek.

Ton moralizatorski? Osobiste wycieczki? Raczysz żartować. Ja po prostu byłem ciekaw, czy masz cos w omawianej materii wartościowego do powiedzenia.

Uważam kwestię wydajności za istotną, a samo zadanie jako sztukę dla sztuki. Moim zdaniem większym wyzwaniem jest zrobić to w dziedzinie takiej jaką dysponujemy, czyli standardowe Atari z procesorem 6502, aniżeli iść na łatwiznę

Tak, masz rację, niewątpliwie większym wyzwaniem jest skok z wysokości kilometra bez spadochronu, niż ze spadochronem. Tyle, że niektórzy potrafią przewidzieć konsekwencje, a niektóorzy muszą spróbować na własnej skórze. Jak dla mnie EOT.

3,877

(36 odpowiedzi, napisanych Programowanie - 8 bit)

Do tego nie było potrzebne zadawanie pytania, które nic nie wnosi do Pańskiej wiedzy

Do mojej nie. Ale miałem nadzieję, że wniesie coś do twojej.

Myli się Pan - wystarczą trzy. :>

Cóż, pozostaje stwierdzić, że o budowie stabilnych stołów masz takie samo pojęcie, jak o budowie stabilnych systemów wielozadaniowych.

Jeżeli Pan nie ma ochoty na dyskusję merytoryczną ze mną z dowolnych powodów - niech Pan tego tutaj nie robi.

Dla jasności: wyrażałem swoje uwagi, a motywacja ich wprowadzania przeze mnie jest moją indywidualną sprawą, o ile nie narusza ogólnych zasad panujących na forum. Nie sądzę, abym je naruszył.

Na rzeczową dyskusję mam ochotę prawie zawsze. Rzecz w tym, że niczego rzeczowego w twoich postach nie widzę. Masz oczywiście zupełne prawo do wygłaszania dowolnych opinii, ale - wybacz porównanie - jeśli do dyskusji o całkach będziesz się na trzeciego wtrącał co 5 minut z mantrą: "ale proszę pamiętać, że dwa razy dwa to cztery", to nie możesz się spodziewać poważnego potraktowania.

Nie wiem czy zdaję sobie sprawę ze wszystkich konsekwencji, ale z tych które uznaję za istotne - tak.

Rozumiem z tego, że wydajność emulatora na poziomie 5% (a raczej mniej) mocy oryginalnego procesora jest kwestią, którą uznajesz za nieistotną. Bardzo ciekawe podejście, ale raczej mało realistyczne.

3,878

(36 odpowiedzi, napisanych Programowanie - 8 bit)

Z całym szacunkien dla Pańskiej osoby, ale odnoszę wrażenie, że dyskusja zbacza z tematu.

Nie. Chciałem się tylko dokładnie przekonać, czy masz coś wartościowego do powiedzenia na ten temat. Bo widzisz, ktokolwiek zabiera się do budowy stołu, świetnie wie, i nie będzie o tym toczył dysput, ze stół, zeby był stabilny, potrzebuje czterech punktów podparcia co najmniej. TeBe, który rzucił pomysł implementacji multitaskingu, jest koderem, i jak wszyscy koderzy tutaj, świetnie wie, jak działa BRK, że jest to przerwanie IRQ i gdzie ma wektor. Zanim więc zarzucisz mi osobiste wycieczki, zastanów się proszę przez moment, o czym tu w zasadzie rozmawiasz i z kim.

Tak samo jak na warstwie sprzętowej, tylko zasymulowane programowo.

Widzę, że jesteś bardzo przywiązany do koncepcji dosłownie pojmowanej maszyny wirtualnej, to znaczy do emulowania 6502 na 6502. Pozwól mi niniejszym wyrazić wątpliwość, czy zdajesz sobie do końca sprawę ze wszystkich konsekwencji wdrożenia takiego czegoś na Atari.

3,879

(36 odpowiedzi, napisanych Programowanie - 8 bit)

Na 6502 to się w ogóle nie da, bo nie zaimplementujesz ochrony pamięci.

Nie prawda - jest to możliwe do realizacji.

Co mianowicie? Ochrona pamięci?

Wybacz, ale nie wiem co jest w tym apokaliptycznego i przesadzonego.

Przede wszystkim przymiotniki, których używasz. API wcale nie musi być "wyczerpujące" ani "obszerne", natomiast z drugiej strony jego "zoptymalizowanie pod względem szybkości działania" nie jest niemożliwe.

Nie można puścić na żywioł przerwań. Jeżeli dowolne zadanie miałoby możliwość całkowitej kontroli nad przerwaniami, oznaczałoby to skuteczną destabilizację systemu.

A to z kolei jest zupełny banał. Widziałeś kiedyś porządny system wielozadaniowy, gdzie przerwania są "puszczone na żywioł"?

PMMU sprzętowe mnie nie interesuje, tak jak napisałem na początku mojej wypowiedzi. Software'owe jest możliwe do realizacji.

Bardzo mnie to ciekawi; może napisz dokładniej, jak to miałoby działać.

3,880

(36 odpowiedzi, napisanych Programowanie - 8 bit)

Myślałem o implementacji tego na zwykłym 6502...

Na 6502 to się w ogóle nie da, bo nie zaimplementujesz ochrony pamięci.

Co do API, to owszem, może i jest jakaś baza, ale z pewnością nie pełna. Dostęp do pełnego ekranu w trybie ekskluzywnym należałoby dopisać, pewnie na podobnej zasadzie wiele innych elementów związanych ze sprzętem, jak dźwięk, klawiatura.

Muszę stwierdzić, że wypowiadasz się dość mgliście. Czy to, że trzeba napisać od nowa handlery urządzeń, nie było już w tym wątku poruszane?

Teoretycznie gdyby zaprojektować coś w stylu bajt-kodu na odpowiednim poziomie integracji z wystarczająco szerokim API systemowym, całość miałaby sens, tyle, że to API musiałoby być naprawdę wyczerpujące, obszerne, zoptymalizowane pod kątem prędkości wykonywania.

Wizja apokaliptyczna. Ale jednak trochę przesadzona. "Wyczerpujące API" sprowadza się do interfejsu pozwalającego na komunikację ze sprzętem poprzez sterowniki poszczególnych urządzeń. Sterowników może być wiele, ale ich rodzaje są zasadniczo dwa (znakowe i blokowe), a co za tym idzie, wszystkie urządzenia obsługuje się tak samo. Tak więc nie jest to aż tak totalitarne, jak to przedstawiasz.

Co więcej, w Atari są te dwa rodzaje sterowników, bo urządzenia znakowe obsługuje CIO, a blokowe SIO. Ale ta implementacja niezupełnie nadaje się dla systemu wielozadaniowego.

Co do BRK i przerwań, to widzę to po prostu jako problem sam w sobie.

A mógłbyś jakoś detalicznie (i konkretnie przede wszystkim) objaśnić, na czym ten sam w sobie problem polega?

Istnieje wiele powodów, które mogłyby spowodować destabilizację całego systemu podczas wykonywania dowolnego zadania (zawierającego błąd, ale niekoniecznie)

Poczytaj sobie to, co pisałem wyżej o PMMU.

3,881

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

Prawdopodobnie dlatego, że częstotliwość typu 19200 Hz jest niesłyszalna. Nie wiem, jak z magnetofonem. Ale tak ogólnie, można byłoby zrezygnować z tego "wyciszania" na pewno w sytuacji, kiedy dźwięk transmisji jest wyłączony. Natomiast kiedy jest włączony, wyciszać trzeba tylko jeden kanał (który SIO i tak ustawia po swojemu przed transmisją).

3,882

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

Znowu DEC?  :D

3,883

(36 odpowiedzi, napisanych Programowanie - 8 bit)

Specjalne API w sumie już dawno jest, to są handlery urządzeń i punkty dostępu do nich (SIO i CIO). Poza tym jednak potrzebny jest jeszcze układ, który będzie w stanie sprzętowo zablokować dostęp do wybranych obszarów przestrzeni adresowej, o czym pisałem powyżej (nie tylko do sprzętu, ale też do np. niezaalokowanej pamięci). Oczywiście od razu pojawia się następny problem, który trzeba byłoby rozwiązać sprzętowo, tj. poziomy uprzywilejowania. Ogólnie sporządzenie systemu wielozadaniowego spełniającego wymogi XXI wieku nie jest łatwe na procesorze w rodzaju 65c816.

Co do BRK, pewnie masz na myśli, że program jest w stanie wywołać to przerwanie na żądanie, a wobec tego wektor BRK musi stanowić składnik kontekstu. Zgadza się, ale przy całej reszcie problemów jest to doprawdy drobiazg nie wart wzmianki.

3,884

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

Posiadają, jest to chyba nawet po prostu przerobione z SIO2PC (albo inspirowane). Tylko że serial w C-64 jest tragicznie wolny, ten komputer nie ma zdaje się żadnego UART-a.

3,885

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

Zonk polega na tym, ze w romie jest w jakims przerwaniu/procedurze kombinacja w stylu:

lda #0
sta $pokey

ktora powoduje takie smieszne pykanie podczas grania i odczytu. Ze wzgl. na moja szeroka wiedze programistyczna, OS z romu zostawal przepisany do ramu, kombinacja zmieniona na nop nop nop (kto tam?). [Po co to jest w oryginalnym romie?]

To wycisza kanały po transmisji. Potrafię sobie wyobrazić po co (mianowicie: dla porządku), ale nie bardzo wiem, dlaczego ROM wycisza wszystkie cztery kanały, mimo że do transmisji uzywa tylko dwóch.

3,886

(36 odpowiedzi, napisanych Programowanie - 8 bit)

W DracOS można wybrać dowolne miejsce dla strony zerowej. W momencie wystąpienia przerwania (w trybie natywnym) albo w chwili wywołania dowolnej funkcji systemu (za wyjątkiem tego cholernego pakietu FP), strona zerowa jest przestawiana pod adres $000000, a potem przywracana.

Co do stosu, nie widzę potrzeby. Cały system "chodzi" na stosie zdefiniowanym przez użytkownika. Poza tym przy tradycyjnych wywołaniach (przez JSR) OS i tak trzeba wywoływać w trybie emulacji. Z trybu natywnego przez JSR może się coś uda zrobić, ale jak już się jest w trybie natywnym, to lepiej skorzystać z przerwania COP #$00, wtedy wszystko powinno gładko działać.

[ Dodano: 07.05.2005 22:52:17 ]

Pamiętajcie, że rozkaz BRK powoduje wywołanie przerwania spod adresu przechowywanego pod $fffe, które w praktyce należałoby filtrować.

Nie bardzo pojmuję, gdzie w tym widzisz problem.

3,887

(36 odpowiedzi, napisanych Programowanie - 8 bit)

Bez przesady, maszyna AŻ TAK wirtualna (czyli emulec) nie jest potrzebna. Do zrobienia tego, o czym prawdpodobnie myślisz, wystarczyłoby "tylko" mieć dodatkowy układ zarządzania adresami (czyli PMMU), za pośrednictwem którego system operacyjny byłby w stanie zablokować (czy też: kontrolować) dostęp programu do dowolnego obszaru przestrzeni adresowej. I tu znowu kłania się 65c816, który ma - szczątkowe, ale jednak - wsparcie dla takiego układu, a 6502 nie.

3,888

(36 odpowiedzi, napisanych Programowanie - 8 bit)

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.

3,889

(16 odpowiedzi, napisanych Miejsca w sieci)

Mam głupie pytanie: jaki jest w ogóle cel tego "paczowania"?

3,890

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

No co Ty!? Nie znasz trybu pośredniego z przesunięciem. ;)

Znam, ale nie na tym procesorze :P  :P

3,891

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

nbnks    = 29

    lda (dosvec),nbnks

Lizard, od kiedy istnieje taki tryb adresowania?  :P

[ Dodano: 06.05.2005 13:12:40 ]
Marok, cytat o wektorach dotyczy cię, jeśli piszesz DOS. Jeśli piszesz zwykły program, to wektorów DOSINI i (zwłaszcza) DOSVEC nie dotykasz. DOSINI możesz ewentualnie zmienić, jeśli twój program ma być odporny na RESET, ale nie polecam tego, bo jak juzer chce naprawdę zrobić RESET, to i tak zrobi, a tylko go niepotrzebnie zdenerwujesz.

3,892

(14 odpowiedzi, napisanych Bałagan)

Fintik, w BASIC-u string typu S$ musisz deklarować przed użyciem przez np. DIM S$(3). Potem porównania typu IF S$="TAK" THEN cośtam powinny już działać. To tak tytułem przypomnienia  ;)

3,893

(20 odpowiedzi, napisanych Kupię / Sprzedam / Zamienię Atari)

Do TOMS-a trzeba przedtem wsadzić napęd 3,5 cala, to chyba jasne?  :P

3,894

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

Patrząc na niektóre programy dochodzi się do wniosku, że nie ma takiej prostej rzeczy, której nie można byłoby spieprzyć.

3,895

(16 odpowiedzi, napisanych Miejsca w sieci)

Lewis, po co ci źrodło fontu w formacie MAE, skoro w MAE można dołączyć plik binarny podczas asemblacji?

3,896

(20 odpowiedzi, napisanych Kupię / Sprzedam / Zamienię Atari)

Macgyver, akurat Lizard ma rację. "Specyfika gęstości" 360k zależy od stacji. XF-551 ma tak, jak napisałeś. TOMS w gęstości 360k ma tak samo, jak XF-551, dla zgodności, ale w gęstości 720k zmienia najpierw strony, a nie najpierw ścieżki, bo tak jest lepiej.

Karinka natomiast wszystkie gęstości dwustronne robi tak samo, jak TOMS robi gęstość 720k. Wniosek: dyskietkę 720k sformatowaną na Karin odczyta się na TOMS-ie, dyskietkę 360k sformatowaną na Karin można odczytać tylko na Karin.

3,897

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

Zawsze myślałem, że filesystem DOS XE obsługuje dyski tylko do 360k. Ale nawet gdyby więcej, to chyba i tak nie da się zapisać struktury katalogu bez uprzedniego formatowania, nie ma żadnej dokumentacji, no i filesystem SpartaDOS-u i tak jest lepszy  ;)

3,898

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

Pod MyDosem uzywa sie separatora ":" dla oddzielenia katalogu i tylko ten znak jest w uzyciu?

Z tego co mi wiadomo, separator ">" jest wspólny dla MyDOS-a i wszystkich wersji SpartaDOS.

3,899

(50 odpowiedzi, napisanych Scena - 8bit)

GCC pod FreeBSD i  Slackwarem ... zwraca 7.

Co nie jest niczym dziwnym, bo w obu przypadkach jest to ten sam kompilator (obie maszyny i386 w dodatku).

3,900

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

ICAX2 określa tryb graficzny dla ekranu (urządzenie "S:") . Ponieważ otwarcie "E:" implikuje tryb 0, to ten rejestr można spokojnie pominąć.

Istotnie, otwarcie "E:" implikuje tryb 0, procedura otwarcia edytora w ciemno ustawia rejestr DINDEX na 0, bez patrzenia do ICAX2. Ale CIO kopiuje wcześniej ICAX1/2 na stronę zerową, a to z niej mają korzystać sterowniki w stylu "E:". Sterownik, który jest w ROM-ie nie zagląda pod ICAX2Z, ale nie można przewidzieć, jaki sterownik kto napisze w przyszłości. Zostawienie w ICAX2 i ICAX2Z wartości losowej (czyli nieustawienie ICAX2Z) zmniejsza ilość bajtów IOCB i ZIOCB, jakie mogłyby być wykorzystane dla przyszłych rozszerzeń systemu.

A ponieważ zrobienie LDA #$00 / STA ICAX2 (albo STZ ICAX2) nie kosztuje dużo, wobec tego proponuję mimo wszystko zerować ICAX2 przy otwieraniu edytora. Taka mała wprawka z eleganckiego programowania  ;)