Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C: Mode 0X12

Sivun loppuun

Hanc [13.10.2002 12:58:21]

#

Kuinka voin piirtää pikselin moodissa 0x12(Eli 640x480x4)

Hanc [13.10.2002 12:58:49]

#

Ja mielellään vielä nopeasti kaksoispuskurin kanssa..

Lare [13.10.2002 18:44:15]

#

Ympäristö olis taas kiva tietää. Jos DJGPP, lue laamatutti.

Hanc [13.10.2002 20:30:14]

#

Luettu... Ei sinnä ollut mitään 0X12 Moodista.

Lare [13.10.2002 21:14:36]

#

Sovella! Kyllä Se laamatutin tiedoilla pitäis onnistua.

Hanc [14.10.2002 14:36:29]

#

Hmmm... No ei nyt tule mieleen.... Tietääkö kukaan?

thefox [14.10.2002 14:37:03]

#

Sovella tosiaan.. mode12h:ssa on se täsmälleen sama näyttöbufferi siellä segmentissä 0xA000, suojatussa tilassa kun leikitään selektoreilla niin tunget niitä pikseleitä muistiin osoitteeseen 0xA0000.
Tuplabufferi onnistuu täsmälleen samoin kuin mode13h:nkin kanssa, eli malloc:illa revit vähän muistia ja sinne vaan.
Mode13h vie näyttömuistia 64000 tavua (320x200 = 64000, tavu per pikseli, joten joka pikseli voi saada 256 eri arvoa). Myös mode12h vie 64000 tavua (resoluutio 640x400, 4 bittiä per pikseli eli 16 eri arvoa pikselille). Tässä piileekin mode12h:n piirtämisen "vaikeus" --yhteen tavuun pitää tunkea kaksi pikseliä.
Ei se silti vaikeaa ole, käytät vain shiftejä (<< ja >>) ja tai-bittioperaatiota (|) hyväksesi... jätetään nyt sinullekin jotain tekemistä.. ;)

Hanc [14.10.2002 14:42:19]

#

Hmmm... No ei nyt tule mieleen.... Tietääkö kukaan?

Hanc [14.10.2002 14:44:09]

#

lainaus:

Sovella tosiaan.. mode12h:ssa on se täsmälleen sama näyttöbufferi siellä segmentissä 0xA000, suojatussa tilassa kun leikitään selektoreilla niin tunget niitä pikseleitä muistiin osoitteeseen 0xA0000.
Tuplabufferi onnistuu täsmälleen samoin kuin mode13h:nkin kanssa, eli malloc:illa revit vähän muistia ja sinne vaan.
Mode13h vie näyttömuistia 64000 tavua (320x200 = 64000, tavu per pikseli, joten joka pikseli voi saada 256 eri arvoa). Myös mode12h vie 64000 tavua (resoluutio 640x400, 4 bittiä per pikseli eli 16 eri arvoa pikselille). Tässä piileekin mode12h:n piirtämisen "vaikeus" --yhteen tavuun pitää tunkea kaksi pikseliä.
Ei se silti vaikeaa ole, käytät vain shiftejä (<< ja >>) ja tai-bittioperaatiota (|) hyväksesi... jätetään nyt sinullekin jotain tekemistä.. ;)

Niin no tuon tiesin jo. No kokeillaan jotain..

tArzAn [15.10.2002 09:22:12]

#

Fawkz puhuu kyllä hitusen soopaa, sillä mode 12h on 640x480 mode jossa on 4 bitplanea (eli 16 väriä). Pikseleitä ei piirretä tunkemalla kahta nibbleä vierekkäin byteen, vaan laittamalla halutut bitplanet päälle ja kirjoittamalla tavun, jossa jokainen bitti kuvastuu yhteen pikseliin.

Kirjoitusta varten bitplaneja voi asettaa useamman päälle yhtäaikaa, eli ko. tilassa voi siis esim. tyhjentää 8 pikseliä yhden tavun kirjoituksella. Näyttömuistista lukemista varten voidaan valita 1 bitplane kerrallaan.

Yhden halutun värisen pikselin piirto onnistuu ainakin niin, että käy jokaisen bitplanen yksitellen läpi, lukee planella olevan tavun, maskaa siitä halutun pikselin pois päältä tai päälle sen mukaan onko halutun pikselin värissä ko. bitplane päällä vai poissa, ja kirjoittaa ko. tavun takaisin muistiin. En muista oliko tähän yhtään tehokkaampaa keinoa, toisaalta josko ei olekaan niin eihän sitä yksittäisin pikselein kuitenkaan piirretä. Esim. flat-polygonien piirron voi viritellä hyvinkin nopeaksi bitplanetiloissa.

Mistä tahansa EGA/VGA referenssistä löytänee tarvittavat rekisterit noiden planejen nypläämiseen.

thefox [15.10.2002 13:52:18]

#

Oih, mutu, miksi minut petit.. ;) Kiitoksia tArzAnille valaisusta.

Hanc [15.10.2002 18:21:21]

#

Mikä on EGA referenssi?

thefox [15.10.2002 21:32:02]

#

Teksti joka käsittelee EGA:aa. Google: EGA reference tjsp.

tArzAn [16.10.2002 22:32:47]

#

Tässä on nuo pari tärkeintä funktiota:

setreadplane: anna parametriksi arvo väliltä 0-3

void setreadplane(int plane)
{
    outp(0x3ce, 4);
    outp(0x3cf, plane & 3);
}

setwriteplanes: anna parametriksi arvo jonka alimmat 4 bittiä ilmaisee mitkä planet asetetaan päälle kirjoitusta varten

void setwriteplanes(int planes)
{
    outp(0x3c4, 2);
    outp(0x3c5, planes);
}

Hanc [17.10.2002 20:13:05]

#

Nyt ei ihan tajunnut mitä noilla pitäisi tehrä?

Gevil [17.10.2002 20:41:47]

#

tArzAn, oletkos sä muuten se henkilö joka teki Assemblyillä sen yhen compon erään tuotoksen.. en nyt muista mikä, mut jossakin tuotoksessa oli readmeessä tarzan. Niin oletko sama henkilö?

Hanc [18.10.2002 17:08:22]

#

Muistaakseni Neuroosiverkko 43KB byt tAAt

Hanc [18.10.2002 17:15:39]

#

yurtuftyyyyyyyyygfd

Hanc [18.10.2002 17:16:26]

#

No voihan vahinko...

Vilikki [18.10.2002 17:35:42]

#

tAAthan teki myös sen porrasturvat-pelin...

Gevil [18.10.2002 17:51:06]

#

tAAt=tArzAn? Vai joku tiimi johon tArzAn kuuluu?

tomaattigeeni [18.10.2002 19:53:27]

#

Porrasturvat on jonku tAAt softaware tjsp. tekemä.

Pekkuli [18.10.2002 23:40:15]

#

Joskus oli ainakin joku Tarzan tuotanto- gruuppi. Luulisin, että tAAt on kyseinen Tarzan tuotanto, mutta en ole varma.

thefox [19.10.2002 12:06:19]

#

Vaikka en pidäkään siitä että vastaillaan kysymyksiin toisten puolesta (tässä tapauksessa oikea vastaajahan olisi ollut tArzAn itse) niin:
http://www.taat.fi


Sivun alkuun

Vastaus

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

Tietoa sivustosta