-
Data: 2019-03-03 22:34:48
Temat: Re: CP/M i 64kB
Od: "J.F." <j...@p...onet.pl> szukaj wiadomości tego autora
[ pokaż wszystkie nagłówki ]Dnia Sun, 3 Mar 2019 18:26:38 +0100, Sebastian Biały napisał(a):
> On 03/03/2019 17:44, J.F. wrote:
>>> 6502 - Procesor mający 64kB liniwej przestrzeni widzący resztę pamieci
>>> przez okna przemieszczane rejestrami sprzętowymi
>>> Coś pomyliłem?
>> O tak, 6502 - procesor majacy 256B przestrzeni liniowej,
>> przemieszczane gdzies w 64KB przestrzenii adresowej.
>
> Mówisz o indeksowaniu X,Y. Podobnie ograniczenia, np. odległości brancha
> ma każdy współczesny CPU i to nie jest to samo.
Mowie o latwosci adresacji.
Na 8086 latwo i przyjemnie adresuje sie kawalki do 64KB.
Na 6502 - kawalki do 256B.
A jak mamy 1MB RAM, to znow znacznie latwiej sie to obrabia na 8086 w
malych kawalkach, niz na 6502 z dodatkowym stronnicowaniem.
To stronnicowanie sie zreszta w pecetach pojawilo, w postaci pamieci
EMS, jak juz 640KB przestalo wystarczac.
Ale przyznaje - to byl kanal :-)
>> Poza tym masz np obrazek duzy.
>> Ustawiac segment na pocztek n-tej linii masz w ramach 64KB dostep do
>> tej linii (przy sensownym rozmiarze), moze nawet do kilku nastepnych.
>> W stronnicowanym Atari musisz co chwila sprawdzac.
>
> Nie, kod jest koncepcyjnie identyczny jeśli mówimy o 64kB. Sytuacja że
> segmenty mają jakąś zaletę że na siebie zachodzą jest mało prawdopodobna
> z powodów obliczeniowych.
O co innego chodzi. Masz np obrazek 24b/pixel.
Obliczasz adres trzech bajtow pixela w pamieci seg:offset,
i masz w trzech kolejnych bajtach dane. I nie zastanawiasz sie czy
przypadkiem drugi lub trzeci bajt nie leza na innej stronie, i trzeba
ja zmienic.
Albo np szukasz slowa w tekscie, i sie nie zastanawiasz czy
przypadkiem "owo" nie jest na nastepnej stronie.
Oczywiscie, przy rozsadnym zalozeniu ze normalizujesz wskaznik np co
linie, a linia nie ma ponad 64KB.
>>> Tak, detalicznie rzecz biorąc 8086 miał kilka okien
>>> jednocześnie i możlwiość liczenia na parach rejestrów. Znaczy lepszy.
>> Byl 16-bit, a nie bit. Znacznie lepszy :-)
>
> Z80 łaczył rejestry w pary. Czy to oznacza że był 16 bit?
Jak pisalem - Z80 dalbym ze 12 bit.
Troche operacji 16-bit mial.
8086 byl w pelni 16 bitowym uP.
>> 386 byl w miare dobry, i jak widac nie trzeba go bylo zmieniac ...
>> dlugo.
> Bo nareszcie zaczynał przypominać normalny procesor a nie workaround nad
> 8bitami.
8086 byl calkiem zgrabny ... ale nie w maszynie z 1MB RAM.
No coz - ona nie miala miec 1MB, ani nawet 640K, a raczej 256KB :-)
>>> Inne procki albo nie udawały że potrafią więcej albo od razu były
>>> normalne. Intel zrobił pokrakę mającą za zadanie podstawowe utrzymać
>>> model programistyczny z 8 bitów. Żadnej innowacji, żadnego wizonerstwa,
>>> tylko utrzymanie kompatybilności z Zx Sp^M^M^M^M8086.
>> Nie z ZX Spectrum tylko z CP/M na 8080.
>
> Przecież skasowałem.
Ale ciagle tak myslisz :-P
>> Mowisz pokraka ... a ja mowie "tworcze rozwiniecie".
>> I wez pod uwage, ze to byly lata 1976-78.
> To uniemożliwiało innowacyjność ;) ?
Nie, to byla innowacyjnosc na miare tych lat.
Gdy domowy Atari VCS mial 256B RAM, Apple II jakies 4KB,
a 68k jeszcze nie bylo - choc tez juz projektowali.
>> A przy okazji - widac ktos docenil rozwoj srodowiska CP/M, skoro
>> zachowal kombatybilnosc, co uzasadnia przymiotnik "profesjonalny" :-)
>
> To nie jest docenienie tylko wybicie się na ramionach CP/M.
Ale widac byla to solidna podstawa do skoku :-)
>>> nie miał zostać lub być dynamicznie przemieszczany to bez wiedzy
>>> programu nie da się tego zrobić. Segmenty niczego tu nie naprawiają.
>> A widzisz - nie.
>> Ale musisz z 86 przeskoczyc do 286
>
> Ale my rozmawiamy o 8086. Za chwile ktos wyskoczy że segmenty mają 4GB i
> o czym mowa. No wiec mowa o 8086.
Ja mowie szerzej. W 386 segmenty maja do 4GB - tylko juz ich chyba nie
uzywaja.
>> System mogl przeniesc zawartosc pamieci, zmienic dane w tablicy i
>> wznowic prace programu.
>
> Kompaktacja pamięci pojawił się dopiero w językach w których nie ma
> pointerów (z popularnych Java C# i inne). Wiedza o tym że ktoś
> przemieszcza mi pointery w programie musi istnieć, program musi być na
> to gotowy.
Ale jak wychodzimy z CP/M i zaczynamy robic wielozadaniowy system
operacyjny, to problem wraca.
Zadania przychodza, koncza sie ...
> Przestrzeń, nawet wirtualna, programu jest niestety stabilna
> adresowo i samo się nic nie dzieje. A co robi MMU to nie ma żadanego
> znaczenia bo to nie o tym mowa. Do dzisiaj nie da się automatycznie
> kompaktować pamięci w programach pisanych w C i w milionie innych
> języków. Nic tu segmentacja nie pomaga.
A jednak cos mi chodzi po glowie, ze jeszcze Odra miala relokacje,
tylko raczej na innej zasadzie - jeden rejestr, ktory byl dodawany do
wszystkich adresow ?
>>> Segmentacja pamięci *NIE* ma żadnego praktycznego zastosowania które
>>> jest lepsze od pamieci liniowo dostępnej.
>> Wyobraz sobie tak - alokujesz 1 GB pamieci.
>> System przydziela od adresu 0.2G, bo nizej juz zajete.
>> Potem alokujemy drugi obszar, 100MB, wypada od adresu 1.2G.
>> Teraz chcemy rozszerzyc ten pierwszy do 1.3G
>> I tu juz system mowi, ze tak sie nie da - nie ma rozszerzania, bo nie.
>> Moze przydzielic nowy obszar - ale to nie calkiem to samo.
>> A z segmentami by sie dalo.
>
> A jak? Żeby program nie wiedział i żebyś nie pomylił segmentacji z
> translacją wirtualna->fizyczna MMU.
Bo program ma uzywac dla tej pamieci segmentu nr 3 np.
>> No to przydzielmy nowy - od adresu 1.3 do 2.6G.
>> Rozszerzmy go jeszcze raz do 1.5G ... i system mowi, ze sie nie da,
>> bo mu przekroczy 4G (na 32 bit procku).
>> 4GB pamieci, a nie mozna 1.5GB zaalokowac :-)
>
> Bo to problem segmentacji pamięci i jest obecy w każdej współczesnej
> sytuacji kiedy nie ma kompaktacji pamięci. Segmenty nic nie zmieniają
> ani nie ułatwiają.
>
>> Z segmentami (ale nie takimi jak w 86) by sie dalo.
>
> Dalej nie rozumiem jak chcesz między adres A i B wcisnąć więcej niż
> wynika z ich różnicy i bez wiedzy programu. Nie da się i najlepszym
> dowodem na to jest fakt że 32 bitowe programy cierpią na fragmentację do
> dzisiaj i nic z tym nie da się zrobić bo to fundamentalny problem z
No wlasnie uzyc segmentow ... tylko w stylu 2/386.
Prosisz o duzo, to dostajesz dodatkowy nr segmentu,
a procesor ma gdzies tam zapisane gdzie sie segment zaczyna.
> samym językiem programowania C który daje do ręki pointery i pozwala na
> artytmetykę na nich.
IMO to raczej cecha uP .. zawsze bedzie ten problem.
>> Oczywiscie idealne to nie jest - trzeba dodatkowo ten nr segmemtu
>> zapamietywac, zazwyczaj jest ich ograniczona ilosc - wiec wychodzac z
>> jednej pulapki pakujemu sie w druga :-)
>
> Segmenty niczego nie rozwiązywały i niczego nie rozwiązują. Oni
> potrzebowali tylko i wyacznie kompatybilności koncepcyjnej z 8080 i jak
> najmniejszych kosztów. Dorabianie filozofii do tego jest kiepskim pomysłem.
No to jednak ponad te kompatybilnosc mocno wykroczyli.
Chocby ten rejestr BP i adresacja ramek stosu, swietnie pasujaca do
jezykow programowania jak C czy Pascal.
Nawiasem mowiac - chcieli lepiej
https://en.wikipedia.org/wiki/Intel_iAPX_432
I nikt tego nie kupil :-)
>> Rozwiazaniem moze byc przejscie na system 64-bit ... na jak dlugo
>> starczy ? :-)
>
> Na znacznie dłużej niż 2x dłużej. Jakieś 4mld razy dłużej, nawet mając
> temp wzrosu z okolic e^x to powoli osiągamy limity sensu w grafice wiec
> to przyśpieszczenie nie jest aż takie duże jak na początku.
W 1990 tez tak mowilem, ze dochodzimy granic technologii i duzo
szybciej nie te 40MHz to nie bedzie :-P
Ale ok, przekroczyc te 64-bit bedzie trudno .. chyba, ze znow cos
wymysla :-)
>>> Jak się nie obrócisz dupa z tyłu. To motto Intela i ich profesjonalnych
>>> produktów.
>> Powiem tak: jakos im to dzialalo i to bez wiekszych narzekan ze strony
>> programistow. Widac tak sie profesjonalnie rozwiazuje problemy :-)
>
> Narzekań? Narzekałeś kiedyś na słońce że w dzień świeci? Do wyboru nic
> innego nie było. Święte wojny między 68k a 386 ujawniły jednak jak
> żąłosną architekturą było nawet to 386 z kilkoma specjalizowanymi
> rejestrami, praktycznie zerową ortogonalnością itd itp.
Ta ortogonalnosc nie jest tak znow niezbedna.
> Tylko że wtedy
> było się z czym równać. W przypadku 8086 zapewne każdy założyl że lepiej
> być nie może.
No widzisz - sam chwalisz :-)
>> Albo cos takiego - jest funkcja, ktora wymaga tablicy
>> danych/parametrow.
>> I mozna ja wywolac z tablicą uzytkownika, lub jedną z predefiniowanych
>> w bibliotece.
>
> I co broni podać normalny pointer do tej tablicy?
>
>> Tylko funkcja nie wie, ktora jej przekazujesz, skoro to jest po prostu
>> adres. Nie wie, czy ma sie odwolywac relatywnie do PC, czy nie.
>
> Nie musi tego wiedzieć, skoro podałeś adres to pod nim spodziewadz się
> danych. Mówisz o offsecie. Ale nawet wtedy nie o to chodzi. Kod
> relokowalny ma TAKIE SAME pointery jak nierelokowalny. Róznica jest
> tylko w tym że KOD może być dowolnie umieszczony w RAM.
A tu jest kod i dane.
Np procedura rysowania znakow na ekranie, i dane z fontami.
Font moze byc dowolny, ale jest kilka predefiniowanych w bibliotece.
I całosc dynamicznie linkowana i nie wiadomo pod jakim adresem sie
znajdzie po załadowaniu.
J.
Następne wpisy z tego wątku
- 04.03.19 09:02 Marek
- 04.03.19 09:24 MKi
- 04.03.19 19:27 Sebastian Biały
- 04.03.19 19:29 Sebastian Biały
- 04.03.19 19:41 Sebastian Biały
- 04.03.19 21:56 b...@g...com
- 05.03.19 11:21 J.F.
- 05.03.19 20:48 Sebastian Biały
- 05.03.19 21:58 J.F.
- 19.03.19 21:00 ń
Najnowsze wątki z tej grupy
- SEP 1 kV E
- Aku LiPo źródło dostaw - ktoś poleci ?
- starość nie radość
- Ataki hakerskie
- Akumulatorki Ni-MH AA i AAA Green Cell
- Dławik CM
- JDG i utylizacja sprzetu
- Identyfikacja układ SO8 w sterowniku migających światełek choinkowych
- DS1813-10 się psuje
- Taki tam szkolny problem...
- LIR2032 a ML2032
- SmartWatch Multimetr bezprzewodowy
- olej psuje?
- Internet w lesie - Starlink
- Opis produktu z Aliexpress
Najnowsze wątki
- 2024-12-11 SEP 1 kV E
- 2024-12-11 DNS restrictions are on
- 2024-12-11 wielkie bu
- 2024-12-11 Białystok => Inżynier bezpieczeństwa aplikacji <=
- 2024-12-11 Aku LiPo źródło dostaw - ktoś poleci ?
- 2024-12-11 Warszawa => Specjalista Bezpieczeństwa Informacji <=
- 2024-12-11 Wrocław => Application Security Engineer <=
- 2024-12-11 Warszawa => Analyst in the Trade Development department (experience wi
- 2024-12-11 Lublin => Programista Delphi <=
- 2024-12-11 Motodziennik #305 Nowy ELEKTRYK za 350 złotych miesięcznie? Kreatywne kredytowanie problemów
- 2024-12-11 Warszawa => Spedytor Międzynarodowy <=
- 2024-12-11 Katowice => Key Account Manager (ERP) <=
- 2024-12-11 Katowice => Regionalny Kierownik Sprzedaży (OZE) <=
- 2024-12-11 Idzie zima...czyli zaczynamy TETRIS :)
- 2024-12-11 Warszawa => Analityk w dziale Trade Development (doświadczenie z Powe