1

multitasking prosty jak drut :), w n/w przykladzie na VBL'u przelaczane sa dwie "aplikacje", dzialanie kazdej polega na wpisywaniu do rejestru $d01a wartosci w petli nieskonczonej, pierwsza wpisuje wartosc $88, druga $26

...
start
 lda #$88
 sta $d01a
 jmp start
...

efekt koncowy to mruganie ekranu

wbrew pozorom nie jest to zbyt wolne jak na mozliwosci 6502, przepisanie stosu (256bajtow), zwrocenie wartosci rejestrow A,X,Y, wartosci wskaznika stosu S zajmuje z 5200 cykli, w skali 20.000 ktore oferuje VBL nie jest zle, jednak 65816 wykonalby to samo w kilkudziesieciu cyklach

w momencie wywolania przerwania VBL, na stos odkladane sa 3 wartosci, stan CPU, oraz adres ostatniego wykonywanego rozkazu

n/w program na poczatku preparuje odpowiednio stosy, ustawiajac w nich odpowiednio adresy startowe kazdej z "aplikacji", zapamietujac poczatkowa wartosc wskaznika stosu, reszte zalatwia juz "przyroda"

kazda z "aplikacji" zaczyna sie od poczatku strony pamieci, 256b na stos, nastepnie rozkaz skoku pod wlasciwy adres startowy aplikacji (JMP INIT) i wlasciwy kod programu (START)

jesli tych aplikacji mialoby byc kilkadziesiat, wowczas opoznienie tez wynosiloby kilkadziesiat ramek, 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

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

sposob tworzenia aplikacji tez wymagalby zmian, na pewno zostalby wyodrebniony podzial na segmenty, segment stosu, danych, kodu i antica, oczywiscie kod relokowalny. Aplikacja bylaby przechowywana w pamieci dodatkowej, w momencie żądania jej wykonania przepisywana bylaby do pamieci podstawowej (program ANTIC'a nie wykona sie w dodatkowej) i tu byloby kontynuowane jej dzialanie (po podmianie stosu)

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


ktos chetny na projekt takiego systemu ? i pisanie aplikacji do niego ?



 org $2000

tasks equ 2

main

/*
  Initialize TASK
  copy current stack to TASK1.STACK and TASK2.STACK
*/
 cld

 tsx
 
 ldy #0
cp
 lda $0100,y
 sta task1,y
 sta task2,y
 iny
 bne cp

// init stacks
 
 lda >task1.init
 sta task1,x
 lda <task1.init
 sta task1-1,x
 lda #$a4
 sta task1-2,x
 
 lda >task2.init
 sta task2,x
 lda <task2.init
 sta task2-1,x
 lda #$a4
 sta task2-2,x

// init stack pointers

 :3 dex
 stx task_point
 stx task_point+1 

/*
  Initialize NMI vector
*/
 lda $14
_wai cmp $14
 beq _wai
  
 sei
 lda #0
 sta $d40e
 sta $d400

 mva #$fe $d301

 mwa #nmi $fffa

 mva #$40 $d40e


// LET'S GO 
 jmp task1.init


/*
  NMI routine
*/
.proc nmi

 bit $d40f
 bpl vbl

dli rti

vbl
 sta rA+1
 stx rX+1
 sty rY+1

 sta $d40f


// OLD TASK

tsk ldy #0

 lda task_stack,y
 sta _dst+2

 ldx #0
_src lda $0100,x
_dst sta $ff00,x
 inx
 bne _src
 
 tsx
 txa
 sta task_point,y
 
 lda rA+1
 sta task_regA,y
 lda rX+1
 sta task_regX,y
 lda rY+1
 sta task_regY,y


// NEW TASK

 iny
 cpy #tasks
 bne skip

 ldy #0
skip
 sty tsk+1

 lda task_stack,y
 sta src+2

 ldx #0
src lda $ff00,x
 sta $0100,x
 inx
 bne src

 ldx task_point,y
 txs
 
 lda task_regA,y
 sta rA+1
 lda task_regX,y
 sta rX+1
 lda task_regY,y
 sta rY+1

rA lda #
rX ldx #
rY ldy #
 rti

.endp


/*
  TASK NO.1
*/
 align
 
.proc task1

stack
 .ds 256

init
 jmp start

start
 lda #$88
 sta $d01a
 jmp start

.endp


/*
  TASK NO.2
*/
 align
 
.proc task2

stack
 .ds 256

init jmp start

start
 lda #$26
 sta $d01a
 jmp start

.endp


task_stack dta h( task1 , task2 )
task_point .ds tasks
task_regA  .ds tasks
task_regX  .ds tasks
task_regY  .ds tasks

;---
 run main

 opt l-
 icl 'align.asm'
 icl 'xasm.asm'
*- TeBe/Madteam
3x Atari 130XE, SDX, CPU 65816, 2x VBXE, 2x IDE Plus rev. C

2

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.

KMK
? HEX$(6670358)

3

To co proponujesz, to tylko namiastka wielozadaniowości. Tak naprawdę należałoby napisać maszynę wirtualną wykonującą rozkazy 6502 na 6502 - emulator. Osobnym problemem są przerwania, rozkaz BRK. W podanym przez Ciebie przykładzie można sobie pozwolić na optymalizację polegającą na podzieleniu stosu na dwie pule po 128 bajtów, eliminując w ten sposób konieczność ich przepisywania i zmniejszając obciążenie z tym związane.

[ Dodano: Sob Maj 07, 2005 4:31 pm ]
Dodatkowy problem to zarządzanie zasobami, takimi jak ekran, urządzenia, krótko mówiąc masa czasu koniecznego na porządną realizację tego zadania. Bynajmniej nie jest ono trywialne.

4

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.

KMK
? HEX$(6670358)

5

Pamiętajcie, że rozkaz BRK powoduje wywołanie przerwania spod adresu przechowywanego pod $fffe, które w praktyce należałoby filtrować. Obawiam się, że wszelkie odwołania do rejestrów sprzętowych, w szczególności te związanie z przerwaniami nmi oraz irq stanowią poważny problem.

Panie! Nie po to sa procesory zeby maszyny wirtualne pisac :)

Tak powazniej: nigdy nie ma 100% wielozadaniowosci. To jest owszem osiagalne, ale jedynie w specjalizowanych rozwiazaniach, a nie w takich jak "uniwersalny" komputer. Im bardziej zaawansowany CPU tym lepiej z wielozadaniowoscia, no niestety 6502 ani 65816 nie sa najnowszym osiagnieciem techniki.

Nie jeste specem wiec nie bede sie wymadrzal, ale ja osobiscie radzilbym okreslic cos w rodzaju standardu ktory musialyby spelnias multitaskowe programy, napisac do tego OS i nie silic sie na kompatybilnosc ze starym oprogramowaniem.

Atari: FireBee, (Falcon030 CT60e SuperVidel SvEthlana CTPCI), TT, (520ST Pak030 Frak PuPla Panther), (520ST 4MB ST RAM 8MB TT RAM CosmosEx SC1435), (1040STFM UltraSatan SM124), (1040STE 4MB ST RAM 8MB TT RAM CosmosEx NetUSBee SM144 SC1224), 260ST, 520 ST+, (MEGA ST SM125), (65XE Rapidus U1MB VBXE SIDE2 SIO2PC), (Jaguar SkunkBoard), Lynx II, 2x Portfolio

7

ogolnie chodziloby mi o stworzenie srodowiska graficznego (lepszego od GEOS'a), w ktorym takie przelaczanie aplikacji moznaby wykorzystac

jesli ktos bedzie chcial wykorzystac obsluge podstawowych komponentow w takim srodowisku to napisze aplikacje dzialajace w gfx, jesli chce najszybsza napisze aplikacje konsolowa, dzialajaca w znakowym srodowisku, z tym ze tu bedzie sam obslugiwal ekran albo za pomoca OS'a

a jedynym multitaskingiem bylyby programy podczepione pod koncowke przerwania VBL, zegar czasu rzeczywistego, player msx, bufor klawiatury itp. ogolnie krotkie programy nie przekraczajace 20.000 cykli

i tak jak napisal DRAC030 stos, strona zerowa, pamiec obrazu, program antica alokowany w pamieci dodatkowej, w momencie żądania wywolania programu przepisywane sa te dane do podstawowej, a kod aplikacji uruchamiany w dodatkowej pamieci

co by to dalo?
kilka, kilkadziesiat aplikacji w pamieci, mozliwosc przelaczania sie pomiedzy nimi, zupelnie inny komfort pracy, cala moc CPU wykorzystywana przez aktywna aplikacje

nasuwa sie skojarzenie z TTP (Tight Tools Package), ktore na GEOS jest wzorowany (graficznie), statyczne okno glowne, z ktorego wybieramy programy

inne skojarzenie podsunal Jurgi

miałem kiedyś programik, który robił mniej więcej to, co Qmeg 4.04
potrafił zamieniać dwa prg miejscami (łącznie z dosem), snapshot się zwał
nie był tak dobry jak Qmeg, ale niezły, można było na zmianę dwóch systemów używać, tylko przy wspólnym używaniu ramdysku były problemy, na 100% używał dodatkowego 64kb


do czego multitasking?
do obslugi protokolu TCP/IP, ftp'a, www, irc'a, gg czyli wszystkiego tego czego nie mamy (Contiki powstalo ale pewnie RJ'ek zabraklo w Atari )

p.s.
byloby milo gdyby w DRAC'OS mozna jakas funkcja systemowa wybrac nowe miejsce dla strony zerowej, stosu, czyli taki zalazek dla przelaczania taskow, do wykorzystania w przyszlosci

z tego co czytalem alokacje pamieci ma zaimplementowana, wiec moznaby wykorzystac ten OS jako podstawe integracji z takim srodowiskiem graficznym

*- TeBe/Madteam
3x Atari 130XE, SDX, CPU 65816, 2x VBXE, 2x IDE Plus rev. C

8

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.

KMK
? HEX$(6670358)

9

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.

Trzeba zarządzać tym wektorem przy przełączaniu zadań. Istnieje konieczność ogólnego zaprojektowania obsługi przerwań w systemie wielozadaniowym - najlepiej przez zablokowanie ich bezpośredniego zarządzania przez zadanie. To samo dot. wielu rej. sprzętowych, do których dostęp musiałby być pośredni, poprzez specjalnie zaprojektowane API.

10

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.

KMK
? HEX$(6670358)

11

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

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. 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. To raczej nie wchodzi w rachubę...

Co do BRK i przerwań, to widzę to po prostu jako problem sam w sobie. Uważam, że puszczenie wątku na żywioł nie ma sensu, także z tego powyższego powodu. Istnieje wiele powodów, które mogłyby spowodować destabilizację całego systemu podczas wykonywania dowolnego zadania (zawierającego błąd, ale niekoniecznie), dlatego zastanawiam się, czy wogóle to ma sens w takiej formie jak jest proponowane.

12

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.

KMK
? HEX$(6670358)

13

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.

Nie prawda - jest to możliwe do realizacji.

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.

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

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?

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. Jeżeli n wątków odpali sobie przerwania o dużej częstotliwości wywołań, w dodatku nie kontrolowanej długości wykonywania, to jest to koniec. Osobną sprawą jest to, że nie powinno się zezwalać w ogóle na bezpośredni dostęp do obsługi przerwań, tylko za pomocą systemowego API, które pośredniczyłoby w ten sposób, aby nie dopuścić do destabilizacji.

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.

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

14

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ć.

KMK
? HEX$(6670358)

15

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?

Oczywiście. Nie ma żadnych problemów aby na drodze programowej to wykonać.

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ł"?

Z całym szacunkien dla Pańskiej osoby, ale odnoszę wrażenie, że dyskusja zbacza z tematu. Proszę mnie poprawić, ale wydaje mi się, że dyskusja na temat tego czy ja widziałem coś czy nie, ma się nijak do merytoryczności tego wątku, dlatego proszę Pana o całkowite wyeliminowanie elementów osobistych w tym wątku.

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ć.

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

16

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.

KMK
? HEX$(6670358)

17

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.

Do tego nie było potrzebne zadawanie pytania, które nic nie wnosi do Pańskiej wiedzy, a prywatnie, to może Pan do mnie wysłać mail'a w tej sprawie, jeśli ma Pan taką ochotę.

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.

Myli się Pan - wystarczą trzy. :>

Zadkładając, że nie mam pojęcia o "budowie stołów" - jaki jest sens mówienia o tym tutaj? Ja uważam, że żaden praktyczny... Jeżeli Pan nie ma ochoty na dyskusję merytoryczną ze mną z dowolnych powodów - niech Pan tego tutaj nie robi.

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.

Odpowiadałem na Pańskie pytanie. Sądzę, że to było stosowne w tym miejscu, a Pan mi odpowiedział, że to banał... :>

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ł.

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.

Nie użyłbym takiego sformułowania - przywiązany. Faktem jest, że uważam to za rozwiązanie warte rozważenia. Przynajmniej można o tym podyskutować...

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

18

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.

KMK
? HEX$(6670358)

19

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.

O mnie prosze się nie martwić.

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ł.

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.

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

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.

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ę. Równie dobrze można sobie pisać system operacyjny z obsługą wielowątkowości na PC'ta, tyle że nie o to chyba chodzi. Po prostu opieram się na innych założeniach.

20

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.

KMK
? HEX$(6670358)

21

aqq. Panowie... badzcie powazni. Za moment bedziecie wrzucac jeszcze wieksze glupoty... po co? Mysle, ze nie warto wracac do czasow L.O., itd...

Tebe podsunal dosyc ciekawy pomysl... warto rozruszac szare komorki i napisac cos z SENSEM i na TEMAT :-)

konkrety Panowie... konkrety :-)

s.

22

Propozycja...

Założenia:

Nierozbudowany "maluch" klasy 65XE, ew. 130XE.

1) Ochrona pamięci
2) Ochrona przed przepełnieniem stosu
3) Ochrona przed wykonaniem nieprawidłowego op-code'u
4) Ochrona/zarządzanie zasobami systemowym na podstawowym poziomie (całkowita blokada)
5) Na pocz. prosta wielozadaniowość, bez żadnych priorytetów.

Na początek można spróbować napisać proste, małe API do GUI (okna z paroma typowymi kontrolkami jak EditBox, ComboBox, Checkbox) oraz do uruchamiania aplikacji konsolowych.

W takim środowisku graficznym (zrealizowanym w trybie tekstowym),  możnaby uruchamiać proste programiki, jak manager plików, kalkulator, prosty edytor tekstowy.

[ Dodano: Wto Maj 10, 2005 3:22 pm ]
Policzyłem wstępnie liczbę cykli na wykonanie rozkazów z adresowaniem absolutnym z ochroną pamięci i wyszło średnio spowolnienie 8:1. Inne rozkazy, nie wymagające adresowania pamięci wykonywane są znacznie szybciej. Otwarcie trzeba powiedzieć, że rozkazy z adresowaniem pamięci występują raczej często, więc myślę, że będzie można mówić o spowolnieniu rzędu 6:1.

23

Dyskusja na początku wydawała się być szalenie interesująca, tylko mam prośbę Panowie. Przestańcie sobie jeździć wzajemnie po ambicji oraz nie łapcie się wzajemnie za słowka - wyjdzie to na lepsze merytorycznemu poziomowi dyskusji. Aha, Konop, nie cytuj sam siebie :>

Czy możecie wyjaśnić, Stirlitz, dlaczego wasz służbowy adres stirlitz@rsha.gov.de ma aliasa justas@gru.su?
Nie czytam PM. Proszę używać e-mail.

24

stol zeby byc stabilnym wystarcza 3 nogi, a nawet 1 :-) - o wlasciwym stosunku srednicy do powierzchni blatu hehe

panowie, zrodla amigaos sa dostepne. zerkamy i piszemy ;-)

po pierwsze za duzo oczekujecie !

- musza byc napisane sterowniki wszystkich urzadzen: system alokacji urzadzen (i koniec z adresowaniem rejestrow sprzetowych)

- priorytety taskow

- zablokowane przerwania dla programow pisanych pod system :(

- kod relokowalny + system deklarowania obszarow roboczych.

to by chyba wystarczylo zeby stworzyc jakas namiastke multitaskingu?

http://atari.pl/hsc/ad.php?i=1.

25

Maybe MINT can be ported to the WARP4 upgraded 8-bit computer, with 16Mb of RAM it could be done...  8)

I know DRACO is dreaming of this....  :lol: