Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C: Grafiikkaa ilman SDL:ää

Sivun loppuun

Puhveli [14.04.2006 12:04:28]

#

Olispa tosi hienoo, jos onnistuis piirtämään pikselin näytölle 320 x 200 x 8 -tilassa (eli siis 256 väriä) ihan peruskirjastoilla.

Eli haluasin tietää:
1) miten näyttötilaa vaihdetaan,
2) miten pikseli tökätään näytölle (uskoisin, että tämä on mahdollista tehdä jollakin QBasicin POKEn vastineella) ja
3) miten väripalettiin puututaan (tämä taas onnistuisi ainakin OUTia vastaavalla komennolla).

Teen C-ohjelmaa Windowsille, mutta kiva olisi jos sen saisi toimimaan samoilla käskyillä myös Leluxissa. Kiitos jo etukäteen ^_^.

Meitsi [14.04.2006 13:04:58]

#

Luultavasti inline-asmilla onnistuisi näyttötilan vaihto ja laittamalla dataa tiettyihin muistipaikkoihin saisi sitten tavaraa ruudulle... Itse en asmia osaa, joten en oikein voi auttaa, mutta luulisin että sillä onnistuisi käyttiksestä riippumatta...

Blaze [14.04.2006 13:09:47]

#

Moderneissa käyttiksissä et (hyvästä syystä) pääse suoraan laitteistoon käsiksi. DOS-ohjelmalla se sen sijaan onnistuu, ja sellaisen voit toki tehdä. Se sitten pyörii Windowsissa yhteensopivuustilassa ja Linuxissa vaikka Dosboxilla. Joku muu osannee neuvoa, miten homma käytännössä menee.

Jos DOS ei kiinnosta, niin matalin taso, jolle pääset taitaa olla Winapi ja Xlib.

Puhveli [14.04.2006 13:28:41]

#

Asmilla vois kokeilla, näky olevan yks vinkkiki aiheesta. Tuli vaan mieleen Sqwiikin Erkki Saaressa, jossa ei ilmeisesti käytetty SDL:ää.

Puhveli [14.04.2006 15:56:02]

#

Blaze kirjoitti:

DOS-ohjelmalla se sen sijaan onnistuu, ja sellaisen voit toki tehdä. ... Joku muu osannee neuvoa, miten homma käytännössä menee.

Toivottavasti joku tosiaan osaa auttaa minut siinä alkuun :). En nimittäin onnistunut soveltamaan tuota koodivinkkiä, jonka mainitsin.

Deewiant [14.04.2006 17:04:22]

#

Mode 13h on ainakin se yleensä haettu näyttötila.

http://en.wikipedia.org/wiki/Mode_13h
http://www.gamedev.net/reference/articles/article315.asp

Metabolix [14.04.2006 17:16:22]

#

DOS-kääntäjistä löytyy tyypillisesti dos.h, josta löytyy intdos-funktio DOSin 0x21-keskeytystä varten ja int86-funktio yleisesti keskeytyksiä varten. Google kertoo näistä lisää. Tietyillä rekistereillä ja tietyllä keskeytyksellä pääsee oikeaan näyttötilaan. Sen jälkeen onnistuu kirjoittaminen ruudulle tunkemalla tavaraa osoitteesta A000:0000 eteenpäin seuraavan 64000 tavun matkalle. Etäosoittimen saa usein aikaan MK_FP-makrolla, jos oikein muistan, ja siitä pääsee sitten normaalisti osoitimen tapaan jatkamaan.
char far * ruutu = MK_FP(0xa000, 0);

Toinen vaihtoehto on disp.h, josta löytyy näille valmiita funktioita.

Hyvä sivusto, vaikka hieman virheitä olikin: http://www.digitalmars.com/rtl/

Minulla olisi tästä kaikesta muistaakseni peräti esimerkki (Turbo C:llä), mutta kun tuo toinen kone on nyt pois pelistä, niin en pääse sitä kaivamaan. Pascalilla tuo voisi mennä melkein ulkomuistista. Mutta Google auttaa kyllä.

Baglair [14.04.2006 17:19:37]

#

Voithan yrittää tehdä jotain pientä esimerkiksi windowsin omalla debuggerilla.
Tässä on erittäin hyvä käytännön opas alkuun, jos haluaa nähdä heti tuloksia (aivan sivun alaosasta löytyy hyvä esimerkki, jota en tosin ole testannut, mutta näyttäisi toimivalta): http://www.everything2.com/index.pl?node_id­=1160812

astu [14.04.2006 19:28:57]

#

ihan turhaa. et sä oikeasti tommosia halua, menee nimittäin turhan hankalaks.
en ihmettelis vaikka moni nykyinen näytönohjain ei edes tukisi tuollaista tilaa.
ja dos-keskeytyksistä ei paljon iloa ola muilla käyttiksillä

Grey [15.04.2006 01:41:45]

#

astu kirjoitti:

en ihmettelis vaikka moni nykyinen näytönohjain ei edes tukisi tuollaista tilaa.

Kyllä sitä vielä moni näytönohjain, jopa hyvinkin epästardardit, tukevat vanhoja stardardeja. Tekstitila on vanha stardardi, ja tuntuupi siltä että monesta ohjaimesta löytyy tuki jopa cga:lle. Eli vanhat dos-stardardit eivät ole ongelma. Ongelmia tulee vasta kun koettaa käyttää vga:n jälkeen ilmestyneitä tiloja, kuten vesa ja muut.

Ainoa tapaus jossa 320x200 on tuottanut ongelmia, on johtunut siitä että kyseinen tila ei ole ollut oikeasti dosin 320x200, vaan DirectX:n tai vastaavan. 320x240 on sen sijaan ollut ongelmaton. Seikka jonka vuoksi kiroankin aina jos peli käyttää 320x200 tilaa vaikka DirectX:n kautta, eikä anna valita mitään toista tilaa, paitsi ehkä toisen joka ei toimi, eli 640x400.

Eli stardardit toimivat edelleenkin, niiden matkiminen ei. Jos haluaa olla varma toiminnasta, kannattaa kokeilla stardardeja. Toimivat vähintäänkin emulaattorin kautta, joskus jopa hyvinkin ongelmitta ja mahdollisesti nopeammin kuin epästardardit viritykset.

astu kirjoitti:

ja dos-keskeytyksistä ei paljon iloa ola muilla käyttiksillä

Sitten ajetaan moisia emulaattorin kautta. Näin sitä toimivat ainakin nostalgiaan hurahtaneet. Ei moisia haittaa edes se että peli on suunniteltu ihan eri laitteelle. Siinä vain etsitään sitten emulaattori joka saa pelin toimimaan. Vai miten luulet minun itseni pelanneen viimeaikoina vanhoja nes-pelejä ilman kyseistä laatikkoa?..

-Grey-

Puhveli [19.04.2006 18:14:42]

#

Kiitos kaikille, etenkin Greyn viesti piristi ^_^. Päädyin loppujen lopuksi kuitenkin käyttämään SDL:ää, silläkin saa näköjään tehtyä kiitettävän nopeasti haluamassani tilassa pyörivän ohjelman.


Sivun alkuun

Vastaus

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

Tietoa sivustosta