Kirjautuminen

Haku

Tehtävät

Keskustelu: Koodit: C: SVGA

Sivun loppuun

Jaska [22.10.2003 23:00:18]

#

Pieni ohjelma, joka piirtää pikseleitä 1024x768x255 tilaan.

#include <conio.h>
#include <stdlib.h>

const int MAXX=1024;
const int MAXY=768;
const int COLORS=255;

void setsvga() {
    asm mov ax,0x4f02;
    asm mov bx,0x105;
    asm int 0x10;
}

void settext(void) {
    asm mov ax,0x0003;
    asm int 0x10;
}

void putpixel(unsigned int x,unsigned int y,unsigned char color) {
    asm mov ah,0x0c;
    asm mov al,color;
    asm mov cx,x;
    asm mov dx,y;
    asm mov bx,0x01;
    asm int 0x10;
}

int main() {
    setsvga();
    randomize();
    do {
	putpixel(random(MAXX),
		 random(MAXY),
		 random(COLORS));
    }
    while(!kbhit());
    settext();
    return 0;
}

rndprogy [22.10.2003 23:25:47]

#

Tarkkaa työtä (heh)

thefox [23.10.2003 12:50:03]

#

1024x768x255? Ehkä 1024x768x256 :-) Melko suppea esimerkki, sinänsä ok, mutta käytännön hyötyä tuosta tuskin monellekaan on, sen verran hidasta pikseleiden piirtely yksitellen keskeytyksellä on. Lisäksi olisit voinut mainita mille kääntäjälle tämä on tarkoitettu, randomize() ja random() taisivat olla Borland kamaa, eli ilmeisesti Turbo C.

Poy [08.01.2004 14:41:46]

#

Yritin muuttaa ton toimimaan visual c++:lla mutta tuli ongelmia. Tämmöinen koodi:

#include <conio.h>
#include <stdlib.h>

const int MAXX=1024;
const int MAXY=768;
const int COLORS=255;

void setsvga() {
    __asm {
		mov ax,0x4f02;
		mov bx,0x105;
		int 0x10;
	}
}

void settext(void) {
    __asm {
		mov ax,0x0003;
		int 0x10;
	}
}

void putpixel(unsigned int x,unsigned int y,unsigned char color) {
    __asm {
		mov ah,0x0c;
		mov al,color;
		mov ecx,x;
		mov edx,y;
		mov bx,0x01;
		int 0x10;
	}
}

int main() {
    setsvga();
    do {
    putpixel(rand()%MAXX,
         rand()%MAXY,
         rand()%COLORS);
    }
    while(!kbhit());
    settext();
    return 0;
}

debugguksessa jämähtää tonne setsvga funktioon int 0x10 riville. Mites pitäisi korjata? Oikeastaan en tiedä hirveästi mitä tuossa funktiossa tehdään, mutta kiinnostaisi tietää.

Olli Vanhoja [14.02.2004 13:54:01]

#

Minulle tuosta oli hyötyä :-)

hunajavohveli [10.04.2004 15:33:37]

#

Tuossa ilmeisesti tarvitaan Assembly, että noi asm-komennot toimii...?

Jtm [15.01.2005 12:01:49]

#

Poy sanoi:
"debugguksessa jämähtää tonne setsvga funktioon int 0x10 riville. Mites pitäisi korjata? Oikeastaan en tiedä hirveästi mitä tuossa funktiossa tehdään, mutta kiinnostaisi tietää."
>Se jämähtää sinne, koska Visual C++ kääntäjä on tietääkseni 32 bittinen, minkä takia keskeytyksiä (int) ei voi käyttää.

hunajavohveli sanoi:
"Tuossa ilmeisesti tarvitaan Assembly, että noi asm-komennot toimii...?"
>Tietenkin tarvitaan. Esim. Visual C++ ja tietty muissakin kääntäjissä on sisäisesti oma asmi kääntäjä.

hohoo [21.07.2005 22:08:33]

#

 C:\c++\svga\main.cpp In function `void setsvga()':
9 C:\c++\svga\main.cpp syntax error before `ax'
 C:\c++\svga\main.cpp In function `void settext()':
15 C:\c++\svga\main.cpp syntax error before `ax'
 C:\c++\svga\main.cpp In function `void putpixel(unsigned int, unsigned int, unsigned char) ':
20 C:\c++\svga\main.cpp syntax error before `ah'
 C:\c++\svga\main.cpp In function `int main()':
30 C:\c++\svga\main.cpp `randomize' undeclared (first use this function)
  (Each undeclared identifier is reported only once for each  function it appears in.)
32 C:\c++\svga\main.cpp `random' undeclared (first use this function)
 C:\c++\svga\Makefile.win [Build Error]  [main.o] Error 1

Dev-C++

Puhveli [14.04.2006 12:40:08]

#

Tällasta olenki jo vähän etsiskellyt. Mitenkäs muut näyttötilat?

moptim [30.01.2007 08:51:23]

#

Ehkä 1024*768*32 on se näyttötila (laske 2256) :P
EDIT: päätin pistää pikku satunnaislukugeneraattorin, jossa random palauttaa liukuluvun väliltä 0-1.

int seed;

void randomize(int number);
float random();

void randomize(int number) {
  seed = number;
}

float random() {
  return ((seed - 29 * 7 + 67 / 23 + 2003 * 201) % 500000) / 500000;
}

EDIT2: nyt tajusin, 256 väriä (voisit ilmoittaa: 1024*768*8)

Dain [30.07.2007 16:47:42]

#

mielenkiintonen


Sivun alkuun

Vastaus

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

Tietoa sivustosta