Tryb VESA 640*480 w TP

andrejch-chronos

Tryb VESA jest trybem 640480256 kolorów dzieli monitor na strony. Przede wszystkim pamięć obrazu zorganizowana jest w ten sposób, iż podzielona jest na tzw. bitplany po 64kB.W jednej chwili zawsze mamy dostep do jednego - jest to tzw. okno zaczynające sie od adresu
A000h:0000h i kończące się na A000h:FFFFh, czyli tylko jeden segment. Ponieważ wielkość segmentu ma 64kB, wynikałoby, że maksymalnie dostepnym trybem bylby 13h (320x200 przy 256 kolorach bo 320x200 = 64k), bowiem caly ekran odpowiada wtedy 64kB. W wyższych trybach, jak np. w trybie VESA 101h - 640x480 przy 256 kolorach logiczne jest, że pamięć obrazu będzie miała 640*480=307Kb.

Włącza się go w ten sposób:

PROCEDURE Init101h;
begin
asm
  mov bx,101h
  mov ax,4f02h
  int 10h
end;
end;

A wyłącza w ten:

PROCEDURE Close101h;
begin
asm
  mov ah, 00h
  mov al, 03h
  int 10h
end;  
end;

No i oczywiście jeszcze jakaś funkcja:

var
  y,x,ofset:word;
  c:integer;
  ktory:word;

Procedure putpixel(x,y:word; c:byte);
begin
  ktory:=round(int(y / 65535/640));

  asm
    mov ax, 4F05h
    xor bx, bx

    mov dx, ktory
    int 10h
  end;
  ofset:=640*y+x;

  asm
    mov ax, 0A000h
    mov es, ax
    mov bx, word ptr ds:[ofset]
    mov al, c
    mov byte ptr es:[bx], al
  end;
end;

Nie może zabraknąć też funkcji rysowania lini:

PROCEDURE line_(x1,y1,x2,y2:single;kolor:integer);
var 
  x,y:single;
begin 
  if  (x1<x2) then
  begin
    x:=x1; 

    repeat 
      x:=x+1; 
      y:=((y2-y1)/(x2-x1))*(x-x1)+y1; 
      putpixel(round(x),round(y),kolor);
    until x = x2; 
  end;

  if (x1>x2) then 
  begin 
    x:=x1; 

    repeat 
      x:=x-1; 
      y:=((y2-y1)/(x2-x1))*(x-x1)+y1; 
      putpixel(round(x),round(y),kolor); 
    until x = x2; 

    if (y1=y2) then 
    begin 
      if (x2>x1) then 
      begin 
        y:=y1; 
        x:=x1; 

        repeat 
          putpixel(round(x),round(y),kolor); 
          x:=x+1; 
        until x = x2; 
      end; 

      if (x1>x2) then 
      begin 
        x:=x1; 

        repeat
          putpixel(round(x),round(y),kolor); 
          x:=x-1; 
        until x = x2; 
      end; 
    end; 
  end;

  if (x1=x2) then 
  begin 
    x:=x1;

    if (y2>y1) then 
    begin 
      y:=y2; 

      repeat 
        y:=y-1; 
        putpixel(round(x),round(y),kolor); 
      until y = y1; 
    end;

    if (y1>y2) then 
    begin 
      y:=y1; 
      repeat 
        y:=y-1; 
        putpixel(round(x),round(y),kolor); 
      until y = y2; 
    end; 
  end; 
end; 

No i to by było na tyle.

13 komentarzy

Pozostaje mi tylko stwierdzic, ze ciesze sie, ze komus sie tekst przydal... Nie zmienia to jednak mojego zdania na temat Turbo Pascala, ktory do dzis jest aplikacja platna, a mozliwosci w stosunku do wspolczesnie darmowych srodowisk ma niczym z epoki kamienia lupanego.

Szukałem tego tekstu, a szukałem. Dzięki Ci za to!
@Szczawik: Jak ci nie pasuje tekst, to go nie oglądaj i nie dodawaj zbędnych komentarzy. Jak dla mnie ten tekst jest bardzo ciekawy jako uzupełnienie kursu pisania własnego OS'a w Pascalu. Jeśli według Ciebie wszystko na tym świecie, co interesujące, jest najnowsze, to zacznij patrzeć z dołu a nie z góry na świat komputerów i informatyki, ok?

PS: Na jakiej licencji jest ten tekst? Bo jeśli Open Source itp. to go zamieszczę na mojej stronie o pisaniu własnego OS'a w Pascalu;

Naprawdę w to wierzysz, czy żartujesz?

W Delphi rysowanie linii zajmuje 2 linie kodu (Canvas.MoveTo, Canvas.LineTo), a powyżej.. no cóż, trochę więcej. Nie wierzę, że ktoś, umiejący programować, siada do kompilatora, by osiągnąć satysfakcję z narysowania wielokąta.

Napisz w Turbo Pascal program wielowątkowy lub współpracujący z innymi aplikacjami. O, sorry - zapomniałem, że się nie da. DOS nie jest wielozadaniowy, a tym bardziej wielowątkowy. Nie ma obsługi schowka, współczesnych sterowników sprzętu, wszystkich funkcji do tworzenia interfejsu graficznego, domyślnie wbudowanej obsługi sieci, ani nawet obsługi tak ogromnych zasobów, jakie oferują współczesne komputery. Jedyne co ma, to ograniczenia: szybkości, dostępu, rozmiaru pamięci; a także braki możliwości. Pisanie we współczesnych kompilatorach pod współczesne systemy (bez znaczenia czy to Linux czy Windows, czy inny OS) nie zabiera Ci żadnej z możliwości Turbo Pascala dla DOSa. Żadnej - po prostu niektóre osiąga się w bardziej cywilizowany sposób. W zamian za to, daje ci szeroką paletę nowych, z których możesz (nie musisz!) korzystać.

Jeśli Cię chemik143 nie przekonałem - Twoja sprawa, pisz w czym chcesz. Jednak wątpię, byś przyszłemu pracodawcy przesłał CV, napisane na maszynie do pisania ("bo można skleić"), niż w pliku z dokumentem (mimo opcji: "szlag trafia dysk albo coś i po zabawie").

Jak dla mnie dalsza dyskusja chyba nic nowego nie wniesie, więc kończę temat.

taaa... mp3... szlag trafia dysk albo coś i po zabawie.. a kaseta sie urwie to skleisz... Mam taśmy jeszcze na szpulach jakieś stare i działają do dziś. A Płyty CD padają jedna za druga...

A kto powiedział ze muszę pchać informatykę do przodu?? Jak już to interesuje się chemią, a programowanie w TP i zgłębianie jego tajników a także osiąganie jakichś celów daje bardzo dużo satysfakcji;) I myślę, że chodzi o to, żeby miło spędzić czas a nie prowadzić dziki bieg ku "lepszej" przyszłości.

Nie mówię, że się nie da, tylko po co? Porównałbym to do nagrywania własnej muzyki na kasety: oczywiście, że można i u wielu osób pójdzie, bo jeszcze mają jak odtworzyć.. tylko w jakim celu, skoro da się nagrać w postaci mp3 i rozpowszechniać on-line o wiele szerszemu gronu, które ma możliwość wygodniejszego odtwarzania bez przewijania taśmy.

Ja jeszcze jakieś 4 lata temu bawiłem się trybem 13h i VESA.
Nie taki aż archaiczny - gierkę asteroids można było zrobić :)

O tym właśnie mówię - głupota kupować dla pascala kompa (nawet za przysłowiowego browara), kiedy ten kompilator cię ogranicza. Pokażcie mi jedną sensowną rzecz, którą w Turbo Pascal się da zrobić, a w nowych kompilatorach (Delphi, FreePascal, itp) się nie da. Tylko nie mówię o: "nie da się obsługiwać grafiki przez dostęp bezpośredni do adresu A000:0000", bo to jest środek, a nie cel.

Powiem więcej, przez takich właśnie ludzi, informatyka nie rozwija się tak szybko jakby mogła, bo całe tłumy newbiesów trafiają na ścianę, bo w tutorialu Turbo Pascala port COM obsługuje się przez dostęp bezpośredni, a w systemach Windows w sposób bardziej elegancki, za to bezpośredni nie zadziała w ogóle. Przecież nie zrobiono takich zmian, by utrudniać ludziom życie, tylko wprowadzać cywilizowane rozwiązania.

A gotowe moduły do VESA często nie działają, bo nawet same one już ze starości bywają niekompatybilne z aktualnymi układami graficznymi (które nawet jak wspierają VESA, to często w różnego rodzaju trybach zgodności wstecznej).

To prawda. Przy obecnych możliwościach OpenGL czy DX pisanie w asm nie ma większego sensu. Do tego dochodzi fakt 16 bitów. Tu muszę ze Szczawikiem się zgodzić. Te czasy mimo iż były piękne to minęły i już nie wrócą. Czy nam się to podoba czy nie to trzeba iść naprzód.

Może i są tacy, co piszą, ale przecież jest to kompletnie pozbawione sensu. Są i nowsze kompilatory, i nowsze systemy operacyjne, i nowsze technologie. Pisanie w Turbo Pascal nie ma jakiegokolwiek sensu poza edukacyjnym. Ani kompilator darmowy, ani współcześnie wspierany, rozwijany czy wręcz kompatybilny; nie daje też dużych możliwości.

Ja pisałem Engine 3d w asm+tp do momentu przesiadki na AMD Athlon X2. Obecna architektura pozbawiona jest instrukcji 8086 tak wiec nie mogę odpalić nic pod dosa. Szkooodaa.

@Szczawik: Eeeee...... tam są jeszcze tacy, którzy piszą w TP :)
@Autor tekstu: Popraw formatowanie tekstu i będzie ok.

Jak piszesz tekst, to najpierw coś przeczytaj na temat w zewnętrznych źródłach (uwaga do nazwy: po prostu sprawdź, a nie zgaduj), poczytaj też o formatowaniu tekstów.

Po drugie zastanów się, ile osób skorzysta z Twojego kodu: Turbo Pascal zakończył rozwój prawie 15 lat temu i osoby, które w nim piszą pewnie w 90% robią to w celach akademickich (więc tego nie potrzebują, bo im używać tego nie kazano; w przeciwnym wypadku mieliby to podane przez prowadzącego). Druga połowa osób, której to się może przydać, to osoby, piszące na przykład własny OS - ich wiedza jest znacznie wyższa i takie rzeczy potrafią znaleźć samodzielnie bez większych problemów.

Współcześnie korzysta się z trybów graficznych, oferowanych przez system operacyjny (zależnych od monitora, karty, sterowników), a nie włączanych samodzielnie przerwaniami BIOS. Kto połasi się na 640*480 w 256 kolorach, jak standardem już od wielu, wielu lat są rozdzielczości daleko poza SVGA, o VESA nie wspominając, w 24 bitowym trybie kolorów.

Jak dla mnie istnienie tego tekstu jest bez sensu. Nie przeczę, że jest poprawny, ale ciekawy to on był dekadę, dwie temu.

Co prawda może i Pascal jest archaiczny, ale za to bardzo przydatny. Specjalnie dla Pascala kopiłem laptopa 486 100MHz. Może jestem fanatykiem starych komputerów ale tak już zostanie. Drzemie w nich wystarczająca ilość mocy... Oczywiście niestety nie obejde sie bez nowoczesnego komputera bo jak tu filmy oglądać, necik przeglądać.

A co do artykułu... może sie komuś przyda, kto wie:) W necie są gotowe moduły do VESY ale wszystkie jakieś wadliwe. Chcesz coś zrobić dobrze, to zrób to sam.