Navigointi
Etusivu
PhpSysInfo
~sami/
Blogi
vnstat
Ladattavaa
Virityksiä
Muuta
Linkkejä
Monsujen tappopeli
Vieraskirja
Chat
|
|
Grafiikkaa ilman kirjastoja
#define COLS 80
void printtxt(unsigned char row, unsigned char col, unsigned char *str, unsigned char color, unsigned char __far *dest) { unsigned char __far *destptr = (char __far*)&dest[(row*COLS+col)*2]; while(*str) { *destptr++=*str++; *destptr++=color; } }
unsigned int abs(int num) { return ((num<0)?(-num):(num)); }
void put_pixel(unsigned int x, unsigned int y, unsigned char color, unsigned char __far *dest) { dest[(y<<8)+(y<<6)+x] = color; }
void video_mode(unsigned char mode) { __asm { mov ah, 0x00 mov al, mode int 0x10 } }
void wait_refresh(void) { __asm { mov dx, 0x03da jump1: in al, dx test al, 0x08 jnz jump1 jump2: in al, dx test al, 0x08 jz jump2 } }
void draw_line(unsigned int x0, unsigned int y0, unsigned int x1, unsigned int y1, unsigned char color, unsigned char __far *dest) { int dx=x1-x0; int dy=y1-y0; unsigned int n,a=0; unsigned int absdx,absdy;
absdx=abs(dx); absdy=abs(dy);
put_pixel(x0,y0,color,dest); if(absdx>absdy) for(n=absdx;n--;a+=absdy) { if(a>=absdx) { if(dy>0)y0++; else y0--; a-=absdx; } if(dx>0)x0++; else x0--; put_pixel(x0,y0,color,dest); } else if(absdx<absdy) for(n=absdy;n--;a+=absdx) { if(a>=absdy) { if(dx>0)x0++; else x0--; a-=absdy; } if(dy>0)y0++; else y0--; put_pixel(x0,y0,color,dest); } else for(n=absdx;n--;) { if(dx>0)x0++; else x0--; if(dy>0)y0++; else y0--; put_pixel(x0,y0,color,dest); } }
void main() { unsigned char __far *vgatxtbuff = (unsigned char __far*)0xB0008000L; unsigned char __far *vgagbuff = (unsigned char __far*)0xA0000000L;
unsigned int x=0; unsigned int y=0; unsigned long l; unsigned char m=0x03;
video_mode(0x13);
while(m--) { for(y=0;y<200;y++) { draw_line(0, 0, 319, y, m, vgagbuff); wait_refresh(); } for(x=319;x;x--) { draw_line(0, 0, x, 199, m, vgagbuff); wait_refresh(); } }
video_mode(0x03); printtxt(0, 0, "The end!", 0x30, vgatxtbuff); }
Yllä oleva ohjelmakoodi vaihtaa näyttötilaksi VGA:n näyttötilan 0x13 (256 väriä, 320x200 pikseliä) ja piirtää näytölle viivoja.
Ohjelman suoritus on synkattu näytön virkistystaajuuteen, joka kyseisessä näyttötilassa on 70 hertsiä. Ohjelmakoodi kääntyy Watcomilla sellaisenaan
.COM-päätteiseksi flättibinääriksi. Ehkäpä tässä olisi hyvä pohja johonkin mahdollisimman pieneen binäärin kokoon pyrkivään demoon?
|