Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: Pascal, tietoa ruudulta

Spirit [09.12.2004 13:54:19]

#

Saako 'turbo'pascalin vakiokirjastoilla mietenkään tietoa ruudulta? Käytössä on tekstitila, grafiikkatilassa se onnistuisikin helpommin. Siis joku juttu,jolla saisi tietoa esimerkiksi siitä, minkä värinen ruutu on jossain kohdassa, tai mikä merkki tietyssä kohdassa on.

Metabolix [09.12.2004 16:55:04]

#

Turbo Pascal on DOS-kääntäjä, joten kaikki on mahdollista. Muisti (1 megatavu kai) löytyy taulukosta nimeltä Mem (array of Byte), ja tietty kohta löytyy heksalukujen avulla näin:

var
  Ala, Yla: Word;

begin
  Ala := $ff   (* $ff = 255 *)
  Yla := $1000 (* $1000 = 4096 *)
  Mem[Yla : Ala] := 1;
  { $1000 : $ff
  = $10 * $1000 + $ff eli
  = $100ff
  Näyttömuisti alkaa kai kohdasta $A000 : $0000, en ole varma.
  Kokeilemalla selviää, mitä sieltä löytyy.
  Kirjoittamalla sinne jotakin voi saada ruudulle kaikkea mielenkiintoista. }
end.

peran [09.12.2004 18:50:38]

#

Oliskohan seuraavista proseduureista mitään apua?

Käsittääkseni näyttömuisti alkaa kohdasta $B800 - merkkitilassa.

const nm=$b800;

procedure xwrite(x,y:byte);
var n     :byte;
begin
n:=mem[nm:(x+80*(y-1))*2-1]; {väri kohdassa x,y}
mem[nm:(x+80*(y-1))*2-1]:=(n and 15) * 16+(n div 16);
end;

function nayttoluku(x,y:byte):byte;
begin
nayttoluku:=(mem[nm:(x+80*(y-1))*2-2]) and 255
end;

10 vuotta sitten tehty koodi, mutta toiminneen VGA-tilassa.

Metabolix [10.12.2004 00:13:52]

#

(Pascalille olisi oma kooditagikin... Sen voisi lisätä ohjeisiin.) Merkkitilojakin on useampia erilaisia, joten ei tuokaan ihan yleispätevä ole. Ja tuo alkamiskohtahan on konkreettisesti $B8000, koska ensimmäistä lukua siirretään heksakymmenellä eli kuudellatoista. Ei millään pahalla, mutta on aika sekavasti kirjoitettu koodinpätkä :) Mutta toimii tosiaan ainakin tavallisimmalla tekstitilalla, ja tuota on helppo soveltaa.

Antti Laaksonen [10.12.2004 06:47:39]

#

No käytännössä aloitussegmentti on juuri $B800. Se on tekstitiloissa 0, 1, 2 ja 3. Poikkeus on tila 7, jossa aloitussegmentti on $B000.

Spirit [10.12.2004 11:53:05]

#

Kiitoksia, pitää kokeilla.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta